@flexkit/studio 0.0.21 → 0.0.22
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.
- package/dist/asset-WCG23FXJ.js +2 -0
- package/dist/{asset-Z32MEZ7V.js.map → asset-WCG23FXJ.js.map} +1 -1
- package/dist/astro.js +1 -1
- package/dist/{chunk-6UWY5AWG.js → chunk-56LXQD7L.js} +2 -2
- package/dist/{chunk-6UWY5AWG.js.map → chunk-56LXQD7L.js.map} +1 -1
- package/dist/chunk-6MOUYNN4.js +2 -0
- package/dist/chunk-6MOUYNN4.js.map +1 -0
- package/dist/{chunk-Q6R7PGTC.js → chunk-7NBZ3E4T.js} +2 -2
- package/dist/{chunk-Q6R7PGTC.js.map → chunk-7NBZ3E4T.js.map} +1 -1
- package/dist/chunk-JD5EGPDB.js +3 -0
- package/dist/chunk-JD5EGPDB.js.map +1 -0
- package/dist/chunk-JHDZP6RC.js +2 -0
- package/dist/chunk-JHDZP6RC.js.map +1 -0
- package/dist/chunk-PEYW7XOU.js +2 -0
- package/dist/chunk-PEYW7XOU.js.map +1 -0
- package/dist/{chunk-NZI5JL7Y.js → chunk-QCCSTRAT.js} +6 -2
- package/dist/chunk-RVGMKQPC.js +2 -0
- package/dist/chunk-RVGMKQPC.js.map +1 -0
- package/dist/chunk-V7UK6RMM.js +2 -0
- package/dist/chunk-V7UK6RMM.js.map +1 -0
- package/dist/chunk-WRDYOCVX.js +2 -0
- package/dist/chunk-WRDYOCVX.js.map +1 -0
- package/dist/chunk-YXRNHQPG.js +2 -0
- package/dist/chunk-YXRNHQPG.js.map +1 -0
- package/dist/index.css +52 -20
- package/dist/index.d.ts +1 -1
- package/dist/index.js +41 -41
- package/dist/index.js.map +1 -1
- package/dist/nextjs.js +1 -1
- package/dist/{search-SCKUTN4R.js → search-SB5FJIL4.js} +2 -2
- package/dist/{search-SCKUTN4R.js.map → search-SB5FJIL4.js.map} +1 -1
- package/dist/switch-FBS75HI4.js +2 -0
- package/dist/{switch-Z3MY4CZA.js.map → switch-FBS75HI4.js.map} +1 -1
- package/dist/tanstack-start.js +1 -1
- package/dist/textarea-OUJM7E6O.js +2 -0
- package/dist/{textarea-I2MFID7I.js.map → textarea-OUJM7E6O.js.map} +1 -1
- package/dist/ui.d.ts +37 -3
- package/dist/ui.js +1 -1
- package/dist/ui.js.map +1 -1
- package/dist/user-nav-CCJBY7CR.js +2 -0
- package/dist/{user-nav-MRPKTEIJ.js.map → user-nav-CCJBY7CR.js.map} +1 -1
- package/package.json +1 -1
- package/dist/asset-Z32MEZ7V.js +0 -2
- package/dist/chunk-CQOWWQ3H.js +0 -2
- package/dist/chunk-CQOWWQ3H.js.map +0 -1
- package/dist/chunk-FRXGAPDR.js +0 -2
- package/dist/chunk-FRXGAPDR.js.map +0 -1
- package/dist/chunk-H6LL44JH.js +0 -2
- package/dist/chunk-H6LL44JH.js.map +0 -1
- package/dist/chunk-HIHVCQ4Z.js +0 -2
- package/dist/chunk-HIHVCQ4Z.js.map +0 -1
- package/dist/chunk-R2HNLG6B.js +0 -2
- package/dist/chunk-R2HNLG6B.js.map +0 -1
- package/dist/chunk-TMK5LKFR.js +0 -3
- package/dist/chunk-TMK5LKFR.js.map +0 -1
- package/dist/switch-Z3MY4CZA.js +0 -2
- package/dist/textarea-I2MFID7I.js +0 -2
- package/dist/user-nav-MRPKTEIJ.js +0 -2
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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":["ResizablePanelGroup","className","props","jsx","cn","ResizablePanel","ResizableHandle","withHandle","GripVerticalIcon","Sheet","SheetPrimitive","SheetTrigger","SheetClose","SheetPortal","SheetOverlay","SheetContent","children","side","showCloseButton","jsxs","XIcon","SheetHeader","SheetFooter","SheetTitle","SheetDescription","MOBILE_BREAKPOINT","useIsMobile","isMobile","setIsMobile","T","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","Button","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 { 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-2 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 '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"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import'./index.css';import {b as b$1}from'./chunk-WRDYOCVX.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-JD5EGPDB.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-CCJBY7CR.js.map
|
|
2
|
+
//# sourceMappingURL=user-nav-CCJBY7CR.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":"
|
|
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-CCJBY7CR.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
package/dist/asset-Z32MEZ7V.js
DELETED
package/dist/chunk-CQOWWQ3H.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import'./index.css';import {b}from'./chunk-Z5CZVKD4.js';import {c,e,f,h,g,i}from'./chunk-53TUQIKJ.js';import {a}from'./chunk-O2QMYUPS.js';import {Switch}from'radix-ui';import {jsx,jsxs}from'react/jsx-runtime';function w({className:i,size:r="default",...o}){return jsx(Switch.Root,{"data-slot":"switch","data-size":r,className:a("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-[1.15rem] fk:data-[size=default]:w-8 fk:data-[size=sm]:h-3.5 fk:data-[size=sm]:w-6 fk:data-[state=checked]:bg-primary fk:data-[state=unchecked]:bg-input fk:dark:data-[state=unchecked]:bg-input/80",i),...o,children:jsx(Switch.Thumb,{"data-slot":"switch-thumb",className:a("fk:pointer-events-none fk:block fk:rounded-full fk:bg-background fk:ring-0 fk:transition-transform fk:group-data-[size=default]/switch:size-4 fk:group-data-[size=sm]/switch:size-3 fk:data-[state=checked]:translate-x-[calc(100%-2px)] fk:data-[state=unchecked]:translate-x-0 fk:dark:data-[state=checked]:bg-primary-foreground fk:dark:data-[state=unchecked]:bg-foreground")})})}function D({control:i$1,fieldSchema:r,setValue:o}){let{name:n,label:v,isEditable:F,options:d}=r;function y(e,t){o(n,{...t,value:e});}function z(e,t){o(n,{...t,disabled:e});}return jsx(c,{control:i$1,name:n,render:({field:e$1})=>jsxs(e,{children:[jsxs("div",{className:"fk:flex fk:flex-row fk:items-center fk:justify-between fk:rounded-lg fk:border fk:border-input fk:p-3 fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:disabled:cursor-not-allowed fk:disabled:opacity-50",children:[jsxs("div",{className:"fk:space-y-0.5",children:[jsx(f,{children:v}),d?.comment?jsx(h,{children:d.comment}):null]}),jsx(g,{children:jsx(w,{checked:e$1.value?.value?!!e$1.value.value:false,disabled:F===false||e$1.value?.disabled,onCheckedChange:t=>{y(t,e$1.value);}})})]}),jsx(b,{checked:e$1.value?.disabled??false,onChange:t=>{z(t,e$1.value);},scope:e$1.value?.scope}),jsx(i,{})]})})}export{D as a};//# sourceMappingURL=chunk-CQOWWQ3H.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-CQOWWQ3H.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/primitives/switch.tsx","../src/form/fields/switch.tsx"],"names":["Switch","className","size","props","jsx","SwitchPrimitive","cn","control","fieldSchema","setValue","name","label","isEditable","options","handleInput","checked","previousValue","handleCheckbox","value","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"iNAMA,SAASA,CAAAA,CAAO,CACd,SAAA,CAAAC,CAAAA,CACA,KAAAC,CAAAA,CAAO,SAAA,CACP,GAAGC,CACL,CAAA,CAEG,CACD,OACEC,GAAAA,CAACC,MAAAA,CAAgB,IAAA,CAAhB,CACC,WAAA,CAAU,QAAA,CACV,YAAWH,CAAAA,CACX,SAAA,CAAWI,EACT,6gBAAA,CACAL,CACF,EACC,GAAGE,CAAAA,CAEJ,QAAA,CAAAC,GAAAA,CAACC,MAAAA,CAAgB,KAAA,CAAhB,CACC,WAAA,CAAU,cAAA,CACV,SAAA,CAAWC,CAAAA,CACT,kXACF,CAAA,CACF,EACF,CAEJ,CCzBO,SAASN,EAAO,CAAE,OAAA,CAAAO,IAAS,WAAA,CAAAC,CAAAA,CAAa,QAAA,CAAAC,CAAS,CAAA,CAA2C,CACjG,GAAM,CAAE,IAAA,CAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,EAAY,OAAA,CAAAC,CAAQ,CAAA,CAAIL,CAAAA,CAE7C,SAASM,CAAAA,CAAYC,EAAkBC,CAAAA,CAAiD,CACtFP,EAASC,CAAAA,CAAM,CACb,GAAGM,CAAAA,CACH,KAAA,CAAOD,CACT,CAAC,EACH,CAEA,SAASE,CAAAA,CAAeF,CAAAA,CAAkBG,CAAAA,CAAyC,CACjFT,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGQ,CAAAA,CACH,QAAA,CAAUH,CACZ,CAAC,EACH,CAEA,OACEX,GAAAA,CAACe,EAAA,CACC,OAAA,CAASZ,IACT,IAAA,CAAMG,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,KAAA,CAAAU,GAAM,CAAA,GACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,IAAAA,CAAC,OAAI,SAAA,CAAU,qSAAA,CACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,KAAA,CAAA,CAAI,SAAA,CAAU,iBACb,QAAA,CAAA,CAAAjB,GAAAA,CAACmB,EAAA,CAAW,QAAA,CAAAZ,EAAM,CAAA,CACjBE,CAAAA,EAAS,OAAA,CAAUT,GAAAA,CAACoB,CAAAA,CAAA,CAAiB,SAAAX,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAAA,CAC7E,CAAA,CACAT,GAAAA,CAACqB,EAAA,CACC,QAAA,CAAArB,GAAAA,CAACJ,CAAAA,CAAA,CACC,OAAA,CAASoB,IAAM,KAAA,EAAO,KAAA,CAAQ,EAAQA,GAAAA,CAAM,KAAA,CAAM,MAAS,KAAA,CAC3D,QAAA,CAAUR,CAAAA,GAAe,KAAA,EAASQ,GAAAA,CAAM,KAAA,EAAO,SAC/C,eAAA,CAAkBL,CAAAA,EAAY,CAC5BD,CAAAA,CAAYC,CAAAA,CAASK,GAAAA,CAAM,KAAK,EAClC,CAAA,CACF,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACAhB,GAAAA,CAACsB,EAAA,CACC,OAAA,CAASN,GAAAA,CAAM,KAAA,EAAO,QAAA,EAAY,KAAA,CAClC,SAAWL,CAAAA,EAAY,CACrBE,CAAAA,CAAeF,CAAAA,CAASK,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACAhB,IAACuB,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ","file":"chunk-CQOWWQ3H.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-[1.15rem] fk:data-[size=default]:w-8 fk:data-[size=sm]:h-3.5 fk:data-[size=sm]:w-6 fk:data-[state=checked]:bg-primary 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-background fk:ring-0 fk:transition-transform fk:group-data-[size=default]/switch:size-4 fk:group-data-[size=sm]/switch:size-3 fk:data-[state=checked]:translate-x-[calc(100%-2px)] fk:data-[state=unchecked]:translate-x-0 fk:dark:data-[state=checked]:bg-primary-foreground fk:dark:data-[state=unchecked]:bg-foreground'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type { FormFieldValue } from '../../graphql-client/types';\nimport { FormControl, FormDescription, FormField, FormLabel, FormMessage, FormItem } from '../../ui/primitives/form';\nimport { Switch as SwitchPrimitive } from '../../ui/primitives/switch';\nimport type { FormFieldParams } from '../types';\nimport { DefaultValueSwitch } from './default-value-switch';\n\nexport function Switch({ control, fieldSchema, setValue }: FormFieldParams<'switch'>): JSX.Element {\n const { name, label, isEditable, options } = fieldSchema;\n\n function handleInput(checked: boolean, previousValue: FormFieldValue | undefined): void {\n setValue(name, {\n ...previousValue,\n value: checked,\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 fk:flex-row fk:items-center fk:justify-between fk:rounded-lg fk:border fk:border-input fk:p-3 fk:ring-offset-background fk:focus-within:outline-hidden fk:focus-within:ring-2 fk:focus-within:ring-ring fk:focus-within:ring-offset-2 fk:disabled:cursor-not-allowed fk:disabled:opacity-50\">\n <div className=\"fk:space-y-0.5\">\n <FormLabel>{label}</FormLabel>\n {options?.comment ? <FormDescription>{options.comment}</FormDescription> : null}\n </div>\n <FormControl>\n <SwitchPrimitive\n checked={field.value?.value ? Boolean(field.value.value) : false}\n disabled={isEditable === false || field.value?.disabled}\n onCheckedChange={(checked) => {\n handleInput(checked, field.value);\n }}\n />\n </FormControl>\n </div>\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"]}
|
package/dist/chunk-FRXGAPDR.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-O2QMYUPS.js';import {Toggle,ToggleGroup,Separator}from'radix-ui';import {cva}from'class-variance-authority';import {jsx}from'react/jsx-runtime';import*as f from'react';var l=cva("fk:inline-flex fk:items-center fk:justify-center fk:gap-2 fk:rounded-md fk:text-sm fk:font-medium fk:whitespace-nowrap fk:transition-[color,box-shadow] fk:outline-none fk:hover:bg-muted fk:hover:text-muted-foreground fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-[state=on]:bg-accent fk:data-[state=on]:text-accent-foreground fk:dark:aria-invalid:ring-destructive/40 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"fk:bg-transparent",outline:"fk:border fk:border-input fk:bg-transparent fk:shadow-xs fk:hover:bg-accent fk:hover:text-accent-foreground"},size:{default:"fk:h-9 fk:min-w-9 fk:px-2",sm:"fk:h-8 fk:min-w-8 fk:px-1.5",lg:"fk:h-10 fk:min-w-10 fk:px-2.5"}},defaultVariants:{variant:"default",size:"default"}});function P({className:e,variant:t,size:r,...o}){return jsx(Toggle.Root,{"data-slot":"toggle",className:a(l({variant:t,size:r,className:e})),...o})}var c=f.createContext({size:"default",variant:"default",spacing:0});function z({className:e,variant:t,size:r,spacing:o=0,children:s,...i}){return jsx(ToggleGroup.Root,{"data-slot":"toggle-group","data-variant":t,"data-size":r,"data-spacing":o,style:{"--gap":o},className:a("fk:group/toggle-group fk:flex fk:w-fit fk:items-center fk:gap-[--spacing(var(--gap))] fk:rounded-md fk:data-[spacing=default]:data-[variant=outline]:shadow-xs",e),...i,children:jsx(c.Provider,{value:{variant:t,size:r,spacing:o},children:s})})}function N({className:e,children:t,variant:r,size:o,...s}){let i=f.useContext(c);return jsx(ToggleGroup.Item,{"data-slot":"toggle-group-item","data-variant":i.variant||r,"data-size":i.size||o,"data-spacing":i.spacing,className:a(l({variant:i.variant||r,size:i.size||o}),"fk:w-auto fk:min-w-0 fk:shrink-0 fk:px-3 fk:focus:z-10 fk:focus-visible:z-10","fk:data-[spacing=0]:rounded-none fk:data-[spacing=0]:shadow-none fk:data-[spacing=0]:first:rounded-l-md fk:data-[spacing=0]:last:rounded-r-md fk:data-[spacing=0]:data-[variant=outline]:border-l-0 fk:data-[spacing=0]:data-[variant=outline]:first:border-l",e),...s,children:t})}function I({className:e,orientation:t="horizontal",decorative:r=true,...o}){return jsx(Separator.Root,{"data-slot":"separator",decorative:r,orientation:t,className:a("fk:shrink-0 fk:bg-border fk:data-[orientation=horizontal]:h-px fk:data-[orientation=horizontal]:w-full fk:data-[orientation=vertical]:h-full fk:data-[orientation=vertical]:w-px",e),...o})}function E({className:e,onScroll:t,ref:r,...o}){return jsx("div",{ref:r,"data-slot":"table-container",className:"fk:relative fk:h-full fk:w-full fk:overflow-x-auto fk:rounded-t-md fk:border-border fk:border",onScroll:t,children:jsx("table",{"data-slot":"table",className:a("fk:w-full fk:caption-bottom fk:text-sm",e),...o})})}function F({className:e,...t}){return jsx("thead",{"data-slot":"table-header",className:a("fk:[&_tr]:border-b",e),...t})}function L({className:e,...t}){return jsx("tbody",{"data-slot":"table-body",className:a("fk:[&_tr:last-child]:border-0",e),...t})}function M({className:e,...t}){return jsx("tfoot",{"data-slot":"table-footer",className:a("fk:border-t fk:bg-muted/50 fk:font-medium fk:[&>tr]:last:border-b-0",e),...t})}function O({className:e,...t}){return jsx("tr",{"data-slot":"table-row",className:a("fk:border-b fk:transition-colors fk:hover:bg-muted/50 fk:has-aria-expanded:bg-muted/50 fk:data-[state=selected]:bg-muted",e),...t})}function q({className:e,...t}){return jsx("th",{"data-slot":"table-head",className:a("fk:h-10 fk:px-4 fk:text-left fk:align-middle fk:font-medium fk:whitespace-nowrap fk:text-foreground fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]",e),...t})}function A({className:e,...t}){return jsx("td",{"data-slot":"table-cell",className:a("fk:px-4 fk:py-1 fk:align-middle fk:whitespace-nowrap fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]",e),...t})}function J({className:e,...t}){return jsx("caption",{"data-slot":"table-caption",className:a("fk:mt-4 fk:text-sm fk:text-muted-foreground",e),...t})}export{l as a,P as b,z as c,N as d,I as e,E as f,F as g,L as h,M as i,O as j,q as k,A as l,J as m};//# sourceMappingURL=chunk-FRXGAPDR.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-FRXGAPDR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/primitives/toggle.tsx","../src/ui/primitives/toggle-group.tsx","../src/ui/primitives/separator.tsx","../src/ui/primitives/table.tsx"],"names":["toggleVariants","cva","Toggle","className","variant","size","props","jsx","TogglePrimitive","cn","ToggleGroupContext","ToggleGroup","spacing","children","ToggleGroupPrimitive","ToggleGroupItem","context","Separator","orientation","decorative","SeparatorPrimitive","Table","onScroll","ref","TableHeader","TableBody","TableFooter","TableRow","TableHead","TableCell","TableCaption"],"mappings":"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","file":"chunk-FRXGAPDR.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\n\nconst toggleVariants = cva(\n \"fk:inline-flex fk:items-center fk:justify-center fk:gap-2 fk:rounded-md fk:text-sm fk:font-medium fk:whitespace-nowrap fk:transition-[color,box-shadow] fk:outline-none fk:hover:bg-muted fk:hover:text-muted-foreground fk:focus-visible:border-ring fk:focus-visible:ring-[3px] fk:focus-visible:ring-ring/50 fk:disabled:pointer-events-none fk:disabled:opacity-50 fk:aria-invalid:border-destructive fk:aria-invalid:ring-destructive/20 fk:data-[state=on]:bg-accent fk:data-[state=on]:text-accent-foreground fk:dark:aria-invalid:ring-destructive/40 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'fk:bg-transparent',\n outline:\n 'fk:border fk:border-input fk:bg-transparent fk:shadow-xs fk:hover:bg-accent fk:hover:text-accent-foreground',\n },\n size: {\n default: 'fk:h-9 fk:min-w-9 fk:px-2',\n sm: 'fk:h-8 fk:min-w-8 fk:px-1.5',\n lg: 'fk:h-10 fk:min-w-10 fk:px-2.5',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Toggle({\n className,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root data-slot=\"toggle\" className={cn(toggleVariants({ variant, size, className }))} {...props} />\n );\n}\n\nexport { Toggle, toggleVariants };\n","'use client';\n\nimport * as React from 'react';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport type { VariantProps } from 'class-variance-authority';\nimport { cn } from '../lib/utils';\nimport { toggleVariants } from './toggle';\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n }\n>({\n size: 'default',\n variant: 'default',\n spacing: 0,\n});\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n children,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants> & {\n spacing?: number;\n }) {\n return (\n <ToggleGroupPrimitive.Root\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n style={{ '--gap': spacing } as React.CSSProperties}\n className={cn(\n 'fk:group/toggle-group fk:flex fk:w-fit fk:items-center fk:gap-[--spacing(var(--gap))] fk:rounded-md fk:data-[spacing=default]:data-[variant=outline]:shadow-xs',\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size, spacing }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n );\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant,\n size,\n ...props\n}: React.ComponentProps<typeof ToggleGroupPrimitive.Item> & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext);\n\n return (\n <ToggleGroupPrimitive.Item\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n 'fk:w-auto fk:min-w-0 fk:shrink-0 fk:px-3 fk:focus:z-10 fk:focus-visible:z-10',\n 'fk:data-[spacing=0]:rounded-none fk:data-[spacing=0]:shadow-none fk:data-[spacing=0]:first:rounded-l-md fk:data-[spacing=0]:last:rounded-r-md fk:data-[spacing=0]:data-[variant=outline]:border-l-0 fk:data-[spacing=0]:data-[variant=outline]:first:border-l',\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n );\n}\n\nexport { ToggleGroup, ToggleGroupItem };\n","'use client';\n\nimport * as React from 'react';\nimport { Separator as SeparatorPrimitive } from 'radix-ui';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'fk:shrink-0 fk:bg-border fk:data-[orientation=horizontal]:h-px fk:data-[orientation=horizontal]:w-full fk:data-[orientation=vertical]:h-full fk:data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","import * as React from 'react';\nimport { cn } from 'src/ui/lib/utils';\n\ntype TableProps = Omit<React.ComponentProps<'table'>, 'ref'> & {\n ref?: React.Ref<HTMLDivElement>;\n};\n\nfunction Table({ className, onScroll, ref, ...props }: TableProps) {\n return (\n <div\n ref={ref}\n data-slot=\"table-container\"\n className=\"fk:relative fk:h-full fk:w-full fk:overflow-x-auto fk:rounded-t-md fk:border-border fk:border\"\n onScroll={onScroll}\n >\n <table data-slot=\"table\" className={cn('fk:w-full fk:caption-bottom fk:text-sm', className)} {...props} />\n </div>\n );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n return <thead data-slot=\"table-header\" className={cn('fk:[&_tr]:border-b', className)} {...props} />;\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n return <tbody data-slot=\"table-body\" className={cn('fk:[&_tr:last-child]:border-0', className)} {...props} />;\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n return (\n <tfoot\n data-slot=\"table-footer\"\n className={cn('fk:border-t fk:bg-muted/50 fk:font-medium fk:[&>tr]:last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n return (\n <tr\n data-slot=\"table-row\"\n className={cn(\n 'fk:border-b fk:transition-colors fk:hover:bg-muted/50 fk:has-aria-expanded:bg-muted/50 fk:data-[state=selected]:bg-muted',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n return (\n <th\n data-slot=\"table-head\"\n className={cn(\n 'fk:h-10 fk:px-4 fk:text-left fk:align-middle fk:font-medium fk:whitespace-nowrap fk:text-foreground fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n return (\n <td\n data-slot=\"table-cell\"\n className={cn(\n 'fk:px-4 fk:py-1 fk:align-middle fk:whitespace-nowrap fk:[&:has([role=checkbox])]:pr-0 fk:*:[[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TableCaption({ className, ...props }: React.ComponentProps<'caption'>) {\n return (\n <caption\n data-slot=\"table-caption\"\n className={cn('fk:mt-4 fk:text-sm fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n"]}
|
package/dist/chunk-H6LL44JH.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import'./index.css';import {d}from'./chunk-6YHHL4XI.js';import {c}from'./chunk-TMK5LKFR.js';import {createContext,useState,useCallback,useEffect,useMemo,useContext}from'react';import {jsx}from'react/jsx-runtime';import _ from'swr';import {useParams}from'react-router-dom';var V=["light","dark"],C="(prefers-color-scheme: dark)",U=createContext(void 0);function W({attribute:e="data-theme",children:r,defaultTheme:t,disableTransitionOnChange:u=false,enableColorScheme:l=true,enableSystem:i=true,forcedTheme:n,storageKey:c="theme",themes:d=V,value:f}){let[a,k]=useState(()=>Q(c,t,i)),[m,w]=useState(()=>D()),v=E(n??a,i,m),y=useCallback(o=>{if(!n&&(k(o),!!h()))try{window.localStorage.setItem(c,o);}catch{}},[n,c]);useEffect(()=>{if(!h()||!i)return;let o=window.matchMedia(C);function g(s){w(s.matches?"dark":"light");}return w(o.matches?"dark":"light"),o.addEventListener("change",g),()=>{o.removeEventListener("change",g);}},[i]),useEffect(()=>{if(!h())return;let o=window.document.documentElement,s=E(n??a??t,i,m);if(!s)return;let b=u?X():void 0,I=f?Object.values(f):d,P=f?.[s]??s;e==="class"&&(o.classList.remove(...I),o.classList.add(P)),e!=="class"&&o.setAttribute(e,P),l&&(s==="dark"||s==="light")&&(o.style.colorScheme=s),b?.();},[e,t,u,l,i,n,m,a,d,f]);let R=useMemo(()=>({forcedTheme:n,resolvedTheme:v,setTheme:y,systemTheme:m,theme:n??a,themes:i?[...d,"system"]:d}),[i,n,v,y,m,a,d]);return jsx(U.Provider,{value:R,children:r})}function Y(){let e=useContext(U);if(!e)throw new Error("useTheme must be used within ThemeProvider");return e}function X(){let e=window.document.createElement("style");return e.appendChild(window.document.createTextNode("*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}")),window.document.head.appendChild(e),()=>{window.getComputedStyle(window.document.body),window.setTimeout(()=>{e.remove();},0);}}function Q(e,r,t){if(!h())return r??(t?"system":"light");try{let u=window.localStorage.getItem(e);if(u)return u}catch{}return r??(t?"system":"light")}function D(){if(h())return window.matchMedia(C).matches?"dark":"light"}function h(){return typeof window<"u"}function E(e,r,t){if(e)return e!=="system"?e:r?t??"light":"light"}function T(){let{projectId:e}=useParams(),{projects:r}=d(),t=r.find(n=>n.projectId===e)??r[0],{data:u,isLoading:l}=_(c(e??"").currentUser,n=>fetch(n,{mode:"cors",credentials:"include"}).then(c=>c.json()));return [l,{user:u,logout:async()=>{await fetch(c(e??"").logout(t?.basePath??"/"),{method:"POST",mode:"cors",credentials:"include"}),await fetch("/api/flexkit/logout",{method:"GET",credentials:"include"}),window.location.reload();}}]}var L=createContext([true,{user:null,logout:()=>Promise.resolve()}]);function se({children:e}){let[r,t]=T();return jsx(L.Provider,{value:[r,t],children:e})}function ue(){return useContext(L)}export{W as a,Y as b,se as c,ue as d};//# sourceMappingURL=chunk-H6LL44JH.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-H6LL44JH.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/theme-context.tsx","../src/auth/use-auth-service.ts","../src/auth/auth-context.tsx"],"names":["DEFAULT_THEMES","MEDIA_QUERY","ThemeContext","createContext","ThemeProvider","attribute","children","defaultTheme","disableTransitionOnChange","enableColorScheme","enableSystem","forcedTheme","storageKey","themes","value","theme","setThemeState","useState","getInitialTheme","systemTheme","setSystemTheme","getSystemTheme","resolvedTheme","resolveTheme","setTheme","useCallback","nextTheme","isBrowser","useEffect","mediaQuery","handleChange","event","root","nextResolvedTheme","cleanupTransitions","disableTransitions","themeValues","attributeValue","context","useMemo","jsx","useTheme","useContext","style","storedTheme","useAuthService","projectId","useParams","projects","useConfig","currentProject","project","user","isLoadingUser","useSWR","apiPaths","url","res","AuthContext","AuthProvider","isLoading","auth","useAuth"],"mappings":"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","file":"chunk-H6LL44JH.js","sourcesContent":["'use client';\n\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport type { JSX } from 'react';\n\ntype SystemTheme = 'dark' | 'light';\n\ninterface ThemeValue {\n [themeName: string]: string;\n}\n\nexport interface UseThemeProps {\n themes: string[];\n forcedTheme?: string;\n setTheme: (theme: string) => void;\n theme?: string;\n resolvedTheme?: string;\n systemTheme?: SystemTheme;\n}\n\nexport interface ThemeProviderProps {\n themes?: string[];\n forcedTheme?: string;\n enableSystem?: boolean;\n disableTransitionOnChange?: boolean;\n enableColorScheme?: boolean;\n storageKey?: string;\n defaultTheme?: string;\n attribute?: string | 'class';\n value?: ThemeValue;\n children?: React.ReactNode;\n}\n\nconst DEFAULT_THEMES = ['light', 'dark'];\nconst MEDIA_QUERY = '(prefers-color-scheme: dark)';\nconst ThemeContext = createContext<UseThemeProps | undefined>(undefined);\n\nexport function ThemeProvider({\n attribute = 'data-theme',\n children,\n defaultTheme,\n disableTransitionOnChange = false,\n enableColorScheme = true,\n enableSystem = true,\n forcedTheme,\n storageKey = 'theme',\n themes = DEFAULT_THEMES,\n value,\n}: ThemeProviderProps): JSX.Element {\n const [theme, setThemeState] = useState<string | undefined>(() =>\n getInitialTheme(storageKey, defaultTheme, enableSystem)\n );\n const [systemTheme, setSystemTheme] = useState<SystemTheme | undefined>(() => getSystemTheme());\n const resolvedTheme = resolveTheme(forcedTheme ?? theme, enableSystem, systemTheme);\n\n const setTheme = useCallback(\n (nextTheme: string) => {\n if (forcedTheme) {\n return;\n }\n\n setThemeState(nextTheme);\n\n if (!isBrowser()) {\n return;\n }\n\n try {\n window.localStorage.setItem(storageKey, nextTheme);\n } catch {\n //\n }\n },\n [forcedTheme, storageKey]\n );\n\n useEffect(() => {\n if (!isBrowser() || !enableSystem) {\n return;\n }\n\n const mediaQuery = window.matchMedia(MEDIA_QUERY);\n\n function handleChange(event: MediaQueryListEvent): void {\n setSystemTheme(event.matches ? 'dark' : 'light');\n }\n\n setSystemTheme(mediaQuery.matches ? 'dark' : 'light');\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [enableSystem]);\n\n useEffect(() => {\n if (!isBrowser()) {\n return;\n }\n\n const root = window.document.documentElement;\n const selectedTheme = forcedTheme ?? theme ?? defaultTheme;\n const nextResolvedTheme = resolveTheme(selectedTheme, enableSystem, systemTheme);\n\n if (!nextResolvedTheme) {\n return;\n }\n\n const cleanupTransitions = disableTransitionOnChange ? disableTransitions() : undefined;\n const themeValues = value ? Object.values(value) : themes;\n const attributeValue = value?.[nextResolvedTheme] ?? nextResolvedTheme;\n\n if (attribute === 'class') {\n root.classList.remove(...themeValues);\n root.classList.add(attributeValue);\n }\n\n if (attribute !== 'class') {\n root.setAttribute(attribute, attributeValue);\n }\n\n if (enableColorScheme && (nextResolvedTheme === 'dark' || nextResolvedTheme === 'light')) {\n root.style.colorScheme = nextResolvedTheme;\n }\n\n cleanupTransitions?.();\n }, [\n attribute,\n defaultTheme,\n disableTransitionOnChange,\n enableColorScheme,\n enableSystem,\n forcedTheme,\n systemTheme,\n theme,\n themes,\n value,\n ]);\n\n const context = useMemo<UseThemeProps>(() => {\n return {\n forcedTheme,\n resolvedTheme,\n setTheme,\n systemTheme,\n theme: forcedTheme ?? theme,\n themes: enableSystem ? [...themes, 'system'] : themes,\n };\n }, [enableSystem, forcedTheme, resolvedTheme, setTheme, systemTheme, theme, themes]);\n\n return <ThemeContext.Provider value={context}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): UseThemeProps {\n const context = useContext(ThemeContext);\n\n if (!context) {\n throw new Error('useTheme must be used within ThemeProvider');\n }\n\n return context;\n}\n\nfunction disableTransitions(): () => void {\n const style = window.document.createElement('style');\n style.appendChild(\n window.document.createTextNode(\n '*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}'\n )\n );\n window.document.head.appendChild(style);\n\n return () => {\n window.getComputedStyle(window.document.body);\n\n window.setTimeout(() => {\n style.remove();\n }, 0);\n };\n}\n\nfunction getInitialTheme(storageKey: string, defaultTheme: string | undefined, enableSystem: boolean): string {\n if (!isBrowser()) {\n return defaultTheme ?? (enableSystem ? 'system' : 'light');\n }\n\n try {\n const storedTheme = window.localStorage.getItem(storageKey);\n\n if (storedTheme) {\n return storedTheme;\n }\n } catch {\n //\n }\n\n return defaultTheme ?? (enableSystem ? 'system' : 'light');\n}\n\nfunction getSystemTheme(): SystemTheme | undefined {\n if (!isBrowser()) {\n return undefined;\n }\n\n return window.matchMedia(MEDIA_QUERY).matches ? 'dark' : 'light';\n}\n\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined';\n}\n\nfunction resolveTheme(\n theme: string | undefined,\n enableSystem: boolean,\n systemTheme: SystemTheme | undefined\n): string | undefined {\n if (!theme) {\n return undefined;\n }\n\n if (theme !== 'system') {\n return theme;\n }\n\n if (!enableSystem) {\n return 'light';\n }\n\n return systemTheme ?? 'light';\n}\n","'use client';\n\nimport useSWR from 'swr';\nimport { useParams } from 'react-router-dom';\nimport { apiPaths } from '../core/api-paths';\nimport { useConfig } from '../core/config/config-context';\nimport type { AuthService, User } from './types';\n\nexport default function useAuthService(): AuthService {\n const { projectId } = useParams();\n const { projects } = useConfig();\n const currentProject = projects.find((project) => project.projectId === projectId) ?? projects[0];\n const { data: user, isLoading: isLoadingUser } = useSWR(apiPaths(projectId ?? '').currentUser, (url: string) =>\n fetch(url, { mode: 'cors', credentials: 'include' }).then((res) => res.json() as Promise<User>)\n );\n const isLoading = isLoadingUser;\n\n return [\n isLoading,\n {\n user,\n logout: async () => {\n // wipe remote session\n await fetch(apiPaths(projectId ?? '').logout(currentProject?.basePath ?? '/'), {\n method: 'POST',\n mode: 'cors',\n credentials: 'include',\n });\n\n // delete first-party auth cookie\n await fetch('/api/flexkit/logout', { method: 'GET', credentials: 'include' });\n\n window.location.reload();\n },\n },\n ];\n}\n","'use client';\n\nimport { createContext, JSX, useContext } from 'react';\nimport useAuthService from './use-auth-service';\nimport type { Auth, AuthService, User } from './types';\n\nconst AuthContext = createContext([\n true,\n {\n user: null as User | null,\n logout: () => Promise.resolve(),\n } as Auth,\n]);\n\nexport function AuthProvider({ children }: { children: React.ReactNode }): JSX.Element {\n const [isLoading, auth] = useAuthService();\n\n return <AuthContext.Provider value={[isLoading, auth]}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthService {\n return useContext(AuthContext) as AuthService;\n}\n"]}
|
package/dist/chunk-HIHVCQ4Z.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import'./index.css';import {a}from'./chunk-O2QMYUPS.js';import {DropdownMenu}from'radix-ui';import {CheckIcon,CircleIcon,ChevronRightIcon}from'lucide-react';import {jsx,jsxs}from'react/jsx-runtime';function l({...e}){return jsx(DropdownMenu.Root,{"data-slot":"dropdown-menu",...e})}function v({...e}){return jsx(DropdownMenu.Portal,{"data-slot":"dropdown-menu-portal",...e})}function g({...e}){return jsx(DropdownMenu.Trigger,{"data-slot":"dropdown-menu-trigger",...e})}function w({className:e,sideOffset:o=4,...a$1}){return jsx(DropdownMenu.Portal,{children:jsx(DropdownMenu.Content,{"data-slot":"dropdown-menu-content",sideOffset:o,className:a("fk:z-50 fk:max-h-(--radix-dropdown-menu-content-available-height) fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-x-hidden fk:overflow-y-auto fk:rounded-md fk:border fk:bg-popover fk:p-1 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",e),...a$1})})}function b({...e}){return jsx(DropdownMenu.Group,{"data-slot":"dropdown-menu-group",...e})}function x({className:e,inset:o,variant:a$1="default",...d}){return jsx(DropdownMenu.Item,{"data-slot":"dropdown-menu-item","data-inset":o,"data-variant":a$1,className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 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:data-[inset]:pl-8 fk:data-[variant=destructive]:text-destructive fk:data-[variant=destructive]:focus:bg-destructive/10 fk:data-[variant=destructive]:focus:text-destructive fk:dark:data-[variant=destructive]:focus:bg-destructive/20 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:[&_svg:not([class*='text-'])]:text-muted-foreground fk:data-[variant=destructive]:*:[svg]:text-destructive!",e),...d})}function P({className:e,children:o,checked:a$1,...d}){return jsxs(DropdownMenu.CheckboxItem,{"data-slot":"dropdown-menu-checkbox-item",className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 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",e),checked:a$1,...d,children:[jsx("span",{className:"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(CheckIcon,{className:"size-4"})})}),o]})}function D({...e}){return jsx(DropdownMenu.RadioGroup,{"data-slot":"dropdown-menu-radio-group",...e})}function M({className:e,children:o,...a$1}){return jsxs(DropdownMenu.RadioItem,{"data-slot":"dropdown-menu-radio-item",className:a("fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 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",e),...a$1,children:[jsx("span",{className:"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center",children:jsx(DropdownMenu.ItemIndicator,{children:jsx(CircleIcon,{className:"size-2 fill-current"})})}),o]})}function h({className:e,inset:o,...a$1}){return jsx(DropdownMenu.Label,{"data-slot":"dropdown-menu-label","data-inset":o,className:a("fk:px-2 fk:py-1.5 fk:text-sm fk:font-medium fk:data-[inset]:pl-8",e),...a$1})}function C({className:e,...o}){return jsx(DropdownMenu.Separator,{"data-slot":"dropdown-menu-separator",className:a("fk:-mx-1 fk:my-1 fk:h-px fk:bg-border",e),...o})}function R({className:e,...o}){return jsx("span",{"data-slot":"dropdown-menu-shortcut",className:a("fk:ml-auto fk:text-xs fk:tracking-widest fk:text-muted-foreground",e),...o})}function y({...e}){return jsx(DropdownMenu.Sub,{"data-slot":"dropdown-menu-sub",...e})}function I({className:e,inset:o,children:a$1,...d}){return jsxs(DropdownMenu.SubTrigger,{"data-slot":"dropdown-menu-sub-trigger","data-inset":o,className:a("fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-[inset]:pl-8 fk:data-[state=open]:bg-accent fk:data-[state=open]:text-accent-foreground 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),...d,children:[a$1,jsx(ChevronRightIcon,{className:"fk:ml-auto fk:size-4"})]})}function z({className:e,...o}){return jsx(DropdownMenu.SubContent,{"data-slot":"dropdown-menu-sub-content",className:a("fk:z-50 fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-hidden fk:rounded-md fk:border fk:bg-popover fk:p-1 fk:text-popover-foreground fk:shadow-lg 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",e),...o})}function T({className:e,...o}){return jsx("div",{"data-slot":"skeleton",className:a("fk:animate-pulse fk:rounded-md fk:bg-accent",e),...o})}export{l as a,v as b,g as c,w as d,b as e,x as f,P as g,D as h,M as i,h as j,C as k,R as l,y as m,I as n,z as o,T as p};//# sourceMappingURL=chunk-HIHVCQ4Z.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-HIHVCQ4Z.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/primitives/dropdown-menu.tsx","../src/ui/primitives/skeleton.tsx"],"names":["DropdownMenu","props","jsx","DropdownMenuPrimitive","DropdownMenuPortal","DropdownMenuTrigger","DropdownMenuContent","className","sideOffset","cn","DropdownMenuGroup","DropdownMenuItem","inset","variant","DropdownMenuCheckboxItem","children","checked","jsxs","CheckIcon","DropdownMenuRadioGroup","DropdownMenuRadioItem","CircleIcon","DropdownMenuLabel","DropdownMenuSeparator","DropdownMenuShortcut","DropdownMenuSub","DropdownMenuSubTrigger","ChevronRightIcon","DropdownMenuSubContent","Skeleton"],"mappings":"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","file":"chunk-HIHVCQ4Z.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DropdownMenu as DropdownMenuPrimitive } from 'radix-ui';\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from 'lucide-react';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n 'fk:z-50 fk:max-h-(--radix-dropdown-menu-content-available-height) fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-x-hidden fk:overflow-y-auto fk:rounded-md fk:border fk:bg-popover fk:p-1 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 className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = 'default',\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 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:data-[inset]:pl-8 fk:data-[variant=destructive]:text-destructive fk:data-[variant=destructive]:focus:bg-destructive/10 fk:data-[variant=destructive]:focus:text-destructive fk:dark:data-[variant=destructive]:focus:bg-destructive/20 fk:[&_svg]:pointer-events-none fk:[&_svg]:shrink-0 fk:[&_svg:not([class*='size-'])]:size-4 fk:[&_svg:not([class*='text-'])]:text-muted-foreground fk:data-[variant=destructive]:*:[svg]:text-destructive!\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 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\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"fk:relative fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:py-1.5 fk:pr-2 fk:pl-8 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\",\n className\n )}\n {...props}\n >\n <span className=\"fk:pointer-events-none fk:absolute fk:left-2 fk:flex fk:size-3.5 fk:items-center fk:justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn('fk:px-2 fk:py-1.5 fk:text-sm fk:font-medium fk:data-[inset]:pl-8', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('fk:-mx-1 fk:my-1 fk:h-px fk:bg-border', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('fk:ml-auto fk:text-xs fk:tracking-widest fk:text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"fk:flex fk:cursor-default fk:items-center fk:gap-2 fk:rounded-sm fk:px-2 fk:py-1.5 fk:text-sm fk:outline-hidden fk:select-none fk:focus:bg-accent fk:focus:text-accent-foreground fk:data-[inset]:pl-8 fk:data-[state=open]:bg-accent fk:data-[state=open]:text-accent-foreground 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 <ChevronRightIcon className=\"fk:ml-auto fk:size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'fk:z-50 fk:min-w-32 fk:origin-(--radix-dropdown-menu-content-transform-origin) fk:overflow-hidden fk:rounded-md fk:border fk:bg-popover fk:p-1 fk:text-popover-foreground fk:shadow-lg 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 className\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n","import { cn } from 'src/ui/lib/utils';\n\nfunction Skeleton({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"skeleton\" className={cn('fk:animate-pulse fk:rounded-md fk:bg-accent', className)} {...props} />\n );\n}\n\nexport { Skeleton };\n"]}
|
package/dist/chunk-R2HNLG6B.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import'./index.css';import {b as b$1}from'./chunk-Z5CZVKD4.js';import {c,e,f,h,g,i}from'./chunk-53TUQIKJ.js';import {a}from'./chunk-O2QMYUPS.js';import {jsx,jsxs}from'react/jsx-runtime';function b({className:r,...t}){return jsx("textarea",{"data-slot":"textarea",className:a("fk:flex fk:field-sizing-content fk:min-h-16 fk:w-full fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-2 fk:text-base fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:placeholder:text-muted-foreground 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:md:text-sm fk:dark:bg-input/30 fk:dark:aria-invalid:ring-destructive/40",r),...t})}function L({control:r,fieldSchema:t,setValue:n}){let{name:l,label:F,isEditable:x,options:m}=t;function g$1(e,o){n(l,{...o,value:e.currentTarget.value});}function h$1(e,o){n(l,{...o,disabled:e});}return jsx(c,{control:r,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:F}),m?.comment?jsx(h,{children:m.comment}):null]}),jsx("div",{className:"fk:h-full fk:self-end fk:ml-auto"})]}),jsx(g,{children:jsx(b,{className:`fk:w-full fk:mt-[0.1875rem] ${!e$1.value?.scope||e$1.value.scope==="default"?"fk:mb-3":""}`,disabled:x===false||e$1.value?.disabled,...e$1,onChange:o=>{g$1(o,e$1.value);},value:e$1.value?.value||""})}),jsx(b$1,{checked:e$1.value?.disabled??false,onChange:o=>{h$1(o,e$1.value);},scope:e$1.value?.scope}),jsx(i,{})]})})}export{L as a};//# sourceMappingURL=chunk-R2HNLG6B.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-R2HNLG6B.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/primitives/textarea.tsx","../src/form/fields/textarea.tsx"],"names":["Textarea","className","props","jsx","cn","control","fieldSchema","setValue","name","label","isEditable","options","handleInput","event","previousValue","handleCheckbox","checked","value","FormField","field","jsxs","FormItem","FormLabel","FormDescription","FormControl","DefaultValueSwitch","FormMessage"],"mappings":"0LAGA,SAASA,CAAAA,CAAS,CAAE,SAAA,CAAAC,CAAAA,CAAW,GAAGC,CAAM,CAAA,CAAqC,CAC3E,OACEC,GAAAA,CAAC,UAAA,CAAA,CACC,YAAU,UAAA,CACV,SAAA,CAAWC,EACT,+gBAAA,CACAH,CACF,CAAA,CACC,GAAGC,CAAAA,CACN,CAEJ,CCPO,SAASF,CAAAA,CAAS,CAAE,OAAA,CAAAK,CAAAA,CAAS,WAAA,CAAAC,EAAa,QAAA,CAAAC,CAAS,CAAA,CAA6C,CACrG,GAAM,CAAE,KAAAC,CAAAA,CAAM,KAAA,CAAAC,CAAAA,CAAO,UAAA,CAAAC,CAAAA,CAAY,OAAA,CAAAC,CAAQ,CAAA,CAAIL,CAAAA,CAE7C,SAASM,GAAAA,CACPC,CAAAA,CACAC,EACM,CACNP,CAAAA,CAASC,CAAAA,CAAM,CACb,GAAGM,CAAAA,CACH,MAAOD,CAAAA,CAAM,aAAA,CAAc,KAC7B,CAAC,EACH,CAEA,SAASE,GAAAA,CAAeC,CAAAA,CAAkBC,CAAAA,CAAyC,CACjFV,CAAAA,CAASC,EAAM,CACb,GAAGS,EACH,QAAA,CAAUD,CACZ,CAAC,EACH,CAEA,OACEb,GAAAA,CAACe,CAAAA,CAAA,CACC,QAASb,CAAAA,CACT,IAAA,CAAMG,CAAAA,CACN,MAAA,CAAQ,CAAC,CAAE,MAAAW,GAAM,CAAA,GACfC,IAAAA,CAACC,CAAAA,CAAA,CACC,QAAA,CAAA,CAAAD,KAAC,KAAA,CAAA,CAAI,SAAA,CAAU,UACb,QAAA,CAAA,CAAAA,IAAAA,CAAC,OAAI,SAAA,CAAU,WAAA,CACb,QAAA,CAAA,CAAAjB,GAAAA,CAACmB,CAAAA,CAAA,CAAW,SAAAb,CAAAA,CAAM,CAAA,CACjBE,GAAS,OAAA,CAAUR,GAAAA,CAACoB,EAAA,CAAiB,QAAA,CAAAZ,CAAAA,CAAQ,OAAA,CAAQ,CAAA,CAAqB,IAAA,CAAA,CAC7E,EACAR,GAAAA,CAAC,KAAA,CAAA,CAAI,UAAU,kCAAA,CAEf,CAAA,CAAA,CACF,EACAA,GAAAA,CAACqB,CAAAA,CAAA,CACC,QAAA,CAAArB,GAAAA,CAACH,CAAAA,CAAA,CACC,SAAA,CAAW,CAAA,4BAAA,EACT,CAACmB,GAAAA,CAAM,KAAA,EAAO,KAAA,EAASA,IAAM,KAAA,CAAM,KAAA,GAAU,SAAA,CAAY,SAAA,CAAY,EACvE,CAAA,CAAA,CACA,SAAUT,CAAAA,GAAe,KAAA,EAASS,IAAM,KAAA,EAAO,QAAA,CAC9C,GAAGA,GAAAA,CACJ,QAAA,CAAWN,CAAAA,EAAU,CACnBD,GAAAA,CAAYC,CAAAA,CAAOM,IAAM,KAAK,EAChC,EACA,KAAA,CAAQA,GAAAA,CAAM,OAAO,KAAA,EAAoB,EAAA,CAC3C,CAAA,CACF,CAAA,CACAhB,GAAAA,CAACsB,GAAAA,CAAA,CACC,OAAA,CAASN,GAAAA,CAAM,OAAO,QAAA,EAAY,KAAA,CAClC,SAAWH,CAAAA,EAAY,CACrBD,GAAAA,CAAeC,CAAAA,CAASG,GAAAA,CAAM,KAAK,EACrC,CAAA,CACA,KAAA,CAAOA,GAAAA,CAAM,KAAA,EAAO,KAAA,CACtB,CAAA,CACAhB,IAACuB,CAAAA,CAAA,EAAY,CAAA,CAAA,CACf,CAAA,CAEJ,CAEJ","file":"chunk-R2HNLG6B.js","sourcesContent":["import * as React from 'react';\nimport { cn } from 'src/ui/lib/utils';\n\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'fk:flex fk:field-sizing-content fk:min-h-16 fk:w-full fk:rounded-md fk:border fk:border-input fk:bg-background fk:px-3 fk:py-2 fk:text-base fk:shadow-xs fk:transition-[color,box-shadow] fk:outline-none fk:placeholder:text-muted-foreground 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:md:text-sm fk:dark:bg-input/30 fk:dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","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"]}
|
package/dist/chunk-TMK5LKFR.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import'./index.css';import {b}from'./chunk-WIUPQHZ5.js';var n="flexkit.io",o=`https://${n}`,t=i=>i?`https://${i}.api.${n}`:o,l="https://flexkit.io/images/";function p(i=""){return {authProviders:`/api/flexkit/${i}/auth/providers`,completion:`/api/flexkit/${i}/completion`,currentUser:`/api/flexkit/${i}/users/me`,loginOtpConfirm:`${t(i)}/auth/otp/confirm`,loginOtpSend:`${t(i)}/auth/otp/send`,logout:r=>{let a=new URLSearchParams({redirect:b(r,i)});return `/api/flexkit/${i}/auth/logout?${a.toString()}`},search:`/api/flexkit/${i}/search`,sessionId:`${t(i)}/api/auth/login/session`,upload:`/api/flexkit/${i}/upload`}}
|
|
2
|
-
export{o as a,l as b,p as c};//# sourceMappingURL=chunk-TMK5LKFR.js.map
|
|
3
|
-
//# sourceMappingURL=chunk-TMK5LKFR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/api-paths.ts"],"names":["domain","baseApiUrl","baseProjectApiUrl","projectId","IMAGES_BASE_URL","apiPaths","basePath","params","joinBasePath"],"mappings":"wDAEA,IAAMA,EAAS,YAAA,CACFC,CAAAA,CAAa,WAAWD,CAAM,CAAA,CAAA,CACrCE,EAAqBC,CAAAA,EACzBA,CAAAA,CAAY,CAAA,QAAA,EAAWA,CAAS,QAAQH,CAAM,CAAA,CAAA,CAAKC,EAcxCG,CAAAA,CAAkB,6BAExB,SAASC,CAAAA,CAASF,CAAAA,CAAY,EAAA,CAAc,CACjD,OAAO,CACL,aAAA,CAAe,gBAAgBA,CAAS,CAAA,eAAA,CAAA,CACxC,WAAY,CAAA,aAAA,EAAgBA,CAAS,cACrC,WAAA,CAAa,CAAA,aAAA,EAAgBA,CAAS,CAAA,SAAA,CAAA,CACtC,eAAA,CAAiB,GAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,iBAAA,CAAA,CAChD,YAAA,CAAc,CAAA,EAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,cAAA,CAAA,CAC7C,OAASG,CAAAA,EAAqB,CAC5B,IAAMC,CAAAA,CAAS,IAAI,eAAA,CAAgB,CACjC,SAAUC,CAAAA,CAAaF,CAAAA,CAAUH,CAAS,CAC5C,CAAC,EAED,OAAO,CAAA,aAAA,EAAgBA,CAAS,CAAA,aAAA,EAAgBI,EAAO,QAAA,EAAU,EACnE,CAAA,CACA,MAAA,CAAQ,gBAAgBJ,CAAS,CAAA,OAAA,CAAA,CACjC,UAAW,CAAA,EAAGD,CAAAA,CAAkBC,CAAS,CAAC,CAAA,uBAAA,CAAA,CAC1C,OAAQ,CAAA,aAAA,EAAgBA,CAAS,SACnC,CACF","file":"chunk-TMK5LKFR.js","sourcesContent":["import { joinBasePath } from './base-path';\n\nconst domain = 'flexkit.io';\nexport const baseApiUrl = `https://${domain}`;\nconst baseProjectApiUrl = (projectId?: string): string =>\n projectId ? `https://${projectId}.api.${domain}` : baseApiUrl;\n\ninterface ApiPaths {\n authProviders: string;\n completion: string;\n currentUser: string;\n loginOtpConfirm: string;\n loginOtpSend: string;\n logout: (basePath: string) => string;\n search: string;\n sessionId: string;\n upload: string;\n}\n\nexport const IMAGES_BASE_URL = 'https://flexkit.io/images/';\n\nexport function apiPaths(projectId = ''): ApiPaths {\n return {\n authProviders: `/api/flexkit/${projectId}/auth/providers`,\n completion: `/api/flexkit/${projectId}/completion`,\n currentUser: `/api/flexkit/${projectId}/users/me`,\n loginOtpConfirm: `${baseProjectApiUrl(projectId)}/auth/otp/confirm`,\n loginOtpSend: `${baseProjectApiUrl(projectId)}/auth/otp/send`,\n logout: (basePath: string) => {\n const params = new URLSearchParams({\n redirect: joinBasePath(basePath, projectId),\n });\n\n return `/api/flexkit/${projectId}/auth/logout?${params.toString()}`;\n },\n search: `/api/flexkit/${projectId}/search`,\n sessionId: `${baseProjectApiUrl(projectId)}/api/auth/login/session`,\n upload: `/api/flexkit/${projectId}/upload`,\n };\n}\n"]}
|