diff --git a/packages/ui/components.json b/packages/ui/components.json new file mode 100644 index 00000000000..96755d34bcc --- /dev/null +++ b/packages/ui/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": false, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + }, + "iconLibrary": "lucide" +} \ No newline at end of file diff --git a/packages/ui/package.json b/packages/ui/package.json index 7af3bf3b987..258a2441600 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -15,17 +15,19 @@ "@emotion/react": "^11.10.6", "@emotion/styled": "^11.10.6", "@microsoft/fetch-event-source": "^2.0.1", - "@mui/base": "5.0.0-beta.40", + "@mui/base": "5.0.0-beta.68", "@mui/icons-material": "5.0.3", "@mui/lab": "5.0.0-alpha.156", "@mui/material": "5.15.0", "@mui/x-data-grid": "6.8.0", + "@radix-ui/react-slot": "^1.1.1", "@tabler/icons-react": "^3.3.0", "@uiw/codemirror-theme-sublime": "^4.21.21", "@uiw/codemirror-theme-vscode": "^4.21.21", "@uiw/react-codemirror": "^4.21.21", "axios": "1.6.2", - "clsx": "^1.1.1", + "class-variance-authority": "^0.7.1", + "clsx": "^1.2.1", "dotenv": "^16.0.0", "flowise-embed": "latest", "flowise-embed-react": "latest", @@ -57,6 +59,8 @@ "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", "socket.io-client": "^4.6.1", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", "uuid": "^9.0.1", "yup": "^0.32.9" }, @@ -91,10 +95,13 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^12.8.3", "@vitejs/plugin-react": "^4.2.0", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.49", "pretty-quick": "^3.1.3", "react-scripts": "^5.0.1", "rimraf": "^5.0.5", "sass": "^1.42.1", + "tailwindcss": "^3.4.17", "typescript": "^5.4.5", "vite": "^5.0.2", "vite-plugin-pwa": "^0.17.0", diff --git a/packages/ui/postcss.config.js b/packages/ui/postcss.config.js new file mode 100644 index 00000000000..33ad091d26d --- /dev/null +++ b/packages/ui/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/packages/ui/src/components/ui/badge.jsx b/packages/ui/src/components/ui/badge.jsx new file mode 100644 index 00000000000..2723d4499a3 --- /dev/null +++ b/packages/ui/src/components/ui/badge.jsx @@ -0,0 +1,31 @@ +import PropTypes from 'prop-types' +import { cva } from 'class-variance-authority' + +import { cn } from '@/lib/utils' + +const badgeVariants = cva( + 'inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + { + variants: { + variant: { + default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80', + secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80', + destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80', + outline: 'text-foreground' + } + }, + defaultVariants: { + variant: 'default' + } + } +) + +const Badge = ({ className, variant, ...props }) => { + return
+} +Badge.propTypes = { + className: PropTypes.string, + variant: PropTypes.oneOf(['default', 'secondary', 'destructive', 'outline']) +} + +export { Badge, badgeVariants } diff --git a/packages/ui/src/components/ui/button.jsx b/packages/ui/src/components/ui/button.jsx new file mode 100644 index 00000000000..b1a7473cf6d --- /dev/null +++ b/packages/ui/src/components/ui/button.jsx @@ -0,0 +1,44 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { Button as BaseButton } from '@mui/base' +import { cva } from 'class-variance-authority' + +import { cn } from '@/lib/utils' + +const buttonVariants = cva( + 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90', + outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground', + link: 'text-primary underline-offset-4 hover:underline' + }, + size: { + default: 'h-10 px-4 py-2', + sm: 'h-9 rounded-md px-3', + lg: 'h-11 rounded-md px-8', + icon: 'h-10 w-10' + } + }, + defaultVariants: { + variant: 'default', + size: 'default' + } + } +) + +const Button = React.forwardRef(({ className, variant, size, ...props }, ref) => { + return +}) +Button.displayName = 'Button' +Button.propTypes = { + ...BaseButton.propTypes, + size: PropTypes.oneOf(['default', 'sm', 'lg', 'icon']), + variant: PropTypes.oneOf(['default', 'destructive', 'outline', 'secondary', 'ghost', 'link']) +} + +export { Button, buttonVariants } diff --git a/packages/ui/src/components/ui/card.jsx b/packages/ui/src/components/ui/card.jsx new file mode 100644 index 00000000000..1e92df024a9 --- /dev/null +++ b/packages/ui/src/components/ui/card.jsx @@ -0,0 +1,52 @@ +import * as React from 'react' +import PropTypes from 'prop-types' + +import { cn } from '@/lib/utils' + +const Card = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +Card.displayName = 'Card' +Card.propTypes = { + className: PropTypes.string +} + +const CardHeader = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +CardHeader.displayName = 'CardHeader' +CardHeader.propTypes = { + className: PropTypes.string +} + +const CardTitle = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +CardTitle.displayName = 'CardTitle' +CardTitle.propTypes = { + className: PropTypes.string +} + +const CardDescription = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +CardDescription.displayName = 'CardDescription' +CardDescription.propTypes = { + className: PropTypes.string +} + +const CardContent = React.forwardRef(({ className, ...props }, ref) =>
) +CardContent.displayName = 'CardContent' +CardContent.propTypes = { + className: PropTypes.string +} + +const CardFooter = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +CardFooter.displayName = 'CardFooter' +CardFooter.propTypes = { + className: PropTypes.string +} + +export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } diff --git a/packages/ui/src/components/ui/checkbox.jsx b/packages/ui/src/components/ui/checkbox.jsx new file mode 100644 index 00000000000..53454657ccd --- /dev/null +++ b/packages/ui/src/components/ui/checkbox.jsx @@ -0,0 +1,44 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { Checkbox as MUICheckbox } from '@mui/material' +import { IconCheck } from '@tabler/icons-react' +import { cn } from '@/lib/utils' + +const Checkbox = React.forwardRef(({ className, ...props }, ref) => { + return ( + } + checkedIcon={ + + + + } + className={cn( + 'p-0 hover:bg-transparent data-[state=checked]:bg-primary', + 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2', + 'disabled:cursor-not-allowed disabled:opacity-50', + className + )} + {...props} + /> + ) +}) + +Checkbox.propTypes = { + checked: PropTypes.bool, + disabled: PropTypes.bool, + id: PropTypes.string, + required: PropTypes.bool, + name: PropTypes.string, + value: PropTypes.string, + className: PropTypes.string, + onChange: PropTypes.func, + indeterminate: PropTypes.bool, + size: PropTypes.oneOf(['small', 'medium', 'large']), + labelPlacement: PropTypes.oneOf(['end', 'start', 'top', 'bottom']) +} + +Checkbox.displayName = 'Checkbox' + +export { Checkbox } diff --git a/packages/ui/src/components/ui/dialog.jsx b/packages/ui/src/components/ui/dialog.jsx new file mode 100644 index 00000000000..c5b421542fd --- /dev/null +++ b/packages/ui/src/components/ui/dialog.jsx @@ -0,0 +1,117 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { useSelector } from 'react-redux' +import { Modal } from '@mui/base/Modal' +import { IconX } from '@tabler/icons-react' + +import { cn } from '@/lib/utils' + +const Backdrop = React.forwardRef((props, ref) => { + const { className, ...other } = props + return ( +
+ ) +}) +Backdrop.displayName = 'Backdrop' +Backdrop.propTypes = { + className: PropTypes.string +} + +const Dialog = React.forwardRef((props, ref) => { + const { open, onClose, children, ...other } = props + const customization = useSelector((state) => state.customization) + return ( + + {children} + + ) +}) +Dialog.displayName = 'Dialog' +Dialog.propTypes = { + open: PropTypes.bool, + onClose: PropTypes.func, + children: PropTypes.node +} + +const DialogContent = React.forwardRef(({ className, children, onClose, ...props }, ref) => ( +
+ {children} + {onClose && ( + + )} +
+)) +DialogContent.displayName = 'DialogContent' +DialogContent.propTypes = { + className: PropTypes.string, + children: PropTypes.node, + onClose: PropTypes.func +} + +const DialogHeader = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +DialogHeader.displayName = 'DialogHeader' +DialogHeader.propTypes = { + className: PropTypes.string +} + +const DialogFooter = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +DialogFooter.displayName = 'DialogFooter' +DialogFooter.propTypes = { + className: PropTypes.string +} + +const DialogTitle = React.forwardRef(({ className, ...props }, ref) => ( +

+ {props.children} +

+)) +DialogTitle.displayName = 'DialogTitle' +DialogTitle.propTypes = { + children: PropTypes.node, + className: PropTypes.string +} + +const DialogDescription = React.forwardRef(({ className, ...props }, ref) => ( +

+)) +DialogDescription.displayName = 'DialogDescription' +DialogDescription.propTypes = { + className: PropTypes.string +} + +export { Dialog, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription } diff --git a/packages/ui/src/components/ui/dropdown-menu.jsx b/packages/ui/src/components/ui/dropdown-menu.jsx new file mode 100644 index 00000000000..a224a75fc61 --- /dev/null +++ b/packages/ui/src/components/ui/dropdown-menu.jsx @@ -0,0 +1,226 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { useSelector } from 'react-redux' +import { Popper } from '@mui/base/Popper' +import { Button } from './button' +import { Checkbox } from './checkbox' +import { cn } from '@/lib/utils' + +const DropdownMenuContext = React.createContext({}) + +const DropdownMenu = React.forwardRef(({ children }, ref) => { + const [open, setOpen] = React.useState(false) + const [anchorEl, setAnchorEl] = React.useState(null) + const [trigger, setTrigger] = React.useState(null) + + const handleClose = React.useCallback(() => { + setOpen(false) + setAnchorEl(null) + }, []) + + React.useEffect(() => { + if (!open) return + + function handleClickOutside(event) { + if (trigger && !trigger.contains(event.target) && anchorEl && !anchorEl.contains(event.target)) { + handleClose() + } + } + + window.addEventListener('click', handleClickOutside) + return () => window.removeEventListener('click', handleClickOutside) + }, [open, anchorEl, trigger, handleClose]) + + return ( + +

{children}
+ + ) +}) +DropdownMenu.displayName = 'DropdownMenu' +DropdownMenu.propTypes = { + children: PropTypes.node +} + +const DropdownMenuTrigger = React.forwardRef(({ className, children, ...props }, ref) => { + const { setOpen, setAnchorEl, setTrigger } = React.useContext(DropdownMenuContext) + const triggerRef = React.useRef(null) + + React.useEffect(() => { + setTrigger(triggerRef.current) + }, [setTrigger]) + + const handleClick = (event) => { + setAnchorEl((prev) => (prev ? null : event.currentTarget)) + setOpen((prev) => !prev) + if (props.onClick) { + props.onClick(event) + } + } + + return ( + + ) +}) +DropdownMenuTrigger.displayName = 'DropdownMenuTrigger' +DropdownMenuTrigger.propTypes = { + ...Button.propTypes +} + +const DropdownMenuContent = React.forwardRef( + ({ className, children, side = 'bottom', sideOffset = 4, align = 'start', alignOffset = 0, ...props }, ref) => { + const { open, anchorEl } = React.useContext(DropdownMenuContext) + const customization = useSelector((state) => state.customization) + + return ( + +
+ {children} +
+
+ ) + } +) +DropdownMenuContent.displayName = 'DropdownMenuContent' +DropdownMenuContent.propTypes = { + className: PropTypes.string, + children: PropTypes.node, + side: PropTypes.oneOf(['top', 'right', 'bottom', 'left']), + sideOffset: PropTypes.number, + align: PropTypes.oneOf(['start', 'center', 'end']), + alignOffset: PropTypes.number +} + +const DropdownMenuItem = React.forwardRef(({ className, inset, children, ...props }, ref) => { + const { onClose } = React.useContext(DropdownMenuContext) + + return ( + + ) +}) +DropdownMenuItem.displayName = 'DropdownMenuItem' +DropdownMenuItem.propTypes = { + ...Button.propTypes, + inset: PropTypes.bool +} + +const DropdownMenuCheckboxItem = React.forwardRef(({ className, children, checked, onCheckedChange, onClick, ...props }, ref) => { + return ( + + ) +}) +DropdownMenuCheckboxItem.displayName = 'DropdownMenuCheckboxItem' +DropdownMenuCheckboxItem.propTypes = { + checked: PropTypes.bool, + children: PropTypes.node, + className: PropTypes.string, + onCheckedChange: PropTypes.func, + onClick: PropTypes.func +} + +const DropdownMenuLabel = React.forwardRef(({ className, inset, ...props }, ref) => ( +
+)) +DropdownMenuLabel.displayName = 'DropdownMenuLabel' +DropdownMenuLabel.propTypes = { + className: PropTypes.string, + inset: PropTypes.bool +} + +const DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => ( +
+)) +DropdownMenuSeparator.displayName = 'DropdownMenuSeparator' +DropdownMenuSeparator.propTypes = { + className: PropTypes.string +} + +const DropdownMenuShortcut = ({ className, ...props }) => { + return +} +DropdownMenuShortcut.displayName = 'DropdownMenuShortcut' +DropdownMenuShortcut.propTypes = { + className: PropTypes.string +} + +export { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuTrigger +} diff --git a/packages/ui/src/components/ui/input.jsx b/packages/ui/src/components/ui/input.jsx new file mode 100644 index 00000000000..f6ab3ac968a --- /dev/null +++ b/packages/ui/src/components/ui/input.jsx @@ -0,0 +1,145 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { Input as BaseInput } from '@mui/base' +import { TextareaAutosize } from '@mui/base/TextareaAutosize' +import { cva } from 'class-variance-authority' +import { cn } from '@/lib/utils' + +// Moved border and background styles to wrapper variant +const wrapperVariants = cva( + 'flex relative rounded-md border border-input bg-background ring-offset-background focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', + { + variants: { + variant: { + outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80' + }, + size: { + default: 'min-h-10', + sm: 'min-h-9', + lg: 'min-h-11' + } + }, + defaultVariants: { + size: 'default' + } + } +) + +// Input variants without border and background styles +const inputVariants = cva( + 'w-full bg-transparent px-3 py-2 text-base placeholder:text-muted-foreground file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none disabled:cursor-not-allowed md:text-sm', + { + variants: { + variant: { + outline: 'text-foreground', + secondary: 'text-secondary-foreground' + } + }, + defaultVariants: { + variant: 'outline' + } + } +) + +const Input = React.forwardRef( + ( + { + autoFocus = false, + className, + wrapperClassName, + multiline = false, + minRows = 1, + maxRows, + size = 'default', + type, + variant = 'outline', + startAdornment, + endAdornment, + shortcut, + disabled, + ...props + }, + ref + ) => { + const baseInputClassName = cn(inputVariants({ variant }), className) + const baseWrapperClassName = cn(wrapperVariants({ variant, size }), disabled && 'opacity-50', wrapperClassName) + + const renderShortcut = shortcut && ( + + {shortcut} + + ) + + const combinedEndAdornment = ( + <> + {endAdornment} + {renderShortcut} + + ) + + if (multiline) { + return ( +
+ {startAdornment &&
{startAdornment}
} + + {(endAdornment || shortcut) && ( +
+ {endAdornment} + {renderShortcut} +
+ )} +
+ ) + } + + return ( + {startAdornment}
} + endAdornment={(endAdornment || shortcut) &&
{combinedEndAdornment}
} + slotProps={{ + input: { + className: baseInputClassName + } + }} + {...props} + /> + ) + } +) + +Input.displayName = 'Input' + +Input.propTypes = { + ...BaseInput.propTypes, + shortcut: PropTypes.string, + size: PropTypes.oneOf(['default', 'sm', 'lg']), + multiline: PropTypes.bool, + minRows: PropTypes.number, + maxRows: PropTypes.number, + variant: PropTypes.oneOf(['outline', 'secondary']), + className: PropTypes.string, + wrapperClassName: PropTypes.string, + type: PropTypes.string, + autoFocus: PropTypes.bool, + startAdornment: PropTypes.node, + endAdornment: PropTypes.node, + disabled: PropTypes.bool +} + +export { Input } diff --git a/packages/ui/src/components/ui/select.jsx b/packages/ui/src/components/ui/select.jsx new file mode 100644 index 00000000000..65ef9f954c0 --- /dev/null +++ b/packages/ui/src/components/ui/select.jsx @@ -0,0 +1,233 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { useSelector } from 'react-redux' +import { ClickAwayListener } from '@mui/base/ClickAwayListener' +import { Select as BaseSelect } from '@mui/base/Select' +import { Option as BaseOption } from '@mui/base/Option' +import { OptionGroup as BaseOptionGroup } from '@mui/base/OptionGroup' +import { IconCheck, IconChevronDown } from '@tabler/icons-react' +import { cn } from '@/lib/utils' +import { Button } from './button' + +const Select = React.forwardRef(function CustomSelect( + { className, children, value, defaultValue, onValueChange, placeholder = 'Select an option', size = 'default', ...props }, + ref +) { + const customization = useSelector((state) => state.customization) + const [open, setOpen] = React.useState(false) + const triggerRef = React.useRef(null) + const [triggerWidth, setTriggerWidth] = React.useState('auto') + + const handleChange = (event, newValue) => { + onValueChange?.(newValue) + setOpen(false) + } + + React.useEffect(() => { + if (triggerRef.current) { + setTriggerWidth(`${triggerRef.current.offsetWidth}px`) + } + }, []) + + return ( + setOpen(false)}> +
+ setOpen(isOpen)} + slots={{ + root: SelectTrigger + }} + slotProps={{ + root: () => ({ + placeholder, + size, + ref: triggerRef + }), + listbox: () => ({ + className: cn( + customization.isDarkMode ? 'dark' : '', + 'relative z-50 my-2 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 max-h-96 p-1' + ), + style: { width: triggerWidth } + }), + popup: () => ({ + className: 'z-50', + modifiers: [ + { + name: 'offset', + options: { + offset: [0, 4] + } + } + ] + }) + }} + renderValue={(option) => option?.label || option?.value} + highlightedIndex={defaultValue || value ? undefined : -1} + > + {children} + +
+
+ ) +}) +Select.propTypes = { + className: PropTypes.string, + children: PropTypes.node, + value: PropTypes.any, + defaultValue: PropTypes.any, + onValueChange: PropTypes.func, + placeholder: PropTypes.string, + size: PropTypes.oneOf(['default', 'sm', 'lg']) +} + +const SelectTrigger = React.forwardRef(function SelectTrigger(props, ref) { + const { ownerState, className, placeholder, size = 'default', ...other } = props + + const displayValue = !ownerState.value ? ( + {placeholder} + ) : ( + ownerState.label || props.children || ownerState.value + ) + + return ( + + ) +}) +SelectTrigger.propTypes = { + children: PropTypes.node, + className: PropTypes.string, + placeholder: PropTypes.string, + size: PropTypes.oneOf(['default', 'sm', 'lg']), + ownerState: PropTypes.object.isRequired +} +SelectTrigger.displayName = 'SelectTrigger' + +const SelectItem = React.forwardRef(({ children, ...props }, ref) => { + return ( + + {children} + + ) +}) +SelectItem.displayName = 'Option' +SelectItem.propTypes = { + children: PropTypes.node +} + +const SelectItemRoot = React.forwardRef(({ className, children, ownerState, ...props }, ref) => { + const { selected, disabled, highlighted } = ownerState || {} + + return ( +
  • + + {selected && } + + {children} +
  • + ) +}) +SelectItemRoot.propTypes = { + className: PropTypes.string, + children: PropTypes.node, + ownerState: PropTypes.shape({ + selected: PropTypes.bool, + disabled: PropTypes.bool, + highlighted: PropTypes.bool + }) +} +SelectItemRoot.displayName = 'SelectItemRoot' + +const SelectGroup = React.forwardRef(({ className, children, ...props }, ref) => { + return ( + + {children} + + ) +}) +SelectGroup.propTypes = { + className: PropTypes.string, + children: PropTypes.node +} +SelectGroup.displayName = 'SelectGroup' + +const SelectGroupRoot = React.forwardRef(({ className, children, ...props }, ref) => { + return ( +
  • + {children} +
  • + ) +}) +SelectGroupRoot.propTypes = { + className: PropTypes.string, + children: PropTypes.node +} +SelectGroupRoot.displayName = 'SelectGroupRoot' + +const SelectGroupLabel = React.forwardRef(({ className, children, ...props }, ref) => { + return ( + + {children} + + ) +}) +SelectGroupLabel.propTypes = { + className: PropTypes.string, + children: PropTypes.node +} +SelectGroupLabel.displayName = 'SelectGroupLabel' + +export { Select, SelectGroup, SelectItem } diff --git a/packages/ui/src/components/ui/sidebar.jsx b/packages/ui/src/components/ui/sidebar.jsx new file mode 100644 index 00000000000..21d6d0b4c3d --- /dev/null +++ b/packages/ui/src/components/ui/sidebar.jsx @@ -0,0 +1,634 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { Slot } from '@radix-ui/react-slot' +import { cva } from 'class-variance-authority' +import { Drawer, Skeleton as MuiSkeleton, Divider, Tooltip } from '@mui/material' + +import { useIsMobile } from '@/hooks/use-mobile' +import { cn } from '@/lib/utils' +import { Button } from './button' +import { Input } from './input' + +import { IconLayoutSidebar } from '@tabler/icons-react' + +const SIDEBAR_COOKIE_NAME = 'sidebar:state' +const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 +export const SIDEBAR_WIDTH = '16rem' +const SIDEBAR_WIDTH_MOBILE = '18rem' +export const SIDEBAR_WIDTH_ICON = '3.5rem' +const SIDEBAR_KEYBOARD_SHORTCUT = 'b' + +const SidebarContext = React.createContext(null) + +function useSidebar() { + const context = React.useContext(SidebarContext) + if (!context) { + throw new Error('useSidebar must be used within a SidebarProvider.') + } + + return context +} + +const SidebarProvider = React.forwardRef( + ({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }, ref) => { + const isMobile = useIsMobile() + const [openMobile, setOpenMobile] = React.useState(false) + + // This is the internal state of the sidebar. + // We use openProp and setOpenProp for control from outside the component. + const [_open, _setOpen] = React.useState(defaultOpen) + const open = openProp ?? _open + const setOpen = React.useCallback( + (value) => { + const openState = typeof value === 'function' ? value(open) : value + if (setOpenProp) { + setOpenProp(openState) + } else { + _setOpen(openState) + } + + // This sets the cookie to keep the sidebar state. + document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}` + }, + [setOpenProp, open] + ) + + // Helper to toggle the sidebar. + const toggleSidebar = React.useCallback(() => { + return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open) + }, [isMobile, setOpen, setOpenMobile]) + + // Adds a keyboard shortcut to toggle the sidebar. + React.useEffect(() => { + const handleKeyDown = (event) => { + if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) { + event.preventDefault() + toggleSidebar() + } + } + + window.addEventListener('keydown', handleKeyDown) + return () => window.removeEventListener('keydown', handleKeyDown) + }, [toggleSidebar]) + + // We add a state so that we can do data-state="expanded" or "collapsed". + // This makes it easier to style the sidebar with Tailwind classes. + const state = open ? 'expanded' : 'collapsed' + + const contextValue = React.useMemo( + () => ({ + state, + open, + setOpen, + isMobile, + openMobile, + setOpenMobile, + toggleSidebar + }), + [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar] + ) + + return ( + +
    + {children} +
    +
    + ) + } +) +SidebarProvider.displayName = 'SidebarProvider' +SidebarProvider.propTypes = { + children: PropTypes.node, + className: PropTypes.string, + defaultOpen: PropTypes.bool, + open: PropTypes.bool, + onOpenChange: PropTypes.func, + style: PropTypes.object +} + +const Sidebar = React.forwardRef( + ({ side = 'left', variant = 'sidebar', collapsible = 'offcanvas', className, children, ...props }, ref) => { + const { isMobile, state, openMobile, setOpenMobile } = useSidebar() + + if (collapsible === 'none') { + return ( +
    + {children} +
    + ) + } + + if (isMobile) { + return ( + setOpenMobile(false)} + anchor={side} + {...props} + classes={{ + paper: cn('w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground', '[&>button]:hidden') + }} + sx={{ + '& .MuiDrawer-paper': { + width: 'var(--sidebar-width)', + '--sidebar-width': SIDEBAR_WIDTH_MOBILE + } + }} + > +
    {children}
    +
    + ) + } + + return ( +
    + {/* This handles the sidebar gap on desktop */} +
    + +
    + ) + } +) +Sidebar.displayName = 'Sidebar' +Sidebar.propTypes = { + children: PropTypes.node, + className: PropTypes.string, + collapsible: PropTypes.oneOf(['none', 'offcanvas', 'icon']), + side: PropTypes.oneOf(['left', 'right']), + style: PropTypes.object, + variant: PropTypes.oneOf(['sidebar', 'floating', 'inset']) +} + +const SidebarTrigger = React.forwardRef(({ className, onClick, ...props }, ref) => { + const { toggleSidebar } = useSidebar() + + return ( + + ) +}) +SidebarTrigger.displayName = 'SidebarTrigger' +SidebarTrigger.propTypes = { + className: PropTypes.string, + onClick: PropTypes.func +} + +const SidebarRail = React.forwardRef(({ className, ...props }, ref) => { + const { toggleSidebar } = useSidebar() + + return ( + + ) +}) + +ToggleGroupItem.displayName = 'ToggleGroupItem' +ToggleGroupItem.propTypes = { + className: PropTypes.string, + children: PropTypes.node, + value: PropTypes.string.isRequired, + disabled: PropTypes.bool, + variant: PropTypes.oneOf(['default', 'ghost']), + size: PropTypes.oneOf(['default', 'sm', 'lg']) +} + +export { ToggleGroup, ToggleGroupItem } diff --git a/packages/ui/src/components/ui/toggle.jsx b/packages/ui/src/components/ui/toggle.jsx new file mode 100644 index 00000000000..6d2a43a487d --- /dev/null +++ b/packages/ui/src/components/ui/toggle.jsx @@ -0,0 +1,71 @@ +import * as React from 'react' +import PropTypes from 'prop-types' +import { Button } from './button' +import { cva } from 'class-variance-authority' + +import { cn } from '@/lib/utils' + +const toggleVariants = cva( + 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground hover:bg-primary/90', + outline: 'border border-input bg-transparent hover:bg-accent hover:text-accent-foreground', + secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground' + }, + size: { + default: 'h-10 px-4 py-2', + sm: 'h-9 rounded-md px-3', + lg: 'h-11 rounded-md px-8', + icon: 'h-10 w-10' + } + }, + defaultVariants: { + variant: 'default', + size: 'default' + } + } +) + +const Toggle = React.forwardRef(({ className, variant, size, ...props }, ref) => { + const [pressed, setPressed] = React.useState(props.defaultPressed ?? false) + + React.useEffect(() => { + if (typeof props.pressed !== 'undefined') { + setPressed(props.pressed) + } + }, [props.pressed]) + + const handleToggleChange = () => { + setPressed(!pressed) + props.onPressedChange?.(!pressed) + } + + return ( + + ) +}) + +Toggle.displayName = 'Toggle' +Toggle.propTypes = { + ...Button.propTypes, + defaultPressed: PropTypes.bool, + pressed: PropTypes.bool, + onPressedChange: PropTypes.func, + size: PropTypes.oneOf(['default', 'sm', 'lg', 'icon']), + variant: PropTypes.oneOf(['default', 'outline', 'secondary', 'ghost']) +} + +export { Toggle, toggleVariants } diff --git a/packages/ui/src/hooks/use-mobile.jsx b/packages/ui/src/hooks/use-mobile.jsx new file mode 100644 index 00000000000..918b1ac3ed7 --- /dev/null +++ b/packages/ui/src/hooks/use-mobile.jsx @@ -0,0 +1,25 @@ +import { useState, useEffect } from 'react' + +const MOBILE_BREAKPOINT = 768 + +export function useIsMobile() { + const [isMobile, setIsMobile] = useState(undefined) + + useEffect(() => { + const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`) + + const onChange = () => { + setIsMobile(mql.matches) + } + + // Set initial value + setIsMobile(mql.matches) + + // Modern way to add listener + mql.addListener(onChange) + + return () => mql.removeListener(onChange) + }, []) + + return Boolean(isMobile) +} diff --git a/packages/ui/src/hooks/useSearchShortcut.jsx b/packages/ui/src/hooks/useSearchShortcut.jsx index fedff244c54..a82cec2edfd 100644 --- a/packages/ui/src/hooks/useSearchShortcut.jsx +++ b/packages/ui/src/hooks/useSearchShortcut.jsx @@ -12,12 +12,12 @@ const useSearchShorcut = (inputRef) => { const handleKeyDown = (event) => { if ((isMac && event.metaKey && event.key === 'f') || (!isMac && event.ctrlKey && event.key === 'f')) { event.preventDefault() - component.focus() + component.querySelector('input').focus() } } const handleInputEscape = (event) => { - if (event.key === 'Escape') component.blur() + if (event.key === 'Escape') component.querySelector('input').blur() } component.addEventListener('keydown', handleInputEscape) diff --git a/packages/ui/src/index.css b/packages/ui/src/index.css new file mode 100644 index 00000000000..f3da295b76b --- /dev/null +++ b/packages/ui/src/index.css @@ -0,0 +1,107 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + + --primary: 240 5.9% 10%; + --primary-foreground: 0 0% 98%; + + --secondary: 240 4.8% 95.9%; + --secondary-foreground: 240 5.9% 10%; + + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 240 10% 3.9%; + + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + + --radius: 0.5rem; + + --sidebar-background: 0 0% 98%; + --sidebar-foreground: 240 5.3% 26.1%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; + } + .dark { + /* TODO: switch to this background later */ + /* --background: 220 11% 11%; */ + --background: 240 10% 3.9%; + --foreground: 0 0% 98%; + + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + + --primary: 0 0% 98%; + --primary-foreground: 240 5.9% 10%; + + --secondary: 240 3.7% 15.9%; + --secondary-foreground: 0 0% 98%; + + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 240 4.9% 83.9%; + + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + + --sidebar-background: 240 5.9% 10%; + --sidebar-foreground: 240 4.8% 95.9%; + --sidebar-primary: 0 0% 98%; + --sidebar-primary-foreground: 240 5.9% 10%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; + } +} +@layer base { + * { + @apply box-border; + } + body, + .main { + @apply bg-background text-foreground; + } +} diff --git a/packages/ui/src/index.jsx b/packages/ui/src/index.jsx index bf2d49b0e1e..f53b34a7470 100644 --- a/packages/ui/src/index.jsx +++ b/packages/ui/src/index.jsx @@ -5,6 +5,7 @@ import { createRoot } from 'react-dom/client' // style + assets import '@/assets/scss/style.scss' +import './index.css' // third party import { BrowserRouter } from 'react-router-dom' diff --git a/packages/ui/src/layout/MainLayout/AppSidebar.jsx b/packages/ui/src/layout/MainLayout/AppSidebar.jsx new file mode 100644 index 00000000000..84c5e137fe3 --- /dev/null +++ b/packages/ui/src/layout/MainLayout/AppSidebar.jsx @@ -0,0 +1,61 @@ +import { + Sidebar, + SidebarContent, + SidebarGroup, + SidebarGroupContent, + SidebarGroupLabel, + SidebarHeader, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + useSidebar +} from '@/components/ui/sidebar' +import { Link, useLocation } from 'react-router-dom' + +import items from '@/menu-items/dashboard' +import Logo from '@/ui-component/extended/Logo' +import { Badge } from '@/components/ui/badge' + +export function AppSidebar() { + const location = useLocation() + const { state } = useSidebar() + + return ( + + + {state !== 'collapsed' && } + + + {items.children.map((child, index) => ( + + {child.title && {child.title}} + + + {child.children.map((item) => ( + + span]:hidden' : ''}`} + isActive={ + item.id === 'chatflows' + ? location.pathname === '/' || location.pathname === item.url + : location.pathname === item.url || location.pathname.startsWith(item.url) + } + tooltip={item.title} + > + + + {item.title} + {item.isBeta && BETA} + + + + ))} + + + + ))} + + + ) +} diff --git a/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx b/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx index 5caec1463cb..cbe90774281 100644 --- a/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx +++ b/packages/ui/src/layout/MainLayout/Header/ProfileSection/index.jsx @@ -3,44 +3,40 @@ import { exportData, stringify } from '@/utils/exportImport' import useNotifier from '@/utils/useNotifier' import PropTypes from 'prop-types' import { useEffect, useRef, useState } from 'react' -import { useDispatch, useSelector } from 'react-redux' +import { useDispatch } from 'react-redux' import { createPortal } from 'react-dom' +import { useNavigate } from 'react-router-dom' // material-ui +import { Box, Typography, Stack, FormControlLabel, Checkbox } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { - Avatar, - Box, - Button, - ButtonBase, - ClickAwayListener, - Divider, - List, - ListItemButton, - ListItemIcon, - ListItemText, - Paper, - Popper, - Typography, - Dialog, - DialogTitle, - DialogContent, - Stack, - FormControlLabel, - Checkbox, - DialogActions -} from '@mui/material' -import { useTheme } from '@mui/material/styles' - -// third-party -import PerfectScrollbar from 'react-perfect-scrollbar' + DropdownMenu, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu' // project imports -import MainCard from '@/ui-component/cards/MainCard' import AboutDialog from '@/ui-component/dialog/AboutDialog' -import Transitions from '@/ui-component/extended/Transitions' // assets -import { IconFileExport, IconFileUpload, IconInfoCircle, IconLogout, IconSettings, IconX } from '@tabler/icons-react' +import { + IconFileExport, + IconFileUpload, + IconInfoCircle, + IconLogout, + IconSettings, + IconX, + IconBook, + IconArrowUpRight, + IconUsers +} from '@tabler/icons-react' import './index.css' import ExportingGIF from '@/assets/images/Exporting.gif' @@ -50,7 +46,6 @@ import exportImportApi from '@/api/exportimport' // Hooks import useApi from '@/hooks/useApi' import { getErrorMessage } from '@/utils/errorHandler' -import { useNavigate } from 'react-router-dom' const dataToExport = ['Chatflows', 'Agentflows', 'Tools', 'Variables', 'Assistants'] @@ -71,18 +66,11 @@ const ExportDialog = ({ show, onCancel, onExport }) => { }, [show]) const component = show ? ( - - - {!isExporting ? 'Select Data to Export' : 'Exporting..'} - + + + {!isExporting ? 'Select Data to Export' : 'Exporting..'} + {!isExporting && ( {dataToExport.map((data, index) => ( @@ -123,22 +111,24 @@ const ExportDialog = ({ show, onCancel, onExport }) => {
    )} + {!isExporting && ( + + + + + )} - {!isExporting && ( - - - - - )} ) : null @@ -153,11 +143,7 @@ ExportDialog.propTypes = { // ==============================|| PROFILE MENU ||============================== // -const ProfileSection = ({ username, handleLogout }) => { - const theme = useTheme() - - const customization = useSelector((state) => state.customization) - +const ProfileSection = ({ handleLogout, username, versionData }) => { const [open, setOpen] = useState(false) const [aboutDialogOpen, setAboutDialogOpen] = useState(false) const [exportDialogOpen, setExportDialogOpen] = useState(false) @@ -178,17 +164,6 @@ const ProfileSection = ({ username, handleLogout }) => { const enqueueSnackbar = (...args) => dispatch(enqueueSnackbarAction(...args)) const closeSnackbar = (...args) => dispatch(closeSnackbarAction(...args)) - const handleClose = (event) => { - if (anchorRef.current && anchorRef.current.contains(event.target)) { - return - } - setOpen(false) - } - - const handleToggle = () => { - setOpen((prevOpen) => !prevOpen) - } - const errorFailed = (message) => { enqueueSnackbar({ message: message, @@ -315,130 +290,74 @@ const ProfileSection = ({ username, handleLogout }) => { return ( <> - - - - - - - {({ TransitionProps }) => ( - - - - - {username && ( - - - {username} - - - )} - - - - - { - setExportDialogOpen(true) - }} - > - - - - Export} /> - - { - importAll() - }} - > - - - - Import} /> - - - { - setOpen(false) - setAboutDialogOpen(true) - }} - > - - - - About Flowise} /> - - {localStorage.getItem('username') && localStorage.getItem('password') && ( - - - - - Logout} /> - - )} - - - - - - - - )} - + + + + + + {username && ( + <> + + + {username} + + + + + )} + { + setExportDialogOpen(true) + }} + > + + Export + + { + importAll() + }} + > + + Import + + + + + + Community + + + + + + + Documentation + + + + { + setOpen(false) + setAboutDialogOpen(true) + }} + > + + About + {versionData?.currentVersion && {`v${versionData?.currentVersion}`}} + + {localStorage.getItem('username') && localStorage.getItem('password') && ( + <> + + + + Logout + + + )} + + + setAboutDialogOpen(false)} /> setExportDialogOpen(false)} onExport={(data) => onExport(data)} /> @@ -446,8 +365,9 @@ const ProfileSection = ({ username, handleLogout }) => { } ProfileSection.propTypes = { + handleLogout: PropTypes.func, username: PropTypes.string, - handleLogout: PropTypes.func + versionData: PropTypes.object } export default ProfileSection diff --git a/packages/ui/src/layout/MainLayout/Header/index.jsx b/packages/ui/src/layout/MainLayout/Header/index.jsx index 53d6402bdf2..2d8b744b368 100644 --- a/packages/ui/src/layout/MainLayout/Header/index.jsx +++ b/packages/ui/src/layout/MainLayout/Header/index.jsx @@ -1,79 +1,36 @@ import PropTypes from 'prop-types' import { useSelector, useDispatch } from 'react-redux' -import { useState } from 'react' +import { useEffect, useState } from 'react' import { useNavigate } from 'react-router-dom' +import axios from 'axios' // material-ui -import { useTheme } from '@mui/material/styles' -import { Avatar, Box, ButtonBase, Switch } from '@mui/material' -import { styled } from '@mui/material/styles' +import { Box } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' // project imports -import LogoSection from '../LogoSection' import ProfileSection from './ProfileSection' // assets -import { IconMenu2 } from '@tabler/icons-react' +import { IconSunFilled, IconMoonFilled, IconLayoutSidebar } from '@tabler/icons-react' // store import { SET_DARKMODE } from '@/store/actions' +import { baseURL } from '@/store/constant' +import { Toggle } from '@/components/ui/toggle' // ==============================|| MAIN NAVBAR / HEADER ||============================== // -const MaterialUISwitch = styled(Switch)(({ theme }) => ({ - width: 62, - height: 34, - padding: 7, - '& .MuiSwitch-switchBase': { - margin: 1, - padding: 0, - transform: 'translateX(6px)', - '&.Mui-checked': { - color: '#fff', - transform: 'translateX(22px)', - '& .MuiSwitch-thumb:before': { - backgroundImage: `url('data:image/svg+xml;utf8,')` - }, - '& + .MuiSwitch-track': { - opacity: 1, - backgroundColor: theme.palette.mode === 'dark' ? '#8796A5' : '#aab4be' - } - } - }, - '& .MuiSwitch-thumb': { - backgroundColor: theme.palette.mode === 'dark' ? '#003892' : '#001e3c', - width: 32, - height: 32, - '&:before': { - content: "''", - position: 'absolute', - width: '100%', - height: '100%', - left: 0, - top: 0, - backgroundRepeat: 'no-repeat', - backgroundPosition: 'center', - backgroundImage: `url('data:image/svg+xml;utf8,')` - } - }, - '& .MuiSwitch-track': { - opacity: 1, - backgroundColor: theme.palette.mode === 'dark' ? '#8796A5' : '#aab4be', - borderRadius: 20 / 2 - } -})) - -const Header = ({ handleLeftDrawerToggle }) => { - const theme = useTheme() +const Header = ({ handleSidebarToggle }) => { const navigate = useNavigate() const customization = useSelector((state) => state.customization) const [isDark, setIsDark] = useState(customization.isDarkMode) + const [versionData, setVersionData] = useState(null) + const dispatch = useDispatch() const changeDarkMode = () => { @@ -89,52 +46,59 @@ const Header = ({ handleLeftDrawerToggle }) => { navigate(0) } + useEffect(() => { + const username = localStorage.getItem('username') + const password = localStorage.getItem('password') + + const config = {} + if (username && password) { + config.auth = { + username, + password + } + config.headers = { + 'Content-type': 'application/json', + 'x-request-from': 'internal' + } + } + const latestReleaseReq = axios.get('https://api.github.com/repos/FlowiseAI/Flowise/releases/latest') + const currentVersionReq = axios.get(`${baseURL}/api/v1/version`, { ...config }) + + Promise.all([latestReleaseReq, currentVersionReq]) + .then(([latestReleaseData, currentVersionData]) => { + const finalData = { + ...latestReleaseData.data, + currentVersion: currentVersionData.data.version + } + setVersionData(finalData) + }) + .catch((error) => { + console.error('Error fetching data:', error) + }) + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + return ( <> - {/* logo & toggler button */} - - - - - - - - - + + - - - + + + {isDark ? : } + + + ) } Header.propTypes = { - handleLeftDrawerToggle: PropTypes.func + handleSidebarToggle: PropTypes.func } export default Header diff --git a/packages/ui/src/layout/MainLayout/Sidebar/index.jsx b/packages/ui/src/layout/MainLayout/Sidebar/index.jsx index 5d1908c8b28..23d82bdc883 100644 --- a/packages/ui/src/layout/MainLayout/Sidebar/index.jsx +++ b/packages/ui/src/layout/MainLayout/Sidebar/index.jsx @@ -71,7 +71,8 @@ const Sidebar = ({ drawerOpen, drawerToggle, window }) => { sx={{ '& .MuiDrawer-paper': { width: drawerWidth, - background: theme.palette.background.default, + // backgroundColor: theme.palette.background.default, + backgroundColor: 'transparent', color: theme.palette.text.primary, [theme.breakpoints.up('md')]: { top: `${headerHeight}px` diff --git a/packages/ui/src/layout/MainLayout/ViewHeader.jsx b/packages/ui/src/layout/MainLayout/ViewHeader.jsx index 91d4a8ff870..ed047a9a02c 100644 --- a/packages/ui/src/layout/MainLayout/ViewHeader.jsx +++ b/packages/ui/src/layout/MainLayout/ViewHeader.jsx @@ -2,12 +2,14 @@ import PropTypes from 'prop-types' import { useRef } from 'react' // material-ui -import { IconButton, Box, OutlinedInput, Toolbar, Typography } from '@mui/material' -import { useTheme } from '@mui/material/styles' +import { IconButton, Box, Toolbar, Typography } from '@mui/material' import { StyledFab } from '@/ui-component/button/StyledFab' +// components +import { Input } from '@/components/ui/input' + // icons -import { IconSearch, IconArrowLeft, IconEdit } from '@tabler/icons-react' +import { IconArrowLeft, IconEdit } from '@tabler/icons-react' import useSearchShorcut from '@/hooks/useSearchShortcut' import { getOS } from '@/utils/genericHelper' @@ -15,11 +17,10 @@ import { getOS } from '@/utils/genericHelper' const os = getOS() const isMac = os === 'macos' const isDesktop = isMac || os === 'windows' || os === 'linux' -const keyboardShortcut = isMac ? '[ ⌘ + F ]' : '[ Ctrl + F ]' +const keyboardShortcut = isMac ? '⌘ F' : 'Ctrl F' const ViewHeader = ({ children, - filters = null, onSearchChange, search, searchPlaceholder = 'Search', @@ -30,7 +31,6 @@ const ViewHeader = ({ isEditButton, onEdit }) => { - const theme = useTheme() const searchInputRef = useRef() useSearchShorcut(searchInputRef) @@ -53,9 +53,8 @@ const ViewHeader = ({ )} {description && ( )} - + {search && ( - - - - } - type='search' + placeholder={`${searchPlaceholder}`} + ref={searchInputRef} + shortcut={isDesktop ? keyboardShortcut : null} + size='sm' /> )} - {filters} {children} @@ -137,7 +110,6 @@ const ViewHeader = ({ ViewHeader.propTypes = { children: PropTypes.node, - filters: PropTypes.node, onSearchChange: PropTypes.func, search: PropTypes.bool, searchPlaceholder: PropTypes.string, diff --git a/packages/ui/src/layout/MainLayout/index.jsx b/packages/ui/src/layout/MainLayout/index.jsx index 236d27c97be..670999fe1c4 100644 --- a/packages/ui/src/layout/MainLayout/index.jsx +++ b/packages/ui/src/layout/MainLayout/index.jsx @@ -8,9 +8,15 @@ import { AppBar, Box, CssBaseline, Toolbar, useMediaQuery } from '@mui/material' // project imports import Header from './Header' -import Sidebar from './Sidebar' -import { drawerWidth, headerHeight } from '@/store/constant' +// import Sidebar from './Sidebar' +import { headerHeight } from '@/store/constant' import { SET_MENU } from '@/store/actions' +import { + SIDEBAR_WIDTH, + // SIDEBAR_WIDTH_ICON, + SidebarProvider +} from '@/components/ui/sidebar' +import { AppSidebar } from './AppSidebar' // styles const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ theme, open }) => ({ @@ -25,17 +31,17 @@ const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ }), marginRight: 0, [theme.breakpoints.up('md')]: { - marginLeft: -drawerWidth, - width: `calc(100% - ${drawerWidth}px)` + marginLeft: -SIDEBAR_WIDTH, + width: `calc(100% - ${SIDEBAR_WIDTH}px)` }, [theme.breakpoints.down('md')]: { marginLeft: '20px', - width: `calc(100% - ${drawerWidth}px)`, + width: `calc(100% - ${SIDEBAR_WIDTH}px)`, padding: '16px' }, [theme.breakpoints.down('sm')]: { marginLeft: '10px', - width: `calc(100% - ${drawerWidth}px)`, + width: `calc(100% - ${SIDEBAR_WIDTH}px)`, padding: '16px', marginRight: '10px' } @@ -50,7 +56,7 @@ const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ marginRight: 0, borderBottomLeftRadius: 0, borderBottomRightRadius: 0, - width: `calc(100% - ${drawerWidth}px)` + width: `calc(100% - ${SIDEBAR_WIDTH}px)` }) })) @@ -58,13 +64,14 @@ const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(({ const MainLayout = () => { const theme = useTheme() + const customization = useSelector((state) => state.customization) const matchDownMd = useMediaQuery(theme.breakpoints.down('lg')) // Handle left drawer - const leftDrawerOpened = useSelector((state) => state.customization.opened) + const sidebarOpen = useSelector((state) => state.customization.opened) const dispatch = useDispatch() - const handleLeftDrawerToggle = () => { - dispatch({ type: SET_MENU, opened: !leftDrawerOpened }) + const handleSidebarToggle = () => { + dispatch({ type: SET_MENU, opened: !sidebarOpen }) } useEffect(() => { @@ -73,31 +80,46 @@ const MainLayout = () => { }, [matchDownMd]) return ( - + - {/* header */} - - -
    - - - {/* drawer */} - + {/* */} + + {/* sidebar */} + - {/* main content */} -
    - -
    + {/* header */} + + +
    + + + + {/* main content */} +
    + +
    + ) } diff --git a/packages/ui/src/layout/MinimalLayout/index.jsx b/packages/ui/src/layout/MinimalLayout/index.jsx index 0982616fdff..1e963b061bb 100644 --- a/packages/ui/src/layout/MinimalLayout/index.jsx +++ b/packages/ui/src/layout/MinimalLayout/index.jsx @@ -1,11 +1,19 @@ import { Outlet } from 'react-router-dom' +import { useSelector } from 'react-redux' + +// material-ui +import { Box } from '@mui/material' // ==============================|| MINIMAL LAYOUT ||============================== // -const MinimalLayout = () => ( - <> - - -) +const MinimalLayout = () => { + const customization = useSelector((state) => state.customization) + + return ( + + + + ) +} export default MinimalLayout diff --git a/packages/ui/src/lib/utils.js b/packages/ui/src/lib/utils.js new file mode 100644 index 00000000000..b20bf017182 --- /dev/null +++ b/packages/ui/src/lib/utils.js @@ -0,0 +1,6 @@ +import { clsx } from "clsx"; +import { twMerge } from "tailwind-merge" + +export function cn(...inputs) { + return twMerge(clsx(inputs)); +} diff --git a/packages/ui/src/menu-items/dashboard.js b/packages/ui/src/menu-items/dashboard.js index d4d8d108a31..1f141087190 100644 --- a/packages/ui/src/menu-items/dashboard.js +++ b/packages/ui/src/menu-items/dashboard.js @@ -22,77 +22,84 @@ const dashboard = { type: 'group', children: [ { - id: 'chatflows', - title: 'Chatflows', - type: 'item', - url: '/chatflows', - icon: icons.IconHierarchy, - breadcrumbs: true - }, - { - id: 'agentflows', - title: 'Agentflows', - type: 'item', - url: '/agentflows', - icon: icons.IconUsersGroup, - breadcrumbs: true, - isBeta: true - }, - { - id: 'assistants', - title: 'Assistants', - type: 'item', - url: '/assistants', - icon: icons.IconRobot, - breadcrumbs: true - }, - { - id: 'marketplaces', - title: 'Marketplaces', - type: 'item', - url: '/marketplaces', - icon: icons.IconBuildingStore, - breadcrumbs: true - }, - { - id: 'tools', - title: 'Tools', - type: 'item', - url: '/tools', - icon: icons.IconTool, - breadcrumbs: true - }, - { - id: 'credentials', - title: 'Credentials', - type: 'item', - url: '/credentials', - icon: icons.IconLock, - breadcrumbs: true - }, - { - id: 'variables', - title: 'Variables', - type: 'item', - url: '/variables', - icon: icons.IconVariable, - breadcrumbs: true - }, - { - id: 'apikey', - title: 'API Keys', - type: 'item', - url: '/apikey', - icon: icons.IconKey, - breadcrumbs: true - }, - { - id: 'document-stores', - title: 'Document Stores', - type: 'item', - url: '/document-stores', - icon: icons.IconFiles, - breadcrumbs: true + id: 'primary', + title: '', + type: 'group', + children: [ + { + id: 'chatflows', + title: 'Chatflows', + type: 'item', + url: '/chatflows', + icon: icons.IconHierarchy, + breadcrumbs: true + }, + { + id: 'agentflows', + title: 'Agentflows', + type: 'item', + url: '/agentflows', + icon: icons.IconUsersGroup, + breadcrumbs: true, + isBeta: true + }, + { + id: 'assistants', + title: 'Assistants', + type: 'item', + url: '/assistants', + icon: icons.IconRobot, + breadcrumbs: true + }, + { + id: 'marketplace', + title: 'Marketplace', + type: 'item', + url: '/marketplace', + icon: icons.IconBuildingStore, + breadcrumbs: true + }, + { + id: 'tools', + title: 'Tools', + type: 'item', + url: '/tools', + icon: icons.IconTool, + breadcrumbs: true + }, + { + id: 'credentials', + title: 'Credentials', + type: 'item', + url: '/credentials', + icon: icons.IconLock, + breadcrumbs: true + }, + { + id: 'variables', + title: 'Variables', + type: 'item', + url: '/variables', + icon: icons.IconVariable, + breadcrumbs: true + }, + { + id: 'apikey', + title: 'API Keys', + type: 'item', + url: '/apikey', + icon: icons.IconKey, + breadcrumbs: true + }, + { + id: 'document-stores', + title: 'Document Stores', + type: 'item', + url: '/document-stores', + icon: icons.IconFiles, + breadcrumbs: true + } + ] } ] } diff --git a/packages/ui/src/routes/MainRoutes.jsx b/packages/ui/src/routes/MainRoutes.jsx index ad60cb77565..2139c377cf1 100644 --- a/packages/ui/src/routes/MainRoutes.jsx +++ b/packages/ui/src/routes/MainRoutes.jsx @@ -58,7 +58,7 @@ const MainRoutes = { element: }, { - path: '/marketplaces', + path: '/marketplace', element: }, { diff --git a/packages/ui/src/store/constant.js b/packages/ui/src/store/constant.js index de700ebe12d..5ba0a3d318c 100644 --- a/packages/ui/src/store/constant.js +++ b/packages/ui/src/store/constant.js @@ -1,5 +1,5 @@ // constant -export const gridSpacing = 3 +export const gridSpacing = 2 export const drawerWidth = 260 export const appDrawerWidth = 320 export const headerHeight = 80 diff --git a/packages/ui/src/ui-component/button/FlowListMenu.jsx b/packages/ui/src/ui-component/button/FlowListMenu.jsx index f633655974a..92d500bdc03 100644 --- a/packages/ui/src/ui-component/button/FlowListMenu.jsx +++ b/packages/ui/src/ui-component/button/FlowListMenu.jsx @@ -2,24 +2,17 @@ import { useState } from 'react' import { useDispatch } from 'react-redux' import PropTypes from 'prop-types' -import { styled, alpha } from '@mui/material/styles' -import Menu from '@mui/material/Menu' -import MenuItem from '@mui/material/MenuItem' -import EditIcon from '@mui/icons-material/Edit' -import Divider from '@mui/material/Divider' -import FileCopyIcon from '@mui/icons-material/FileCopy' -import FileDownloadIcon from '@mui/icons-material/Downloading' -import FileDeleteIcon from '@mui/icons-material/Delete' -import FileCategoryIcon from '@mui/icons-material/Category' -import PictureInPictureAltIcon from '@mui/icons-material/PictureInPictureAlt' -import ThumbsUpDownOutlinedIcon from '@mui/icons-material/ThumbsUpDownOutlined' -import VpnLockOutlinedIcon from '@mui/icons-material/VpnLockOutlined' -import MicNoneOutlinedIcon from '@mui/icons-material/MicNoneOutlined' -import ExportTemplateOutlinedIcon from '@mui/icons-material/BookmarksOutlined' import Button from '@mui/material/Button' -import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown' import { IconX } from '@tabler/icons-react' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu' + import chatflowsApi from '@/api/chatflows' import useApi from '@/hooks/useApi' @@ -37,42 +30,21 @@ import ChatFeedbackDialog from '../dialog/ChatFeedbackDialog' import AllowedDomainsDialog from '../dialog/AllowedDomainsDialog' import SpeechToTextDialog from '../dialog/SpeechToTextDialog' import ExportAsTemplateDialog from '@/ui-component/dialog/ExportAsTemplateDialog' - -const StyledMenu = styled((props) => ( - -))(({ theme }) => ({ - '& .MuiPaper-root': { - borderRadius: 6, - marginTop: theme.spacing(1), - minWidth: 180, - boxShadow: - 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px', - '& .MuiMenu-list': { - padding: '4px 0' - }, - '& .MuiMenuItem-root': { - '& .MuiSvgIcon-root': { - fontSize: 18, - color: theme.palette.text.secondary, - marginRight: theme.spacing(1.5) - }, - '&:active': { - backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity) - } - } - } -})) +import { + IconDotsVertical, + IconPencil, + IconCopy, + IconBookmarks, + IconPictureInPicture, + IconFileExport, + IconWorldStar, + IconMicrophone, + IconCategory, + IconSettings, + IconTrash +} from '@tabler/icons-react' +import { IconThumbUp } from '@tabler/icons-react' +import { IconThumbDown } from '@tabler/icons-react' export default function FlowListMenu({ chatflow, isAgentCanvas, setError, updateFlowsApi }) { const { confirm } = useConfirm() @@ -86,8 +58,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update const [flowDialogOpen, setFlowDialogOpen] = useState(false) const [categoryDialogOpen, setCategoryDialogOpen] = useState(false) const [categoryDialogProps, setCategoryDialogProps] = useState({}) - const [anchorEl, setAnchorEl] = useState(null) - const open = Boolean(anchorEl) const [conversationStartersDialogOpen, setConversationStartersDialogOpen] = useState(false) const [conversationStartersDialogProps, setConversationStartersDialogProps] = useState({}) const [chatFeedbackDialogOpen, setChatFeedbackDialogOpen] = useState(false) @@ -101,22 +71,13 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update const [exportTemplateDialogProps, setExportTemplateDialogProps] = useState({}) const title = isAgentCanvas ? 'Agents' : 'Chatflow' - - const handleClick = (event) => { - setAnchorEl(event.currentTarget) - } - - const handleClose = () => { - setAnchorEl(null) - } + const view = localStorage.getItem('flowDisplayStyle') || 'card' const handleFlowRename = () => { - setAnchorEl(null) setFlowDialogOpen(true) } const handleFlowStarterPrompts = () => { - setAnchorEl(null) setConversationStartersDialogProps({ title: 'Starter Prompts - ' + chatflow.name, chatflow: chatflow @@ -125,7 +86,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleExportTemplate = () => { - setAnchorEl(null) setExportTemplateDialogProps({ chatflow: chatflow }) @@ -133,7 +93,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleFlowChatFeedback = () => { - setAnchorEl(null) setChatFeedbackDialogProps({ title: 'Chat Feedback - ' + chatflow.name, chatflow: chatflow @@ -142,7 +101,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleAllowedDomains = () => { - setAnchorEl(null) setAllowedDomainsDialogProps({ title: 'Allowed Domains - ' + chatflow.name, chatflow: chatflow @@ -151,7 +109,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleSpeechToText = () => { - setAnchorEl(null) setSpeechToTextDialogProps({ title: 'Speech To Text - ' + chatflow.name, chatflow: chatflow @@ -160,6 +117,7 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const saveFlowRename = async (chatflowName) => { + setFlowDialogOpen(false) const updateBody = { name: chatflowName, chatflow @@ -186,7 +144,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleFlowCategory = () => { - setAnchorEl(null) if (chatflow.category) { setCategoryDialogProps({ category: chatflow.category.split(';') @@ -225,10 +182,9 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleDelete = async () => { - setAnchorEl(null) const confirmPayload = { - title: `Delete`, - description: `Delete ${title} ${chatflow.name}?`, + title: `Are you sure?`, + description: `This action cannot be undone. This will permanently delete the ${title.toLowerCase()} ${chatflow.name}?`, confirmButtonName: 'Delete', cancelButtonName: 'Cancel' } @@ -258,7 +214,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleDuplicate = () => { - setAnchorEl(null) try { localStorage.setItem('duplicatedFlowData', chatflow.flowData) window.open(`${uiBaseURL}/${isAgentCanvas ? 'agentcanvas' : 'canvas'}`, '_blank') @@ -268,7 +223,6 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } const handleExport = () => { - setAnchorEl(null) try { const flowData = JSON.parse(chatflow.flowData) let dataStr = JSON.stringify(generateExportFlowData(flowData), null, 2) @@ -288,70 +242,59 @@ export default function FlowListMenu({ chatflow, isAgentCanvas, setError, update } return ( -
    - - - - - Rename - - - - Duplicate - - - - Export - - - - Save As Template - - - - - Starter Prompts - - - - Chat Feedback - - - - Allowed Domains - - - - Speech To Text - - - - Update Category - - - - - Delete - - + <> + + + {view === 'card' ? : } + + + + + Rename + + + + Duplicate + + + + Export + + + + Save As Template + + + + + Starter Prompts + + + + + + + Chat Feedback + + + + Allowed Domains + + + + Speech To Text + + + + Update Category + + + + + Delete + + + setExportTemplateDialogOpen(false)} /> )} -
    + ) } diff --git a/packages/ui/src/ui-component/cards/DocumentStoreCard.jsx b/packages/ui/src/ui-component/cards/DocumentStoreCard.jsx index 8021bbeade6..c13e9ca6a50 100644 --- a/packages/ui/src/ui-component/cards/DocumentStoreCard.jsx +++ b/packages/ui/src/ui-component/cards/DocumentStoreCard.jsx @@ -2,34 +2,17 @@ import PropTypes from 'prop-types' import { useSelector } from 'react-redux' // material-ui -import { styled } from '@mui/material/styles' -import { Box, Grid, Typography, useTheme } from '@mui/material' +import { Box, Typography, useTheme } from '@mui/material' import { IconVectorBezier2, IconLanguage, IconScissors } from '@tabler/icons-react' +// components +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' + // project imports -import MainCard from '@/ui-component/cards/MainCard' import DocumentStoreStatus from '@/views/docstore/DocumentStoreStatus' import { kFormatter } from '@/utils/genericHelper' - -const CardWrapper = styled(MainCard)(({ theme }) => ({ - background: theme.palette.card.main, - color: theme.darkTextPrimary, - overflow: 'auto', - position: 'relative', - boxShadow: '0 2px 14px 0 rgb(32 40 45 / 8%)', - cursor: 'pointer', - '&:hover': { - background: theme.palette.card.hover, - boxShadow: '0 2px 14px 0 rgb(32 40 45 / 20%)' - }, - height: '100%', - minHeight: '160px', - maxHeight: '300px', - width: '100%', - overflowWrap: 'break-word', - whiteSpace: 'pre-line' -})) +import { Badge } from '@/components/ui/badge' // ===========================|| DOC STORE CARD ||=========================== // @@ -38,148 +21,88 @@ const DocumentStoreCard = ({ data, images, onClick }) => { const customization = useSelector((state) => state.customization) return ( - - - - -
    - + + + + {data.name} + + + + {data.description && ( + + {data.description} + + )} + + + + + + {data.whereUsed?.length ?? 0} {data.whereUsed?.length <= 1 ? 'flow' : 'flows'} + + + + {kFormatter(data.totalChars ?? 0)} chars + + + + {kFormatter(data.totalChunks ?? 0)} chunks + + + {images && images.length > 0 && ( + + {images.slice(0, images.length > 3 ? 3 : images.length).map((img) => ( + - {data.name} + + + ))} + {images.length > 3 && ( + + + {images.length - 3} More - -
    - - {data.description || ' '} - + )}
    - -
    - - {data.whereUsed?.length ?? 0} {data.whereUsed?.length <= 1 ? 'flow' : 'flows'} -
    -
    - - {kFormatter(data.totalChars ?? 0)} chars -
    -
    - - {kFormatter(data.totalChunks ?? 0)} chunks -
    -
    - {images && images.length > 0 && ( - - {images.slice(0, images.length > 3 ? 3 : images.length).map((img) => ( - - - - ))} - {images.length > 3 && ( - - + {images.length - 3} More - - )} - - )} -
    -
    -
    + )} + + ) } diff --git a/packages/ui/src/ui-component/cards/ItemCard.jsx b/packages/ui/src/ui-component/cards/ItemCard.jsx index d51f5feadeb..6febe5407be 100644 --- a/packages/ui/src/ui-component/cards/ItemCard.jsx +++ b/packages/ui/src/ui-component/cards/ItemCard.jsx @@ -2,30 +2,11 @@ import PropTypes from 'prop-types' import { useSelector } from 'react-redux' // material-ui -import { styled } from '@mui/material/styles' import { Box, Grid, Typography, useTheme } from '@mui/material' -// project imports -import MainCard from '@/ui-component/cards/MainCard' - -const CardWrapper = styled(MainCard)(({ theme }) => ({ - background: theme.palette.card.main, - color: theme.darkTextPrimary, - overflow: 'auto', - position: 'relative', - boxShadow: '0 2px 14px 0 rgb(32 40 45 / 8%)', - cursor: 'pointer', - '&:hover': { - background: theme.palette.card.hover, - boxShadow: '0 2px 14px 0 rgb(32 40 45 / 20%)' - }, - height: '100%', - minHeight: '160px', - maxHeight: '300px', - width: '100%', - overflowWrap: 'break-word', - whiteSpace: 'pre-line' -})) +// components +import { Badge } from '@/components/ui/badge' +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' // ===========================|| CONTRACT CARD ||=========================== // @@ -34,78 +15,55 @@ const ItemCard = ({ data, images, onClick }) => { const customization = useSelector((state) => state.customization) return ( - - - - -
    + {data.badge && ( + + + {data.badge} + + + )} + + + {data.iconSrc && icon} + {!data.iconSrc && data.color && ( + - {data.iconSrc && ( -
    - )} - {!data.iconSrc && data.color && ( -
    - )} - - {data.templateName || data.name} - -
    - {data.description && ( - - {data.description} - - )} -
    + /> + )} + + {data.templateName || data.name} + + + {data.description && ( + + {data.description} + + )} + + + {images && ( { ))} {images.length > 3 && ( - + + {images.length - 3} More )}
    )} - -
    + + ) } diff --git a/packages/ui/src/ui-component/dialog/AboutDialog.jsx b/packages/ui/src/ui-component/dialog/AboutDialog.jsx index 3812e999828..c82fb905022 100644 --- a/packages/ui/src/ui-component/dialog/AboutDialog.jsx +++ b/packages/ui/src/ui-component/dialog/AboutDialog.jsx @@ -1,15 +1,17 @@ -import { createPortal } from 'react-dom' import { useState, useEffect } from 'react' import PropTypes from 'prop-types' -import { Dialog, DialogContent, DialogTitle, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, Paper } from '@mui/material' +import { Box, Divider } from '@mui/material' +import { Dialog, DialogContent } from '@/components/ui/dialog' import moment from 'moment' import axios from 'axios' import { baseURL } from '@/store/constant' +import Logo from '../extended/Logo' +import { Button } from '@/components/ui/button' const AboutDialog = ({ show, onCancel }) => { - const portalElement = document.getElementById('portal') - const [data, setData] = useState({}) + const currentVersion = data?.currentVersion + const latestVersion = data?.name?.replace('flowise@', '') useEffect(() => { if (show) { @@ -46,50 +48,31 @@ const AboutDialog = ({ show, onCancel }) => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [show]) - const component = show ? ( - - - Flowise Version - - - {data && ( - - - - - Current Version - Latest Version - Published At - - - - - - {data.currentVersion} - - - - {data.name} - - - {moment(data.published_at).fromNow()} - - -
    -
    - )} + return ( + + + + + + {`v${currentVersion}`} + + + + {`${ + currentVersion !== latestVersion + ? `FlowiseAI v${latestVersion} is now available.` + : `You're on the latest version.` + } Published ${moment(data.published_at).fromNow()}.`} + + + + + - ) : null - - return createPortal(component, portalElement) + ) } AboutDialog.propTypes = { diff --git a/packages/ui/src/ui-component/dialog/AllowedDomainsDialog.jsx b/packages/ui/src/ui-component/dialog/AllowedDomainsDialog.jsx index 6147c173bf1..29ac20e9351 100644 --- a/packages/ui/src/ui-component/dialog/AllowedDomainsDialog.jsx +++ b/packages/ui/src/ui-component/dialog/AllowedDomainsDialog.jsx @@ -1,10 +1,9 @@ -import { createPortal } from 'react-dom' import { useDispatch } from 'react-redux' import { useEffect } from 'react' import PropTypes from 'prop-types' -// material-ui -import { Dialog, DialogContent, DialogTitle } from '@mui/material' +// components +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' // store import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' @@ -14,7 +13,6 @@ import useNotifier from '@/utils/useNotifier' import AllowedDomains from '@/ui-component/extended/AllowedDomains' const AllowedDomainsDialog = ({ show, dialogProps, onCancel }) => { - const portalElement = document.getElementById('portal') const dispatch = useDispatch() useNotifier() @@ -25,25 +23,16 @@ const AllowedDomainsDialog = ({ show, dialogProps, onCancel }) => { return () => dispatch({ type: HIDE_CANVAS_DIALOG }) }, [show, dispatch]) - const component = show ? ( - - - {dialogProps.title || 'Allowed Domains'} - + return ( + + + {dialogProps.title || 'Allowed Domains'} + - ) : null - - return createPortal(component, portalElement) + ) } AllowedDomainsDialog.propTypes = { diff --git a/packages/ui/src/ui-component/dialog/ChatFeedbackDialog.jsx b/packages/ui/src/ui-component/dialog/ChatFeedbackDialog.jsx index a57e8ce4407..092ae20a4f4 100644 --- a/packages/ui/src/ui-component/dialog/ChatFeedbackDialog.jsx +++ b/packages/ui/src/ui-component/dialog/ChatFeedbackDialog.jsx @@ -1,10 +1,9 @@ -import { createPortal } from 'react-dom' import { useDispatch } from 'react-redux' import { useEffect } from 'react' import PropTypes from 'prop-types' -// material-ui -import { Dialog, DialogContent, DialogTitle } from '@mui/material' +// components +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' // store import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' @@ -14,7 +13,6 @@ import useNotifier from '@/utils/useNotifier' import ChatFeedback from '@/ui-component/extended/ChatFeedback' const ChatFeedbackDialog = ({ show, dialogProps, onCancel }) => { - const portalElement = document.getElementById('portal') const dispatch = useDispatch() useNotifier() @@ -25,25 +23,16 @@ const ChatFeedbackDialog = ({ show, dialogProps, onCancel }) => { return () => dispatch({ type: HIDE_CANVAS_DIALOG }) }, [show, dispatch]) - const component = show ? ( - - - {dialogProps.title || 'Allowed Domains'} - + return ( + + + {dialogProps.title || 'Allowed Domains'} + - ) : null - - return createPortal(component, portalElement) + ) } ChatFeedbackDialog.propTypes = { diff --git a/packages/ui/src/ui-component/dialog/ConfirmDialog.jsx b/packages/ui/src/ui-component/dialog/ConfirmDialog.jsx index 17ffb57904c..7892f340cb4 100644 --- a/packages/ui/src/ui-component/dialog/ConfirmDialog.jsx +++ b/packages/ui/src/ui-component/dialog/ConfirmDialog.jsx @@ -1,37 +1,28 @@ -import { createPortal } from 'react-dom' -import { Button, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material' import useConfirm from '@/hooks/useConfirm' -import { StyledButton } from '@/ui-component/button/StyledButton' +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' const ConfirmDialog = () => { const { onConfirm, onCancel, confirmState } = useConfirm() - const portalElement = document.getElementById('portal') - const component = confirmState.show ? ( - - - {confirmState.title} - + return ( + - {confirmState.description} + + {confirmState.title} + {confirmState.description} + + + + + - - - - {confirmState.confirmButtonName} - - - ) : null - - return createPortal(component, portalElement) + ) } export default ConfirmDialog diff --git a/packages/ui/src/ui-component/dialog/ExportAsTemplateDialog.jsx b/packages/ui/src/ui-component/dialog/ExportAsTemplateDialog.jsx index e7251c25762..1ebdccf4a53 100644 --- a/packages/ui/src/ui-component/dialog/ExportAsTemplateDialog.jsx +++ b/packages/ui/src/ui-component/dialog/ExportAsTemplateDialog.jsx @@ -4,7 +4,12 @@ import { useEffect, useState } from 'react' import PropTypes from 'prop-types' // material-ui -import { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, OutlinedInput, Typography } from '@mui/material' +import { Box, Typography } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' // store import { @@ -14,7 +19,6 @@ import { SHOW_CANVAS_DIALOG } from '@/store/actions' import useNotifier from '@/utils/useNotifier' -import { StyledButton } from '@/ui-component/button/StyledButton' import Chip from '@mui/material/Chip' import { IconX } from '@tabler/icons-react' @@ -168,104 +172,79 @@ const ExportAsTemplateDialog = ({ show, dialogProps, onCancel }) => { }, [saveCustomTemplateApi.error]) const component = show ? ( - - - {dialogProps.title || 'Export As Template'} - + - -
    - - Name * - - { - setName(e.target.value) - }} - /> -
    + + {dialogProps.title || 'Export As Template'} + + + + Name * + + { + setName(e.target.value) + }} + /> - -
    - Description - { - setDescription(e.target.value) - }} - /> -
    + + Description + { + setDescription(e.target.value) + }} + /> - -
    - Badge - { - setBadge(e.target.value) - }} - /> -
    + + Badge + { + setBadge(e.target.value) + }} + /> - -
    - Usecases - {usecases.length > 0 && ( -
    - {usecases.map((uc, index) => ( - handleUsecaseDelete(uc)} - style={{ marginRight: 5, marginBottom: 5 }} - /> - ))} -
    - )} - - - Type a usecase and press enter to add it to the list. You can add as many items as you want. - -
    + + Usecases + {usecases.length > 0 && ( +
    + {usecases.map((uc, index) => ( + handleUsecaseDelete(uc)} + style={{ marginRight: 5, marginBottom: 5 }} + /> + ))} +
    + )} + + + Type a usecase and press enter to add it to the list. You can add as many items as you want. +
    + + + +
    - - - - {dialogProps.confirmButtonName || 'Save Template'} - -
    ) : null diff --git a/packages/ui/src/ui-component/dialog/SaveChatflowDialog.jsx b/packages/ui/src/ui-component/dialog/SaveChatflowDialog.jsx index e567132899f..7b3b40bf6cf 100644 --- a/packages/ui/src/ui-component/dialog/SaveChatflowDialog.jsx +++ b/packages/ui/src/ui-component/dialog/SaveChatflowDialog.jsx @@ -1,60 +1,56 @@ -import { createPortal } from 'react-dom' -import { useState, useEffect } from 'react' +import { useState, useEffect, useRef } from 'react' import PropTypes from 'prop-types' -import { Button, Dialog, DialogActions, DialogContent, OutlinedInput, DialogTitle } from '@mui/material' -import { StyledButton } from '@/ui-component/button/StyledButton' +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' const SaveChatflowDialog = ({ show, dialogProps, onCancel, onConfirm }) => { - const portalElement = document.getElementById('portal') - + const inputRef = useRef(null) const [chatflowName, setChatflowName] = useState('') const [isReadyToSave, setIsReadyToSave] = useState(false) + useEffect(() => { + if (show) { + inputRef?.current?.focus() + } + }, [show]) + useEffect(() => { if (chatflowName) setIsReadyToSave(true) else setIsReadyToSave(false) }, [chatflowName]) - const component = show ? ( - - - {dialogProps.title} - + return ( + - + {dialogProps.title} + + setChatflowName(e.target.value)} onKeyDown={(e) => { if (isReadyToSave && e.key === 'Enter') onConfirm(e.target.value) }} + placeholder='My New Chatflow' + ref={inputRef} + value={chatflowName} + type='text' /> + + + + - - - onConfirm(chatflowName)}> - {dialogProps.confirmButtonName} - - - ) : null - - return createPortal(component, portalElement) + ) } SaveChatflowDialog.propTypes = { diff --git a/packages/ui/src/ui-component/dialog/SpeechToTextDialog.jsx b/packages/ui/src/ui-component/dialog/SpeechToTextDialog.jsx index a01dafaeae0..dc8cb6b28e2 100644 --- a/packages/ui/src/ui-component/dialog/SpeechToTextDialog.jsx +++ b/packages/ui/src/ui-component/dialog/SpeechToTextDialog.jsx @@ -1,10 +1,9 @@ -import { createPortal } from 'react-dom' import { useDispatch } from 'react-redux' import { useEffect } from 'react' import PropTypes from 'prop-types' -// material-ui -import { Dialog, DialogContent, DialogTitle } from '@mui/material' +// components +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' // store import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' @@ -14,7 +13,6 @@ import useNotifier from '@/utils/useNotifier' import SpeechToText from '@/ui-component/extended/SpeechToText' const SpeechToTextDialog = ({ show, dialogProps, onCancel }) => { - const portalElement = document.getElementById('portal') const dispatch = useDispatch() useNotifier() @@ -25,25 +23,16 @@ const SpeechToTextDialog = ({ show, dialogProps, onCancel }) => { return () => dispatch({ type: HIDE_CANVAS_DIALOG }) }, [show, dispatch]) - const component = show ? ( - - - {dialogProps.title || 'Allowed Domains'} - + return ( + + + {dialogProps.title || 'Allowed Domains'} + - ) : null - - return createPortal(component, portalElement) + ) } SpeechToTextDialog.propTypes = { diff --git a/packages/ui/src/ui-component/dialog/StarterPromptsDialog.jsx b/packages/ui/src/ui-component/dialog/StarterPromptsDialog.jsx index 2bfb2f23fde..7bfaec76fa5 100644 --- a/packages/ui/src/ui-component/dialog/StarterPromptsDialog.jsx +++ b/packages/ui/src/ui-component/dialog/StarterPromptsDialog.jsx @@ -1,10 +1,9 @@ -import { createPortal } from 'react-dom' import { useDispatch } from 'react-redux' import { useEffect } from 'react' import PropTypes from 'prop-types' -// material-ui -import { Dialog, DialogContent, DialogTitle } from '@mui/material' +// components +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' // store import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' @@ -14,7 +13,6 @@ import useNotifier from '@/utils/useNotifier' import StarterPrompts from '@/ui-component/extended/StarterPrompts' const StarterPromptsDialog = ({ show, dialogProps, onCancel }) => { - const portalElement = document.getElementById('portal') const dispatch = useDispatch() useNotifier() @@ -25,25 +23,16 @@ const StarterPromptsDialog = ({ show, dialogProps, onCancel }) => { return () => dispatch({ type: HIDE_CANVAS_DIALOG }) }, [show, dispatch]) - const component = show ? ( - - - {dialogProps.title || 'Conversation Starter Prompts'} - + return ( + + + {dialogProps.title || 'Conversation Starter Prompts'} + - ) : null - - return createPortal(component, portalElement) + ) } StarterPromptsDialog.propTypes = { diff --git a/packages/ui/src/ui-component/dialog/TagDialog.jsx b/packages/ui/src/ui-component/dialog/TagDialog.jsx index 82c35dde62b..8e844c5da1e 100644 --- a/packages/ui/src/ui-component/dialog/TagDialog.jsx +++ b/packages/ui/src/ui-component/dialog/TagDialog.jsx @@ -1,11 +1,11 @@ import { useState, useEffect } from 'react' -import Dialog from '@mui/material/Dialog' +import PropTypes from 'prop-types' import Box from '@mui/material/Box' -import Button from '@mui/material/Button' -import TextField from '@mui/material/TextField' import Chip from '@mui/material/Chip' -import PropTypes from 'prop-types' -import { DialogActions, DialogContent, DialogTitle, Typography } from '@mui/material' +import { Typography } from '@mui/material' +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' const TagDialog = ({ isOpen, dialogProps, onClose, onSubmit }) => { const [inputValue, setInputValue] = useState('') @@ -49,19 +49,12 @@ const TagDialog = ({ isOpen, dialogProps, onClose, onSubmit }) => { }, [dialogProps]) return ( - - - Set Chatflow Category Tags - + - + + Set Chatflow Category Tags + +
    {categoryValues.length > 0 && (
    @@ -75,27 +68,28 @@ const TagDialog = ({ isOpen, dialogProps, onClose, onSubmit }) => { ))}
    )} - Enter a tag and press enter to add it to the list. You can add as many tags as you want.
    + + + +
    - - - -
    ) } diff --git a/packages/ui/src/ui-component/extended/Logo.jsx b/packages/ui/src/ui-component/extended/Logo.jsx index c7ea54fdac3..837751b1c81 100644 --- a/packages/ui/src/ui-component/extended/Logo.jsx +++ b/packages/ui/src/ui-component/extended/Logo.jsx @@ -9,12 +9,8 @@ const Logo = () => { const customization = useSelector((state) => state.customization) return ( -
    - Flowise +
    + Flowise
    ) } diff --git a/packages/ui/src/ui-component/file/File.jsx b/packages/ui/src/ui-component/file/File.jsx index 0c81a79fdd3..6a283027d3d 100644 --- a/packages/ui/src/ui-component/file/File.jsx +++ b/packages/ui/src/ui-component/file/File.jsx @@ -1,15 +1,18 @@ -import { useState } from 'react' +import { useRef, useState } from 'react' import PropTypes from 'prop-types' -import { useTheme } from '@mui/material/styles' -import { FormControl, Button } from '@mui/material' +import { FormControl } from '@mui/material' +import { Button } from '@/components/ui/button' import { IconUpload } from '@tabler/icons-react' import { getFileName } from '@/utils/genericHelper' export const File = ({ value, formDataUpload, fileType, onChange, onFormDataChange, disabled = false }) => { - const theme = useTheme() - + const fileUploadRef = useRef(null) const [myValue, setMyValue] = useState(value ?? '') + const triggerFileUpload = () => { + fileUploadRef?.current?.click() + } + const handleFileUpload = async (e) => { if (!e.target.files) return @@ -79,35 +82,22 @@ export const File = ({ value, formDataUpload, fileType, onChange, onFormDataChan } return ( - + {!formDataUpload && ( - - {myValue ? getFileName(myValue) : 'Choose a file to upload'} - + {myValue ? getFileName(myValue) : 'Choose a file to upload'} )} - + (formDataUpload ? handleFormDataUpload(e) : handleFileUpload(e))} + ref={fileUploadRef} + /> ) } diff --git a/packages/ui/src/ui-component/input/Input.jsx b/packages/ui/src/ui-component/input/Input.jsx index 79f515ddd45..9a32ed4d139 100644 --- a/packages/ui/src/ui-component/input/Input.jsx +++ b/packages/ui/src/ui-component/input/Input.jsx @@ -1,6 +1,7 @@ import { useState, useEffect, useRef } from 'react' import PropTypes from 'prop-types' -import { FormControl, OutlinedInput, InputBase, Popover } from '@mui/material' +import { FormControl, InputBase, Popover } from '@mui/material' +import { Input as BaseInput } from '@/components/ui/input' import SelectVariable from '@/ui-component/json/SelectVariable' import { getAvailableNodesForVariable } from '@/utils/genericHelper' @@ -88,9 +89,8 @@ export const Input = ({ inputParam, value, nodes, edges, nodeId, onChange, disab ) : ( - - + Actions diff --git a/packages/ui/src/utils/genericHelper.js b/packages/ui/src/utils/genericHelper.js index bf4447d3542..a0fb4f03351 100644 --- a/packages/ui/src/utils/genericHelper.js +++ b/packages/ui/src/utils/genericHelper.js @@ -938,3 +938,8 @@ export const getCustomConditionOutputs = (value, nodeId, existingEdges, isDataGr return { outputAnchors, toBeRemovedEdgeIds } } + +export const capitalizeWord = (word) => { + if (!word || typeof word !== 'string') return word + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase() +} diff --git a/packages/ui/src/views/agentflows/index.jsx b/packages/ui/src/views/agentflows/index.jsx index fe7b0804594..da9ed7f803b 100644 --- a/packages/ui/src/views/agentflows/index.jsx +++ b/packages/ui/src/views/agentflows/index.jsx @@ -1,19 +1,22 @@ import { useEffect, useState } from 'react' -import { useNavigate } from 'react-router-dom' +import { Link, useNavigate } from 'react-router-dom' // material-ui -import { Box, Skeleton, Stack, ToggleButton, ToggleButtonGroup } from '@mui/material' -import { useTheme } from '@mui/material/styles' +import { Box, Skeleton, Stack } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group' // project imports import MainCard from '@/ui-component/cards/MainCard' import ItemCard from '@/ui-component/cards/ItemCard' +import FlowListMenu from '@/ui-component/button/FlowListMenu' import { gridSpacing } from '@/store/constant' import AgentsEmptySVG from '@/assets/images/agents_empty.svg' import LoginDialog from '@/ui-component/dialog/LoginDialog' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' import { FlowListTable } from '@/ui-component/table/FlowListTable' -import { StyledButton } from '@/ui-component/button/StyledButton' import ViewHeader from '@/layout/MainLayout/ViewHeader' import ErrorBoundary from '@/ErrorBoundary' @@ -33,7 +36,6 @@ import { IconPlus, IconLayoutGrid, IconList } from '@tabler/icons-react' const Agentflows = () => { const navigate = useNavigate() - const theme = useTheme() const [isLoading, setLoading] = useState(true) const [error, setError] = useState(null) @@ -45,7 +47,7 @@ const Agentflows = () => { const getAllAgentflows = useApi(chatflowsApi.getAllAgentflows) const [view, setView] = useState(localStorage.getItem('flowDisplayStyle') || 'card') - const handleChange = (event, nextView) => { + const handleChange = (nextView) => { if (nextView === null) return localStorage.setItem('flowDisplayStyle', nextView) setView(nextView) @@ -69,14 +71,6 @@ const Agentflows = () => { navigate(0) } - const addNew = () => { - navigate('/agentcanvas') - } - - const goToCanvas = (selectedAgentflow) => { - navigate(`/agentcanvas/${selectedAgentflow.id}`) - } - useEffect(() => { getAllAgentflows.request() @@ -131,42 +125,27 @@ const Agentflows = () => { ) : ( - - + - + - - + + - - - } sx={{ borderRadius: 2, height: 40 }}> - Add New - + + + + + {!view || view === 'card' ? ( <> @@ -179,7 +158,19 @@ const Agentflows = () => { ) : ( {getAllAgentflows.data?.filter(filterFlows).map((data, index) => ( - goToCanvas(data)} data={data} images={images[data.id]} /> + + + + + + + + ))} )} diff --git a/packages/ui/src/views/apikey/APIKeyDialog.jsx b/packages/ui/src/views/apikey/APIKeyDialog.jsx index 4b81102a79b..9c118aed1db 100644 --- a/packages/ui/src/views/apikey/APIKeyDialog.jsx +++ b/packages/ui/src/views/apikey/APIKeyDialog.jsx @@ -1,24 +1,15 @@ -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import { useState, useEffect } from 'react' import { useDispatch } from 'react-redux' import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackbarAction } from '@/store/actions' -import { - Box, - Typography, - Button, - Dialog, - DialogActions, - DialogContent, - DialogTitle, - Stack, - IconButton, - OutlinedInput, - Popover -} from '@mui/material' +import { Box, Typography, Stack, Popover } from '@mui/material' import { useTheme } from '@mui/material/styles' -import { StyledButton } from '@/ui-component/button/StyledButton' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' // Icons import { IconX, IconCopy } from '@tabler/icons-react' @@ -28,10 +19,9 @@ import apikeyApi from '@/api/apikey' // utils import useNotifier from '@/utils/useNotifier' +import { IconCheck } from '@tabler/icons-react' const APIKeyDialog = ({ show, dialogProps, onCancel, onConfirm, setError }) => { - const portalElement = document.getElementById('portal') - const theme = useTheme() const dispatch = useDispatch() @@ -136,38 +126,26 @@ const APIKeyDialog = ({ show, dialogProps, onCancel, onConfirm, setError }) => { } } - const component = show ? ( - - - {dialogProps.title} - + return ( + + + {dialogProps.title} + {dialogProps.type === 'EDIT' && ( - + API Key - + {dialogProps.key.apiKey} - { navigator.clipboard.writeText(dialogProps.key.apiKey) setAnchorEl(event.currentTarget) @@ -175,21 +153,25 @@ const APIKeyDialog = ({ show, dialogProps, onCancel, onConfirm, setError }) => { handleClosePopOver() }, 1500) }} + size='icon' + title='Copy API Key' + variant='secondary' > - - + {openPopOver ? : } + Copied! @@ -199,34 +181,18 @@ const APIKeyDialog = ({ show, dialogProps, onCancel, onConfirm, setError }) => { )} - - - Key Name - - setKeyName(e.target.value)} - /> + + Key Name + setKeyName(e.target.value)} /> + + + - - (dialogProps.type === 'ADD' ? addNewKey() : saveKey())} - id={dialogProps.customBtnId} - > - {dialogProps.confirmButtonName} - - - ) : null - - return createPortal(component, portalElement) + ) } APIKeyDialog.propTypes = { diff --git a/packages/ui/src/views/apikey/UploadJSONFileDialog.jsx b/packages/ui/src/views/apikey/UploadJSONFileDialog.jsx index 4d39d895a43..d928bcecb27 100644 --- a/packages/ui/src/views/apikey/UploadJSONFileDialog.jsx +++ b/packages/ui/src/views/apikey/UploadJSONFileDialog.jsx @@ -1,14 +1,16 @@ -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import { useState, useEffect } from 'react' import { useDispatch } from 'react-redux' import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackbarAction } from '@/store/actions' // Material -import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Box, Typography, Stack } from '@mui/material' +import { Box, Typography } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' // Project imports -import { StyledButton } from '@/ui-component/button/StyledButton' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' import { File } from '@/ui-component/file/File' @@ -49,8 +51,6 @@ const importModes = [ ] const UploadJSONFileDialog = ({ show, dialogProps, onCancel, onConfirm }) => { - const portalElement = document.getElementById('portal') - const dispatch = useDispatch() // ==============================|| Snackbar ||============================== // @@ -117,63 +117,54 @@ const UploadJSONFileDialog = ({ show, dialogProps, onCancel, onConfirm }) => { } } - const component = show ? ( - - -
    - - Import API Keys -
    -
    - - - + return ( + <> + + + + + + Import API Keys + + + Import api.json file  * - - setSelectedFile(newValue)} - value={selectedFile ?? 'Choose a file to upload'} - /> - - - + setSelectedFile(newValue)} + value={selectedFile ?? 'Choose a file to upload'} + /> + + Import Mode  * -
    - setImportMode(newValue)} - value={importMode ?? 'choose an option'} - /> - - - - - - {dialogProps.confirmButtonName} - - + setImportMode(newValue)} + value={importMode ?? 'choose an option'} + /> + + + + + + +
    -
    - ) : null - - return createPortal(component, portalElement) + + ) } UploadJSONFileDialog.propTypes = { diff --git a/packages/ui/src/views/apikey/index.jsx b/packages/ui/src/views/apikey/index.jsx index 56bc3ecfedd..8a45991d655 100644 --- a/packages/ui/src/views/apikey/index.jsx +++ b/packages/ui/src/views/apikey/index.jsx @@ -6,7 +6,6 @@ import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackba // material-ui import { - Button, Box, Chip, Skeleton, @@ -25,9 +24,11 @@ import { import TableCell, { tableCellClasses } from '@mui/material/TableCell' import { useTheme, styled } from '@mui/material/styles' +// components +import { Button } from '@/components/ui/button' + // project imports import MainCard from '@/ui-component/cards/MainCard' -import { StyledButton } from '@/ui-component/button/StyledButton' import APIKeyDialog from './APIKeyDialog' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' import ViewHeader from '@/layout/MainLayout/ViewHeader' @@ -46,7 +47,6 @@ import useNotifier from '@/utils/useNotifier' // Icons import { IconTrash, - IconEdit, IconCopy, IconChevronsUp, IconChevronsDown, @@ -54,7 +54,8 @@ import { IconPlus, IconEye, IconEyeOff, - IconFileUpload + IconFileUpload, + IconPencil } from '@tabler/icons-react' import APIEmptySVG from '@/assets/images/api_empty.svg' import UploadJSONFileDialog from '@/views/apikey/UploadJSONFileDialog' @@ -92,34 +93,50 @@ function APIKeyRow(props) { {props.apiKey.keyName} - {props.showApiKeys.includes(props.apiKey.apiKey) - ? props.apiKey.apiKey - : `${props.apiKey.apiKey.substring(0, 2)}${'•'.repeat(18)}${props.apiKey.apiKey.substring( - props.apiKey.apiKey.length - 5 - )}`} - - - - - {props.showApiKeys.includes(props.apiKey.apiKey) ? : } - - - - Copied! +
    + + {props.showApiKeys.includes(props.apiKey.apiKey) + ? props.apiKey.apiKey + : `${props.apiKey.apiKey.substring(0, 2)}${'•'.repeat(18)}${props.apiKey.apiKey.substring( + props.apiKey.apiKey.length - 5 + )}`} - +
    + + + + + Copied! + + +
    +
    {props.apiKey.chatFlows.length}{' '} @@ -131,14 +148,20 @@ function APIKeyRow(props) { {moment(props.apiKey.createdAt).format('MMMM Do, YYYY')} - - - - - - - - +
    + + +
    {open && ( @@ -303,7 +326,7 @@ const APIKey = () => { key: new Date().getTime() + Math.random(), variant: 'success', action: (key) => ( - ) @@ -321,7 +344,7 @@ const APIKey = () => { variant: 'error', persist: true, action: (key) => ( - ) @@ -368,24 +391,14 @@ const APIKey = () => { ) : ( - - } - id='btn_createApiKey' - > + {!isLoading && apiKeys.length <= 0 ? ( @@ -417,8 +430,7 @@ const APIKey = () => { API Key Usage Created - - + Actions @@ -440,9 +452,6 @@ const APIKey = () => { - - - @@ -460,9 +469,6 @@ const APIKey = () => { - - - ) : ( diff --git a/packages/ui/src/views/canvas/index.jsx b/packages/ui/src/views/canvas/index.jsx index b2cef5600ef..0d1d0dd5abd 100644 --- a/packages/ui/src/views/canvas/index.jsx +++ b/packages/ui/src/views/canvas/index.jsx @@ -11,6 +11,7 @@ import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackbarAction } from '@/store/actions' +import { headerHeight } from '@/store/constant' import { omit, cloneDeep } from 'lodash' // material-ui @@ -515,17 +516,18 @@ const Canvas = () => { return ( <> - + - + { const navigate = useNavigate() - const theme = useTheme() const [isLoading, setLoading] = useState(true) const [error, setError] = useState(null) @@ -45,7 +47,7 @@ const Chatflows = () => { const getAllChatflowsApi = useApi(chatflowsApi.getAllChatflows) const [view, setView] = useState(localStorage.getItem('flowDisplayStyle') || 'card') - const handleChange = (event, nextView) => { + const handleChange = (nextView) => { if (nextView === null) return localStorage.setItem('flowDisplayStyle', nextView) setView(nextView) @@ -69,14 +71,6 @@ const Chatflows = () => { navigate(0) } - const addNew = () => { - navigate('/canvas') - } - - const goToCanvas = (selectedChatflow) => { - navigate(`/canvas/${selectedChatflow.id}`) - } - useEffect(() => { getAllChatflowsApi.request() @@ -131,42 +125,32 @@ const Chatflows = () => { ) : ( - - + - + - - + + - - - } sx={{ borderRadius: 2, height: 40 }}> - Add New - + + + + + {!view || view === 'card' ? ( <> @@ -179,7 +163,19 @@ const Chatflows = () => { ) : ( {getAllChatflowsApi.data?.filter(filterFlows).map((data, index) => ( - goToCanvas(data)} data={data} images={images[data.id]} /> + + + + + + + + ))} )} diff --git a/packages/ui/src/views/credentials/AddEditCredentialDialog.jsx b/packages/ui/src/views/credentials/AddEditCredentialDialog.jsx index d1ca3d3cd62..e83af240a49 100644 --- a/packages/ui/src/views/credentials/AddEditCredentialDialog.jsx +++ b/packages/ui/src/views/credentials/AddEditCredentialDialog.jsx @@ -1,4 +1,3 @@ -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import { useState, useEffect } from 'react' import { useDispatch } from 'react-redux' @@ -6,10 +5,14 @@ import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackba import parser from 'html-react-parser' // Material -import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Box, Stack, OutlinedInput, Typography } from '@mui/material' +import { Box, Stack, Typography } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' // Project imports -import { StyledButton } from '@/ui-component/button/StyledButton' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' import CredentialInputHandler from './CredentialInputHandler' @@ -31,8 +34,6 @@ import { baseURL, REDACTED_CREDENTIAL_VALUE } from '@/store/constant' import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' const AddEditCredentialDialog = ({ show, dialogProps, onCancel, onConfirm, setError }) => { - const portalElement = document.getElementById('portal') - const dispatch = useDispatch() // ==============================|| Snackbar ||============================== // @@ -206,100 +207,65 @@ const AddEditCredentialDialog = ({ show, dialogProps, onCancel, onConfirm, setEr } } - const component = show ? ( - - - {componentCredential && componentCredential.label && ( -
    -
    - {componentCredential.name} + + + + + {componentCredential && componentCredential.label && ( + <> +
    + {componentCredential.name} +
    + {componentCredential.label} + + )} +
    + {componentCredential && componentCredential.description && ( + {parser(componentCredential.description)} + )} +
    + {componentCredential && componentCredential.label && ( + + + + Credential Name +  * + + + setName(e.target.value)} /> -
    - {componentCredential.label} -
    - )} -
    - - {componentCredential && componentCredential.description && ( - -
    + )} + {componentCredential && + componentCredential.inputs && + componentCredential.inputs.map((inputParam, index) => ( + + ))} + +
    -
    - )} - {componentCredential && componentCredential.label && ( - - - - Credential Name -  * - - - setName(e.target.value)} - /> - - )} - {componentCredential && - componentCredential.inputs && - componentCredential.inputs.map((inputParam, index) => ( - - ))} -
    - - (dialogProps.type === 'ADD' ? addNewCredential() : saveCredential())} - > - {dialogProps.confirmButtonName} - - + {dialogProps.confirmButtonName} + + +
    +
    - - ) : null - - return createPortal(component, portalElement) + + ) } AddEditCredentialDialog.propTypes = { diff --git a/packages/ui/src/views/credentials/CredentialInputHandler.jsx b/packages/ui/src/views/credentials/CredentialInputHandler.jsx index 26411168865..8c2614528c0 100644 --- a/packages/ui/src/views/credentials/CredentialInputHandler.jsx +++ b/packages/ui/src/views/credentials/CredentialInputHandler.jsx @@ -43,7 +43,7 @@ const CredentialInputHandler = ({ inputParam, data, disabled = false }) => {
    {inputParam && ( <> - +
    {inputParam.label} diff --git a/packages/ui/src/views/credentials/CredentialListDialog.jsx b/packages/ui/src/views/credentials/CredentialListDialog.jsx index a6b19cb5c99..a4bbac88ec5 100644 --- a/packages/ui/src/views/credentials/CredentialListDialog.jsx +++ b/packages/ui/src/views/credentials/CredentialListDialog.jsx @@ -1,22 +1,26 @@ import { useState, useEffect } from 'react' -import { createPortal } from 'react-dom' import { useDispatch } from 'react-redux' import PropTypes from 'prop-types' -import { List, ListItemButton, Dialog, DialogContent, DialogTitle, Box, OutlinedInput, InputAdornment, Typography } from '@mui/material' +import PerfectScrollbar from 'react-perfect-scrollbar' +import { List, ListItemButton, Box, InputAdornment, Typography } from '@mui/material' import { useTheme } from '@mui/material/styles' import { IconSearch, IconX } from '@tabler/icons-react' +// components +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' + // const import { baseURL } from '@/store/constant' import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' const CredentialListDialog = ({ show, dialogProps, onCancel, onCredentialSelected }) => { - const portalElement = document.getElementById('portal') const dispatch = useDispatch() const theme = useTheme() const [searchValue, setSearchValue] = useState('') const [componentsCredentials, setComponentsCredentials] = useState([]) + // TODO: debounce search and use useCallback for functions const filterSearch = (value) => { setSearchValue(value) setTimeout(() => { @@ -42,127 +46,113 @@ const CredentialListDialog = ({ show, dialogProps, onCancel, onCredentialSelecte return () => dispatch({ type: HIDE_CANVAS_DIALOG }) }, [show, dispatch]) - const component = show ? ( - - - {dialogProps.title} - - - - filterSearch(e.target.value)} - placeholder='Search credential' - startAdornment={ - - - - } - endAdornment={ - - filterSearch('')} - style={{ - cursor: 'pointer' + return ( + + + + {dialogProps.title} + + + + filterSearch(e.target.value)} + placeholder='Search credential' + startAdornment={ + + + + } + endAdornment={ + - - } - aria-describedby='search-helper-text' - inputProps={{ - 'aria-label': 'weight' - }} - /> - - - {[...componentsCredentials].map((componentCredential) => ( - onCredentialSelected(componentCredential)} + title='Clear Search' + > + filterSearch('')} + style={{ + cursor: 'pointer' + }} + /> + + } + aria-describedby='search-helper-text' + /> + + + -
    - ( + onCredentialSelected(componentCredential)} + sx={{ + border: 1, + borderColor: theme.palette.grey[900] + 25, + borderRadius: 2, + display: 'flex', + alignItems: 'center', + justifyContent: 'start', + textAlign: 'left', + gap: 1, + p: 2 }} - alt={componentCredential.name} - src={`${baseURL}/api/v1/components-credentials-icon/${componentCredential.name}`} - /> -
    - {componentCredential.label} - - ))} -
    + > +
    + {componentCredential.name} +
    + {componentCredential.label} + + ))} + +
    +
    - ) : null - - return createPortal(component, portalElement) + ) } CredentialListDialog.propTypes = { diff --git a/packages/ui/src/views/credentials/index.jsx b/packages/ui/src/views/credentials/index.jsx index 4509ea1dd50..a616aa4ad71 100644 --- a/packages/ui/src/views/credentials/index.jsx +++ b/packages/ui/src/views/credentials/index.jsx @@ -6,25 +6,13 @@ import moment from 'moment' // material-ui import { styled } from '@mui/material/styles' import { tableCellClasses } from '@mui/material/TableCell' -import { - Button, - Box, - Skeleton, - Stack, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - Paper, - IconButton, - useTheme -} from '@mui/material' +import { Box, Skeleton, Stack, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Paper, useTheme } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' // project imports import MainCard from '@/ui-component/cards/MainCard' -import { StyledButton } from '@/ui-component/button/StyledButton' import CredentialListDialog from './CredentialListDialog' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' import AddEditCredentialDialog from './AddEditCredentialDialog' @@ -40,7 +28,7 @@ import useConfirm from '@/hooks/useConfirm' import useNotifier from '@/utils/useNotifier' // Icons -import { IconTrash, IconEdit, IconX, IconPlus } from '@tabler/icons-react' +import { IconTrash, IconX, IconPencil, IconPlus } from '@tabler/icons-react' import CredentialEmptySVG from '@/assets/images/credential_empty.svg' // const @@ -135,8 +123,8 @@ const Credentials = () => { const deleteCredential = async (credential) => { const confirmPayload = { - title: `Delete`, - description: `Delete credential ${credential.name}?`, + title: `Are you sure?`, + description: `This action cannot be undone. This will permanently delete ${credential.name}?`, confirmButtonName: 'Delete', cancelButtonName: 'Cancel' } @@ -152,7 +140,7 @@ const Credentials = () => { key: new Date().getTime() + Math.random(), variant: 'success', action: (key) => ( - ) @@ -170,7 +158,7 @@ const Credentials = () => { variant: 'error', persist: true, action: (key) => ( - ) @@ -234,14 +222,10 @@ const Credentials = () => { searchPlaceholder='Search Credentials' title='Credentials' > - } - > + {!isLoading && credentials.length <= 0 ? ( @@ -272,8 +256,7 @@ const Credentials = () => { Name Last Updated Created - - + Actions @@ -292,9 +275,6 @@ const Credentials = () => { - - - @@ -309,9 +289,6 @@ const Credentials = () => { - - - ) : ( @@ -358,18 +335,25 @@ const Credentials = () => { {moment(credential.createdDate).format('MMMM Do, YYYY')} - edit(credential)}> - - - - - deleteCredential(credential)} - > - - +
    + + +
    ))} diff --git a/packages/ui/src/views/docstore/AddDocStoreDialog.jsx b/packages/ui/src/views/docstore/AddDocStoreDialog.jsx index f77eb958805..6f1873aec39 100644 --- a/packages/ui/src/views/docstore/AddDocStoreDialog.jsx +++ b/packages/ui/src/views/docstore/AddDocStoreDialog.jsx @@ -1,4 +1,3 @@ -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import { useState, useEffect } from 'react' import { useDispatch } from 'react-redux' @@ -10,10 +9,14 @@ import { } from '@/store/actions' // Material -import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Box, Typography, OutlinedInput } from '@mui/material' +import { Box, Typography } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' // Project imports -import { StyledButton } from '@/ui-component/button/StyledButton' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' // Icons @@ -26,8 +29,6 @@ import documentStoreApi from '@/api/documentstore' import useNotifier from '@/utils/useNotifier' const AddDocStoreDialog = ({ show, dialogProps, onCancel, onConfirm }) => { - const portalElement = document.getElementById('portal') - const dispatch = useDispatch() // ==============================|| Snackbar ||============================== // @@ -148,74 +149,59 @@ const AddDocStoreDialog = ({ show, dialogProps, onCancel, onConfirm }) => { } } - const component = show ? ( - - -
    - - {dialogProps.title} -
    -
    - - -
    + return ( + <> + + + + + + {dialogProps.title} + + + Name * - -
    -
    - setDocumentStoreName(e.target.value)} - value={documentStoreName ?? ''} - /> -
    - -
    + setDocumentStoreName(e.target.value)} + name='name' + size='sm' + value={documentStoreName ?? ''} + /> + + Description - -
    -
    - setDocumentStoreDesc(e.target.value)} - value={documentStoreDesc ?? ''} - /> -
    -
    - - - (dialogType === 'ADD' ? createDocumentStore() : updateDocumentStore())} - > - {dialogProps.confirmButtonName} - - + setDocumentStoreDesc(e.target.value)} + size='sm' + value={documentStoreDesc ?? ''} + /> + + + + + + +
    - - ) : null - - return createPortal(component, portalElement) + + ) } AddDocStoreDialog.propTypes = { diff --git a/packages/ui/src/views/docstore/DeleteDocStoreDialog.jsx b/packages/ui/src/views/docstore/DeleteDocStoreDialog.jsx index 072d0258c76..a5ad2708661 100644 --- a/packages/ui/src/views/docstore/DeleteDocStoreDialog.jsx +++ b/packages/ui/src/views/docstore/DeleteDocStoreDialog.jsx @@ -1,17 +1,12 @@ import { useState, useEffect } from 'react' -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import { cloneDeep } from 'lodash' import { - Button, Box, Paper, Accordion, AccordionSummary, AccordionDetails, - Dialog, - DialogContent, - DialogTitle, Typography, Table, TableBody, @@ -19,9 +14,13 @@ import { TableRow, TableCell, Checkbox, - FormControlLabel, - DialogActions + FormControlLabel } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' + import ExpandMoreIcon from '@mui/icons-material/ExpandMore' import { TableViewOnly } from '@/ui-component/table/Table' import { v4 as uuidv4 } from 'uuid' @@ -35,7 +34,6 @@ import useApi from '@/hooks/useApi' import { initNode } from '@/utils/genericHelper' const DeleteDocStoreDialog = ({ show, dialogProps, onCancel, onDelete }) => { - const portalElement = document.getElementById('portal') const [nodeConfigExpanded, setNodeConfigExpanded] = useState({}) const [removeFromVS, setRemoveFromVS] = useState(false) const [vsFlowData, setVSFlowData] = useState([]) @@ -130,19 +128,12 @@ const DeleteDocStoreDialog = ({ show, dialogProps, onCancel, onDelete }) => { // eslint-disable-next-line react-hooks/exhaustive-deps }, [getSpecificNodeApi.data]) - const component = show ? ( - - - {dialogProps.title} - - + return ( + + + + {dialogProps.title} + {dialogProps.description} {dialogProps.type === 'STORE' && dialogProps.recordManagerConfig && ( {
    )} + + + + - - - - - ) : null - - return createPortal(component, portalElement) + ) } DeleteDocStoreDialog.propTypes = { diff --git a/packages/ui/src/views/docstore/DocumentLoaderListDialog.jsx b/packages/ui/src/views/docstore/DocumentLoaderListDialog.jsx index a8722ed358d..20c2b2b1f27 100644 --- a/packages/ui/src/views/docstore/DocumentLoaderListDialog.jsx +++ b/packages/ui/src/views/docstore/DocumentLoaderListDialog.jsx @@ -1,8 +1,13 @@ import { useState, useEffect } from 'react' -import { createPortal } from 'react-dom' import { useDispatch } from 'react-redux' import PropTypes from 'prop-types' -import { List, ListItemButton, Dialog, DialogContent, DialogTitle, Box, OutlinedInput, InputAdornment, Typography } from '@mui/material' +import PerfectScrollbar from 'react-perfect-scrollbar' +import { List, ListItemButton, Box, InputAdornment, Typography } from '@mui/material' + +// components +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' + import { useTheme } from '@mui/material/styles' import { IconSearch, IconX } from '@tabler/icons-react' @@ -15,7 +20,6 @@ import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' import useApi from '@/hooks/useApi' const DocumentLoaderListDialog = ({ show, dialogProps, onCancel, onDocLoaderSelected }) => { - const portalElement = document.getElementById('portal') const dispatch = useDispatch() const theme = useTheme() const [searchValue, setSearchValue] = useState('') @@ -56,127 +60,112 @@ const DocumentLoaderListDialog = ({ show, dialogProps, onCancel, onDocLoaderSele return () => dispatch({ type: HIDE_CANVAS_DIALOG }) }, [show, dispatch]) - const component = show ? ( - - - {dialogProps.title} - - - - onSearchChange(e.target.value)} - placeholder='Search' - startAdornment={ - - - - } - endAdornment={ - - onSearchChange('')} - style={{ - cursor: 'pointer' + return ( + + + + {dialogProps.title} + + + + onSearchChange(e.target.value)} + placeholder='Search' + startAdornment={ + + + + } + endAdornment={ + - - } - aria-describedby='search-helper-text' - inputProps={{ - 'aria-label': 'weight' - }} - /> - - - {[...documentLoaders].filter(filterFlows).map((documentLoader) => ( - onDocLoaderSelected(documentLoader.name)} + title='Clear Search' + > + onSearchChange('')} + style={{ + cursor: 'pointer' + }} + /> + + } + aria-describedby='search-helper-text' + /> + + + -
    - ( + onDocLoaderSelected(documentLoader.name)} + sx={{ + border: 1, + borderColor: theme.palette.grey[900] + 25, + borderRadius: 2, + display: 'flex', + alignItems: 'center', + justifyContent: 'start', + textAlign: 'left', + gap: 1, + p: 2 }} - alt={documentLoader.name} - src={`${baseURL}/api/v1/node-icon/${documentLoader.name}`} - /> -
    - {documentLoader.label} - - ))} -
    + > +
    + {documentLoader.name} +
    + {documentLoader.label} + + ))} + +
    +
    - ) : null - - return createPortal(component, portalElement) + ) } DocumentLoaderListDialog.propTypes = { diff --git a/packages/ui/src/views/docstore/DocumentStoreDetail.jsx b/packages/ui/src/views/docstore/DocumentStoreDetail.jsx index 986bd1e9770..72d6ff053b8 100644 --- a/packages/ui/src/views/docstore/DocumentStoreDetail.jsx +++ b/packages/ui/src/views/docstore/DocumentStoreDetail.jsx @@ -16,23 +16,27 @@ import { TableCell, TableBody, Chip, - Menu, - MenuItem, - Divider, - Button, - Skeleton, - IconButton + Skeleton } from '@mui/material' -import { alpha, styled, useTheme } from '@mui/material/styles' +import { styled, useTheme } from '@mui/material/styles' import { tableCellClasses } from '@mui/material/TableCell' +// components +import { Button } from '@/components/ui/button' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger +} from '@/components/ui/dropdown-menu' + // project imports import MainCard from '@/ui-component/cards/MainCard' import AddDocStoreDialog from '@/views/docstore/AddDocStoreDialog' import { BackdropLoader } from '@/ui-component/loading/BackdropLoader' import DocumentLoaderListDialog from '@/views/docstore/DocumentLoaderListDialog' import ErrorBoundary from '@/ErrorBoundary' -import { StyledButton } from '@/ui-component/button/StyledButton' import ViewHeader from '@/layout/MainLayout/ViewHeader' import DeleteDocStoreDialog from './DeleteDocStoreDialog' import DocumentStoreStatus from '@/views/docstore/DocumentStoreStatus' @@ -48,14 +52,19 @@ import { getFileName } from '@/utils/genericHelper' import useConfirm from '@/hooks/useConfirm' // icons -import { IconPlus, IconRefresh, IconX, IconVectorBezier2 } from '@tabler/icons-react' -import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown' -import FileDeleteIcon from '@mui/icons-material/Delete' -import FileEditIcon from '@mui/icons-material/Edit' -import FileChunksIcon from '@mui/icons-material/AppRegistration' -import NoteAddIcon from '@mui/icons-material/NoteAdd' -import SearchIcon from '@mui/icons-material/Search' -import RefreshIcon from '@mui/icons-material/Refresh' +import { + IconPlus, + IconRefresh, + IconX, + IconVectorBezier2, + IconFilePencil, + IconFileUpload, + IconSearch, + IconReload, + IconPencil, + IconSettings, + IconTrash +} from '@tabler/icons-react' import doc_store_details_emptySVG from '@/assets/images/doc_store_details_empty.svg' // store @@ -83,42 +92,6 @@ const StyledTableRow = styled(TableRow)(() => ({ } })) -const StyledMenu = styled((props) => ( - -))(({ theme }) => ({ - '& .MuiPaper-root': { - borderRadius: 6, - marginTop: theme.spacing(1), - minWidth: 180, - boxShadow: - 'rgb(255, 255, 255) 0px 0px 0px 0px, rgba(0, 0, 0, 0.05) 0px 0px 0px 1px, rgba(0, 0, 0, 0.1) 0px 10px 15px -3px, rgba(0, 0, 0, 0.05) 0px 4px 6px -2px', - '& .MuiMenu-list': { - padding: '4px 0' - }, - '& .MuiMenuItem-root': { - '& .MuiSvgIcon-root': { - fontSize: 18, - color: theme.palette.text.secondary, - marginRight: theme.spacing(1.5) - }, - '&:active': { - backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity) - } - } - } -})) - const DocumentStoreDetails = () => { const theme = useTheme() const customization = useSelector((state) => state.customization) @@ -143,9 +116,6 @@ const DocumentStoreDetails = () => { const [showDeleteDocStoreDialog, setShowDeleteDocStoreDialog] = useState(false) const [deleteDocStoreDialogProps, setDeleteDocStoreDialogProps] = useState({}) - const [anchorEl, setAnchorEl] = useState(null) - const open = Boolean(anchorEl) - const URLpath = document.location.pathname.toString().split('/') const storeId = URLpath[URLpath.length - 1] === 'document-stores' ? '' : URLpath[URLpath.length - 1] @@ -308,7 +278,6 @@ const DocumentStoreDetails = () => { const isConfirmed = await confirm(confirmPayload) if (isConfirmed) { - setAnchorEl(null) setBackdropLoading(true) try { const resp = await documentsApi.refreshLoader(storeId) @@ -369,16 +338,6 @@ const DocumentStoreDetails = () => { getSpecificDocumentStore.request(storeId) } - const handleClick = (event) => { - event.preventDefault() - event.stopPropagation() - setAnchorEl(event.currentTarget) - } - - const handleClose = () => { - setAnchorEl(null) - } - useEffect(() => { getSpecificDocumentStore.request(storeId) @@ -422,83 +381,59 @@ const DocumentStoreDetails = () => { onEdit={() => onEditClicked()} > {(documentStore?.status === 'STALE' || documentStore?.status === 'UPSERTING') && ( - + )} - } - onClick={listLoaders} - > + + + + Manage + + + showStoredChunks('all')} + > + + View & Edit Chunks + + showVectorStore(documentStore.id)} + > + + Upsert All Chunks + + showVectorStoreQuery(documentStore.id)} + > + + Retrieval Query + + onStoreRefresh(documentStore.id)} + title='Re-process all loaders and upsert all chunks' + > + + Refresh + + + onStoreDelete(documentStore.vectorStoreConfig, documentStore.recordManagerConfig)} + > + + Delete + + + + - - showStoredChunks('all')} - disableRipple - > - - View & Edit Chunks - - showVectorStore(documentStore.id)} - disableRipple - > - - Upsert All Chunks - - showVectorStoreQuery(documentStore.id)} - disableRipple - > - - Retrieval Query - - onStoreRefresh(documentStore.id)} - disableRipple - title='Re-process all loaders and upsert all chunks' - > - - Refresh - - - onStoreDelete(documentStore.vectorStoreConfig, documentStore.recordManagerConfig)} - disableRipple - > - - Delete - - {getSpecificDocumentStore.data?.whereUsed?.length > 0 && ( @@ -537,8 +472,8 @@ const DocumentStoreDetails = () => { )} {!isLoading && documentStore && !documentStore?.loaders?.length ? ( - - + + { />
    No Document Added Yet
    - } - onClick={listLoaders} - > +
    ) : ( { Source(s) Chunks Chars - Actions + Actions @@ -703,19 +634,6 @@ const DocumentStoreDetails = () => { } function LoaderRow(props) { - const [anchorEl, setAnchorEl] = useState(null) - const open = Boolean(anchorEl) - - const handleClick = (event) => { - event.preventDefault() - event.stopPropagation() - setAnchorEl(event.currentTarget) - } - - const handleClose = () => { - setAnchorEl(null) - } - const formatSources = (source) => { if (source && typeof source === 'string' && source.includes('base64')) { return getFileName(source) @@ -752,45 +670,31 @@ function LoaderRow(props) { {props.loader.totalChars && } -
    - - - - - Preview & Process - - - - View & Edit Chunks - - - - Upsert Chunks - - - - - Delete - - +
    + + + + + + + + Preview & Process + + + + View & Edit Chunks + + + + Upsert Chunks + + + + + Delete + + +
    diff --git a/packages/ui/src/views/docstore/DocumentStoreStatus.jsx b/packages/ui/src/views/docstore/DocumentStoreStatus.jsx index 544009559f2..b3cb95b8309 100644 --- a/packages/ui/src/views/docstore/DocumentStoreStatus.jsx +++ b/packages/ui/src/views/docstore/DocumentStoreStatus.jsx @@ -47,42 +47,31 @@ const DocumentStoreStatus = ({ status, isTableView }) => { <> {!isTableView && (
    - {status} + + {status} +
    )} {isTableView && (
    {
    - } - > + @@ -570,16 +569,15 @@ const LoaderConfigPreviewChunks = () => { justifyContent: 'center' }} > - - + Preview Chunks - +
    ))} @@ -590,26 +588,24 @@ const LoaderConfigPreviewChunks = () => { Show Chunks in Preview -
    - + setPreviewChunkCount(e.target.value)} value={previewChunkCount ?? 25} /> - - - Preview - + + Preview Chunks +
    diff --git a/packages/ui/src/views/docstore/index.jsx b/packages/ui/src/views/docstore/index.jsx index cd3c8fd8af5..cde3347763c 100644 --- a/packages/ui/src/views/docstore/index.jsx +++ b/packages/ui/src/views/docstore/index.jsx @@ -1,29 +1,18 @@ import { useEffect, useState } from 'react' -import { useNavigate } from 'react-router-dom' +import { Link, useNavigate } from 'react-router-dom' import { useSelector } from 'react-redux' // material-ui -import { - Box, - Paper, - Skeleton, - Stack, - Table, - TableBody, - TableCell, - TableContainer, - TableHead, - TableRow, - ToggleButton, - ToggleButtonGroup, - Typography -} from '@mui/material' +import { Box, Paper, Skeleton, Stack, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@mui/material' import { useTheme } from '@mui/material/styles' +// components +import { Button } from '@/components/ui/button' +import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group' + // project imports import MainCard from '@/ui-component/cards/MainCard' import DocumentStoreCard from '@/ui-component/cards/DocumentStoreCard' -import { StyledButton } from '@/ui-component/button/StyledButton' import AddDocStoreDialog from '@/views/docstore/AddDocStoreDialog' import ErrorBoundary from '@/ErrorBoundary' import ViewHeader from '@/layout/MainLayout/ViewHeader' @@ -58,7 +47,7 @@ const Documents = () => { const [docStores, setDocStores] = useState([]) const [view, setView] = useState(localStorage.getItem('docStoreDisplayStyle') || 'card') - const handleChange = (event, nextView) => { + const handleChange = (nextView) => { if (nextView === null) return localStorage.setItem('docStoreDisplayStyle', nextView) setView(nextView) @@ -146,47 +135,25 @@ const Documents = () => { ) : ( - - + - - + + - - - } - id='btn_createVariable' - > + + + {!view || view === 'card' ? ( <> @@ -199,12 +166,9 @@ const Documents = () => { ) : ( {docStores?.filter(filterDocStores).map((data, index) => ( - goToDocumentStore(data.id)} - /> + + + ))} )} diff --git a/packages/ui/src/views/marketplaces/MarketplaceCanvas.jsx b/packages/ui/src/views/marketplaces/MarketplaceCanvas.jsx index 0c3040538e7..1937af4fbe1 100644 --- a/packages/ui/src/views/marketplaces/MarketplaceCanvas.jsx +++ b/packages/ui/src/views/marketplaces/MarketplaceCanvas.jsx @@ -5,6 +5,8 @@ import '@/views/canvas/index.css' import { useLocation, useNavigate } from 'react-router-dom' +import { headerHeight } from '@/store/constant' + // material-ui import { Toolbar, Box, AppBar } from '@mui/material' import { useTheme } from '@mui/material/styles' @@ -55,17 +57,18 @@ const MarketplaceCanvas = () => { return ( <> - + - + { @@ -72,7 +60,8 @@ const Marketplace = () => { const dispatch = useDispatch() useNotifier() - const theme = useTheme() + const searchInputRef = useRef() + useSearchShorcut(searchInputRef) const [isLoading, setLoading] = useState(true) const [error, setError] = useState(null) @@ -93,7 +82,7 @@ const Marketplace = () => { const [frameworkFilter, setFrameworkFilter] = useState([]) const getAllCustomTemplatesApi = useApi(marketplacesApi.getAllCustomTemplates) - const [activeTabValue, setActiveTabValue] = useState(0) + const [activeTabValue, setActiveTabValue] = useState(COMMUNITY_TEMPLATES_TAB_VALUE) const [templateImages, setTemplateImages] = useState({}) const [templateUsecases, setTemplateUsecases] = useState([]) const [eligibleTemplateUsecases, setEligibleTemplateUsecases] = useState([]) @@ -103,26 +92,23 @@ const Marketplace = () => { const { confirm } = useConfirm() const handleTabChange = (event, newValue) => { - if (newValue === 1 && !getAllCustomTemplatesApi.data) { + if (newValue === MY_TEMPLATES_TAB_VALUE && !getAllCustomTemplatesApi.data) { getAllCustomTemplatesApi.request() } setActiveTabValue(newValue) } const clearAllUsecases = () => { - if (activeTabValue === 0) setSelectedUsecases([]) + if (activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE) setSelectedUsecases([]) else setSelectedTemplateUsecases([]) } - const handleBadgeFilterChange = (event) => { - const { - target: { value } - } = event + const handleBadgeFilterChange = (value) => { setBadgeFilter( // On autofill we get a stringified value. typeof value === 'string' ? value.split(',') : value ) - const data = activeTabValue === 0 ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data + const data = activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data getEligibleUsecases(data, { typeFilter, badgeFilter: typeof value === 'string' ? value.split(',') : value, @@ -131,15 +117,12 @@ const Marketplace = () => { }) } - const handleTypeFilterChange = (event) => { - const { - target: { value } - } = event + const handleTypeFilterChange = (value) => { setTypeFilter( // On autofill we get a stringified value. typeof value === 'string' ? value.split(',') : value ) - const data = activeTabValue === 0 ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data + const data = activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data getEligibleUsecases(data, { typeFilter: typeof value === 'string' ? value.split(',') : value, badgeFilter, @@ -148,15 +131,12 @@ const Marketplace = () => { }) } - const handleFrameworkFilterChange = (event) => { - const { - target: { value } - } = event + const handleFrameworkFilterChange = (value) => { setFrameworkFilter( // On autofill we get a stringified value. typeof value === 'string' ? value.split(',') : value ) - const data = activeTabValue === 0 ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data + const data = activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data getEligibleUsecases(data, { typeFilter, badgeFilter, @@ -165,7 +145,7 @@ const Marketplace = () => { }) } - const handleViewChange = (event, nextView) => { + const handleViewChange = (nextView) => { if (nextView === null) return localStorage.setItem('mpDisplayStyle', nextView) setView(nextView) @@ -173,7 +153,7 @@ const Marketplace = () => { const onSearchChange = (event) => { setSearch(event.target.value) - const data = activeTabValue === 0 ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data + const data = activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE ? getAllTemplatesMarketplacesApi.data : getAllCustomTemplatesApi.data getEligibleUsecases(data, { typeFilter, badgeFilter, frameworkFilter, search: event.target.value }) } @@ -228,13 +208,13 @@ const Marketplace = () => { function filterFlows(data) { return ( (data.categories ? data.categories.join(',') : '').toLowerCase().indexOf(search.toLowerCase()) > -1 || - data.templateName.toLowerCase().indexOf(search.toLowerCase()) > -1 || + (data.templateName || data.name).toLowerCase().indexOf(search.toLowerCase()) > -1 || (data.description && data.description.toLowerCase().indexOf(search.toLowerCase()) > -1) ) } function filterByBadge(data) { - return badgeFilter.length > 0 ? badgeFilter.includes(data.badge) : true + return badgeFilter.length > 0 ? badgeFilter.includes(capitalizeWord(data.badge)) : true } function filterByType(data) { @@ -246,7 +226,7 @@ const Marketplace = () => { } function filterByUsecases(data) { - if (activeTabValue === 0) + if (activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE) return selectedUsecases.length > 0 ? (data.usecases || []).some((item) => selectedUsecases.includes(item)) : true else return selectedTemplateUsecases.length > 0 @@ -266,7 +246,7 @@ const Marketplace = () => { filteredData = filteredData.filter( (data) => (data.categories ? data.categories.join(',') : '').toLowerCase().indexOf(filter.search.toLowerCase()) > -1 || - data.templateName.toLowerCase().indexOf(filter.search.toLowerCase()) > -1 || + (data.templateName || data.name).toLowerCase().indexOf(filter.search.toLowerCase()) > -1 || (data.description && data.description.toLowerCase().indexOf(filter.search.toLowerCase()) > -1) ) } @@ -277,7 +257,7 @@ const Marketplace = () => { usecases.push(...filteredData[i].usecases) } } - if (activeTabValue === 0) setEligibleUsecases(Array.from(new Set(usecases)).sort()) + if (activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE) setEligibleUsecases(Array.from(new Set(usecases)).sort()) else setEligibleTemplateUsecases(Array.from(new Set(usecases)).sort()) } @@ -404,404 +384,374 @@ const Marketplace = () => { ) : ( - - + + + + + + + + + + + + + - - Tag - - + + + {badgeFilter.length === 0 ? ( + <> + Tags + + + ) : ( + <> + {badgeFilter.length > 1 + ? `${badgeFilter[0]} + ${badgeFilter.length - 1}` + : `${badgeFilter[0]}`} + + + )} + + {badges.map((name) => ( - { + handleBadgeFilterChange( + checked ? [...badgeFilter, name] : badgeFilter.filter((item) => item !== name) + ) + }} key={name} - value={name} - sx={{ display: 'flex', alignItems: 'center', gap: 1, p: 1 }} > - -1} sx={{ p: 0 }} /> - - + {name} + ))} - - - - - Type - - - - - - Framework - - - - - } - onSearchChange={onSearchChange} - search={true} - searchPlaceholder='Search Name/Description/Node' - title='Marketplace' - > - - - - - - - - - - - - - - - - {usecases.map((usecase, index) => ( - { - setSelectedUsecases( - event.target.checked - ? [...selectedUsecases, usecase] - : selectedUsecases.filter((item) => item !== usecase) - ) - }} - /> - } - label={usecase} + + + + + {activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE ? ( + selectedUsecases.length === 0 ? ( + <> + Use Cases + + + ) : ( + <> + {selectedUsecases.length > 1 + ? `${selectedUsecases[0]} + ${selectedUsecases.length - 1}` + : `${selectedUsecases[0]}`} + + + ) + ) : selectedTemplateUsecases.length === 0 ? ( + <> + Use Cases + + + ) : ( + <> + {selectedTemplateUsecases.length > 1 + ? `${selectedTemplateUsecases[0]} + ${selectedTemplateUsecases.length - 1}` + : `${selectedTemplateUsecases[0]}`} + + + )} + + + {activeTabValue === COMMUNITY_TEMPLATES_TAB_VALUE + ? usecases.map((usecase, index) => ( + { + setSelectedUsecases( + checked + ? [...selectedUsecases, usecase] + : selectedUsecases.filter((item) => item !== usecase) + ) + }} + key={index} + > + {usecase} + + )) + : templateUsecases.map((usecase, index) => ( + { + setSelectedTemplateUsecases( + checked + ? [...selectedTemplateUsecases, usecase] + : selectedTemplateUsecases.filter((item) => item !== usecase) + ) + }} + key={index} + > + {usecase} + + ))} + + + + + + {!view || view === 'card' ? ( + <> + {isLoading ? ( + + + + + + ) : ( + + {getAllTemplatesMarketplacesApi.data + ?.filter(filterByBadge) + .filter(filterByType) + .filter(filterFlows) + .filter(filterByFramework) + .filter(filterByUsecases) + .map((data, index) => ( + + {(data.type === 'Chatflow' || data.type === 'Agentflow') && ( + + + + )} + {data.type === 'Tool' && ( + goToTool(data)} /> + )} + + ))} + + )} + + ) : ( + - ))} - - {selectedUsecases.length > 0 && ( - - )} - - {!view || view === 'card' ? ( - <> - {isLoading ? ( - - - - - - ) : ( - - {getAllTemplatesMarketplacesApi.data - ?.filter(filterByBadge) - .filter(filterByType) - .filter(filterFlows) - .filter(filterByFramework) - .filter(filterByUsecases) - .map((data, index) => ( - - {data.badge && ( - - {(data.type === 'Chatflow' || data.type === 'Agentflow') && ( - goToCanvas(data)} - data={data} - images={images[data.id]} - /> - )} - {data.type === 'Tool' && ( - goToTool(data)} /> - )} - - )} - {!data.badge && (data.type === 'Chatflow' || data.type === 'Agentflow') && ( - goToCanvas(data)} - data={data} - images={images[data.id]} - /> - )} - {!data.badge && data.type === 'Tool' && ( - goToTool(data)} /> - )} - - ))} - + )} + + {!isLoading && + (!getAllTemplatesMarketplacesApi.data || getAllTemplatesMarketplacesApi.data.length === 0) && ( + + + WorkflowEmptySVG + +
    No Marketplace Yet
    +
    )} - - ) : ( - - )} - - {!isLoading && (!getAllTemplatesMarketplacesApi.data || getAllTemplatesMarketplacesApi.data.length === 0) && ( - - - WorkflowEmptySVG - -
    No Marketplace Yet
    -
    - )} - - - - {templateUsecases.map((usecase, index) => ( - { - setSelectedTemplateUsecases( - event.target.checked - ? [...selectedTemplateUsecases, usecase] - : selectedTemplateUsecases.filter((item) => item !== usecase) - ) - }} - /> - } - label={usecase} + + + {!view || view === 'card' ? ( + <> + {isLoading ? ( + + + + + + ) : ( + + {getAllCustomTemplatesApi.data + ?.filter(filterByBadge) + .filter(filterByType) + .filter(filterFlows) + .filter(filterByFramework) + .filter(filterByUsecases) + .map((data, index) => ( + + {(data.type === 'Chatflow' || data.type === 'Agentflow') && ( + + + + )} + {data.type === 'Tool' && ( + goToTool(data)} /> + )} + + ))} + + )} + + ) : ( + - ))} - - {selectedTemplateUsecases.length > 0 && ( - - )} - {!view || view === 'card' ? ( - <> - {isLoading ? ( - - - - - - ) : ( - - {getAllCustomTemplatesApi.data - ?.filter(filterByBadge) - .filter(filterByType) - .filter(filterFlows) - .filter(filterByFramework) - .filter(filterByUsecases) - .map((data, index) => ( - - {data.badge && ( - - {(data.type === 'Chatflow' || data.type === 'Agentflow') && ( - goToCanvas(data)} - data={data} - images={templateImages[data.id]} - /> - )} - {data.type === 'Tool' && ( - goToTool(data)} /> - )} - - )} - {!data.badge && (data.type === 'Chatflow' || data.type === 'Agentflow') && ( - goToCanvas(data)} - data={data} - images={templateImages[data.id]} - /> - )} - {!data.badge && data.type === 'Tool' && ( - goToTool(data)} /> - )} - - ))} + )} + {!isLoading && (!getAllCustomTemplatesApi.data || getAllCustomTemplatesApi.data.length === 0) && ( + + + WorkflowEmptySVG - )} - - ) : ( - - )} - {!isLoading && (!getAllCustomTemplatesApi.data || getAllCustomTemplatesApi.data.length === 0) && ( - - - WorkflowEmptySVG - -
    No Saved Custom Templates
    -
    - )} -
    +
    No Saved Custom Templates
    + + )} + + )} diff --git a/packages/ui/src/views/tools/ToolDialog.jsx b/packages/ui/src/views/tools/ToolDialog.jsx index 8be2a325638..21303d53ef0 100644 --- a/packages/ui/src/views/tools/ToolDialog.jsx +++ b/packages/ui/src/views/tools/ToolDialog.jsx @@ -1,12 +1,13 @@ -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import { useState, useEffect, useCallback, useMemo } from 'react' import { useDispatch, useSelector } from 'react-redux' import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackbarAction } from '@/store/actions' import { cloneDeep } from 'lodash' -import { Box, Button, Typography, Dialog, DialogActions, DialogContent, DialogTitle, Stack, OutlinedInput } from '@mui/material' -import { StyledButton } from '@/ui-component/button/StyledButton' +import PerfectScrollbar from 'react-perfect-scrollbar' +import { Box, Typography, Stack, OutlinedInput } from '@mui/material' +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Grid } from '@/ui-component/grid/Grid' import { TooltipWithParser } from '@/ui-component/tooltip/TooltipWithParser' import { GridActionsCellItem } from '@mui/x-data-grid' @@ -57,8 +58,6 @@ try { }` const ToolDialog = ({ show, dialogProps, onUseTemplate, onCancel, onConfirm, setError }) => { - const portalElement = document.getElementById('portal') - const customization = useSelector((state) => state.customization) const dispatch = useDispatch() @@ -409,164 +408,156 @@ const ToolDialog = ({ show, dialogProps, onUseTemplate, onCancel, onConfirm, set } } - const component = show ? ( - - - - {dialogProps.title} - - {dialogProps.type === 'EDIT' && ( - <> - - - - )} - - - - - - - - - Tool Name -  * - - - - setToolName(e.target.value)} - /> - - - - - Tool description -  * - - - - setToolDesc(e.target.value)} - /> - - - - Tool Icon Source - - setToolIcon(e.target.value)} - /> - - - - - Input Schema - - - {dialogProps.type !== 'TEMPLATE' && ( - - )} - - - - - - - Javascript Function - - - - - {dialogProps.type !== 'TEMPLATE' && ( - - )} - + + + )} + + + + + + + + Tool Name +  * + + + + setToolName(e.target.value)} + /> + + + + + Tool description +  * + + + + setToolDesc(e.target.value)} + /> + + + + Tool Icon Source + + setToolIcon(e.target.value)} + /> + + + + + Input Schema + + + {dialogProps.type !== 'TEMPLATE' && ( + + )} + + + + + + + Javascript Function + + + + + {dialogProps.type !== 'TEMPLATE' && ( + + )} + + + setToolFunc(code)} + /> + - setToolFunc(code)} - /> - - - - - {dialogProps.type === 'EDIT' && ( - deleteTool()}> - Delete - - )} - {dialogProps.type === 'TEMPLATE' && ( - - Use Template - - )} - {dialogProps.type !== 'TEMPLATE' && ( - (dialogProps.type === 'ADD' || dialogProps.type === 'IMPORT' ? addNewTool() : saveTool())} - > - {dialogProps.confirmButtonName} - - )} - + + + {dialogProps.type === 'EDIT' && ( + + )} + {dialogProps.type === 'TEMPLATE' && ( + + )} + {dialogProps.type !== 'TEMPLATE' && ( + + )} + + + {exportAsTemplateDialogOpen && ( setExportAsTemplateDialogOpen(false)} /> )} - setShowHowToDialog(false)} /> - - ) : null - - return createPortal(component, portalElement) + + ) } ToolDialog.propTypes = { diff --git a/packages/ui/src/views/tools/index.jsx b/packages/ui/src/views/tools/index.jsx index f858f0ade5b..8868829d1ed 100644 --- a/packages/ui/src/views/tools/index.jsx +++ b/packages/ui/src/views/tools/index.jsx @@ -1,14 +1,17 @@ import { useEffect, useState, useRef } from 'react' // material-ui -import { Box, Stack, Button, ButtonGroup, Skeleton, ToggleButtonGroup, ToggleButton } from '@mui/material' +import { Box, Stack, Skeleton } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group' // project imports import MainCard from '@/ui-component/cards/MainCard' import ItemCard from '@/ui-component/cards/ItemCard' import { gridSpacing } from '@/store/constant' import ToolEmptySVG from '@/assets/images/tools_empty.svg' -import { StyledButton } from '@/ui-component/button/StyledButton' import ToolDialog from './ToolDialog' import { ToolsTable } from '@/ui-component/table/ToolsListTable' @@ -22,12 +25,10 @@ import useApi from '@/hooks/useApi' import { IconPlus, IconFileUpload, IconLayoutGrid, IconList } from '@tabler/icons-react' import ViewHeader from '@/layout/MainLayout/ViewHeader' import ErrorBoundary from '@/ErrorBoundary' -import { useTheme } from '@mui/material/styles' // ==============================|| CHATFLOWS ||============================== // const Tools = () => { - const theme = useTheme() const getAllToolsApi = useApi(toolsApi.getAllTools) const [isLoading, setLoading] = useState(true) @@ -38,7 +39,7 @@ const Tools = () => { const inputRef = useRef(null) - const handleChange = (event, nextView) => { + const handleChange = (nextView) => { if (nextView === null) return localStorage.setItem('toolsDisplayStyle', nextView) setView(nextView) @@ -139,45 +140,25 @@ const Tools = () => { ) : ( - - + - - + + - - + + + - { onChange={(e) => handleFileUpload(e)} /> - - } - sx={{ borderRadius: 2, height: 40 }} - > - Create - - + {!view || view === 'card' ? ( <> diff --git a/packages/ui/src/views/variables/AddEditVariableDialog.jsx b/packages/ui/src/views/variables/AddEditVariableDialog.jsx index 9647ffc0448..41f68fd75f6 100644 --- a/packages/ui/src/views/variables/AddEditVariableDialog.jsx +++ b/packages/ui/src/views/variables/AddEditVariableDialog.jsx @@ -1,14 +1,18 @@ -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' import { useState, useEffect } from 'react' import { useDispatch } from 'react-redux' import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackbarAction } from '@/store/actions' // Material -import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Box, Typography, OutlinedInput } from '@mui/material' +import { Box, Typography } from '@mui/material' + +// components +import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog' +import { Input } from '@/components/ui/input' +import { Select, SelectItem } from '@/components/ui/select' // Project imports -import { StyledButton } from '@/ui-component/button/StyledButton' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' // Icons @@ -24,7 +28,6 @@ import useNotifier from '@/utils/useNotifier' // const import { HIDE_CANVAS_DIALOG, SHOW_CANVAS_DIALOG } from '@/store/actions' -import { Dropdown } from '@/ui-component/dropdown/Dropdown' const variableTypes = [ { @@ -40,8 +43,6 @@ const variableTypes = [ ] const AddEditVariableDialog = ({ show, dialogProps, onCancel, onConfirm, setError }) => { - const portalElement = document.getElementById('portal') - const dispatch = useDispatch() // ==============================|| Snackbar ||============================== // @@ -176,93 +177,78 @@ const AddEditVariableDialog = ({ show, dialogProps, onCancel, onConfirm, setErro } } - const component = show ? ( - - -
    - - {dialogProps.type === 'ADD' ? 'Add Variable' : 'Edit Variable'} -
    -
    - - -
    + return ( + <> + + + + + + {dialogProps.type === 'ADD' ? 'Add Variable' : 'Edit Variable'} + + + Variable Name * - -
    -
    - setVariableName(e.target.value)} - value={variableName ?? ''} - id='txtInput_variableName' - /> -
    - -
    + setVariableName(e.target.value)} + value={variableName ?? ''} + id='txtInput_variableName' + /> + + Type * -
    -
    - setVariableType(newValue)} - value={variableType ?? 'choose an option'} - id='dropdown_variableType' - /> -
    - {variableType === 'static' && ( - -
    - - Value * - -
    -
    - setVariableValue(e.target.value)} - value={variableValue ?? ''} - id='txtInput_variableValue' - /> +
    - )} -
    - - (dialogType === 'ADD' ? addNewVariable() : saveVariable())} - id='btn_confirmAddingNewVariable' - > - {dialogProps.confirmButtonName} - - + {variableType === 'static' && ( + +
    + + Value * + +
    +
    + setVariableValue(e.target.value)} + value={variableValue ?? ''} + id='txtInput_variableValue' + /> +
    + )} + + + + +
    - - ) : null - - return createPortal(component, portalElement) + + ) } AddEditVariableDialog.propTypes = { diff --git a/packages/ui/src/views/variables/HowToUseVariablesDialog.jsx b/packages/ui/src/views/variables/HowToUseVariablesDialog.jsx index 61a59acbe84..889c5eb45c0 100644 --- a/packages/ui/src/views/variables/HowToUseVariablesDialog.jsx +++ b/packages/ui/src/views/variables/HowToUseVariablesDialog.jsx @@ -1,6 +1,5 @@ -import { createPortal } from 'react-dom' import PropTypes from 'prop-types' -import { Dialog, DialogContent, DialogTitle } from '@mui/material' +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { CodeEditor } from '@/ui-component/editor/CodeEditor' const overrideConfig = `{ @@ -12,22 +11,13 @@ const overrideConfig = `{ }` const HowToUseVariablesDialog = ({ show, onCancel }) => { - const portalElement = document.getElementById('portal') - - const component = show ? ( - - - How To Use Variables - + return ( + -

    + + How To Use Variables + +

    Variables can be used in Custom Tool, Custom Function, Custom Loader, If Else Function with the $ prefix.

    { lang={'js'} basicSetup={{ highlightActiveLine: false, highlightActiveLineGutter: false }} /> -

    +

    Variables can also be used in Text Field parameter of any node. For example, in System Message of Agent:

    { lang={'js'} basicSetup={{ highlightActiveLine: false, highlightActiveLineGutter: false }} /> -

    +

    If variable type is Static, the value will be retrieved as it is. If variable type is Runtime, the value will be retrieved from .env file.

    -

    +

    You can also override variable values in API overrideConfig using vars:

    {

    - ) : null - - return createPortal(component, portalElement) + ) } HowToUseVariablesDialog.propTypes = { diff --git a/packages/ui/src/views/variables/index.jsx b/packages/ui/src/views/variables/index.jsx index e9a1fbf48a5..aed8039340b 100644 --- a/packages/ui/src/views/variables/index.jsx +++ b/packages/ui/src/views/variables/index.jsx @@ -7,7 +7,6 @@ import moment from 'moment' import { styled } from '@mui/material/styles' import { tableCellClasses } from '@mui/material/TableCell' import { - Button, Box, Skeleton, Stack, @@ -18,14 +17,15 @@ import { TableHead, TableRow, Paper, - IconButton, Chip, useTheme } from '@mui/material' +// components +import { Button } from '@/components/ui/button' + // project imports import MainCard from '@/ui-component/cards/MainCard' -import { StyledButton } from '@/ui-component/button/StyledButton' import ConfirmDialog from '@/ui-component/dialog/ConfirmDialog' // API @@ -39,7 +39,7 @@ import useConfirm from '@/hooks/useConfirm' import useNotifier from '@/utils/useNotifier' // Icons -import { IconTrash, IconEdit, IconX, IconPlus, IconVariable } from '@tabler/icons-react' +import { IconTrash, IconX, IconPlus, IconVariable } from '@tabler/icons-react' import VariablesEmptySVG from '@/assets/images/variables_empty.svg' // const @@ -47,6 +47,7 @@ import AddEditVariableDialog from './AddEditVariableDialog' import HowToUseVariablesDialog from './HowToUseVariablesDialog' import ViewHeader from '@/layout/MainLayout/ViewHeader' import ErrorBoundary from '@/ErrorBoundary' +import { IconPencil } from '@tabler/icons-react' const StyledTableCell = styled(TableCell)(({ theme }) => ({ borderColor: theme.palette.grey[900] + 25, @@ -139,7 +140,7 @@ const Variables = () => { key: new Date().getTime() + Math.random(), variant: 'success', action: (key) => ( - ) @@ -157,7 +158,7 @@ const Variables = () => { variant: 'error', persist: true, action: (key) => ( - ) @@ -201,18 +202,13 @@ const Variables = () => { ) : ( - - } - id='btn_createVariable' - > + {!isLoading && variables.length === 0 ? ( @@ -245,8 +241,7 @@ const Variables = () => { Type Last Updated Created - - + Actions @@ -271,9 +266,6 @@ const Variables = () => { - - - @@ -294,9 +286,6 @@ const Variables = () => { - - - ) : ( @@ -346,18 +335,25 @@ const Variables = () => { {moment(variable.createdDate).format('MMMM Do, YYYY')} - edit(variable)}> - - - - - deleteVariable(variable)} - > - - +
    + + +
    ))} diff --git a/packages/ui/tailwind.config.js b/packages/ui/tailwind.config.js new file mode 100644 index 00000000000..a58878b965f --- /dev/null +++ b/packages/ui/tailwind.config.js @@ -0,0 +1,67 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/**/*.{js,jsx,ts,tsx}'], + darkMode: ['class'], + theme: { + extend: { + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + 1: 'hsl(var(--chart-1))', + 2: 'hsl(var(--chart-2))', + 3: 'hsl(var(--chart-3))', + 4: 'hsl(var(--chart-4))', + 5: 'hsl(var(--chart-5))' + }, + sidebar: { + DEFAULT: 'hsl(var(--sidebar-background))', + foreground: 'hsl(var(--sidebar-foreground))', + primary: 'hsl(var(--sidebar-primary))', + 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', + accent: 'hsl(var(--sidebar-accent))', + 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', + border: 'hsl(var(--sidebar-border))', + ring: 'hsl(var(--sidebar-ring))' + } + } + } + }, + plugins: [require('tailwindcss-animate')] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d74a91706b0..f277088be36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,7 +36,7 @@ importers: version: 8.10.0(eslint@8.57.0) eslint-config-react-app: specifier: ^7.0.1 - version: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) + version: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) eslint-plugin-jsx-a11y: specifier: ^6.6.1 version: 6.8.0(eslint@8.57.0) @@ -133,7 +133,7 @@ importers: version: 3.9.25 '@getzep/zep-cloud': specifier: ~1.0.7 - version: 1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))) + version: 1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(paklq7onmkfazd5f6qlllyxtve)) '@getzep/zep-js': specifier: ^0.9.0 version: 0.9.0 @@ -166,7 +166,7 @@ importers: version: 0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)) '@langchain/community': specifier: ^0.3.11 - version: 0.3.14(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.625.0)(@aws-sdk/client-bedrock-runtime@3.422.0)(@aws-sdk/client-dynamodb@3.529.1)(@aws-sdk/client-kendra@3.624.0)(@aws-sdk/client-s3@3.529.1)(@aws-sdk/credential-provider-node@3.529.1)(@datastax/astra-db-ts@1.5.0)(@elastic/elasticsearch@8.12.2)(@getzep/zep-cloud@1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))))(@getzep/zep-js@0.9.0)(@gomomento/sdk-core@1.68.1)(@gomomento/sdk@1.68.1(encoding@0.1.13))(@google-ai/generativelanguage@2.6.0(encoding@0.1.13))(@huggingface/inference@2.6.4)(@ibm-cloud/watsonx-ai@1.1.2)(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@mendable/firecrawl-js@0.0.28)(@notionhq/client@2.2.14(encoding@0.1.13))(@opensearch-project/opensearch@1.2.0)(@pinecone-database/pinecone@4.0.0)(@qdrant/js-client-rest@1.9.0(typescript@5.5.2))(@smithy/eventstream-codec@2.1.4)(@smithy/protocol-http@3.2.2)(@smithy/signature-v4@2.1.4)(@smithy/util-utf8@2.2.0)(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@upstash/redis@1.22.1(encoding@0.1.13))(@upstash/vector@1.1.5)(@zilliz/milvus2-sdk-node@2.3.5)(apify-client@2.9.3)(assemblyai@4.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(axios@1.6.2)(cheerio@1.0.0-rc.12)(chromadb@1.8.1(@google/generative-ai@0.15.0)(cohere-ai@7.10.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(cohere-ai@7.10.0(encoding@0.1.13))(crypto-js@4.2.0)(d3-dsv@2.0.0)(encoding@0.1.13)(epub2@3.0.2(ts-toolbelt@9.6.0))(faiss-node@0.5.1)(google-auth-library@9.6.3(encoding@0.1.13))(html-to-text@9.0.5)(ibm-cloud-sdk-core@5.1.0)(ignore@5.3.1)(ioredis@5.3.2)(jsdom@22.1.0(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.4))(jsonwebtoken@9.0.2)(lodash@4.17.21)(lunary@0.7.12(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(react@18.2.0))(mammoth@1.7.0)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(neo4j-driver@5.27.0)(notion-to-md@3.1.1(encoding@0.1.13))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(pdf-parse@1.1.1)(pg@8.11.3)(playwright@1.42.1)(portkey-ai@0.1.16)(puppeteer@20.9.0(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.5.2)(utf-8-validate@6.0.4))(pyodide@0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(redis@4.6.13)(replicate@0.31.1)(srt-parser-2@1.2.3)(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))(weaviate-ts-client@1.6.0(encoding@0.1.13)(graphql@16.8.1))(ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4)) + version: 0.3.14(6ab3xuwm3jgrubrqnob5nctf4m) '@langchain/core': specifier: 0.3.18 version: 0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)) @@ -325,13 +325,13 @@ importers: version: 3.11.2 langchain: specifier: ^0.3.5 - version: 0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2))) + version: 0.3.5(paklq7onmkfazd5f6qlllyxtve) langfuse: specifier: 3.3.4 version: 3.3.4 langfuse-langchain: specifier: ^3.3.4 - version: 3.3.4(langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))) + version: 3.3.4(langchain@0.3.5(paklq7onmkfazd5f6qlllyxtve)) langsmith: specifier: 0.1.6 version: 0.1.6 @@ -418,7 +418,7 @@ importers: version: 1.2.3 typeorm: specifier: ^0.3.6 - version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) weaviate-ts-client: specifier: ^1.1.0 version: 1.6.0(encoding@0.1.13)(graphql@16.8.1) @@ -617,7 +617,7 @@ importers: version: 5.1.7 typeorm: specifier: ^0.3.6 - version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) uuid: specifier: ^9.0.1 version: 9.0.1 @@ -698,8 +698,8 @@ importers: specifier: ^2.0.1 version: 2.0.1 '@mui/base': - specifier: 5.0.0-beta.40 - version: 5.0.0-beta.40(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + specifier: 5.0.0-beta.68 + version: 5.0.0-beta.68(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@mui/icons-material': specifier: 5.0.3 version: 5.0.3(@mui/material@5.15.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.65)(react@18.2.0) @@ -712,6 +712,9 @@ importers: '@mui/x-data-grid': specifier: 6.8.0 version: 6.8.0(@mui/material@5.15.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.12(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@radix-ui/react-slot': + specifier: ^1.1.1 + version: 1.1.1(@types/react@18.2.65)(react@18.2.0) '@tabler/icons-react': specifier: ^3.3.0 version: 3.3.0(react@18.2.0) @@ -723,22 +726,25 @@ importers: version: 4.21.24(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.1) '@uiw/react-codemirror': specifier: ^4.21.21 - version: 4.21.24(@babel/runtime@7.24.0)(@codemirror/autocomplete@6.14.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.1)(@lezer/common@1.2.1))(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.25.1)(codemirror@6.0.1(@lezer/common@1.2.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 4.21.24(@babel/runtime@7.26.0)(@codemirror/autocomplete@6.14.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.1)(@lezer/common@1.2.1))(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.25.1)(codemirror@6.0.1(@lezer/common@1.2.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) axios: specifier: 1.6.2 version: 1.6.2(debug@4.3.4) + class-variance-authority: + specifier: ^0.7.1 + version: 0.7.1 clsx: - specifier: ^1.1.1 + specifier: ^1.2.1 version: 1.2.1 dotenv: specifier: ^16.0.0 version: 16.4.5 flowise-embed: specifier: latest - version: 2.0.8 + version: 2.0.9 flowise-embed-react: specifier: latest - version: 1.0.6(@types/node@20.12.12)(flowise-embed@2.0.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.71.1)(terser@5.29.1)(typescript@5.5.2) + version: 1.0.6(@types/node@20.12.12)(flowise-embed@2.0.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.71.1)(terser@5.29.1)(typescript@5.5.2) flowise-react-json-view: specifier: '*' version: 1.21.7(@types/react@18.2.65)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -771,7 +777,7 @@ importers: version: 18.2.0 react-code-blocks: specifier: ^0.0.9-0 - version: 0.0.9-0(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + version: 0.0.9-0(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@19.0.0)(react@18.2.0) react-color: specifier: ^2.19.3 version: 2.19.3(react@18.2.0) @@ -823,6 +829,12 @@ importers: socket.io-client: specifier: ^4.6.1 version: 4.7.4(bufferutil@4.0.8) + tailwind-merge: + specifier: ^2.6.0 + version: 2.6.0 + tailwindcss-animate: + specifier: ^1.0.7 + version: 1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))) uuid: specifier: ^9.0.1 version: 9.0.1 @@ -848,18 +860,27 @@ importers: '@vitejs/plugin-react': specifier: ^4.2.0 version: 4.2.1(vite@5.1.6(@types/node@20.12.12)(sass@1.71.1)(terser@5.29.1)) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) + postcss: + specifier: ^8.4.49 + version: 8.4.49 pretty-quick: specifier: ^3.1.3 version: 3.3.1(prettier@3.2.5) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2) + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(@swc/core@1.4.6)(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2) rimraf: specifier: ^5.0.5 version: 5.0.5 sass: specifier: ^1.42.1 version: 1.71.1 + tailwindcss: + specifier: ^3.4.17 + version: 3.4.17(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) typescript: specifier: ^5.4.5 version: 5.5.2 @@ -2513,6 +2534,10 @@ packages: resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.25.9': resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} @@ -3122,6 +3147,12 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' + '@floating-ui/react-dom@2.1.2': + resolution: {integrity: sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + '@floating-ui/utils@0.2.1': resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} @@ -3231,6 +3262,7 @@ packages: '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -3238,6 +3270,7 @@ packages: '@humanwhocodes/object-schema@2.0.2': resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + deprecated: Use @eslint/object-schema instead '@ibm-cloud/watsonx-ai@1.1.2': resolution: {integrity: sha512-0+ClK12jk1Jk28Hwc2BDmKkTXPjFkQOfCKzUk82TsoPwAIEVN+rlM1cny52d3oSMXXbeKorVDmnIEbXPseHiQA==} @@ -3944,13 +3977,13 @@ packages: '@types/react': optional: true - '@mui/base@5.0.0-beta.40': - resolution: {integrity: sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==} - engines: {node: '>=12.0.0'} + '@mui/base@5.0.0-beta.68': + resolution: {integrity: sha512-F1JMNeLS9Qhjj3wN86JUQYBtJoXyQvknxlzwNl6eS0ZABo1MiohMONj3/WQzYPSXIKC2bS/ZbyBzdHhi2GnEpA==} + engines: {node: '>=14.0.0'} peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true @@ -4051,10 +4084,10 @@ packages: '@types/react': optional: true - '@mui/types@7.2.14': - resolution: {integrity: sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==} + '@mui/types@7.2.20': + resolution: {integrity: sha512-straFHD7L8v05l/N5vcWk+y7eL9JF0C2mtph/y4BPm3gn2Eh61dDwDB65pa8DLss3WJfDXYC7Kx5yjP0EmXpgw==} peerDependencies: - '@types/react': ^17.0.0 || ^18.0.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@types/react': optional: true @@ -4079,6 +4112,16 @@ packages: '@types/react': optional: true + '@mui/utils@6.3.0': + resolution: {integrity: sha512-MkDBF08OPVwXhAjedyMykRojgvmf0y/jxkBWjystpfI/pasyTYrfdv4jic6s7j3y2+a+SJzS9qrD6X8ZYj/8AQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@mui/x-data-grid@6.8.0': resolution: {integrity: sha512-L4CJb2zJDkyBXItfY1QwXt57ap1vIigPGiNrmuJZ8APS1jHafO1dftBWSfJyDJXsnQ5UsDBXsX1nagX51AebpQ==} engines: {node: '>=14.0.0'} @@ -4807,6 +4850,24 @@ packages: resolution: {integrity: sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==} engines: {node: '>=18.0.0', pnpm: '>=8'} + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.1.1': + resolution: {integrity: sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@reactflow/background@11.3.9': resolution: {integrity: sha512-byj/G9pEC8tN0wT/ptcl/LkEP/BBfa33/SvBkqE4XwyofckqF87lKp573qGlisfnsijwAbpDlf81PuFL41So4Q==} peerDependencies: @@ -5999,6 +6060,9 @@ packages: '@types/prop-types@15.7.11': resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + '@types/q@1.5.8': resolution: {integrity: sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==} @@ -6390,6 +6454,7 @@ packages: acorn-import-assertions@1.9.0: resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + deprecated: package has been renamed to acorn-import-attributes peerDependencies: acorn: ^8 @@ -6797,8 +6862,8 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true - autoprefixer@10.4.18: - resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -7120,6 +7185,10 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + browser-process-hrtime@1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} @@ -7128,6 +7197,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.3: + resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -7274,6 +7348,9 @@ packages: caniuse-lite@1.0.30001597: resolution: {integrity: sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==} + caniuse-lite@1.0.30001690: + resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} + canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} engines: {node: '>=6'} @@ -7414,6 +7491,9 @@ packages: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} + class-variance-authority@0.7.1: + resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + classcat@5.0.4: resolution: {integrity: sha512-sbpkOw6z413p+HDGcBENe498WM9woqWHiJxCq7nvmxe9WmrUmqfAcxpIwAiMtM5Q3AhYkzXcNQHqsWq0mND51g==} @@ -7519,6 +7599,10 @@ packages: resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} engines: {node: '>=6'} + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} @@ -8436,6 +8520,9 @@ packages: electron-to-chromium@1.4.701: resolution: {integrity: sha512-K3WPQ36bUOtXg/1+69bFlFOvdSm0/0bGqmsfPDLRXLanoKXdA+pIWuf/VbA9b+2CwBFuONgl4NEz4OEm+OJOKA==} + electron-to-chromium@1.5.76: + resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} + emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} engines: {node: '>=12'} @@ -8583,6 +8670,10 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -8764,6 +8855,7 @@ packages: eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true esm@3.2.25: @@ -9080,6 +9172,10 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + filter-obj@5.1.0: resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} engines: {node: '>=14.16'} @@ -9161,8 +9257,8 @@ packages: flowise-embed: '*' react: 18.x - flowise-embed@2.0.8: - resolution: {integrity: sha512-3/QVrnuby2qo5tiiLlqYec/M3P5FfzMJqBRV9FLgQ7WPnuDbkA+VCQtYVk7mU1gkktjmyaXba9EshRbs+Pj7Mw==} + flowise-embed@2.0.9: + resolution: {integrity: sha512-h2Mb38GCwRz10EusJT7qHJDEuOq6h5TxNJr5yG/V/CLw3/kBdae5wBvL2IN3uwT7IA02nB182l8Bh8CpChbZxQ==} flowise-react-json-view@1.21.7: resolution: {integrity: sha512-oFjwtSLJkUWk6waLh8heCQ4o9b60FJRA2X8LefaZp5WaJvj/Rr2HILjk+ocf1JkfTcq8jc6t2jfIybg4leWsaQ==} @@ -10659,8 +10755,8 @@ packages: node-notifier: optional: true - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true jmespath@0.16.0: @@ -11031,8 +11127,8 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} lines-and-columns@1.2.4: @@ -11579,6 +11675,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -11976,6 +12076,9 @@ packages: node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + nodemon@2.0.22: resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} engines: {node: '>=8.10.0'} @@ -12655,6 +12758,9 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -12989,8 +13095,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 @@ -13130,6 +13236,10 @@ packages: resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} engines: {node: '>=4'} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + postcss-svgo@5.1.0: resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} engines: {node: ^10 || ^12 || >=14.0} @@ -13149,14 +13259,14 @@ packages: resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} engines: {node: '>=6.0.0'} - postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.39: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -13411,7 +13521,7 @@ packages: puppeteer@20.9.0: resolution: {integrity: sha512-kAglT4VZ9fWEGg3oLc4/de+JcONuEJhlh3J6f5R1TLkrY/EHHIHxWXDOzXvaxQCtedmyVXBwg8M+P8YCO/wZjw==} engines: {node: '>=16.3.0'} - deprecated: < 21.5.0 is no longer supported + deprecated: < 22.8.2 is no longer supported pure-color@1.3.0: resolution: {integrity: sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==} @@ -13422,6 +13532,10 @@ packages: q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qs@6.10.4: resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} @@ -13577,6 +13691,9 @@ packages: react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + react-is@19.0.0: + resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==} + react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} @@ -13715,6 +13832,7 @@ packages: read-package-json@6.0.4: resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + deprecated: This package is no longer supported. Please use @npmcli/package-json instead. read-pkg-up@1.0.1: resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} @@ -13793,6 +13911,7 @@ packages: reflect-metadata@0.2.1: resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==} + deprecated: This version has a critical bug in fallback handling. Please upgrade to reflect-metadata@0.2.2 or newer. reflect.getprototypeof@1.0.5: resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} @@ -14019,6 +14138,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@5.0.5: @@ -14452,6 +14572,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-loader@3.0.2: resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} engines: {node: '>= 12.13.0'} @@ -14907,8 +15031,16 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tailwindcss@3.4.1: - resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==} + tailwind-merge@2.6.0: + resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==} + + tailwindcss-animate@1.0.7: + resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders' + + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} engines: {node: '>=14.0.0'} hasBin: true @@ -15586,6 +15718,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -16126,6 +16264,7 @@ packages: workbox-google-analytics@6.6.0: resolution: {integrity: sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==} + deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained workbox-google-analytics@7.0.0: resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} @@ -17981,10 +18120,10 @@ snapshots: '@babel/helpers': 7.24.0 '@babel/parser': 7.26.2 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -18065,7 +18204,7 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -18076,7 +18215,7 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -18087,7 +18226,7 @@ snapshots: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -18116,6 +18255,13 @@ snapshots: dependencies: '@babel/types': 7.26.0 + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.25.9(supports-color@5.5.0)': dependencies: '@babel/traverse': 7.25.9(supports-color@5.5.0) @@ -18127,7 +18273,7 @@ snapshots: dependencies: '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-simple-access': 7.24.5 '@babel/helper-split-export-declaration': 7.24.5 '@babel/helper-validator-identifier': 7.25.9 @@ -18194,7 +18340,7 @@ snapshots: '@babel/helpers@7.24.0': dependencies: '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color @@ -18455,7 +18601,7 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) transitivePeerDependencies: @@ -18464,7 +18610,7 @@ snapshots: '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.24.5 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.0) transitivePeerDependencies: @@ -18959,7 +19105,7 @@ snapshots: dependencies: '@babel/core': 7.24.0 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.24.0) '@babel/types': 7.26.0 @@ -19003,7 +19149,7 @@ snapshots: '@babel/plugin-transform-runtime@7.24.0(@babel/core@7.24.0)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.24.5 babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.0) babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.24.0) @@ -19333,12 +19479,28 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.26.2 '@babel/types': 7.26.0 + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/traverse@7.25.9(supports-color@5.5.0)': dependencies: '@babel/code-frame': 7.26.2 @@ -19499,79 +19661,79 @@ snapshots: '@csstools/normalize.css@12.1.1': {} - '@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.35)': + '@csstools/postcss-cascade-layers@1.1.1(postcss@8.4.49)': dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.15) - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - '@csstools/postcss-color-function@1.1.1(postcss@8.4.35)': + '@csstools/postcss-color-function@1.1.1(postcss@8.4.49)': dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.35)': + '@csstools/postcss-font-format-keywords@1.0.1(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-hwb-function@1.0.2(postcss@8.4.35)': + '@csstools/postcss-hwb-function@1.0.2(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-ic-unit@1.0.1(postcss@8.4.35)': + '@csstools/postcss-ic-unit@1.0.1(postcss@8.4.49)': dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.35)': + '@csstools/postcss-is-pseudo-class@2.0.7(postcss@8.4.49)': dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.15) - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - '@csstools/postcss-nested-calc@1.0.0(postcss@8.4.35)': + '@csstools/postcss-nested-calc@1.0.0(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.35)': + '@csstools/postcss-normalize-display-values@1.0.1(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@1.1.1(postcss@8.4.35)': + '@csstools/postcss-oklab-function@1.1.1(postcss@8.4.49)': dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.35)': + '@csstools/postcss-progressive-custom-properties@1.3.0(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.35)': + '@csstools/postcss-stepped-value-functions@1.0.1(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.35)': + '@csstools/postcss-text-decoration-shorthand@1.0.0(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.35)': + '@csstools/postcss-trigonometric-functions@1.0.2(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - '@csstools/postcss-unset-value@1.0.2(postcss@8.4.35)': + '@csstools/postcss-unset-value@1.0.2(postcss@8.4.49)': dependencies: - postcss: 8.4.35 + postcss: 8.4.49 '@csstools/selector-specificity@2.2.0(postcss-selector-parser@6.0.15)': dependencies: @@ -19649,7 +19811,7 @@ snapshots: '@emotion/babel-plugin@11.11.0': dependencies: - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@babel/runtime': 7.24.0 '@emotion/hash': 0.9.1 '@emotion/memoize': 0.8.1 @@ -19887,7 +20049,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -19917,6 +20079,12 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) + '@floating-ui/react-dom@2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/dom': 1.6.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + '@floating-ui/utils@0.2.1': {} '@flowiseai/nodevm@3.9.25': @@ -19926,8 +20094,8 @@ snapshots: '@gar/promisify@1.1.3': {} - ? '@getzep/zep-cloud@1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2))))' - : dependencies: + '@getzep/zep-cloud@1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(paklq7onmkfazd5f6qlllyxtve))': + dependencies: form-data: 4.0.0 node-fetch: 2.7.0(encoding@0.1.13) qs: 6.11.2 @@ -19935,7 +20103,7 @@ snapshots: zod: 3.23.8 optionalDependencies: '@langchain/core': 0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)) - langchain: 0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2))) + langchain: 0.3.5(paklq7onmkfazd5f6qlllyxtve) transitivePeerDependencies: - encoding @@ -20053,7 +20221,7 @@ snapshots: '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -20115,7 +20283,7 @@ snapshots: jest-util: 28.1.3 slash: 3.0.0 - '@jest/core@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))': + '@jest/core@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -20129,7 +20297,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -20339,7 +20507,7 @@ snapshots: '@babel/preset-typescript': 7.18.6(@babel/core@7.24.0) '@babel/runtime': 7.24.0 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 '@ladle/react-context': 1.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@vitejs/plugin-react': 3.1.0(vite@4.5.2(@types/node@20.12.12)(sass@1.71.1)(terser@5.29.1)) @@ -20349,7 +20517,7 @@ snapshots: classnames: 2.5.1 commander: 9.5.0 cross-spawn: 7.0.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) default-browser: 3.1.0 express: 4.21.1 get-port: 6.1.2 @@ -20421,8 +20589,8 @@ snapshots: - encoding - openai - ? '@langchain/community@0.3.14(@aws-crypto/sha256-js@5.2.0)(@aws-sdk/client-bedrock-agent-runtime@3.625.0)(@aws-sdk/client-bedrock-runtime@3.422.0)(@aws-sdk/client-dynamodb@3.529.1)(@aws-sdk/client-kendra@3.624.0)(@aws-sdk/client-s3@3.529.1)(@aws-sdk/credential-provider-node@3.529.1)(@datastax/astra-db-ts@1.5.0)(@elastic/elasticsearch@8.12.2)(@getzep/zep-cloud@1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))))(@getzep/zep-js@0.9.0)(@gomomento/sdk-core@1.68.1)(@gomomento/sdk@1.68.1(encoding@0.1.13))(@google-ai/generativelanguage@2.6.0(encoding@0.1.13))(@huggingface/inference@2.6.4)(@ibm-cloud/watsonx-ai@1.1.2)(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@mendable/firecrawl-js@0.0.28)(@notionhq/client@2.2.14(encoding@0.1.13))(@opensearch-project/opensearch@1.2.0)(@pinecone-database/pinecone@4.0.0)(@qdrant/js-client-rest@1.9.0(typescript@5.5.2))(@smithy/eventstream-codec@2.1.4)(@smithy/protocol-http@3.2.2)(@smithy/signature-v4@2.1.4)(@smithy/util-utf8@2.2.0)(@supabase/supabase-js@2.39.8(bufferutil@4.0.8)(utf-8-validate@6.0.4))(@upstash/redis@1.22.1(encoding@0.1.13))(@upstash/vector@1.1.5)(@zilliz/milvus2-sdk-node@2.3.5)(apify-client@2.9.3)(assemblyai@4.3.2(bufferutil@4.0.8)(utf-8-validate@6.0.4))(axios@1.6.2)(cheerio@1.0.0-rc.12)(chromadb@1.8.1(@google/generative-ai@0.15.0)(cohere-ai@7.10.0(encoding@0.1.13))(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(cohere-ai@7.10.0(encoding@0.1.13))(crypto-js@4.2.0)(d3-dsv@2.0.0)(encoding@0.1.13)(epub2@3.0.2(ts-toolbelt@9.6.0))(faiss-node@0.5.1)(google-auth-library@9.6.3(encoding@0.1.13))(html-to-text@9.0.5)(ibm-cloud-sdk-core@5.1.0)(ignore@5.3.1)(ioredis@5.3.2)(jsdom@22.1.0(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(utf-8-validate@6.0.4))(jsonwebtoken@9.0.2)(lodash@4.17.21)(lunary@0.7.12(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(react@18.2.0))(mammoth@1.7.0)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(neo4j-driver@5.27.0)(notion-to-md@3.1.1(encoding@0.1.13))(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(pdf-parse@1.1.1)(pg@8.11.3)(playwright@1.42.1)(portkey-ai@0.1.16)(puppeteer@20.9.0(bufferutil@4.0.8)(encoding@0.1.13)(typescript@5.5.2)(utf-8-validate@6.0.4))(pyodide@0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))(redis@4.6.13)(replicate@0.31.1)(srt-parser-2@1.2.3)(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))(weaviate-ts-client@1.6.0(encoding@0.1.13)(graphql@16.8.1))(ws@8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4))' - : dependencies: + '@langchain/community@0.3.14(6ab3xuwm3jgrubrqnob5nctf4m)': + dependencies: '@ibm-cloud/watsonx-ai': 1.1.2 '@langchain/core': 0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)) '@langchain/openai': 0.3.13(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13) @@ -20431,7 +20599,7 @@ snapshots: flat: 5.0.2 ibm-cloud-sdk-core: 5.1.0 js-yaml: 4.1.0 - langchain: 0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2))) + langchain: 0.3.5(paklq7onmkfazd5f6qlllyxtve) langsmith: 0.2.5(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)) uuid: 10.0.0 zod: 3.22.4 @@ -20446,7 +20614,7 @@ snapshots: '@aws-sdk/credential-provider-node': 3.529.1 '@datastax/astra-db-ts': 1.5.0 '@elastic/elasticsearch': 8.12.2 - '@getzep/zep-cloud': 1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))) + '@getzep/zep-cloud': 1.0.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(langchain@0.3.5(paklq7onmkfazd5f6qlllyxtve)) '@getzep/zep-js': 0.9.0 '@gomomento/sdk': 1.68.1(encoding@0.1.13) '@gomomento/sdk-core': 1.68.1 @@ -20496,7 +20664,7 @@ snapshots: redis: 4.6.13 replicate: 0.31.1 srt-parser-2: 1.2.3 - typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) weaviate-ts-client: 1.6.0(encoding@0.1.13)(graphql@16.8.1) ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) transitivePeerDependencies: @@ -20729,7 +20897,7 @@ snapshots: '@mendable/firecrawl-js@0.0.28': dependencies: - axios: 1.7.2 + axios: 1.7.2(debug@4.3.4) dotenv: 16.4.5 uuid: 9.0.1 zod: 3.23.8 @@ -20768,21 +20936,21 @@ snapshots: '@mui/types': 7.2.13(@types/react@18.2.65) '@mui/utils': 5.15.12(@types/react@18.2.65)(react@18.2.0) '@popperjs/core': 2.11.8 - clsx: 2.1.0 + clsx: 2.1.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) optionalDependencies: '@types/react': 18.2.65 - '@mui/base@5.0.0-beta.40(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@mui/base@5.0.0-beta.68(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 - '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@mui/types': 7.2.14(@types/react@18.2.65) - '@mui/utils': 5.16.0(@types/react@18.2.65)(react@18.2.0) + '@babel/runtime': 7.26.0 + '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/types': 7.2.20(@types/react@18.2.65) + '@mui/utils': 6.3.0(@types/react@18.2.65)(react@18.2.0) '@popperjs/core': 2.11.8 - clsx: 2.1.0 + clsx: 2.1.1 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) @@ -20840,7 +21008,7 @@ snapshots: '@mui/private-theming@5.15.12(@types/react@18.2.65)(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 - '@mui/utils': 5.15.12(@types/react@18.2.65)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.65)(react@18.2.0) prop-types: 15.8.1 react: 18.2.0 optionalDependencies: @@ -20864,7 +21032,7 @@ snapshots: '@mui/styled-engine': 5.15.11(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(react@18.2.0) '@mui/types': 7.2.13(@types/react@18.2.65) '@mui/utils': 5.15.12(@types/react@18.2.65)(react@18.2.0) - clsx: 2.1.0 + clsx: 2.1.1 csstype: 3.1.3 prop-types: 15.8.1 react: 18.2.0 @@ -20877,7 +21045,7 @@ snapshots: optionalDependencies: '@types/react': 18.2.65 - '@mui/types@7.2.14(@types/react@18.2.65)': + '@mui/types@7.2.20(@types/react@18.2.65)': optionalDependencies: '@types/react': 18.2.65 @@ -20901,6 +21069,18 @@ snapshots: optionalDependencies: '@types/react': 18.2.65 + '@mui/utils@6.3.0(@types/react@18.2.65)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.20(@types/react@18.2.65) + '@types/prop-types': 15.7.14 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 19.0.0 + optionalDependencies: + '@types/react': 18.2.65 + '@mui/x-data-grid@6.8.0(@mui/material@5.15.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@mui/system@5.15.12(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.4(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react@18.2.0))(@types/react@18.2.65)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@babel/runtime': 7.24.0 @@ -21185,7 +21365,7 @@ snapshots: dependencies: '@oclif/core': 2.15.0(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2) chalk: 4.1.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) http-call: 5.3.0 lodash.template: 4.5.0 semver: 7.6.3 @@ -21969,7 +22149,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3))(webpack@5.90.3)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)))(webpack@5.90.3(@swc/core@1.4.6))': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -21981,10 +22161,10 @@ snapshots: react-refresh: 0.11.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: type-fest: 4.12.0 - webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3) + webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)) '@popperjs/core@2.11.8': {} @@ -22034,6 +22214,19 @@ snapshots: '@qdrant/openapi-typescript-fetch@1.2.6': {} + '@radix-ui/react-compose-refs@1.1.1(@types/react@18.2.65)(react@18.2.0)': + dependencies: + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.65 + + '@radix-ui/react-slot@1.1.1(@types/react@18.2.65)(react@18.2.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@18.2.65)(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.65 + '@reactflow/background@11.3.9(@types/react@18.2.65)(immer@9.0.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@reactflow/core': 11.10.4(@types/react@18.2.65)(immer@9.0.21)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -22141,7 +22334,7 @@ snapshots: '@rollup/plugin-babel@5.3.1(@babel/core@7.24.0)(@types/babel__core@7.20.5)(rollup@2.79.1)': dependencies: '@babel/core': 7.24.0 - '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) + '@babel/helper-module-imports': 7.25.9 '@rollup/pluginutils': 3.1.0(rollup@2.79.1) rollup: 2.79.1 optionalDependencies: @@ -23551,6 +23744,8 @@ snapshots: '@types/prop-types@15.7.11': {} + '@types/prop-types@15.7.14': {} + '@types/q@1.5.8': {} '@types/qs@6.9.12': {} @@ -23711,7 +23906,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 @@ -23736,7 +23931,7 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.2) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) eslint: 8.57.0 optionalDependencies: typescript: 5.5.2 @@ -23752,7 +23947,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.2) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) eslint: 8.57.0 tsutils: 3.21.0(typescript@5.5.2) optionalDependencies: @@ -23768,7 +23963,7 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 @@ -23850,9 +24045,9 @@ snapshots: '@codemirror/state': 6.4.1 '@codemirror/view': 6.25.1 - '@uiw/react-codemirror@4.21.24(@babel/runtime@7.24.0)(@codemirror/autocomplete@6.14.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.1)(@lezer/common@1.2.1))(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.25.1)(codemirror@6.0.1(@lezer/common@1.2.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@uiw/react-codemirror@4.21.24(@babel/runtime@7.26.0)(@codemirror/autocomplete@6.14.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.1)(@lezer/common@1.2.1))(@codemirror/language@6.10.1)(@codemirror/lint@6.5.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/theme-one-dark@6.1.2)(@codemirror/view@6.25.1)(codemirror@6.0.1(@lezer/common@1.2.1))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.26.0 '@codemirror/commands': 6.3.3 '@codemirror/state': 6.4.1 '@codemirror/theme-one-dark': 6.1.2 @@ -23905,7 +24100,7 @@ snapshots: '@vue/shared': 3.4.31 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.4.31': dependencies: @@ -23921,8 +24116,8 @@ snapshots: '@vue/shared': 3.4.31 estree-walker: 2.0.2 magic-string: 0.30.10 - postcss: 8.4.39 - source-map-js: 1.2.0 + postcss: 8.4.49 + source-map-js: 1.2.1 '@vue/compiler-ssr@3.4.31': dependencies: @@ -24117,13 +24312,13 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color agent-base@7.1.0: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -24512,14 +24707,14 @@ snapshots: atob@2.1.2: {} - autoprefixer@10.4.18(postcss@8.4.35): + autoprefixer@10.4.20(postcss@8.4.49): dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001597 + browserslist: 4.24.3 + caniuse-lite: 1.0.30001690 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -24565,14 +24760,6 @@ snapshots: transitivePeerDependencies: - debug - axios@1.7.2: - dependencies: - follow-redirects: 1.15.6(debug@4.3.7) - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axios@1.7.2(debug@4.3.4): dependencies: follow-redirects: 1.15.6(debug@4.3.4) @@ -24591,7 +24778,7 @@ snapshots: axios@1.7.8: dependencies: - follow-redirects: 1.15.6(debug@4.3.7) + follow-redirects: 1.15.6(debug@4.3.4) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -24669,14 +24856,14 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@8.3.0(@babel/core@7.24.0)(webpack@5.90.3): + babel-loader@8.3.0(@babel/core@7.24.0)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@babel/core': 7.24.0 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) babel-messages@6.23.0: dependencies: @@ -24757,14 +24944,14 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-styled-components@2.1.4(@babel/core@7.24.0)(styled-components@5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(supports-color@5.5.0): + babel-plugin-styled-components@2.1.4(@babel/core@7.24.0)(styled-components@5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@19.0.0)(react@18.2.0))(supports-color@5.5.0): dependencies: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) lodash: 4.17.21 picomatch: 2.3.1 - styled-components: 5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@19.0.0)(react@18.2.0) transitivePeerDependencies: - '@babel/core' - supports-color @@ -25069,6 +25256,10 @@ snapshots: dependencies: fill-range: 7.0.1 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + browser-process-hrtime@1.0.0: {} browserslist@4.23.0: @@ -25078,6 +25269,13 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) + browserslist@4.24.3: + dependencies: + caniuse-lite: 1.0.30001690 + electron-to-chromium: 1.5.76 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.3) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -25266,6 +25464,8 @@ snapshots: caniuse-lite@1.0.30001597: {} + caniuse-lite@1.0.30001690: {} + canvas@2.11.2(encoding@0.1.13): dependencies: '@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13) @@ -25424,6 +25624,10 @@ snapshots: isobject: 3.0.1 static-extend: 0.1.2 + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + classcat@5.0.4: {} classnames@2.5.1: {} @@ -25532,6 +25736,8 @@ snapshots: clsx@2.1.0: {} + clsx@2.1.1: {} + cluster-key-slot@1.1.2: {} cmake-js@7.3.0: @@ -25869,48 +26075,48 @@ snapshots: crypto-random-string@2.0.0: {} - css-blank-pseudo@3.0.3(postcss@8.4.35): + css-blank-pseudo@3.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 css-color-keywords@1.0.0: {} - css-declaration-sorter@6.4.1(postcss@8.4.35): + css-declaration-sorter@6.4.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - css-has-pseudo@3.0.4(postcss@8.4.35): + css-has-pseudo@3.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - css-loader@6.10.0(webpack@5.90.3): + css-loader@6.10.0(webpack@5.90.3(@swc/core@1.4.6)): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.35) - postcss-modules-local-by-default: 4.0.4(postcss@8.4.35) - postcss-modules-scope: 3.1.1(postcss@8.4.35) - postcss-modules-values: 4.0.0(postcss@8.4.35) + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-modules-extract-imports: 3.0.0(postcss@8.4.49) + postcss-modules-local-by-default: 4.0.4(postcss@8.4.49) + postcss-modules-scope: 3.1.1(postcss@8.4.49) + postcss-modules-values: 4.0.0(postcss@8.4.49) postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) - css-minimizer-webpack-plugin@3.4.1(webpack@5.90.3): + css-minimizer-webpack-plugin@3.4.1(webpack@5.90.3(@swc/core@1.4.6)): dependencies: - cssnano: 5.1.15(postcss@8.4.35) + cssnano: 5.1.15(postcss@8.4.49) jest-worker: 27.5.1 - postcss: 8.4.35 + postcss: 8.4.49 schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) - css-prefers-color-scheme@6.0.3(postcss@8.4.35): + css-prefers-color-scheme@6.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 css-select-base-adapter@0.1.1: {} @@ -25956,7 +26162,7 @@ snapshots: css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-what@3.4.2: {} @@ -25968,48 +26174,48 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@5.2.14(postcss@8.4.35): - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.35) - cssnano-utils: 3.1.0(postcss@8.4.35) - postcss: 8.4.35 - postcss-calc: 8.2.4(postcss@8.4.35) - postcss-colormin: 5.3.1(postcss@8.4.35) - postcss-convert-values: 5.1.3(postcss@8.4.35) - postcss-discard-comments: 5.1.2(postcss@8.4.35) - postcss-discard-duplicates: 5.1.0(postcss@8.4.35) - postcss-discard-empty: 5.1.1(postcss@8.4.35) - postcss-discard-overridden: 5.1.0(postcss@8.4.35) - postcss-merge-longhand: 5.1.7(postcss@8.4.35) - postcss-merge-rules: 5.1.4(postcss@8.4.35) - postcss-minify-font-values: 5.1.0(postcss@8.4.35) - postcss-minify-gradients: 5.1.1(postcss@8.4.35) - postcss-minify-params: 5.1.4(postcss@8.4.35) - postcss-minify-selectors: 5.2.1(postcss@8.4.35) - postcss-normalize-charset: 5.1.0(postcss@8.4.35) - postcss-normalize-display-values: 5.1.0(postcss@8.4.35) - postcss-normalize-positions: 5.1.1(postcss@8.4.35) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.35) - postcss-normalize-string: 5.1.0(postcss@8.4.35) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.35) - postcss-normalize-unicode: 5.1.1(postcss@8.4.35) - postcss-normalize-url: 5.1.0(postcss@8.4.35) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.35) - postcss-ordered-values: 5.1.3(postcss@8.4.35) - postcss-reduce-initial: 5.1.2(postcss@8.4.35) - postcss-reduce-transforms: 5.1.0(postcss@8.4.35) - postcss-svgo: 5.1.0(postcss@8.4.35) - postcss-unique-selectors: 5.1.1(postcss@8.4.35) - - cssnano-utils@3.1.0(postcss@8.4.35): - dependencies: - postcss: 8.4.35 - - cssnano@5.1.15(postcss@8.4.35): - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.35) + cssnano-preset-default@5.2.14(postcss@8.4.49): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.49) + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 + postcss-calc: 8.2.4(postcss@8.4.49) + postcss-colormin: 5.3.1(postcss@8.4.49) + postcss-convert-values: 5.1.3(postcss@8.4.49) + postcss-discard-comments: 5.1.2(postcss@8.4.49) + postcss-discard-duplicates: 5.1.0(postcss@8.4.49) + postcss-discard-empty: 5.1.1(postcss@8.4.49) + postcss-discard-overridden: 5.1.0(postcss@8.4.49) + postcss-merge-longhand: 5.1.7(postcss@8.4.49) + postcss-merge-rules: 5.1.4(postcss@8.4.49) + postcss-minify-font-values: 5.1.0(postcss@8.4.49) + postcss-minify-gradients: 5.1.1(postcss@8.4.49) + postcss-minify-params: 5.1.4(postcss@8.4.49) + postcss-minify-selectors: 5.2.1(postcss@8.4.49) + postcss-normalize-charset: 5.1.0(postcss@8.4.49) + postcss-normalize-display-values: 5.1.0(postcss@8.4.49) + postcss-normalize-positions: 5.1.1(postcss@8.4.49) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.49) + postcss-normalize-string: 5.1.0(postcss@8.4.49) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.49) + postcss-normalize-unicode: 5.1.1(postcss@8.4.49) + postcss-normalize-url: 5.1.0(postcss@8.4.49) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.49) + postcss-ordered-values: 5.1.3(postcss@8.4.49) + postcss-reduce-initial: 5.1.2(postcss@8.4.49) + postcss-reduce-transforms: 5.1.0(postcss@8.4.49) + postcss-svgo: 5.1.0(postcss@8.4.49) + postcss-unique-selectors: 5.1.1(postcss@8.4.49) + + cssnano-utils@3.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + + cssnano@5.1.15(postcss@8.4.49): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.49) lilconfig: 2.1.0 - postcss: 8.4.35 + postcss: 8.4.49 yaml: 1.10.2 csso@4.2.0: @@ -26534,6 +26740,8 @@ snapshots: electron-to-chromium@1.4.701: {} + electron-to-chromium@1.5.76: {} + emittery@0.10.2: {} emittery@0.8.1: {} @@ -26561,7 +26769,7 @@ snapshots: engine.io-client@6.5.3(bufferutil@4.0.8): dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) engine.io-parser: 5.2.2 ws: 8.11.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) xmlhttprequest-ssl: 2.0.0 @@ -26808,6 +27016,8 @@ snapshots: escalade@3.1.2: {} + escalade@3.2.0: {} + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -26839,7 +27049,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): dependencies: '@babel/core': 7.24.0 '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@8.57.0) @@ -26851,7 +27061,7 @@ snapshots: eslint: 8.57.0 eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -26919,13 +27129,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): dependencies: '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2) - jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) transitivePeerDependencies: - supports-color - typescript @@ -27022,7 +27232,7 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.90.3): + eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@types/eslint': 8.56.5 eslint: 8.57.0 @@ -27030,7 +27240,7 @@ snapshots: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) eslint@8.57.0: dependencies: @@ -27393,7 +27603,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 fast-json-patch@3.1.1: {} @@ -27484,11 +27694,11 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@5.90.3): + file-loader@6.2.0(webpack@5.90.3(@swc/core@1.4.6)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) file-type@16.5.4: dependencies: @@ -27515,6 +27725,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + filter-obj@5.1.0: {} finalhandler@1.2.0: @@ -27621,10 +27835,10 @@ snapshots: flatted@3.3.1: {} - flowise-embed-react@1.0.6(@types/node@20.12.12)(flowise-embed@2.0.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.71.1)(terser@5.29.1)(typescript@5.5.2): + flowise-embed-react@1.0.6(@types/node@20.12.12)(flowise-embed@2.0.9)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.71.1)(terser@5.29.1)(typescript@5.5.2): dependencies: '@ladle/react': 2.5.1(@types/node@20.12.12)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(sass@1.71.1)(terser@5.29.1)(typescript@5.5.2) - flowise-embed: 2.0.8 + flowise-embed: 2.0.9 react: 18.2.0 transitivePeerDependencies: - '@types/node' @@ -27638,7 +27852,7 @@ snapshots: - terser - typescript - flowise-embed@2.0.8: + flowise-embed@2.0.9: dependencies: '@babel/core': 7.24.0 '@microsoft/fetch-event-source': 2.0.1 @@ -27698,7 +27912,7 @@ snapshots: follow-redirects@1.15.6(debug@4.3.7): optionalDependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) for-each@0.3.3: dependencies: @@ -27717,7 +27931,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@babel/code-frame': 7.26.2 '@types/json-schema': 7.0.15 @@ -27733,7 +27947,7 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.5.2 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: eslint: 8.57.0 @@ -28008,7 +28222,7 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -28591,7 +28805,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.90.3): + html-webpack-plugin@5.6.0(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -28599,7 +28813,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) htmlparser2@6.1.0: dependencies: @@ -28620,7 +28834,7 @@ snapshots: http-call@5.3.0: dependencies: content-type: 1.0.5 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) is-retry-allowed: 1.2.0 is-stream: 2.0.1 parse-json: 4.0.0 @@ -28651,7 +28865,7 @@ snapshots: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -28659,14 +28873,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -28685,7 +28899,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.6(debug@4.3.7) + follow-redirects: 1.15.6(debug@4.3.4) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -28706,14 +28920,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.4: dependencies: agent-base: 7.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -28738,7 +28952,7 @@ snapshots: '@types/tough-cookie': 4.0.5 axios: 1.7.4(debug@4.3.7) camelcase: 6.3.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) dotenv: 16.4.5 extend: 3.0.2 file-type: 16.5.4 @@ -28759,9 +28973,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.35): + icss-utils@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 idb@7.1.1: {} @@ -29187,7 +29401,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -29251,16 +29465,16 @@ snapshots: transitivePeerDependencies: - supports-color - jest-cli@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + jest-cli@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: - '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -29272,7 +29486,7 @@ snapshots: - ts-node - utf-8-validate - jest-config@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + jest-config@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: '@babel/core': 7.24.0 '@jest/test-sequencer': 27.5.1 @@ -29554,7 +29768,7 @@ snapshots: '@babel/core': 7.24.0 '@babel/generator': 7.26.2 '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/traverse': 7.25.9(supports-color@5.5.0) + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 @@ -29612,11 +29826,11 @@ snapshots: leven: 3.1.0 pretty-format: 27.5.1 - jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))): + jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 @@ -29662,11 +29876,11 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: - '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) import-local: 3.1.0 - jest-cli: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest-cli: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) transitivePeerDependencies: - bufferutil - canvas @@ -29674,7 +29888,7 @@ snapshots: - ts-node - utf-8-validate - jiti@1.21.0: {} + jiti@1.21.7: {} jmespath@0.16.0: {} @@ -29981,8 +30195,8 @@ snapshots: kuler@2.0.0: {} - ? langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2))) - : dependencies: + langchain@0.3.5(paklq7onmkfazd5f6qlllyxtve): + dependencies: '@langchain/core': 0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)) '@langchain/openai': 0.3.13(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13) '@langchain/textsplitters': 0.0.1(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)) @@ -30007,7 +30221,7 @@ snapshots: '@langchain/ollama': 0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))) axios: 1.6.2(debug@4.3.4) cheerio: 1.0.0-rc.12 - typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) transitivePeerDependencies: - encoding - openai @@ -30018,9 +30232,9 @@ snapshots: dependencies: mustache: 4.2.0 - ? langfuse-langchain@3.3.4(langchain@0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)))) - : dependencies: - langchain: 0.3.5(@langchain/anthropic@0.3.7(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/aws@0.1.2(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(@langchain/cohere@0.0.7(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/google-genai@0.1.3(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(zod@3.22.4))(@langchain/google-vertexai@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13)(zod@3.22.4))(@langchain/groq@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(encoding@0.1.13))(@langchain/mistralai@0.0.26(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4)))(@langchain/ollama@0.1.2(@langchain/core@0.3.18(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))))(axios@1.6.2)(cheerio@1.0.0-rc.12)(encoding@0.1.13)(openai@4.57.3(encoding@0.1.13)(zod@3.22.4))(typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2))) + langfuse-langchain@3.3.4(langchain@0.3.5(paklq7onmkfazd5f6qlllyxtve)): + dependencies: + langchain: 0.3.5(paklq7onmkfazd5f6qlllyxtve) langfuse: 3.3.4 langfuse-core: 3.3.4 @@ -30127,7 +30341,7 @@ snapshots: lilconfig@2.1.0: {} - lilconfig@3.1.1: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -30974,7 +31188,7 @@ snapshots: micromark@2.11.4: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -30982,7 +31196,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -31024,6 +31238,11 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -31045,11 +31264,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.8.1(webpack@5.90.3): + mini-css-extract-plugin@2.8.1(webpack@5.90.3(@swc/core@1.4.6)): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) minimalistic-assert@1.0.1: {} @@ -31395,6 +31614,8 @@ snapshots: node-releases@2.0.14: {} + node-releases@2.0.19: {} + nodemon@2.0.22: dependencies: chokidar: 3.6.0 @@ -31915,7 +32136,7 @@ snapshots: p-transform@1.3.0: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) p-queue: 6.6.2 transitivePeerDependencies: - supports-color @@ -31926,7 +32147,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) get-uri: 6.0.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 @@ -32254,6 +32475,8 @@ snapshots: picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} picomatch@3.0.1: {} @@ -32307,400 +32530,400 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-attribute-case-insensitive@5.0.2(postcss@8.4.35): + postcss-attribute-case-insensitive@5.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-browser-comments@4.0.0(browserslist@4.23.0)(postcss@8.4.35): + postcss-browser-comments@4.0.0(browserslist@4.23.0)(postcss@8.4.49): dependencies: browserslist: 4.23.0 - postcss: 8.4.35 + postcss: 8.4.49 - postcss-calc@8.2.4(postcss@8.4.35): + postcss-calc@8.2.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 - postcss-clamp@4.1.0(postcss@8.4.35): + postcss-clamp@4.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@4.2.4(postcss@8.4.35): + postcss-color-functional-notation@4.2.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-color-hex-alpha@8.0.4(postcss@8.4.35): + postcss-color-hex-alpha@8.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@7.1.1(postcss@8.4.35): + postcss-color-rebeccapurple@7.1.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-colormin@5.3.1(postcss@8.4.35): + postcss-colormin@5.3.1(postcss@8.4.49): dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-convert-values@5.1.3(postcss@8.4.35): + postcss-convert-values@5.1.3(postcss@8.4.49): dependencies: browserslist: 4.23.0 - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-custom-media@8.0.2(postcss@8.4.35): + postcss-custom-media@8.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-custom-properties@12.1.11(postcss@8.4.35): + postcss-custom-properties@12.1.11(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-custom-selectors@6.0.3(postcss@8.4.35): + postcss-custom-selectors@6.0.3(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-dir-pseudo-class@6.0.5(postcss@8.4.35): + postcss-dir-pseudo-class@6.0.5(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-discard-comments@5.1.2(postcss@8.4.35): + postcss-discard-comments@5.1.2(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-discard-duplicates@5.1.0(postcss@8.4.35): + postcss-discard-duplicates@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-discard-empty@5.1.1(postcss@8.4.35): + postcss-discard-empty@5.1.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-discard-overridden@5.1.0(postcss@8.4.35): + postcss-discard-overridden@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-double-position-gradients@3.1.2(postcss@8.4.35): + postcss-double-position-gradients@3.1.2(postcss@8.4.49): dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-env-function@4.0.6(postcss@8.4.35): + postcss-env-function@4.0.6(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-flexbugs-fixes@5.0.2(postcss@8.4.35): + postcss-flexbugs-fixes@5.0.2(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-focus-visible@6.0.4(postcss@8.4.35): + postcss-focus-visible@6.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-focus-within@5.0.4(postcss@8.4.35): + postcss-focus-within@5.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-font-variant@5.0.0(postcss@8.4.35): + postcss-font-variant@5.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-gap-properties@3.0.5(postcss@8.4.35): + postcss-gap-properties@3.0.5(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-image-set-function@4.0.7(postcss@8.4.35): + postcss-image-set-function@4.0.7(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-import@15.1.0(postcss@8.4.35): + postcss-import@15.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-initial@4.0.1(postcss@8.4.35): + postcss-initial@4.0.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-js@4.0.1(postcss@8.4.35): + postcss-js@4.0.1(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.35 + postcss: 8.4.49 - postcss-lab-function@4.2.1(postcss@8.4.35): + postcss-lab-function@4.2.1(postcss@8.4.49): dependencies: - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - postcss: 8.4.35 + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: - lilconfig: 3.1.1 + lilconfig: 3.1.3 yaml: 2.4.1 optionalDependencies: - postcss: 8.4.35 + postcss: 8.4.49 ts-node: 10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2) - postcss-loader@6.2.1(postcss@8.4.35)(webpack@5.90.3): + postcss-loader@6.2.1(postcss@8.4.49)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 - postcss: 8.4.35 + postcss: 8.4.49 semver: 7.6.3 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) - postcss-logical@5.0.4(postcss@8.4.35): + postcss-logical@5.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-media-minmax@5.0.0(postcss@8.4.35): + postcss-media-minmax@5.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-merge-longhand@5.1.7(postcss@8.4.35): + postcss-merge-longhand@5.1.7(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.35) + stylehacks: 5.1.1(postcss@8.4.49) - postcss-merge-rules@5.1.4(postcss@8.4.35): + postcss-merge-rules@5.1.4(postcss@8.4.49): dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.35) - postcss: 8.4.35 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-minify-font-values@5.1.0(postcss@8.4.35): + postcss-minify-font-values@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-minify-gradients@5.1.1(postcss@8.4.35): + postcss-minify-gradients@5.1.1(postcss@8.4.49): dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.35) - postcss: 8.4.35 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-minify-params@5.1.4(postcss@8.4.35): + postcss-minify-params@5.1.4(postcss@8.4.49): dependencies: browserslist: 4.23.0 - cssnano-utils: 3.1.0(postcss@8.4.35) - postcss: 8.4.35 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-minify-selectors@5.2.1(postcss@8.4.35): + postcss-minify-selectors@5.2.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-modules-extract-imports@3.0.0(postcss@8.4.35): + postcss-modules-extract-imports@3.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-modules-local-by-default@4.0.4(postcss@8.4.35): + postcss-modules-local-by-default@4.0.4(postcss@8.4.49): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 postcss-selector-parser: 6.0.15 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.1.1(postcss@8.4.35): + postcss-modules-scope@3.1.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-modules-values@4.0.0(postcss@8.4.35): + postcss-modules-values@4.0.0(postcss@8.4.49): dependencies: - icss-utils: 5.1.0(postcss@8.4.35) - postcss: 8.4.35 + icss-utils: 5.1.0(postcss@8.4.49) + postcss: 8.4.49 - postcss-nested@6.0.1(postcss@8.4.35): + postcss-nested@6.2.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 - postcss-selector-parser: 6.0.15 + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 - postcss-nesting@10.2.0(postcss@8.4.35): + postcss-nesting@10.2.0(postcss@8.4.49): dependencies: '@csstools/selector-specificity': 2.2.0(postcss-selector-parser@6.0.15) - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-normalize-charset@5.1.0(postcss@8.4.35): + postcss-normalize-charset@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-normalize-display-values@5.1.0(postcss@8.4.35): + postcss-normalize-display-values@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-positions@5.1.1(postcss@8.4.35): + postcss-normalize-positions@5.1.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@5.1.1(postcss@8.4.35): + postcss-normalize-repeat-style@5.1.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-string@5.1.0(postcss@8.4.35): + postcss-normalize-string@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@5.1.0(postcss@8.4.35): + postcss-normalize-timing-functions@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@5.1.1(postcss@8.4.35): + postcss-normalize-unicode@5.1.1(postcss@8.4.49): dependencies: browserslist: 4.23.0 - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-url@5.1.0(postcss@8.4.35): + postcss-normalize-url@5.1.0(postcss@8.4.49): dependencies: normalize-url: 6.1.0 - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@5.1.1(postcss@8.4.35): + postcss-normalize-whitespace@5.1.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-normalize@10.0.1(browserslist@4.23.0)(postcss@8.4.35): + postcss-normalize@10.0.1(browserslist@4.23.0)(postcss@8.4.49): dependencies: '@csstools/normalize.css': 12.1.1 browserslist: 4.23.0 - postcss: 8.4.35 - postcss-browser-comments: 4.0.0(browserslist@4.23.0)(postcss@8.4.35) + postcss: 8.4.49 + postcss-browser-comments: 4.0.0(browserslist@4.23.0)(postcss@8.4.49) sanitize.css: 13.0.0 - postcss-opacity-percentage@1.1.3(postcss@8.4.35): + postcss-opacity-percentage@1.1.3(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-ordered-values@5.1.3(postcss@8.4.35): + postcss-ordered-values@5.1.3(postcss@8.4.49): dependencies: - cssnano-utils: 3.1.0(postcss@8.4.35) - postcss: 8.4.35 + cssnano-utils: 3.1.0(postcss@8.4.49) + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-overflow-shorthand@3.0.4(postcss@8.4.35): + postcss-overflow-shorthand@3.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.4.35): + postcss-page-break@3.0.4(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-place@7.0.5(postcss@8.4.35): + postcss-place@7.0.5(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-preset-env@7.8.3(postcss@8.4.35): - dependencies: - '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.35) - '@csstools/postcss-color-function': 1.1.1(postcss@8.4.35) - '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.35) - '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.35) - '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.35) - '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.35) - '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.35) - '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.35) - '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.35) - '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.35) - '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.35) - '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.35) - '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.35) - '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.35) - autoprefixer: 10.4.18(postcss@8.4.35) + postcss-preset-env@7.8.3(postcss@8.4.49): + dependencies: + '@csstools/postcss-cascade-layers': 1.1.1(postcss@8.4.49) + '@csstools/postcss-color-function': 1.1.1(postcss@8.4.49) + '@csstools/postcss-font-format-keywords': 1.0.1(postcss@8.4.49) + '@csstools/postcss-hwb-function': 1.0.2(postcss@8.4.49) + '@csstools/postcss-ic-unit': 1.0.1(postcss@8.4.49) + '@csstools/postcss-is-pseudo-class': 2.0.7(postcss@8.4.49) + '@csstools/postcss-nested-calc': 1.0.0(postcss@8.4.49) + '@csstools/postcss-normalize-display-values': 1.0.1(postcss@8.4.49) + '@csstools/postcss-oklab-function': 1.1.1(postcss@8.4.49) + '@csstools/postcss-progressive-custom-properties': 1.3.0(postcss@8.4.49) + '@csstools/postcss-stepped-value-functions': 1.0.1(postcss@8.4.49) + '@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.49) + '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.49) + '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.49) + autoprefixer: 10.4.20(postcss@8.4.49) browserslist: 4.23.0 - css-blank-pseudo: 3.0.3(postcss@8.4.35) - css-has-pseudo: 3.0.4(postcss@8.4.35) - css-prefers-color-scheme: 6.0.3(postcss@8.4.35) + css-blank-pseudo: 3.0.3(postcss@8.4.49) + css-has-pseudo: 3.0.4(postcss@8.4.49) + css-prefers-color-scheme: 6.0.3(postcss@8.4.49) cssdb: 7.11.2 - postcss: 8.4.35 - postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.35) - postcss-clamp: 4.1.0(postcss@8.4.35) - postcss-color-functional-notation: 4.2.4(postcss@8.4.35) - postcss-color-hex-alpha: 8.0.4(postcss@8.4.35) - postcss-color-rebeccapurple: 7.1.1(postcss@8.4.35) - postcss-custom-media: 8.0.2(postcss@8.4.35) - postcss-custom-properties: 12.1.11(postcss@8.4.35) - postcss-custom-selectors: 6.0.3(postcss@8.4.35) - postcss-dir-pseudo-class: 6.0.5(postcss@8.4.35) - postcss-double-position-gradients: 3.1.2(postcss@8.4.35) - postcss-env-function: 4.0.6(postcss@8.4.35) - postcss-focus-visible: 6.0.4(postcss@8.4.35) - postcss-focus-within: 5.0.4(postcss@8.4.35) - postcss-font-variant: 5.0.0(postcss@8.4.35) - postcss-gap-properties: 3.0.5(postcss@8.4.35) - postcss-image-set-function: 4.0.7(postcss@8.4.35) - postcss-initial: 4.0.1(postcss@8.4.35) - postcss-lab-function: 4.2.1(postcss@8.4.35) - postcss-logical: 5.0.4(postcss@8.4.35) - postcss-media-minmax: 5.0.0(postcss@8.4.35) - postcss-nesting: 10.2.0(postcss@8.4.35) - postcss-opacity-percentage: 1.1.3(postcss@8.4.35) - postcss-overflow-shorthand: 3.0.4(postcss@8.4.35) - postcss-page-break: 3.0.4(postcss@8.4.35) - postcss-place: 7.0.5(postcss@8.4.35) - postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.35) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.35) - postcss-selector-not: 6.0.1(postcss@8.4.35) + postcss: 8.4.49 + postcss-attribute-case-insensitive: 5.0.2(postcss@8.4.49) + postcss-clamp: 4.1.0(postcss@8.4.49) + postcss-color-functional-notation: 4.2.4(postcss@8.4.49) + postcss-color-hex-alpha: 8.0.4(postcss@8.4.49) + postcss-color-rebeccapurple: 7.1.1(postcss@8.4.49) + postcss-custom-media: 8.0.2(postcss@8.4.49) + postcss-custom-properties: 12.1.11(postcss@8.4.49) + postcss-custom-selectors: 6.0.3(postcss@8.4.49) + postcss-dir-pseudo-class: 6.0.5(postcss@8.4.49) + postcss-double-position-gradients: 3.1.2(postcss@8.4.49) + postcss-env-function: 4.0.6(postcss@8.4.49) + postcss-focus-visible: 6.0.4(postcss@8.4.49) + postcss-focus-within: 5.0.4(postcss@8.4.49) + postcss-font-variant: 5.0.0(postcss@8.4.49) + postcss-gap-properties: 3.0.5(postcss@8.4.49) + postcss-image-set-function: 4.0.7(postcss@8.4.49) + postcss-initial: 4.0.1(postcss@8.4.49) + postcss-lab-function: 4.2.1(postcss@8.4.49) + postcss-logical: 5.0.4(postcss@8.4.49) + postcss-media-minmax: 5.0.0(postcss@8.4.49) + postcss-nesting: 10.2.0(postcss@8.4.49) + postcss-opacity-percentage: 1.1.3(postcss@8.4.49) + postcss-overflow-shorthand: 3.0.4(postcss@8.4.49) + postcss-page-break: 3.0.4(postcss@8.4.49) + postcss-place: 7.0.5(postcss@8.4.49) + postcss-pseudo-class-any-link: 7.1.6(postcss@8.4.49) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.49) + postcss-selector-not: 6.0.1(postcss@8.4.49) postcss-value-parser: 4.2.0 - postcss-pseudo-class-any-link@7.1.6(postcss@8.4.35): + postcss-pseudo-class-any-link@7.1.6(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 - postcss-reduce-initial@5.1.2(postcss@8.4.35): + postcss-reduce-initial@5.1.2(postcss@8.4.49): dependencies: browserslist: 4.23.0 caniuse-api: 3.0.0 - postcss: 8.4.35 + postcss: 8.4.49 - postcss-reduce-transforms@5.1.0(postcss@8.4.35): + postcss-reduce-transforms@5.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-value-parser: 4.2.0 - postcss-replace-overflow-wrap@4.0.0(postcss@8.4.35): + postcss-replace-overflow-wrap@4.0.0(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 - postcss-selector-not@6.0.1(postcss@8.4.35): + postcss-selector-not@6.0.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 postcss-selector-parser@6.0.15: @@ -32708,15 +32931,20 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@5.1.0(postcss@8.4.35): + postcss-selector-parser@6.1.2: dependencies: - postcss: 8.4.35 + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@5.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 postcss-value-parser: 4.2.0 svgo: 2.8.0 - postcss-unique-selectors@5.1.1(postcss@8.4.35): + postcss-unique-selectors@5.1.1(postcss@8.4.49): dependencies: - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 postcss-value-parser@4.2.0: {} @@ -32726,18 +32954,18 @@ snapshots: picocolors: 0.2.1 source-map: 0.6.1 - postcss@8.4.35: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - postcss@8.4.39: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 source-map-js: 1.2.0 + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postgres-array@2.0.0: {} postgres-array@3.0.2: {} @@ -32949,7 +33177,7 @@ snapshots: proxy-agent@6.3.0: dependencies: agent-base: 7.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.4 lru-cache: 7.18.3 @@ -33133,12 +33361,12 @@ snapshots: lodash.flow: 3.5.0 pure-color: 1.3.0 - react-code-blocks@0.0.9-0(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0): + react-code-blocks@0.0.9-0(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@19.0.0)(react@18.2.0): dependencies: '@babel/runtime': 7.24.0 react: 18.2.0 react-syntax-highlighter: 12.2.1(react@18.2.0) - styled-components: 5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0) + styled-components: 5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@19.0.0)(react@18.2.0) tslib: 2.6.2 transitivePeerDependencies: - '@babel/core' @@ -33167,7 +33395,7 @@ snapshots: react-onclickoutside: 6.13.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3): + react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@babel/code-frame': 7.26.2 address: 1.2.2 @@ -33178,7 +33406,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -33193,7 +33421,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: typescript: 5.5.2 transitivePeerDependencies: @@ -33235,6 +33463,8 @@ snapshots: react-is@18.2.0: {} + react-is@19.0.0: {} + react-lifecycles-compat@3.0.4: {} react-markdown@8.0.7(@types/react@18.2.65)(react@18.2.0): @@ -33312,56 +33542,56 @@ snapshots: history: 5.3.0 react: 18.2.0 - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(@swc/core@1.4.6)(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2): dependencies: '@babel/core': 7.24.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3))(webpack@5.90.3) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)))(webpack@5.90.3(@swc/core@1.4.6)) '@svgr/webpack': 5.5.0 babel-jest: 27.5.1(@babel/core@7.24.0) - babel-loader: 8.3.0(@babel/core@7.24.0)(webpack@5.90.3) + babel-loader: 8.3.0(@babel/core@7.24.0)(webpack@5.90.3(@swc/core@1.4.6)) babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.0) babel-preset-react-app: 10.0.1 bfj: 7.1.0 browserslist: 4.23.0 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.10.0(webpack@5.90.3) - css-minimizer-webpack-plugin: 3.4.1(webpack@5.90.3) + css-loader: 6.10.0(webpack@5.90.3(@swc/core@1.4.6)) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.90.3(@swc/core@1.4.6)) dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.57.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) - eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.90.3) - file-loader: 6.2.0(webpack@5.90.3) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) + eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.90.3(@swc/core@1.4.6)) + file-loader: 6.2.0(webpack@5.90.3(@swc/core@1.4.6)) fs-extra: 10.1.0 - html-webpack-plugin: 5.6.0(webpack@5.90.3) + html-webpack-plugin: 5.6.0(webpack@5.90.3(@swc/core@1.4.6)) identity-obj-proxy: 3.0.0 - jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))) - mini-css-extract-plugin: 2.8.1(webpack@5.90.3) - postcss: 8.4.35 - postcss-flexbugs-fixes: 5.0.2(postcss@8.4.35) - postcss-loader: 6.2.1(postcss@8.4.35)(webpack@5.90.3) - postcss-normalize: 10.0.1(browserslist@4.23.0)(postcss@8.4.35) - postcss-preset-env: 7.8.3(postcss@8.4.35) + jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))) + mini-css-extract-plugin: 2.8.1(webpack@5.90.3(@swc/core@1.4.6)) + postcss: 8.4.49 + postcss-flexbugs-fixes: 5.0.2(postcss@8.4.49) + postcss-loader: 6.2.1(postcss@8.4.49)(webpack@5.90.3(@swc/core@1.4.6)) + postcss-normalize: 10.0.1(browserslist@4.23.0)(postcss@8.4.49) + postcss-preset-env: 7.8.3(postcss@8.4.49) prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3) + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)) react-refresh: 0.11.0 resolve: 1.22.8 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(sass@1.71.1)(webpack@5.90.3) + sass-loader: 12.6.0(sass@1.71.1)(webpack@5.90.3(@swc/core@1.4.6)) semver: 7.6.0 - source-map-loader: 3.0.2(webpack@5.90.3) - style-loader: 3.3.4(webpack@5.90.3) - tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) - terser-webpack-plugin: 5.3.10(webpack@5.90.3) - webpack: 5.90.3 - webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3) - webpack-manifest-plugin: 4.1.1(webpack@5.90.3) - workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3) + source-map-loader: 3.0.2(webpack@5.90.3(@swc/core@1.4.6)) + style-loader: 3.3.4(webpack@5.90.3(@swc/core@1.4.6)) + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.6)(webpack@5.90.3(@swc/core@1.4.6)) + webpack: 5.90.3(@swc/core@1.4.6) + webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)) + webpack-manifest-plugin: 4.1.1(webpack@5.90.3(@swc/core@1.4.6)) + workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3(@swc/core@1.4.6)) optionalDependencies: fsevents: 2.3.3 typescript: 5.5.2 @@ -33763,7 +33993,7 @@ snapshots: require-in-the-middle@7.4.0: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -33969,15 +34199,15 @@ snapshots: htmlparser2: 8.0.2 is-plain-object: 5.0.0 parse-srcset: 1.0.2 - postcss: 8.4.35 + postcss: 8.4.39 sanitize.css@13.0.0: {} - sass-loader@12.6.0(sass@1.71.1)(webpack@5.90.3): + sass-loader@12.6.0(sass@1.71.1)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: sass: 1.71.1 @@ -34359,7 +34589,7 @@ snapshots: socks-proxy-agent@6.2.1: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) socks: 2.8.1 transitivePeerDependencies: - supports-color @@ -34367,7 +34597,7 @@ snapshots: socks-proxy-agent@7.0.0: dependencies: agent-base: 6.0.2 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) socks: 2.8.1 transitivePeerDependencies: - supports-color @@ -34375,7 +34605,7 @@ snapshots: socks-proxy-agent@8.0.2: dependencies: agent-base: 7.1.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) socks: 2.8.1 transitivePeerDependencies: - supports-color @@ -34405,12 +34635,14 @@ snapshots: source-map-js@1.2.0: {} - source-map-loader@3.0.2(webpack@5.90.3): + source-map-js@1.2.1: {} + + source-map-loader@3.0.2(webpack@5.90.3(@swc/core@1.4.6)): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 - source-map-js: 1.0.2 - webpack: 5.90.3 + source-map-js: 1.2.0 + webpack: 5.90.3(@swc/core@1.4.6) source-map-resolve@0.5.3: dependencies: @@ -34471,7 +34703,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -34482,7 +34714,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -34774,9 +35006,9 @@ snapshots: stubs@3.0.0: {} - style-loader@3.3.4(webpack@5.90.3): + style-loader@3.3.4(webpack@5.90.3(@swc/core@1.4.6)): dependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) style-mod@4.1.2: {} @@ -34797,28 +35029,28 @@ snapshots: hey-listen: 1.0.8 tslib: 2.6.2 - styled-components@5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0): + styled-components@5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@19.0.0)(react@18.2.0): dependencies: '@babel/helper-module-imports': 7.25.9(supports-color@5.5.0) '@babel/traverse': 7.25.9(supports-color@5.5.0) '@emotion/is-prop-valid': 1.2.2 '@emotion/stylis': 0.8.5 '@emotion/unitless': 0.7.5 - babel-plugin-styled-components: 2.1.4(@babel/core@7.24.0)(styled-components@5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@18.2.0)(react@18.2.0))(supports-color@5.5.0) + babel-plugin-styled-components: 2.1.4(@babel/core@7.24.0)(styled-components@5.3.11(@babel/core@7.24.0)(react-dom@18.2.0(react@18.2.0))(react-is@19.0.0)(react@18.2.0))(supports-color@5.5.0) css-to-react-native: 3.2.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-is: 18.2.0 + react-is: 19.0.0 shallowequal: 1.1.0 supports-color: 5.5.0 transitivePeerDependencies: - '@babel/core' - stylehacks@5.1.1(postcss@8.4.35): + stylehacks@5.1.1(postcss@8.4.49): dependencies: browserslist: 4.23.0 - postcss: 8.4.35 + postcss: 8.4.49 postcss-selector-parser: 6.0.15 stylis@4.2.0: {} @@ -34941,7 +35173,13 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.1(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + tailwind-merge@2.6.0: {} + + tailwindcss-animate@1.0.7(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))): + dependencies: + tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) + + tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -34951,18 +35189,18 @@ snapshots: fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.0 - lilconfig: 2.1.0 - micromatch: 4.0.5 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.35 - postcss-import: 15.1.0(postcss@8.4.35) - postcss-js: 4.0.1(postcss@8.4.35) - postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) - postcss-nested: 6.0.1(postcss@8.4.35) - postcss-selector-parser: 6.0.15 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -35045,14 +35283,16 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(webpack@5.90.3): + terser-webpack-plugin@5.3.10(@swc/core@1.4.6)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.29.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) + optionalDependencies: + '@swc/core': 1.4.6 terser@5.29.1: dependencies: @@ -35281,7 +35521,7 @@ snapshots: tuf-js@1.1.7: dependencies: '@tufjs/models': 1.0.4 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) make-fetch-happen: 11.1.1 transitivePeerDependencies: - supports-color @@ -35398,7 +35638,7 @@ snapshots: typedarray@0.0.6: {} - typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)): + typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.11.4)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: '@sqltools/formatter': 1.2.5 app-root-path: 3.1.0 @@ -35636,6 +35876,12 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 + update-browserslist-db@1.1.1(browserslist@4.24.3): + dependencies: + browserslist: 4.24.3 + escalade: 3.2.0 + picocolors: 1.1.1 + uri-js@4.4.1: dependencies: punycode: 2.3.1 @@ -35856,7 +36102,7 @@ snapshots: vite-tsconfig-paths@4.3.1(typescript@5.5.2)(vite@4.5.2(@types/node@20.12.12)(sass@1.71.1)(terser@5.29.1)): dependencies: - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.5.2) optionalDependencies: @@ -35868,7 +36114,7 @@ snapshots: vite@4.5.2(@types/node@20.12.12)(sass@1.71.1)(terser@5.29.1): dependencies: esbuild: 0.18.20 - postcss: 8.4.39 + postcss: 8.4.49 rollup: 3.29.4 optionalDependencies: '@types/node': 20.12.12 @@ -35879,7 +36125,7 @@ snapshots: vite@5.1.6(@types/node@20.12.12)(sass@1.71.1)(terser@5.29.1): dependencies: esbuild: 0.19.12 - postcss: 8.4.35 + postcss: 8.4.49 rollup: 4.13.0 optionalDependencies: '@types/node': 20.12.12 @@ -35979,16 +36225,16 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-dev-middleware@5.3.3(webpack@5.90.3): + webpack-dev-middleware@5.3.3(webpack@5.90.3(@swc/core@1.4.6)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) - webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3): + webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -36018,20 +36264,20 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.3(webpack@5.90.3) + webpack-dev-middleware: 5.3.3(webpack@5.90.3(@swc/core@1.4.6)) ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) optionalDependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-manifest-plugin@4.1.1(webpack@5.90.3): + webpack-manifest-plugin@4.1.1(webpack@5.90.3(@swc/core@1.4.6)): dependencies: tapable: 2.2.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) webpack-sources: 2.3.1 webpack-sources@1.4.3: @@ -36048,7 +36294,7 @@ snapshots: webpack-virtual-modules@0.6.1: {} - webpack@5.90.3: + webpack@5.90.3(@swc/core@1.4.6): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -36071,7 +36317,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.6)(webpack@5.90.3(@swc/core@1.4.6)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -36303,7 +36549,7 @@ snapshots: '@apideck/better-ajv-errors': 0.3.6(ajv@8.13.0) '@babel/core': 7.24.0 '@babel/preset-env': 7.24.5(@babel/core@7.24.0) - '@babel/runtime': 7.24.0 + '@babel/runtime': 7.26.0 '@rollup/plugin-babel': 5.3.1(@babel/core@7.24.0)(@types/babel__core@7.20.5)(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) @@ -36453,12 +36699,12 @@ snapshots: workbox-sw@7.0.0: {} - workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3): + workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) webpack-sources: 1.4.3 workbox-build: 6.6.0(@types/babel__core@7.20.5) transitivePeerDependencies: @@ -36650,7 +36896,7 @@ snapshots: cli-table: 0.3.11 commander: 7.1.0 dateformat: 4.6.3 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) diff: 5.2.0 error: 10.4.0 escape-string-regexp: 4.0.0 @@ -36687,7 +36933,7 @@ snapshots: dependencies: chalk: 4.1.2 dargs: 7.0.0 - debug: 4.3.7(supports-color@5.5.0) + debug: 4.3.7(supports-color@8.1.1) execa: 5.1.1 github-username: 6.0.0(encoding@0.1.13) lodash: 4.17.21