@kamod-ch/ui 0.2.1 → 1.1.0
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/README.md +103 -16
- package/dist/{AlertDialog-ALB541qy.d.ts → AlertDialog-GadhKjPC.d.ts} +1 -1
- package/dist/{DialogContent-CK1t4m4e.d.ts → DialogContent-cQHSRQdT.d.ts} +1 -1
- package/dist/{Drawer-B3pZMn5j.d.ts → Drawer-CdjXZxxK.d.ts} +1 -1
- package/dist/{Sheet-s0xRF22F.d.ts → Sheet-DZ-p-aHY.d.ts} +1 -1
- package/dist/SidebarProvider-Bx7-BdQn.d.ts +160 -0
- package/dist/chunk-24QD2FTA.js +722 -0
- package/dist/chunk-24QD2FTA.js.map +1 -0
- package/dist/{chunk-MJG6UKD4.js → chunk-262EK2XT.js} +9 -17
- package/dist/chunk-262EK2XT.js.map +1 -0
- package/dist/{chunk-7AJT2E2Y.js → chunk-3LIT5GWF.js} +2 -2
- package/dist/chunk-3LIT5GWF.js.map +1 -0
- package/dist/chunk-B47B6KK6.js +59 -0
- package/dist/chunk-B47B6KK6.js.map +1 -0
- package/dist/{chunk-JKXSX67K.js → chunk-EMUPVA2F.js} +4 -4
- package/dist/chunk-EMUPVA2F.js.map +1 -0
- package/dist/{chunk-26CRIZXP.js → chunk-HCTZJYHK.js} +19 -17
- package/dist/chunk-HCTZJYHK.js.map +1 -0
- package/dist/{chunk-4BJJOHZT.js → chunk-HHLQYMPT.js} +3 -3
- package/dist/{chunk-4BJJOHZT.js.map → chunk-HHLQYMPT.js.map} +1 -1
- package/dist/{chunk-YJGECAOZ.js → chunk-IQH3XSOI.js} +4 -4
- package/dist/{chunk-YJGECAOZ.js.map → chunk-IQH3XSOI.js.map} +1 -1
- package/dist/{chunk-LFJF3M6M.js → chunk-JSHUWI3C.js} +3 -3
- package/dist/{chunk-LFJF3M6M.js.map → chunk-JSHUWI3C.js.map} +1 -1
- package/dist/{chunk-2BQ54337.js → chunk-MJQ6R345.js} +2 -2
- package/dist/{chunk-2BQ54337.js.map → chunk-MJQ6R345.js.map} +1 -1
- package/dist/{chunk-PZS2D2QM.js → chunk-NILG56Z7.js} +3 -3
- package/dist/{chunk-PZS2D2QM.js.map → chunk-NILG56Z7.js.map} +1 -1
- package/dist/{chunk-2HZCH73K.js → chunk-STRBBF45.js} +5 -5
- package/dist/chunk-STRBBF45.js.map +1 -0
- package/dist/{chunk-YVALXJRN.js → chunk-TXKPDNRD.js} +7 -8
- package/dist/chunk-TXKPDNRD.js.map +1 -0
- package/dist/{chunk-YTJRKLUR.js → chunk-UARVH66B.js} +4 -4
- package/dist/{chunk-YTJRKLUR.js.map → chunk-UARVH66B.js.map} +1 -1
- package/dist/{chunk-ROKLAZHC.js → chunk-UIA74JVN.js} +3 -3
- package/dist/{chunk-ROKLAZHC.js.map → chunk-UIA74JVN.js.map} +1 -1
- package/dist/{chunk-BQP4UA44.js → chunk-X2YUFNK7.js} +3 -3
- package/dist/{chunk-BQP4UA44.js.map → chunk-X2YUFNK7.js.map} +1 -1
- package/dist/{chunk-3DNIMQX6.js → chunk-XNYAQZIB.js} +15 -9
- package/dist/chunk-XNYAQZIB.js.map +1 -0
- package/dist/components/alert-dialog/index.d.ts +3 -3
- package/dist/components/alert-dialog/index.js +3 -2
- package/dist/components/command/index.js +4 -3
- package/dist/components/context-menu/index.d.ts +1 -1
- package/dist/components/context-menu/index.js +2 -1
- package/dist/components/dialog/index.d.ts +3 -3
- package/dist/components/dialog/index.js +3 -2
- package/dist/components/drawer/index.d.ts +3 -3
- package/dist/components/drawer/index.js +4 -3
- package/dist/components/dropdown/index.js +1 -1
- package/dist/components/hover-card/index.js +1 -1
- package/dist/components/radio-group/index.js +2 -2
- package/dist/components/selectable-card/index.js +2 -2
- package/dist/components/sheet/index.d.ts +3 -3
- package/dist/components/sheet/index.js +4 -3
- package/dist/components/sidebar/index.d.ts +15 -10
- package/dist/components/sidebar/index.js +13 -1
- package/dist/components/tabs/index.js +1 -1
- package/dist/components/theme-toggle/index.js +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +18 -17
- package/package.json +15 -12
- package/LICENSE.md +0 -9
- package/dist/SidebarProvider-IAihmyD7.d.ts +0 -46
- package/dist/chunk-26CRIZXP.js.map +0 -1
- package/dist/chunk-2HZCH73K.js.map +0 -1
- package/dist/chunk-3DNIMQX6.js.map +0 -1
- package/dist/chunk-7AJT2E2Y.js.map +0 -1
- package/dist/chunk-JKXSX67K.js.map +0 -1
- package/dist/chunk-MJG6UKD4.js.map +0 -1
- package/dist/chunk-R565SY7K.js +0 -69
- package/dist/chunk-R565SY7K.js.map +0 -1
- package/dist/chunk-YVALXJRN.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/sidebar/use-mobile.ts","../src/components/sidebar/SidebarProvider.tsx","../src/components/sidebar/Sidebar.tsx","../src/components/sidebar/SidebarContent.tsx","../src/components/sidebar/SidebarFooter.tsx","../src/components/sidebar/slot.tsx","../src/components/sidebar/SidebarGroup.tsx","../src/components/sidebar/SidebarHeader.tsx","../src/components/sidebar/SidebarInset.tsx","../src/components/sidebar/SidebarMenu.tsx","../src/components/sidebar/SidebarRail.tsx","../src/components/sidebar/PanelLeftIcon.tsx","../src/components/sidebar/SidebarTrigger.tsx","../src/components/sidebar/index.ts"],"names":["useState","useEffect","jsx","jsxs","useMemo"],"mappings":"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","file":"chunk-24QD2FTA.js","sourcesContent":["import { useEffect, useState } from \"preact/hooks\";\n\nconst MOBILE_BREAKPOINT = 768;\n\nexport const useIsMobile = () => {\n const [isMobile, setIsMobile] = useState(false);\n\n 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 onChange();\n return () => mql.removeEventListener(\"change\", onChange);\n }, []);\n\n return isMobile;\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { createContext } from \"preact\";\nimport { useCallback, useContext, useEffect, useMemo, useState } from \"preact/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { TooltipProvider } from \"../tooltip\";\nimport { useIsMobile } from \"./use-mobile\";\n\nconst SIDEBAR_COOKIE_NAME = \"sidebar_state\";\nconst SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nconst SIDEBAR_WIDTH = \"16rem\";\nexport const SIDEBAR_WIDTH_MOBILE = \"18rem\";\nconst SIDEBAR_WIDTH_ICON = \"3rem\";\nconst SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n\nexport type SidebarContextValue = {\n state: \"expanded\" | \"collapsed\";\n open: boolean;\n setOpen: (open: boolean | ((prev: boolean) => boolean)) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean | ((prev: boolean) => boolean)) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextValue | null>(null);\n\nexport const useSidebar = () => {\n const context = useContext(SidebarContext);\n if (!context) throw new Error(\"Sidebar components must be used within SidebarProvider\");\n return context;\n};\n\nexport type SidebarProviderProps = JSX.HTMLAttributes<HTMLDivElement> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: ComponentChildren;\n};\n\nexport const SidebarProvider = ({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n class: className,\n style,\n children,\n ...rest\n}: SidebarProviderProps) => {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n\n const setOpen = useCallback(\n (value: boolean | ((prev: boolean) => boolean)) => {\n const openState = typeof value === \"function\" ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n if (typeof document !== \"undefined\") {\n document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n }\n },\n [setOpenProp, open],\n );\n\n const toggleSidebar = useCallback(() => {\n if (isMobile) {\n setOpenMobile((prev) => !prev);\n } else {\n setOpen((prev) => !prev);\n }\n }, [isMobile, setOpen]);\n\n 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 window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? \"expanded\" : \"collapsed\";\n\n const contextValue = useMemo<SidebarContextValue>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={{\n [\"--sidebar-width\" as string]: SIDEBAR_WIDTH,\n [\"--sidebar-width-icon\" as string]: SIDEBAR_WIDTH_ICON,\n ...(typeof style === \"object\" && style !== null ? style : {}),\n }}\n class={cn(\n \"group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar\",\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from \"../sheet\";\nimport { SIDEBAR_WIDTH_MOBILE, useSidebar } from \"./SidebarProvider\";\n\nexport type SidebarProps = JSX.HTMLAttributes<HTMLDivElement> & {\n side?: \"left\" | \"right\";\n variant?: \"sidebar\" | \"floating\" | \"inset\";\n collapsible?: \"offcanvas\" | \"icon\" | \"none\";\n children?: ComponentChildren;\n};\n\nexport const Sidebar = ({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n class: className,\n children,\n ...rest\n}: SidebarProps) => {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n class={cn(\n \"flex h-full w-(--sidebar-width) flex-col bg-sidebar text-sidebar-foreground\",\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n class={cn(\n \"w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden\",\n className,\n )}\n style={{ [\"--sidebar-width\" as string]: SIDEBAR_WIDTH_MOBILE }}\n side={side}\n >\n <SheetHeader class=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div class=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n class=\"group peer hidden text-sidebar-foreground 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 <div\n data-slot=\"sidebar-gap\"\n class={cn(\n \"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\",\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n class={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n side === \"left\"\n ? \"left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]\"\n : \"right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]\",\n variant === \"floating\" || variant === \"inset\"\n ? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className,\n )}\n {...rest}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n class=\"flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type SidebarContentProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarContent = ({ class: className, children, ...rest }: SidebarContentProps) => (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n class={cn(\n \"flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type SidebarFooterProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarFooter = ({ class: className, children, ...rest }: SidebarFooterProps) => (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n class={cn(\"flex flex-col gap-2 p-2\", className)}\n {...rest}\n >\n {children}\n </div>\n);\n","import { type ComponentChildren, cloneElement, isValidElement, type VNode } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\n/** Merge props onto a single element child (shadcn Slot / asChild). */\nexport const Slot = (props: Record<string, unknown> & { children?: ComponentChildren }) => {\n const { children, class: className, ...rest } = props;\n if (!isValidElement(children)) return null;\n const child = children as VNode<Record<string, unknown>>;\n const childProps = (child.props ?? {}) as Record<string, unknown>;\n return cloneElement(child, {\n ...rest,\n ...childProps,\n class: cn(\n className as string | undefined,\n childProps.class as string | undefined,\n childProps.className as string | undefined,\n ),\n });\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { Input, type InputProps } from \"../input/Input\";\nimport { Separator, type SeparatorProps } from \"../separator/Separator\";\nimport { Slot } from \"./slot\";\n\nexport type SidebarInputProps = InputProps;\n\nexport const SidebarInput = ({ class: className, ...rest }: SidebarInputProps) => (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n class={cn(\"h-8 w-full bg-background shadow-none\", className)}\n {...rest}\n />\n);\n\nexport type SidebarSeparatorProps = SeparatorProps;\n\nexport const SidebarSeparator = ({ class: className, ...rest }: SidebarSeparatorProps) => (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n class={cn(\"mx-2 w-auto bg-sidebar-border\", className)}\n {...rest}\n />\n);\n\nexport type SidebarGroupProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarGroup = ({ class: className, children, ...rest }: SidebarGroupProps) => (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n class={cn(\"relative flex w-full min-w-0 flex-col p-2\", className)}\n {...rest}\n >\n {children}\n </div>\n);\n\nexport type SidebarGroupLabelProps = JSX.HTMLAttributes<HTMLDivElement> & {\n asChild?: boolean;\n children?: ComponentChildren;\n};\n\nexport const SidebarGroupLabel = ({\n class: className,\n asChild = false,\n children,\n ...rest\n}: SidebarGroupLabelProps) => {\n const classes = cn(\n \"flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0\",\n className as string | undefined,\n );\n if (asChild) {\n return (\n <Slot\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n class={classes}\n {...(rest as Record<string, unknown>)}\n >\n {children}\n </Slot>\n );\n }\n return (\n <div data-slot=\"sidebar-group-label\" data-sidebar=\"group-label\" class={classes} {...rest}>\n {children}\n </div>\n );\n};\n\nexport type SidebarGroupActionProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n asChild?: boolean;\n children?: ComponentChildren;\n};\n\nexport const SidebarGroupAction = ({\n class: className,\n asChild = false,\n children,\n ...rest\n}: SidebarGroupActionProps) => {\n const classes = cn(\n \"absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"group-data-[collapsible=icon]:hidden\",\n className as string | undefined,\n );\n if (asChild) {\n return (\n <Slot\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n class={classes}\n {...(rest as Record<string, unknown>)}\n >\n {children}\n </Slot>\n );\n }\n return (\n <button\n type=\"button\"\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n class={classes}\n {...rest}\n >\n {children}\n </button>\n );\n};\n\nexport type SidebarGroupContentProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarGroupContent = ({\n class: className,\n children,\n ...rest\n}: SidebarGroupContentProps) => (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n class={cn(\"w-full text-sm\", className)}\n {...rest}\n >\n {children}\n </div>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type SidebarHeaderProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarHeader = ({ class: className, children, ...rest }: SidebarHeaderProps) => (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n class={cn(\"flex flex-col gap-2 p-2\", className)}\n {...rest}\n >\n {children}\n </div>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type SidebarInsetProps = JSX.HTMLAttributes<HTMLElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarInset = ({ class: className, children, ...rest }: SidebarInsetProps) => (\n <main\n data-slot=\"sidebar-inset\"\n class={cn(\n \"relative flex w-full flex-1 flex-col bg-background\",\n \"md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2\",\n className,\n )}\n {...rest}\n >\n {children}\n </main>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { useMemo } from \"preact/hooks\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../../lib/utils\";\nimport { Skeleton } from \"../skeleton\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../tooltip\";\nimport { useSidebar } from \"./SidebarProvider\";\nimport { Slot } from \"./slot\";\n\nexport type SidebarMenuProps = JSX.HTMLAttributes<HTMLUListElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarMenu = ({ class: className, children, ...rest }: SidebarMenuProps) => (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n class={cn(\"flex w-full min-w-0 flex-col gap-1\", className)}\n {...rest}\n >\n {children}\n </ul>\n);\n\nexport type SidebarMenuItemProps = JSX.HTMLAttributes<HTMLLIElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarMenuItem = ({ class: className, children, ...rest }: SidebarMenuItemProps) => (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n class={cn(\"group/menu-item relative\", className)}\n {...rest}\n >\n {children}\n </li>\n);\n\nexport const sidebarMenuButton = tv({\n base: [\n \"peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding]\",\n \"group-has-data-[sidebar=menu-action]/menu-item:pr-8\",\n \"group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!\",\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n \"focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground\",\n \"disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground\",\n \"data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground\",\n \"[&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0\",\n ],\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline:\n \"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]\",\n },\n size: {\n default: \"h-8 text-sm\",\n sm: \"h-7 text-xs\",\n lg: \"h-12 text-sm group-data-[collapsible=icon]:p-0!\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\n\nexport type SidebarMenuButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof sidebarMenuButton> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | JSX.HTMLAttributes<HTMLDivElement>;\n children?: ComponentChildren;\n };\n\nexport const SidebarMenuButton = ({\n asChild = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n class: className,\n children,\n ...rest\n}: SidebarMenuButtonProps) => {\n const { isMobile, state } = useSidebar();\n const classes = sidebarMenuButton({\n variant,\n size,\n class: className as string | undefined,\n });\n\n const button = asChild ? (\n <Slot\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n class={classes}\n {...(rest as Record<string, unknown>)}\n >\n {children}\n </Slot>\n ) : (\n <button\n type=\"button\"\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n class={classes}\n {...rest}\n >\n {children}\n </button>\n );\n\n if (!tooltip) return button;\n\n const tooltipProps =\n typeof tooltip === \"string\"\n ? { children: tooltip }\n : (tooltip as JSX.HTMLAttributes<HTMLDivElement>);\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"right\"\n align=\"center\"\n hidden={state !== \"collapsed\" || isMobile}\n {...tooltipProps}\n />\n </Tooltip>\n );\n};\n\nexport type SidebarMenuActionProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n asChild?: boolean;\n showOnHover?: boolean;\n children?: ComponentChildren;\n};\n\nexport const SidebarMenuAction = ({\n class: className,\n asChild = false,\n showOnHover = false,\n children,\n ...rest\n}: SidebarMenuActionProps) => {\n const classes = cn(\n \"absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground ring-sidebar-ring outline-hidden transition-transform peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0\",\n \"after:absolute after:-inset-2 md:after:hidden\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n showOnHover &&\n \"group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground data-[state=open]:opacity-100 md:opacity-0\",\n className as string | undefined,\n );\n if (asChild) {\n return (\n <Slot\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n class={classes}\n {...(rest as Record<string, unknown>)}\n >\n {children}\n </Slot>\n );\n }\n return (\n <button\n type=\"button\"\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n class={classes}\n {...rest}\n >\n {children}\n </button>\n );\n};\n\nexport type SidebarMenuBadgeProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarMenuBadge = ({\n class: className,\n children,\n ...rest\n}: SidebarMenuBadgeProps) => (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n class={cn(\n \"pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums select-none\",\n \"peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground\",\n \"peer-data-[size=sm]/menu-button:top-1\",\n \"peer-data-[size=default]/menu-button:top-1.5\",\n \"peer-data-[size=lg]/menu-button:top-2.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n\nexport type SidebarMenuSkeletonProps = JSX.HTMLAttributes<HTMLDivElement> & {\n showIcon?: boolean;\n};\n\nexport const SidebarMenuSkeleton = ({\n class: className,\n showIcon = false,\n ...rest\n}: SidebarMenuSkeletonProps) => {\n const width = useMemo(() => `${Math.floor(Math.random() * 40) + 50}%`, []);\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n class={cn(\"flex h-8 items-center gap-2 rounded-md px-2\", className)}\n {...rest}\n >\n {showIcon ? <Skeleton class=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" /> : null}\n <Skeleton\n class=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={{ [\"--skeleton-width\" as string]: width }}\n />\n </div>\n );\n};\n\nexport type SidebarMenuSubProps = JSX.HTMLAttributes<HTMLUListElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarMenuSub = ({ class: className, children, ...rest }: SidebarMenuSubProps) => (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n class={cn(\n \"mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5\",\n \"group-data-[collapsible=icon]:hidden\",\n className,\n )}\n {...rest}\n >\n {children}\n </ul>\n);\n\nexport type SidebarMenuSubItemProps = JSX.HTMLAttributes<HTMLLIElement> & {\n children?: ComponentChildren;\n};\n\nexport const SidebarMenuSubItem = ({\n class: className,\n children,\n ...rest\n}: SidebarMenuSubItemProps) => (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n class={cn(\"group/menu-sub-item relative\", className)}\n {...rest}\n >\n {children}\n </li>\n);\n\nexport type SidebarMenuSubButtonProps = JSX.AnchorHTMLAttributes<HTMLAnchorElement> & {\n asChild?: boolean;\n size?: \"sm\" | \"md\";\n isActive?: boolean;\n children?: ComponentChildren;\n};\n\nexport const SidebarMenuSubButton = ({\n asChild = false,\n size = \"md\",\n isActive = false,\n class: className,\n children,\n ...rest\n}: SidebarMenuSubButtonProps) => {\n const classes = cn(\n \"flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground\",\n \"data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground\",\n size === \"sm\" && \"text-xs\",\n size === \"md\" && \"text-sm\",\n \"group-data-[collapsible=icon]:hidden\",\n className as string | undefined,\n );\n if (asChild) {\n return (\n <Slot\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n class={classes}\n {...(rest as Record<string, unknown>)}\n >\n {children}\n </Slot>\n );\n }\n return (\n <a\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n class={classes}\n {...rest}\n >\n {children}\n </a>\n );\n};\n","import type { JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { useSidebar } from \"./SidebarProvider\";\n\nexport type SidebarRailProps = JSX.ButtonHTMLAttributes<HTMLButtonElement>;\n\nexport const SidebarRail = ({ class: className, ...rest }: SidebarRailProps) => {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n type=\"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 class={cn(\n \"absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border sm:flex\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full hover:group-data-[collapsible=offcanvas]:bg-sidebar\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className,\n )}\n {...rest}\n />\n );\n};\n","import type { JSX } from \"preact\";\n\n/** Inline panel icon so @kamod-ch/ui stays free of lucide as a hard dependency. */\nexport const PanelLeftIcon = (props: JSX.SVGAttributes<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M9 3v18\" />\n </svg>\n);\n","import type { JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../button/Button\";\nimport { PanelLeftIcon } from \"./PanelLeftIcon\";\nimport { useSidebar } from \"./SidebarProvider\";\n\nexport type SidebarTriggerProps = Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"size\"> & {\n class?: string;\n};\n\nexport const SidebarTrigger = ({ class: className, onClick, ...rest }: SidebarTriggerProps) => {\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 class={cn(\"size-7\", className)}\n aria-label=\"Toggle Sidebar\"\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...rest}\n >\n <PanelLeftIcon />\n <span class=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n};\n","import { Sidebar } from \"./Sidebar\";\nimport { SidebarContent } from \"./SidebarContent\";\nimport { SidebarFooter } from \"./SidebarFooter\";\nimport {\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarInput,\n SidebarSeparator,\n} from \"./SidebarGroup\";\nimport { SidebarHeader } from \"./SidebarHeader\";\nimport { SidebarInset } from \"./SidebarInset\";\nimport {\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n} from \"./SidebarMenu\";\nimport { SidebarProvider, useSidebar } from \"./SidebarProvider\";\nimport { SidebarRail } from \"./SidebarRail\";\nimport { SidebarTrigger } from \"./SidebarTrigger\";\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\nexport default {\n Provider: SidebarProvider,\n Root: Sidebar,\n Trigger: SidebarTrigger,\n Header: SidebarHeader,\n Content: SidebarContent,\n Footer: SidebarFooter,\n Inset: SidebarInset,\n Rail: SidebarRail,\n Group: SidebarGroup,\n Menu: SidebarMenu,\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Button } from './chunk-5FBD2NTR.js';
|
|
2
2
|
import { cn } from './chunk-MS2ZNYCJ.js';
|
|
3
|
-
import {
|
|
3
|
+
import { syncThemeFromStorage, resolvedColorSchemeSignal, setColorScheme } from '@kamod-ch/themes';
|
|
4
|
+
import { useEffect } from 'preact/hooks';
|
|
4
5
|
import { jsx, jsxs } from 'preact/jsx-runtime';
|
|
5
6
|
|
|
6
7
|
var SunIcon = ({ class: className }) => /* @__PURE__ */ jsxs(
|
|
@@ -41,21 +42,11 @@ var MoonIcon = ({ class: className }) => /* @__PURE__ */ jsx(
|
|
|
41
42
|
children: /* @__PURE__ */ jsx("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" })
|
|
42
43
|
}
|
|
43
44
|
);
|
|
44
|
-
var resolveInitialDarkMode = () => {
|
|
45
|
-
if (typeof window === "undefined") return false;
|
|
46
|
-
const stored = window.localStorage.getItem("theme");
|
|
47
|
-
if (stored === "dark") return true;
|
|
48
|
-
if (stored === "light") return false;
|
|
49
|
-
return window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
50
|
-
};
|
|
51
45
|
var ThemeToggle = ({ children, onClick, ...rest }) => {
|
|
52
|
-
const [darkMode, setDarkMode] = useState(resolveInitialDarkMode);
|
|
53
46
|
useEffect(() => {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
}, [darkMode]);
|
|
47
|
+
syncThemeFromStorage();
|
|
48
|
+
}, []);
|
|
49
|
+
const darkMode = resolvedColorSchemeSignal.value === "dark";
|
|
59
50
|
return /* @__PURE__ */ jsx(
|
|
60
51
|
Button,
|
|
61
52
|
{
|
|
@@ -66,7 +57,8 @@ var ThemeToggle = ({ children, onClick, ...rest }) => {
|
|
|
66
57
|
"data-state": darkMode ? "dark" : "light",
|
|
67
58
|
"aria-label": children == null ? darkMode ? "Light mode" : "Dark mode" : void 0,
|
|
68
59
|
onClick: (event) => {
|
|
69
|
-
|
|
60
|
+
const next = resolvedColorSchemeSignal.value === "dark" ? "light" : "dark";
|
|
61
|
+
setColorScheme(next);
|
|
70
62
|
onClick?.(event);
|
|
71
63
|
},
|
|
72
64
|
...rest,
|
|
@@ -79,5 +71,5 @@ var ThemeToggle = ({ children, onClick, ...rest }) => {
|
|
|
79
71
|
var theme_toggle_default = ThemeToggle;
|
|
80
72
|
|
|
81
73
|
export { ThemeToggle, theme_toggle_default };
|
|
82
|
-
//# sourceMappingURL=chunk-
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
74
|
+
//# sourceMappingURL=chunk-262EK2XT.js.map
|
|
75
|
+
//# sourceMappingURL=chunk-262EK2XT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/theme-toggle/ThemeToggle.tsx","../src/components/theme-toggle/index.ts"],"names":[],"mappings":"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","file":"chunk-262EK2XT.js","sourcesContent":["import { resolvedColorSchemeSignal, setColorScheme, syncThemeFromStorage } from \"@kamod-ch/themes\";\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { useEffect } from \"preact/hooks\";\nimport { cn } from \"../../lib/utils\";\nimport { Button } from \"../button\";\n\nexport type ThemeToggleProps = Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"class\"> & {\n class?: string;\n children?: ComponentChildren;\n};\n\nconst SunIcon = ({ class: className }: { class?: string }) => (\n <svg\n class={cn(\"size-4 shrink-0\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </svg>\n);\n\nconst MoonIcon = ({ class: className }: { class?: string }) => (\n <svg\n class={cn(\"size-4 shrink-0\", className)}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z\" />\n </svg>\n);\n\nexport const ThemeToggle = ({ children, onClick, ...rest }: ThemeToggleProps) => {\n useEffect(() => {\n syncThemeFromStorage();\n }, []);\n\n const darkMode = resolvedColorSchemeSignal.value === \"dark\";\n\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n data-slot=\"theme-toggle\"\n data-state={darkMode ? \"dark\" : \"light\"}\n aria-label={children == null ? (darkMode ? \"Light mode\" : \"Dark mode\") : undefined}\n onClick={(event) => {\n const next = resolvedColorSchemeSignal.value === \"dark\" ? \"light\" : \"dark\";\n setColorScheme(next);\n onClick?.(event);\n }}\n {...rest}\n >\n {children ?? (darkMode ? <SunIcon /> : <MoonIcon />)}\n </Button>\n );\n};\n","import { ThemeToggle } from \"./ThemeToggle\";\n\nexport { ThemeToggle };\n\nexport default ThemeToggle;\n"]}
|
|
@@ -620,5 +620,5 @@ var dropdown_default = {
|
|
|
620
620
|
};
|
|
621
621
|
|
|
622
622
|
export { Dropdown, DropdownCheckboxItem, DropdownContent, DropdownGroup, DropdownItem, DropdownLabel, DropdownPortal, DropdownRadioGroup, DropdownRadioItem, DropdownSeparator, DropdownShortcut, DropdownSub, DropdownSubContent, DropdownSubTrigger, DropdownTrigger, dropdown_default };
|
|
623
|
-
//# sourceMappingURL=chunk-
|
|
624
|
-
//# sourceMappingURL=chunk-
|
|
623
|
+
//# sourceMappingURL=chunk-3LIT5GWF.js.map
|
|
624
|
+
//# sourceMappingURL=chunk-3LIT5GWF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/dropdown/Dropdown.tsx","../src/components/dropdown/DropdownCheckboxItem.tsx","../src/components/dropdown/DropdownContent.tsx","../src/components/dropdown/DropdownGroup.tsx","../src/components/dropdown/DropdownItem.tsx","../src/components/dropdown/DropdownLabel.tsx","../src/components/dropdown/DropdownPortal.tsx","../src/components/dropdown/dropdown-radio-context.tsx","../src/components/dropdown/DropdownRadioGroup.tsx","../src/components/dropdown/DropdownRadioItem.tsx","../src/components/dropdown/DropdownSeparator.tsx","../src/components/dropdown/DropdownShortcut.tsx","../src/components/dropdown/dropdown-sub-context.tsx","../src/components/dropdown/DropdownSub.tsx","../src/components/dropdown/DropdownSubContent.tsx","../src/components/dropdown/DropdownSubTrigger.tsx","../src/components/dropdown/DropdownTrigger.tsx","../src/components/dropdown/index.ts"],"names":["useMemo","signal","useEffect","jsx","tv","createContext","useContext","useRef","jsxs"],"mappings":"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","file":"chunk-3LIT5GWF.js","sourcesContent":["import { signal } from \"@preact/signals\";\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { createContext } from \"preact\";\nimport { useContext, useEffect, useMemo, useRef } from \"preact/hooks\";\nimport { tv } from \"tailwind-variants\";\nimport { createDismissableLayer, createIdFactory } from \"../../lib/interactive\";\n\nexport type DropdownContextValue = {\n open: ReturnType<typeof signal<boolean>>;\n setOpen: (next: boolean) => void;\n triggerId: string;\n contentId: string;\n rootRef: { current: HTMLDivElement | null };\n triggerRef: { current: HTMLElement | null };\n contentRef: { current: HTMLDivElement | null };\n};\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\nconst nextDropdownId = createIdFactory(\"kamod-dropdown\");\n\nexport const useDropdown = () => {\n const context = useContext(DropdownContext);\n if (!context) throw new Error(\"Dropdown subcomponents must be used within Dropdown\");\n return context;\n};\n\nconst dropdownRoot = tv({\n base: \"relative inline-flex\",\n});\n\nexport type DropdownProps = JSX.HTMLAttributes<HTMLDivElement> & {\n defaultOpen?: boolean;\n children?: ComponentChildren;\n};\n\nexport const Dropdown = ({\n defaultOpen = false,\n class: className,\n children,\n ...rest\n}: DropdownProps) => {\n const open = useMemo(() => signal(defaultOpen), []);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n const instanceId = useMemo(() => nextDropdownId(), []);\n\n useEffect(() => {\n const layer = createDismissableLayer({\n root: () => rootRef.current,\n open: () => open.value,\n onDismiss: () => {\n open.value = false;\n },\n });\n return () => layer.dispose();\n }, []);\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen: (next) => {\n open.value = next;\n },\n triggerId: `${instanceId}-trigger`,\n contentId: `${instanceId}-content`,\n rootRef,\n triggerRef,\n contentRef,\n }}\n >\n <div\n ref={rootRef}\n class={dropdownRoot({ class: className as string | undefined })}\n data-slot=\"dropdown\"\n data-state={open.value ? \"open\" : \"closed\"}\n {...rest}\n >\n {children}\n </div>\n </DropdownContext.Provider>\n );\n};\n","import { signal } from \"@preact/signals\";\nimport type { ComponentChildren, JSX } from \"preact\";\nimport { useEffect, useMemo } from \"preact/hooks\";\nimport { cn } from \"../../lib/utils\";\n\nexport type DropdownCheckboxItemProps = Omit<\n JSX.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\"\n> & {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n children?: ComponentChildren;\n};\n\nexport const DropdownCheckboxItem = ({\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n class: className,\n children,\n onClick,\n ...rest\n}: DropdownCheckboxItemProps) => {\n const internal = useMemo(() => signal(defaultChecked), []);\n const isControlled = checkedProp !== undefined;\n\n useEffect(() => {\n if (checkedProp !== undefined) {\n internal.value = checkedProp;\n }\n }, [checkedProp, internal]);\n\n const checked = isControlled ? Boolean(checkedProp) : internal.value;\n\n return (\n <button\n type=\"button\"\n role=\"menuitemcheckbox\"\n data-slot=\"dropdown-checkbox-item\"\n aria-checked={checked}\n class={cn(\n \"relative flex w-full cursor-default select-none items-center gap-1 rounded-sm py-0.5 ps-7 pe-1.5 text-sm outline-none transition-colors duration-100\",\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n const next = !checked;\n if (!isControlled) {\n internal.value = next;\n }\n onCheckedChange?.(next);\n }}\n {...rest}\n >\n <span\n class=\"pointer-events-none absolute start-1.5 flex size-3 items-center justify-center\"\n aria-hidden\n >\n {checked ? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"size-3.5\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n ) : null}\n </span>\n {children}\n </button>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { useDropdown } from \"./Dropdown\";\n\nconst positionBySide = {\n top: \"bottom-full\",\n bottom: \"top-full\",\n left: \"right-full\",\n right: \"left-full\",\n} as const;\n\nconst alignByAxis = {\n vertical: {\n start: \"left-0\",\n center: \"left-1/2 -translate-x-1/2\",\n end: \"right-0\",\n },\n horizontal: {\n start: \"top-0\",\n center: \"top-1/2 -translate-y-1/2\",\n end: \"bottom-0\",\n },\n} as const;\n\nexport const dropdownContent = tv({\n base: [\n // overflow-x visible so DropdownSubContent (absolute start-full) is not clipped; keep vertical scroll for long menus\n \"bg-white text-popover-foreground z-50 flex min-w-[7rem] flex-col gap-0 overflow-x-visible overflow-y-auto rounded-lg p-px shadow-md outline-none ring-1 ring-foreground/10 dark:bg-popover\",\n \"dark:ring-foreground/15\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-100\",\n \"data-[state=closed]:animate-out data-[state=closed]:fill-mode-forwards data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-100\",\n \"absolute isolate max-h-96\",\n ],\n variants: {\n side: {\n bottom: \"slide-in-from-top-2\",\n top: \"slide-in-from-bottom-2\",\n right: \"slide-in-from-left-2\",\n left: \"slide-in-from-right-2\",\n },\n },\n defaultVariants: {\n side: \"bottom\",\n },\n});\n\nexport type DropdownContentProps = JSX.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof dropdownContent> & {\n forceMount?: boolean;\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\n align?: \"start\" | \"center\" | \"end\";\n sideOffset?: number;\n children?: ComponentChildren;\n };\n\nexport const DropdownContent = ({\n forceMount = false,\n side = \"bottom\",\n align = \"start\",\n sideOffset = 4,\n class: className,\n style,\n children,\n onKeyDown,\n ...rest\n}: DropdownContentProps) => {\n const dropdown = useDropdown();\n if (!dropdown.open.value && !forceMount) return null;\n\n const isVertical = side === \"top\" || side === \"bottom\";\n const alignClass = isVertical ? alignByAxis.vertical[align] : alignByAxis.horizontal[align];\n const inlineStyle = typeof style === \"object\" && style !== null ? style : undefined;\n const offsetStyle: JSX.CSSProperties =\n side === \"bottom\"\n ? { marginTop: `${sideOffset}px` }\n : side === \"top\"\n ? { marginBottom: `${sideOffset}px` }\n : side === \"right\"\n ? { marginLeft: `${sideOffset}px` }\n : { marginRight: `${sideOffset}px` };\n\n return (\n <div\n ref={(node) => {\n dropdown.contentRef.current = node;\n }}\n id={dropdown.contentId}\n role=\"menu\"\n tabIndex={-1}\n aria-labelledby={dropdown.triggerId}\n data-slot=\"dropdown-content\"\n data-side={side}\n data-align={align}\n data-state={dropdown.open.value ? \"open\" : \"closed\"}\n class={`${positionBySide[side]} ${alignClass} ${dropdownContent({ side, class: className as string | undefined })}`}\n style={inlineStyle ? { ...offsetStyle, ...inlineStyle } : offsetStyle}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n dropdown.setOpen(false);\n dropdown.triggerRef.current?.focus();\n return;\n }\n onKeyDown?.(event);\n }}\n {...rest}\n >\n {children}\n </div>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type DropdownGroupProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const DropdownGroup = ({ class: className, children, ...rest }: DropdownGroupProps) => (\n <div role=\"group\" data-slot=\"dropdown-group\" class={cn(\"p-1\", className)} {...rest}>\n {children}\n </div>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { useDropdown } from \"./Dropdown\";\n\nexport const dropdownItem = tv({\n base: [\n \"relative flex w-full cursor-default select-none items-center gap-1 rounded-sm px-1 py-0.5 text-sm outline-none transition-colors duration-100 ease-out\",\n \"text-popover-foreground hover:bg-accent hover:text-accent-foreground\",\n \"focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5\",\n ],\n variants: {\n variant: {\n default: \"\",\n destructive:\n \"text-destructive hover:bg-destructive/10 hover:text-destructive focus:bg-destructive/10 focus:text-destructive dark:focus:bg-destructive/20 [&_svg]:text-destructive\",\n },\n inset: {\n true: \"ps-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n inset: false,\n },\n});\n\nexport type DropdownItemProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> &\n VariantProps<typeof dropdownItem> & {\n children?: ComponentChildren;\n };\n\nexport const DropdownItem = ({\n inset = false,\n variant = \"default\",\n class: className,\n children,\n onClick,\n ...rest\n}: DropdownItemProps) => {\n const dropdown = useDropdown();\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-slot=\"dropdown-item\"\n data-inset={inset ? \"true\" : undefined}\n data-variant={variant}\n class={dropdownItem({ inset, variant, class: className as string | undefined })}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n dropdown.setOpen(false);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type DropdownLabelProps = JSX.HTMLAttributes<HTMLDivElement> & {\n inset?: boolean;\n children?: ComponentChildren;\n};\n\nexport const DropdownLabel = ({\n inset = false,\n class: className,\n children,\n ...rest\n}: DropdownLabelProps) => (\n <div\n data-slot=\"dropdown-label\"\n data-inset={inset ? \"true\" : undefined}\n class={cn(\n \"text-muted-foreground px-1 py-0.5 text-xs font-semibold\",\n inset && \"ps-6\",\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\n\n/** No-op wrapper for API parity with shadcn; content stays in the tree (no portal). */\nexport type DropdownPortalProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const DropdownPortal = ({ children, ...rest }: DropdownPortalProps) => (\n <div data-slot=\"dropdown-portal\" {...rest}>\n {children}\n </div>\n);\n","import { signal } from \"@preact/signals\";\nimport { createContext } from \"preact\";\nimport { useContext, useEffect, useMemo, useRef } from \"preact/hooks\";\n\nexport type DropdownRadioContextValue = {\n value: ReturnType<typeof signal<string>>;\n setValue: (next: string) => void;\n};\n\nconst DropdownRadioContext = createContext<DropdownRadioContextValue | null>(null);\n\nexport const DropdownRadioProvider = DropdownRadioContext.Provider;\n\nexport const useDropdownRadio = () => {\n const ctx = useContext(DropdownRadioContext);\n if (!ctx) throw new Error(\"DropdownRadioItem must be used within DropdownRadioGroup\");\n return ctx;\n};\n\nexport const useDropdownRadioRoot = (\n defaultValue: string,\n valueProp: string | undefined,\n onValueChange: ((v: string) => void) | undefined,\n): DropdownRadioContextValue => {\n const internal = useMemo(() => signal(valueProp ?? defaultValue), []);\n const controlledRef = useRef(false);\n controlledRef.current = valueProp !== undefined;\n\n useEffect(() => {\n if (valueProp !== undefined) {\n internal.value = valueProp;\n }\n }, [valueProp, internal]);\n\n const onValueChangeRef = useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n\n return useMemo(\n (): DropdownRadioContextValue => ({\n value: internal,\n setValue: (next: string) => {\n if (!controlledRef.current) {\n internal.value = next;\n }\n onValueChangeRef.current?.(next);\n },\n }),\n [internal],\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { DropdownRadioProvider, useDropdownRadioRoot } from \"./dropdown-radio-context\";\n\nexport type DropdownRadioGroupProps = JSX.HTMLAttributes<HTMLDivElement> & {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n children?: ComponentChildren;\n};\n\nexport const DropdownRadioGroup = ({\n value,\n defaultValue = \"\",\n onValueChange,\n children,\n ...rest\n}: DropdownRadioGroupProps) => {\n const ctx = useDropdownRadioRoot(defaultValue, value, onValueChange);\n\n return (\n <DropdownRadioProvider value={ctx}>\n <div role=\"group\" data-slot=\"dropdown-radio-group\" {...rest}>\n {children}\n </div>\n </DropdownRadioProvider>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { useDropdown } from \"./Dropdown\";\nimport { useDropdownRadio } from \"./dropdown-radio-context\";\n\nexport type DropdownRadioItemProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n value: string;\n children?: ComponentChildren;\n};\n\nexport const DropdownRadioItem = ({\n value,\n class: className,\n children,\n onClick,\n ...rest\n}: DropdownRadioItemProps) => {\n const dropdown = useDropdown();\n const radio = useDropdownRadio();\n const selected = radio.value.value === value;\n\n return (\n <button\n type=\"button\"\n role=\"menuitemradio\"\n data-slot=\"dropdown-radio-item\"\n aria-checked={selected}\n class={cn(\n \"relative flex w-full cursor-default select-none items-center gap-1 rounded-sm py-0.5 ps-7 pe-1.5 text-sm outline-none transition-colors duration-100\",\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground\",\n \"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className,\n )}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n radio.setValue(value);\n dropdown.setOpen(false);\n }}\n {...rest}\n >\n <span\n class=\"pointer-events-none absolute start-1.5 flex size-3 items-center justify-center\"\n aria-hidden\n >\n {selected ? <span class=\"size-1.5 rounded-full bg-current\" /> : null}\n </span>\n {children}\n </button>\n );\n};\n","import type { JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type DropdownSeparatorProps = JSX.HTMLAttributes<HTMLDivElement>;\n\nexport const DropdownSeparator = ({ class: className, ...rest }: DropdownSeparatorProps) => (\n <div\n role=\"separator\"\n data-slot=\"dropdown-separator\"\n class={cn(\"bg-border -mx-px my-px h-px\", className)}\n {...rest}\n />\n);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\n\nexport type DropdownShortcutProps = JSX.HTMLAttributes<HTMLSpanElement> & {\n children?: ComponentChildren;\n};\n\nexport const DropdownShortcut = ({\n class: className,\n children,\n ...rest\n}: DropdownShortcutProps) => (\n <span\n data-slot=\"dropdown-shortcut\"\n class={cn(\"text-muted-foreground ms-auto text-xs tracking-widest opacity-70\", className)}\n {...rest}\n >\n {children}\n </span>\n);\n","import { signal } from \"@preact/signals\";\nimport type { ComponentChildren } from \"preact\";\nimport { createContext } from \"preact\";\nimport { useContext, useMemo } from \"preact/hooks\";\n\nexport type DropdownSubContextValue = {\n open: ReturnType<typeof signal<boolean>>;\n setOpen: (next: boolean) => void;\n};\n\nconst DropdownSubContext = createContext<DropdownSubContextValue | null>(null);\n\nexport const DropdownSubProvider = ({\n children,\n value,\n}: {\n children: ComponentChildren;\n value: DropdownSubContextValue;\n}) => <DropdownSubContext.Provider value={value}>{children}</DropdownSubContext.Provider>;\n\nexport const useDropdownSub = () => {\n const ctx = useContext(DropdownSubContext);\n if (!ctx) throw new Error(\"Dropdown subcomponents must be used within DropdownSub\");\n return ctx;\n};\n\nexport const useMemoDropdownSub = (): DropdownSubContextValue =>\n useMemo(() => {\n const open = signal(false);\n return {\n open,\n setOpen: (next) => {\n open.value = next;\n },\n };\n }, []);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownSubProvider, useMemoDropdownSub } from \"./dropdown-sub-context\";\n\nexport type DropdownSubProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const DropdownSub = ({ class: className, children, ...rest }: DropdownSubProps) => {\n const ctx = useMemoDropdownSub();\n\n return (\n <DropdownSubProvider value={ctx}>\n <div\n data-slot=\"dropdown-sub\"\n class={cn(\"relative\", className)}\n onPointerLeave={() => {\n ctx.setOpen(false);\n }}\n {...rest}\n >\n {children}\n </div>\n </DropdownSubProvider>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { useDropdownSub } from \"./dropdown-sub-context\";\n\nexport type DropdownSubContentProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n /** `inline-end` (default): opens toward inline end (right in LTR). `inline-start`: toward inline start (left in LTR) — use near the viewport edge to avoid horizontal page scroll. */\n side?: \"inline-end\" | \"inline-start\";\n};\n\nexport const DropdownSubContent = ({\n class: className,\n children,\n onPointerEnter,\n side = \"inline-end\",\n ...rest\n}: DropdownSubContentProps) => {\n const sub = useDropdownSub();\n\n if (!sub.open.value) return null;\n\n const sidePosition =\n side === \"inline-start\"\n ? \"end-full me-0.5 rtl:ms-0.5 rtl:me-0\"\n : \"start-full ms-0.5 rtl:me-0.5 rtl:ms-0\";\n\n return (\n <div\n role=\"menu\"\n data-slot=\"dropdown-sub-content\"\n data-side={side}\n data-state=\"open\"\n class={cn(\n \"absolute top-0 z-50 min-w-[7rem] max-h-[min(24rem,calc(100dvh-2rem))] overflow-x-hidden overflow-y-auto rounded-lg bg-white p-px text-popover-foreground shadow-md outline-none ring-1 ring-foreground/10 dark:bg-popover dark:ring-foreground/15\",\n sidePosition,\n className,\n )}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n sub.setOpen(true);\n }}\n {...rest}\n >\n {children}\n </div>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { useDropdownSub } from \"./dropdown-sub-context\";\n\nconst ChevronRight = ({ class: className }: { class?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class={cn(\"size-3.5 shrink-0 rtl:rotate-180\", className)}\n aria-hidden\n >\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n);\n\nexport type DropdownSubTriggerProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n children?: ComponentChildren;\n};\n\nexport const DropdownSubTrigger = ({\n class: className,\n children,\n onClick,\n onPointerEnter,\n ...rest\n}: DropdownSubTriggerProps) => {\n const sub = useDropdownSub();\n const open = sub.open.value;\n\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n data-slot=\"dropdown-sub-trigger\"\n data-state={open ? \"open\" : \"closed\"}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n class={cn(\n \"flex w-full cursor-default select-none items-center gap-1 rounded-sm px-1 py-0.5 text-start text-sm outline-none transition-colors duration-100\",\n \"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground\",\n \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n \"[&_svg]:shrink-0\",\n className,\n )}\n onPointerEnter={(e) => {\n onPointerEnter?.(e);\n if (e.defaultPrevented) return;\n sub.setOpen(true);\n }}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n sub.setOpen(!open);\n }}\n {...rest}\n >\n {children}\n <ChevronRight class=\"ms-auto\" />\n </button>\n );\n};\n","import { type ComponentChildren, cloneElement, isValidElement, type JSX } from \"preact\";\nimport { tv } from \"tailwind-variants\";\nimport { useDropdown } from \"./Dropdown\";\n\nconst dropdownTrigger = tv({\n base: [\n \"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap\",\n \"focus-visible:ring-outline/50 transition-[color,box-shadow] outline-none focus-visible:ring-3\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground\",\n \"h-9 px-4 py-2\",\n ],\n});\n\nexport type DropdownTriggerProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n asChild?: boolean;\n children?: ComponentChildren;\n};\n\nconst callRef = <T extends HTMLElement>(ref: unknown, node: T | null) => {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref && typeof ref === \"object\" && \"current\" in ref) {\n (ref as { current: T | null }).current = node;\n }\n};\n\nexport const DropdownTrigger = ({\n asChild = false,\n class: className,\n children,\n onClick,\n ref: outerRef,\n ...rest\n}: DropdownTriggerProps) => {\n const dropdown = useDropdown();\n\n const handleClick = (event: JSX.TargetedMouseEvent<HTMLElement>) => {\n onClick?.(event as JSX.TargetedMouseEvent<HTMLButtonElement>);\n if (event.defaultPrevented) return;\n dropdown.setOpen(!dropdown.open.value);\n };\n\n if (asChild) {\n if (!isValidElement(children)) {\n return null;\n }\n\n const childProps = (children.props ?? {}) as JSX.HTMLAttributes<HTMLElement> & {\n ref?: unknown;\n onClick?: (event: JSX.TargetedMouseEvent<HTMLElement>) => void;\n };\n\n return cloneElement(children, {\n ...(childProps as Record<string, unknown>),\n ...(rest as Record<string, unknown>),\n id: dropdown.triggerId,\n \"aria-controls\": dropdown.contentId,\n \"aria-haspopup\": \"menu\",\n \"aria-expanded\": dropdown.open.value,\n \"data-slot\": \"dropdown-trigger\",\n \"data-state\": dropdown.open.value ? \"open\" : \"closed\",\n onClick: (event: JSX.TargetedMouseEvent<HTMLElement>) => {\n childProps.onClick?.(event);\n handleClick(event);\n },\n ref: (node: HTMLElement | null) => {\n dropdown.triggerRef.current = node;\n callRef(childProps.ref, node);\n callRef(outerRef, node);\n },\n } as never);\n }\n\n return (\n <button\n ref={(node) => {\n dropdown.triggerRef.current = node;\n callRef(outerRef, node);\n }}\n id={dropdown.triggerId}\n type=\"button\"\n class={dropdownTrigger({ class: className as string | undefined })}\n data-slot=\"dropdown-trigger\"\n data-state={dropdown.open.value ? \"open\" : \"closed\"}\n aria-controls={dropdown.contentId}\n aria-haspopup=\"menu\"\n aria-expanded={dropdown.open.value}\n onClick={(event) => handleClick(event as unknown as JSX.TargetedMouseEvent<HTMLElement>)}\n {...rest}\n >\n {children}\n </button>\n );\n};\n","import { Dropdown } from \"./Dropdown\";\nimport { DropdownCheckboxItem } from \"./DropdownCheckboxItem\";\nimport { DropdownContent } from \"./DropdownContent\";\nimport { DropdownGroup } from \"./DropdownGroup\";\nimport { DropdownItem } from \"./DropdownItem\";\nimport { DropdownLabel } from \"./DropdownLabel\";\nimport { DropdownPortal } from \"./DropdownPortal\";\nimport { DropdownRadioGroup } from \"./DropdownRadioGroup\";\nimport { DropdownRadioItem } from \"./DropdownRadioItem\";\nimport { DropdownSeparator } from \"./DropdownSeparator\";\nimport { DropdownShortcut } from \"./DropdownShortcut\";\nimport { DropdownSub } from \"./DropdownSub\";\nimport { DropdownSubContent } from \"./DropdownSubContent\";\nimport { DropdownSubTrigger } from \"./DropdownSubTrigger\";\nimport { DropdownTrigger } from \"./DropdownTrigger\";\n\nexport {\n Dropdown,\n DropdownCheckboxItem,\n DropdownContent,\n DropdownGroup,\n DropdownItem,\n DropdownLabel,\n DropdownPortal,\n DropdownRadioGroup,\n DropdownRadioItem,\n DropdownSeparator,\n DropdownShortcut,\n DropdownSub,\n DropdownSubContent,\n DropdownSubTrigger,\n DropdownTrigger,\n};\n\nexport default {\n Root: Dropdown,\n Trigger: DropdownTrigger,\n Content: DropdownContent,\n Item: DropdownItem,\n Label: DropdownLabel,\n Separator: DropdownSeparator,\n Group: DropdownGroup,\n Shortcut: DropdownShortcut,\n Sub: DropdownSub,\n SubTrigger: DropdownSubTrigger,\n SubContent: DropdownSubContent,\n Portal: DropdownPortal,\n CheckboxItem: DropdownCheckboxItem,\n RadioGroup: DropdownRadioGroup,\n RadioItem: DropdownRadioItem,\n};\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createElement, render } from 'preact';
|
|
2
|
+
|
|
3
|
+
// src/lib/createPortal.tsx
|
|
4
|
+
function ContextProvider() {
|
|
5
|
+
this.getChildContext = () => this.props.context;
|
|
6
|
+
return this.props.children;
|
|
7
|
+
}
|
|
8
|
+
function Portal(props) {
|
|
9
|
+
const container = props._container;
|
|
10
|
+
this.componentWillUnmount = () => {
|
|
11
|
+
if (this._temp) {
|
|
12
|
+
render(null, this._temp);
|
|
13
|
+
this._temp = null;
|
|
14
|
+
this._container = null;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
if (this._container && this._container !== container) {
|
|
18
|
+
this.componentWillUnmount();
|
|
19
|
+
}
|
|
20
|
+
if (!this._temp) {
|
|
21
|
+
let root = this._vnode;
|
|
22
|
+
while (root != null && !root._mask && root._parent != null) {
|
|
23
|
+
root = root._parent;
|
|
24
|
+
}
|
|
25
|
+
this._container = container;
|
|
26
|
+
this._temp = {
|
|
27
|
+
nodeType: 1,
|
|
28
|
+
parentNode: container,
|
|
29
|
+
childNodes: [],
|
|
30
|
+
_children: { _mask: root?._mask },
|
|
31
|
+
contains: () => true,
|
|
32
|
+
namespaceURI: container.namespaceURI,
|
|
33
|
+
insertBefore: (child, before) => {
|
|
34
|
+
this._temp.childNodes.push(child);
|
|
35
|
+
this._container.insertBefore(child, before);
|
|
36
|
+
},
|
|
37
|
+
removeChild: (child) => {
|
|
38
|
+
this._temp.childNodes.splice(this._temp.childNodes.indexOf(child) >>> 1, 1);
|
|
39
|
+
this._container.removeChild(child);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
render(
|
|
44
|
+
createElement(ContextProvider, { context: this.context }, props._vnode),
|
|
45
|
+
this._temp
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
function createPortal(vnode, container) {
|
|
49
|
+
const el = createElement(Portal, {
|
|
50
|
+
_vnode: vnode,
|
|
51
|
+
_container: container
|
|
52
|
+
});
|
|
53
|
+
el.containerInfo = container;
|
|
54
|
+
return el;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { createPortal };
|
|
58
|
+
//# sourceMappingURL=chunk-B47B6KK6.js.map
|
|
59
|
+
//# sourceMappingURL=chunk-B47B6KK6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/createPortal.tsx"],"names":[],"mappings":";;;AAiCA,SAAS,eAAA,GAGN;AACD,EAAA,IAAA,CAAK,eAAA,GAAkB,MAAM,IAAA,CAAK,KAAA,CAAM,OAAA;AACxC,EAAA,OAAO,KAAK,KAAA,CAAM,QAAA;AACpB;AAEA,SAAS,OAA6B,KAAA,EAAoB;AACxD,EAAA,MAAM,YAAY,KAAA,CAAM,UAAA;AAExB,EAAA,IAAA,CAAK,uBAAuB,MAAM;AAChC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAA,CAAO,IAAA,EAAM,KAAK,KAA2B,CAAA;AAC7C,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,UAAA,KAAe,SAAA,EAAW;AACpD,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAEA,EAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,IAAA,IAAI,OAAY,IAAA,CAAK,MAAA;AACrB,IAAA,OAAO,QAAQ,IAAA,IAAQ,CAAC,KAAK,KAAA,IAAS,IAAA,CAAK,WAAW,IAAA,EAAM;AAC1D,MAAA,IAAA,GAAO,IAAA,CAAK,OAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAElB,IAAA,IAAA,CAAK,KAAA,GAAQ;AAAA,MACX,QAAA,EAAU,CAAA;AAAA,MACV,UAAA,EAAY,SAAA;AAAA,MACZ,YAAY,EAAC;AAAA,MACb,SAAA,EAAW,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAM;AAAA,MAChC,UAAU,MAAM,IAAA;AAAA,MAChB,cAAc,SAAA,CAAU,YAAA;AAAA,MACxB,YAAA,EAAc,CAAC,KAAA,EAAO,MAAA,KAAW;AAC/B,QAAA,IAAA,CAAK,KAAA,CAAO,UAAA,CAAW,IAAA,CAAK,KAAkB,CAAA;AAC9C,QAAA,IAAA,CAAK,UAAA,CAAY,YAAA,CAAa,KAAA,EAAO,MAAM,CAAA;AAAA,MAC7C,CAAA;AAAA,MACA,WAAA,EAAa,CAAC,KAAA,KAAU;AACtB,QAAA,IAAA,CAAK,KAAA,CAAO,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,KAAA,CAAO,WAAW,OAAA,CAAQ,KAAkB,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA;AACzF,QAAA,IAAA,CAAK,UAAA,CAAY,YAAY,KAAK,CAAA;AAAA,MACpC;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAA;AAAA,IACE,aAAA,CAAc,iBAAwB,EAAE,OAAA,EAAS,KAAK,OAAA,EAAQ,EAAG,MAAM,MAAM,CAAA;AAAA,IAC7E,IAAA,CAAK;AAAA,GACP;AACF;AAEO,SAAS,YAAA,CAAa,OAA0B,SAAA,EAA+B;AACpF,EAAA,MAAM,EAAA,GAAK,cAAc,MAAA,EAAe;AAAA,IACtC,MAAA,EAAQ,KAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACb,CAAA;AACD,EAAC,GAA+C,aAAA,GAAgB,SAAA;AAChE,EAAA,OAAO,EAAA;AACT","file":"chunk-B47B6KK6.js","sourcesContent":["import { type ComponentChildren, createElement, render, type VNode } from \"preact\";\n\n/**\n * Minimal DOM parent used by Preact's renderer to mount portal children into `document.body`\n * while preserving context and hooks from the calling tree.\n *\n * @see preact/compat/src/portals.js (inlined to avoid a preact/compat dependency)\n */\ntype PortalMountParent = {\n nodeType: 1;\n parentNode: HTMLElement;\n childNodes: ChildNode[];\n _children: { _mask?: unknown };\n contains: () => true;\n namespaceURI: string | null;\n insertBefore: (child: Node, before: Node | null) => void;\n removeChild: (child: Node) => void;\n};\n\ntype PortalProps = {\n _vnode: any;\n _container: HTMLElement;\n};\n\ntype PortalInstance = {\n _vnode?: any;\n _temp: PortalMountParent | null;\n _container: HTMLElement | null;\n context: Record<string, unknown>;\n props: PortalProps;\n componentWillUnmount: () => void;\n};\n\nfunction ContextProvider(this: {\n getChildContext: () => unknown;\n props: { context: unknown; children: ComponentChildren };\n}) {\n this.getChildContext = () => this.props.context;\n return this.props.children;\n}\n\nfunction Portal(this: PortalInstance, props: PortalProps) {\n const container = props._container;\n\n this.componentWillUnmount = () => {\n if (this._temp) {\n render(null, this._temp as unknown as Element);\n this._temp = null;\n this._container = null;\n }\n };\n\n if (this._container && this._container !== container) {\n this.componentWillUnmount();\n }\n\n if (!this._temp) {\n let root: any = this._vnode;\n while (root != null && !root._mask && root._parent != null) {\n root = root._parent;\n }\n\n this._container = container;\n\n this._temp = {\n nodeType: 1,\n parentNode: container,\n childNodes: [],\n _children: { _mask: root?._mask },\n contains: () => true,\n namespaceURI: container.namespaceURI,\n insertBefore: (child, before) => {\n this._temp!.childNodes.push(child as ChildNode);\n this._container!.insertBefore(child, before);\n },\n removeChild: (child) => {\n this._temp!.childNodes.splice(this._temp!.childNodes.indexOf(child as ChildNode) >>> 1, 1);\n this._container!.removeChild(child);\n },\n };\n }\n\n render(\n createElement(ContextProvider as any, { context: this.context }, props._vnode),\n this._temp as unknown as Element,\n );\n}\n\nexport function createPortal(vnode: ComponentChildren, container: HTMLElement): VNode {\n const el = createElement(Portal as any, {\n _vnode: vnode,\n _container: container,\n }) as VNode;\n (el as VNode & { containerInfo?: HTMLElement }).containerInfo = container;\n return el;\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Dialog, useDialog, useModalPanelA11y, dialogViewportBleedClass, DialogClose } from './chunk-
|
|
1
|
+
import { Dialog, useDialog, useModalPanelA11y, dialogViewportBleedClass, DialogClose } from './chunk-HHLQYMPT.js';
|
|
2
|
+
import { createPortal } from './chunk-B47B6KK6.js';
|
|
2
3
|
import { cn } from './chunk-MS2ZNYCJ.js';
|
|
3
4
|
import { jsx, jsxs, Fragment } from 'preact/jsx-runtime';
|
|
4
|
-
import { createPortal } from 'preact/compat';
|
|
5
5
|
|
|
6
6
|
var Sheet = ({ children, lockBodyScroll = true, ...rest }) => /* @__PURE__ */ jsx(Dialog, { "data-slot": "sheet", lockBodyScroll, ...rest, children });
|
|
7
7
|
var sidePanelClass = {
|
|
@@ -91,5 +91,5 @@ var SheetFooter = ({ children, ...rest }) => /* @__PURE__ */ jsx("div", { "data-
|
|
|
91
91
|
var SheetHeader = ({ children, ...rest }) => /* @__PURE__ */ jsx("div", { "data-slot": "sheet-header", ...rest, children });
|
|
92
92
|
|
|
93
93
|
export { Sheet, SheetContent, SheetFooter, SheetHeader };
|
|
94
|
-
//# sourceMappingURL=chunk-
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
94
|
+
//# sourceMappingURL=chunk-EMUPVA2F.js.map
|
|
95
|
+
//# sourceMappingURL=chunk-EMUPVA2F.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/sheet/Sheet.tsx","../src/components/sheet/SheetContent.tsx","../src/components/sheet/SheetFooter.tsx","../src/components/sheet/SheetHeader.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-EMUPVA2F.js","sourcesContent":["import type { ComponentChildren } from \"preact\";\nimport { Dialog, type DialogProps } from \"../dialog/Dialog\";\n\nexport type SheetProps = DialogProps & { children?: ComponentChildren };\n\nexport const Sheet = ({ children, lockBodyScroll = true, ...rest }: SheetProps) => (\n <Dialog data-slot=\"sheet\" lockBodyScroll={lockBodyScroll} {...rest}>\n {children}\n </Dialog>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { createPortal } from \"../../lib/createPortal\";\nimport { cn } from \"../../lib/utils\";\nimport { useDialog } from \"../dialog/Dialog\";\nimport { dialogViewportBleedClass } from \"../dialog/DialogContent\";\nimport { useModalPanelA11y } from \"../dialog/useModalPanelA11y\";\nimport { SheetClose } from \"./SheetClose\";\n\nexport type SheetContentProps = JSX.HTMLAttributes<HTMLDivElement> & {\n side?: \"left\" | \"right\" | \"top\" | \"bottom\";\n forceMount?: boolean;\n showCloseButton?: boolean;\n children?: ComponentChildren;\n \"data-slot\"?: string;\n};\n\nconst sidePanelClass: Record<NonNullable<SheetContentProps[\"side\"]>, string> = {\n right:\n \"inset-y-0 right-0 h-full w-full max-w-md border-l data-[state=open]:slide-in-from-right data-[state=closed]:slide-out-to-right\",\n left: \"inset-y-0 left-0 h-full w-full max-w-md border-r data-[state=open]:slide-in-from-left data-[state=closed]:slide-out-to-left\",\n top: \"inset-x-0 top-0 max-h-[85dvh] h-auto w-full min-w-0 border-b rounded-b-xl data-[state=open]:slide-in-from-top data-[state=closed]:slide-out-to-top\",\n bottom:\n \"inset-x-0 bottom-0 max-h-[85dvh] h-auto w-full min-w-0 border-t rounded-t-xl data-[state=open]:slide-in-from-bottom data-[state=closed]:slide-out-to-bottom\",\n};\n\nexport const SheetContent = ({\n side = \"right\",\n showCloseButton = true,\n children,\n class: className,\n forceMount = false,\n \"data-slot\": dataSlot = \"sheet-content\",\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n ...rest\n}: SheetContentProps) => {\n const dialog = useDialog();\n const isOpen = dialog.open.value;\n const { panelRef, labelledBy, describedBy } = useModalPanelA11y(isOpen || forceMount);\n if (!isOpen && !forceMount) return null;\n\n const state = isOpen ? \"open\" : \"closed\";\n const isHorizontalEdge = side === \"top\" || side === \"bottom\";\n const edgePadding =\n side === \"top\"\n ? \"px-6 pb-6 pt-[calc(1.5rem+env(safe-area-inset-top,0px))]\"\n : side === \"bottom\"\n ? \"px-6 pt-6 pb-[calc(1.5rem+env(safe-area-inset-bottom,0px))]\"\n : \"p-6\";\n\n const modalA11y = {\n \"aria-labelledby\": ariaLabelledBy ?? labelledBy,\n \"aria-describedby\": ariaDescribedBy ?? describedBy,\n };\n\n const tree = (\n <>\n <div\n aria-hidden=\"true\"\n data-slot=\"sheet-overlay\"\n data-state={state}\n class={cn(\n \"fade-in fade-out\",\n dialogViewportBleedClass,\n \"z-40 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fill-mode-forwards\",\n )}\n />\n <div\n ref={panelRef}\n {...rest}\n {...modalA11y}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n data-side={side}\n data-state={state}\n data-slot={dataSlot}\n class={cn(\n \"fixed z-50 flex min-h-0 min-w-0 flex-col gap-4 overflow-y-auto border bg-background shadow-lg outline-none\",\n edgePadding,\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fill-mode-forwards duration-300\",\n sidePanelClass[side],\n className,\n isHorizontalEdge && \"w-full !max-w-none\",\n )}\n >\n {showCloseButton ? (\n <SheetClose\n data-slot=\"sheet-close\"\n aria-label=\"Close sheet\"\n class={cn(\n \"absolute right-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\",\n side === \"top\" ? \"top-[calc(1rem+env(safe-area-inset-top,0px))]\" : \"top-4\",\n )}\n >\n Close\n </SheetClose>\n ) : null}\n {children}\n </div>\n </>\n );\n\n if (typeof document === \"undefined\") return tree;\n return createPortal(tree, document.body);\n};\n","import type { ComponentChildren, JSX } from \"preact\";\n\nexport type SheetFooterProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SheetFooter = ({ children, ...rest }: SheetFooterProps) => (\n <div data-slot=\"sheet-footer\" {...rest}>\n {children}\n </div>\n);\n","import type { ComponentChildren, JSX } from \"preact\";\n\nexport type SheetHeaderProps = JSX.HTMLAttributes<HTMLDivElement> & {\n children?: ComponentChildren;\n};\n\nexport const SheetHeader = ({ children, ...rest }: SheetHeaderProps) => (\n <div data-slot=\"sheet-header\" {...rest}>\n {children}\n </div>\n);\n"]}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { createIdFactory } from './chunk-PPYJQNE5.js';
|
|
2
2
|
import { cn } from './chunk-MS2ZNYCJ.js';
|
|
3
|
-
import { useSignal } from '@preact/signals';
|
|
4
3
|
import { createContext } from 'preact';
|
|
5
|
-
import { useMemo, useEffect, useContext } from 'preact/hooks';
|
|
4
|
+
import { useState, useMemo, useEffect, useContext } from 'preact/hooks';
|
|
6
5
|
import { jsx } from 'preact/jsx-runtime';
|
|
7
6
|
import { tv } from 'tailwind-variants';
|
|
8
7
|
|
|
@@ -32,29 +31,31 @@ var Tabs = ({
|
|
|
32
31
|
children,
|
|
33
32
|
...rest
|
|
34
33
|
}) => {
|
|
35
|
-
const value =
|
|
34
|
+
const [value, setLocalValue] = useState(defaultValue);
|
|
36
35
|
const baseId = useMemo(() => createIdFactory("tabs")(), []);
|
|
37
36
|
const triggerId = useMemo(() => (tabValue) => `${baseId}-trigger-${tabValue}`, [baseId]);
|
|
38
37
|
const contentId = useMemo(() => (tabValue) => `${baseId}-content-${tabValue}`, [baseId]);
|
|
39
38
|
const setValue = (next) => {
|
|
40
39
|
if (!syncKey) {
|
|
41
|
-
|
|
40
|
+
setLocalValue(next);
|
|
42
41
|
return;
|
|
43
42
|
}
|
|
44
|
-
const syncEntry = getOrCreateSyncEntry(syncKey, value
|
|
43
|
+
const syncEntry = getOrCreateSyncEntry(syncKey, value);
|
|
45
44
|
if (syncEntry.value === next) return;
|
|
46
45
|
syncEntry.value = next;
|
|
47
|
-
|
|
46
|
+
setLocalValue(next);
|
|
48
47
|
syncEntry.subscribers.forEach((subscriber) => subscriber(next));
|
|
49
48
|
};
|
|
50
49
|
useEffect(() => {
|
|
51
50
|
if (!syncKey) return;
|
|
52
51
|
const syncEntry = getOrCreateSyncEntry(syncKey, defaultValue);
|
|
53
52
|
syncEntry.instancesCount += 1;
|
|
54
|
-
|
|
53
|
+
setLocalValue(syncEntry.value);
|
|
55
54
|
const subscriber = (nextValue) => {
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
setLocalValue((currentValue) => {
|
|
56
|
+
if (currentValue === nextValue) return currentValue;
|
|
57
|
+
return nextValue;
|
|
58
|
+
});
|
|
58
59
|
};
|
|
59
60
|
syncEntry.subscribers.add(subscriber);
|
|
60
61
|
return () => {
|
|
@@ -64,7 +65,7 @@ var Tabs = ({
|
|
|
64
65
|
syncRegistry.delete(syncKey);
|
|
65
66
|
}
|
|
66
67
|
};
|
|
67
|
-
}, [defaultValue, syncKey
|
|
68
|
+
}, [defaultValue, syncKey]);
|
|
68
69
|
return /* @__PURE__ */ jsx(TabsContext.Provider, { value: { value, setValue, orientation, baseId, triggerId, contentId }, children: /* @__PURE__ */ jsx(
|
|
69
70
|
"div",
|
|
70
71
|
{
|
|
@@ -85,7 +86,7 @@ var TabsContent = ({
|
|
|
85
86
|
...rest
|
|
86
87
|
}) => {
|
|
87
88
|
const tabs = useTabs();
|
|
88
|
-
const active = tabs.value
|
|
89
|
+
const active = tabs.value === value;
|
|
89
90
|
const id = idProp ?? tabs.contentId(value);
|
|
90
91
|
const labelledBy = tabs.triggerId(value);
|
|
91
92
|
if (!active && !forceMount) return null;
|
|
@@ -119,7 +120,7 @@ var tabsList = tv({
|
|
|
119
120
|
variants: {
|
|
120
121
|
variant: {
|
|
121
122
|
default: "",
|
|
122
|
-
line: "rounded-none
|
|
123
|
+
line: "gap-1 rounded-none bg-transparent p-0 ring-0 group-data-[orientation=horizontal]/tabs:rounded-none"
|
|
123
124
|
}
|
|
124
125
|
},
|
|
125
126
|
defaultVariants: {
|
|
@@ -152,7 +153,7 @@ var TabsTrigger = ({
|
|
|
152
153
|
...rest
|
|
153
154
|
}) => {
|
|
154
155
|
const tabs = useTabs();
|
|
155
|
-
const active = tabs.value
|
|
156
|
+
const active = tabs.value === value;
|
|
156
157
|
const id = idProp ?? tabs.triggerId(value);
|
|
157
158
|
const controlsId = tabs.contentId(value);
|
|
158
159
|
return /* @__PURE__ */ jsx(
|
|
@@ -174,13 +175,14 @@ var TabsTrigger = ({
|
|
|
174
175
|
"dark:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-[0_1px_2px_-0.5px_rgb(0_0_0/0.35)] dark:group-data-[variant=default]/tabs-list:data-[state=active]:ring-1 dark:group-data-[variant=default]/tabs-list:data-[state=active]:ring-white/[0.08]",
|
|
175
176
|
"group-data-[variant=line]/tabs-list:rounded-none group-data-[variant=line]/tabs-list:px-0 group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:group-data-[variant=line]/tabs-list:data-[state=active]:ring-0",
|
|
176
177
|
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
177
|
-
"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:text-foreground",
|
|
178
|
+
"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:font-semibold group-data-[variant=line]/tabs-list:data-[state=active]:text-foreground",
|
|
179
|
+
"group-data-[variant=line]/tabs-list:data-[state=inactive]:font-normal group-data-[variant=line]/tabs-list:data-[state=inactive]:text-muted-foreground",
|
|
178
180
|
"dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent",
|
|
179
181
|
"dark:group-data-[variant=default]/tabs-list:data-[state=active]:bg-input/30 dark:group-data-[variant=default]/tabs-list:data-[state=active]:text-foreground",
|
|
180
182
|
"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity",
|
|
181
183
|
"group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5",
|
|
182
184
|
"group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5",
|
|
183
|
-
"group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100",
|
|
185
|
+
"group-data-[variant=line]/tabs-list:data-[state=active]:after:h-[2px] group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100",
|
|
184
186
|
className
|
|
185
187
|
),
|
|
186
188
|
"data-slot": "tabs-trigger",
|
|
@@ -240,5 +242,5 @@ var tabs_default = {
|
|
|
240
242
|
};
|
|
241
243
|
|
|
242
244
|
export { Tabs, TabsContent, TabsList, TabsTrigger, tabs_default };
|
|
243
|
-
//# sourceMappingURL=chunk-
|
|
244
|
-
//# sourceMappingURL=chunk-
|
|
245
|
+
//# sourceMappingURL=chunk-HCTZJYHK.js.map
|
|
246
|
+
//# sourceMappingURL=chunk-HCTZJYHK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/tabs/Tabs.tsx","../src/components/tabs/TabsContent.tsx","../src/components/tabs/TabsList.tsx","../src/components/tabs/TabsTrigger.tsx","../src/components/tabs/index.ts"],"names":["jsx"],"mappings":"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","file":"chunk-HCTZJYHK.js","sourcesContent":["import type { ComponentChildren, JSX } from \"preact\";\nimport { createContext } from \"preact\";\nimport { useContext, useEffect, useMemo, useState } from \"preact/hooks\";\nimport { createIdFactory } from \"../../lib/interactive\";\nimport { cn } from \"../../lib/utils\";\n\ntype TabsContextValue = {\n value: string;\n setValue: (next: string) => void;\n orientation: \"horizontal\" | \"vertical\";\n baseId: string;\n triggerId: (tabValue: string) => string;\n contentId: (tabValue: string) => string;\n};\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nexport const useTabs = () => {\n const context = useContext(TabsContext);\n if (!context) throw new Error(\"Tabs subcomponents must be used within Tabs\");\n return context;\n};\n\nexport type TabsProps = JSX.HTMLAttributes<HTMLDivElement> & {\n defaultValue: string;\n syncKey?: string;\n orientation?: \"horizontal\" | \"vertical\";\n children?: ComponentChildren;\n};\n\ntype SyncSubscriber = (nextValue: string) => void;\n\ntype SyncRegistryEntry = {\n value: string;\n subscribers: Set<SyncSubscriber>;\n instancesCount: number;\n};\n\nconst syncRegistry = new Map<string, SyncRegistryEntry>();\n\nconst getOrCreateSyncEntry = (key: string, initialValue: string): SyncRegistryEntry => {\n const existing = syncRegistry.get(key);\n if (existing) return existing;\n\n const created: SyncRegistryEntry = {\n value: initialValue,\n subscribers: new Set<SyncSubscriber>(),\n instancesCount: 0,\n };\n syncRegistry.set(key, created);\n return created;\n};\n\nexport const Tabs = ({\n defaultValue,\n syncKey,\n orientation = \"horizontal\",\n class: className,\n children,\n ...rest\n}: TabsProps) => {\n const [value, setLocalValue] = useState(defaultValue);\n const baseId = useMemo(() => createIdFactory(\"tabs\")(), []);\n const triggerId = useMemo(() => (tabValue: string) => `${baseId}-trigger-${tabValue}`, [baseId]);\n const contentId = useMemo(() => (tabValue: string) => `${baseId}-content-${tabValue}`, [baseId]);\n const setValue = (next: string) => {\n if (!syncKey) {\n setLocalValue(next);\n return;\n }\n\n const syncEntry = getOrCreateSyncEntry(syncKey, value);\n if (syncEntry.value === next) return;\n\n syncEntry.value = next;\n setLocalValue(next);\n syncEntry.subscribers.forEach((subscriber) => subscriber(next));\n };\n\n useEffect(() => {\n if (!syncKey) return;\n\n const syncEntry = getOrCreateSyncEntry(syncKey, defaultValue);\n syncEntry.instancesCount += 1;\n setLocalValue(syncEntry.value);\n\n const subscriber: SyncSubscriber = (nextValue) => {\n setLocalValue((currentValue) => {\n if (currentValue === nextValue) return currentValue;\n return nextValue;\n });\n };\n syncEntry.subscribers.add(subscriber);\n\n return () => {\n syncEntry.subscribers.delete(subscriber);\n syncEntry.instancesCount -= 1;\n if (syncEntry.instancesCount <= 0) {\n syncRegistry.delete(syncKey);\n }\n };\n }, [defaultValue, syncKey]);\n\n return (\n <TabsContext.Provider value={{ value, setValue, orientation, baseId, triggerId, contentId }}>\n <div\n class={cn(\"group/tabs\", className)}\n data-slot=\"tabs\"\n data-orientation={orientation}\n {...rest}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { useTabs } from \"./Tabs\";\n\nexport type TabsContentProps = JSX.HTMLAttributes<HTMLDivElement> & {\n value: string;\n forceMount?: boolean;\n children?: ComponentChildren;\n};\n\nexport const TabsContent = ({\n value,\n forceMount = false,\n class: className,\n children,\n id: idProp,\n ...rest\n}: TabsContentProps) => {\n const tabs = useTabs();\n const active = tabs.value === value;\n const id = idProp ?? tabs.contentId(value);\n const labelledBy = tabs.triggerId(value);\n\n if (!active && !forceMount) return null;\n\n return (\n <div\n role=\"tabpanel\"\n id={id}\n aria-labelledby={labelledBy}\n aria-hidden={!active || undefined}\n data-slot=\"tabs-content\"\n data-state={active ? \"active\" : \"inactive\"}\n class={cn(\n \"mt-2 outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n className,\n )}\n tabIndex={0}\n hidden={!active && forceMount ? true : undefined}\n {...rest}\n >\n {children}\n </div>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../../lib/utils\";\nimport { useTabs } from \"./Tabs\";\n\nconst tabsList = tv({\n base: [\n \"group/tabs-list inline-flex w-fit items-stretch justify-center gap-0.5 rounded-md bg-muted/80 p-0.5 text-muted-foreground\",\n \"ring-1 ring-inset ring-black/[0.04] dark:ring-white/[0.06]\",\n \"group-data-[orientation=horizontal]/tabs:h-9 group-data-[orientation=horizontal]/tabs:rounded-full\",\n \"group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col group-data-[orientation=vertical]/tabs:rounded-xl group-data-[orientation=vertical]/tabs:gap-0.5 group-data-[orientation=vertical]/tabs:p-1\",\n ],\n variants: {\n variant: {\n default: \"\",\n line: \"gap-1 rounded-none bg-transparent p-0 ring-0 group-data-[orientation=horizontal]/tabs:rounded-none\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n\nexport type TabsListProps = JSX.HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof tabsList> & {\n children?: ComponentChildren;\n };\n\nexport const TabsList = ({ variant, class: className, children, ...rest }: TabsListProps) => {\n const tabs = useTabs();\n\n return (\n <div\n role=\"tablist\"\n aria-orientation={tabs.orientation}\n class={cn(tabsList({ variant }), className)}\n data-slot=\"tabs-list\"\n data-variant={variant ?? \"default\"}\n data-orientation={tabs.orientation}\n {...rest}\n >\n {children}\n </div>\n );\n};\n","import type { ComponentChildren, JSX } from \"preact\";\nimport { cn } from \"../../lib/utils\";\nimport { useTabs } from \"./Tabs\";\n\nexport type TabsTriggerProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n value: string;\n children?: ComponentChildren;\n};\n\nexport const TabsTrigger = ({\n value,\n class: className,\n children,\n onClick,\n onKeyDown,\n id: idProp,\n ...rest\n}: TabsTriggerProps) => {\n const tabs = useTabs();\n const active = tabs.value === value;\n const id = idProp ?? tabs.triggerId(value);\n const controlsId = tabs.contentId(value);\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n id={id}\n aria-controls={controlsId}\n class={cn(\n \"relative inline-flex h-full min-h-0 flex-1 items-center justify-center gap-1.5 border border-transparent px-3 py-1 text-sm whitespace-nowrap text-muted-foreground transition-[color,box-shadow,background-color,font-weight] duration-200 ease-out\",\n \"group-data-[orientation=horizontal]/tabs:rounded-full group-data-[orientation=vertical]/tabs:rounded-md\",\n \"group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start\",\n \"hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\",\n \"disabled:pointer-events-none disabled:opacity-50 dark:hover:text-foreground\",\n \"group-data-[variant=default]/tabs-list:data-[state=inactive]:font-medium\",\n \"group-data-[variant=default]/tabs-list:data-[state=active]:bg-background group-data-[variant=default]/tabs-list:data-[state=active]:font-semibold group-data-[variant=default]/tabs-list:data-[state=active]:text-foreground\",\n \"group-data-[variant=default]/tabs-list:data-[state=active]:shadow-[0_1px_2px_-0.5px_rgb(0_0_0/0.06),0_1px_3px_-1px_rgb(0_0_0/0.08)]\",\n \"dark:group-data-[variant=default]/tabs-list:data-[state=active]:shadow-[0_1px_2px_-0.5px_rgb(0_0_0/0.35)] dark:group-data-[variant=default]/tabs-list:data-[state=active]:ring-1 dark:group-data-[variant=default]/tabs-list:data-[state=active]:ring-white/[0.08]\",\n \"group-data-[variant=line]/tabs-list:rounded-none group-data-[variant=line]/tabs-list:px-0 group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:group-data-[variant=line]/tabs-list:data-[state=active]:ring-0\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:font-semibold group-data-[variant=line]/tabs-list:data-[state=active]:text-foreground\",\n \"group-data-[variant=line]/tabs-list:data-[state=inactive]:font-normal group-data-[variant=line]/tabs-list:data-[state=inactive]:text-muted-foreground\",\n \"dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent\",\n \"dark:group-data-[variant=default]/tabs-list:data-[state=active]:bg-input/30 dark:group-data-[variant=default]/tabs-list:data-[state=active]:text-foreground\",\n \"after:absolute after:bg-foreground after:opacity-0 after:transition-opacity\",\n \"group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5\",\n \"group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5\",\n \"group-data-[variant=line]/tabs-list:data-[state=active]:after:h-[2px] group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100\",\n className,\n )}\n data-slot=\"tabs-trigger\"\n data-state={active ? \"active\" : \"inactive\"}\n data-active={active ? \"true\" : undefined}\n data-value={value}\n data-orientation={tabs.orientation}\n aria-selected={active}\n tabIndex={active ? 0 : -1}\n onClick={(event) => {\n tabs.setValue(value);\n onClick?.(event);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (![\"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key))\n return;\n\n const tabList = event.currentTarget.closest('[role=\"tablist\"]');\n if (!tabList) return;\n\n const triggers = Array.from(\n tabList.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])'),\n );\n const currentIndex = triggers.indexOf(event.currentTarget);\n if (currentIndex === -1 || triggers.length === 0) return;\n\n const horizontal = tabs.orientation === \"horizontal\";\n let nextIndex = currentIndex;\n\n if (event.key === \"Home\") nextIndex = 0;\n if (event.key === \"End\") nextIndex = triggers.length - 1;\n if (event.key === \"ArrowRight\" && horizontal)\n nextIndex = (currentIndex + 1) % triggers.length;\n if (event.key === \"ArrowLeft\" && horizontal)\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n if (event.key === \"ArrowDown\" && !horizontal)\n nextIndex = (currentIndex + 1) % triggers.length;\n if (event.key === \"ArrowUp\" && !horizontal)\n nextIndex = (currentIndex - 1 + triggers.length) % triggers.length;\n\n if (nextIndex === currentIndex) return;\n event.preventDefault();\n const next = triggers[nextIndex];\n next.focus();\n const nextValue = next.getAttribute(\"data-value\");\n if (nextValue) tabs.setValue(nextValue);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n};\n","import { Tabs } from \"./Tabs\";\nimport { TabsContent } from \"./TabsContent\";\nimport { TabsList } from \"./TabsList\";\nimport { TabsTrigger } from \"./TabsTrigger\";\n\nexport { Tabs, TabsContent, TabsList, TabsTrigger };\n\nexport default {\n Root: Tabs,\n List: TabsList,\n Trigger: TabsTrigger,\n Content: TabsContent,\n};\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createPortal } from './chunk-B47B6KK6.js';
|
|
1
2
|
import { createControllableSignal } from './chunk-C7WEQOUA.js';
|
|
2
3
|
import { createIdFactory, createDismissableLayer, trapFocus, isPointerWithinModalDialogPanelSlop } from './chunk-PPYJQNE5.js';
|
|
3
4
|
import { cn } from './chunk-MS2ZNYCJ.js';
|
|
@@ -5,7 +6,6 @@ import { signal } from '@preact/signals';
|
|
|
5
6
|
import { createContext, isValidElement, cloneElement } from 'preact';
|
|
6
7
|
import { useContext, useRef, useMemo, useEffect, useLayoutEffect } from 'preact/hooks';
|
|
7
8
|
import { jsx, jsxs, Fragment } from 'preact/jsx-runtime';
|
|
8
|
-
import { createPortal } from 'preact/compat';
|
|
9
9
|
|
|
10
10
|
var SCROLL_LOCK_COUNT_ATTR = "data-kamod-scroll-lock-count";
|
|
11
11
|
var SCROLL_LOCK_BODY_OVERFLOW_ATTR = "data-kamod-scroll-lock-body-overflow";
|
|
@@ -473,5 +473,5 @@ var DialogTrigger = ({
|
|
|
473
473
|
};
|
|
474
474
|
|
|
475
475
|
export { Dialog, DialogClose, DialogContent, DialogDescription, DialogTitle, DialogTrigger, dialogViewportBleedClass, useDialog, useModalPanelA11y };
|
|
476
|
-
//# sourceMappingURL=chunk-
|
|
477
|
-
//# sourceMappingURL=chunk-
|
|
476
|
+
//# sourceMappingURL=chunk-HHLQYMPT.js.map
|
|
477
|
+
//# sourceMappingURL=chunk-HHLQYMPT.js.map
|