@flexkit/studio 0.0.25 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/asset-REAMGMQL.js +2 -0
  2. package/dist/{asset-HOJ43RVO.js.map → asset-REAMGMQL.js.map} +1 -1
  3. package/dist/astro.js +1 -1
  4. package/dist/{chunk-OXTER7HO.js → chunk-27Y2SQ67.js} +2 -2
  5. package/dist/{chunk-OXTER7HO.js.map → chunk-27Y2SQ67.js.map} +1 -1
  6. package/dist/{chunk-SW6NNU5D.js → chunk-2FFSI7IK.js} +2 -2
  7. package/dist/chunk-2FFSI7IK.js.map +1 -0
  8. package/dist/chunk-2PEDKE5Z.js +2 -0
  9. package/dist/chunk-2PEDKE5Z.js.map +1 -0
  10. package/dist/chunk-553TQFSU.js +2 -0
  11. package/dist/chunk-553TQFSU.js.map +1 -0
  12. package/dist/{chunk-FPK7J4BP.js → chunk-7GBAYC7G.js} +2 -2
  13. package/dist/chunk-7GBAYC7G.js.map +1 -0
  14. package/dist/{chunk-53TUQIKJ.js → chunk-AALMEPYG.js} +2 -2
  15. package/dist/chunk-AALMEPYG.js.map +1 -0
  16. package/dist/{chunk-V2UTZEJQ.js → chunk-CWHDJ7Q4.js} +2 -2
  17. package/dist/{chunk-V2UTZEJQ.js.map → chunk-CWHDJ7Q4.js.map} +1 -1
  18. package/dist/{chunk-6MOUYNN4.js → chunk-KGYH74NA.js} +2 -2
  19. package/dist/chunk-KGYH74NA.js.map +1 -0
  20. package/dist/chunk-KR7CLPY2.js +2 -0
  21. package/dist/chunk-KR7CLPY2.js.map +1 -0
  22. package/dist/{chunk-ND3OZVR5.js → chunk-NNRD7YZU.js} +2 -2
  23. package/dist/chunk-NNRD7YZU.js.map +1 -0
  24. package/dist/{chunk-PEYW7XOU.js → chunk-OEWYLKO7.js} +2 -2
  25. package/dist/chunk-OEWYLKO7.js.map +1 -0
  26. package/dist/{chunk-Z5CZVKD4.js → chunk-QXCD5JR4.js} +2 -2
  27. package/dist/chunk-QXCD5JR4.js.map +1 -0
  28. package/dist/{chunk-YXRNHQPG.js → chunk-TBCSVE5L.js} +2 -2
  29. package/dist/{chunk-YXRNHQPG.js.map → chunk-TBCSVE5L.js.map} +1 -1
  30. package/dist/{chunk-PCZI6VXG.js → chunk-UKLE7J3K.js} +2 -2
  31. package/dist/chunk-UUGIVWK4.js +2 -0
  32. package/dist/chunk-UUGIVWK4.js.map +1 -0
  33. package/dist/chunk-WDRCARCP.js +3 -0
  34. package/dist/{chunk-ZBV4BY36.js.map → chunk-WDRCARCP.js.map} +1 -1
  35. package/dist/{chunk-V7UK6RMM.js → chunk-X3S7TRCM.js} +2 -2
  36. package/dist/{chunk-V7UK6RMM.js.map → chunk-X3S7TRCM.js.map} +1 -1
  37. package/dist/chunk-XU2JGXYC.js +2 -0
  38. package/dist/chunk-XU2JGXYC.js.map +1 -0
  39. package/dist/{chunk-5CKMFBWH.js → chunk-YW2EEXMV.js} +2 -2
  40. package/dist/chunk-YW2EEXMV.js.map +1 -0
  41. package/dist/{chunk-RVGMKQPC.js → chunk-ZSJAPCIZ.js} +2 -2
  42. package/dist/chunk-ZSJAPCIZ.js.map +1 -0
  43. package/dist/{chunk-7XBIC5RC.js → chunk-ZSSNAIMU.js} +2 -2
  44. package/dist/{chunk-7XBIC5RC.js.map → chunk-ZSSNAIMU.js.map} +1 -1
  45. package/dist/datetime-TWONUNXS.js +2 -0
  46. package/dist/{datetime-VZJ7XF33.js.map → datetime-TWONUNXS.js.map} +1 -1
  47. package/dist/index.css +45 -13
  48. package/dist/index.d.ts +38 -14
  49. package/dist/index.js +270 -231
  50. package/dist/index.js.map +1 -1
  51. package/dist/nextjs.js +1 -1
  52. package/dist/{project-selector-UDFHGEZI.js → project-selector-X6YVZYKL.js} +2 -2
  53. package/dist/{project-selector-UDFHGEZI.js.map → project-selector-X6YVZYKL.js.map} +1 -1
  54. package/dist/{search-MG2W4GGN.js → search-6ASIDGYA.js} +2 -2
  55. package/dist/{search-MG2W4GGN.js.map → search-6ASIDGYA.js.map} +1 -1
  56. package/dist/switch-KVO3JRNX.js +2 -0
  57. package/dist/{switch-FBS75HI4.js.map → switch-KVO3JRNX.js.map} +1 -1
  58. package/dist/tanstack-start.js +1 -1
  59. package/dist/text-ODG7ABSW.js +2 -0
  60. package/dist/{text-RZOXKHWE.js.map → text-ODG7ABSW.js.map} +1 -1
  61. package/dist/textarea-M4YPSJEC.js +2 -0
  62. package/dist/{textarea-OUJM7E6O.js.map → textarea-M4YPSJEC.js.map} +1 -1
  63. package/dist/{types.d-B-SE1ihC.d.ts → types.d-DiA0h3ut.d.ts} +37 -7
  64. package/dist/ui.d.ts +3 -2
  65. package/dist/ui.js +1 -1
  66. package/dist/ui.js.map +1 -1
  67. package/dist/{user-nav-E7MLJ36Y.js → user-nav-O5G4M2VA.js} +2 -2
  68. package/dist/{user-nav-E7MLJ36Y.js.map → user-nav-O5G4M2VA.js.map} +1 -1
  69. package/package.json +1 -1
  70. package/dist/asset-HOJ43RVO.js +0 -2
  71. package/dist/chunk-53TUQIKJ.js.map +0 -1
  72. package/dist/chunk-5CKMFBWH.js.map +0 -1
  73. package/dist/chunk-6MOUYNN4.js.map +0 -1
  74. package/dist/chunk-6YHHL4XI.js +0 -2
  75. package/dist/chunk-6YHHL4XI.js.map +0 -1
  76. package/dist/chunk-7WR64NTK.js +0 -2
  77. package/dist/chunk-7WR64NTK.js.map +0 -1
  78. package/dist/chunk-FPK7J4BP.js.map +0 -1
  79. package/dist/chunk-I4C65MUI.js +0 -2
  80. package/dist/chunk-I4C65MUI.js.map +0 -1
  81. package/dist/chunk-JHDZP6RC.js +0 -2
  82. package/dist/chunk-JHDZP6RC.js.map +0 -1
  83. package/dist/chunk-ND3OZVR5.js.map +0 -1
  84. package/dist/chunk-PEYW7XOU.js.map +0 -1
  85. package/dist/chunk-RVGMKQPC.js.map +0 -1
  86. package/dist/chunk-SW6NNU5D.js.map +0 -1
  87. package/dist/chunk-SXZZFHMJ.js +0 -2
  88. package/dist/chunk-SXZZFHMJ.js.map +0 -1
  89. package/dist/chunk-Z5CZVKD4.js.map +0 -1
  90. package/dist/chunk-ZBV4BY36.js +0 -3
  91. package/dist/datetime-VZJ7XF33.js +0 -2
  92. package/dist/switch-FBS75HI4.js +0 -2
  93. package/dist/text-RZOXKHWE.js +0 -2
  94. package/dist/textarea-OUJM7E6O.js +0 -2
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/primitives/external-link.tsx","../src/ui/primitives/resizable.tsx","../src/ui/primitives/sheet.tsx","../src/ui/hooks/use-mobile.tsx","../src/ui/primitives/sidebar.tsx","../src/ui/components/sidebar.tsx","../src/ui/primitives/tabs.tsx"],"names":["ExternalLink","href","children","jsx","Button","jsxs","ExternalLinkIcon","ResizablePanelGroup","className","props","cn","ResizablePanel","ResizableHandle","withHandle","GripVerticalIcon","Sheet","SheetPrimitive","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","SheetContent","side","showCloseButton","XIcon","SheetHeader","SheetFooter","SheetTitle","SheetDescription","MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","M","mql","onChange","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","style","openMobile","setOpenMobile","_open","_setOpen","open","setOpen","value","openState","toggleSidebar","handleKeyDown","event","state","contextValue","TooltipProvider","Sidebar","variant","collapsible","SidebarTrigger","onClick","PanelLeftIcon","SidebarRail","SidebarInset","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Comp","Slot","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","button","Tooltip","TooltipTrigger","TooltipContent","NavLinkCompat","NavLink","iconList","Icons","iconName","fuse","Fuse","menuGroups","schema","visibleItems","item","itemsByGroup","groupBy","g","nonEmptyGroups","menuGroup","group","entity","capitalize","createElement","getBestMatchingIcon","str","withSpaces","concept","result","Tabs","orientation","TabsPrimitive","tabsListVariants","TabsList","TabsTrigger","TabsContent"],"mappings":"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","file":"ui.js","sourcesContent":["import { SquareArrowOutUpRight as ExternalLinkIcon } from 'lucide-react';\nimport { Button } from './button';\nimport type { JSX } from 'react';\n\nexport function ExternalLink({ href, children }: { href: string; children: React.ReactNode }): JSX.Element {\n return (\n <Button asChild className=\"fk:h-6 fk:px-1! fk:py-0 fk:text-sm fk:font-light fk:text-link\" size=\"sm\" variant=\"link\">\n <a href={href} target=\"_blank\">\n {children} <ExternalLinkIcon className=\"fk:size-3\" strokeWidth={3} />\n </a>\n </Button>\n );\n}\n","import { GripVerticalIcon } from 'lucide-react';\nimport * as ResizablePrimitive from 'react-resizable-panels';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction ResizablePanelGroup({ className, ...props }: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn('fk:flex fk:h-full fk:w-full fk:aria-[orientation=vertical]:flex-col', className)}\n {...props}\n />\n );\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />;\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean;\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n 'fk:relative fk:flex fk:w-px fk:items-center fk:justify-center fk:bg-border fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-1 fk:after:-translate-x-1/2 fk:focus-visible:ring-1 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-1 fk:focus-visible:outline-hidden fk:aria-[orientation=horizontal]:h-px fk:aria-[orientation=horizontal]:w-full fk:aria-[orientation=horizontal]:after:left-0 fk:aria-[orientation=horizontal]:after:h-1 fk:aria-[orientation=horizontal]:after:w-full fk:aria-[orientation=horizontal]:after:translate-x-0 fk:aria-[orientation=horizontal]:after:-translate-y-1/2 fk:[&[aria-orientation=horizontal]>div]:rotate-90',\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"fk:z-10 fk:flex fk:h-8 fk:w-3 fk:items-center fk:justify-center fk:rounded-xs fk:border fk:bg-border\">\n <GripVerticalIcon className=\"fk:size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n );\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup };\n","'use client';\n\nimport * as React from 'react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fk:fixed fk:inset-0 fk:z-50 fk:bg-black/50 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n showCloseButton?: boolean;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'fk:fixed fk:z-50 fk:flex fk:flex-col fk:gap-4 fk:bg-background fk:shadow-lg fk:transition fk:ease-in-out fk:data-[state=closed]:animate-out fk:data-[state=closed]:duration-300 fk:data-[state=open]:animate-in fk:data-[state=open]:duration-500',\n side === 'right' &&\n 'fk:inset-y-0 fk:right-0 fk:h-full fk:w-3/4 fk:border-l fk:data-[state=closed]:slide-out-to-right fk:data-[state=open]:slide-in-from-right fk:sm:max-w-sm',\n side === 'left' &&\n 'fk:inset-y-0 fk:left-0 fk:h-full fk:w-3/4 fk:border-r fk:data-[state=closed]:slide-out-to-left fk:data-[state=open]:slide-in-from-left fk:sm:max-w-sm',\n side === 'top' &&\n 'fk:inset-x-0 fk:top-0 fk:h-auto fk:border-b fk:data-[state=closed]:slide-out-to-top fk:data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'fk:inset-x-0 fk:bottom-0 fk:h-auto fk:border-t fk:data-[state=closed]:slide-out-to-bottom fk:data-[state=open]:slide-in-from-bottom',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"fk:absolute fk:top-4 fk:right-4 fk:rounded-xs fk:opacity-70 fk:ring-offset-background fk:transition-opacity fk:hover:opacity-100 fk:focus:ring-2 fk:focus:ring-ring fk:focus:ring-offset-2 fk:focus:outline-hidden fk:disabled:pointer-events-none fk:data-[state=open]:bg-secondary\">\n <XIcon className=\"fk:size-4\" />\n <span className=\"fk:sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-header\" className={cn('fk:flex fk:flex-col fk:gap-1.5 fk:p-4', className)} {...props} />;\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('fk:font-semibold fk:text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n SheetPortal,\n SheetOverlay,\n};\n","import * as React from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined);\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener('change', onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener('change', onChange);\n }, []);\n\n return !!isMobile;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from 'radix-ui';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport { useIsMobile } from '../hooks/use-mobile';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Separator } from './separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from './sheet';\nimport { Skeleton } from './skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';\n\nconst SIDEBAR_COOKIE_NAME = 'flexkit:sidebar:state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '2rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'fk:group/sidebar-wrapper fk:flex fk:w-full fk:has-data-[variant=inset]:bg-sidebar fk:overflow-hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n 'fk:flex fk:h-full fk:w-(--sidebar-width) fk:flex-col fk:bg-sidebar fk:text-sidebar-foreground',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"fk:w-(--sidebar-width) fk:bg-sidebar fk:p-0 fk:text-sidebar-foreground fk:[&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"fk:sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"fk:flex fk:h-full fk:w-full fk:flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"fk:group fk:peer fk:hidden fk:text-sidebar-foreground fk:md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'fk:relative fk:w-(--sidebar-width) fk:bg-transparent fk:transition-[width] fk:duration-200 fk:ease-linear',\n 'fk:group-data-[collapsible=offcanvas]:w-0',\n 'fk:group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fk:relative fk:inset-y-0 fk:z-10 fk:hidden fk:h-[calc(100svh-3.5rem)] fk:w-(--sidebar-width) fk:transition-[left,right,width] fk:duration-200 fk:ease-linear fk:md:flex',\n side === 'left'\n ? 'fk:left-0 fk:group-data-[collapsible=offcanvas]:-left-(--sidebar-width)'\n : 'fk:right-0 k:group-data-[collapsible=offcanvas]:-right-(--sidebar-width)',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)] fk:group-data-[side=left]:border-r'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon) fk:group-data-[side=left]:border-r fk:group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"fk:flex fk:h-full fk:w-full fk:flex-col fk:bg-sidebar fk:group-data-[variant=floating]:rounded-lg fk:group-data-[variant=floating]:border fk:group-data-[variant=floating]:border-sidebar-border fk:group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('fk:size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"fk:sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'fk:absolute fk:inset-y-0 fk:z-20 fk:hidden fk:w-4 fk:-translate-x-1/2 fk:transition-all fk:ease-linear fk:group-data-[side=left]:-right-4 fk:group-data-[side=right]:left-0 fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-[2px] fk:hover:after:bg-sidebar-border fk:sm:flex',\n 'fk:in-data-[side=left]:cursor-w-resize fk:in-data-[side=right]:cursor-e-resize',\n 'fk:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize fk:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'fk:group-data-[collapsible=offcanvas]:translate-x-0 fk:group-data-[collapsible=offcanvas]:after:left-full fk:hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'fk:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n 'fk:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'fk:relative fk:flex fk:flex-1 fk:flex-col fk:bg-background fk:overflow-hidden fk:peer-data-[variant=inset]:h-[calc(100svh-3.625rem)]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('fk:h-8 fk:w-full fk:bg-background fk:shadow-none', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('fk:mx-2 fk:w-auto fk:bg-sidebar-border', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:overflow-auto fk:group-data-[collapsible=icon]:overflow-hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('fk:relative fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'fk:flex fk:h-8 fk:shrink-0 fk:items-center fk:rounded-md fk:px-2 fk:text-xs fk:font-medium fk:text-sidebar-foreground/70 fk:ring-sidebar-ring fk:outline-hidden fk:transition-[margin,opacity] fk:duration-200 fk:ease-linear fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n 'fk:group-data-[collapsible=icon]:-mt-8 fk:group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'fk:absolute fk:top-3.5 fk:right-3 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('fk:w-full fk:text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('fk:group/menu-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'fk:peer/menu-button fk:flex fk:w-full fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:p-2 fk:text-left fk:text-sm fk:ring-sidebar-ring fk:outline-hidden fk:transition-[width,height,padding] fk:group-has-data-[sidebar=menu-action]/menu-item:pr-8 fk:group-data-[collapsible=icon]:size-8! fk:group-data-[collapsible=icon]:p-2! fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:font-medium fk:data-[active=true]:text-sidebar-accent-foreground fk:data-[state=open]:hover:bg-sidebar-accent fk:data-[state=open]:hover:text-sidebar-accent-foreground fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground',\n outline:\n 'fk:bg-background fk:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'fk:h-8 fk:text-sm',\n sm: 'fk:h-7 fk:text-xs',\n lg: 'fk:h-12 fk:text-sm fk:group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'fk:absolute fk:top-1.5 fk:right-1 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'fk:group-focus-within/menu-item:opacity-100 fk:group-hover/menu-item:opacity-100 fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground fk:data-[state=open]:opacity-100 fk:md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'fk:pointer-events-none fk:absolute fk:right-1 fk:flex fk:h-5 fk:min-w-5 fk:items-center fk:justify-center fk:rounded-md fk:px-1 fk:text-xs fk:font-medium fk:text-sidebar-foreground fk:tabular-nums fk:select-none',\n 'fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('fk:flex fk:h-8 fk:items-center fk:gap-2 fk:rounded-md fk:px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"fk:size-4 fk:rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"fk:h-4 fk:max-w-(--skeleton-width) fk:flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'fk:mx-3.5 fk:flex fk:min-w-0 fk:translate-x-px fk:flex-col fk:gap-1 fk:border-l fk:border-sidebar-border fk:px-2.5 fk:py-0.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('fk:group/menu-sub-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'fk:flex fk:h-7 fk:min-w-0 fk:-translate-x-px fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:px-2 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:[&>svg]:text-sidebar-accent-foreground',\n 'fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'fk:text-xs',\n size === 'md' && 'fk:text-sm',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n","import { createElement, type JSX } from 'react';\nimport * as Icons from 'lucide-react';\nimport Fuse from 'fuse.js';\nimport { NavLink } from 'react-router-dom';\nimport {\n Sidebar as SidebarPrimitive,\n SidebarContent,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarRail,\n} from '../primitives/sidebar';\nimport type { SingleProject } from '../../core/config/types';\nimport { groupBy } from 'ramda';\n\nconst NavLinkCompat = NavLink as unknown as React.ComponentType<{\n children?: React.ReactNode;\n to: string;\n}>;\n\ninterface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n menuGroups?: SingleProject['menuGroups'];\n schema: SingleProject['schema'];\n}\n\ntype VisibleMenuSchema = Array<\n Omit<SingleProject['schema'][number], 'menu'> & {\n menu?: Exclude<SingleProject['schema'][number]['menu'], { hidden: true }>;\n }\n>;\n\nconst iconList = Object.keys(Icons).map((iconName) => ({\n name: iconName,\n icon: Icons[iconName as keyof typeof Icons],\n}));\n\nconst fuse = new Fuse(iconList, {\n keys: ['name'],\n threshold: 0.5,\n});\n\nexport function Sidebar({ className, menuGroups, schema }: SidebarProps): JSX.Element {\n // Filter out hidden items first, then group them\n const visibleItems = schema.filter((item) => !(item.menu && 'hidden' in item.menu)) as VisibleMenuSchema;\n const itemsByGroup = groupBy(\n (item) => (item.menu?.group && menuGroups?.find((g) => g.name === item.menu?.group)?.name) || 'ungrouped',\n visibleItems\n );\n const nonEmptyGroups = menuGroups?.filter((menuGroup) => itemsByGroup[menuGroup.name]?.length);\n\n return (\n <SidebarPrimitive className={className} collapsible=\"icon\" variant=\"inset\">\n <SidebarContent>\n {nonEmptyGroups?.map((group) => (\n <SidebarGroup key={group.name}>\n <SidebarGroupLabel>{group.title}</SidebarGroupLabel>\n <SidebarMenu>\n {itemsByGroup[group.name]?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n {entity.menu?.icon ??\n createElement(\n Icons[getBestMatchingIcon(entity.name)] as React.ComponentType<React.SVGProps<SVGSVGElement>>,\n {\n className: 'fk:h-4 fk:w-4 fk:mr-2',\n strokeWidth: 2,\n }\n )}\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n <SidebarGroup>\n <SidebarMenu>\n {itemsByGroup['ungrouped']?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n {createElement(\n Icons[getBestMatchingIcon(entity.name)] as React.ComponentType<React.SVGProps<SVGSVGElement>>,\n {\n className: 'fk:h-4 fk:w-4 fk:mr-2',\n strokeWidth: 2,\n }\n )}\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n <SidebarRail />\n </SidebarPrimitive>\n );\n}\n\nfunction capitalize(str: string): string {\n // Add space before capital letters and capitalize first letter\n const withSpaces = str.replace(/([A-Z])/g, ' $1');\n // Capitalize first letter and trim any leading space\n return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1).trim();\n}\n\n/**\n * Tries to get the best matching icon for an entity name using fuzy search\n */\nfunction getBestMatchingIcon(concept: string): keyof typeof Icons {\n const result = fuse.search(concept);\n\n if (result.length > 0) {\n return result[0].item.name as keyof typeof Icons;\n }\n\n return 'Dock' as keyof typeof Icons;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Tabs({ className, orientation = 'horizontal', ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn('fk:group/tabs fk:flex fk:data-[orientation=horizontal]:flex-col', className)}\n {...props}\n />\n );\n}\n\nconst tabsListVariants = cva(\n 'fk:group/tabs-list fk:inline-flex fk:w-fit fk:items-center fk:justify-center fk:rounded-lg fk:p-[3px] fk:text-muted-foreground fk:group-data-[orientation=horizontal]/tabs:h-9 fk:group-data-[orientation=vertical]/tabs:h-fit fk:group-data-[orientation=vertical]/tabs:flex-col fk:data-[variant=line]:rounded-none',\n {\n variants: {\n variant: {\n default: 'fk:bg-muted',\n line: 'fk:gap-1 fk:bg-transparent',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction TabsList({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"fk:relative fk:inline-flex fk:h-[calc(100%-1px)] fk:flex-1 fk:items-center fk:justify-center fk:gap-1.5 fk:rounded-md fk:border fk:border-transparent! fk:px-4 fk:py-1 fk:text-sm fk:font-medium fk:whitespace-nowrap fk:text-foreground/60 fk:transition-all fk:group-data-[orientation=vertical]/tabs:w-full fk:group-data-[orientation=vertical]/tabs:justify-start fk:hover:text-foreground fk:focus-visible:border-ring! fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:focus-visible:outline-1 fk:focus-visible:outline-ring fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm fk:group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none fk:dark:text-muted-foreground fk:dark:hover:text-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4\",\n 'fk:group-data-[variant=line]/tabs-list:bg-transparent fk:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent! fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent',\n 'fk:data-[state=active]:bg-background fk:data-[state=active]:text-foreground fk:dark:data-[state=active]:border-muted-foreground/75! fk:dark:data-[state=active]:bg-input/30 fk:dark:data-[state=active]:text-foreground',\n 'fk:after:absolute fk:after:bg-foreground fk:after:opacity-0 fk:after:transition-opacity fk:group-data-[orientation=horizontal]/tabs:after:inset-x-0 fk:group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] fk:group-data-[orientation=horizontal]/tabs:after:h-0.5 fk:group-data-[orientation=vertical]/tabs:after:inset-y-0 fk:group-data-[orientation=vertical]/tabs:after:-right-1 fk:group-data-[orientation=vertical]/tabs:after:w-0.5 fk:group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content data-slot=\"tabs-content\" className={cn('fk:flex-1 fk:outline-none', className)} {...props} />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };\n"]}
1
+ {"version":3,"sources":["../src/ui/primitives/external-link.tsx","../src/ui/primitives/resizable.tsx","../src/ui/primitives/sheet.tsx","../src/ui/hooks/use-mobile.tsx","../src/ui/primitives/sidebar.tsx","../src/ui/components/sidebar.tsx","../src/ui/primitives/tabs.tsx"],"names":["ExternalLink","href","children","jsx","Button","jsxs","ExternalLinkIcon","ResizablePanelGroup","className","props","cn","ResizablePanel","ResizableHandle","withHandle","GripVerticalIcon","Sheet","SheetPrimitive","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","SheetContent","side","showCloseButton","XIcon","SheetHeader","SheetFooter","SheetTitle","SheetDescription","MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","M","mql","onChange","SIDEBAR_COOKIE_NAME","SIDEBAR_COOKIE_MAX_AGE","SIDEBAR_WIDTH","SIDEBAR_WIDTH_MOBILE","SIDEBAR_WIDTH_ICON","SIDEBAR_KEYBOARD_SHORTCUT","SidebarContext","useSidebar","context","SidebarProvider","defaultOpen","openProp","setOpenProp","style","openMobile","setOpenMobile","_open","_setOpen","open","setOpen","value","openState","toggleSidebar","handleKeyDown","event","state","contextValue","TooltipProvider","Sidebar","variant","collapsible","SidebarTrigger","onClick","PanelLeftIcon","SidebarRail","SidebarInset","SidebarContent","SidebarGroup","SidebarGroupLabel","asChild","Comp","Slot","SidebarMenu","SidebarMenuItem","sidebarMenuButtonVariants","cva","SidebarMenuButton","isActive","size","tooltip","button","Tooltip","TooltipTrigger","TooltipContent","NavLinkCompat","NavLink","iconList","Icons","iconName","fuse","Fuse","menuGroups","schema","visibleItems","item","itemsByGroup","groupBy","g","nonEmptyGroups","menuGroup","group","entity","capitalize","createElement","getBestMatchingIcon","str","withSpaces","concept","result","Tabs","orientation","TabsPrimitive","tabsListVariants","TabsList","TabsTrigger","TabsContent"],"mappings":"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","file":"ui.js","sourcesContent":["import { SquareArrowOutUpRight as ExternalLinkIcon } from 'lucide-react';\nimport { Button } from './button';\nimport type { JSX } from 'react';\n\nexport function ExternalLink({ href, children }: { href: string; children: React.ReactNode }): JSX.Element {\n return (\n <Button asChild className=\"fk:h-6 fk:px-1! fk:py-0 fk:text-sm fk:font-light fk:text-link\" size=\"sm\" variant=\"link\">\n <a href={href} target=\"_blank\">\n {children} <ExternalLinkIcon className=\"fk:size-3\" strokeWidth={3} />\n </a>\n </Button>\n );\n}\n","import { GripVerticalIcon } from 'lucide-react';\nimport * as ResizablePrimitive from 'react-resizable-panels';\nimport { cn } from '../lib/utils';\n\nfunction ResizablePanelGroup({ className, ...props }: ResizablePrimitive.GroupProps) {\n return (\n <ResizablePrimitive.Group\n data-slot=\"resizable-panel-group\"\n className={cn('fk:flex fk:h-full fk:w-full fk:aria-[orientation=vertical]:flex-col', className)}\n {...props}\n />\n );\n}\n\nfunction ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {\n return <ResizablePrimitive.Panel data-slot=\"resizable-panel\" {...props} />;\n}\n\nfunction ResizableHandle({\n withHandle,\n className,\n ...props\n}: ResizablePrimitive.SeparatorProps & {\n withHandle?: boolean;\n}) {\n return (\n <ResizablePrimitive.Separator\n data-slot=\"resizable-handle\"\n className={cn(\n 'fk:relative fk:flex fk:w-px fk:items-center fk:justify-center fk:bg-border fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-1 fk:after:-translate-x-1/2 fk:focus-visible:ring-1 fk:focus-visible:ring-ring fk:focus-visible:ring-offset-1 fk:focus-visible:outline-hidden fk:aria-[orientation=horizontal]:h-px fk:aria-[orientation=horizontal]:w-full fk:aria-[orientation=horizontal]:after:left-0 fk:aria-[orientation=horizontal]:after:h-1 fk:aria-[orientation=horizontal]:after:w-full fk:aria-[orientation=horizontal]:after:translate-x-0 fk:aria-[orientation=horizontal]:after:-translate-y-1/2 fk:[&[aria-orientation=horizontal]>div]:rotate-90',\n className\n )}\n {...props}\n >\n {withHandle && (\n <div className=\"fk:z-10 fk:flex fk:h-8 fk:w-3 fk:items-center fk:justify-center fk:rounded-xs fk:border fk:bg-border\">\n <GripVerticalIcon className=\"fk:size-2.5\" />\n </div>\n )}\n </ResizablePrimitive.Separator>\n );\n}\n\nexport { ResizableHandle, ResizablePanel, ResizablePanelGroup };\n","'use client';\n\nimport * as React from 'react';\nimport { Dialog as SheetPrimitive } from 'radix-ui';\nimport { XIcon } from 'lucide-react';\nimport { cn } from '../lib/utils';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fk:fixed fk:inset-0 fk:z-50 fk:bg-black/50 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n showCloseButton?: boolean;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'fk:fixed fk:z-50 fk:flex fk:flex-col fk:gap-4 fk:bg-background fk:shadow-lg fk:transition fk:ease-in-out fk:data-[state=closed]:animate-out fk:data-[state=closed]:duration-300 fk:data-[state=open]:animate-in fk:data-[state=open]:duration-500',\n side === 'right' &&\n 'fk:inset-y-0 fk:right-0 fk:h-full fk:w-3/4 fk:border-l fk:data-[state=closed]:slide-out-to-right fk:data-[state=open]:slide-in-from-right fk:sm:max-w-sm',\n side === 'left' &&\n 'fk:inset-y-0 fk:left-0 fk:h-full fk:w-3/4 fk:border-r fk:data-[state=closed]:slide-out-to-left fk:data-[state=open]:slide-in-from-left fk:sm:max-w-sm',\n side === 'top' &&\n 'fk:inset-x-0 fk:top-0 fk:h-auto fk:border-b fk:data-[state=closed]:slide-out-to-top fk:data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'fk:inset-x-0 fk:bottom-0 fk:h-auto fk:border-t fk:data-[state=closed]:slide-out-to-bottom fk:data-[state=open]:slide-in-from-bottom',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"fk:absolute fk:top-4 fk:right-4 fk:rounded-xs fk:opacity-70 fk:ring-offset-background fk:transition-opacity fk:hover:opacity-100 fk:focus:ring-2 fk:focus:ring-ring fk:focus:ring-offset-2 fk:focus:outline-hidden fk:disabled:pointer-events-none fk:data-[state=open]:bg-secondary\">\n <XIcon className=\"fk:size-4\" />\n <span className=\"fk:sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"sheet-header\" className={cn('fk:flex fk:flex-col fk:gap-1.5 fk:p-4', className)} {...props} />;\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('fk:mt-auto fk:flex fk:flex-col fk:gap-2 fk:p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('fk:font-semibold fk:text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n SheetPortal,\n SheetOverlay,\n};\n","import * as React from 'react';\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport function useIsMobile() {\n const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined);\n\n React.useEffect(() => {\n const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);\n const onChange = () => {\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n };\n mql.addEventListener('change', onChange);\n setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);\n return () => mql.removeEventListener('change', onChange);\n }, []);\n\n return !!isMobile;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Slot } from 'radix-ui';\nimport { VariantProps, cva } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport { useIsMobile } from '../hooks/use-mobile';\nimport { cn } from '../lib/utils';\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Separator } from './separator';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from './sheet';\nimport { Skeleton } from './skeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './tooltip';\n\nconst SIDEBAR_COOKIE_NAME = 'flexkit:sidebar:state';\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '2rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = React.createContext<SidebarContextProps | null>(null);\n\nfunction useSidebar() {\n const context = React.useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n\n return context;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = React.useState(false);\n\n // This is the internal state of the sidebar.\n // We use openProp and setOpenProp for control from outside the component.\n const [_open, _setOpen] = React.useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = React.useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n\n // This sets the cookie to keep the sidebar state.\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n },\n [setOpenProp, open]\n );\n\n // Helper to toggle the sidebar.\n const toggleSidebar = React.useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen, setOpenMobile]);\n\n // Adds a keyboard shortcut to toggle the sidebar.\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n // We add a state so that we can do data-state=\"expanded\" or \"collapsed\".\n // This makes it easier to style the sidebar with Tailwind classes.\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = React.useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn(\n 'fk:group/sidebar-wrapper fk:flex fk:w-full fk:has-data-[variant=inset]:bg-sidebar fk:overflow-hidden',\n className\n )}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n 'fk:flex fk:h-full fk:w-(--sidebar-width) fk:flex-col fk:bg-sidebar fk:text-sidebar-foreground',\n className\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"fk:w-(--sidebar-width) fk:bg-sidebar fk:p-0 fk:text-sidebar-foreground fk:[&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"fk:sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"fk:flex fk:h-full fk:w-full fk:flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"fk:group fk:peer fk:hidden fk:text-sidebar-foreground fk:md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'fk:relative fk:w-(--sidebar-width) fk:bg-transparent fk:transition-[width] fk:duration-200 fk:ease-linear',\n 'fk:group-data-[collapsible=offcanvas]:w-0',\n 'fk:group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon)'\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fk:relative fk:inset-y-0 fk:z-10 fk:hidden fk:h-[calc(100svh-3.5rem)] fk:w-(--sidebar-width) fk:transition-[left,right,width] fk:duration-200 fk:ease-linear fk:md:flex',\n side === 'left'\n ? 'fk:left-0 fk:group-data-[collapsible=offcanvas]:-left-(--sidebar-width)'\n : 'fk:right-0 k:group-data-[collapsible=offcanvas]:-right-(--sidebar-width)',\n // Adjust the padding for floating and inset variants.\n variant === 'floating' || variant === 'inset'\n ? 'fk:group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)] fk:group-data-[side=left]:border-r'\n : 'fk:group-data-[collapsible=icon]:w-(--sidebar-width-icon) fk:group-data-[side=left]:border-r fk:group-data-[side=right]:border-l',\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"fk:flex fk:h-full fk:w-full fk:flex-col fk:bg-sidebar fk:group-data-[variant=floating]:rounded-lg fk:group-data-[variant=floating]:border fk:group-data-[variant=floating]:border-sidebar-border fk:group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('fk:size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"fk:sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'fk:absolute fk:inset-y-0 fk:z-20 fk:hidden fk:w-4 fk:-translate-x-1/2 fk:transition-all fk:ease-linear fk:group-data-[side=left]:-right-4 fk:group-data-[side=right]:left-0 fk:after:absolute fk:after:inset-y-0 fk:after:left-1/2 fk:after:w-[2px] fk:hover:after:bg-sidebar-border fk:sm:flex',\n 'fk:in-data-[side=left]:cursor-w-resize fk:in-data-[side=right]:cursor-e-resize',\n 'fk:[[data-side=left][data-state=collapsed]_&]:cursor-e-resize fk:[[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'fk:group-data-[collapsible=offcanvas]:translate-x-0 fk:group-data-[collapsible=offcanvas]:after:left-full fk:hover:group-data-[collapsible=offcanvas]:bg-sidebar',\n 'fk:[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n 'fk:[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'fk:relative fk:flex fk:flex-1 fk:flex-col fk:bg-background fk:overflow-hidden fk:peer-data-[variant=inset]:h-[calc(100svh-3.625rem)]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarInput({ className, ...props }: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn('fk:h-8 fk:w-full fk:bg-background fk:shadow-none', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('fk:flex fk:flex-col fk:gap-2 fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn('fk:mx-2 fk:w-auto fk:bg-sidebar-border', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'fk:flex fk:min-h-0 fk:flex-1 fk:flex-col fk:overflow-auto fk:group-data-[collapsible=icon]:overflow-hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('fk:relative fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:p-2', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'fk:flex fk:h-8 fk:shrink-0 fk:items-center fk:rounded-md fk:px-2 fk:text-xs fk:font-medium fk:text-sidebar-foreground/70 fk:ring-sidebar-ring fk:outline-hidden fk:transition-[margin,opacity] fk:duration-200 fk:ease-linear fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n 'fk:group-data-[collapsible=icon]:-mt-8 fk:group-data-[collapsible=icon]:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'fk:absolute fk:top-3.5 fk:right-3 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('fk:w-full fk:text-sm', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('fk:flex fk:w-full fk:min-w-0 fk:flex-col fk:gap-1', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('fk:group/menu-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'fk:peer/menu-button fk:flex fk:w-full fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:p-2 fk:text-left fk:text-sm fk:ring-sidebar-ring fk:outline-hidden fk:transition-[width,height,padding] fk:group-has-data-[sidebar=menu-action]/menu-item:pr-8 fk:group-data-[collapsible=icon]:size-8! fk:group-data-[collapsible=icon]:p-2! fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:font-medium fk:data-[active=true]:text-sidebar-accent-foreground fk:data-[state=open]:hover:bg-sidebar-accent fk:data-[state=open]:hover:text-sidebar-accent-foreground fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground',\n outline:\n 'fk:bg-background fk:shadow-[0_0_0_1px_hsl(var(--sidebar-border))] fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'fk:h-8 fk:text-sm',\n sm: 'fk:h-7 fk:text-xs',\n lg: 'fk:h-12 fk:text-sm fk:group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot.Root : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n if (typeof tooltip === 'string') {\n tooltip = {\n children: tooltip,\n };\n }\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltip} />\n </Tooltip>\n );\n}\n\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'fk:absolute fk:top-1.5 fk:right-1 fk:flex fk:aspect-square fk:w-5 fk:items-center fk:justify-center fk:rounded-md fk:p-0 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:transition-transform fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:[&>svg]:size-4 fk:[&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'fk:after:absolute fk:after:-inset-2 fk:md:after:hidden',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'fk:group-focus-within/menu-item:opacity-100 fk:group-hover/menu-item:opacity-100 fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground fk:data-[state=open]:opacity-100 fk:md:opacity-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'fk:pointer-events-none fk:absolute fk:right-1 fk:flex fk:h-5 fk:min-w-5 fk:items-center fk:justify-center fk:rounded-md fk:px-1 fk:text-xs fk:font-medium fk:text-sidebar-foreground fk:tabular-nums fk:select-none',\n 'fk:peer-hover/menu-button:text-sidebar-accent-foreground fk:peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'fk:peer-data-[size=sm]/menu-button:top-1',\n 'fk:peer-data-[size=default]/menu-button:top-1.5',\n 'fk:peer-data-[size=lg]/menu-button:top-2.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n // Random width between 50 to 90%.\n const width = React.useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('fk:flex fk:h-8 fk:items-center fk:gap-2 fk:rounded-md fk:px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"fk:size-4 fk:rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"fk:h-4 fk:max-w-(--skeleton-width) fk:flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'fk:mx-3.5 fk:flex fk:min-w-0 fk:translate-x-px fk:flex-col fk:gap-1 fk:border-l fk:border-sidebar-border fk:px-2.5 fk:py-0.5',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('fk:group/menu-sub-item fk:relative', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot.Root : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'fk:flex fk:h-7 fk:min-w-0 fk:-translate-x-px fk:items-center fk:gap-2 fk:overflow-hidden fk:rounded-md fk:px-2 fk:text-sidebar-foreground fk:ring-sidebar-ring fk:outline-hidden fk:hover:bg-sidebar-accent fk:hover:text-sidebar-accent-foreground fk:focus-visible:ring-2 fk:active:bg-sidebar-accent fk:active:text-sidebar-accent-foreground fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-disabled:pointer-events-none fk:aria-disabled:opacity-50 fk:[&>span:last-child]:truncate fk:[&>svg]:size-4 fk:[&>svg]:shrink-0 fk:[&>svg]:text-sidebar-accent-foreground',\n 'fk:data-[active=true]:bg-sidebar-accent fk:data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'fk:text-xs',\n size === 'md' && 'fk:text-sm',\n 'fk:group-data-[collapsible=icon]:hidden',\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n};\n","import { createElement, type JSX } from 'react';\nimport * as Icons from 'lucide-react';\nimport Fuse from 'fuse.js';\nimport { NavLink } from 'react-router-dom';\nimport {\n Sidebar as SidebarPrimitive,\n SidebarContent,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarMenu,\n SidebarMenuItem,\n SidebarMenuButton,\n SidebarRail,\n} from '../primitives/sidebar';\nimport type { SingleProject } from '../../core/config/types';\nimport { groupBy } from 'ramda';\n\nconst NavLinkCompat = NavLink as unknown as React.ComponentType<{\n children?: React.ReactNode;\n to: string;\n}>;\n\ninterface SidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n className?: string;\n menuGroups?: SingleProject['menuGroups'];\n schema: SingleProject['schema'];\n}\n\ntype VisibleMenuSchema = Array<\n Omit<SingleProject['schema'][number], 'menu'> & {\n menu?: Exclude<SingleProject['schema'][number]['menu'], { hidden: true }>;\n }\n>;\n\nconst iconList = Object.keys(Icons).map((iconName) => ({\n name: iconName,\n icon: Icons[iconName as keyof typeof Icons],\n}));\n\nconst fuse = new Fuse(iconList, {\n keys: ['name'],\n threshold: 0.5,\n});\n\nexport function Sidebar({ className, menuGroups, schema }: SidebarProps): JSX.Element {\n // Filter out hidden items first, then group them\n const visibleItems = schema.filter((item) => !(item.menu && 'hidden' in item.menu)) as VisibleMenuSchema;\n const itemsByGroup = groupBy(\n (item) => (item.menu?.group && menuGroups?.find((g) => g.name === item.menu?.group)?.name) || 'ungrouped',\n visibleItems\n );\n const nonEmptyGroups = menuGroups?.filter((menuGroup) => itemsByGroup[menuGroup.name]?.length);\n\n return (\n <SidebarPrimitive className={className} collapsible=\"icon\" variant=\"inset\">\n <SidebarContent>\n {nonEmptyGroups?.map((group) => (\n <SidebarGroup key={group.name}>\n <SidebarGroupLabel>{group.title}</SidebarGroupLabel>\n <SidebarMenu>\n {itemsByGroup[group.name]?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n {entity.menu?.icon ??\n createElement(\n Icons[getBestMatchingIcon(entity.name)] as React.ComponentType<React.SVGProps<SVGSVGElement>>,\n {\n className: 'fk:h-4 fk:w-4 fk:mr-2',\n strokeWidth: 2,\n }\n )}\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n <SidebarGroup>\n <SidebarMenu>\n {itemsByGroup['ungrouped']?.map((entity) => (\n <SidebarMenuItem key={entity.plural}>\n <SidebarMenuButton\n asChild\n isActive={location.pathname.includes(`/list/${entity.plural}`)}\n tooltip={capitalize(entity.menu?.label ?? entity.plural)}\n >\n <NavLinkCompat to={`list/${entity.plural}`}>\n {createElement(\n Icons[getBestMatchingIcon(entity.name)] as React.ComponentType<React.SVGProps<SVGSVGElement>>,\n {\n className: 'fk:h-4 fk:w-4 fk:mr-2',\n strokeWidth: 2,\n }\n )}\n <span>{capitalize(entity.menu?.label ?? entity.plural)}</span>\n </NavLinkCompat>\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroup>\n </SidebarContent>\n <SidebarRail />\n </SidebarPrimitive>\n );\n}\n\nfunction capitalize(str: string): string {\n // Add space before capital letters and capitalize first letter\n const withSpaces = str.replace(/([A-Z])/g, ' $1');\n // Capitalize first letter and trim any leading space\n return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1).trim();\n}\n\n/**\n * Tries to get the best matching icon for an entity name using fuzy search\n */\nfunction getBestMatchingIcon(concept: string): keyof typeof Icons {\n const result = fuse.search(concept);\n\n if (result.length > 0) {\n return result[0].item.name as keyof typeof Icons;\n }\n\n return 'Dock' as keyof typeof Icons;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Tabs as TabsPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nfunction Tabs({ className, orientation = 'horizontal', ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn('fk:group/tabs fk:flex fk:data-[orientation=horizontal]:flex-col', className)}\n {...props}\n />\n );\n}\n\nconst tabsListVariants = cva(\n 'fk:group/tabs-list fk:inline-flex fk:w-fit fk:items-center fk:justify-center fk:rounded-lg fk:p-[3px] fk:text-muted-foreground fk:group-data-[orientation=horizontal]/tabs:h-9 fk:group-data-[orientation=vertical]/tabs:h-fit fk:group-data-[orientation=vertical]/tabs:flex-col fk:data-[variant=line]:rounded-none',\n {\n variants: {\n variant: {\n default: 'fk:bg-muted',\n line: 'fk:gap-1 fk:bg-transparent',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nfunction TabsList({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n \"fk:relative fk:inline-flex fk:h-[calc(100%-1px)] fk:flex-1 fk:items-center fk:justify-center fk:gap-1.5 fk:rounded-md fk:border fk:border-transparent! fk:px-4 fk:py-1 fk:text-sm fk:font-medium fk:whitespace-nowrap fk:text-foreground/60 fk:transition-all fk:group-data-[orientation=vertical]/tabs:w-full fk:group-data-[orientation=vertical]/tabs:justify-start fk:hover:text-foreground fk:focus-visible:border-ring! fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:focus-visible:outline-1 fk:focus-visible:outline-ring fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm fk:group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none fk:dark:text-muted-foreground fk:dark:hover:text-foreground fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4\",\n 'fk:group-data-[variant=line]/tabs-list:bg-transparent fk:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent! fk:dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent',\n 'fk:data-[state=active]:bg-background fk:data-[state=active]:text-foreground fk:dark:data-[state=active]:border-muted-foreground/75! fk:dark:data-[state=active]:bg-input/30 fk:dark:data-[state=active]:text-foreground',\n 'fk:after:absolute fk:after:bg-foreground fk:after:opacity-0 fk:after:transition-opacity fk:group-data-[orientation=horizontal]/tabs:after:inset-x-0 fk:group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] fk:group-data-[orientation=horizontal]/tabs:after:h-0.5 fk:group-data-[orientation=vertical]/tabs:after:inset-y-0 fk:group-data-[orientation=vertical]/tabs:after:-right-1 fk:group-data-[orientation=vertical]/tabs:after:w-0.5 fk:group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content data-slot=\"tabs-content\" className={cn('fk:flex-1 fk:outline-none', className)} {...props} />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };\n"]}
@@ -1,2 +1,2 @@
1
- import'./index.css';import {b as b$1}from'./chunk-7XBIC5RC.js';import {a,b as b$3,c as c$1}from'./chunk-SW6NNU5D.js';import {b,r,c,e,f,l,m,i,h,n}from'./chunk-YXRNHQPG.js';import'./chunk-6YHHL4XI.js';import'./chunk-ZBV4BY36.js';import {b as b$2}from'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';import {Monitor,Moon,Sun}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function _({projectId:D}){let{theme:a$1,setTheme:t}=b(),[C,n$1]=b$1();return C?jsx(r,{className:"fk:h-8 fk:w-8 fk:rounded-full"}):jsxs(c,{children:[jsx(e,{asChild:true,children:jsx(b$2,{className:"fk:relative fk:h-8 fk:w-8 fk:rounded-full",variant:"ghost",children:jsxs(a,{className:"fk:h-8 fk:w-8",children:[jsx(b$3,{alt:"@shadcn",src:n$1.user?.avatar_url}),jsx(c$1,{children:n$1.user?.display_name.charAt(0).toUpperCase()??""})]})})}),jsxs(f,{align:"end",className:"fk:w-56",forceMount:true,children:[jsx(l,{className:"font-normal",children:jsxs("div",{className:"fk:flex fk:flex-col fk:space-y-1",children:[jsx("p",{className:"fk:text-sm fk:font-medium fk:leading-none",children:n$1.user?.display_name}),jsx("p",{className:"fk:text-xs fk:leading-none fk:text-muted-foreground",children:n$1.user?.email})]})}),jsx(m,{}),jsx(l,{children:"Theme"}),jsxs(i,{checked:a$1==="system",onCheckedChange:()=>{t("system");},children:[jsx(Monitor,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"System"})]}),jsxs(i,{checked:a$1==="dark",onCheckedChange:()=>{t("dark");},children:[jsx(Moon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Dark"})]}),jsxs(i,{checked:a$1==="light",onCheckedChange:()=>{t("light");},children:[jsx(Sun,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Light"})]}),jsx(m,{}),jsxs(h,{onClick:()=>{n$1.logout(D).then(()=>{}).catch(()=>{});},children:["Log out",jsx(n,{children:"\u21E7\u2318Q"})]})]})]})}export{_ as UserNav};//# sourceMappingURL=user-nav-E7MLJ36Y.js.map
2
- //# sourceMappingURL=user-nav-E7MLJ36Y.js.map
1
+ import'./index.css';import {b as b$1}from'./chunk-ZSSNAIMU.js';import {a,b as b$3,c as c$1}from'./chunk-2FFSI7IK.js';import {b,r,c,e,f,l,m,i,h,n}from'./chunk-TBCSVE5L.js';import'./chunk-UUGIVWK4.js';import'./chunk-WDRCARCP.js';import {b as b$2}from'./chunk-EYGOJ2ZN.js';import'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';import {Monitor,Moon,Sun}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function _({projectId:D}){let{theme:a$1,setTheme:t}=b(),[C,n$1]=b$1();return C?jsx(r,{className:"fk:h-8 fk:w-8 fk:rounded-full"}):jsxs(c,{children:[jsx(e,{asChild:true,children:jsx(b$2,{className:"fk:relative fk:h-8 fk:w-8 fk:rounded-full",variant:"ghost",children:jsxs(a,{className:"fk:h-8 fk:w-8",children:[jsx(b$3,{alt:"@shadcn",src:n$1.user?.avatar_url}),jsx(c$1,{children:n$1.user?.display_name.charAt(0).toUpperCase()??""})]})})}),jsxs(f,{align:"end",className:"fk:w-56",forceMount:true,children:[jsx(l,{className:"font-normal",children:jsxs("div",{className:"fk:flex fk:flex-col fk:space-y-1",children:[jsx("p",{className:"fk:text-sm fk:font-medium fk:leading-none",children:n$1.user?.display_name}),jsx("p",{className:"fk:text-xs fk:leading-none fk:text-muted-foreground",children:n$1.user?.email})]})}),jsx(m,{}),jsx(l,{children:"Theme"}),jsxs(i,{checked:a$1==="system",onCheckedChange:()=>{t("system");},children:[jsx(Monitor,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"System"})]}),jsxs(i,{checked:a$1==="dark",onCheckedChange:()=>{t("dark");},children:[jsx(Moon,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Dark"})]}),jsxs(i,{checked:a$1==="light",onCheckedChange:()=>{t("light");},children:[jsx(Sun,{className:"fk:mr-2 fk:h-4 fk:w-4"}),jsx("span",{children:"Light"})]}),jsx(m,{}),jsxs(h,{onClick:()=>{n$1.logout(D).then(()=>{}).catch(()=>{});},children:["Log out",jsx(n,{children:"\u21E7\u2318Q"})]})]})]})}export{_ as UserNav};//# sourceMappingURL=user-nav-O5G4M2VA.js.map
2
+ //# sourceMappingURL=user-nav-O5G4M2VA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/components/user-nav.tsx"],"names":["UserNav","projectId","theme","setTheme","useTheme","isLoading","auth","useAuth","jsx","Skeleton","jsxs","DropdownMenu","DropdownMenuTrigger","Button","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Monitor","Moon","Sun","DropdownMenuItem","DropdownMenuShortcut"],"mappings":"2ZAsBO,SAASA,CAAAA,CAAQ,CAAE,SAAA,CAAAC,CAAU,CAAA,CAAuB,CACzD,GAAM,CAAE,KAAA,CAAAC,GAAAA,CAAO,QAAA,CAAAC,CAAS,CAAA,CAAIC,CAAAA,EAAS,CAC/B,CAACC,CAAAA,CAAWC,GAAI,CAAA,CAAIC,GAAAA,EAAQ,CAElC,OAAIF,CAAAA,CACKG,GAAAA,CAACC,CAAAA,CAAA,CAAS,SAAA,CAAU,+BAAA,CAAgC,CAAA,CAI3DC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAH,GAAAA,CAACI,CAAAA,CAAA,CAAoB,OAAA,CAAO,IAAA,CAC1B,QAAA,CAAAJ,GAAAA,CAACK,GAAAA,CAAA,CAAO,SAAA,CAAU,2CAAA,CAA4C,OAAA,CAAQ,OAAA,CACpE,QAAA,CAAAH,IAAAA,CAACI,CAAAA,CAAA,CAAO,SAAA,CAAU,eAAA,CAChB,QAAA,CAAA,CAAAN,GAAAA,CAACO,GAAAA,CAAA,CAAY,GAAA,CAAI,SAAA,CAAU,GAAA,CAAKT,GAAAA,CAAK,IAAA,EAAM,UAAA,CAAY,CAAA,CACvDE,GAAAA,CAACQ,GAAAA,CAAA,CAAgB,QAAA,CAAAV,GAAAA,CAAK,IAAA,EAAM,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAY,EAAK,EAAA,CAAG,CAAA,CAAA,CACzE,CAAA,CACF,CAAA,CACF,CAAA,CACAI,IAAAA,CAACO,CAAAA,CAAA,CAAoB,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,SAAA,CAAU,UAAA,CAAU,IAAA,CAC7D,QAAA,CAAA,CAAAT,GAAAA,CAACU,CAAAA,CAAA,CAAkB,SAAA,CAAU,aAAA,CAC3B,QAAA,CAAAR,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,kCAAA,CACb,QAAA,CAAA,CAAAF,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,2CAAA,CAA6C,QAAA,CAAAF,GAAAA,CAAK,IAAA,EAAM,YAAA,CAAa,CAAA,CAClFE,GAAAA,CAAC,GAAA,CAAA,CAAE,SAAA,CAAU,qDAAA,CAAuD,QAAA,CAAAF,GAAAA,CAAK,IAAA,EAAM,KAAA,CAAM,CAAA,CAAA,CACvF,CAAA,CACF,CAAA,CACAE,GAAAA,CAACW,CAAAA,CAAA,EAAsB,CAAA,CACvBX,GAAAA,CAACU,CAAAA,CAAA,CAAkB,QAAA,CAAA,OAAA,CAAK,CAAA,CACxBR,IAAAA,CAACU,CAAAA,CAAA,CACC,OAAA,CAASlB,GAAAA,GAAU,QAAA,CACnB,eAAA,CAAiB,IAAM,CACrBC,CAAAA,CAAS,QAAQ,EACnB,CAAA,CAEA,QAAA,CAAA,CAAAK,GAAAA,CAACa,OAAAA,CAAA,CAAQ,SAAA,CAAU,uBAAA,CAAwB,CAAA,CAC3Cb,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CACd,CAAA,CACAE,IAAAA,CAACU,CAAAA,CAAA,CACC,OAAA,CAASlB,GAAAA,GAAU,MAAA,CACnB,eAAA,CAAiB,IAAM,CACrBC,CAAAA,CAAS,MAAM,EACjB,CAAA,CAEA,QAAA,CAAA,CAAAK,GAAAA,CAACc,IAAAA,CAAA,CAAK,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACxCd,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,MAAA,CAAI,CAAA,CAAA,CACZ,CAAA,CACAE,IAAAA,CAACU,CAAAA,CAAA,CACC,OAAA,CAASlB,GAAAA,GAAU,OAAA,CACnB,eAAA,CAAiB,IAAM,CACrBC,CAAAA,CAAS,OAAO,EAClB,CAAA,CAEA,QAAA,CAAA,CAAAK,GAAAA,CAACe,GAAAA,CAAA,CAAI,SAAA,CAAU,uBAAA,CAAwB,CAAA,CACvCf,GAAAA,CAAC,MAAA,CAAA,CAAK,QAAA,CAAA,OAAA,CAAK,CAAA,CAAA,CACb,CAAA,CACAA,GAAAA,CAACW,CAAAA,CAAA,EAAsB,CAAA,CACvBT,IAAAA,CAACc,CAAAA,CAAA,CACC,OAAA,CAAS,IAAM,CACblB,GAAAA,CACG,MAAA,CAAOL,CAAS,CAAA,CAChB,IAAA,CAAK,IAAM,CAEZ,CAAC,CAAA,CACA,KAAA,CAAM,IAAM,CAEb,CAAC,EACL,CAAA,CACD,QAAA,CAAA,CAAA,SAAA,CAECO,GAAAA,CAACiB,CAAAA,CAAA,CAAqB,QAAA,CAAA,eAAA,CAAG,CAAA,CAAA,CAC3B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAEJ","file":"user-nav-E7MLJ36Y.js","sourcesContent":["import type { JSX } from 'react';\nimport { useTheme } from '../theme-context';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage } from '../primitives/avatar';\nimport { Button } from '../primitives/button';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '../primitives/dropdown-menu';\nimport { useAuth } from '../../auth/auth-context';\n\ntype Props = {\n projectId: string;\n};\n\nexport function UserNav({ projectId }: Props): JSX.Element {\n const { theme, setTheme } = useTheme();\n const [isLoading, auth] = useAuth();\n\n if (isLoading) {\n return <Skeleton className=\"fk:h-8 fk:w-8 fk:rounded-full\" />;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:relative fk:h-8 fk:w-8 fk:rounded-full\" variant=\"ghost\">\n <Avatar className=\"fk:h-8 fk:w-8\">\n <AvatarImage alt=\"@shadcn\" src={auth.user?.avatar_url} />\n <AvatarFallback>{auth.user?.display_name.charAt(0).toUpperCase() ?? ''}</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-56\" forceMount>\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"fk:flex fk:flex-col fk:space-y-1\">\n <p className=\"fk:text-sm fk:font-medium fk:leading-none\">{auth.user?.display_name}</p>\n <p className=\"fk:text-xs fk:leading-none fk:text-muted-foreground\">{auth.user?.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Theme</DropdownMenuLabel>\n <DropdownMenuCheckboxItem\n checked={theme === 'system'}\n onCheckedChange={() => {\n setTheme('system');\n }}\n >\n <Monitor className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>System</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'dark'}\n onCheckedChange={() => {\n setTheme('dark');\n }}\n >\n <Moon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Dark</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'light'}\n onCheckedChange={() => {\n setTheme('light');\n }}\n >\n <Sun className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Light</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => {\n auth\n .logout(projectId)\n .then(() => {\n //\n })\n .catch(() => {\n //\n });\n }}\n >\n Log out\n <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/ui/components/user-nav.tsx"],"names":["UserNav","projectId","theme","setTheme","useTheme","isLoading","auth","useAuth","jsx","Skeleton","jsxs","DropdownMenu","DropdownMenuTrigger","Button","Avatar","AvatarImage","AvatarFallback","DropdownMenuContent","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuCheckboxItem","Monitor","Moon","Sun","DropdownMenuItem","DropdownMenuShortcut"],"mappings":"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","file":"user-nav-O5G4M2VA.js","sourcesContent":["import type { JSX } from 'react';\nimport { useTheme } from '../theme-context';\nimport { Monitor, Moon, Sun } from 'lucide-react';\nimport { Avatar, AvatarFallback, AvatarImage } from '../primitives/avatar';\nimport { Button } from '../primitives/button';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuTrigger,\n} from '../primitives/dropdown-menu';\nimport { useAuth } from '../../auth/auth-context';\n\ntype Props = {\n projectId: string;\n};\n\nexport function UserNav({ projectId }: Props): JSX.Element {\n const { theme, setTheme } = useTheme();\n const [isLoading, auth] = useAuth();\n\n if (isLoading) {\n return <Skeleton className=\"fk:h-8 fk:w-8 fk:rounded-full\" />;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button className=\"fk:relative fk:h-8 fk:w-8 fk:rounded-full\" variant=\"ghost\">\n <Avatar className=\"fk:h-8 fk:w-8\">\n <AvatarImage alt=\"@shadcn\" src={auth.user?.avatar_url} />\n <AvatarFallback>{auth.user?.display_name.charAt(0).toUpperCase() ?? ''}</AvatarFallback>\n </Avatar>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"fk:w-56\" forceMount>\n <DropdownMenuLabel className=\"font-normal\">\n <div className=\"fk:flex fk:flex-col fk:space-y-1\">\n <p className=\"fk:text-sm fk:font-medium fk:leading-none\">{auth.user?.display_name}</p>\n <p className=\"fk:text-xs fk:leading-none fk:text-muted-foreground\">{auth.user?.email}</p>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n <DropdownMenuLabel>Theme</DropdownMenuLabel>\n <DropdownMenuCheckboxItem\n checked={theme === 'system'}\n onCheckedChange={() => {\n setTheme('system');\n }}\n >\n <Monitor className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>System</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'dark'}\n onCheckedChange={() => {\n setTheme('dark');\n }}\n >\n <Moon className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Dark</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuCheckboxItem\n checked={theme === 'light'}\n onCheckedChange={() => {\n setTheme('light');\n }}\n >\n <Sun className=\"fk:mr-2 fk:h-4 fk:w-4\" />\n <span>Light</span>\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator />\n <DropdownMenuItem\n onClick={() => {\n auth\n .logout(projectId)\n .then(() => {\n //\n })\n .catch(() => {\n //\n });\n }}\n >\n Log out\n <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flexkit/studio",
3
- "version": "0.0.25",
3
+ "version": "0.0.27",
4
4
  "description": "Flexkit Studio - Build custom internal tools like PIMs, CRMs, and ERPs with a flexible React UI and a graph-backed API",
5
5
  "keywords": [
6
6
  "flexkit",
@@ -1,2 +0,0 @@
1
- import'./index.css';export{a as Asset}from'./chunk-V2UTZEJQ.js';import'./chunk-5CKMFBWH.js';import'./chunk-ZBV4BY36.js';import'./chunk-WIUPQHZ5.js';import'./chunk-O2QMYUPS.js';//# sourceMappingURL=asset-HOJ43RVO.js.map
2
- //# sourceMappingURL=asset-HOJ43RVO.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/primitives/label.tsx","../src/ui/primitives/form.tsx"],"names":["Label","className","props","jsx","LabelPrimitive","cn","Form","FormProvider","FormFieldContext","FormField","Controller","useFormField","fieldContext","itemContext","FormItemContext","getFieldState","useFormContext","formState","useFormState","fieldState","id","FormItem","FormLabel","error","formItemId","FormControl","formDescriptionId","formMessageId","Slot","FormDescription","FormMessage","body"],"mappings":"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","file":"chunk-53TUQIKJ.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Label as LabelPrimitive } from 'radix-ui';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'fk:flex fk:items-center fk:gap-2 fk:text-sm fk:leading-none fk:font-medium fk:select-none fk:group-data-[disabled=true]:pointer-events-none fk:group-data-[disabled=true]:opacity-50 fk:peer-disabled:cursor-not-allowed fk:peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import * as React from 'react';\nimport { Label as LabelPrimitive, Slot } from 'radix-ui';\nimport {\n Controller,\n FormProvider,\n useFormContext,\n useFormState,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n} from 'react-hook-form';\nimport { cn } from 'src/ui/lib/utils';\nimport { Label } from 'src/ui/primitives/label';\n\nconst Form = FormProvider;\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>({} as FormFieldContextValue);\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n );\n};\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext);\n const itemContext = React.useContext(FormItemContext);\n const { getFieldState } = useFormContext();\n const formState = useFormState({ name: fieldContext.name });\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nconst FormItemContext = React.createContext<FormItemContextValue>({} as FormItemContextValue);\n\nfunction FormItem({ className, ...props }: React.ComponentProps<'div'>) {\n const id = React.useId();\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div data-slot=\"form-item\" className={cn('fk:grid fk:gap-2', className)} {...props} />\n </FormItemContext.Provider>\n );\n}\n\nfunction FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n const { error, formItemId } = useFormField();\n\n return (\n <Label\n data-slot=\"form-label\"\n data-error={!!error}\n className={cn('fk:data-[error=true]:text-destructive', className)}\n htmlFor={formItemId}\n {...props}\n />\n );\n}\n\nfunction FormControl({ ...props }: React.ComponentProps<typeof Slot.Root>) {\n const { error, formItemId, formDescriptionId, formMessageId } = useFormField();\n\n return (\n <Slot.Root\n data-slot=\"form-control\"\n id={formItemId}\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n {...props}\n />\n );\n}\n\nfunction FormDescription({ className, ...props }: React.ComponentProps<'p'>) {\n const { formDescriptionId } = useFormField();\n\n return (\n <p\n data-slot=\"form-description\"\n id={formDescriptionId}\n className={cn('fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction FormMessage({ className, ...props }: React.ComponentProps<'p'>) {\n const { error, formMessageId } = useFormField();\n const body = error ? String(error?.message ?? '') : props.children;\n\n if (!body) {\n return null;\n }\n\n return (\n <p\n data-slot=\"form-message\"\n id={formMessageId}\n className={cn('fk:text-sm fk:text-destructive', className)}\n {...props}\n >\n {body}\n </p>\n );\n}\n\nexport { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/primitives/tooltip.tsx"],"names":["TooltipProvider","delayDuration","props","jsx","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipPortal","TooltipContent","className","sideOffset","children","jsxs","cn"],"mappings":"gIAMA,SAASA,CAAAA,CAAgB,CAAE,aAAA,CAAAC,CAAAA,CAAgB,CAAA,CAAG,GAAGC,CAAM,CAAA,CAA2D,CAChH,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,QAAA,CAAjB,CAA0B,WAAA,CAAU,kBAAA,CAAmB,aAAA,CAAeH,CAAAA,CAAgB,GAAGC,EAAO,CAC1G,CAEA,SAASG,CAAAA,CAAQ,CAAE,GAAGH,CAAM,CAAA,CAAuD,CACjF,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,IAAA,CAAjB,CAAsB,WAAA,CAAU,SAAA,CAAW,GAAGF,CAAAA,CAAO,CAC/D,CAEA,SAASI,CAAAA,CAAe,CAAE,GAAGJ,CAAM,CAAA,CAA0D,CAC3F,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,OAAA,CAAjB,CAAyB,YAAU,iBAAA,CAAmB,GAAGF,CAAAA,CAAO,CAC1E,CAEA,SAASK,CAAAA,CAAc,CAAE,GAAGL,CAAM,CAAA,CAAyD,CACzF,OAAOC,GAAAA,CAACC,OAAAA,CAAiB,MAAA,CAAjB,CAAyB,GAAGF,CAAAA,CAAO,CAC7C,CAEA,SAASM,CAAAA,CAAe,CACtB,SAAA,CAAAC,CAAAA,CACA,UAAA,CAAAC,CAAAA,CAAa,CAAA,CACb,QAAA,CAAAC,CAAAA,CACA,GAAGT,GACL,CAAA,CAA0D,CACxD,OACEC,GAAAA,CAACC,OAAAA,CAAiB,MAAA,CAAjB,CACC,QAAA,CAAAQ,IAAAA,CAACR,OAAAA,CAAiB,OAAA,CAAjB,CACC,WAAA,CAAU,iBAAA,CACV,UAAA,CAAYM,CAAAA,CACZ,SAAA,CAAWG,CAAAA,CACT,+dAAA,CACAJ,CACF,CAAA,CACC,GAAGP,GAAAA,CAEH,QAAA,CAAA,CAAAS,CAAAA,CACDR,GAAAA,CAACC,OAAAA,CAAiB,KAAA,CAAjB,CAAuB,SAAA,CAAU,uHAAA,CAAwH,CAAA,CAAA,CAC5J,EACF,CAEJ","file":"chunk-5CKMFBWH.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction TooltipProvider({ delayDuration = 0, ...props }: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return <TooltipPrimitive.Provider data-slot=\"tooltip-provider\" delayDuration={delayDuration} {...props} />;\n}\n\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />;\n}\n\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\nfunction TooltipPortal({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Portal>) {\n return <TooltipPrimitive.Portal {...props} />;\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:w-fit fk:origin-(--radix-tooltip-content-transform-origin) fk:animate-in fk:rounded-md fk:bg-foreground fk:px-3 fk:py-1.5 fk:text-xs fk:text-balance fk:text-background fk:fade-in-0 fk:zoom-in-95 fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95',\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"fk:z-50 fk:size-2.5 fk:translate-y-[calc(-50%-2px)] fk:rotate-45 fk:rounded-[2px] fk:bg-foreground fk:fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TooltipPortal };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/primitives/switch.tsx"],"names":["Switch","className","size","props","jsx","SwitchPrimitive","cn"],"mappings":"0HAMA,SAASA,EAAO,CACd,SAAA,CAAAC,EACA,IAAA,CAAAC,CAAAA,CAAO,UACP,GAAGC,CACL,EAEG,CACD,OACEC,GAAAA,CAACC,MAAAA,CAAgB,IAAA,CAAhB,CACC,YAAU,QAAA,CACV,WAAA,CAAWH,EACX,SAAA,CAAWI,CAAAA,CACT,sgBACAL,CACF,CAAA,CACC,GAAGE,CAAAA,CAEJ,QAAA,CAAAC,IAACC,MAAAA,CAAgB,KAAA,CAAhB,CACC,WAAA,CAAU,cAAA,CACV,UAAWC,CAAAA,CACT,iWACF,CAAA,CACF,CAAA,CACF,CAEJ","file":"chunk-6MOUYNN4.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Switch as SwitchPrimitive } from 'radix-ui';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'fk:peer fk:group/switch fk:inline-flex fk:shrink-0 fk:items-center fk:rounded-full fk:border fk:border-transparent fk:shadow-xs fk:transition-all fk:outline-none fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:data-[size=default]:h-5 fk:data-[size=default]:w-8 fk:data-[size=sm]:h-3.5 fk:data-[size=sm]:w-6 fk:data-[state=checked]:bg-success fk:data-[state=unchecked]:bg-input fk:dark:data-[state=unchecked]:bg-input/80',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'fk:pointer-events-none fk:block fk:rounded-full fk:bg-white fk:ring-0 fk:transition-transform fk:group-data-[size=default]/switch:size-3.75 fk:group-data-[size=sm]/switch:size-3 fk:data-[state=checked]:translate-x-[calc(100%-2px)] fk:data-[state=unchecked]:translate-x-0.25 fk:dark:data-[state=checked]:bg-white fk:dark:data-[state=unchecked]:bg-white'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n"]}
@@ -1,2 +0,0 @@
1
- import'./index.css';import {createContext,useMemo,useContext}from'react';import {path,has}from'ramda';import {useParams}from'react-router-dom';import {jsx}from'react/jsx-runtime';var g={name:"_asset",plural:"_assets",menu:{hidden:true},attributes:[{name:"path",label:"Asset",scope:"global",options:{size:140},isEditable:true,dataType:"string",inputType:"text",previewType:"assetPreviewField",defaultValue:""},{name:"originalFilename",label:"Filename",scope:"global",options:{size:280},isEditable:true,dataType:"string",inputType:"text",previewType:"text",isPrimary:true,defaultValue:""},{name:"size",label:"Size",scope:"global",options:{size:120},isEditable:true,dataType:"int",inputType:"text",previewType:"text",defaultValue:""},{name:"width",label:"Width",scope:"global",options:{size:80},isEditable:true,dataType:"int",inputType:"text",previewType:"text",defaultValue:""},{name:"height",label:"Height",scope:"global",options:{size:80},isEditable:true,dataType:"int",inputType:"text",previewType:"text",defaultValue:""},{name:"mimeType",label:"Mime Type",scope:"global",options:{size:160},isEditable:true,dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"lqip",label:"lqip",scope:"global",isHidden:true,isEditable:true,dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"_updatedAt",label:"Last Updated",scope:"global",options:{size:140},isEditable:true,dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"tags",label:"Tags",scope:"relationship",dataType:"string",inputType:"relationship",defaultValue:"",previewType:"tags",options:{size:300},relationship:{mode:"multiple",field:"name",entity:"_tag"}}]};var d={name:"_tag",plural:"_tags",menu:{hidden:true},attributes:[{name:"name",label:"Tag Name",scope:"global",options:{size:220},isEditable:true,dataType:"string",inputType:"text",previewType:"text",isPrimary:true,defaultValue:""},{name:"_updatedAt",label:"Last Updated",scope:"global",options:{size:140},isEditable:true,dataType:"string",inputType:"text",previewType:"text",defaultValue:""},{name:"assets",label:"Assets",scope:"relationship",dataType:"string",inputType:"relationship",defaultValue:"",relationship:{mode:"multiple",field:"originalFilename",entity:"_asset"}}]};var T=createContext({contributions:{apps:[]},currentProjectId:void 0,currentProjectSchema:[],getContributionPointConfig:()=>[],plugins:[],projects:[]}),l=i=>Object.prototype.hasOwnProperty.call(i,"projectId"),y=i=>Object.prototype.hasOwnProperty.call(i,"contributes");function F({config:i,children:o}){let{projectId:n}=useParams(),t=useMemo(()=>{let e=s=>[...s.filter(f=>f.name!==g.name&&f.name!==d.name),g,d];return i.map(s=>({...s,schema:e(s.schema)}))},[i]),p=useMemo(()=>r(["plugins"],t),[t]),O=useMemo(()=>r(["plugins"],t.filter(e=>e.projectId===n)),[t,n]),m=p.filter(e=>!l(e)&&y(e)),u=O.filter(e=>!l(e)&&y(e)),c=useMemo(()=>({contributions:{apps:b("apps",[],u)},currentProjectId:n,currentProjectSchema:t.find(e=>e.projectId===n)?.schema??[],getContributionPointConfig:(e,s=[])=>b(e,s,u),plugins:m,projects:p.filter(e=>l(e))}),[m,n,u,p]);return jsx(T.Provider,{value:{...c,contributions:{...c.contributions,apps:c.contributions.apps}},children:o})}function R(){return useContext(T)}function r(i,o){return Array.isArray(o)?o.reduce((n,t)=>path(i,t)?[...n,t,...r(i,path(i,t)??[])]:[...n,t],[]):[o]}function b(i,o=[],n){let t=["contributes",i,...o];return r(t.flat(),n).filter(p=>has("component",p))}function N(i){let n=r(["plugins"],i).filter(t=>!l(t)&&y(t));return b("apps",[],n)}export{g as a,d as b,F as c,R as d,N as e};//# sourceMappingURL=chunk-6YHHL4XI.js.map
2
- //# sourceMappingURL=chunk-6YHHL4XI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/entities/assets-schema.ts","../src/entities/tags-schema.ts","../src/core/config/config-context.tsx"],"names":["assetSchema","tagSchema","ConfigContext","createContext","hasProjectIdProperty","configItem","hasContributesProperty","ConfigProvider","config","children","currentProjectId","useParams","enhancedConfig","useMemo","upsertReservedEntities","schema","entity","project","globalFlattenedConfig","flattenConfigByProperty","currentProjectFlattenedConfig","item","allPlugins","currentProjectPlugins","globalConfig","_getContributionPointConfig","contributionPoint","subPath","jsx","useConfig","useContext","property","acc","curr","path","pathArray","has","getApps","plugins"],"mappings":"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","file":"chunk-6YHHL4XI.js","sourcesContent":["import type { Entity } from '../core/types';\n\nexport const assetSchema: Entity = {\n name: '_asset',\n plural: '_assets',\n menu: {\n hidden: true,\n },\n attributes: [\n {\n name: 'path',\n label: 'Asset',\n scope: 'global',\n options: {\n size: 140,\n },\n isEditable: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'assetPreviewField',\n defaultValue: '',\n },\n {\n name: 'originalFilename',\n label: 'Filename',\n scope: 'global',\n options: {\n size: 280,\n },\n isEditable: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n isPrimary: true,\n defaultValue: '',\n },\n {\n name: 'size',\n label: 'Size',\n scope: 'global',\n options: {\n size: 120,\n },\n isEditable: true,\n dataType: 'int',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'width',\n label: 'Width',\n scope: 'global',\n options: {\n size: 80,\n },\n isEditable: true,\n dataType: 'int',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'height',\n label: 'Height',\n scope: 'global',\n options: {\n size: 80,\n },\n isEditable: true,\n dataType: 'int',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'mimeType',\n label: 'Mime Type',\n scope: 'global',\n options: {\n size: 160,\n },\n isEditable: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'lqip',\n label: 'lqip',\n scope: 'global',\n isHidden: true,\n isEditable: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: '_updatedAt',\n label: 'Last Updated',\n scope: 'global',\n options: {\n size: 140,\n },\n isEditable: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'tags',\n label: 'Tags',\n scope: 'relationship',\n dataType: 'string',\n inputType: 'relationship',\n defaultValue: '',\n previewType: 'tags',\n options: {\n size: 300,\n },\n relationship: {\n mode: 'multiple',\n field: 'name',\n entity: '_tag',\n },\n },\n ],\n};\n","import type { Entity } from '../core/types';\n\nexport const tagSchema: Entity = {\n name: '_tag',\n plural: '_tags',\n menu: {\n hidden: true,\n },\n attributes: [\n {\n name: 'name',\n label: 'Tag Name',\n scope: 'global',\n options: {\n size: 220,\n },\n isEditable: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n isPrimary: true,\n defaultValue: '',\n },\n {\n name: '_updatedAt',\n label: 'Last Updated',\n scope: 'global',\n options: {\n size: 140,\n },\n isEditable: true,\n dataType: 'string',\n inputType: 'text',\n previewType: 'text',\n defaultValue: '',\n },\n {\n name: 'assets',\n label: 'Assets',\n scope: 'relationship',\n dataType: 'string',\n inputType: 'relationship',\n defaultValue: '',\n relationship: {\n mode: 'multiple',\n field: 'originalFilename',\n entity: '_asset',\n },\n },\n ],\n};\n","'use client';\n\nimport { createContext, useContext, useMemo } from 'react';\nimport type { JSX } from 'react';\nimport { has, path } from 'ramda';\nimport { useParams } from 'react-router-dom';\nimport { assetSchema } from '../../entities/assets-schema';\nimport { tagSchema } from '../../entities/tags-schema';\nimport type { AppOptions, PluginOptions, ProjectOptions } from './types';\nimport type { Entity } from '../types';\n\ntype Contributes = NonNullable<PluginOptions['contributes']>;\nexport interface ConfigContext {\n contributions: {\n apps: AppOptions[] | [];\n };\n currentProjectId?: string;\n currentProjectSchema: Entity[];\n getContributionPointConfig: <T extends keyof Contributes>(\n contributionPoint: T,\n subPath?: string[]\n ) => Contributes[T][] | [];\n plugins: PluginOptions[];\n projects: ProjectOptions[];\n}\n\nconst ConfigContext = createContext<ConfigContext>({\n contributions: {\n apps: [],\n },\n currentProjectId: undefined,\n currentProjectSchema: [],\n getContributionPointConfig: () => [],\n plugins: [] as PluginOptions[],\n projects: [] as ProjectOptions[],\n});\nconst hasProjectIdProperty = (configItem: ProjectOptions | PluginOptions): boolean =>\n Object.prototype.hasOwnProperty.call(configItem, 'projectId');\nconst hasContributesProperty = (configItem: ProjectOptions | PluginOptions): boolean =>\n Object.prototype.hasOwnProperty.call(configItem, 'contributes');\n\nexport function ConfigProvider({\n config,\n children,\n}: {\n config: ProjectOptions[];\n children: React.ReactNode;\n}): JSX.Element {\n /**\n * Getting the projectId from the URL via react-router-dom's useParams hook triggers a rerender of this Context\n * every time the URL changes.\n */\n const { projectId: currentProjectId } = useParams<{ projectId: string }>();\n const enhancedConfig = useMemo(() => {\n const upsertReservedEntities = (schema: Entity[]): Entity[] => {\n const withoutReserved = schema.filter(\n (entity) => entity.name !== assetSchema.name && entity.name !== tagSchema.name\n );\n\n return [...withoutReserved, assetSchema, tagSchema];\n };\n\n return config.map((project) => ({\n ...project,\n schema: upsertReservedEntities(project.schema),\n }));\n }, [config]);\n\n const globalFlattenedConfig = useMemo(() => flattenConfigByProperty(['plugins'], enhancedConfig), [enhancedConfig]);\n const currentProjectFlattenedConfig = useMemo(\n () =>\n flattenConfigByProperty(\n ['plugins'],\n enhancedConfig.filter((item) => item.projectId === currentProjectId)\n ),\n [enhancedConfig, currentProjectId]\n );\n const allPlugins = globalFlattenedConfig.filter(\n (item: ProjectOptions | PluginOptions) => !hasProjectIdProperty(item) && hasContributesProperty(item)\n ) as PluginOptions[];\n const currentProjectPlugins = currentProjectFlattenedConfig.filter(\n (item: ProjectOptions | PluginOptions) => !hasProjectIdProperty(item) && hasContributesProperty(item)\n ) as PluginOptions[];\n\n const globalConfig = useMemo(\n () => ({\n contributions: {\n apps: _getContributionPointConfig('apps', [], currentProjectPlugins),\n },\n currentProjectId,\n currentProjectSchema: enhancedConfig.find((item) => item.projectId === currentProjectId)?.schema ?? [],\n getContributionPointConfig: <T extends keyof Contributes>(\n contributionPoint: T,\n subPath: string[] = []\n ): Contributes[T][] =>\n _getContributionPointConfig(contributionPoint, subPath, currentProjectPlugins) as Contributes[T][],\n plugins: allPlugins,\n projects: globalFlattenedConfig.filter((item: ProjectOptions | PluginOptions) =>\n hasProjectIdProperty(item)\n ) as ProjectOptions[],\n }),\n [allPlugins, currentProjectId, currentProjectPlugins, globalFlattenedConfig]\n );\n\n return (\n <ConfigContext.Provider\n value={{\n ...globalConfig,\n contributions: {\n ...globalConfig.contributions,\n apps: globalConfig.contributions.apps as AppOptions[] | [],\n },\n }}\n >\n {children}\n </ConfigContext.Provider>\n );\n}\n\nexport function useConfig(): ConfigContext {\n return useContext(ConfigContext);\n}\n\nfunction flattenConfigByProperty(\n property: string[],\n config: (ProjectOptions | PluginOptions)[]\n): (ProjectOptions | PluginOptions)[] | [] {\n if (!Array.isArray(config)) {\n return [config];\n }\n\n return config.reduce<(ProjectOptions | PluginOptions)[]>((acc, curr) => {\n if (path(property, curr)) {\n return [...acc, curr, ...flattenConfigByProperty(property, path(property, curr) ?? [])];\n }\n\n return [...acc, curr];\n }, []);\n}\n\nfunction _getContributionPointConfig<T extends keyof Contributes>(\n contributionPoint: T,\n subPath: string[] = [],\n config: PluginOptions[]\n): Contributes[T] {\n const pathArray = ['contributes', contributionPoint, ...subPath];\n\n return flattenConfigByProperty(pathArray.flat(), config).filter((item) => has('component', item)) as Contributes[T];\n}\n\nexport function getApps(config: ProjectOptions[]): AppOptions[] | [] {\n const flattenedConfig = flattenConfigByProperty(['plugins'], config);\n const plugins = flattenedConfig.filter(\n (item: ProjectOptions | PluginOptions) => !hasProjectIdProperty(item) && hasContributesProperty(item)\n ) as PluginOptions[];\n return _getContributionPointConfig('apps', [], plugins) as AppOptions[] | [];\n}\n"]}
@@ -1,2 +0,0 @@
1
- import'./index.css';import {a}from'./chunk-O2QMYUPS.js';import {Select}from'radix-ui';import {ChevronDownIcon,CheckIcon,ChevronUpIcon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function g({...e}){return jsx(Select.Root,{"data-slot":"select",...e})}function S({...e}){return jsx(Select.Group,{"data-slot":"select-group",...e})}function x({...e}){return jsx(Select.Value,{"data-slot":"select-value",...e})}function P({className:e,size:a$1="default",children:r,...s}){return jsxs(Select.Trigger,{"data-slot":"select-trigger","data-size":a$1,className:a("fk:flex fk:w-fit fk:items-center fk:justify-between fk:gap-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-2 fk:text-sm fk:whitespace-nowrap fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-placeholder:text-muted-foreground fk:data-[size=default]:h-9 fk:data-[size=sm]:h-8 fk:*:data-[slot=select-value]:line-clamp-1 fk:*:data-[slot=select-value]:flex fk:*:data-[slot=select-value]:items-center fk:*:data-[slot=select-value]:gap-2 fk:hover:bg-accent fk:dark:aria-invalid:ring-destructive/40 fk:*[_svg]:pointer-events-none fk:*[_svg]:shrink-0 fk:*[_svg:not([class*='size-'])]:size-4 fk:*[_svg:not([class*='text-'])]:text-muted-foreground",e),...s,children:[r,jsx(Select.Icon,{asChild:true,children:jsx(ChevronDownIcon,{className:"fk:size-4 fk:opacity-50"})})]})}function b({className:e,children:a$1,position:r="item-aligned",align:s="center",...f}){return jsx(Select.Portal,{children:jsxs(Select.Content,{"data-slot":"select-content",className:a("fk:relative fk:z-50 fk:max-h-(--radix-select-content-available-height) fk:min-w-[8rem] fk:origin-(--radix-select-content-transform-origin) fk:overflow-x-hidden fk:overflow-y-auto fk:rounded-md fk:border fk:bg-popover fk:text-popover-foreground fk:shadow-md fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95",r==="popper"&&"fk:data-[side=bottom]:translate-y-1 fk:data-[side=left]:-translate-x-1 fk:data-[side=right]:translate-x-1 fk:data-[side=top]:-translate-y-1",e),position:r,align:s,...f,children:[jsx(d,{}),jsx(Select.Viewport,{className:a("fk:p-1",r==="popper"&&"fk:h-(--radix-select-trigger-height) fk:w-full fk:min-w-(--radix-select-trigger-width) fk:scroll-my-1"),children:a$1}),jsx(m,{})]})})}function h({className:e,...a$1}){return jsx(Select.Label,{"data-slot":"select-label",className:a("fk:px-2 fk:py-1.5 fk:text-xs fk:text-muted-foreground",e),...a$1})}function y({className:e,children:a$1,...r}){return jsxs(Select.Item,{"data-slot":"select-item",className:a("fk:relative fk:flex fk:w-full fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-8 fk:pl-2 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-[disabled]:pointer-events-none fk:data-[disabled]:opacity-50 fk:*[_svg]:pointer-events-none fk:*[_svg]:shrink-0 fk:*[_svg:not([class*='size-'])]:size-4 fk:*[_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[jsx("span",{"data-slot":"select-item-indicator",className:"fk:absolute fk:right-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center",children:jsx(Select.ItemIndicator,{children:jsx(CheckIcon,{className:"fk:size-4"})})}),jsx(Select.ItemText,{children:a$1})]})}function w({className:e,...a$1}){return jsx(Select.Separator,{"data-slot":"select-separator",className:a("fk:pointer-events-none fk:-mx-1 fk:my-1 fk:h-px fk:bg-border",e),...a$1})}function d({className:e,...a$1}){return jsx(Select.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:a("fk:flex fk:cursor-default fk:items-center fk:justify-center fk:py-1",e),...a$1,children:jsx(ChevronUpIcon,{className:"size-4"})})}function m({className:e,...a$1}){return jsx(Select.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:a("fk:flex fk:cursor-default fk:items-center fk:justify-center fk:py-1",e),...a$1,children:jsx(ChevronDownIcon,{className:"size-4"})})}export{g as a,S as b,x as c,P as d,b as e,h as f,y as g,w as h,d as i,m as j};//# sourceMappingURL=chunk-7WR64NTK.js.map
2
- //# sourceMappingURL=chunk-7WR64NTK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/primitives/select.tsx"],"names":["Select","props","jsx","SelectPrimitive","SelectGroup","SelectValue","SelectTrigger","className","size","children","jsxs","cn","ChevronDownIcon","SelectContent","position","align","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","CheckIcon","SelectSeparator","ChevronUpIcon"],"mappings":"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","file":"chunk-7WR64NTK.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as SelectPrimitive } from 'radix-ui';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"fk:flex fk:w-fit fk:items-center fk:justify-between fk:gap-2 fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-2 fk:text-sm fk:whitespace-nowrap fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-placeholder:text-muted-foreground fk:data-[size=default]:h-9 fk:data-[size=sm]:h-8 fk:*:data-[slot=select-value]:line-clamp-1 fk:*:data-[slot=select-value]:flex fk:*:data-[slot=select-value]:items-center fk:*:data-[slot=select-value]:gap-2 fk:hover:bg-accent fk:dark:aria-invalid:ring-destructive/40 fk:*[_svg]:pointer-events-none fk:*[_svg]:shrink-0 fk:*[_svg:not([class*='size-'])]:size-4 fk:*[_svg:not([class*='text-'])]:text-muted-foreground\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"fk:size-4 fk:opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'item-aligned',\n align = 'center',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'fk:relative fk:z-50 fk:max-h-(--radix-select-content-available-height) fk:min-w-[8rem] fk:origin-(--radix-select-content-transform-origin) fk:overflow-x-hidden fk:overflow-y-auto fk:rounded-md fk:border fk:bg-popover fk:text-popover-foreground fk:shadow-md fk:data-[side=bottom]:slide-in-from-top-2 fk:data-[side=left]:slide-in-from-right-2 fk:data-[side=right]:slide-in-from-left-2 fk:data-[side=top]:slide-in-from-bottom-2 fk:data-[state=closed]:animate-out fk:data-[state=closed]:fade-out-0 fk:data-[state=closed]:zoom-out-95 fk:data-[state=open]:animate-in fk:data-[state=open]:fade-in-0 fk:data-[state=open]:zoom-in-95',\n position === 'popper' &&\n 'fk:data-[side=bottom]:translate-y-1 fk:data-[side=left]:-translate-x-1 fk:data-[side=right]:translate-x-1 fk:data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n align={align}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'fk:p-1',\n position === 'popper' &&\n 'fk:h-(--radix-select-trigger-height) fk:w-full fk:min-w-(--radix-select-trigger-width) fk:scroll-my-1'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('fk:px-2 fk:py-1.5 fk:text-xs fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"fk:relative fk:flex fk:w-full fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-8 fk:pl-2 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-[disabled]:pointer-events-none fk:data-[disabled]:opacity-50 fk:*[_svg]:pointer-events-none fk:*[_svg]:shrink-0 fk:*[_svg:not([class*='size-'])]:size-4 fk:*[_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span\n data-slot=\"select-item-indicator\"\n className=\"fk:absolute fk:right-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center\"\n >\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"fk:size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('fk:pointer-events-none fk:-mx-1 fk:my-1 fk:h-px fk:bg-border', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('fk:flex fk:cursor-default fk:items-center fk:justify-center fk:py-1', className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('fk:flex fk:cursor-default fk:items-center fk:justify-center fk:py-1', className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/primitives/input.tsx"],"names":["Input","className","type","props","jsx","cn"],"mappings":"4FAGA,SAASA,CAAAA,CAAM,CAAE,SAAA,CAAAC,CAAAA,CAAW,IAAA,CAAAC,CAAAA,CAAM,GAAGC,CAAM,CAAA,CAAkC,CAC3E,OACEC,GAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAMF,CAAAA,CACN,WAAA,CAAU,OAAA,CACV,SAAA,CAAWG,CAAAA,CACT,+gBAAA,CACA,wFAAA,CACA,iHAAA,CACAJ,CACF,CAAA,CACC,GAAGE,EACN,CAEJ","file":"chunk-FPK7J4BP.js","sourcesContent":["import * as React from 'react';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'fk:h-9 fk:w-full fk:min-w-0 fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-1 fk:text-base fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:selection:bg-primary fk:selection:text-primary-foreground fk:file:inline-flex fk:file:h-7 fk:file:border-0 fk:file:bg-transparent fk:file:text-sm fk:file:font-medium fk:file:text-foreground fk:placeholder:text-muted-foreground fk:disabled:pointer-events-none fk:disabled:cursor-not-allowed fk:disabled:opacity-50 fk:md:text-sm fk:dark:bg-input/30',\n 'fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50',\n 'fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n"]}
@@ -1,2 +0,0 @@
1
- import'./index.css';import {d}from'./chunk-6YHHL4XI.js';import {c}from'./chunk-ZBV4BY36.js';import {createContext,useReducer,useContext}from'react';import {jsx}from'react/jsx-runtime';import $ from'swr';import {find,propEq}from'ramda';var D="core.context.scope:",x={breadcrumbs:[],isRouteLoading:false,pageTitle:"",scope:"",relationships:{}},C=createContext(x),b=createContext(()=>{});function O(t,e){let{type:o,payload:r}=e;switch(o){case "setScope":return typeof localStorage<"u"&&r.projectId&&localStorage.setItem(`${D}${r.projectId}`,r.scope),{...t,scope:r.scope};case "setRelationship":return {...t,relationships:{...t.relationships,...r}};default:throw Error(`Unknown action: ${o}`)}}function q({children:t}){let[e,o]=useReducer(O,x);return jsx(C.Provider,{value:e,children:jsx(b.Provider,{value:o,children:t})})}function I(){return useContext(C)}function K(){return useContext(b)}function B(t,e){let{scope:o}=I(),{projects:r,currentProjectId:u}=d(),{schema:s,scopes:l}=find(propEq(u??"","projectId"))(r),p=l?.find(m=>m.isDefault)?.name??"default",a=e?.commonParams.q?JSON.stringify(e):null,{data:n,error:S,isLoading:i}=$(a,()=>fetch(c(t).search,{headers:{"Content-Type":"application/json"},body:JSON.stringify(e),method:"POST",mode:"cors"}).then(m=>m.json()));return {results:J(n?.results??[],t,s,o,p)??[],error:S,isLoading:i}}function v(t){return t.find(e=>e.isPrimary)?.name??t[0]?.name}function J(t,e,o,r,u){return t?.filter(s=>s?.hits?.length>0).map(s=>{let l=s,p=l.collection.replace(`${e}_`,"").replace(/_\d+$/,""),a=find(propEq(p,"plural"))(o);if(!a)return [];let n=v(a?.attributes??[]),S=a?.name??p;return l.hits.map(({document:i})=>{let c=i[n],w=(c&&typeof c!="string"?c[r]??c[u]:null)??i[n],E=Object.entries(i).reduce((h,[d,f])=>{if(d!==n&&d!=="id"&&d!=="_updatedAt"){let T=typeof f!="string"?f[r]??f[u]:f;h[d]=T;}return h},{});return {_id:i.id,_entityName:S,_entityNamePlural:p,[n]:w,...E}})}).flat()}export{D as a,q as b,I as c,K as d,B as e};//# sourceMappingURL=chunk-I4C65MUI.js.map
2
- //# sourceMappingURL=chunk-I4C65MUI.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/app-context.tsx","../src/core/use-search.tsx"],"names":["SCOPE_STORAGE_KEY","initialState","AppContext","createContext","AppDispatchContext","reducer","state","action","type","payload","AppProvider","children","dispatch","useReducer","jsx","useAppContext","useContext","useAppDispatch","useSearch","projectId","searchRequest","scope","projects","currentProjectId","useConfig","schema","scopes","find","propEq","defaultScope","s","swrKey","data","error","isLoading","useSWR","apiPaths","res","mapResults","getPrimaryAttributeName","schemaAttributes","attr","results","result","item","entityNamePlural","entitySchema","primaryAttributeName","entityName","document","primaryAttribute","primaryAttributeValue","attributes","acc","key","value","scopedValue"],"mappings":"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","file":"chunk-I4C65MUI.js","sourcesContent":["'use client';\n\nimport { createContext, useContext, useReducer } from 'react';\nimport type { Dispatch, JSX, ReactNode } from 'react';\nimport type { ActionSetRelationship, ActionSetScope, AppContextType } from './types';\n\nexport const SCOPE_STORAGE_KEY = 'core.context.scope:';\n\nconst initialState = {\n breadcrumbs: [],\n isRouteLoading: false,\n pageTitle: '',\n scope: '',\n relationships: {},\n};\n\nconst AppContext = createContext<AppContextType>(initialState);\n\nconst AppDispatchContext = createContext<Dispatch<ActionSetRelationship | ActionSetScope>>(() => {\n /* void */\n});\n\nfunction reducer(state: AppContextType, action: ActionSetRelationship | ActionSetScope): AppContextType {\n const { type, payload } = action;\n\n switch (type) {\n case 'setScope':\n if (typeof localStorage !== 'undefined' && payload.projectId) {\n localStorage.setItem(`${SCOPE_STORAGE_KEY}${payload.projectId}`, payload.scope);\n }\n\n return {\n ...state,\n scope: payload.scope,\n };\n case 'setRelationship':\n return {\n ...state,\n relationships: { ...state.relationships, ...payload },\n };\n default:\n throw Error(`Unknown action: ${type as string}`);\n }\n}\n\nexport function AppProvider({ children }: { children: ReactNode }): JSX.Element {\n const [state, dispatch] = useReducer(reducer, initialState);\n\n return (\n <AppContext.Provider value={state}>\n <AppDispatchContext.Provider value={dispatch}>{children}</AppDispatchContext.Provider>\n </AppContext.Provider>\n );\n}\n\nexport function useAppContext(): AppContextType {\n return useContext(AppContext);\n}\n\nexport function useAppDispatch(): Dispatch<ActionSetRelationship | ActionSetScope> {\n return useContext(AppDispatchContext);\n}\n","'use client';\n\nimport useSWR from 'swr';\nimport { find, propEq } from 'ramda';\nimport { apiPaths } from './api-paths';\nimport { useAppContext } from './app-context';\nimport { useConfig } from './config/config-context';\nimport type { SingleProject } from './config/types';\nimport type {\n Attribute,\n Entity,\n RawResultItem,\n RawSearchResultItems,\n SearchRequestProps,\n SearchResultItem,\n} from './types';\n\nexport function useSearch(\n projectId: string,\n searchRequest: SearchRequestProps | null\n): { results: SearchResultItem[] | []; error: Error; isLoading: boolean } {\n const { scope } = useAppContext();\n const { projects, currentProjectId } = useConfig();\n const { schema, scopes } = find(propEq(currentProjectId ?? '', 'projectId'))(projects) as SingleProject;\n const defaultScope = scopes?.find((s) => s.isDefault)?.name ?? 'default';\n const swrKey = searchRequest?.commonParams.q ? JSON.stringify(searchRequest) : null;\n const { data, error, isLoading } = useSWR(swrKey, () =>\n fetch(apiPaths(projectId).search, {\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(searchRequest),\n method: 'POST',\n mode: 'cors',\n }).then((res) => res.json() as Promise<{ results: RawSearchResultItems }>)\n );\n const results = mapResults(data?.results ?? [], projectId, schema, scope, defaultScope);\n\n return { results: results ?? [], error, isLoading };\n}\n\n/**\n * Find the name of the attribute of an entity with isPrimary === true.\n * The value of that attribute is returned as the value for the relationship attribute\n */\nfunction getPrimaryAttributeName(schemaAttributes: Attribute[]): string {\n return schemaAttributes.find((attr) => attr.isPrimary)?.name ?? schemaAttributes[0]?.name;\n}\n\nfunction mapResults(\n results: RawSearchResultItems | undefined,\n projectId: string,\n schema: Entity[],\n scope: string,\n defaultScope: string\n): SearchResultItem[] | undefined {\n return results\n ?.filter((result) => (result as RawResultItem)?.hits?.length > 0)\n .map((result) => {\n const item = result as RawResultItem;\n const entityNamePlural = item.collection.replace(`${projectId}_`, '').replace(/_\\d+$/, '');\n const entitySchema = find<Entity>(propEq(entityNamePlural, 'plural'))(schema);\n\n if (!entitySchema) {\n return [];\n }\n\n const primaryAttributeName = getPrimaryAttributeName(entitySchema?.attributes ?? []);\n const entityName = entitySchema?.name ?? entityNamePlural;\n\n // iterate over the hits and return an object with the primary attribute value first and then the rest of the attributes.\n return item.hits.map(({ document }) => {\n const primaryAttribute = document[primaryAttributeName];\n const scopedPrimaryAttribute =\n primaryAttribute && typeof primaryAttribute !== 'string'\n ? (primaryAttribute[scope] ?? primaryAttribute[defaultScope])\n : null;\n const primaryAttributeValue = scopedPrimaryAttribute ?? document[primaryAttributeName];\n const attributes = Object.entries(document).reduce(\n (acc: Omit<SearchResultItem, '_id' | '_entityName' | '_entityNamePlural'>, [key, value]) => {\n if (key !== primaryAttributeName && key !== 'id' && key !== '_updatedAt') {\n const scopedValue = typeof value !== 'string' ? (value[scope] ?? value[defaultScope]) : value;\n\n acc[key] = scopedValue;\n }\n\n return acc;\n },\n {}\n );\n\n return {\n _id: document.id,\n _entityName: entityName,\n _entityNamePlural: entityNamePlural,\n [primaryAttributeName]: primaryAttributeValue as string,\n ...attributes,\n };\n });\n })\n .flat();\n}\n"]}
@@ -1,2 +0,0 @@
1
- import'./index.css';import {a}from'./chunk-PEYW7XOU.js';import {b}from'./chunk-Z5CZVKD4.js';import {c,e,f,h,g,i}from'./chunk-53TUQIKJ.js';import {jsx,jsxs}from'react/jsx-runtime';function y({control:p,fieldSchema:f$1,setValue:m}){let{name:l,label:b$1,isEditable:h$1,options:t}=f$1;function k(e,o){m(l,{...o,value:e.currentTarget.value});}function g$1(e,o){m(l,{...o,disabled:e});}return jsx(c,{control:p,name:l,render:({field:e$1})=>jsxs(e,{children:[jsxs("div",{className:"fk:flex",children:[jsxs("div",{className:"fk:full-w",children:[jsx(f,{children:b$1}),t?.comment?jsx(h,{children:t.comment}):null]}),jsx("div",{className:"fk:h-full fk:self-end fk:ml-auto"})]}),jsx(g,{children:jsx(a,{className:`fk:w-full fk:mt-[0.1875rem] ${!e$1.value?.scope||e$1.value.scope==="default"?"fk:mb-3":""}`,disabled:h$1===false||e$1.value?.disabled,...e$1,onChange:o=>{k(o,e$1.value);},value:e$1.value?.value||""})}),jsx(b,{checked:e$1.value?.disabled??false,onChange:o=>{g$1(o,e$1.value);},scope:e$1.value?.scope}),jsx(i,{})]})})}export{y as a};//# sourceMappingURL=chunk-JHDZP6RC.js.map
2
- //# sourceMappingURL=chunk-JHDZP6RC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/form/fields/textarea.tsx"],"names":["Textarea","control","fieldSchema","setValue","name","label","isEditable","options","handleInput","event","previousValue","handleCheckbox","checked","value","jsx","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"mLAOO,SAASA,EAAS,CAAE,OAAA,CAAAC,EAAS,WAAA,CAAAC,GAAAA,CAAa,SAAAC,CAAS,CAAA,CAA6C,CACrG,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,GAAAA,CAAO,UAAA,CAAAC,IAAY,OAAA,CAAAC,CAAQ,EAAIL,GAAAA,CAE7C,SAASM,EACPC,CAAAA,CACAC,CAAAA,CACM,CACNP,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGM,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,IAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFV,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGS,CAAAA,CACH,SAAUD,CACZ,CAAC,EACH,CAEA,OACEE,IAACC,CAAAA,CAAA,CACC,QAASd,CAAAA,CACT,IAAA,CAAMG,EACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAY,GAAM,IACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,OAAI,SAAA,CAAU,SAAA,CACb,UAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,WAAA,CACb,QAAA,CAAA,CAAAH,IAACK,CAAAA,CAAA,CAAW,QAAA,CAAAd,GAAAA,CAAM,EACjBE,CAAAA,EAAS,OAAA,CAAUO,IAACM,CAAAA,CAAA,CAAiB,SAAAb,CAAAA,CAAQ,OAAA,CAAQ,EAAqB,IAAA,CAAA,CAC7E,CAAA,CACAO,IAAC,KAAA,CAAA,CAAI,SAAA,CAAU,mCAEf,CAAA,CAAA,CACF,CAAA,CACAA,IAACO,CAAAA,CAAA,CACC,QAAA,CAAAP,GAAAA,CAACd,EAAA,CACC,SAAA,CAAW,+BACT,CAACgB,GAAAA,CAAM,OAAO,KAAA,EAASA,GAAAA,CAAM,MAAM,KAAA,GAAU,SAAA,CAAY,UAAY,EACvE,CAAA,CAAA,CACA,SAAUV,GAAAA,GAAe,KAAA,EAASU,IAAM,KAAA,EAAO,QAAA,CAC9C,GAAGA,GAAAA,CACJ,SAAWP,CAAAA,EAAU,CACnBD,EAAYC,CAAAA,CAAOO,GAAAA,CAAM,KAAK,EAChC,CAAA,CACA,MAAQA,GAAAA,CAAM,KAAA,EAAO,OAAoB,EAAA,CAC3C,CAAA,CACF,EACAF,GAAAA,CAACQ,CAAAA,CAAA,CACC,OAAA,CAASN,GAAAA,CAAM,OAAO,QAAA,EAAY,KAAA,CAClC,SAAWJ,CAAAA,EAAY,CACrBD,IAAeC,CAAAA,CAASI,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,MAAOA,GAAAA,CAAM,KAAA,EAAO,MACtB,CAAA,CACAF,GAAAA,CAACS,EAAA,EAAY,CAAA,CAAA,CACf,EAEJ,CAEJ","file":"chunk-JHDZP6RC.js","sourcesContent":["import type { JSX } from 'react';\nimport type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Textarea as TextareaPrimitive } from '../../ui/primitives/textarea';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Textarea({ control, fieldSchema, setValue }: FormFieldParams<'textarea'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n\n function handleInput(\n event: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>,\n previousValue: FormFieldValue | undefined\n ): void {\n setValue(name, {\n ...previousValue,\n value: event.currentTarget.value,\n });\n }\n\n function handleCheckbox(checked: boolean, value: FormFieldValue | undefined): void {\n setValue(name, {\n ...value,\n disabled: checked,\n });\n }\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }: { field: { value?: FormFieldValue } }) => (\n <FormItem>\n <div className=\"fk:flex\">\n <div className=\"fk:full-w\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <div className=\"fk:h-full fk:self-end fk:ml-auto\">\n {/* TODO: this should be a slot that can receive user-defined components and system components like Presence and AI Writting Tools */}\n </div>\n </div>\n <FormControl>\n <TextareaPrimitive\n className={`fk:w-full fk:mt-[0.1875rem] ${\n !field.value?.scope || field.value.scope === 'default' ? 'fk:mb-3' : ''\n }`}\n disabled={isEditable === false || field.value?.disabled}\n {...field}\n onChange={(event) => {\n handleInput(event, field.value);\n }}\n value={(field.value?.value as string) || ''}\n />\n </FormControl>\n <DefaultValueSwitch\n checked={field.value?.disabled ?? false}\n onChange={(checked) => {\n handleCheckbox(checked, field.value);\n }}\n scope={field.value?.scope}\n />\n <FormMessage />\n </FormItem>\n )}\n />\n );\n}\n"]}