@kuzenbo/core 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BaseForm","CollapsiblePrimitive","CollapsiblePrimitive","CollapsiblePrimitive","SliderPrimitive","SliderValuePrimitive"],"sources":["../src/ui/copy-button/copy-button.tsx","../src/ui/form/form.tsx","../src/ui/navigation-list/navigation-list-context.tsx","../src/ui/navigation-list/navigation-list-item-context.tsx","../src/ui/navigation-list/navigation-list-action.tsx","../src/ui/navigation-list/navigation-list-badge.tsx","../src/ui/navigation-list/navigation-list-content.tsx","../src/ui/navigation-list/navigation-list-group.tsx","../src/ui/navigation-list/navigation-list-group-content.tsx","../src/ui/navigation-list/navigation-list-group-label.tsx","../src/ui/navigation-list/navigation-list-item.tsx","../src/ui/navigation-list/navigation-list-link.tsx","../src/ui/navigation-list/navigation-list-separator.tsx","../src/ui/navigation-list/navigation-list-skeleton.tsx","../src/ui/navigation-list/navigation-list-sub.tsx","../src/ui/navigation-list/navigation-list-sub-item.tsx","../src/ui/navigation-list/navigation-list-sub-link.tsx","../src/ui/navigation-list/navigation-list.tsx","../src/ui/range-slider/range-slider-helpers.ts","../src/ui/range-slider/math/normalize-range-slider-value.ts","../src/ui/range-slider/use-range-slider-state.ts","../src/ui/range-slider/range-slider.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HugeiconsProps } from \"@hugeicons/react\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nimport {\n Alert01Icon,\n Copy01Icon,\n Loading03Icon,\n Tick02Icon,\n} from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { useClipboard } from \"@kuzenbo/hooks\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"tailwind-variants\";\n\nimport { Button } from \"../button/button\";\n\nexport type CopyButtonStatus = \"idle\" | \"copying\" | \"copied\" | \"failed\";\n\ntype CopyButtonStatusMap = Record<CopyButtonStatus, string>;\n\ntype CopyButtonContent = ReactNode | ((status: CopyButtonStatus) => ReactNode);\n\nconst DEFAULT_TIMEOUT = 1200;\n\nconst STATUS_ORDER: CopyButtonStatus[] = [\n \"idle\",\n \"copying\",\n \"copied\",\n \"failed\",\n];\n\nconst STATUS_LABELS: CopyButtonStatusMap = {\n idle: \"Copy\",\n copying: \"Copying\",\n copied: \"Copied\",\n failed: \"Copy failed\",\n};\n\nconst STATUS_LIVE_MESSAGES: CopyButtonStatusMap = {\n idle: \"Ready to copy to clipboard\",\n copying: \"Copying to clipboard\",\n copied: \"Copied to clipboard\",\n failed: \"Failed to copy to clipboard\",\n};\n\nconst STATUS_ICON_BY_STATUS = {\n idle: Copy01Icon,\n copying: Loading03Icon,\n copied: Tick02Icon,\n failed: Alert01Icon,\n} as const satisfies Record<\n CopyButtonStatus,\n NonNullable<HugeiconsProps[\"icon\"]>\n>;\n\nexport type CopyButtonProps = Omit<\n ComponentProps<typeof Button>,\n \"aria-pressed\" | \"children\" | \"isLoading\" | \"onClick\"\n> & {\n value: string;\n timeout?: number;\n useLegacyFallback?: boolean;\n status?: CopyButtonStatus;\n defaultStatus?: CopyButtonStatus;\n onStatusChange?: (status: CopyButtonStatus) => void;\n statusLabels?: Partial<CopyButtonStatusMap>;\n liveRegionMessages?: Partial<CopyButtonStatusMap>;\n children?: CopyButtonContent;\n onClick?: ComponentProps<typeof Button>[\"onClick\"];\n};\n\nconst resolveContent = (\n content: CopyButtonContent | undefined,\n status: CopyButtonStatus\n) => {\n if (typeof content === \"function\") {\n return content(status);\n }\n\n return content;\n};\n\nconst CopyButton = ({\n className,\n value,\n timeout = DEFAULT_TIMEOUT,\n useLegacyFallback = true,\n status,\n defaultStatus = \"idle\",\n onStatusChange,\n statusLabels,\n liveRegionMessages,\n children,\n disabled,\n onClick,\n type = \"button\",\n \"aria-label\": ariaLabel,\n ...props\n}: CopyButtonProps) => {\n const clipboard = useClipboard({\n copiedDurationMs: timeout,\n failedDurationMs: timeout,\n useLegacyFallback,\n });\n const [internalStatus, setInternalStatus] =\n useState<CopyButtonStatus>(defaultStatus);\n const isControlled = status !== undefined;\n const currentStatus = status ?? internalStatus;\n const currentStatusRef = useRef(currentStatus);\n const hasMountedRef = useRef(false);\n\n const mergedStatusLabels = useMemo<CopyButtonStatusMap>(\n () => ({ ...STATUS_LABELS, ...statusLabels }),\n [statusLabels]\n );\n\n const mergedLiveMessages = useMemo<CopyButtonStatusMap>(\n () => ({ ...STATUS_LIVE_MESSAGES, ...liveRegionMessages }),\n [liveRegionMessages]\n );\n\n const setStatus = useCallback(\n (nextStatus: CopyButtonStatus) => {\n if (currentStatusRef.current === nextStatus) {\n return;\n }\n\n currentStatusRef.current = nextStatus;\n\n if (!isControlled) {\n setInternalStatus(nextStatus);\n }\n\n onStatusChange?.(nextStatus);\n },\n [isControlled, onStatusChange]\n );\n\n const handleClick = useCallback<NonNullable<CopyButtonProps[\"onClick\"]>>(\n (event) => {\n onClick?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n clipboard.reset();\n setStatus(\"copying\");\n clipboard.copy(value);\n },\n [clipboard, disabled, onClick, setStatus, value]\n );\n\n useEffect(() => {\n currentStatusRef.current = currentStatus;\n }, [currentStatus]);\n\n useEffect(() => {\n if (!hasMountedRef.current) {\n hasMountedRef.current = true;\n return;\n }\n\n setStatus(clipboard.status);\n }, [clipboard.status, setStatus]);\n\n const resolvedContent = resolveContent(children, currentStatus);\n const visibleLabel = resolvedContent ?? mergedStatusLabels[currentStatus];\n const hookAnnouncement =\n clipboard.announcement.trim().length > 0\n ? clipboard.announcement\n : undefined;\n const liveRegionText =\n liveRegionMessages?.[currentStatus] ??\n hookAnnouncement ??\n mergedLiveMessages[currentStatus];\n const resolvedAriaLabel =\n ariaLabel ?? (visibleLabel ? undefined : mergedStatusLabels[currentStatus]);\n\n return (\n <>\n <Button\n aria-label={resolvedAriaLabel}\n className={cn(\"gap-2\", className)}\n data-slot=\"copy-button\"\n data-status={currentStatus}\n disabled={disabled || currentStatus === \"copying\"}\n onClick={handleClick}\n type={type}\n {...props}\n >\n <span className=\"inline-flex items-center gap-2\">\n <span\n aria-hidden=\"true\"\n className=\"relative inline-flex size-4 items-center justify-center\"\n >\n {STATUS_ORDER.map((iconStatus) => (\n <HugeiconsIcon\n key={iconStatus}\n className={cn(\n \"absolute inset-0 size-4 transition-opacity duration-150 ease-out motion-reduce:transition-none\",\n iconStatus === currentStatus ? \"opacity-100\" : \"opacity-0\",\n iconStatus === \"copying\" &&\n \"data-[active=true]:animate-spin motion-reduce:data-[active=true]:animate-none\",\n iconStatus === \"copied\" && \"text-success\",\n iconStatus === \"failed\" && \"text-danger\",\n iconStatus === \"idle\" && \"text-muted-foreground\"\n )}\n data-active={iconStatus === currentStatus}\n data-status-icon={iconStatus}\n icon={STATUS_ICON_BY_STATUS[iconStatus]}\n strokeWidth={2}\n />\n ))}\n </span>\n {visibleLabel ? (\n <span className=\"transition-opacity duration-150 ease-out motion-reduce:transition-none\">\n {visibleLabel}\n </span>\n ) : null}\n </span>\n </Button>\n <span\n aria-atomic=\"true\"\n aria-live={currentStatus === \"failed\" ? \"assertive\" : \"polite\"}\n className=\"sr-only\"\n role=\"status\"\n >\n {liveRegionText}\n </span>\n </>\n );\n};\n\nexport { CopyButton };\n","import { Form as BaseForm } from \"@base-ui/react/form\";\n\nimport { mergeBaseUIClassName } from \"../../utils/merge-base-ui-class-name\";\n\nexport type FormRootProps<\n FormValues extends Record<string, unknown> = Record<string, unknown>,\n> = BaseForm.Props<FormValues>;\n\nexport type FormProps<\n FormValues extends Record<string, unknown> = Record<string, unknown>,\n> = FormRootProps<FormValues>;\n\nconst FormRoot = <\n FormValues extends Record<string, unknown> = Record<string, unknown>,\n>({\n className,\n ...props\n}: FormRootProps<FormValues>) => (\n <BaseForm\n className={mergeBaseUIClassName<BaseForm.State>(\n \"flex w-full flex-col gap-6\",\n className\n )}\n data-slot=\"form\"\n {...props}\n />\n);\n\nconst Form = Object.assign(FormRoot, {\n Root: FormRoot,\n});\n\nexport type FormActions = BaseForm.Actions;\nexport type FormState = BaseForm.State;\nexport type FormSubmitEventDetails = BaseForm.SubmitEventDetails;\nexport type FormSubmitEventReason = BaseForm.SubmitEventReason;\nexport type FormValidationMode = BaseForm.ValidationMode;\nexport type FormValues<\n Values extends Record<string, unknown> = Record<string, unknown>,\n> = BaseForm.Values<Values>;\n\nexport { Form, FormRoot };\n","import { createContext, useContext } from \"react\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nexport type NavigationListTone = \"surface\" | \"sidebar\";\nexport type NavigationListVariant = \"subtle\" | \"light\" | \"filled\";\n\nexport interface NavigationListContextValue {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n}\n\nconst NavigationListContext = createContext<NavigationListContextValue>({\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n});\n\nconst resolveCandidate = <T,>(\n fallback: T,\n contextValue: T | undefined,\n candidates: (T | null | undefined)[]\n): T => {\n for (const candidate of candidates) {\n if (candidate !== undefined && candidate !== null) {\n return candidate;\n }\n }\n\n return contextValue ?? fallback;\n};\n\nconst useResolvedNavigationListTone = (\n ...candidates: (NavigationListTone | null | undefined)[]\n): NavigationListTone => {\n const { tone } = useContext(NavigationListContext);\n\n return resolveCandidate(\"surface\", tone, candidates);\n};\n\nconst useResolvedNavigationListVariant = (\n ...candidates: (NavigationListVariant | null | undefined)[]\n): NavigationListVariant => {\n const { variant } = useContext(NavigationListContext);\n\n return resolveCandidate(\"light\", variant, candidates);\n};\n\nconst useResolvedNavigationListSize = (\n ...candidates: (UISize | null | undefined)[]\n): UISize => {\n const { size } = useContext(NavigationListContext);\n\n return resolveCandidate(\"md\", size, candidates);\n};\n\nexport {\n NavigationListContext,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n};\n","import { createContext, useContext } from \"react\";\n\nimport type { UISize } from \"../shared/size/size-system\";\nimport type {\n NavigationListTone,\n NavigationListVariant,\n} from \"./navigation-list-context\";\n\nexport interface NavigationListItemContextValue {\n collapsible: boolean;\n disabled: boolean;\n open: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n}\n\nconst NavigationListItemContext = createContext<NavigationListItemContextValue>(\n {\n collapsible: false,\n disabled: false,\n open: false,\n size: undefined,\n tone: undefined,\n variant: undefined,\n }\n);\n\nconst useNavigationListItemContext = () =>\n useContext(NavigationListItemContext);\n\nexport { NavigationListItemContext, useNavigationListItemContext };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListActionVariants = tv({\n base: \"absolute right-1 flex aspect-square cursor-pointer items-center justify-center rounded-md p-0 outline-hidden transition-transform group-data-[collapsible=true]/navigation-list-item:right-10 group-has-data-[slot=navigation-list-badge]/navigation-list-item:right-14 [&>svg]:shrink-0\",\n variants: {\n size: {\n xs: \"top-0.5 w-4 [&>svg:not([class*='size-'])]:size-3\",\n sm: \"top-1 w-5 [&>svg:not([class*='size-'])]:size-3.5\",\n md: \"top-1.5 w-5 [&>svg:not([class*='size-'])]:size-4\",\n lg: \"top-2 w-6 [&>svg:not([class*='size-'])]:size-4\",\n xl: \"top-2.5 w-7 [&>svg:not([class*='size-'])]:size-5\",\n },\n tone: {\n surface:\n \"text-muted-foreground ring-ring hover:bg-muted hover:text-foreground focus-visible:ring-2 peer-hover/navigation-list-link:text-foreground peer-data-active/navigation-list-link:text-foreground\",\n sidebar:\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/navigation-list-link:text-sidebar-accent-foreground peer-data-active/navigation-list-link:text-sidebar-accent-foreground\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListActionProps = useRender.ComponentProps<\"button\"> &\n ComponentProps<\"button\"> & {\n showOnHover?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n } & VariantProps<typeof navigationListActionVariants>;\n\nconst NavigationListAction = ({\n className,\n render,\n showOnHover = false,\n size,\n tone,\n ...props\n}: NavigationListActionProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n navigationListActionVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n itemContext.variant === \"filled\" &&\n resolvedTone === \"surface\" &&\n \"peer-data-active/navigation-list-link:text-primary-foreground\",\n itemContext.variant === \"filled\" &&\n resolvedTone === \"sidebar\" &&\n \"peer-data-active/navigation-list-link:text-sidebar-primary-foreground\",\n \"peer-data-[size=xs]/navigation-list-link:top-0.5 peer-data-[size=sm]/navigation-list-link:top-1 peer-data-[size=md]/navigation-list-link:top-1.5 peer-data-[size=lg]/navigation-list-link:top-2 peer-data-[size=xl]/navigation-list-link:top-2.5\",\n showOnHover &&\n \"group-focus-within/navigation-list-item:opacity-100 group-hover/navigation-list-item:opacity-100 peer-data-active/navigation-list-link:opacity-100 md:opacity-0\",\n className\n ),\n type: render ? undefined : \"button\",\n },\n props\n ),\n render,\n state: {\n size: resolvedSize,\n slot: \"navigation-list-action\",\n tone: resolvedTone,\n },\n });\n};\n\nexport { NavigationListAction };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListBadgeVariants = tv({\n base: \"pointer-events-none absolute right-1 flex items-center justify-center rounded-md px-1 font-medium tabular-nums select-none group-data-[collapsible=true]/navigation-list-item:right-8\",\n variants: {\n size: {\n xs: \"top-0.5 h-4 min-w-4 text-[10px]\",\n sm: \"top-1 h-5 min-w-5 text-[11px]\",\n md: \"top-1.5 h-5 min-w-5 text-xs\",\n lg: \"top-2 h-6 min-w-6 text-xs\",\n xl: \"top-2.5 h-7 min-w-7 text-sm\",\n },\n tone: {\n surface:\n \"text-muted-foreground peer-hover/navigation-list-link:text-foreground peer-data-active/navigation-list-link:text-foreground\",\n sidebar:\n \"text-sidebar-foreground peer-hover/navigation-list-link:text-sidebar-accent-foreground peer-data-active/navigation-list-link:text-sidebar-accent-foreground\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListBadgeProps = ComponentProps<\"div\"> & {\n size?: UISize;\n tone?: NavigationListTone;\n} & VariantProps<typeof navigationListBadgeVariants>;\n\nconst NavigationListBadge = ({\n className,\n size,\n tone,\n ...props\n}: NavigationListBadgeProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n\n return (\n <div\n className={cn(\n navigationListBadgeVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n itemContext.variant === \"filled\" &&\n resolvedTone === \"surface\" &&\n \"peer-data-active/navigation-list-link:text-primary-foreground\",\n itemContext.variant === \"filled\" &&\n resolvedTone === \"sidebar\" &&\n \"peer-data-active/navigation-list-link:text-sidebar-primary-foreground\",\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-badge\"\n data-tone={resolvedTone}\n {...props}\n />\n );\n};\n\nexport { NavigationListBadge };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\n\nconst navigationListContentVariants = tv({\n base: \"flex min-w-0 list-none flex-col rounded-lg border\",\n variants: {\n size: {\n xs: \"gap-0.5 p-1\",\n sm: \"gap-1 p-1.5\",\n md: \"gap-1 p-2\",\n lg: \"gap-1.5 p-2.5\",\n xl: \"gap-2 p-3\",\n },\n tone: {\n surface: \"border-border bg-background text-foreground\",\n sidebar: \"border-sidebar-border bg-sidebar text-sidebar-foreground\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListContentProps = ComponentProps<\"ul\"> &\n VariantProps<typeof navigationListContentVariants> & {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListContent = ({\n className,\n size,\n tone,\n variant,\n ...props\n}: NavigationListContentProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n return (\n <ul\n className={cn(\n navigationListContentVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n )}\n data-navigation-list=\"content\"\n data-size={resolvedSize}\n data-slot=\"navigation-list-content\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n};\n\nexport { NavigationListContent };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\n\nconst navigationListGroupVariants = tv({\n base: \"list-none space-y-1\",\n variants: {\n size: {\n xs: \"\",\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListGroupProps = ComponentProps<\"li\"> &\n VariantProps<typeof navigationListGroupVariants> & {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListGroup = ({\n className,\n size,\n tone,\n variant,\n ...props\n}: NavigationListGroupProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n return (\n <li\n className={cn(\n navigationListGroupVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-group\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n};\n\nexport { NavigationListGroup };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\n\nconst navigationListGroupContentVariants = tv({\n base: \"flex list-none flex-col\",\n variants: {\n size: {\n xs: \"gap-0.5\",\n sm: \"gap-0.5\",\n md: \"gap-1\",\n lg: \"gap-1\",\n xl: \"gap-1.5\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListGroupContentProps = ComponentProps<\"ul\"> &\n VariantProps<typeof navigationListGroupContentVariants> & {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListGroupContent = ({\n className,\n size,\n tone,\n variant,\n ...props\n}: NavigationListGroupContentProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n return (\n <ul\n className={cn(\n navigationListGroupContentVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-group-content\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n};\n\nexport { NavigationListGroupContent };\n","import type { ComponentProps } from \"react\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\n\nconst navigationListGroupLabelVariants = tv({\n base: \"flex items-center rounded-md px-2 font-medium uppercase tracking-wide\",\n variants: {\n size: {\n xs: \"h-6 text-[10px]\",\n sm: \"h-7 text-[10px]\",\n md: \"h-8 text-[11px]\",\n lg: \"h-9 text-xs\",\n xl: \"h-10 text-xs\",\n },\n tone: {\n surface: \"text-muted-foreground\",\n sidebar: \"text-sidebar-foreground/70\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListGroupLabelProps = useRender.ComponentProps<\"div\"> &\n ComponentProps<\"div\"> &\n Omit<VariantProps<typeof navigationListGroupLabelVariants>, \"size\"> & {\n size?: UISize;\n tone?: NavigationListTone;\n };\n\nconst NavigationListGroupLabel = ({\n className,\n render,\n size,\n tone,\n ...props\n}: NavigationListGroupLabelProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n navigationListGroupLabelVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"navigation-list-group-label\",\n size: resolvedSize,\n tone: resolvedTone,\n },\n });\n};\n\nexport { NavigationListGroupLabel };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport {\n NavigationListItemContext,\n type NavigationListItemContextValue,\n} from \"./navigation-list-item-context\";\n\nconst navigationListItemVariants = tv({\n base: \"group/navigation-list-item relative list-none\",\n variants: {\n size: {\n xs: \"\",\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListItemProps = ComponentProps<\"li\"> &\n VariantProps<typeof navigationListItemVariants> & {\n collapsible?: boolean;\n opened?: boolean;\n defaultOpened?: boolean;\n onOpenedChange?: (opened: boolean) => void;\n disabled?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListItem = ({\n className,\n collapsible = false,\n opened,\n defaultOpened = false,\n onOpenedChange,\n disabled = false,\n size,\n tone,\n variant,\n children,\n ...props\n}: NavigationListItemProps) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpened);\n const isControlled = opened !== undefined;\n const currentOpen = isControlled ? (opened ?? false) : internalOpen;\n const resolvedOpen = collapsible ? currentOpen : false;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!collapsible) {\n return;\n }\n\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n\n onOpenedChange?.(nextOpen);\n },\n [collapsible, isControlled, onOpenedChange]\n );\n\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n const contextValue = useMemo<NavigationListItemContextValue>(\n () => ({\n collapsible,\n disabled,\n open: resolvedOpen,\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n [\n collapsible,\n disabled,\n resolvedOpen,\n resolvedSize,\n resolvedTone,\n resolvedVariant,\n ]\n );\n\n const itemProps = {\n className: cn(\n navigationListItemVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n ),\n \"data-collapsible\": collapsible ? \"true\" : \"false\",\n \"data-disabled\": disabled ? \"true\" : undefined,\n \"data-open\": resolvedOpen ? \"true\" : \"false\",\n \"data-size\": resolvedSize,\n \"data-slot\": \"navigation-list-item\",\n \"data-tone\": resolvedTone,\n \"data-variant\": resolvedVariant,\n ...props,\n };\n\n return (\n <NavigationListItemContext.Provider value={contextValue}>\n <li {...itemProps}>\n {collapsible ? (\n <CollapsiblePrimitive.Root\n disabled={disabled}\n onOpenChange={handleOpenChange}\n open={resolvedOpen}\n >\n {children}\n </CollapsiblePrimitive.Root>\n ) : (\n children\n )}\n </li>\n </NavigationListItemContext.Provider>\n );\n};\n\nexport { NavigationListItem };\n","\"use client\";\n\nimport type { ComponentProps, MouseEvent, ReactNode } from \"react\";\n\nimport { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { useCallback, useEffect } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { BaseUIClassName } from \"../../utils/merge-base-ui-class-name\";\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListLinkVariants = tv({\n base: \"peer/navigation-list-link flex w-full cursor-pointer gap-2 overflow-hidden rounded-md text-left ring-offset-background outline-hidden transition-colors group-has-data-[slot=navigation-list-action]/navigation-list-item:pr-20 group-has-data-[slot=navigation-list-badge]/navigation-list-item:pr-20 focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n variants: {\n size: {\n xs: \"min-h-6 px-1.5 text-xs [&_svg:not([class*='size-'])]:size-3\",\n sm: \"min-h-7 px-2 text-xs [&_svg:not([class*='size-'])]:size-3.5\",\n md: \"min-h-8 px-2 text-sm [&_svg:not([class*='size-'])]:size-4\",\n lg: \"min-h-9 px-2.5 text-sm [&_svg:not([class*='size-'])]:size-4\",\n xl: \"min-h-10 px-3 text-base [&_svg:not([class*='size-'])]:size-5\",\n },\n tone: {\n surface: \"ring-ring\",\n sidebar: \"ring-sidebar-ring\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n noWrap: {\n true: \"\",\n false: \"\",\n },\n hasDescription: {\n true: \"items-start py-1.5\",\n false: \"items-center\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n noWrap: false,\n hasDescription: false,\n },\n compoundVariants: [\n {\n tone: \"surface\",\n variant: \"subtle\",\n className:\n \"hover:bg-muted/70 hover:text-foreground data-active:bg-muted/50 data-active:text-foreground data-active:font-medium\",\n },\n {\n tone: \"surface\",\n variant: \"light\",\n className:\n \"hover:bg-muted hover:text-foreground data-active:bg-muted data-active:text-foreground data-active:font-medium\",\n },\n {\n tone: \"surface\",\n variant: \"filled\",\n className:\n \"hover:bg-muted hover:text-foreground data-active:bg-primary data-active:text-primary-foreground data-active:font-medium\",\n },\n {\n tone: \"sidebar\",\n variant: \"subtle\",\n className:\n \"hover:bg-sidebar-accent/70 hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent/60 data-active:text-sidebar-accent-foreground data-active:font-medium\",\n },\n {\n tone: \"sidebar\",\n variant: \"light\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-active:font-medium\",\n },\n {\n tone: \"sidebar\",\n variant: \"filled\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-primary data-active:text-sidebar-primary-foreground data-active:font-medium\",\n },\n ],\n});\n\nconst navigationListLinkBodyVariants = tv({\n base: \"min-w-0 flex-1\",\n variants: {\n noWrap: {\n true: \"truncate\",\n false: \"\",\n },\n },\n defaultVariants: {\n noWrap: false,\n },\n});\n\nconst navigationListLinkLabelVariants = tv({\n base: \"block\",\n variants: {\n noWrap: {\n true: \"truncate\",\n false: \"\",\n },\n },\n defaultVariants: {\n noWrap: false,\n },\n});\n\nconst navigationListLinkDescriptionVariants = tv({\n base: \"mt-0.5 block text-xs\",\n variants: {\n noWrap: {\n true: \"truncate\",\n false: \"\",\n },\n tone: {\n surface: \"text-muted-foreground\",\n sidebar: \"text-sidebar-foreground/70\",\n },\n },\n defaultVariants: {\n noWrap: false,\n tone: \"surface\",\n },\n});\n\nconst navigationListDefaultChevron = (\n <HugeiconsIcon aria-hidden=\"true\" icon={ArrowRight01Icon} strokeWidth={2} />\n);\n\nexport interface NavigationListLinkState {\n active: boolean;\n collapsible: boolean;\n disabled: boolean;\n open: boolean;\n size: UISize;\n slot: \"navigation-list-link\";\n tone: NavigationListTone;\n variant: NavigationListVariant;\n}\n\nexport type NavigationListLinkProps = Omit<\n useRender.ComponentProps<\"button\">,\n \"className\"\n> &\n Omit<ComponentProps<\"button\">, \"className\"> &\n Omit<\n VariantProps<typeof navigationListLinkVariants>,\n | \"class\"\n | \"className\"\n | \"hasDescription\"\n | \"noWrap\"\n | \"size\"\n | \"tone\"\n | \"variant\"\n > & {\n href?: string;\n active?: boolean;\n label?: ReactNode;\n description?: ReactNode;\n leftSection?: ReactNode;\n rightSection?: ReactNode | null;\n noWrap?: boolean;\n disableRightSectionRotation?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n className?: BaseUIClassName<NavigationListLinkState>;\n };\n\nconst NavigationListLink = ({\n className,\n render,\n href,\n active,\n label,\n description,\n leftSection,\n rightSection,\n noWrap = false,\n disableRightSectionRotation = false,\n size,\n tone,\n variant,\n disabled,\n onClick,\n onKeyDown,\n children,\n ...props\n}: NavigationListLinkProps) => {\n const itemContext = useNavigationListItemContext();\n\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n const resolvedVariant = useResolvedNavigationListVariant(\n variant,\n itemContext.variant\n );\n\n const hasToggleBehavior = itemContext.collapsible;\n const isLinkLike =\n !hasToggleBehavior && (href !== undefined || render !== undefined);\n const resolvedActive = Boolean(active || props[\"aria-current\"] === \"page\");\n const resolvedAriaCurrent =\n props[\"aria-current\"] ??\n (resolvedActive && isLinkLike ? \"page\" : undefined);\n const resolvedDisabled = disabled ?? itemContext.disabled;\n\n useEffect(() => {\n if (process.env.NODE_ENV === \"production\" || !hasToggleBehavior) {\n return;\n }\n\n if (href !== undefined) {\n console.warn(\n \"[NavigationList.Link] `href` is ignored when used inside `NavigationList.Item collapsible`. Parent rows are disclosure buttons.\"\n );\n }\n\n if (render !== undefined) {\n console.warn(\n \"[NavigationList.Link] `render` is ignored when used inside `NavigationList.Item collapsible`. Parent rows are disclosure buttons.\"\n );\n }\n }, [hasToggleBehavior, href, render]);\n\n const usesDefaultChevron = rightSection === undefined && hasToggleBehavior;\n const renderedRightSection = usesDefaultChevron\n ? navigationListDefaultChevron\n : rightSection;\n const hasRenderedRightSection = renderedRightSection !== null;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n onClick?.(event as never);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (resolvedDisabled) {\n event.preventDefault();\n }\n },\n [onClick, resolvedDisabled]\n );\n\n const composedContent =\n children ??\n (label || description || leftSection || hasRenderedRightSection ? (\n <>\n {leftSection ? (\n <span\n className=\"shrink-0\"\n data-slot=\"navigation-list-link-left-section\"\n >\n {leftSection}\n </span>\n ) : null}\n\n <span className={navigationListLinkBodyVariants({ noWrap })}>\n {label ? (\n <span\n className={navigationListLinkLabelVariants({ noWrap })}\n data-slot=\"navigation-list-link-label\"\n >\n {label}\n </span>\n ) : null}\n {description ? (\n <span\n className={navigationListLinkDescriptionVariants({\n noWrap,\n tone: resolvedTone,\n })}\n data-slot=\"navigation-list-link-description\"\n >\n {description}\n </span>\n ) : null}\n </span>\n\n {hasRenderedRightSection ? (\n <span\n aria-hidden={usesDefaultChevron ? \"true\" : undefined}\n className={cn(\n \"ml-auto flex shrink-0 items-center justify-center\",\n hasToggleBehavior &&\n !disableRightSectionRotation &&\n \"data-[open=true]:rotate-90\"\n )}\n data-open={itemContext.open ? \"true\" : \"false\"}\n data-slot=\"navigation-list-link-right-section\"\n >\n {renderedRightSection}\n </span>\n ) : null}\n </>\n ) : null);\n\n const state: NavigationListLinkState = {\n active: resolvedActive,\n collapsible: hasToggleBehavior,\n disabled: resolvedDisabled,\n open: itemContext.open,\n size: resolvedSize,\n slot: \"navigation-list-link\",\n tone: resolvedTone,\n variant: resolvedVariant,\n };\n const resolvedClassName =\n typeof className === \"function\" ? className(state) : className;\n\n const mergedClassName = cn(\n navigationListLinkVariants({\n hasDescription: Boolean(description),\n noWrap,\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n resolvedClassName\n );\n\n const resolvedRender =\n render ??\n (href\n ? (renderProps: ComponentProps<\"a\">) => {\n const { children: renderChildren, ...anchorProps } = renderProps;\n\n return (\n <a {...anchorProps} href={href}>\n {renderChildren}\n </a>\n );\n }\n : undefined);\n\n const renderedLinkElement = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: mergedClassName,\n \"aria-current\": resolvedAriaCurrent,\n \"aria-disabled\": resolvedDisabled ? \"true\" : undefined,\n disabled: isLinkLike ? undefined : resolvedDisabled,\n onClick: handleClick,\n onKeyDown,\n type: isLinkLike ? undefined : \"button\",\n children: composedContent,\n },\n props\n ),\n render: resolvedRender,\n state,\n });\n\n if (hasToggleBehavior) {\n return (\n <CollapsiblePrimitive.Trigger\n aria-disabled={resolvedDisabled ? \"true\" : undefined}\n className={mergedClassName}\n data-active={resolvedActive ? \"true\" : undefined}\n data-size={resolvedSize}\n data-slot=\"navigation-list-link\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n disabled={resolvedDisabled}\n onClick={onClick}\n onKeyDown={onKeyDown}\n type=\"button\"\n >\n {composedContent}\n </CollapsiblePrimitive.Trigger>\n );\n }\n\n return renderedLinkElement;\n};\n\nexport { NavigationListLink };\n","import type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\n\nimport { Separator } from \"../separator/separator\";\nimport {\n type NavigationListTone,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\n\nexport type NavigationListSeparatorProps = ComponentProps<typeof Separator> & {\n tone?: NavigationListTone;\n};\n\nconst NavigationListSeparator = ({\n className,\n tone,\n ...props\n}: NavigationListSeparatorProps) => {\n const resolvedTone = useResolvedNavigationListTone(tone);\n\n return (\n <Separator\n className={cn(\n resolvedTone === \"sidebar\" ? \"bg-sidebar-border\" : \"bg-border\",\n className\n )}\n data-slot=\"navigation-list-separator\"\n data-tone={resolvedTone}\n {...props}\n />\n );\n};\n\nexport { NavigationListSeparator };\n","import type { ComponentProps, CSSProperties } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport { Skeleton } from \"../skeleton/skeleton\";\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListSkeletonVariants = tv({\n base: \"flex items-center gap-2 rounded-md px-2\",\n variants: {\n size: {\n xs: \"h-6\",\n sm: \"h-7\",\n md: \"h-8\",\n lg: \"h-9\",\n xl: \"h-10\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListSkeletonProps = ComponentProps<\"div\"> & {\n showIcon?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n} & VariantProps<typeof navigationListSkeletonVariants>;\n\nconst NavigationListSkeleton = ({\n className,\n showIcon = false,\n size,\n tone,\n ...props\n}: NavigationListSkeletonProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n\n return (\n <div\n className={cn(\n navigationListSkeletonVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-skeleton\"\n data-tone={resolvedTone}\n {...props}\n >\n {showIcon ? (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-slot=\"navigation-list-skeleton-icon\"\n />\n ) : null}\n <Skeleton\n className=\"h-4 max-w-(--navigation-list-skeleton-width) flex-1\"\n data-slot=\"navigation-list-skeleton-text\"\n style={\n {\n \"--navigation-list-skeleton-width\": \"100%\",\n } as CSSProperties\n }\n />\n </div>\n );\n};\n\nexport { NavigationListSkeleton };\n","import type { ComponentProps } from \"react\";\n\nimport { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListSubVariants = tv({\n base: \"mx-2 mt-1 flex min-w-0 list-none flex-col border-l overflow-hidden [&[hidden]:not([hidden='until-found'])]:hidden data-[open=false]:pointer-events-none data-[open=false]:mt-0 data-[open=false]:max-h-0 data-[open=false]:opacity-0 data-[open=false]:py-0 data-[open=false]:border-transparent data-[open=true]:max-h-[48rem] data-[open=true]:opacity-100\",\n variants: {\n size: {\n xs: \"gap-0.5 px-1 py-0.5\",\n sm: \"gap-0.5 px-1.5 py-0.5\",\n md: \"gap-1 px-2 py-0.5\",\n lg: \"gap-1 px-2.5 py-1\",\n xl: \"gap-1.5 px-3 py-1\",\n },\n tone: {\n surface: \"border-border\",\n sidebar: \"border-sidebar-border\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListSubProps = ComponentProps<\"ul\"> & {\n keepMounted?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n} & VariantProps<typeof navigationListSubVariants>;\n\nconst NavigationListSub = ({\n className,\n keepMounted = true,\n size,\n tone,\n variant,\n ...props\n}: NavigationListSubProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n const resolvedVariant = useResolvedNavigationListVariant(\n variant,\n itemContext.variant\n );\n\n const resolvedClassName = cn(\n navigationListSubVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n );\n\n if (!itemContext.collapsible) {\n return (\n <ul\n className={resolvedClassName}\n data-open=\"true\"\n data-size={resolvedSize}\n data-slot=\"navigation-list-sub\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n }\n\n return (\n <CollapsiblePrimitive.Panel keepMounted={keepMounted}>\n <ul\n className={resolvedClassName}\n data-open={itemContext.open ? \"true\" : \"false\"}\n data-size={resolvedSize}\n data-slot=\"navigation-list-sub\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n hidden={keepMounted && !itemContext.open}\n {...props}\n />\n </CollapsiblePrimitive.Panel>\n );\n};\n\nexport { NavigationListSub };\n","import type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\n\nexport type NavigationListSubItemProps = ComponentProps<\"li\">;\n\nconst NavigationListSubItem = ({\n className,\n ...props\n}: NavigationListSubItemProps) => (\n <li\n className={cn(\n \"group/navigation-list-sub-item relative list-none\",\n className\n )}\n data-slot=\"navigation-list-sub-item\"\n {...props}\n />\n);\n\nexport { NavigationListSubItem };\n","import type { ComponentProps } from \"react\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListSubLinkVariants = tv({\n base: \"flex min-w-0 items-center gap-2 overflow-hidden rounded-md text-left outline-hidden transition-colors focus-visible:ring-2 [&>span:last-child]:truncate\",\n variants: {\n size: {\n xs: \"h-6 px-1.5 text-xs [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 px-2 text-xs [&_svg:not([class*='size-'])]:size-3.5\",\n md: \"h-8 px-2 text-sm [&_svg:not([class*='size-'])]:size-4\",\n lg: \"h-9 px-2.5 text-sm [&_svg:not([class*='size-'])]:size-4\",\n xl: \"h-10 px-3 text-base [&_svg:not([class*='size-'])]:size-5\",\n },\n tone: {\n surface: \"ring-ring\",\n sidebar: \"ring-sidebar-ring\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n active: {\n true: \"font-medium\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n active: false,\n },\n compoundVariants: [\n {\n tone: \"surface\",\n variant: \"subtle\",\n className:\n \"hover:bg-muted/70 hover:text-foreground data-active:bg-muted/50\",\n },\n {\n tone: \"surface\",\n variant: \"light\",\n className: \"hover:bg-muted hover:text-foreground data-active:bg-muted\",\n },\n {\n tone: \"surface\",\n variant: \"filled\",\n className:\n \"hover:bg-muted hover:text-foreground data-active:bg-primary data-active:text-primary-foreground\",\n },\n {\n tone: \"sidebar\",\n variant: \"subtle\",\n className:\n \"hover:bg-sidebar-accent/70 hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent/60 data-active:text-sidebar-accent-foreground\",\n },\n {\n tone: \"sidebar\",\n variant: \"light\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground\",\n },\n {\n tone: \"sidebar\",\n variant: \"filled\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-primary data-active:text-sidebar-primary-foreground\",\n },\n ],\n});\n\nexport type NavigationListSubLinkProps = useRender.ComponentProps<\"a\"> &\n ComponentProps<\"a\"> & {\n active?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n } & VariantProps<typeof navigationListSubLinkVariants>;\n\nconst NavigationListSubLink = ({\n className,\n render,\n active,\n size,\n tone,\n variant,\n ...props\n}: NavigationListSubLinkProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n const resolvedVariant = useResolvedNavigationListVariant(\n variant,\n itemContext.variant\n );\n const resolvedActive = active ?? props[\"aria-current\"] === \"page\";\n const resolvedAriaCurrent =\n props[\"aria-current\"] ?? (resolvedActive ? \"page\" : undefined);\n\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n \"aria-current\": resolvedAriaCurrent,\n className: cn(\n navigationListSubLinkVariants({\n active: resolvedActive,\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n ),\n },\n props\n ),\n render,\n state: {\n active: resolvedActive,\n size: resolvedSize,\n slot: \"navigation-list-sub-link\",\n tone: resolvedTone,\n variant: resolvedVariant,\n },\n });\n};\n\nexport { NavigationListSubLink };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { BaseUIClassName } from \"../../utils/merge-base-ui-class-name\";\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport { useComponentSize } from \"../shared/size/size-provider\";\nimport { NavigationListAction } from \"./navigation-list-action\";\nimport { NavigationListBadge } from \"./navigation-list-badge\";\nimport { NavigationListContent } from \"./navigation-list-content\";\nimport {\n NavigationListContext,\n type NavigationListTone,\n type NavigationListVariant,\n} from \"./navigation-list-context\";\nimport { NavigationListGroup } from \"./navigation-list-group\";\nimport { NavigationListGroupContent } from \"./navigation-list-group-content\";\nimport { NavigationListGroupLabel } from \"./navigation-list-group-label\";\nimport { NavigationListItem } from \"./navigation-list-item\";\nimport { NavigationListLink } from \"./navigation-list-link\";\nimport { NavigationListSeparator } from \"./navigation-list-separator\";\nimport { NavigationListSkeleton } from \"./navigation-list-skeleton\";\nimport { NavigationListSub } from \"./navigation-list-sub\";\nimport { NavigationListSubItem } from \"./navigation-list-sub-item\";\nimport { NavigationListSubLink } from \"./navigation-list-sub-link\";\n\nconst navigationListVariants = tv({\n base: \"flex min-w-0 flex-col\",\n variants: {\n size: {\n xs: \"gap-1\",\n sm: \"gap-1\",\n md: \"gap-1.5\",\n lg: \"gap-2\",\n xl: \"gap-2.5\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport interface NavigationListRootState {\n size: UISize;\n slot: \"navigation-list\";\n tone: NavigationListTone;\n variant: NavigationListVariant;\n}\n\nexport type NavigationListProps = Omit<ComponentProps<\"nav\">, \"className\"> &\n Omit<\n VariantProps<typeof navigationListVariants>,\n \"class\" | \"className\" | \"size\"\n > & {\n className?: BaseUIClassName<NavigationListRootState>;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationList = ({\n className,\n size: providedSize,\n tone = \"surface\",\n variant = \"light\",\n children,\n ...props\n}: NavigationListProps) => {\n const size = useComponentSize(providedSize);\n const state: NavigationListRootState = {\n size,\n slot: \"navigation-list\",\n tone,\n variant,\n };\n\n const resolvedClassName =\n typeof className === \"function\" ? className(state) : className;\n\n return (\n <NavigationListContext.Provider value={{ size, tone, variant }}>\n <nav\n className={cn(\n navigationListVariants({\n size,\n tone,\n variant,\n }),\n resolvedClassName\n )}\n data-size={size}\n data-slot=\"navigation-list\"\n data-tone={tone}\n data-variant={variant}\n {...props}\n >\n {children}\n </nav>\n </NavigationListContext.Provider>\n );\n};\n\nNavigationList.Action = NavigationListAction;\nNavigationList.Badge = NavigationListBadge;\nNavigationList.Content = NavigationListContent;\nNavigationList.Group = NavigationListGroup;\nNavigationList.GroupContent = NavigationListGroupContent;\nNavigationList.GroupLabel = NavigationListGroupLabel;\nNavigationList.Item = NavigationListItem;\nNavigationList.Link = NavigationListLink;\nNavigationList.Separator = NavigationListSeparator;\nNavigationList.Skeleton = NavigationListSkeleton;\nNavigationList.Sub = NavigationListSub;\nNavigationList.SubItem = NavigationListSubItem;\nNavigationList.SubLink = NavigationListSubLink;\n\nexport {\n NavigationList,\n NavigationListAction,\n NavigationListBadge,\n NavigationListContent,\n NavigationListGroup,\n NavigationListGroupContent,\n NavigationListGroupLabel,\n NavigationListItem,\n NavigationListLink,\n NavigationListSeparator,\n NavigationListSkeleton,\n NavigationListSub,\n NavigationListSubItem,\n NavigationListSubLink,\n};\n\nexport type { NavigationListActionProps } from \"./navigation-list-action\";\nexport type { NavigationListBadgeProps } from \"./navigation-list-badge\";\nexport type { NavigationListContentProps } from \"./navigation-list-content\";\nexport type {\n NavigationListContextValue,\n NavigationListTone,\n NavigationListVariant,\n} from \"./navigation-list-context\";\nexport type { NavigationListGroupProps } from \"./navigation-list-group\";\nexport type { NavigationListGroupContentProps } from \"./navigation-list-group-content\";\nexport type { NavigationListGroupLabelProps } from \"./navigation-list-group-label\";\nexport type { NavigationListItemProps } from \"./navigation-list-item\";\nexport type { NavigationListLinkProps } from \"./navigation-list-link\";\nexport type { NavigationListSeparatorProps } from \"./navigation-list-separator\";\nexport type { NavigationListSkeletonProps } from \"./navigation-list-skeleton\";\nexport type { NavigationListSubProps } from \"./navigation-list-sub\";\nexport type { NavigationListSubItemProps } from \"./navigation-list-sub-item\";\nexport type { NavigationListSubLinkProps } from \"./navigation-list-sub-link\";\n","import type { ReactNode } from \"react\";\n\nconst MIN_STEP_TOLERANCE_MULTIPLIER = 10;\n\nexport const getMinStepsBetweenValues = ({\n minRange,\n restrictToMarks,\n step,\n}: {\n minRange: number;\n restrictToMarks: boolean;\n step: number;\n}) => {\n if (restrictToMarks || step <= 0 || !Number.isFinite(minRange)) {\n return;\n }\n\n const steps = minRange / step;\n if (!Number.isFinite(steps) || steps < 0) {\n return;\n }\n\n const roundedSteps = Math.round(steps);\n return Math.abs(steps - roundedSteps) <\n Number.EPSILON * MIN_STEP_TOLERANCE_MULTIPLIER\n ? roundedSteps\n : undefined;\n};\n\nexport const getThumbChildrenByIndex = (\n thumbChildren: ReactNode | [ReactNode, ReactNode] | undefined,\n index: 0 | 1\n) => {\n if (!Array.isArray(thumbChildren)) {\n return thumbChildren;\n }\n\n return thumbChildren[index];\n};\n","import type { SliderMark } from \"../../slider/shared/slider-types\";\n\nimport {\n clampNumber,\n getFirstMarkValue,\n getLastMarkValue,\n getNearestMarkValue,\n getNextMarkValue,\n getPreviousMarkValue,\n getSortedSelectableMarks,\n isKeyboardLikeReason,\n toFloatingValue,\n} from \"../../slider/math/slider-math-utils\";\n\ninterface NormalizeRangeSliderValueOptions {\n activeThumbIndex?: number;\n current: readonly number[];\n domainMax: number;\n domainMin: number;\n marks?: readonly SliderMark[];\n max: number;\n maxRange: number;\n min: number;\n minRange: number;\n precision: number;\n pushOnOverlap: boolean;\n raw: readonly number[];\n reason?: string;\n restrictToMarks?: boolean;\n}\n\nconst getResolvedActiveThumbIndex = (\n current: readonly number[],\n raw: readonly number[],\n activeThumbIndex?: number\n) => {\n if (activeThumbIndex === 0 || activeThumbIndex === 1) {\n return activeThumbIndex;\n }\n\n const currentFrom = current[0] ?? 0;\n const currentTo = current[1] ?? 0;\n const rawFrom = raw[0] ?? currentFrom;\n const rawTo = raw[1] ?? currentTo;\n\n return Math.abs(rawFrom - currentFrom) >= Math.abs(rawTo - currentTo) ? 0 : 1;\n};\n\nexport const normalizeRangeSliderValue = ({\n activeThumbIndex,\n current,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw,\n reason,\n restrictToMarks,\n}: NormalizeRangeSliderValueOptions): [number, number] => {\n const currentFrom = clampNumber(current[0] ?? min, min, max);\n const currentTo = clampNumber(current[1] ?? max, min, max);\n const currentValues: [number, number] = [currentFrom, currentTo];\n\n const clampedRawFrom = clampNumber(\n raw[0] ?? currentFrom,\n domainMin,\n domainMax\n );\n const clampedRawTo = clampNumber(raw[1] ?? currentTo, domainMin, domainMax);\n\n const resolvedActiveIndex = getResolvedActiveThumbIndex(\n [currentFrom, currentTo],\n [clampedRawFrom, clampedRawTo],\n activeThumbIndex\n );\n\n const clone: [number, number] = [\n clampNumber(clampedRawFrom, min, max),\n clampNumber(clampedRawTo, min, max),\n ];\n\n if (restrictToMarks) {\n const selectableMarks = getSortedSelectableMarks(marks, min, max);\n if (selectableMarks.length) {\n const firstMarkValue = getFirstMarkValue(selectableMarks, min);\n const lastMarkValue = getLastMarkValue(selectableMarks, max);\n const index = resolvedActiveIndex;\n const otherIndex = index === 0 ? 1 : 0;\n const currentAtIndex = currentValues[index];\n const rawAtIndex = index === 0 ? clampedRawFrom : clampedRawTo;\n\n if (isKeyboardLikeReason(reason)) {\n if (rawAtIndex <= min) {\n clone[index] = firstMarkValue;\n } else if (rawAtIndex >= max) {\n clone[index] = lastMarkValue;\n } else if (rawAtIndex > currentAtIndex) {\n clone[index] = getNextMarkValue(currentAtIndex, selectableMarks);\n } else if (rawAtIndex < currentAtIndex) {\n clone[index] = getPreviousMarkValue(currentAtIndex, selectableMarks);\n } else {\n clone[index] = getNearestMarkValue(rawAtIndex, selectableMarks);\n }\n } else {\n clone[index] = getNearestMarkValue(rawAtIndex, selectableMarks);\n }\n\n if (\n clone[index] === lastMarkValue &&\n clone[otherIndex] === lastMarkValue\n ) {\n clone[index] = currentAtIndex;\n } else if (\n clone[index] === firstMarkValue &&\n clone[otherIndex] === firstMarkValue\n ) {\n clone[index] = currentAtIndex;\n } else if (clone[index] === clone[otherIndex]) {\n if (currentAtIndex > clone[otherIndex]) {\n clone[otherIndex] = getPreviousMarkValue(\n clone[index],\n selectableMarks\n );\n } else {\n clone[otherIndex] = getNextMarkValue(clone[index], selectableMarks);\n }\n }\n }\n } else {\n const safeMinRange = Number.isFinite(minRange) ? Math.max(minRange, 0) : 0;\n const safeMaxRange = Number.isFinite(maxRange)\n ? Math.max(maxRange, safeMinRange)\n : Number.POSITIVE_INFINITY;\n\n if (resolvedActiveIndex === 0) {\n const [clamped] = clone;\n\n if (clamped > clone[1] - (safeMinRange - 1e-9)) {\n if (pushOnOverlap) {\n clone[1] = Math.min(clamped + safeMinRange, max);\n } else {\n clone[0] = currentFrom;\n }\n }\n\n if (clamped > clone[1] - (safeMinRange - 1e-9)) {\n if (pushOnOverlap) {\n clone[0] = clone[1] - safeMinRange;\n } else {\n clone[0] = currentFrom;\n }\n }\n\n if (clone[1] - clamped > safeMaxRange) {\n if (pushOnOverlap) {\n clone[1] = clamped + safeMaxRange;\n } else {\n clone[0] = currentFrom;\n }\n }\n }\n\n if (resolvedActiveIndex === 1) {\n const [, clamped] = clone;\n\n if (clamped < clone[0] + safeMinRange) {\n if (pushOnOverlap) {\n clone[0] = Math.max(clamped - safeMinRange, min);\n } else {\n clone[1] = currentTo;\n }\n }\n\n if (clamped < clone[0] + safeMinRange) {\n if (pushOnOverlap) {\n clone[1] = clone[0] + safeMinRange;\n } else {\n clone[1] = currentTo;\n }\n }\n\n if (clamped - clone[0] > safeMaxRange) {\n if (pushOnOverlap) {\n clone[0] = clamped - safeMaxRange;\n } else {\n clone[1] = currentTo;\n }\n }\n }\n }\n\n const rounded: [number, number] = [\n toFloatingValue(clampNumber(clone[0], min, max), precision),\n toFloatingValue(clampNumber(clone[1], min, max), precision),\n ];\n\n if (rounded[0] > rounded[1]) {\n return [rounded[1], rounded[0]];\n }\n\n return rounded;\n};\n","\"use client\";\n\nimport type { Slider as SliderPrimitive } from \"@base-ui/react/slider\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type { SliderMark } from \"../slider/shared/slider-types\";\nimport type { RangeSliderValue } from \"./range-slider-types\";\n\nimport { normalizeRangeSliderValue } from \"./math/normalize-range-slider-value\";\n\ninterface UseRangeSliderStateOptions {\n defaultValue?: RangeSliderValue;\n domainMax: number;\n domainMin: number;\n marks?: readonly SliderMark[];\n max: number;\n maxRange: number;\n min: number;\n minRange: number;\n onChange?: ((value: RangeSliderValue) => void) | undefined;\n onChangeEnd?: ((value: RangeSliderValue) => void) | undefined;\n precision: number;\n pushOnOverlap: boolean;\n restrictToMarks: boolean;\n value?: RangeSliderValue;\n}\n\nexport const useRangeSliderState = ({\n defaultValue,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n onChange,\n onChangeEnd,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n}: UseRangeSliderStateOptions) => {\n const initialValue = useMemo(\n () =>\n normalizeRangeSliderValue({\n current: [min, max],\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: defaultValue ?? [min, max],\n restrictToMarks,\n }),\n [\n defaultValue,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n ]\n );\n\n const [uncontrolledValue, setUncontrolledValue] =\n useState<RangeSliderValue>(initialValue);\n\n const controlledValue = useMemo(() => {\n if (value === undefined) {\n return;\n }\n\n return normalizeRangeSliderValue({\n current: uncontrolledValue,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: value,\n restrictToMarks,\n });\n }, [\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n uncontrolledValue,\n value,\n ]);\n\n const rangeValue = controlledValue ?? uncontrolledValue;\n const valueRef = useRef<RangeSliderValue>(rangeValue);\n\n useEffect(() => {\n valueRef.current = rangeValue;\n }, [rangeValue]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setUncontrolledValue((previous) =>\n normalizeRangeSliderValue({\n current: previous,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: previous,\n restrictToMarks,\n })\n );\n }, [\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n ]);\n\n const handleValueChange = useCallback(\n (\n nextValue: number | number[],\n eventDetails: SliderPrimitive.Root.ChangeEventDetails\n ) => {\n const rawValues = Array.isArray(nextValue)\n ? [\n nextValue[0] ?? valueRef.current[0],\n nextValue[1] ?? valueRef.current[1],\n ]\n : [nextValue, valueRef.current[1]];\n\n const normalizedValue = normalizeRangeSliderValue({\n activeThumbIndex: eventDetails.activeThumbIndex,\n current: valueRef.current,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: rawValues,\n reason: eventDetails.reason,\n restrictToMarks,\n });\n\n valueRef.current = normalizedValue;\n\n if (value === undefined) {\n setUncontrolledValue(normalizedValue);\n }\n\n onChange?.(normalizedValue);\n },\n [\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n onChange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n ]\n );\n\n const handleValueCommitted = useCallback(() => {\n onChangeEnd?.(valueRef.current);\n }, [onChangeEnd]);\n\n return {\n handleValueChange,\n handleValueCommitted,\n rangeValue,\n };\n};\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { Slider as SliderPrimitive } from \"@base-ui/react/slider\";\n\nimport type {\n SliderRadius,\n SliderSize,\n} from \"../slider/shared/slider-style-tokens\";\nimport type { SliderLabelTransitionProps } from \"../slider/shared/slider-transition\";\nimport type {\n SliderLabel,\n SliderMark as SliderMarkType,\n} from \"../slider/shared/slider-types\";\nimport type { RangeSliderValue } from \"./range-slider-types\";\n\nimport { toFloatingValue } from \"../slider/math/slider-math-utils\";\nimport { SliderControl } from \"../slider/primitives/slider-control\";\nimport { SliderIndicator } from \"../slider/primitives/slider-indicator\";\nimport { SliderMark } from \"../slider/primitives/slider-mark\";\nimport { SliderMarks } from \"../slider/primitives/slider-marks\";\nimport {\n SliderThumb,\n type SliderThumbProps,\n} from \"../slider/primitives/slider-thumb\";\nimport { SliderThumbLabel } from \"../slider/primitives/slider-thumb-label\";\nimport { SliderTrack } from \"../slider/primitives/slider-track\";\nimport { SliderValue as SliderValuePrimitive } from \"../slider/primitives/slider-value\";\nimport { resolveSliderBounds } from \"../slider/shared/slider-bounds\";\nimport { resolveSliderLabel } from \"../slider/shared/slider-label\";\nimport {\n mergeSliderRootStyle,\n resolveSliderRootClassName,\n} from \"../slider/shared/slider-root-presentation\";\nimport {\n getMinStepsBetweenValues,\n getThumbChildrenByIndex,\n} from \"./range-slider-helpers\";\nimport { useRangeSliderState } from \"./use-range-slider-state\";\n\ntype RangeSliderRootProps = Omit<\n SliderPrimitive.Root.Props<number[]>,\n | \"defaultValue\"\n | \"max\"\n | \"min\"\n | \"minStepsBetweenValues\"\n | \"name\"\n | \"onChange\"\n | \"onValueChange\"\n | \"onValueCommitted\"\n | \"thumbAlignment\"\n | \"thumbCollisionBehavior\"\n | \"value\"\n>;\n\nexport interface RangeSliderProps extends RangeSliderRootProps {\n color?: string;\n defaultValue?: RangeSliderValue;\n domain?: [number, number];\n hiddenInputProps?: Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"name\" | \"type\" | \"value\"\n >;\n inverted?: boolean;\n label?: SliderLabel;\n labelAlwaysOn?: boolean;\n labelTransitionProps?: SliderLabelTransitionProps;\n marks?: readonly SliderMarkType[];\n max?: number;\n maxRange?: number;\n min?: number;\n minRange?: number;\n name?: string;\n onChange?: ((value: RangeSliderValue) => void) | undefined;\n onChangeEnd?: ((value: RangeSliderValue) => void) | undefined;\n precision?: number;\n pushOnOverlap?: boolean;\n radius?: SliderRadius;\n restrictToMarks?: boolean;\n scale?: ((value: number) => number) | undefined;\n size?: SliderSize;\n showLabelOnHover?: boolean;\n step?: number;\n thumbChildren?: ReactNode | [ReactNode, ReactNode];\n thumbFromLabel?: string;\n thumbLabelOffset?: number | string;\n thumbLabelOffsetVertical?: number | string;\n thumbProps?:\n | ((\n index: 0 | 1\n ) => Omit<SliderThumbProps, \"aria-label\" | \"children\" | \"index\">)\n | undefined;\n thumbSize?: number | string;\n thumbToLabel?: string;\n trackSize?: number | string;\n markSize?: number | string;\n value?: RangeSliderValue;\n}\n\ntype RangeSliderComponent = ((props: RangeSliderProps) => ReactNode) & {\n Control: typeof SliderControl;\n Indicator: typeof SliderIndicator;\n Mark: typeof SliderMark;\n Marks: typeof SliderMarks;\n Thumb: typeof SliderThumb;\n ThumbLabel: typeof SliderThumbLabel;\n Track: typeof SliderTrack;\n Value: typeof SliderValuePrimitive;\n};\n\nconst RangeSlider = (({\n className,\n children,\n color,\n defaultValue,\n domain,\n hiddenInputProps,\n inverted = false,\n label = (value) => value,\n labelAlwaysOn = false,\n labelTransitionProps,\n marks,\n max = 100,\n maxRange = Number.POSITIVE_INFINITY,\n min = 0,\n minRange = 10,\n name,\n onChange,\n onChangeEnd,\n precision: precisionProp,\n pushOnOverlap = true,\n radius,\n restrictToMarks = false,\n scale = (value) => value,\n size,\n showLabelOnHover = true,\n step = 1,\n style,\n thumbChildren,\n thumbFromLabel,\n thumbLabelOffset,\n thumbLabelOffsetVertical,\n thumbProps,\n thumbSize,\n thumbToLabel,\n trackSize,\n markSize,\n value,\n ...props\n}: RangeSliderProps) => {\n const resolvedBounds = resolveSliderBounds({\n domain,\n max,\n min,\n precision: precisionProp,\n step,\n });\n\n const {\n domainMax,\n domainMin,\n max: normalizedMax,\n min: normalizedMin,\n precision,\n } = resolvedBounds;\n\n const { handleValueChange, handleValueCommitted, rangeValue } =\n useRangeSliderState({\n defaultValue,\n domainMax,\n domainMin,\n marks,\n max: normalizedMax,\n maxRange,\n min: normalizedMin,\n minRange,\n onChange,\n onChangeEnd,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n });\n\n const firstThumbProps = thumbProps?.(0) ?? {};\n const secondThumbProps = thumbProps?.(1) ?? {};\n\n const minStepsBetweenValues = getMinStepsBetweenValues({\n minRange,\n restrictToMarks,\n step,\n });\n\n const displayedFromValue = toFloatingValue(scale(rangeValue[0]), precision);\n const displayedToValue = toFloatingValue(scale(rangeValue[1]), precision);\n\n return (\n <SliderPrimitive.Root\n {...props}\n className={resolveSliderRootClassName(className, inverted)}\n data-slot=\"slider\"\n max={domainMax}\n min={domainMin}\n minStepsBetweenValues={minStepsBetweenValues}\n onValueChange={handleValueChange}\n onValueCommitted={handleValueCommitted}\n step={step}\n style={mergeSliderRootStyle(\n {\n color,\n markSize,\n radius,\n size,\n thumbLabelOffset,\n thumbLabelOffsetVertical,\n thumbSize,\n trackSize,\n },\n style\n )}\n thumbAlignment=\"center\"\n thumbCollisionBehavior={pushOnOverlap ? \"push\" : \"none\"}\n value={rangeValue}\n >\n {children ?? (\n <SliderControl>\n <SliderTrack>\n <SliderIndicator />\n <SliderMarks\n disabled={props.disabled}\n inverted={inverted}\n marks={marks}\n max={domainMax}\n min={domainMin}\n orientation={props.orientation}\n values={rangeValue}\n />\n </SliderTrack>\n <SliderThumb\n {...firstThumbProps}\n aria-label={thumbFromLabel}\n index={0}\n >\n {getThumbChildrenByIndex(thumbChildren, 0)}\n <SliderThumbLabel\n label={resolveSliderLabel(label, displayedFromValue)}\n labelAlwaysOn={labelAlwaysOn}\n orientation={props.orientation}\n showLabelOnHover={showLabelOnHover}\n transitionProps={labelTransitionProps}\n />\n </SliderThumb>\n <SliderThumb\n {...secondThumbProps}\n aria-label={thumbToLabel}\n index={1}\n >\n {getThumbChildrenByIndex(thumbChildren, 1)}\n <SliderThumbLabel\n label={resolveSliderLabel(label, displayedToValue)}\n labelAlwaysOn={labelAlwaysOn}\n orientation={props.orientation}\n showLabelOnHover={showLabelOnHover}\n transitionProps={labelTransitionProps}\n />\n </SliderThumb>\n </SliderControl>\n )}\n {name ? (\n <>\n <input\n {...hiddenInputProps}\n name={`${name}_from`}\n type=\"hidden\"\n value={String(displayedFromValue)}\n />\n <input\n {...hiddenInputProps}\n name={`${name}_to`}\n type=\"hidden\"\n value={String(displayedToValue)}\n />\n </>\n ) : null}\n </SliderPrimitive.Root>\n );\n}) as RangeSliderComponent;\n\nRangeSlider.Control = SliderControl;\nRangeSlider.Indicator = SliderIndicator;\nRangeSlider.Mark = SliderMark;\nRangeSlider.Marks = SliderMarks;\nRangeSlider.Thumb = SliderThumb;\nRangeSlider.ThumbLabel = SliderThumbLabel;\nRangeSlider.Track = SliderTrack;\nRangeSlider.Value = SliderValuePrimitive;\n\nexport { RangeSlider };\n"],"mappings":"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A,OACA,KACA,UACA,KACA,UACA,UACA,aACA,WACA,eACA,iBACA,YACgC;CAgChC,MAAM,CAAC,mBAAmB,wBACxB,SAhCmB,cAEjB,0BAA0B;EACxB,SAAS,CAAC,KAAK,IAAI;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,KAAK,gBAAgB,CAAC,KAAK,IAAI;EAC/B;EACD,CAAC,EACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF,CAGyC;CAoC1C,MAAM,aAlCkB,cAAc;AACpC,MAAI,UAAU,OACZ;AAGF,SAAO,0BAA0B;GAC/B,SAAS;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,KAAK;GACL;GACD,CAAC;IACD;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,IAEoC;CACtC,MAAM,WAAW,OAAyB,WAAW;AAErD,iBAAgB;AACd,WAAS,UAAU;IAClB,CAAC,WAAW,CAAC;AAEhB,iBAAgB;AACd,MAAI,UAAU,OACZ;AAGF,wBAAsB,aACpB,0BAA0B;GACxB,SAAS;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,KAAK;GACL;GACD,CAAC,CACH;IACA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AA2DF,QAAO;EACL,mBA1DwB,aAEtB,WACA,iBACG;GACH,MAAM,YAAY,MAAM,QAAQ,UAAU,GACtC,CACE,UAAU,MAAM,SAAS,QAAQ,IACjC,UAAU,MAAM,SAAS,QAAQ,GAClC,GACD,CAAC,WAAW,SAAS,QAAQ,GAAG;GAEpC,MAAM,kBAAkB,0BAA0B;IAChD,kBAAkB,aAAa;IAC/B,SAAS,SAAS;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,KAAK;IACL,QAAQ,aAAa;IACrB;IACD,CAAC;AAEF,YAAS,UAAU;AAEnB,OAAI,UAAU,OACZ,sBAAqB,gBAAgB;AAGvC,cAAW,gBAAgB;KAE7B;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CACF;EAQC,sBAN2B,kBAAkB;AAC7C,iBAAc,SAAS,QAAQ;KAC9B,CAAC,YAAY,CAAC;EAKf;EACD;;;;;ACxGH,MAAM,gBAAgB,EACpB,WACA,UACA,OACA,cACA,QACA,kBACA,WAAW,OACX,SAAS,UAAU,OACnB,gBAAgB,OAChB,sBACA,OACA,MAAM,KACN,WAAW,OAAO,mBAClB,MAAM,GACN,WAAW,IACX,MACA,UACA,aACA,WAAW,eACX,gBAAgB,MAChB,QACA,kBAAkB,OAClB,SAAS,UAAU,OACnB,MACA,mBAAmB,MACnB,OAAO,GACP,OACA,eACA,gBACA,kBACA,0BACA,YACA,WACA,cACA,WACA,UACA,OACA,GAAG,YACmB;CAStB,MAAM,EACJ,WACA,WACA,KAAK,eACL,KAAK,eACL,cAbqB,oBAAoB;EACzC;EACA;EACA;EACA,WAAW;EACX;EACD,CAAC;CAUF,MAAM,EAAE,mBAAmB,sBAAsB,eAC/C,oBAAoB;EAClB;EACA;EACA;EACA;EACA,KAAK;EACL;EACA,KAAK;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEJ,MAAM,kBAAkB,aAAa,EAAE,IAAI,EAAE;CAC7C,MAAM,mBAAmB,aAAa,EAAE,IAAI,EAAE;CAE9C,MAAM,wBAAwB,yBAAyB;EACrD;EACA;EACA;EACD,CAAC;CAEF,MAAM,qBAAqB,gBAAgB,MAAM,WAAW,GAAG,EAAE,UAAU;CAC3E,MAAM,mBAAmB,gBAAgB,MAAM,WAAW,GAAG,EAAE,UAAU;AAEzE,QACE,qBAACC,SAAgB;EACf,GAAI;EACJ,WAAW,2BAA2B,WAAW,SAAS;EAC1D,aAAU;EACV,KAAK;EACL,KAAK;EACkB;EACvB,eAAe;EACf,kBAAkB;EACZ;EACN,OAAO,qBACL;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,EACD,MACD;EACD,gBAAe;EACf,wBAAwB,gBAAgB,SAAS;EACjD,OAAO;aAEN,YACC,qBAAC;GACC,qBAAC,0BACC,oBAAC,oBAAkB,EACnB,oBAAC;IACC,UAAU,MAAM;IACN;IACH;IACP,KAAK;IACL,KAAK;IACL,aAAa,MAAM;IACnB,QAAQ;KACR,IACU;GACd,qBAAC;IACC,GAAI;IACJ,cAAY;IACZ,OAAO;eAEN,wBAAwB,eAAe,EAAE,EAC1C,oBAAC;KACC,OAAO,mBAAmB,OAAO,mBAAmB;KACrC;KACf,aAAa,MAAM;KACD;KAClB,iBAAiB;MACjB;KACU;GACd,qBAAC;IACC,GAAI;IACJ,cAAY;IACZ,OAAO;eAEN,wBAAwB,eAAe,EAAE,EAC1C,oBAAC;KACC,OAAO,mBAAmB,OAAO,iBAAiB;KACnC;KACf,aAAa,MAAM;KACD;KAClB,iBAAiB;MACjB;KACU;MACA,EAEjB,OACC,4CACE,oBAAC;GACC,GAAI;GACJ,MAAM,GAAG,KAAK;GACd,MAAK;GACL,OAAO,OAAO,mBAAmB;IACjC,EACF,oBAAC;GACC,GAAI;GACJ,MAAM,GAAG,KAAK;GACd,MAAK;GACL,OAAO,OAAO,iBAAiB;IAC/B,IACD,GACD;GACiB;;AAI3B,YAAY,UAAU;AACtB,YAAY,YAAY;AACxB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB,YAAY,QAAQ;AACpB,YAAY,QAAQC"}
1
+ {"version":3,"file":"index.js","names":["BaseForm","CollapsiblePrimitive","CollapsiblePrimitive","CollapsiblePrimitive","SliderPrimitive","SliderValuePrimitive"],"sources":["../src/ui/copy-button/copy-button.tsx","../src/ui/form/form.tsx","../src/ui/navigation-list/navigation-list-context.tsx","../src/ui/navigation-list/navigation-list-item-context.tsx","../src/ui/navigation-list/navigation-list-action.tsx","../src/ui/navigation-list/navigation-list-badge.tsx","../src/ui/navigation-list/navigation-list-content.tsx","../src/ui/navigation-list/navigation-list-group.tsx","../src/ui/navigation-list/navigation-list-group-content.tsx","../src/ui/navigation-list/navigation-list-group-label.tsx","../src/ui/navigation-list/navigation-list-item.tsx","../src/ui/navigation-list/navigation-list-link.tsx","../src/ui/navigation-list/navigation-list-separator.tsx","../src/ui/navigation-list/navigation-list-skeleton.tsx","../src/ui/navigation-list/navigation-list-sub.tsx","../src/ui/navigation-list/navigation-list-sub-item.tsx","../src/ui/navigation-list/navigation-list-sub-link.tsx","../src/ui/navigation-list/navigation-list.tsx","../src/ui/range-slider/range-slider-helpers.ts","../src/ui/range-slider/math/normalize-range-slider-value.ts","../src/ui/range-slider/use-range-slider-state.ts","../src/ui/range-slider/range-slider.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HugeiconsProps } from \"@hugeicons/react\";\nimport type { ComponentProps, ReactNode } from \"react\";\n\nimport {\n Alert01Icon,\n Copy01Icon,\n Loading03Icon,\n Tick02Icon,\n} from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { useClipboard } from \"@kuzenbo/hooks\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"tailwind-variants\";\n\nimport { Button } from \"../button/button\";\n\nexport type CopyButtonStatus = \"idle\" | \"copying\" | \"copied\" | \"failed\";\n\ntype CopyButtonStatusMap = Record<CopyButtonStatus, string>;\n\ntype CopyButtonContent = ReactNode | ((status: CopyButtonStatus) => ReactNode);\n\nconst DEFAULT_TIMEOUT = 1200;\n\nconst STATUS_ORDER: CopyButtonStatus[] = [\n \"idle\",\n \"copying\",\n \"copied\",\n \"failed\",\n];\n\nconst STATUS_LABELS: CopyButtonStatusMap = {\n idle: \"Copy\",\n copying: \"Copying\",\n copied: \"Copied\",\n failed: \"Copy failed\",\n};\n\nconst STATUS_LIVE_MESSAGES: CopyButtonStatusMap = {\n idle: \"Ready to copy to clipboard\",\n copying: \"Copying to clipboard\",\n copied: \"Copied to clipboard\",\n failed: \"Failed to copy to clipboard\",\n};\n\nconst STATUS_ICON_BY_STATUS = {\n idle: Copy01Icon,\n copying: Loading03Icon,\n copied: Tick02Icon,\n failed: Alert01Icon,\n} as const satisfies Record<\n CopyButtonStatus,\n NonNullable<HugeiconsProps[\"icon\"]>\n>;\n\nexport type CopyButtonProps = Omit<\n ComponentProps<typeof Button>,\n \"aria-pressed\" | \"children\" | \"isLoading\" | \"onClick\"\n> & {\n value: string;\n timeout?: number;\n useLegacyFallback?: boolean;\n status?: CopyButtonStatus;\n defaultStatus?: CopyButtonStatus;\n onStatusChange?: (status: CopyButtonStatus) => void;\n statusLabels?: Partial<CopyButtonStatusMap>;\n liveRegionMessages?: Partial<CopyButtonStatusMap>;\n children?: CopyButtonContent;\n onClick?: ComponentProps<typeof Button>[\"onClick\"];\n};\n\nconst resolveContent = (\n content: CopyButtonContent | undefined,\n status: CopyButtonStatus\n) => {\n if (typeof content === \"function\") {\n return content(status);\n }\n\n return content;\n};\n\nconst CopyButton = ({\n className,\n value,\n timeout = DEFAULT_TIMEOUT,\n useLegacyFallback = true,\n status,\n defaultStatus = \"idle\",\n onStatusChange,\n statusLabels,\n liveRegionMessages,\n children,\n disabled,\n onClick,\n type = \"button\",\n \"aria-label\": ariaLabel,\n ...props\n}: CopyButtonProps) => {\n const clipboard = useClipboard({\n copiedDurationMs: timeout,\n failedDurationMs: timeout,\n useLegacyFallback,\n });\n const [internalStatus, setInternalStatus] =\n useState<CopyButtonStatus>(defaultStatus);\n const isControlled = status !== undefined;\n const currentStatus = status ?? internalStatus;\n const currentStatusRef = useRef(currentStatus);\n const hasMountedRef = useRef(false);\n\n const mergedStatusLabels = useMemo<CopyButtonStatusMap>(\n () => ({ ...STATUS_LABELS, ...statusLabels }),\n [statusLabels]\n );\n\n const mergedLiveMessages = useMemo<CopyButtonStatusMap>(\n () => ({ ...STATUS_LIVE_MESSAGES, ...liveRegionMessages }),\n [liveRegionMessages]\n );\n\n const setStatus = useCallback(\n (nextStatus: CopyButtonStatus) => {\n if (currentStatusRef.current === nextStatus) {\n return;\n }\n\n currentStatusRef.current = nextStatus;\n\n if (!isControlled) {\n setInternalStatus(nextStatus);\n }\n\n onStatusChange?.(nextStatus);\n },\n [isControlled, onStatusChange]\n );\n\n const handleClick = useCallback<NonNullable<CopyButtonProps[\"onClick\"]>>(\n (event) => {\n onClick?.(event);\n\n if (event.defaultPrevented || disabled) {\n return;\n }\n\n clipboard.reset();\n setStatus(\"copying\");\n clipboard.copy(value);\n },\n [clipboard, disabled, onClick, setStatus, value]\n );\n\n useEffect(() => {\n currentStatusRef.current = currentStatus;\n }, [currentStatus]);\n\n useEffect(() => {\n if (!hasMountedRef.current) {\n hasMountedRef.current = true;\n return;\n }\n\n setStatus(clipboard.status);\n }, [clipboard.status, setStatus]);\n\n const resolvedContent = resolveContent(children, currentStatus);\n const visibleLabel = resolvedContent ?? mergedStatusLabels[currentStatus];\n const hookAnnouncement =\n clipboard.announcement.trim().length > 0\n ? clipboard.announcement\n : undefined;\n const liveRegionText =\n liveRegionMessages?.[currentStatus] ??\n hookAnnouncement ??\n mergedLiveMessages[currentStatus];\n const resolvedAriaLabel =\n ariaLabel ?? (visibleLabel ? undefined : mergedStatusLabels[currentStatus]);\n\n return (\n <>\n <Button\n aria-label={resolvedAriaLabel}\n className={cn(\"gap-2\", className)}\n data-slot=\"copy-button\"\n data-status={currentStatus}\n disabled={disabled || currentStatus === \"copying\"}\n onClick={handleClick}\n type={type}\n {...props}\n >\n <span className=\"inline-flex items-center gap-2\">\n <span\n aria-hidden=\"true\"\n className=\"relative inline-flex size-4 items-center justify-center\"\n >\n {STATUS_ORDER.map((iconStatus) => (\n <HugeiconsIcon\n key={iconStatus}\n className={cn(\n \"absolute inset-0 size-4 transition-opacity duration-150 ease-out motion-reduce:transition-none\",\n iconStatus === currentStatus ? \"opacity-100\" : \"opacity-0\",\n iconStatus === \"copying\" &&\n \"data-[active=true]:animate-spin motion-reduce:data-[active=true]:animate-none\",\n iconStatus === \"copied\" && \"text-success\",\n iconStatus === \"failed\" && \"text-danger\",\n iconStatus === \"idle\" && \"text-muted-foreground\"\n )}\n data-active={iconStatus === currentStatus}\n data-status-icon={iconStatus}\n icon={STATUS_ICON_BY_STATUS[iconStatus]}\n strokeWidth={2}\n />\n ))}\n </span>\n {visibleLabel ? (\n <span className=\"transition-opacity duration-150 ease-out motion-reduce:transition-none\">\n {visibleLabel}\n </span>\n ) : null}\n </span>\n </Button>\n <span\n aria-atomic=\"true\"\n aria-live={currentStatus === \"failed\" ? \"assertive\" : \"polite\"}\n className=\"sr-only\"\n role=\"status\"\n >\n {liveRegionText}\n </span>\n </>\n );\n};\n\nexport { CopyButton };\n","import { Form as BaseForm } from \"@base-ui/react/form\";\n\nimport { mergeBaseUIClassName } from \"../../utils/merge-base-ui-class-name\";\n\nexport type FormRootProps<\n FormValues extends Record<string, unknown> = Record<string, unknown>,\n> = BaseForm.Props<FormValues>;\n\nexport type FormProps<\n FormValues extends Record<string, unknown> = Record<string, unknown>,\n> = FormRootProps<FormValues>;\n\nconst FormRoot = <\n FormValues extends Record<string, unknown> = Record<string, unknown>,\n>({\n className,\n ...props\n}: FormRootProps<FormValues>) => (\n <BaseForm\n className={mergeBaseUIClassName<BaseForm.State>(\n \"flex w-full flex-col gap-6\",\n className\n )}\n data-slot=\"form\"\n {...props}\n />\n);\n\nconst Form = Object.assign(FormRoot, {\n Root: FormRoot,\n});\n\nexport type FormActions = BaseForm.Actions;\nexport type FormState = BaseForm.State;\nexport type FormSubmitEventDetails = BaseForm.SubmitEventDetails;\nexport type FormSubmitEventReason = BaseForm.SubmitEventReason;\nexport type FormValidationMode = BaseForm.ValidationMode;\nexport type FormValues<\n Values extends Record<string, unknown> = Record<string, unknown>,\n> = BaseForm.Values<Values>;\n\nexport { Form, FormRoot };\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nexport type NavigationListTone = \"surface\" | \"sidebar\";\nexport type NavigationListVariant = \"subtle\" | \"light\" | \"filled\";\n\nexport interface NavigationListContextValue {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n}\n\nconst NavigationListContext = createContext<NavigationListContextValue>({\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n});\n\nconst resolveCandidate = <T,>(\n fallback: T,\n contextValue: T | undefined,\n candidates: (T | null | undefined)[]\n): T => {\n for (const candidate of candidates) {\n if (candidate !== undefined && candidate !== null) {\n return candidate;\n }\n }\n\n return contextValue ?? fallback;\n};\n\nconst useResolvedNavigationListTone = (\n ...candidates: (NavigationListTone | null | undefined)[]\n): NavigationListTone => {\n const { tone } = useContext(NavigationListContext);\n\n return resolveCandidate(\"surface\", tone, candidates);\n};\n\nconst useResolvedNavigationListVariant = (\n ...candidates: (NavigationListVariant | null | undefined)[]\n): NavigationListVariant => {\n const { variant } = useContext(NavigationListContext);\n\n return resolveCandidate(\"light\", variant, candidates);\n};\n\nconst useResolvedNavigationListSize = (\n ...candidates: (UISize | null | undefined)[]\n): UISize => {\n const { size } = useContext(NavigationListContext);\n\n return resolveCandidate(\"md\", size, candidates);\n};\n\nexport {\n NavigationListContext,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n};\n","\"use client\";\n\nimport { createContext, useContext } from \"react\";\n\nimport type { UISize } from \"../shared/size/size-system\";\nimport type {\n NavigationListTone,\n NavigationListVariant,\n} from \"./navigation-list-context\";\n\nexport interface NavigationListItemContextValue {\n collapsible: boolean;\n disabled: boolean;\n open: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n}\n\nconst NavigationListItemContext = createContext<NavigationListItemContextValue>(\n {\n collapsible: false,\n disabled: false,\n open: false,\n size: undefined,\n tone: undefined,\n variant: undefined,\n }\n);\n\nconst useNavigationListItemContext = () =>\n useContext(NavigationListItemContext);\n\nexport { NavigationListItemContext, useNavigationListItemContext };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListActionVariants = tv({\n base: \"absolute right-1 flex aspect-square cursor-pointer items-center justify-center rounded-md p-0 outline-hidden transition-transform group-data-[collapsible=true]/navigation-list-item:right-10 group-has-data-[slot=navigation-list-badge]/navigation-list-item:right-14 [&>svg]:shrink-0\",\n variants: {\n size: {\n xs: \"top-0.5 w-4 [&>svg:not([class*='size-'])]:size-3\",\n sm: \"top-1 w-5 [&>svg:not([class*='size-'])]:size-3.5\",\n md: \"top-1.5 w-5 [&>svg:not([class*='size-'])]:size-4\",\n lg: \"top-2 w-6 [&>svg:not([class*='size-'])]:size-4\",\n xl: \"top-2.5 w-7 [&>svg:not([class*='size-'])]:size-5\",\n },\n tone: {\n surface:\n \"text-muted-foreground ring-ring hover:bg-muted hover:text-foreground focus-visible:ring-2 peer-hover/navigation-list-link:text-foreground peer-data-active/navigation-list-link:text-foreground\",\n sidebar:\n \"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/navigation-list-link:text-sidebar-accent-foreground peer-data-active/navigation-list-link:text-sidebar-accent-foreground\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListActionProps = useRender.ComponentProps<\"button\"> &\n ComponentProps<\"button\"> & {\n showOnHover?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n } & VariantProps<typeof navigationListActionVariants>;\n\nconst NavigationListAction = ({\n className,\n render,\n showOnHover = false,\n size,\n tone,\n ...props\n}: NavigationListActionProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n navigationListActionVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n itemContext.variant === \"filled\" &&\n resolvedTone === \"surface\" &&\n \"peer-data-active/navigation-list-link:text-primary-foreground\",\n itemContext.variant === \"filled\" &&\n resolvedTone === \"sidebar\" &&\n \"peer-data-active/navigation-list-link:text-sidebar-primary-foreground\",\n \"peer-data-[size=xs]/navigation-list-link:top-0.5 peer-data-[size=sm]/navigation-list-link:top-1 peer-data-[size=md]/navigation-list-link:top-1.5 peer-data-[size=lg]/navigation-list-link:top-2 peer-data-[size=xl]/navigation-list-link:top-2.5\",\n showOnHover &&\n \"group-focus-within/navigation-list-item:opacity-100 group-hover/navigation-list-item:opacity-100 peer-data-active/navigation-list-link:opacity-100 md:opacity-0\",\n className\n ),\n type: render ? undefined : \"button\",\n },\n props\n ),\n render,\n state: {\n size: resolvedSize,\n slot: \"navigation-list-action\",\n tone: resolvedTone,\n },\n });\n};\n\nexport { NavigationListAction };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListBadgeVariants = tv({\n base: \"pointer-events-none absolute right-1 flex items-center justify-center rounded-md px-1 font-medium tabular-nums select-none group-data-[collapsible=true]/navigation-list-item:right-8\",\n variants: {\n size: {\n xs: \"top-0.5 h-4 min-w-4 text-[10px]\",\n sm: \"top-1 h-5 min-w-5 text-[11px]\",\n md: \"top-1.5 h-5 min-w-5 text-xs\",\n lg: \"top-2 h-6 min-w-6 text-xs\",\n xl: \"top-2.5 h-7 min-w-7 text-sm\",\n },\n tone: {\n surface:\n \"text-muted-foreground peer-hover/navigation-list-link:text-foreground peer-data-active/navigation-list-link:text-foreground\",\n sidebar:\n \"text-sidebar-foreground peer-hover/navigation-list-link:text-sidebar-accent-foreground peer-data-active/navigation-list-link:text-sidebar-accent-foreground\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListBadgeProps = ComponentProps<\"div\"> & {\n size?: UISize;\n tone?: NavigationListTone;\n} & VariantProps<typeof navigationListBadgeVariants>;\n\nconst NavigationListBadge = ({\n className,\n size,\n tone,\n ...props\n}: NavigationListBadgeProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n\n return (\n <div\n className={cn(\n navigationListBadgeVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n itemContext.variant === \"filled\" &&\n resolvedTone === \"surface\" &&\n \"peer-data-active/navigation-list-link:text-primary-foreground\",\n itemContext.variant === \"filled\" &&\n resolvedTone === \"sidebar\" &&\n \"peer-data-active/navigation-list-link:text-sidebar-primary-foreground\",\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-badge\"\n data-tone={resolvedTone}\n {...props}\n />\n );\n};\n\nexport { NavigationListBadge };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\n\nconst navigationListContentVariants = tv({\n base: \"flex min-w-0 list-none flex-col rounded-lg border\",\n variants: {\n size: {\n xs: \"gap-0.5 p-1\",\n sm: \"gap-1 p-1.5\",\n md: \"gap-1 p-2\",\n lg: \"gap-1.5 p-2.5\",\n xl: \"gap-2 p-3\",\n },\n tone: {\n surface: \"border-border bg-background text-foreground\",\n sidebar: \"border-sidebar-border bg-sidebar text-sidebar-foreground\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListContentProps = ComponentProps<\"ul\"> &\n VariantProps<typeof navigationListContentVariants> & {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListContent = ({\n className,\n size,\n tone,\n variant,\n ...props\n}: NavigationListContentProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n return (\n <ul\n className={cn(\n navigationListContentVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n )}\n data-navigation-list=\"content\"\n data-size={resolvedSize}\n data-slot=\"navigation-list-content\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n};\n\nexport { NavigationListContent };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\n\nconst navigationListGroupVariants = tv({\n base: \"list-none space-y-1\",\n variants: {\n size: {\n xs: \"\",\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListGroupProps = ComponentProps<\"li\"> &\n VariantProps<typeof navigationListGroupVariants> & {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListGroup = ({\n className,\n size,\n tone,\n variant,\n ...props\n}: NavigationListGroupProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n return (\n <li\n className={cn(\n navigationListGroupVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-group\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n};\n\nexport { NavigationListGroup };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\n\nconst navigationListGroupContentVariants = tv({\n base: \"flex list-none flex-col\",\n variants: {\n size: {\n xs: \"gap-0.5\",\n sm: \"gap-0.5\",\n md: \"gap-1\",\n lg: \"gap-1\",\n xl: \"gap-1.5\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListGroupContentProps = ComponentProps<\"ul\"> &\n VariantProps<typeof navigationListGroupContentVariants> & {\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListGroupContent = ({\n className,\n size,\n tone,\n variant,\n ...props\n}: NavigationListGroupContentProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n return (\n <ul\n className={cn(\n navigationListGroupContentVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-group-content\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n};\n\nexport { NavigationListGroupContent };\n","import type { ComponentProps } from \"react\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\n\nconst navigationListGroupLabelVariants = tv({\n base: \"flex items-center rounded-md px-2 font-medium uppercase tracking-wide\",\n variants: {\n size: {\n xs: \"h-6 text-[10px]\",\n sm: \"h-7 text-[10px]\",\n md: \"h-8 text-[11px]\",\n lg: \"h-9 text-xs\",\n xl: \"h-10 text-xs\",\n },\n tone: {\n surface: \"text-muted-foreground\",\n sidebar: \"text-sidebar-foreground/70\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListGroupLabelProps = useRender.ComponentProps<\"div\"> &\n ComponentProps<\"div\"> &\n Omit<VariantProps<typeof navigationListGroupLabelVariants>, \"size\"> & {\n size?: UISize;\n tone?: NavigationListTone;\n };\n\nconst NavigationListGroupLabel = ({\n className,\n render,\n size,\n tone,\n ...props\n}: NavigationListGroupLabelProps) => {\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n navigationListGroupLabelVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"navigation-list-group-label\",\n size: resolvedSize,\n tone: resolvedTone,\n },\n });\n};\n\nexport { NavigationListGroupLabel };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport {\n NavigationListItemContext,\n type NavigationListItemContextValue,\n} from \"./navigation-list-item-context\";\n\nconst navigationListItemVariants = tv({\n base: \"group/navigation-list-item relative list-none\",\n variants: {\n size: {\n xs: \"\",\n sm: \"\",\n md: \"\",\n lg: \"\",\n xl: \"\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListItemProps = ComponentProps<\"li\"> &\n VariantProps<typeof navigationListItemVariants> & {\n collapsible?: boolean;\n opened?: boolean;\n defaultOpened?: boolean;\n onOpenedChange?: (opened: boolean) => void;\n disabled?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationListItem = ({\n className,\n collapsible = false,\n opened,\n defaultOpened = false,\n onOpenedChange,\n disabled = false,\n size,\n tone,\n variant,\n children,\n ...props\n}: NavigationListItemProps) => {\n const [internalOpen, setInternalOpen] = useState(defaultOpened);\n const isControlled = opened !== undefined;\n const currentOpen = isControlled ? (opened ?? false) : internalOpen;\n const resolvedOpen = collapsible ? currentOpen : false;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!collapsible) {\n return;\n }\n\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n\n onOpenedChange?.(nextOpen);\n },\n [collapsible, isControlled, onOpenedChange]\n );\n\n const resolvedSize = useResolvedNavigationListSize(size);\n const resolvedTone = useResolvedNavigationListTone(tone);\n const resolvedVariant = useResolvedNavigationListVariant(variant);\n\n const contextValue = useMemo<NavigationListItemContextValue>(\n () => ({\n collapsible,\n disabled,\n open: resolvedOpen,\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n [\n collapsible,\n disabled,\n resolvedOpen,\n resolvedSize,\n resolvedTone,\n resolvedVariant,\n ]\n );\n\n const itemProps = {\n className: cn(\n navigationListItemVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n ),\n \"data-collapsible\": collapsible ? \"true\" : \"false\",\n \"data-disabled\": disabled ? \"true\" : undefined,\n \"data-open\": resolvedOpen ? \"true\" : \"false\",\n \"data-size\": resolvedSize,\n \"data-slot\": \"navigation-list-item\",\n \"data-tone\": resolvedTone,\n \"data-variant\": resolvedVariant,\n ...props,\n };\n\n return (\n <NavigationListItemContext.Provider value={contextValue}>\n <li {...itemProps}>\n {collapsible ? (\n <CollapsiblePrimitive.Root\n disabled={disabled}\n onOpenChange={handleOpenChange}\n open={resolvedOpen}\n >\n {children}\n </CollapsiblePrimitive.Root>\n ) : (\n children\n )}\n </li>\n </NavigationListItemContext.Provider>\n );\n};\n\nexport { NavigationListItem };\n","\"use client\";\n\nimport type { ComponentProps, MouseEvent, ReactNode } from \"react\";\n\nimport { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\";\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { ArrowRight01Icon } from \"@hugeicons/core-free-icons\";\nimport { HugeiconsIcon } from \"@hugeicons/react\";\nimport { useCallback, useEffect } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { BaseUIClassName } from \"../../utils/merge-base-ui-class-name\";\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListLinkVariants = tv({\n base: \"peer/navigation-list-link flex w-full cursor-pointer gap-2 overflow-hidden rounded-md text-left ring-offset-background outline-hidden transition-colors group-has-data-[slot=navigation-list-action]/navigation-list-item:pr-20 group-has-data-[slot=navigation-list-badge]/navigation-list-item:pr-20 focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50\",\n variants: {\n size: {\n xs: \"min-h-6 px-1.5 text-xs [&_svg:not([class*='size-'])]:size-3\",\n sm: \"min-h-7 px-2 text-xs [&_svg:not([class*='size-'])]:size-3.5\",\n md: \"min-h-8 px-2 text-sm [&_svg:not([class*='size-'])]:size-4\",\n lg: \"min-h-9 px-2.5 text-sm [&_svg:not([class*='size-'])]:size-4\",\n xl: \"min-h-10 px-3 text-base [&_svg:not([class*='size-'])]:size-5\",\n },\n tone: {\n surface: \"ring-ring\",\n sidebar: \"ring-sidebar-ring\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n noWrap: {\n true: \"\",\n false: \"\",\n },\n hasDescription: {\n true: \"items-start py-1.5\",\n false: \"items-center\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n noWrap: false,\n hasDescription: false,\n },\n compoundVariants: [\n {\n tone: \"surface\",\n variant: \"subtle\",\n className:\n \"hover:bg-muted/70 hover:text-foreground data-active:bg-muted/50 data-active:text-foreground data-active:font-medium\",\n },\n {\n tone: \"surface\",\n variant: \"light\",\n className:\n \"hover:bg-muted hover:text-foreground data-active:bg-muted data-active:text-foreground data-active:font-medium\",\n },\n {\n tone: \"surface\",\n variant: \"filled\",\n className:\n \"hover:bg-muted hover:text-foreground data-active:bg-primary data-active:text-primary-foreground data-active:font-medium\",\n },\n {\n tone: \"sidebar\",\n variant: \"subtle\",\n className:\n \"hover:bg-sidebar-accent/70 hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent/60 data-active:text-sidebar-accent-foreground data-active:font-medium\",\n },\n {\n tone: \"sidebar\",\n variant: \"light\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-active:font-medium\",\n },\n {\n tone: \"sidebar\",\n variant: \"filled\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-primary data-active:text-sidebar-primary-foreground data-active:font-medium\",\n },\n ],\n});\n\nconst navigationListLinkBodyVariants = tv({\n base: \"min-w-0 flex-1\",\n variants: {\n noWrap: {\n true: \"truncate\",\n false: \"\",\n },\n },\n defaultVariants: {\n noWrap: false,\n },\n});\n\nconst navigationListLinkLabelVariants = tv({\n base: \"block\",\n variants: {\n noWrap: {\n true: \"truncate\",\n false: \"\",\n },\n },\n defaultVariants: {\n noWrap: false,\n },\n});\n\nconst navigationListLinkDescriptionVariants = tv({\n base: \"mt-0.5 block text-xs\",\n variants: {\n noWrap: {\n true: \"truncate\",\n false: \"\",\n },\n tone: {\n surface: \"text-muted-foreground\",\n sidebar: \"text-sidebar-foreground/70\",\n },\n },\n defaultVariants: {\n noWrap: false,\n tone: \"surface\",\n },\n});\n\nconst navigationListDefaultChevron = (\n <HugeiconsIcon aria-hidden=\"true\" icon={ArrowRight01Icon} strokeWidth={2} />\n);\n\nexport interface NavigationListLinkState {\n active: boolean;\n collapsible: boolean;\n disabled: boolean;\n open: boolean;\n size: UISize;\n slot: \"navigation-list-link\";\n tone: NavigationListTone;\n variant: NavigationListVariant;\n}\n\nexport type NavigationListLinkProps = Omit<\n useRender.ComponentProps<\"button\">,\n \"className\"\n> &\n Omit<ComponentProps<\"button\">, \"className\"> &\n Omit<\n VariantProps<typeof navigationListLinkVariants>,\n | \"class\"\n | \"className\"\n | \"hasDescription\"\n | \"noWrap\"\n | \"size\"\n | \"tone\"\n | \"variant\"\n > & {\n href?: string;\n active?: boolean;\n label?: ReactNode;\n description?: ReactNode;\n leftSection?: ReactNode;\n rightSection?: ReactNode | null;\n noWrap?: boolean;\n disableRightSectionRotation?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n className?: BaseUIClassName<NavigationListLinkState>;\n };\n\nconst NavigationListLink = ({\n className,\n render,\n href,\n active,\n label,\n description,\n leftSection,\n rightSection,\n noWrap = false,\n disableRightSectionRotation = false,\n size,\n tone,\n variant,\n disabled,\n onClick,\n onKeyDown,\n children,\n ...props\n}: NavigationListLinkProps) => {\n const itemContext = useNavigationListItemContext();\n\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n const resolvedVariant = useResolvedNavigationListVariant(\n variant,\n itemContext.variant\n );\n\n const hasToggleBehavior = itemContext.collapsible;\n const isLinkLike =\n !hasToggleBehavior && (href !== undefined || render !== undefined);\n const resolvedActive = Boolean(active || props[\"aria-current\"] === \"page\");\n const resolvedAriaCurrent =\n props[\"aria-current\"] ??\n (resolvedActive && isLinkLike ? \"page\" : undefined);\n const resolvedDisabled = disabled ?? itemContext.disabled;\n\n useEffect(() => {\n if (process.env.NODE_ENV === \"production\" || !hasToggleBehavior) {\n return;\n }\n\n if (href !== undefined) {\n console.warn(\n \"[NavigationList.Link] `href` is ignored when used inside `NavigationList.Item collapsible`. Parent rows are disclosure buttons.\"\n );\n }\n\n if (render !== undefined) {\n console.warn(\n \"[NavigationList.Link] `render` is ignored when used inside `NavigationList.Item collapsible`. Parent rows are disclosure buttons.\"\n );\n }\n }, [hasToggleBehavior, href, render]);\n\n const usesDefaultChevron = rightSection === undefined && hasToggleBehavior;\n const renderedRightSection = usesDefaultChevron\n ? navigationListDefaultChevron\n : rightSection;\n const hasRenderedRightSection = renderedRightSection !== null;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n onClick?.(event as never);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (resolvedDisabled) {\n event.preventDefault();\n }\n },\n [onClick, resolvedDisabled]\n );\n\n const composedContent =\n children ??\n (label || description || leftSection || hasRenderedRightSection ? (\n <>\n {leftSection ? (\n <span\n className=\"shrink-0\"\n data-slot=\"navigation-list-link-left-section\"\n >\n {leftSection}\n </span>\n ) : null}\n\n <span className={navigationListLinkBodyVariants({ noWrap })}>\n {label ? (\n <span\n className={navigationListLinkLabelVariants({ noWrap })}\n data-slot=\"navigation-list-link-label\"\n >\n {label}\n </span>\n ) : null}\n {description ? (\n <span\n className={navigationListLinkDescriptionVariants({\n noWrap,\n tone: resolvedTone,\n })}\n data-slot=\"navigation-list-link-description\"\n >\n {description}\n </span>\n ) : null}\n </span>\n\n {hasRenderedRightSection ? (\n <span\n aria-hidden={usesDefaultChevron ? \"true\" : undefined}\n className={cn(\n \"ml-auto flex shrink-0 items-center justify-center\",\n hasToggleBehavior &&\n !disableRightSectionRotation &&\n \"data-[open=true]:rotate-90\"\n )}\n data-open={itemContext.open ? \"true\" : \"false\"}\n data-slot=\"navigation-list-link-right-section\"\n >\n {renderedRightSection}\n </span>\n ) : null}\n </>\n ) : null);\n\n const state: NavigationListLinkState = {\n active: resolvedActive,\n collapsible: hasToggleBehavior,\n disabled: resolvedDisabled,\n open: itemContext.open,\n size: resolvedSize,\n slot: \"navigation-list-link\",\n tone: resolvedTone,\n variant: resolvedVariant,\n };\n const resolvedClassName =\n typeof className === \"function\" ? className(state) : className;\n\n const mergedClassName = cn(\n navigationListLinkVariants({\n hasDescription: Boolean(description),\n noWrap,\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n resolvedClassName\n );\n\n const resolvedRender =\n render ??\n (href\n ? (renderProps: ComponentProps<\"a\">) => {\n const { children: renderChildren, ...anchorProps } = renderProps;\n\n return (\n <a {...anchorProps} href={href}>\n {renderChildren}\n </a>\n );\n }\n : undefined);\n\n const renderedLinkElement = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: mergedClassName,\n \"aria-current\": resolvedAriaCurrent,\n \"aria-disabled\": resolvedDisabled ? \"true\" : undefined,\n disabled: isLinkLike ? undefined : resolvedDisabled,\n onClick: handleClick,\n onKeyDown,\n type: isLinkLike ? undefined : \"button\",\n children: composedContent,\n },\n props\n ),\n render: resolvedRender,\n state,\n });\n\n if (hasToggleBehavior) {\n return (\n <CollapsiblePrimitive.Trigger\n aria-disabled={resolvedDisabled ? \"true\" : undefined}\n className={mergedClassName}\n data-active={resolvedActive ? \"true\" : undefined}\n data-size={resolvedSize}\n data-slot=\"navigation-list-link\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n disabled={resolvedDisabled}\n onClick={onClick}\n onKeyDown={onKeyDown}\n type=\"button\"\n >\n {composedContent}\n </CollapsiblePrimitive.Trigger>\n );\n }\n\n return renderedLinkElement;\n};\n\nexport { NavigationListLink };\n","import type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\n\nimport { Separator } from \"../separator/separator\";\nimport {\n type NavigationListTone,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\n\nexport type NavigationListSeparatorProps = ComponentProps<typeof Separator> & {\n tone?: NavigationListTone;\n};\n\nconst NavigationListSeparator = ({\n className,\n tone,\n ...props\n}: NavigationListSeparatorProps) => {\n const resolvedTone = useResolvedNavigationListTone(tone);\n\n return (\n <Separator\n className={cn(\n resolvedTone === \"sidebar\" ? \"bg-sidebar-border\" : \"bg-border\",\n className\n )}\n data-slot=\"navigation-list-separator\"\n data-tone={resolvedTone}\n {...props}\n />\n );\n};\n\nexport { NavigationListSeparator };\n","import type { ComponentProps, CSSProperties } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport { Skeleton } from \"../skeleton/skeleton\";\nimport {\n type NavigationListTone,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListSkeletonVariants = tv({\n base: \"flex items-center gap-2 rounded-md px-2\",\n variants: {\n size: {\n xs: \"h-6\",\n sm: \"h-7\",\n md: \"h-8\",\n lg: \"h-9\",\n xl: \"h-10\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n },\n});\n\nexport type NavigationListSkeletonProps = ComponentProps<\"div\"> & {\n showIcon?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n} & VariantProps<typeof navigationListSkeletonVariants>;\n\nconst NavigationListSkeleton = ({\n className,\n showIcon = false,\n size,\n tone,\n ...props\n}: NavigationListSkeletonProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n\n return (\n <div\n className={cn(\n navigationListSkeletonVariants({\n size: resolvedSize,\n tone: resolvedTone,\n }),\n className\n )}\n data-size={resolvedSize}\n data-slot=\"navigation-list-skeleton\"\n data-tone={resolvedTone}\n {...props}\n >\n {showIcon ? (\n <Skeleton\n className=\"size-4 rounded-md\"\n data-slot=\"navigation-list-skeleton-icon\"\n />\n ) : null}\n <Skeleton\n className=\"h-4 max-w-(--navigation-list-skeleton-width) flex-1\"\n data-slot=\"navigation-list-skeleton-text\"\n style={\n {\n \"--navigation-list-skeleton-width\": \"100%\",\n } as CSSProperties\n }\n />\n </div>\n );\n};\n\nexport { NavigationListSkeleton };\n","import type { ComponentProps } from \"react\";\n\nimport { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListSubVariants = tv({\n base: \"mx-2 mt-1 flex min-w-0 list-none flex-col border-l overflow-hidden [&[hidden]:not([hidden='until-found'])]:hidden data-[open=false]:pointer-events-none data-[open=false]:mt-0 data-[open=false]:max-h-0 data-[open=false]:opacity-0 data-[open=false]:py-0 data-[open=false]:border-transparent data-[open=true]:max-h-[48rem] data-[open=true]:opacity-100\",\n variants: {\n size: {\n xs: \"gap-0.5 px-1 py-0.5\",\n sm: \"gap-0.5 px-1.5 py-0.5\",\n md: \"gap-1 px-2 py-0.5\",\n lg: \"gap-1 px-2.5 py-1\",\n xl: \"gap-1.5 px-3 py-1\",\n },\n tone: {\n surface: \"border-border\",\n sidebar: \"border-sidebar-border\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport type NavigationListSubProps = ComponentProps<\"ul\"> & {\n keepMounted?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n} & VariantProps<typeof navigationListSubVariants>;\n\nconst NavigationListSub = ({\n className,\n keepMounted = true,\n size,\n tone,\n variant,\n ...props\n}: NavigationListSubProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n const resolvedVariant = useResolvedNavigationListVariant(\n variant,\n itemContext.variant\n );\n\n const resolvedClassName = cn(\n navigationListSubVariants({\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n );\n\n if (!itemContext.collapsible) {\n return (\n <ul\n className={resolvedClassName}\n data-open=\"true\"\n data-size={resolvedSize}\n data-slot=\"navigation-list-sub\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n {...props}\n />\n );\n }\n\n return (\n <CollapsiblePrimitive.Panel keepMounted={keepMounted}>\n <ul\n className={resolvedClassName}\n data-open={itemContext.open ? \"true\" : \"false\"}\n data-size={resolvedSize}\n data-slot=\"navigation-list-sub\"\n data-tone={resolvedTone}\n data-variant={resolvedVariant}\n hidden={keepMounted && !itemContext.open}\n {...props}\n />\n </CollapsiblePrimitive.Panel>\n );\n};\n\nexport { NavigationListSub };\n","import type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\n\nexport type NavigationListSubItemProps = ComponentProps<\"li\">;\n\nconst NavigationListSubItem = ({\n className,\n ...props\n}: NavigationListSubItemProps) => (\n <li\n className={cn(\n \"group/navigation-list-sub-item relative list-none\",\n className\n )}\n data-slot=\"navigation-list-sub-item\"\n {...props}\n />\n);\n\nexport { NavigationListSubItem };\n","import type { ComponentProps } from \"react\";\n\nimport { mergeProps } from \"@base-ui/react/merge-props\";\nimport { useRender } from \"@base-ui/react/use-render\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport {\n type NavigationListTone,\n type NavigationListVariant,\n useResolvedNavigationListSize,\n useResolvedNavigationListTone,\n useResolvedNavigationListVariant,\n} from \"./navigation-list-context\";\nimport { useNavigationListItemContext } from \"./navigation-list-item-context\";\n\nconst navigationListSubLinkVariants = tv({\n base: \"flex min-w-0 items-center gap-2 overflow-hidden rounded-md text-left outline-hidden transition-colors focus-visible:ring-2 [&>span:last-child]:truncate\",\n variants: {\n size: {\n xs: \"h-6 px-1.5 text-xs [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 px-2 text-xs [&_svg:not([class*='size-'])]:size-3.5\",\n md: \"h-8 px-2 text-sm [&_svg:not([class*='size-'])]:size-4\",\n lg: \"h-9 px-2.5 text-sm [&_svg:not([class*='size-'])]:size-4\",\n xl: \"h-10 px-3 text-base [&_svg:not([class*='size-'])]:size-5\",\n },\n tone: {\n surface: \"ring-ring\",\n sidebar: \"ring-sidebar-ring\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n active: {\n true: \"font-medium\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n active: false,\n },\n compoundVariants: [\n {\n tone: \"surface\",\n variant: \"subtle\",\n className:\n \"hover:bg-muted/70 hover:text-foreground data-active:bg-muted/50\",\n },\n {\n tone: \"surface\",\n variant: \"light\",\n className: \"hover:bg-muted hover:text-foreground data-active:bg-muted\",\n },\n {\n tone: \"surface\",\n variant: \"filled\",\n className:\n \"hover:bg-muted hover:text-foreground data-active:bg-primary data-active:text-primary-foreground\",\n },\n {\n tone: \"sidebar\",\n variant: \"subtle\",\n className:\n \"hover:bg-sidebar-accent/70 hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent/60 data-active:text-sidebar-accent-foreground\",\n },\n {\n tone: \"sidebar\",\n variant: \"light\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground\",\n },\n {\n tone: \"sidebar\",\n variant: \"filled\",\n className:\n \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground data-active:bg-sidebar-primary data-active:text-sidebar-primary-foreground\",\n },\n ],\n});\n\nexport type NavigationListSubLinkProps = useRender.ComponentProps<\"a\"> &\n ComponentProps<\"a\"> & {\n active?: boolean;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n } & VariantProps<typeof navigationListSubLinkVariants>;\n\nconst NavigationListSubLink = ({\n className,\n render,\n active,\n size,\n tone,\n variant,\n ...props\n}: NavigationListSubLinkProps) => {\n const itemContext = useNavigationListItemContext();\n const resolvedSize = useResolvedNavigationListSize(size, itemContext.size);\n const resolvedTone = useResolvedNavigationListTone(tone, itemContext.tone);\n const resolvedVariant = useResolvedNavigationListVariant(\n variant,\n itemContext.variant\n );\n const resolvedActive = active ?? props[\"aria-current\"] === \"page\";\n const resolvedAriaCurrent =\n props[\"aria-current\"] ?? (resolvedActive ? \"page\" : undefined);\n\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n \"aria-current\": resolvedAriaCurrent,\n className: cn(\n navigationListSubLinkVariants({\n active: resolvedActive,\n size: resolvedSize,\n tone: resolvedTone,\n variant: resolvedVariant,\n }),\n className\n ),\n },\n props\n ),\n render,\n state: {\n active: resolvedActive,\n size: resolvedSize,\n slot: \"navigation-list-sub-link\",\n tone: resolvedTone,\n variant: resolvedVariant,\n },\n });\n};\n\nexport { NavigationListSubLink };\n","import type { ComponentProps } from \"react\";\n\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { BaseUIClassName } from \"../../utils/merge-base-ui-class-name\";\nimport type { UISize } from \"../shared/size/size-system\";\n\nimport { useComponentSize } from \"../shared/size/size-provider\";\nimport { NavigationListAction } from \"./navigation-list-action\";\nimport { NavigationListBadge } from \"./navigation-list-badge\";\nimport { NavigationListContent } from \"./navigation-list-content\";\nimport {\n NavigationListContext,\n type NavigationListTone,\n type NavigationListVariant,\n} from \"./navigation-list-context\";\nimport { NavigationListGroup } from \"./navigation-list-group\";\nimport { NavigationListGroupContent } from \"./navigation-list-group-content\";\nimport { NavigationListGroupLabel } from \"./navigation-list-group-label\";\nimport { NavigationListItem } from \"./navigation-list-item\";\nimport { NavigationListLink } from \"./navigation-list-link\";\nimport { NavigationListSeparator } from \"./navigation-list-separator\";\nimport { NavigationListSkeleton } from \"./navigation-list-skeleton\";\nimport { NavigationListSub } from \"./navigation-list-sub\";\nimport { NavigationListSubItem } from \"./navigation-list-sub-item\";\nimport { NavigationListSubLink } from \"./navigation-list-sub-link\";\n\nconst navigationListVariants = tv({\n base: \"flex min-w-0 flex-col\",\n variants: {\n size: {\n xs: \"gap-1\",\n sm: \"gap-1\",\n md: \"gap-1.5\",\n lg: \"gap-2\",\n xl: \"gap-2.5\",\n },\n tone: {\n surface: \"\",\n sidebar: \"\",\n },\n variant: {\n subtle: \"\",\n light: \"\",\n filled: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n tone: \"surface\",\n variant: \"light\",\n },\n});\n\nexport interface NavigationListRootState {\n size: UISize;\n slot: \"navigation-list\";\n tone: NavigationListTone;\n variant: NavigationListVariant;\n}\n\nexport type NavigationListProps = Omit<ComponentProps<\"nav\">, \"className\"> &\n Omit<\n VariantProps<typeof navigationListVariants>,\n \"class\" | \"className\" | \"size\"\n > & {\n className?: BaseUIClassName<NavigationListRootState>;\n size?: UISize;\n tone?: NavigationListTone;\n variant?: NavigationListVariant;\n };\n\nconst NavigationList = ({\n className,\n size: providedSize,\n tone = \"surface\",\n variant = \"light\",\n children,\n ...props\n}: NavigationListProps) => {\n const size = useComponentSize(providedSize);\n const state: NavigationListRootState = {\n size,\n slot: \"navigation-list\",\n tone,\n variant,\n };\n\n const resolvedClassName =\n typeof className === \"function\" ? className(state) : className;\n\n return (\n <NavigationListContext.Provider value={{ size, tone, variant }}>\n <nav\n className={cn(\n navigationListVariants({\n size,\n tone,\n variant,\n }),\n resolvedClassName\n )}\n data-size={size}\n data-slot=\"navigation-list\"\n data-tone={tone}\n data-variant={variant}\n {...props}\n >\n {children}\n </nav>\n </NavigationListContext.Provider>\n );\n};\n\nNavigationList.Action = NavigationListAction;\nNavigationList.Badge = NavigationListBadge;\nNavigationList.Content = NavigationListContent;\nNavigationList.Group = NavigationListGroup;\nNavigationList.GroupContent = NavigationListGroupContent;\nNavigationList.GroupLabel = NavigationListGroupLabel;\nNavigationList.Item = NavigationListItem;\nNavigationList.Link = NavigationListLink;\nNavigationList.Separator = NavigationListSeparator;\nNavigationList.Skeleton = NavigationListSkeleton;\nNavigationList.Sub = NavigationListSub;\nNavigationList.SubItem = NavigationListSubItem;\nNavigationList.SubLink = NavigationListSubLink;\n\nexport {\n NavigationList,\n NavigationListAction,\n NavigationListBadge,\n NavigationListContent,\n NavigationListGroup,\n NavigationListGroupContent,\n NavigationListGroupLabel,\n NavigationListItem,\n NavigationListLink,\n NavigationListSeparator,\n NavigationListSkeleton,\n NavigationListSub,\n NavigationListSubItem,\n NavigationListSubLink,\n};\n\nexport type { NavigationListActionProps } from \"./navigation-list-action\";\nexport type { NavigationListBadgeProps } from \"./navigation-list-badge\";\nexport type { NavigationListContentProps } from \"./navigation-list-content\";\nexport type {\n NavigationListContextValue,\n NavigationListTone,\n NavigationListVariant,\n} from \"./navigation-list-context\";\nexport type { NavigationListGroupProps } from \"./navigation-list-group\";\nexport type { NavigationListGroupContentProps } from \"./navigation-list-group-content\";\nexport type { NavigationListGroupLabelProps } from \"./navigation-list-group-label\";\nexport type { NavigationListItemProps } from \"./navigation-list-item\";\nexport type { NavigationListLinkProps } from \"./navigation-list-link\";\nexport type { NavigationListSeparatorProps } from \"./navigation-list-separator\";\nexport type { NavigationListSkeletonProps } from \"./navigation-list-skeleton\";\nexport type { NavigationListSubProps } from \"./navigation-list-sub\";\nexport type { NavigationListSubItemProps } from \"./navigation-list-sub-item\";\nexport type { NavigationListSubLinkProps } from \"./navigation-list-sub-link\";\n","import type { ReactNode } from \"react\";\n\nconst MIN_STEP_TOLERANCE_MULTIPLIER = 10;\n\nexport const getMinStepsBetweenValues = ({\n minRange,\n restrictToMarks,\n step,\n}: {\n minRange: number;\n restrictToMarks: boolean;\n step: number;\n}) => {\n if (restrictToMarks || step <= 0 || !Number.isFinite(minRange)) {\n return;\n }\n\n const steps = minRange / step;\n if (!Number.isFinite(steps) || steps < 0) {\n return;\n }\n\n const roundedSteps = Math.round(steps);\n return Math.abs(steps - roundedSteps) <\n Number.EPSILON * MIN_STEP_TOLERANCE_MULTIPLIER\n ? roundedSteps\n : undefined;\n};\n\nexport const getThumbChildrenByIndex = (\n thumbChildren: ReactNode | [ReactNode, ReactNode] | undefined,\n index: 0 | 1\n) => {\n if (!Array.isArray(thumbChildren)) {\n return thumbChildren;\n }\n\n return thumbChildren[index];\n};\n","import type { SliderMark } from \"../../slider/shared/slider-types\";\n\nimport {\n clampNumber,\n getFirstMarkValue,\n getLastMarkValue,\n getNearestMarkValue,\n getNextMarkValue,\n getPreviousMarkValue,\n getSortedSelectableMarks,\n isKeyboardLikeReason,\n toFloatingValue,\n} from \"../../slider/math/slider-math-utils\";\n\ninterface NormalizeRangeSliderValueOptions {\n activeThumbIndex?: number;\n current: readonly number[];\n domainMax: number;\n domainMin: number;\n marks?: readonly SliderMark[];\n max: number;\n maxRange: number;\n min: number;\n minRange: number;\n precision: number;\n pushOnOverlap: boolean;\n raw: readonly number[];\n reason?: string;\n restrictToMarks?: boolean;\n}\n\nconst getResolvedActiveThumbIndex = (\n current: readonly number[],\n raw: readonly number[],\n activeThumbIndex?: number\n) => {\n if (activeThumbIndex === 0 || activeThumbIndex === 1) {\n return activeThumbIndex;\n }\n\n const currentFrom = current[0] ?? 0;\n const currentTo = current[1] ?? 0;\n const rawFrom = raw[0] ?? currentFrom;\n const rawTo = raw[1] ?? currentTo;\n\n return Math.abs(rawFrom - currentFrom) >= Math.abs(rawTo - currentTo) ? 0 : 1;\n};\n\nexport const normalizeRangeSliderValue = ({\n activeThumbIndex,\n current,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw,\n reason,\n restrictToMarks,\n}: NormalizeRangeSliderValueOptions): [number, number] => {\n const currentFrom = clampNumber(current[0] ?? min, min, max);\n const currentTo = clampNumber(current[1] ?? max, min, max);\n const currentValues: [number, number] = [currentFrom, currentTo];\n\n const clampedRawFrom = clampNumber(\n raw[0] ?? currentFrom,\n domainMin,\n domainMax\n );\n const clampedRawTo = clampNumber(raw[1] ?? currentTo, domainMin, domainMax);\n\n const resolvedActiveIndex = getResolvedActiveThumbIndex(\n [currentFrom, currentTo],\n [clampedRawFrom, clampedRawTo],\n activeThumbIndex\n );\n\n const clone: [number, number] = [\n clampNumber(clampedRawFrom, min, max),\n clampNumber(clampedRawTo, min, max),\n ];\n\n if (restrictToMarks) {\n const selectableMarks = getSortedSelectableMarks(marks, min, max);\n if (selectableMarks.length) {\n const firstMarkValue = getFirstMarkValue(selectableMarks, min);\n const lastMarkValue = getLastMarkValue(selectableMarks, max);\n const index = resolvedActiveIndex;\n const otherIndex = index === 0 ? 1 : 0;\n const currentAtIndex = currentValues[index];\n const rawAtIndex = index === 0 ? clampedRawFrom : clampedRawTo;\n\n if (isKeyboardLikeReason(reason)) {\n if (rawAtIndex <= min) {\n clone[index] = firstMarkValue;\n } else if (rawAtIndex >= max) {\n clone[index] = lastMarkValue;\n } else if (rawAtIndex > currentAtIndex) {\n clone[index] = getNextMarkValue(currentAtIndex, selectableMarks);\n } else if (rawAtIndex < currentAtIndex) {\n clone[index] = getPreviousMarkValue(currentAtIndex, selectableMarks);\n } else {\n clone[index] = getNearestMarkValue(rawAtIndex, selectableMarks);\n }\n } else {\n clone[index] = getNearestMarkValue(rawAtIndex, selectableMarks);\n }\n\n if (\n clone[index] === lastMarkValue &&\n clone[otherIndex] === lastMarkValue\n ) {\n clone[index] = currentAtIndex;\n } else if (\n clone[index] === firstMarkValue &&\n clone[otherIndex] === firstMarkValue\n ) {\n clone[index] = currentAtIndex;\n } else if (clone[index] === clone[otherIndex]) {\n if (currentAtIndex > clone[otherIndex]) {\n clone[otherIndex] = getPreviousMarkValue(\n clone[index],\n selectableMarks\n );\n } else {\n clone[otherIndex] = getNextMarkValue(clone[index], selectableMarks);\n }\n }\n }\n } else {\n const safeMinRange = Number.isFinite(minRange) ? Math.max(minRange, 0) : 0;\n const safeMaxRange = Number.isFinite(maxRange)\n ? Math.max(maxRange, safeMinRange)\n : Number.POSITIVE_INFINITY;\n\n if (resolvedActiveIndex === 0) {\n const [clamped] = clone;\n\n if (clamped > clone[1] - (safeMinRange - 1e-9)) {\n if (pushOnOverlap) {\n clone[1] = Math.min(clamped + safeMinRange, max);\n } else {\n clone[0] = currentFrom;\n }\n }\n\n if (clamped > clone[1] - (safeMinRange - 1e-9)) {\n if (pushOnOverlap) {\n clone[0] = clone[1] - safeMinRange;\n } else {\n clone[0] = currentFrom;\n }\n }\n\n if (clone[1] - clamped > safeMaxRange) {\n if (pushOnOverlap) {\n clone[1] = clamped + safeMaxRange;\n } else {\n clone[0] = currentFrom;\n }\n }\n }\n\n if (resolvedActiveIndex === 1) {\n const [, clamped] = clone;\n\n if (clamped < clone[0] + safeMinRange) {\n if (pushOnOverlap) {\n clone[0] = Math.max(clamped - safeMinRange, min);\n } else {\n clone[1] = currentTo;\n }\n }\n\n if (clamped < clone[0] + safeMinRange) {\n if (pushOnOverlap) {\n clone[1] = clone[0] + safeMinRange;\n } else {\n clone[1] = currentTo;\n }\n }\n\n if (clamped - clone[0] > safeMaxRange) {\n if (pushOnOverlap) {\n clone[0] = clamped - safeMaxRange;\n } else {\n clone[1] = currentTo;\n }\n }\n }\n }\n\n const rounded: [number, number] = [\n toFloatingValue(clampNumber(clone[0], min, max), precision),\n toFloatingValue(clampNumber(clone[1], min, max), precision),\n ];\n\n if (rounded[0] > rounded[1]) {\n return [rounded[1], rounded[0]];\n }\n\n return rounded;\n};\n","\"use client\";\n\nimport type { Slider as SliderPrimitive } from \"@base-ui/react/slider\";\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport type { SliderMark } from \"../slider/shared/slider-types\";\nimport type { RangeSliderValue } from \"./range-slider-types\";\n\nimport { normalizeRangeSliderValue } from \"./math/normalize-range-slider-value\";\n\ninterface UseRangeSliderStateOptions {\n defaultValue?: RangeSliderValue;\n domainMax: number;\n domainMin: number;\n marks?: readonly SliderMark[];\n max: number;\n maxRange: number;\n min: number;\n minRange: number;\n onChange?: ((value: RangeSliderValue) => void) | undefined;\n onChangeEnd?: ((value: RangeSliderValue) => void) | undefined;\n precision: number;\n pushOnOverlap: boolean;\n restrictToMarks: boolean;\n value?: RangeSliderValue;\n}\n\nexport const useRangeSliderState = ({\n defaultValue,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n onChange,\n onChangeEnd,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n}: UseRangeSliderStateOptions) => {\n const initialValue = useMemo(\n () =>\n normalizeRangeSliderValue({\n current: [min, max],\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: defaultValue ?? [min, max],\n restrictToMarks,\n }),\n [\n defaultValue,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n ]\n );\n\n const [uncontrolledValue, setUncontrolledValue] =\n useState<RangeSliderValue>(initialValue);\n\n const controlledValue = useMemo(() => {\n if (value === undefined) {\n return;\n }\n\n return normalizeRangeSliderValue({\n current: uncontrolledValue,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: value,\n restrictToMarks,\n });\n }, [\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n uncontrolledValue,\n value,\n ]);\n\n const rangeValue = controlledValue ?? uncontrolledValue;\n const valueRef = useRef<RangeSliderValue>(rangeValue);\n\n useEffect(() => {\n valueRef.current = rangeValue;\n }, [rangeValue]);\n\n useEffect(() => {\n if (value !== undefined) {\n return;\n }\n\n setUncontrolledValue((previous) =>\n normalizeRangeSliderValue({\n current: previous,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: previous,\n restrictToMarks,\n })\n );\n }, [\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n ]);\n\n const handleValueChange = useCallback(\n (\n nextValue: number | number[],\n eventDetails: SliderPrimitive.Root.ChangeEventDetails\n ) => {\n const rawValues = Array.isArray(nextValue)\n ? [\n nextValue[0] ?? valueRef.current[0],\n nextValue[1] ?? valueRef.current[1],\n ]\n : [nextValue, valueRef.current[1]];\n\n const normalizedValue = normalizeRangeSliderValue({\n activeThumbIndex: eventDetails.activeThumbIndex,\n current: valueRef.current,\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n precision,\n pushOnOverlap,\n raw: rawValues,\n reason: eventDetails.reason,\n restrictToMarks,\n });\n\n valueRef.current = normalizedValue;\n\n if (value === undefined) {\n setUncontrolledValue(normalizedValue);\n }\n\n onChange?.(normalizedValue);\n },\n [\n domainMax,\n domainMin,\n marks,\n max,\n maxRange,\n min,\n minRange,\n onChange,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n ]\n );\n\n const handleValueCommitted = useCallback(() => {\n onChangeEnd?.(valueRef.current);\n }, [onChangeEnd]);\n\n return {\n handleValueChange,\n handleValueCommitted,\n rangeValue,\n };\n};\n","\"use client\";\n\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { Slider as SliderPrimitive } from \"@base-ui/react/slider\";\n\nimport type {\n SliderRadius,\n SliderSize,\n} from \"../slider/shared/slider-style-tokens\";\nimport type { SliderLabelTransitionProps } from \"../slider/shared/slider-transition\";\nimport type {\n SliderLabel,\n SliderMark as SliderMarkType,\n} from \"../slider/shared/slider-types\";\nimport type { RangeSliderValue } from \"./range-slider-types\";\n\nimport { toFloatingValue } from \"../slider/math/slider-math-utils\";\nimport { SliderControl } from \"../slider/primitives/slider-control\";\nimport { SliderIndicator } from \"../slider/primitives/slider-indicator\";\nimport { SliderMark } from \"../slider/primitives/slider-mark\";\nimport { SliderMarks } from \"../slider/primitives/slider-marks\";\nimport {\n SliderThumb,\n type SliderThumbProps,\n} from \"../slider/primitives/slider-thumb\";\nimport { SliderThumbLabel } from \"../slider/primitives/slider-thumb-label\";\nimport { SliderTrack } from \"../slider/primitives/slider-track\";\nimport { SliderValue as SliderValuePrimitive } from \"../slider/primitives/slider-value\";\nimport { resolveSliderBounds } from \"../slider/shared/slider-bounds\";\nimport { resolveSliderLabel } from \"../slider/shared/slider-label\";\nimport {\n mergeSliderRootStyle,\n resolveSliderRootClassName,\n} from \"../slider/shared/slider-root-presentation\";\nimport {\n getMinStepsBetweenValues,\n getThumbChildrenByIndex,\n} from \"./range-slider-helpers\";\nimport { useRangeSliderState } from \"./use-range-slider-state\";\n\ntype RangeSliderRootProps = Omit<\n SliderPrimitive.Root.Props<number[]>,\n | \"defaultValue\"\n | \"max\"\n | \"min\"\n | \"minStepsBetweenValues\"\n | \"name\"\n | \"onChange\"\n | \"onValueChange\"\n | \"onValueCommitted\"\n | \"thumbAlignment\"\n | \"thumbCollisionBehavior\"\n | \"value\"\n>;\n\nexport interface RangeSliderProps extends RangeSliderRootProps {\n color?: string;\n defaultValue?: RangeSliderValue;\n domain?: [number, number];\n hiddenInputProps?: Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"name\" | \"type\" | \"value\"\n >;\n inverted?: boolean;\n label?: SliderLabel;\n labelAlwaysOn?: boolean;\n labelTransitionProps?: SliderLabelTransitionProps;\n marks?: readonly SliderMarkType[];\n max?: number;\n maxRange?: number;\n min?: number;\n minRange?: number;\n name?: string;\n onChange?: ((value: RangeSliderValue) => void) | undefined;\n onChangeEnd?: ((value: RangeSliderValue) => void) | undefined;\n precision?: number;\n pushOnOverlap?: boolean;\n radius?: SliderRadius;\n restrictToMarks?: boolean;\n scale?: ((value: number) => number) | undefined;\n size?: SliderSize;\n showLabelOnHover?: boolean;\n step?: number;\n thumbChildren?: ReactNode | [ReactNode, ReactNode];\n thumbFromLabel?: string;\n thumbLabelOffset?: number | string;\n thumbLabelOffsetVertical?: number | string;\n thumbProps?:\n | ((\n index: 0 | 1\n ) => Omit<SliderThumbProps, \"aria-label\" | \"children\" | \"index\">)\n | undefined;\n thumbSize?: number | string;\n thumbToLabel?: string;\n trackSize?: number | string;\n markSize?: number | string;\n value?: RangeSliderValue;\n}\n\ntype RangeSliderComponent = ((props: RangeSliderProps) => ReactNode) & {\n Control: typeof SliderControl;\n Indicator: typeof SliderIndicator;\n Mark: typeof SliderMark;\n Marks: typeof SliderMarks;\n Thumb: typeof SliderThumb;\n ThumbLabel: typeof SliderThumbLabel;\n Track: typeof SliderTrack;\n Value: typeof SliderValuePrimitive;\n};\n\nconst RangeSlider = (({\n className,\n children,\n color,\n defaultValue,\n domain,\n hiddenInputProps,\n inverted = false,\n label = (value) => value,\n labelAlwaysOn = false,\n labelTransitionProps,\n marks,\n max = 100,\n maxRange = Number.POSITIVE_INFINITY,\n min = 0,\n minRange = 10,\n name,\n onChange,\n onChangeEnd,\n precision: precisionProp,\n pushOnOverlap = true,\n radius,\n restrictToMarks = false,\n scale = (value) => value,\n size,\n showLabelOnHover = true,\n step = 1,\n style,\n thumbChildren,\n thumbFromLabel,\n thumbLabelOffset,\n thumbLabelOffsetVertical,\n thumbProps,\n thumbSize,\n thumbToLabel,\n trackSize,\n markSize,\n value,\n ...props\n}: RangeSliderProps) => {\n const resolvedBounds = resolveSliderBounds({\n domain,\n max,\n min,\n precision: precisionProp,\n step,\n });\n\n const {\n domainMax,\n domainMin,\n max: normalizedMax,\n min: normalizedMin,\n precision,\n } = resolvedBounds;\n\n const { handleValueChange, handleValueCommitted, rangeValue } =\n useRangeSliderState({\n defaultValue,\n domainMax,\n domainMin,\n marks,\n max: normalizedMax,\n maxRange,\n min: normalizedMin,\n minRange,\n onChange,\n onChangeEnd,\n precision,\n pushOnOverlap,\n restrictToMarks,\n value,\n });\n\n const firstThumbProps = thumbProps?.(0) ?? {};\n const secondThumbProps = thumbProps?.(1) ?? {};\n\n const minStepsBetweenValues = getMinStepsBetweenValues({\n minRange,\n restrictToMarks,\n step,\n });\n\n const displayedFromValue = toFloatingValue(scale(rangeValue[0]), precision);\n const displayedToValue = toFloatingValue(scale(rangeValue[1]), precision);\n\n return (\n <SliderPrimitive.Root\n {...props}\n className={resolveSliderRootClassName(className, inverted)}\n data-slot=\"slider\"\n max={domainMax}\n min={domainMin}\n minStepsBetweenValues={minStepsBetweenValues}\n onValueChange={handleValueChange}\n onValueCommitted={handleValueCommitted}\n step={step}\n style={mergeSliderRootStyle(\n {\n color,\n markSize,\n radius,\n size,\n thumbLabelOffset,\n thumbLabelOffsetVertical,\n thumbSize,\n trackSize,\n },\n style\n )}\n thumbAlignment=\"center\"\n thumbCollisionBehavior={pushOnOverlap ? \"push\" : \"none\"}\n value={rangeValue}\n >\n {children ?? (\n <SliderControl>\n <SliderTrack>\n <SliderIndicator />\n <SliderMarks\n disabled={props.disabled}\n inverted={inverted}\n marks={marks}\n max={domainMax}\n min={domainMin}\n orientation={props.orientation}\n values={rangeValue}\n />\n </SliderTrack>\n <SliderThumb\n {...firstThumbProps}\n aria-label={thumbFromLabel}\n index={0}\n >\n {getThumbChildrenByIndex(thumbChildren, 0)}\n <SliderThumbLabel\n label={resolveSliderLabel(label, displayedFromValue)}\n labelAlwaysOn={labelAlwaysOn}\n orientation={props.orientation}\n showLabelOnHover={showLabelOnHover}\n transitionProps={labelTransitionProps}\n />\n </SliderThumb>\n <SliderThumb\n {...secondThumbProps}\n aria-label={thumbToLabel}\n index={1}\n >\n {getThumbChildrenByIndex(thumbChildren, 1)}\n <SliderThumbLabel\n label={resolveSliderLabel(label, displayedToValue)}\n labelAlwaysOn={labelAlwaysOn}\n orientation={props.orientation}\n showLabelOnHover={showLabelOnHover}\n transitionProps={labelTransitionProps}\n />\n </SliderThumb>\n </SliderControl>\n )}\n {name ? (\n <>\n <input\n {...hiddenInputProps}\n name={`${name}_from`}\n type=\"hidden\"\n value={String(displayedFromValue)}\n />\n <input\n {...hiddenInputProps}\n name={`${name}_to`}\n type=\"hidden\"\n value={String(displayedToValue)}\n />\n </>\n ) : null}\n </SliderPrimitive.Root>\n );\n}) as RangeSliderComponent;\n\nRangeSlider.Control = SliderControl;\nRangeSlider.Indicator = SliderIndicator;\nRangeSlider.Mark = SliderMark;\nRangeSlider.Marks = SliderMarks;\nRangeSlider.Thumb = SliderThumb;\nRangeSlider.ThumbLabel = SliderThumbLabel;\nRangeSlider.Track = SliderTrack;\nRangeSlider.Value = SliderValuePrimitive;\n\nexport { RangeSlider };\n"],"mappings":"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,OACA,KACA,UACA,KACA,UACA,UACA,aACA,WACA,eACA,iBACA,YACgC;CAgChC,MAAM,CAAC,mBAAmB,wBACxB,SAhCmB,cAEjB,0BAA0B;EACxB,SAAS,CAAC,KAAK,IAAI;EACnB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,KAAK,gBAAgB,CAAC,KAAK,IAAI;EAC/B;EACD,CAAC,EACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF,CAGyC;CAoC1C,MAAM,aAlCkB,cAAc;AACpC,MAAI,UAAU,OACZ;AAGF,SAAO,0BAA0B;GAC/B,SAAS;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,KAAK;GACL;GACD,CAAC;IACD;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,IAEoC;CACtC,MAAM,WAAW,OAAyB,WAAW;AAErD,iBAAgB;AACd,WAAS,UAAU;IAClB,CAAC,WAAW,CAAC;AAEhB,iBAAgB;AACd,MAAI,UAAU,OACZ;AAGF,wBAAsB,aACpB,0BAA0B;GACxB,SAAS;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,KAAK;GACL;GACD,CAAC,CACH;IACA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AA2DF,QAAO;EACL,mBA1DwB,aAEtB,WACA,iBACG;GACH,MAAM,YAAY,MAAM,QAAQ,UAAU,GACtC,CACE,UAAU,MAAM,SAAS,QAAQ,IACjC,UAAU,MAAM,SAAS,QAAQ,GAClC,GACD,CAAC,WAAW,SAAS,QAAQ,GAAG;GAEpC,MAAM,kBAAkB,0BAA0B;IAChD,kBAAkB,aAAa;IAC/B,SAAS,SAAS;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,KAAK;IACL,QAAQ,aAAa;IACrB;IACD,CAAC;AAEF,YAAS,UAAU;AAEnB,OAAI,UAAU,OACZ,sBAAqB,gBAAgB;AAGvC,cAAW,gBAAgB;KAE7B;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CACF;EAQC,sBAN2B,kBAAkB;AAC7C,iBAAc,SAAS,QAAQ;KAC9B,CAAC,YAAY,CAAC;EAKf;EACD;;;;;ACxGH,MAAM,gBAAgB,EACpB,WACA,UACA,OACA,cACA,QACA,kBACA,WAAW,OACX,SAAS,UAAU,OACnB,gBAAgB,OAChB,sBACA,OACA,MAAM,KACN,WAAW,OAAO,mBAClB,MAAM,GACN,WAAW,IACX,MACA,UACA,aACA,WAAW,eACX,gBAAgB,MAChB,QACA,kBAAkB,OAClB,SAAS,UAAU,OACnB,MACA,mBAAmB,MACnB,OAAO,GACP,OACA,eACA,gBACA,kBACA,0BACA,YACA,WACA,cACA,WACA,UACA,OACA,GAAG,YACmB;CAStB,MAAM,EACJ,WACA,WACA,KAAK,eACL,KAAK,eACL,cAbqB,oBAAoB;EACzC;EACA;EACA;EACA,WAAW;EACX;EACD,CAAC;CAUF,MAAM,EAAE,mBAAmB,sBAAsB,eAC/C,oBAAoB;EAClB;EACA;EACA;EACA;EACA,KAAK;EACL;EACA,KAAK;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEJ,MAAM,kBAAkB,aAAa,EAAE,IAAI,EAAE;CAC7C,MAAM,mBAAmB,aAAa,EAAE,IAAI,EAAE;CAE9C,MAAM,wBAAwB,yBAAyB;EACrD;EACA;EACA;EACD,CAAC;CAEF,MAAM,qBAAqB,gBAAgB,MAAM,WAAW,GAAG,EAAE,UAAU;CAC3E,MAAM,mBAAmB,gBAAgB,MAAM,WAAW,GAAG,EAAE,UAAU;AAEzE,QACE,qBAACC,SAAgB;EACf,GAAI;EACJ,WAAW,2BAA2B,WAAW,SAAS;EAC1D,aAAU;EACV,KAAK;EACL,KAAK;EACkB;EACvB,eAAe;EACf,kBAAkB;EACZ;EACN,OAAO,qBACL;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,EACD,MACD;EACD,gBAAe;EACf,wBAAwB,gBAAgB,SAAS;EACjD,OAAO;aAEN,YACC,qBAAC;GACC,qBAAC,0BACC,oBAAC,oBAAkB,EACnB,oBAAC;IACC,UAAU,MAAM;IACN;IACH;IACP,KAAK;IACL,KAAK;IACL,aAAa,MAAM;IACnB,QAAQ;KACR,IACU;GACd,qBAAC;IACC,GAAI;IACJ,cAAY;IACZ,OAAO;eAEN,wBAAwB,eAAe,EAAE,EAC1C,oBAAC;KACC,OAAO,mBAAmB,OAAO,mBAAmB;KACrC;KACf,aAAa,MAAM;KACD;KAClB,iBAAiB;MACjB;KACU;GACd,qBAAC;IACC,GAAI;IACJ,cAAY;IACZ,OAAO;eAEN,wBAAwB,eAAe,EAAE,EAC1C,oBAAC;KACC,OAAO,mBAAmB,OAAO,iBAAiB;KACnC;KACf,aAAa,MAAM;KACD;KAClB,iBAAiB;MACjB;KACU;MACA,EAEjB,OACC,4CACE,oBAAC;GACC,GAAI;GACJ,MAAM,GAAG,KAAK;GACd,MAAK;GACL,OAAO,OAAO,mBAAmB;IACjC,EACF,oBAAC;GACC,GAAI;GACJ,MAAM,GAAG,KAAK;GACd,MAAK;GACL,OAAO,OAAO,iBAAiB;IAC/B,IACD,GACD;GACiB;;AAI3B,YAAY,UAAU;AACtB,YAAY,YAAY;AACxB,YAAY,OAAO;AACnB,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB,YAAY,QAAQ;AACpB,YAAY,QAAQC"}
@@ -1 +1 @@
1
- {"version":3,"file":"input-group-textarea-C6ixncHC.js","names":[],"sources":["../src/ui/input-group/input-group-context.tsx","../src/ui/input-group/input-group-addon.tsx","../src/ui/input-group/input-group-button.tsx","../src/ui/input-group/input-group-input.tsx","../src/ui/input-group/input-group-text.tsx","../src/ui/input-group/input-group-textarea.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nimport type { InputSize } from \"../input/input\";\n\nexport interface InputGroupContextValue {\n size?: InputSize;\n}\n\nconst InputGroupContext = createContext<InputGroupContextValue>({\n size: \"md\",\n});\n\nexport { InputGroupContext };\n","\"use client\";\n\nimport type { ComponentProps, KeyboardEvent, MouseEvent } from \"react\";\n\nimport { useContext } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport { InputGroupContext } from \"./input-group-context\";\nexport type InputGroupAddonProps = ComponentProps<\"div\"> &\n VariantProps<typeof inputGroupAddonVariants>;\n\nconst inputGroupAddonVariants = tv({\n base: \"flex h-auto cursor-text items-center justify-center font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--kb-radius)-5px)]\",\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-2 has-[>button]:ml-[-0.25rem] has-[>kbd]:ml-[-0.15rem]\",\n \"inline-end\":\n \"order-last pr-2 has-[>button]:mr-[-0.25rem] has-[>kbd]:mr-[-0.15rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2\",\n \"block-end\":\n \"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2\",\n },\n size: {\n xs: \"gap-1 py-0.5 text-xs [&>svg:not([class*='size-'])]:size-3\",\n sm: \"gap-1.5 py-1 text-sm [&>svg:not([class*='size-'])]:size-3.5\",\n md: \"gap-2 py-1.5 text-sm [&>svg:not([class*='size-'])]:size-4\",\n lg: \"gap-2 py-2 text-sm [&>svg:not([class*='size-'])]:size-4\",\n xl: \"gap-2.5 py-2 text-base [&>svg:not([class*='size-'])]:size-5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n size: \"md\",\n },\n});\n\nconst focusInput = (e: MouseEvent<HTMLDivElement>) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n const control =\n e.currentTarget.parentElement?.querySelector<HTMLElement>(\n \"input, textarea\"\n );\n control?.focus();\n};\n\nconst handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n const control =\n e.currentTarget.parentElement?.querySelector<HTMLElement>(\n \"input, textarea\"\n );\n control?.focus();\n }\n};\n\nconst InputGroupAddon = ({\n className,\n align = \"inline-start\",\n size,\n ...props\n}: InputGroupAddonProps) => {\n const { size: contextSize } = useContext(InputGroupContext);\n const resolvedSize = size ?? contextSize ?? \"md\";\n\n return (\n <div\n className={cn(\n inputGroupAddonVariants({ align, size: resolvedSize }),\n className\n )}\n data-align={align}\n data-size={resolvedSize}\n data-slot=\"input-group-addon\"\n onClick={focusInput}\n onKeyDown={handleKeyDown}\n role=\"group\"\n {...props}\n />\n );\n};\n\nexport { InputGroupAddon, inputGroupAddonVariants };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { useContext } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { InputSize } from \"../input/input\";\n\nimport { Button } from \"../button/button\";\nimport { InputGroupContext } from \"./input-group-context\";\nexport type InputGroupButtonProps = Omit<\n ComponentProps<typeof Button>,\n \"size\" | \"type\"\n> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: \"button\" | \"submit\" | \"reset\";\n };\n\nconst inputGroupButtonVariants = tv({\n base: \"flex items-center gap-2 text-sm shadow-none\",\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--kb-radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"\",\n md: \"\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--kb-radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n});\n\nconst mapInputGroupSizeToButtonSize = (size?: InputSize) => {\n if (size === \"xl\") {\n return \"sm\";\n }\n\n return \"xs\";\n};\n\nconst InputGroupButton = ({\n className,\n type = \"button\",\n variant = \"ghost\",\n size,\n ...props\n}: InputGroupButtonProps) => {\n const { size: contextSize } = useContext(InputGroupContext);\n const resolvedSize = size ?? mapInputGroupSizeToButtonSize(contextSize);\n\n return (\n <Button\n className={cn(\n inputGroupButtonVariants({ size: resolvedSize }),\n className\n )}\n data-size={resolvedSize}\n size={resolvedSize}\n type={type}\n variant={variant}\n {...props}\n />\n );\n};\n\nexport { InputGroupButton, inputGroupButtonVariants };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { useContext } from \"react\";\nimport { cn } from \"tailwind-variants\";\n\nimport { Input } from \"../input/input\";\nimport { InputGroupContext } from \"./input-group-context\";\nexport type InputGroupInputProps = ComponentProps<typeof Input>;\n\nconst InputGroupInput = ({\n className,\n size,\n ...props\n}: InputGroupInputProps) => {\n const { size: contextSize } = useContext(InputGroupContext);\n const resolvedSize = size ?? contextSize ?? \"md\";\n\n return (\n <Input\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className\n )}\n data-slot=\"input-group-control\"\n size={resolvedSize}\n {...props}\n />\n );\n};\n\nexport { InputGroupInput };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\nexport type InputGroupTextProps = ComponentProps<\"span\">;\n\nconst InputGroupText = ({ className, ...props }: InputGroupTextProps) => (\n <span\n className={cn(\n \"flex items-center gap-2 text-inherit text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-[1em]\",\n className\n )}\n {...props}\n />\n);\n\nexport { InputGroupText };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\n\nimport { Textarea } from \"../textarea/textarea\";\nexport type InputGroupTextareaProps = ComponentProps<typeof Textarea>;\n\nconst InputGroupTextarea = ({\n className,\n ...props\n}: InputGroupTextareaProps) => (\n <Textarea\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className\n )}\n data-slot=\"input-group-control\"\n {...props}\n />\n);\n\nexport { InputGroupTextarea };\n"],"mappings":";;;;;;;;AAQA,MAAM,oBAAoB,cAAsC,EAC9D,MAAM,MACP,CAAC;;;;ACCF,MAAM,0BAA0B,GAAG;CACjC,MAAM;CACN,UAAU;EACR,OAAO;GACL,gBACE;GACF,cACE;GACF,eACE;GACF,aACE;GACH;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACP;CACF,CAAC;AAEF,MAAM,cAAc,MAAkC;AACpD,KAAK,EAAE,OAAuB,QAAQ,SAAS,CAC7C;AAMF,EAHE,EAAE,cAAc,eAAe,cAC7B,kBACD,GACM,OAAO;;AAGlB,MAAM,iBAAiB,MAAqC;AAC1D,KAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,IAKjC,EAHE,EAAE,cAAc,eAAe,cAC7B,kBACD,GACM,OAAO;;AAIpB,MAAM,mBAAmB,EACvB,WACA,QAAQ,gBACR,MACA,GAAG,YACuB;CAC1B,MAAM,EAAE,MAAM,gBAAgB,WAAW,kBAAkB;CAC3D,MAAM,eAAe,QAAQ,eAAe;AAE5C,QACE,oBAAC;EACC,WAAW,GACT,wBAAwB;GAAE;GAAO,MAAM;GAAc,CAAC,EACtD,UACD;EACD,cAAY;EACZ,aAAW;EACX,aAAU;EACV,SAAS;EACT,WAAW;EACX,MAAK;EACL,GAAI;GACJ;;;;;AC9DN,MAAM,2BAA2B,GAAG;CAClC,MAAM;CACN,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,WACE;EACF,WAAW;EACZ,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CAAC;AAEF,MAAM,iCAAiC,SAAqB;AAC1D,KAAI,SAAS,KACX,QAAO;AAGT,QAAO;;AAGT,MAAM,oBAAoB,EACxB,WACA,OAAO,UACP,UAAU,SACV,MACA,GAAG,YACwB;CAC3B,MAAM,EAAE,MAAM,gBAAgB,WAAW,kBAAkB;CAC3D,MAAM,eAAe,QAAQ,8BAA8B,YAAY;AAEvE,QACE,oBAAC;EACC,WAAW,GACT,yBAAyB,EAAE,MAAM,cAAc,CAAC,EAChD,UACD;EACD,aAAW;EACX,MAAM;EACA;EACG;EACT,GAAI;GACJ;;;;;ACtDN,MAAM,mBAAmB,EACvB,WACA,MACA,GAAG,YACuB;CAC1B,MAAM,EAAE,MAAM,gBAAgB,WAAW,kBAAkB;CAC3D,MAAM,eAAe,QAAQ,eAAe;AAE5C,QACE,oBAAC;EACC,WAAW,GACT,oLACA,UACD;EACD,aAAU;EACV,MAAM;EACN,GAAI;GACJ;;;;;ACrBN,MAAM,kBAAkB,EAAE,WAAW,GAAG,YACtC,oBAAC;CACC,WAAW,GACT,mIACA,UACD;CACD,GAAI;EACJ;;;;ACLJ,MAAM,sBAAsB,EAC1B,WACA,GAAG,YAEH,oBAAC;CACC,WAAW,GACT,qMACA,UACD;CACD,aAAU;CACV,GAAI;EACJ"}
1
+ {"version":3,"file":"input-group-textarea-C6ixncHC.js","names":[],"sources":["../src/ui/input-group/input-group-context.tsx","../src/ui/input-group/input-group-addon.tsx","../src/ui/input-group/input-group-button.tsx","../src/ui/input-group/input-group-input.tsx","../src/ui/input-group/input-group-text.tsx","../src/ui/input-group/input-group-textarea.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext } from \"react\";\n\nimport type { InputSize } from \"../input/input\";\n\nexport interface InputGroupContextValue {\n size?: InputSize;\n}\n\nconst InputGroupContext = createContext<InputGroupContextValue>({\n size: \"md\",\n});\n\nexport { InputGroupContext };\n","\"use client\";\n\nimport type { ComponentProps, KeyboardEvent, MouseEvent } from \"react\";\n\nimport { useContext } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport { InputGroupContext } from \"./input-group-context\";\nexport type InputGroupAddonProps = ComponentProps<\"div\"> &\n VariantProps<typeof inputGroupAddonVariants>;\n\nconst inputGroupAddonVariants = tv({\n base: \"flex h-auto cursor-text items-center justify-center font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--kb-radius)-5px)]\",\n variants: {\n align: {\n \"inline-start\":\n \"order-first pl-2 has-[>button]:ml-[-0.25rem] has-[>kbd]:ml-[-0.15rem]\",\n \"inline-end\":\n \"order-last pr-2 has-[>button]:mr-[-0.25rem] has-[>kbd]:mr-[-0.15rem]\",\n \"block-start\":\n \"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2\",\n \"block-end\":\n \"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2\",\n },\n size: {\n xs: \"gap-1 py-0.5 text-xs [&>svg:not([class*='size-'])]:size-3\",\n sm: \"gap-1.5 py-1 text-sm [&>svg:not([class*='size-'])]:size-3.5\",\n md: \"gap-2 py-1.5 text-sm [&>svg:not([class*='size-'])]:size-4\",\n lg: \"gap-2 py-2 text-sm [&>svg:not([class*='size-'])]:size-4\",\n xl: \"gap-2.5 py-2 text-base [&>svg:not([class*='size-'])]:size-5\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n size: \"md\",\n },\n});\n\nconst focusInput = (e: MouseEvent<HTMLDivElement>) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return;\n }\n const control =\n e.currentTarget.parentElement?.querySelector<HTMLElement>(\n \"input, textarea\"\n );\n control?.focus();\n};\n\nconst handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n const control =\n e.currentTarget.parentElement?.querySelector<HTMLElement>(\n \"input, textarea\"\n );\n control?.focus();\n }\n};\n\nconst InputGroupAddon = ({\n className,\n align = \"inline-start\",\n size,\n ...props\n}: InputGroupAddonProps) => {\n const { size: contextSize } = useContext(InputGroupContext);\n const resolvedSize = size ?? contextSize ?? \"md\";\n\n return (\n <div\n className={cn(\n inputGroupAddonVariants({ align, size: resolvedSize }),\n className\n )}\n data-align={align}\n data-size={resolvedSize}\n data-slot=\"input-group-addon\"\n onClick={focusInput}\n onKeyDown={handleKeyDown}\n role=\"group\"\n {...props}\n />\n );\n};\n\nexport { InputGroupAddon, inputGroupAddonVariants };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { useContext } from \"react\";\nimport { cn, tv, type VariantProps } from \"tailwind-variants\";\n\nimport type { InputSize } from \"../input/input\";\n\nimport { Button } from \"../button/button\";\nimport { InputGroupContext } from \"./input-group-context\";\nexport type InputGroupButtonProps = Omit<\n ComponentProps<typeof Button>,\n \"size\" | \"type\"\n> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: \"button\" | \"submit\" | \"reset\";\n };\n\nconst inputGroupButtonVariants = tv({\n base: \"flex items-center gap-2 text-sm shadow-none\",\n variants: {\n size: {\n xs: \"h-6 gap-1 rounded-[calc(var(--kb-radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n sm: \"\",\n md: \"\",\n \"icon-xs\":\n \"size-6 rounded-[calc(var(--kb-radius)-5px)] p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n});\n\nconst mapInputGroupSizeToButtonSize = (size?: InputSize) => {\n if (size === \"xl\") {\n return \"sm\";\n }\n\n return \"xs\";\n};\n\nconst InputGroupButton = ({\n className,\n type = \"button\",\n variant = \"ghost\",\n size,\n ...props\n}: InputGroupButtonProps) => {\n const { size: contextSize } = useContext(InputGroupContext);\n const resolvedSize = size ?? mapInputGroupSizeToButtonSize(contextSize);\n\n return (\n <Button\n className={cn(\n inputGroupButtonVariants({ size: resolvedSize }),\n className\n )}\n data-size={resolvedSize}\n size={resolvedSize}\n type={type}\n variant={variant}\n {...props}\n />\n );\n};\n\nexport { InputGroupButton, inputGroupButtonVariants };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { useContext } from \"react\";\nimport { cn } from \"tailwind-variants\";\n\nimport { Input } from \"../input/input\";\nimport { InputGroupContext } from \"./input-group-context\";\nexport type InputGroupInputProps = ComponentProps<typeof Input>;\n\nconst InputGroupInput = ({\n className,\n size,\n ...props\n}: InputGroupInputProps) => {\n const { size: contextSize } = useContext(InputGroupContext);\n const resolvedSize = size ?? contextSize ?? \"md\";\n\n return (\n <Input\n className={cn(\n \"flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className\n )}\n data-slot=\"input-group-control\"\n size={resolvedSize}\n {...props}\n />\n );\n};\n\nexport { InputGroupInput };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\nexport type InputGroupTextProps = ComponentProps<\"span\">;\n\nconst InputGroupText = ({ className, ...props }: InputGroupTextProps) => (\n <span\n className={cn(\n \"flex items-center gap-2 text-inherit text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-[1em]\",\n className\n )}\n {...props}\n />\n);\n\nexport { InputGroupText };\n","\"use client\";\n\nimport type { ComponentProps } from \"react\";\n\nimport { cn } from \"tailwind-variants\";\n\nimport { Textarea } from \"../textarea/textarea\";\nexport type InputGroupTextareaProps = ComponentProps<typeof Textarea>;\n\nconst InputGroupTextarea = ({\n className,\n ...props\n}: InputGroupTextareaProps) => (\n <Textarea\n className={cn(\n \"flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent\",\n className\n )}\n data-slot=\"input-group-control\"\n {...props}\n />\n);\n\nexport { InputGroupTextarea };\n"],"mappings":";;;;;;;;AAUA,MAAM,oBAAoB,cAAsC,EAC9D,MAAM,MACP,CAAC;;;;ACDF,MAAM,0BAA0B,GAAG;CACjC,MAAM;CACN,UAAU;EACR,OAAO;GACL,gBACE;GACF,cACE;GACF,eACE;GACF,aACE;GACH;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL;EACF;CACD,iBAAiB;EACf,OAAO;EACP,MAAM;EACP;CACF,CAAC;AAEF,MAAM,cAAc,MAAkC;AACpD,KAAK,EAAE,OAAuB,QAAQ,SAAS,CAC7C;AAMF,EAHE,EAAE,cAAc,eAAe,cAC7B,kBACD,GACM,OAAO;;AAGlB,MAAM,iBAAiB,MAAqC;AAC1D,KAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,IAKjC,EAHE,EAAE,cAAc,eAAe,cAC7B,kBACD,GACM,OAAO;;AAIpB,MAAM,mBAAmB,EACvB,WACA,QAAQ,gBACR,MACA,GAAG,YACuB;CAC1B,MAAM,EAAE,MAAM,gBAAgB,WAAW,kBAAkB;CAC3D,MAAM,eAAe,QAAQ,eAAe;AAE5C,QACE,oBAAC;EACC,WAAW,GACT,wBAAwB;GAAE;GAAO,MAAM;GAAc,CAAC,EACtD,UACD;EACD,cAAY;EACZ,aAAW;EACX,aAAU;EACV,SAAS;EACT,WAAW;EACX,MAAK;EACL,GAAI;GACJ;;;;;AC9DN,MAAM,2BAA2B,GAAG;CAClC,MAAM;CACN,UAAU,EACR,MAAM;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,WACE;EACF,WAAW;EACZ,EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,CAAC;AAEF,MAAM,iCAAiC,SAAqB;AAC1D,KAAI,SAAS,KACX,QAAO;AAGT,QAAO;;AAGT,MAAM,oBAAoB,EACxB,WACA,OAAO,UACP,UAAU,SACV,MACA,GAAG,YACwB;CAC3B,MAAM,EAAE,MAAM,gBAAgB,WAAW,kBAAkB;CAC3D,MAAM,eAAe,QAAQ,8BAA8B,YAAY;AAEvE,QACE,oBAAC;EACC,WAAW,GACT,yBAAyB,EAAE,MAAM,cAAc,CAAC,EAChD,UACD;EACD,aAAW;EACX,MAAM;EACA;EACG;EACT,GAAI;GACJ;;;;;ACtDN,MAAM,mBAAmB,EACvB,WACA,MACA,GAAG,YACuB;CAC1B,MAAM,EAAE,MAAM,gBAAgB,WAAW,kBAAkB;CAC3D,MAAM,eAAe,QAAQ,eAAe;AAE5C,QACE,oBAAC;EACC,WAAW,GACT,oLACA,UACD;EACD,aAAU;EACV,MAAM;EACN,GAAI;GACJ;;;;;ACrBN,MAAM,kBAAkB,EAAE,WAAW,GAAG,YACtC,oBAAC;CACC,WAAW,GACT,mIACA,UACD;CACD,GAAI;EACJ;;;;ACLJ,MAAM,sBAAsB,EAC1B,WACA,GAAG,YAEH,oBAAC;CACC,WAAW,GACT,qMACA,UACD;CACD,aAAU;CACV,GAAI;EACJ"}