@wow-two-beta/ui 0.0.73 → 0.0.74
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/{chunk-5CZUTB7Q.js → chunk-ICOCUR4V.js} +51 -3
- package/dist/chunk-ICOCUR4V.js.map +1 -0
- package/dist/{chunk-Y572FCSC.js → chunk-N66ZO5FE.js} +16 -3
- package/dist/chunk-N66ZO5FE.js.map +1 -0
- package/dist/{chunk-Q3HSAOWW.js → chunk-UFOWQUYK.js} +28 -3
- package/dist/chunk-UFOWQUYK.js.map +1 -0
- package/dist/domain/color/Gradient.d.ts +12 -0
- package/dist/domain/color/index.js +1 -1
- package/dist/index.js +3 -3
- package/dist/presentation/actions/index.d.ts +1 -0
- package/dist/presentation/actions/index.js +1 -1
- package/dist/presentation/actions/optionTile/OptionTile.d.ts +20 -0
- package/dist/presentation/actions/optionTile/OptionTile.variants.d.ts +8 -0
- package/dist/presentation/actions/optionTile/index.d.ts +2 -0
- package/dist/presentation/layout/controlGroup/ControlGroup.d.ts +21 -0
- package/dist/presentation/layout/controlGroup/ControlGroup.variants.d.ts +134 -0
- package/dist/presentation/layout/controlGroup/index.d.ts +2 -0
- package/dist/presentation/layout/index.d.ts +1 -0
- package/dist/presentation/layout/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5CZUTB7Q.js.map +0 -1
- package/dist/chunk-Q3HSAOWW.js.map +0 -1
- package/dist/chunk-Y572FCSC.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/presentation/layout/box/Box.tsx","../src/presentation/layout/stack/Stack.variants.ts","../src/presentation/layout/stack/Stack.tsx","../src/presentation/layout/hStack/HStack.tsx","../src/presentation/layout/vStack/VStack.tsx","../src/presentation/layout/grid/Grid.variants.ts","../src/presentation/layout/grid/Grid.tsx","../src/presentation/layout/container/Container.variants.ts","../src/presentation/layout/container/Container.tsx","../src/presentation/layout/flex/Flex.tsx","../src/presentation/layout/aspectRatio/AspectRatio.tsx","../src/presentation/layout/spacer/Spacer.tsx","../src/presentation/layout/center/Center.tsx","../src/presentation/layout/divider/Divider.variants.ts","../src/presentation/layout/divider/Divider.tsx","../src/presentation/layout/scrollArea/ScrollArea.tsx","../src/presentation/layout/cluster/Cluster.tsx","../src/presentation/layout/frame/Frame.tsx","../src/presentation/layout/twoColumn/TwoColumn.tsx","../src/presentation/layout/resizablePanels/ResizablePanels.tsx","../src/presentation/layout/pullToRefresh/PullToRefresh.tsx","../src/presentation/layout/appShell/AppShell.tsx","../src/presentation/layout/overlay/Overlay.variants.ts","../src/presentation/layout/overlay/Overlay.tsx","../src/presentation/layout/surface/Surface.tsx","../src/presentation/layout/section/Section.variants.ts","../src/presentation/layout/section/Section.tsx","../src/presentation/layout/navbar/Navbar.variants.ts","../src/presentation/layout/navbar/Navbar.tsx"],"names":["forwardRef","jsx","GAP","jsxs","ResizablePanel","ResizableSeparator","ResizablePanels","PullToRefresh","useRef","useState","reached","useEffect","createContext","useContext","useMemo","AppShellHeader","AppShellSidebar","AppShellMain","AppShellContent","AppShellAside","AppShellFooter","AppShell","isValidElement","COMPONENT_NAME","Surface","Section","Navbar"],"mappings":"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","file":"chunk-5CZUTB7Q.js","sourcesContent":["import { forwardRef, type ComponentPropsWithoutRef, type ElementType, type Ref } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface BoxProps extends Omit<ComponentPropsWithoutRef<'div'>, 'as'> {\n /** HTML element to render. Default `div`. */\n as?: ElementType;\n}\n\n/**\n * The lowest-level layout primitive. Renders any element (default `div`)\n * with className passthrough. Use as a styling shell when no other layout\n * atom fits.\n */\nexport const Box = forwardRef<HTMLElement, BoxProps>(\n ({ as: Component = 'div', className, ...props }, ref) => (\n <Component ref={ref as Ref<HTMLElement>} className={cn(className)} {...props} />\n ),\n);\nBox.displayName = 'Box';\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\nexport const stackVariants = tv({\n base: 'flex',\n variants: {\n direction: {\n row: 'flex-row',\n column: 'flex-col',\n 'row-reverse': 'flex-row-reverse',\n 'column-reverse': 'flex-col-reverse',\n },\n align: {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n stretch: 'items-stretch',\n baseline: 'items-baseline',\n },\n justify: {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n between: 'justify-between',\n around: 'justify-around',\n evenly: 'justify-evenly',\n },\n gap: {\n '0': 'gap-0',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '5': 'gap-5',\n '6': 'gap-6',\n '8': 'gap-8',\n '10': 'gap-10',\n '12': 'gap-12',\n },\n wrap: {\n wrap: 'flex-wrap',\n nowrap: 'flex-nowrap',\n 'wrap-reverse': 'flex-wrap-reverse',\n },\n },\n defaultVariants: {\n direction: 'column',\n gap: '4',\n },\n});\n\nexport type StackVariants = VariantProps<typeof stackVariants>;\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementType,\n type Ref,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { stackVariants, type StackVariants } from './Stack.variants';\n\nexport interface StackProps\n extends Omit<ComponentPropsWithoutRef<'div'>, 'as'>,\n StackVariants {\n as?: ElementType;\n}\n\n/**\n * Vertical (default) or horizontal flex container with gap and alignment\n * variants. For row preset use `HStack`, for column use `VStack`.\n */\nexport const Stack = forwardRef<HTMLElement, StackProps>(\n ({ as: Component = 'div', className, direction, align, justify, gap, wrap, ...props }, ref) => (\n <Component\n ref={ref as Ref<HTMLElement>}\n className={cn(stackVariants({ direction, align, justify, gap, wrap }), className)}\n {...props}\n />\n ),\n);\nStack.displayName = 'Stack';\n","import { forwardRef, type Ref } from 'react';\nimport { Stack, type StackProps } from '../stack/Stack';\n\nexport type HStackProps = Omit<StackProps, 'direction'>;\n\n/** Stack preset: `direction=\"row\"`. */\nexport const HStack = forwardRef<HTMLElement, HStackProps>((props, ref) => (\n <Stack ref={ref as Ref<HTMLElement>} direction=\"row\" {...props} />\n));\nHStack.displayName = 'HStack';\n","import { forwardRef, type Ref } from 'react';\nimport { Stack, type StackProps } from '../stack/Stack';\n\nexport type VStackProps = Omit<StackProps, 'direction'>;\n\n/** Stack preset: `direction=\"column\"` (default). Provided for symmetry with HStack. */\nexport const VStack = forwardRef<HTMLElement, VStackProps>((props, ref) => (\n <Stack ref={ref as Ref<HTMLElement>} direction=\"column\" {...props} />\n));\nVStack.displayName = 'VStack';\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\nexport const gridVariants = tv({\n base: 'grid',\n variants: {\n columns: {\n '1': 'grid-cols-1',\n '2': 'grid-cols-2',\n '3': 'grid-cols-3',\n '4': 'grid-cols-4',\n '5': 'grid-cols-5',\n '6': 'grid-cols-6',\n '8': 'grid-cols-8',\n '12': 'grid-cols-12',\n },\n gap: {\n '0': 'gap-0',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '5': 'gap-5',\n '6': 'gap-6',\n '8': 'gap-8',\n '10': 'gap-10',\n '12': 'gap-12',\n },\n },\n defaultVariants: {\n columns: '2',\n gap: '4',\n },\n});\n\nexport type GridVariants = VariantProps<typeof gridVariants>;\n\n/** Represents the scalar column count accepted by `Grid` (also the per-breakpoint value). */\nexport type GridColumns = NonNullable<GridVariants['columns']>;\n\n/** Represents the scalar gap step accepted by `Grid` (also the per-breakpoint value). */\nexport type GridGap = NonNullable<GridVariants['gap']>;\n\n/** Represents the responsive breakpoints `Grid` understands (`base` = unprefixed). */\nexport type GridBreakpoint = 'base' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Represents a responsive value for `columns` / `gap` — a per-breakpoint map.\n * `base` is the unprefixed value; the rest map to Tailwind's `sm:`–`xl:` prefixes.\n */\nexport type GridResponsive<T extends string> = Partial<Record<GridBreakpoint, T>>;\n\n/* Tailwind can't see interpolated class names, so every responsive permutation\n is spelled out as a complete literal here (base + sm/md/lg/xl prefixes). */\nconst COLUMN_CLASSES: Record<GridBreakpoint, Record<GridColumns, string>> = {\n base: {\n '1': 'grid-cols-1',\n '2': 'grid-cols-2',\n '3': 'grid-cols-3',\n '4': 'grid-cols-4',\n '5': 'grid-cols-5',\n '6': 'grid-cols-6',\n '8': 'grid-cols-8',\n '12': 'grid-cols-12',\n },\n sm: {\n '1': 'sm:grid-cols-1',\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-3',\n '4': 'sm:grid-cols-4',\n '5': 'sm:grid-cols-5',\n '6': 'sm:grid-cols-6',\n '8': 'sm:grid-cols-8',\n '12': 'sm:grid-cols-12',\n },\n md: {\n '1': 'md:grid-cols-1',\n '2': 'md:grid-cols-2',\n '3': 'md:grid-cols-3',\n '4': 'md:grid-cols-4',\n '5': 'md:grid-cols-5',\n '6': 'md:grid-cols-6',\n '8': 'md:grid-cols-8',\n '12': 'md:grid-cols-12',\n },\n lg: {\n '1': 'lg:grid-cols-1',\n '2': 'lg:grid-cols-2',\n '3': 'lg:grid-cols-3',\n '4': 'lg:grid-cols-4',\n '5': 'lg:grid-cols-5',\n '6': 'lg:grid-cols-6',\n '8': 'lg:grid-cols-8',\n '12': 'lg:grid-cols-12',\n },\n xl: {\n '1': 'xl:grid-cols-1',\n '2': 'xl:grid-cols-2',\n '3': 'xl:grid-cols-3',\n '4': 'xl:grid-cols-4',\n '5': 'xl:grid-cols-5',\n '6': 'xl:grid-cols-6',\n '8': 'xl:grid-cols-8',\n '12': 'xl:grid-cols-12',\n },\n};\n\nconst GAP_CLASSES: Record<GridBreakpoint, Record<GridGap, string>> = {\n base: {\n '0': 'gap-0',\n '1': 'gap-1',\n '2': 'gap-2',\n '3': 'gap-3',\n '4': 'gap-4',\n '5': 'gap-5',\n '6': 'gap-6',\n '8': 'gap-8',\n '10': 'gap-10',\n '12': 'gap-12',\n },\n sm: {\n '0': 'sm:gap-0',\n '1': 'sm:gap-1',\n '2': 'sm:gap-2',\n '3': 'sm:gap-3',\n '4': 'sm:gap-4',\n '5': 'sm:gap-5',\n '6': 'sm:gap-6',\n '8': 'sm:gap-8',\n '10': 'sm:gap-10',\n '12': 'sm:gap-12',\n },\n md: {\n '0': 'md:gap-0',\n '1': 'md:gap-1',\n '2': 'md:gap-2',\n '3': 'md:gap-3',\n '4': 'md:gap-4',\n '5': 'md:gap-5',\n '6': 'md:gap-6',\n '8': 'md:gap-8',\n '10': 'md:gap-10',\n '12': 'md:gap-12',\n },\n lg: {\n '0': 'lg:gap-0',\n '1': 'lg:gap-1',\n '2': 'lg:gap-2',\n '3': 'lg:gap-3',\n '4': 'lg:gap-4',\n '5': 'lg:gap-5',\n '6': 'lg:gap-6',\n '8': 'lg:gap-8',\n '10': 'lg:gap-10',\n '12': 'lg:gap-12',\n },\n xl: {\n '0': 'xl:gap-0',\n '1': 'xl:gap-1',\n '2': 'xl:gap-2',\n '3': 'xl:gap-3',\n '4': 'xl:gap-4',\n '5': 'xl:gap-5',\n '6': 'xl:gap-6',\n '8': 'xl:gap-8',\n '10': 'xl:gap-10',\n '12': 'xl:gap-12',\n },\n};\n\nconst BREAKPOINT_ORDER: readonly GridBreakpoint[] = ['base', 'sm', 'md', 'lg', 'xl'];\n\n/** Resolves a scalar-or-responsive `columns` value to its complete Tailwind class string. */\nexport function resolveGridColumns(\n value: GridColumns | GridResponsive<GridColumns> | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return COLUMN_CLASSES.base[value];\n return BREAKPOINT_ORDER.map((bp) => {\n const v = value[bp];\n return v === undefined ? undefined : COLUMN_CLASSES[bp][v];\n })\n .filter((c): c is string => Boolean(c))\n .join(' ');\n}\n\n/** Resolves a scalar-or-responsive `gap` value to its complete Tailwind class string. */\nexport function resolveGridGap(\n value: GridGap | GridResponsive<GridGap> | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value === 'string') return GAP_CLASSES.base[value];\n return BREAKPOINT_ORDER.map((bp) => {\n const v = value[bp];\n return v === undefined ? undefined : GAP_CLASSES[bp][v];\n })\n .filter((c): c is string => Boolean(c))\n .join(' ');\n}\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementType,\n type Ref,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport {\n resolveGridColumns,\n resolveGridGap,\n type GridColumns,\n type GridGap,\n type GridResponsive,\n} from './Grid.variants';\n\nexport interface GridProps extends Omit<ComponentPropsWithoutRef<'div'>, 'as'> {\n as?: ElementType;\n /**\n * Equal-column track count. Scalar (`'3'`) emits `grid-cols-3`; a responsive\n * map (`{ base: '1', md: '2', lg: '3' }`) emits per-breakpoint prefixed\n * classes. Default `'2'`.\n */\n columns?: GridColumns | GridResponsive<GridColumns>;\n /**\n * Gap between tracks. Scalar (`'4'`) emits `gap-4`; a responsive map\n * (`{ base: '2', lg: '6' }`) emits per-breakpoint prefixed classes. Default `'4'`.\n */\n gap?: GridGap | GridResponsive<GridGap>;\n}\n\n/**\n * CSS grid container with column and gap variants. Both `columns` and `gap`\n * accept a scalar value or a responsive `{ base, sm, md, lg, xl }` map. For\n * non-uniform tracks pass an explicit `style={{ gridTemplateColumns }}` — the\n * variant covers the equal-column case.\n */\nexport const Grid = forwardRef<HTMLElement, GridProps>(\n ({ as: Component = 'div', className, columns = '2', gap = '4', ...props }, ref) => (\n <Component\n ref={ref as Ref<HTMLElement>}\n className={cn(\n 'grid',\n resolveGridColumns(columns),\n resolveGridGap(gap),\n className,\n )}\n {...props}\n />\n ),\n);\nGrid.displayName = 'Grid';\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\nexport const containerVariants = tv({\n base: 'mx-auto w-full px-4',\n variants: {\n size: {\n sm: 'max-w-screen-sm',\n md: 'max-w-screen-md',\n lg: 'max-w-screen-lg',\n xl: 'max-w-screen-xl',\n '2xl': 'max-w-screen-2xl',\n full: 'max-w-full',\n },\n },\n defaultVariants: {\n size: 'lg',\n },\n});\n\nexport type ContainerVariants = VariantProps<typeof containerVariants>;\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementType,\n type Ref,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { containerVariants, type ContainerVariants } from './Container.variants';\n\nexport interface ContainerProps\n extends Omit<ComponentPropsWithoutRef<'div'>, 'as'>,\n ContainerVariants {\n as?: ElementType;\n}\n\n/**\n * Centered max-width wrapper with horizontal padding. Use at page-level to\n * constrain content width.\n */\nexport const Container = forwardRef<HTMLElement, ContainerProps>(\n ({ as: Component = 'div', className, size, ...props }, ref) => (\n <Component\n ref={ref as Ref<HTMLElement>}\n className={cn(containerVariants({ size }), className)}\n {...props}\n />\n ),\n);\nContainer.displayName = 'Container';\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementType,\n type Ref,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface FlexProps extends Omit<ComponentPropsWithoutRef<'div'>, 'as'> {\n as?: ElementType;\n}\n\n/**\n * Bare flex container — no opinions on direction, gap, or alignment.\n * Use for one-off flex layouts that don't fit `Stack`'s variant matrix.\n */\nexport const Flex = forwardRef<HTMLElement, FlexProps>(\n ({ as: Component = 'div', className, ...props }, ref) => (\n <Component\n ref={ref as Ref<HTMLElement>}\n className={cn('flex', className)}\n {...props}\n />\n ),\n);\nFlex.displayName = 'Flex';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface AspectRatioProps extends ComponentPropsWithoutRef<'div'> {\n /** Numeric ratio (width/height). Default 1 (square). */\n ratio?: number;\n}\n\n/**\n * Constrain children to an aspect ratio (width / height). Children are\n * absolutely positioned and stretched to fill — typically pass a single\n * `<img>`, `<video>`, or `<iframe>` with `className=\"absolute inset-0 w-full h-full\"`.\n */\nexport const AspectRatio = forwardRef<HTMLDivElement, AspectRatioProps>(\n ({ ratio = 1, className, style, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('relative w-full', className)}\n style={{ aspectRatio: `${ratio}`, ...style }}\n {...props}\n >\n {children}\n </div>\n ),\n);\nAspectRatio.displayName = 'AspectRatio';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface SpacerProps extends ComponentPropsWithoutRef<'div'> {\n /** Optional explicit size (CSS length). When inside a flex/grid parent,\n * the default `flex: 1` already pushes siblings apart. */\n size?: number | string;\n axis?: 'horizontal' | 'vertical';\n}\n\n/**\n * A flexible empty box. In a flex parent it expands (`flex: 1`) and pushes\n * siblings to opposite ends. Pass `size` for a fixed gap.\n */\nexport const Spacer = forwardRef<HTMLDivElement, SpacerProps>(\n ({ size, axis = 'horizontal', className, style, ...props }, ref) => {\n const fixed: React.CSSProperties | undefined =\n size !== undefined\n ? axis === 'horizontal'\n ? { width: typeof size === 'number' ? `${size}px` : size, flexShrink: 0 }\n : { height: typeof size === 'number' ? `${size}px` : size, flexShrink: 0 }\n : undefined;\n\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={cn(size === undefined && 'flex-1', className)}\n style={{ ...fixed, ...style }}\n {...props}\n />\n );\n },\n);\nSpacer.displayName = 'Spacer';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport type CenterProps = ComponentPropsWithoutRef<'div'>;\n\n/** Flex shorthand that centers its children both axes. */\nexport const Center = forwardRef<HTMLDivElement, CenterProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex items-center justify-center', className)}\n {...props}\n />\n ),\n);\nCenter.displayName = 'Center';\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/**\n * Provides the rule geometry for `Divider`. A horizontal divider is a full-width\n * top border; a vertical divider is a full-height left border that stretches to\n * its flex/grid parent. The line color is the semantic `border` token.\n */\nexport const dividerVariants = tv({\n base: 'border-border',\n variants: {\n orientation: {\n horizontal: 'w-full border-t',\n vertical: 'h-full self-stretch border-l',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\nexport type DividerVariants = VariantProps<typeof dividerVariants>;\n\n/** Represents the axis of a `Divider` (`horizontal` · `vertical`). */\nexport type DividerOrientation = NonNullable<DividerVariants['orientation']>;\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { dividerVariants, type DividerOrientation } from './Divider.variants';\n\nexport interface DividerProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Axis of the rule. Default `horizontal`. */\n orientation?: DividerOrientation;\n /**\n * Optional centered content overlaid on the rule — the classic \"or\" separator.\n * Horizontal only (ignored when `orientation=\"vertical\"`). When present the rule\n * is split either side of the label and the divider is exposed as a labelled\n * (non-decorative) separator.\n */\n label?: ReactNode;\n}\n\n/**\n * A thin rule that separates content, using the semantic `border` token.\n * Plain by default; pass `label` for a horizontal rule with centered content\n * (e.g. `<Divider label=\"or\" />`) sitting on the surface background.\n */\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n ({ orientation = 'horizontal', label, className, ...props }, ref) => {\n if (label != null && orientation === 'horizontal') {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n className={cn('flex w-full items-center gap-3', className)}\n {...props}\n >\n <span className=\"h-px flex-1 bg-border\" />\n <span className=\"text-sm text-muted-foreground\">{label}</span>\n <span className=\"h-px flex-1 bg-border\" />\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(dividerVariants({ orientation }), className)}\n {...props}\n />\n );\n },\n);\nDivider.displayName = 'Divider';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface ScrollAreaProps extends ComponentPropsWithoutRef<'div'> {\n axis?: 'vertical' | 'horizontal' | 'both';\n}\n\n/**\n * Native scrollable container with stable visuals. For custom-styled\n * scrollbars (track + thumb separately animated) use the L5 ScrollArea\n * organism. This atom exists for the common case.\n */\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(\n ({ axis = 'vertical', className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n 'relative',\n axis === 'vertical' && 'overflow-y-auto overflow-x-hidden',\n axis === 'horizontal' && 'overflow-x-auto overflow-y-hidden',\n axis === 'both' && 'overflow-auto',\n className,\n )}\n {...props}\n />\n ),\n);\nScrollArea.displayName = 'ScrollArea';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface ClusterProps extends ComponentPropsWithoutRef<'div'> {\n /** Gap between children. Default `4`. */\n gap?: '2' | '3' | '4' | '6' | '8';\n /** Justify on cross axis. Default `center`. */\n justify?: 'start' | 'center' | 'end';\n}\n\nconst GAP: Record<NonNullable<ClusterProps['gap']>, string> = {\n '2': 'gap-2', '3': 'gap-3', '4': 'gap-4', '6': 'gap-6', '8': 'gap-8',\n};\nconst JUSTIFY: Record<NonNullable<ClusterProps['justify']>, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n};\n\n/**\n * Centered wrapping row — for auth-page action clusters, hero CTAs, footer\n * link groups. `Inline` left-aligns; `Cluster` centers by default.\n */\nexport const Cluster = forwardRef<HTMLDivElement, ClusterProps>(\n ({ gap = '4', justify = 'center', className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn('flex flex-wrap items-center', GAP[gap], JUSTIFY[justify], className)}\n {...props}\n />\n ),\n);\nCluster.displayName = 'Cluster';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface FrameProps extends ComponentPropsWithoutRef<'div'> {\n /** Padding. Default `4`. */\n padding?: '0' | '2' | '3' | '4' | '6' | '8';\n /** Border radius. Default `md`. */\n radius?: 'none' | 'sm' | 'md' | 'lg';\n /** Surface background — `card` (raised) or `muted` (recessed). Default `card`. */\n surface?: 'card' | 'muted' | 'transparent';\n /** Show the border. Default `true`. */\n isBordered?: boolean;\n}\n\nconst PADDING: Record<NonNullable<FrameProps['padding']>, string> = {\n '0': '', '2': 'p-2', '3': 'p-3', '4': 'p-4', '6': 'p-6', '8': 'p-8',\n};\nconst RADIUS: Record<NonNullable<FrameProps['radius']>, string> = {\n none: '', sm: 'rounded-sm', md: 'rounded-md', lg: 'rounded-lg',\n};\nconst SURFACE: Record<NonNullable<FrameProps['surface']>, string> = {\n card: 'bg-card text-card-foreground',\n muted: 'bg-muted text-foreground',\n transparent: '',\n};\n\n/**\n * Bordered shell with padding + radius — `Card` without slot semantics.\n * Use when you want the visual but not the structured Header/Body/Footer.\n */\nexport const Frame = forwardRef<HTMLDivElement, FrameProps>(\n ({ padding = '4', radius = 'md', surface = 'card', isBordered = true, className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n SURFACE[surface],\n PADDING[padding],\n RADIUS[radius],\n isBordered && 'border border-border',\n className,\n )}\n {...props}\n />\n ),\n);\nFrame.displayName = 'Frame';\n","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface TwoColumnProps extends Omit<ComponentPropsWithoutRef<'div'>, 'children'> {\n /** Sidebar / aside content. */\n aside: ReactNode;\n /** Main content. */\n children: ReactNode;\n /** Aside width — Tailwind class string (e.g. `w-64`). Default `w-64`. */\n asideWidth?: string;\n /** Side the aside sits on. Default `left`. */\n asideSide?: 'left' | 'right';\n /** Gap between aside and main. Default `6`. */\n gap?: '0' | '4' | '6' | '8' | '10';\n}\n\nconst GAP: Record<NonNullable<TwoColumnProps['gap']>, string> = {\n '0': 'gap-0', '4': 'gap-4', '6': 'gap-6', '8': 'gap-8', '10': 'gap-10',\n};\n\n/**\n * Two-pane layout — fixed-width aside + flexible main. Sidebar+content,\n * filter+results, table-of-contents+article patterns.\n */\nexport const TwoColumn = forwardRef<HTMLDivElement, TwoColumnProps>(\n (\n { aside, children, asideWidth = 'w-64', asideSide = 'left', gap = '6', className, ...props },\n ref,\n ) => (\n <div\n ref={ref}\n className={cn(\n 'flex w-full',\n asideSide === 'right' && 'flex-row-reverse',\n GAP[gap],\n className,\n )}\n {...props}\n >\n <aside className={cn('shrink-0', asideWidth)}>{aside}</aside>\n <main className=\"min-w-0 flex-1\">{children}</main>\n </div>\n ),\n);\nTwoColumn.displayName = 'TwoColumn';\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { useControlled } from '../../../foundation/hooks';\n\ninterface PanelInfo {\n index: number;\n defaultSize: number;\n minSize: number;\n maxSize: number;\n}\n\ninterface ResizableContextValue {\n orientation: 'horizontal' | 'vertical';\n sizes: number[];\n panels: React.MutableRefObject<PanelInfo[]>;\n containerRef: React.MutableRefObject<HTMLDivElement | null>;\n beginDrag: (separatorIndex: number, event: ReactMouseEvent) => void;\n nudge: (separatorIndex: number, deltaPct: number) => void;\n resetPair: (separatorIndex: number) => void;\n}\n\nconst ResizableContext = createContext<ResizableContextValue | null>(null);\n\nfunction useResizableContext() {\n const ctx = useContext(ResizableContext);\n if (!ctx) throw new Error('ResizablePanels.* must be used inside <ResizablePanels>');\n return ctx;\n}\n\nexport interface ResizablePanelsProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n defaultSizes?: number[];\n sizes?: number[];\n onSizesChange?: (sizes: number[]) => void;\n children: ReactNode;\n}\n\nfunction countPanels(children: ReactNode): number {\n let n = 0;\n Children.forEach(children, (child) => {\n if (isValidElement(child) && (child.type as { displayName?: string }).displayName === 'ResizablePanel') {\n n += 1;\n }\n });\n return n;\n}\n\nconst ResizablePanelsRoot = forwardRef<HTMLDivElement, ResizablePanelsProps>(\n function ResizablePanels(\n { orientation = 'horizontal', defaultSizes, sizes: sizesProp, onSizesChange, className, children, ...rest },\n forwardedRef,\n ) {\n const panels = useRef<PanelInfo[]>([]);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const dragCleanupRef = useRef<(() => void) | null>(null);\n const panelCount = countPanels(children);\n\n // Unmounting mid-drag must release the window listeners + body style overrides.\n useEffect(() => () => dragCleanupRef.current?.(), []);\n\n const initialSizes =\n defaultSizes && defaultSizes.length === panelCount\n ? defaultSizes\n : Array(panelCount).fill(100 / Math.max(panelCount, 1));\n\n const [sizes, setSizes] = useControlled<number[]>({\n controlled: sizesProp,\n default: initialSizes,\n onChange: onSizesChange,\n });\n\n // If the panel count changes (children added/removed), reset to equal sizes.\n useEffect(() => {\n if (sizes.length === panelCount) return;\n setSizes(Array(panelCount).fill(100 / Math.max(panelCount, 1)));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [panelCount]);\n\n const applyDelta = useCallback(\n (separatorIndex: number, deltaPct: number) => {\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = panels.current[a];\n const bInfo = panels.current[b];\n if (!aInfo || !bInfo) return;\n const next = sizes.slice();\n let nextA = next[a]! + deltaPct;\n let nextB = next[b]! - deltaPct;\n\n // Clamp by min/max — adjust deltaPct on overshoot.\n if (nextA < aInfo.minSize) {\n const adj = aInfo.minSize - nextA;\n nextA += adj;\n nextB -= adj;\n }\n if (nextB < bInfo.minSize) {\n const adj = bInfo.minSize - nextB;\n nextB += adj;\n nextA -= adj;\n }\n if (nextA > aInfo.maxSize) {\n const adj = nextA - aInfo.maxSize;\n nextA -= adj;\n nextB += adj;\n }\n if (nextB > bInfo.maxSize) {\n const adj = nextB - bInfo.maxSize;\n nextB -= adj;\n nextA += adj;\n }\n\n next[a] = nextA;\n next[b] = nextB;\n setSizes(next);\n },\n [sizes, setSizes],\n );\n\n const beginDrag = useCallback(\n (separatorIndex: number, event: ReactMouseEvent) => {\n const container = containerRef.current;\n if (!container) return;\n const startX = event.clientX;\n const startY = event.clientY;\n const rect = container.getBoundingClientRect();\n const total = orientation === 'horizontal' ? rect.width : rect.height;\n if (total === 0) return;\n\n const startSizes = sizes.slice();\n\n const onMove = (e: MouseEvent) => {\n const deltaPx =\n orientation === 'horizontal' ? e.clientX - startX : e.clientY - startY;\n const deltaPct = (deltaPx / total) * 100;\n // Recompute against the start state, not the live state, to prevent drift.\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = panels.current[a];\n const bInfo = panels.current[b];\n if (!aInfo || !bInfo) return;\n let nextA = startSizes[a]! + deltaPct;\n let nextB = startSizes[b]! - deltaPct;\n nextA = Math.max(aInfo.minSize, Math.min(aInfo.maxSize, nextA));\n nextB = Math.max(bInfo.minSize, Math.min(bInfo.maxSize, nextB));\n // Restore the locked total after clamping.\n const sum = nextA + nextB;\n const startSum = startSizes[a]! + startSizes[b]!;\n if (sum !== startSum) {\n const diff = startSum - sum;\n // Push surplus onto whichever side has slack.\n if (nextA + diff <= aInfo.maxSize && nextA + diff >= aInfo.minSize) {\n nextA = nextA + diff;\n } else {\n nextB = nextB + diff;\n }\n }\n const next = startSizes.slice();\n next[a] = nextA;\n next[b] = nextB;\n setSizes(next);\n };\n\n const onUp = () => {\n window.removeEventListener('mousemove', onMove);\n window.removeEventListener('mouseup', onUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n dragCleanupRef.current = null;\n };\n\n document.body.style.cursor = orientation === 'horizontal' ? 'col-resize' : 'row-resize';\n document.body.style.userSelect = 'none';\n window.addEventListener('mousemove', onMove);\n window.addEventListener('mouseup', onUp);\n dragCleanupRef.current = onUp;\n },\n [orientation, sizes, setSizes],\n );\n\n const resetPair = useCallback(\n (separatorIndex: number) => {\n const a = separatorIndex;\n const b = separatorIndex + 1;\n const aInfo = panels.current[a];\n const bInfo = panels.current[b];\n if (!aInfo || !bInfo) return;\n const next = sizes.slice();\n const total = next[a]! + next[b]!;\n next[a] = (total * aInfo.defaultSize) / (aInfo.defaultSize + bInfo.defaultSize);\n next[b] = total - next[a]!;\n setSizes(next);\n },\n [sizes, setSizes],\n );\n\n const ctx = useMemo<ResizableContextValue>(\n () => ({\n orientation,\n sizes,\n panels,\n containerRef,\n beginDrag,\n nudge: applyDelta,\n resetPair,\n }),\n [orientation, sizes, beginDrag, applyDelta, resetPair],\n );\n\n // Render children with separator indices threaded through.\n let panelIdx = 0;\n let sepIdx = 0;\n const elements = Children.map(children, (child) => {\n if (!isValidElement(child)) return child;\n const displayName = (child.type as { displayName?: string }).displayName;\n if (displayName === 'ResizablePanel') {\n const node = (\n <ResizablePanelInner\n key={`p-${panelIdx}`}\n index={panelIdx}\n {...(child.props as ResizablePanelProps)}\n />\n );\n panelIdx += 1;\n return node;\n }\n if (displayName === 'ResizableSeparator') {\n const node = (\n <ResizableSeparatorInner\n key={`s-${sepIdx}`}\n index={sepIdx}\n {...(child.props as ResizableSeparatorProps)}\n />\n );\n sepIdx += 1;\n return node;\n }\n return child;\n });\n\n return (\n <ResizableContext.Provider value={ctx}>\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof forwardedRef === 'function') forwardedRef(el);\n else if (forwardedRef) (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n data-orientation={orientation}\n className={cn(\n 'flex h-full w-full',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n className,\n )}\n {...rest}\n >\n {elements}\n </div>\n </ResizableContext.Provider>\n );\n },\n);\n\nexport interface ResizablePanelProps extends HTMLAttributes<HTMLDivElement> {\n defaultSize?: number;\n minSize?: number;\n maxSize?: number;\n children?: ReactNode;\n}\n\ninterface ResizablePanelInnerProps extends ResizablePanelProps {\n index: number;\n}\n\nfunction ResizablePanelInner({\n index,\n defaultSize = 100,\n minSize = 0,\n maxSize = 100,\n className,\n children,\n ...rest\n}: ResizablePanelInnerProps) {\n const ctx = useResizableContext();\n\n // Register panel info before first paint so beginDrag can reference it.\n if (!ctx.panels.current[index]) {\n ctx.panels.current[index] = { index, defaultSize, minSize, maxSize };\n } else {\n ctx.panels.current[index] = { index, defaultSize, minSize, maxSize };\n }\n\n const size = ctx.sizes[index] ?? defaultSize;\n\n return (\n <div\n data-panel-index={index}\n className={cn('overflow-auto', className)}\n style={\n ctx.orientation === 'horizontal'\n ? { width: `${size}%`, height: '100%' }\n : { height: `${size}%`, width: '100%' }\n }\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n// Marker component — ResizablePanels swaps each <ResizablePanel> for its inner\n// impl via Children.map. The wrapper exists only as a typed slot.\nexport const ResizablePanel = forwardRef<HTMLDivElement, ResizablePanelProps>(\n function ResizablePanel() {\n return null;\n },\n);\nResizablePanel.displayName = 'ResizablePanel';\n\nexport interface ResizableSeparatorProps extends HTMLAttributes<HTMLDivElement> {\n isDisabled?: boolean;\n}\n\ninterface ResizableSeparatorInnerProps extends ResizableSeparatorProps {\n index: number;\n}\n\nfunction ResizableSeparatorInner({\n index,\n isDisabled,\n className,\n onKeyDown,\n onDoubleClick,\n ...rest\n}: ResizableSeparatorInnerProps) {\n const ctx = useResizableContext();\n const [dragging, setDragging] = useState(false);\n\n const handleMouseDown = (e: ReactMouseEvent<HTMLDivElement>) => {\n if (isDisabled) return;\n if (e.button !== 0) return;\n e.preventDefault();\n setDragging(true);\n ctx.beginDrag(index, e);\n const onUp = () => {\n setDragging(false);\n window.removeEventListener('mouseup', onUp);\n };\n window.addEventListener('mouseup', onUp);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || isDisabled) return;\n const step = e.shiftKey ? 10 : 1;\n if (ctx.orientation === 'horizontal') {\n if (e.key === 'ArrowLeft') {\n e.preventDefault();\n ctx.nudge(index, -step);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n ctx.nudge(index, step);\n }\n } else {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n ctx.nudge(index, -step);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n ctx.nudge(index, step);\n }\n }\n };\n\n // Announce the panel BEFORE the separator — ArrowRight/ArrowDown grow it, so size moves with the key.\n const ariaValueNow = ctx.sizes[index] ?? 50;\n const panelBefore = ctx.panels.current[index];\n\n return (\n <div\n role=\"separator\"\n aria-orientation={ctx.orientation === 'horizontal' ? 'vertical' : 'horizontal'}\n aria-valuenow={Math.round(ariaValueNow)}\n aria-valuemin={panelBefore?.minSize ?? 0}\n aria-valuemax={panelBefore?.maxSize ?? 100}\n aria-disabled={isDisabled || undefined}\n tabIndex={isDisabled ? -1 : 0}\n data-dragging={dragging || undefined}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n onDoubleClick={(e) => {\n onDoubleClick?.(e);\n if (e.defaultPrevented || isDisabled) return;\n ctx.resetPair(index);\n }}\n className={cn(\n 'flex shrink-0 items-center justify-center bg-border transition-colors',\n ctx.orientation === 'horizontal'\n ? 'w-1 cursor-col-resize hover:bg-border-strong data-[dragging]:bg-primary'\n : 'h-1 cursor-row-resize hover:bg-border-strong data-[dragging]:bg-primary',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n isDisabled && 'cursor-default opacity-50 hover:bg-border',\n className,\n )}\n {...rest}\n />\n );\n}\n\nexport const ResizableSeparator = forwardRef<HTMLDivElement, ResizableSeparatorProps>(\n function ResizableSeparator() {\n return null;\n },\n);\nResizableSeparator.displayName = 'ResizableSeparator';\n\nexport const ResizablePanels = Object.assign(ResizablePanelsRoot, {\n Panel: ResizablePanel,\n Separator: ResizableSeparator,\n});\n\nexport default ResizablePanels;\n","import {\n forwardRef,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { Announce } from '../../../foundation/primitives';\nimport { Spinner } from '../../feedback/spinner';\n\nexport interface PullToRefreshProps extends HTMLAttributes<HTMLDivElement> {\n onRefresh: () => Promise<void> | void;\n threshold?: number;\n maxPull?: number;\n isDisabled?: boolean;\n children: ReactNode;\n}\n\n/**\n * Pull-to-refresh wrapper. Listen to pointer drag at scrollTop=0; once past\n * `threshold`, fire `onRefresh`. Visual indicator: spinner that scales in as\n * the user pulls.\n */\nexport const PullToRefresh = forwardRef<HTMLDivElement, PullToRefreshProps>(\n function PullToRefresh(\n { onRefresh, threshold = 60, maxPull = 120, isDisabled, className, children, ...rest },\n forwardedRef,\n ) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const startYRef = useRef<number | null>(null);\n const [pull, setPull] = useState(0);\n const [refreshing, setRefreshing] = useState(false);\n\n const onPointerDown = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (isDisabled || refreshing) return;\n const el = containerRef.current;\n if (!el || el.scrollTop > 0) return;\n startYRef.current = e.clientY;\n };\n\n const onPointerMove = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (startYRef.current == null) return;\n // Pointer was released outside the container — abandon the gesture.\n if (e.buttons === 0) {\n startYRef.current = null;\n setPull(0);\n return;\n }\n const dy = e.clientY - startYRef.current;\n if (dy < 0) {\n setPull(0);\n return;\n }\n // Resistance: sub-linear growth past threshold.\n const eased = dy < threshold ? dy : threshold + (dy - threshold) * 0.4;\n setPull(Math.min(maxPull, eased));\n };\n\n const onPointerUp = async () => {\n if (startYRef.current == null) return;\n const reached = pull >= threshold;\n startYRef.current = null;\n if (reached) {\n setRefreshing(true);\n setPull(threshold);\n try {\n await onRefresh();\n } finally {\n setRefreshing(false);\n setPull(0);\n }\n } else {\n setPull(0);\n }\n };\n\n // Touch: native vertical pan fires pointercancel and kills the gesture.\n // preventDefault touchmove only mid-pull (scrollTop 0, moving down); normal scroll stays native.\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n const onTouchMove = (e: TouchEvent) => {\n if (startYRef.current == null || !e.cancelable) return;\n if (el.scrollTop > 0) return;\n const touch = e.touches[0];\n if (!touch) return;\n if (touch.clientY - startYRef.current > 0) e.preventDefault();\n };\n el.addEventListener('touchmove', onTouchMove, { passive: false });\n return () => el.removeEventListener('touchmove', onTouchMove);\n }, []);\n\n // Releasing the pointer outside the container must still finish the gesture.\n useEffect(() => {\n if (pull === 0) return;\n const finish = () => {\n void onPointerUp();\n };\n window.addEventListener('pointerup', finish);\n window.addEventListener('pointercancel', finish);\n return () => {\n window.removeEventListener('pointerup', finish);\n window.removeEventListener('pointercancel', finish);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pull]);\n\n const reached = pull >= threshold;\n\n return (\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof forwardedRef === 'function') forwardedRef(el);\n else if (forwardedRef) (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = el;\n }}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n className={cn('relative h-full overflow-y-auto', className)}\n {...rest}\n >\n <div\n aria-hidden=\"true\"\n className=\"pointer-events-none absolute inset-x-0 top-0 z-raised flex items-center justify-center\"\n style={{\n height: pull,\n transition: startYRef.current == null ? 'height 200ms ease-out' : 'none',\n }}\n >\n {pull > 8 && (\n <div\n className={cn(\n 'transition-opacity',\n refreshing ? 'opacity-100' : reached ? 'opacity-100' : 'opacity-60',\n )}\n style={{ transform: `scale(${Math.min(1, pull / threshold)})` }}\n >\n <Spinner size=\"md\" tone={reached ? 'brand' : 'default'} />\n </div>\n )}\n </div>\n <div\n style={{\n transform: `translateY(${pull}px)`,\n transition: startYRef.current == null ? 'transform 200ms ease-out' : 'none',\n }}\n >\n {children}\n </div>\n <Announce politeness=\"polite\">\n {refreshing ? 'Refreshing' : ''}\n </Announce>\n </div>\n );\n },\n);\n","import {\n createContext,\n forwardRef,\n useContext,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { useControlled, useMediaQuery } from '../../../foundation/hooks';\nimport { Drawer, DrawerContent } from '../../overlays/drawer';\n\ntype Breakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nconst BREAKPOINT_PX: Record<Breakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\n// Complete class strings per breakpoint — Tailwind can't see interpolated names.\nconst SIDEBAR_STATIC_CLASSES: Record<Breakpoint, string> = {\n sm: 'hidden sm:flex',\n md: 'hidden md:flex',\n lg: 'hidden lg:flex',\n xl: 'hidden xl:flex',\n '2xl': 'hidden 2xl:flex',\n};\n\ninterface AppShellContextValue {\n sidebarWidth: string;\n asideWidth: string;\n sidebarBreakpoint: Breakpoint;\n isSidebarOpen: boolean;\n setSidebarOpen: (open: boolean) => void;\n isSidebarCollapsed: boolean;\n isAsideHidden: boolean;\n}\n\nconst AppShellContext = createContext<AppShellContextValue | null>(null);\n\nfunction useAppShellContext() {\n const ctx = useContext(AppShellContext);\n if (!ctx) throw new Error('AppShell.* must be used inside <AppShell>');\n return ctx;\n}\n\nexport interface AppShellProps extends HTMLAttributes<HTMLDivElement> {\n sidebarWidth?: string;\n asideWidth?: string;\n sidebarBreakpoint?: Breakpoint;\n asideBreakpoint?: Breakpoint;\n isSidebarOpen?: boolean;\n defaultSidebarOpen?: boolean;\n onSidebarOpenChange?: (open: boolean) => void;\n children: ReactNode;\n}\n\n/**\n * Top-level page frame. Children: `AppShell.Header / Sidebar / Main / Aside /\n * Footer`. CSS-grid layout; sidebar collapses to a Drawer below\n * `sidebarBreakpoint`.\n */\nconst AppShellRoot = forwardRef<HTMLDivElement, AppShellProps>(function AppShell(\n {\n sidebarWidth = '240px',\n asideWidth = '280px',\n sidebarBreakpoint = 'lg',\n asideBreakpoint = 'xl',\n isSidebarOpen: sidebarOpenProp,\n defaultSidebarOpen = false,\n onSidebarOpenChange,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const [isSidebarOpen, setSidebarOpen] = useControlled({\n controlled: sidebarOpenProp,\n default: defaultSidebarOpen,\n onChange: onSidebarOpenChange,\n });\n\n const isSidebarCollapsed = !useMediaQuery(`(min-width: ${BREAKPOINT_PX[sidebarBreakpoint]}px)`);\n const isAsideHidden = !useMediaQuery(`(min-width: ${BREAKPOINT_PX[asideBreakpoint]}px)`);\n\n const ctx = useMemo<AppShellContextValue>(\n () => ({\n sidebarWidth,\n asideWidth,\n sidebarBreakpoint,\n isSidebarOpen,\n setSidebarOpen,\n isSidebarCollapsed,\n isAsideHidden,\n }),\n [sidebarWidth, asideWidth, sidebarBreakpoint, isSidebarOpen, setSidebarOpen, isSidebarCollapsed, isAsideHidden],\n );\n\n const gridTemplate = isSidebarCollapsed\n ? `'header header' auto 'main main' 1fr 'footer footer' auto / 1fr`\n : `'header header' auto 'sidebar main' 1fr 'sidebar footer' auto / ${sidebarWidth} 1fr`;\n\n return (\n <AppShellContext.Provider value={ctx}>\n <div\n ref={ref}\n className={cn('grid min-h-svh bg-background text-foreground', className)}\n style={{ gridTemplate }}\n {...rest}\n >\n <a\n href=\"#app-shell-main\"\n className=\"sr-only focus:not-sr-only focus:fixed focus:left-2 focus:top-2 focus:z-modal focus:rounded-md focus:bg-card focus:px-3 focus:py-2 focus:shadow\"\n >\n Skip to content\n </a>\n {children}\n </div>\n </AppShellContext.Provider>\n );\n});\n\nexport type AppShellHeaderProps = HTMLAttributes<HTMLElement>;\n\nexport const AppShellHeader = forwardRef<HTMLElement, AppShellHeaderProps>(\n function AppShellHeader({ className, ...rest }, ref) {\n return (\n <header\n ref={ref}\n role=\"banner\"\n className={cn(\n 'sticky top-0 z-sticky flex h-14 items-center gap-3 border-b border-border bg-card px-4 [grid-area:header]',\n className,\n )}\n {...rest}\n />\n );\n },\n);\n\nexport type AppShellSidebarProps = HTMLAttributes<HTMLElement>;\n\nexport const AppShellSidebar = forwardRef<HTMLElement, AppShellSidebarProps>(\n function AppShellSidebar({ className, children, ...rest }, ref) {\n const ctx = useAppShellContext();\n\n if (ctx.isSidebarCollapsed) {\n return (\n <Drawer open={ctx.isSidebarOpen} onOpenChange={ctx.setSidebarOpen} side=\"left\">\n <DrawerContent className=\"w-72 max-w-[80%]\">\n <nav className={cn('flex h-full flex-col', className)}>{children}</nav>\n </DrawerContent>\n </Drawer>\n );\n }\n return (\n <aside\n ref={ref}\n className={cn(\n 'sticky top-14 h-[calc(100svh-3.5rem)] overflow-y-auto border-r border-border bg-card [grid-area:sidebar]',\n SIDEBAR_STATIC_CLASSES[ctx.sidebarBreakpoint],\n className,\n )}\n {...rest}\n >\n <nav className=\"flex h-full w-full flex-col p-3\">{children}</nav>\n </aside>\n );\n },\n);\n\nexport type AppShellMainProps = HTMLAttributes<HTMLElement>;\n\nexport const AppShellMain = forwardRef<HTMLElement, AppShellMainProps>(\n function AppShellMain({ className, children, ...rest }, ref) {\n return (\n <main\n ref={ref}\n id=\"app-shell-main\"\n className={cn(\n 'flex flex-col [grid-area:main] focus:outline-none',\n className,\n )}\n tabIndex={-1}\n {...rest}\n >\n {children}\n </main>\n );\n },\n);\n\nexport type AppShellContentProps = HTMLAttributes<HTMLDivElement>;\n\nexport const AppShellContent = forwardRef<HTMLDivElement, AppShellContentProps>(\n function AppShellContent({ className, ...rest }, ref) {\n return <div ref={ref} className={cn('flex-1 overflow-y-auto p-6', className)} {...rest} />;\n },\n);\n\nexport type AppShellAsideProps = HTMLAttributes<HTMLElement>;\n\nexport const AppShellAside = forwardRef<HTMLElement, AppShellAsideProps>(\n function AppShellAside({ className, ...rest }, ref) {\n const ctx = useAppShellContext();\n if (ctx.isAsideHidden) return null;\n return (\n <aside\n ref={ref}\n style={{ width: ctx.asideWidth }}\n className={cn(\n 'sticky top-14 h-[calc(100svh-3.5rem)] shrink-0 overflow-y-auto border-l border-border bg-card p-4',\n className,\n )}\n {...rest}\n />\n );\n },\n);\n\nexport type AppShellFooterProps = HTMLAttributes<HTMLElement>;\n\nexport const AppShellFooter = forwardRef<HTMLElement, AppShellFooterProps>(\n function AppShellFooter({ className, ...rest }, ref) {\n return (\n <footer\n ref={ref}\n role=\"contentinfo\"\n className={cn(\n 'border-t border-border bg-card px-4 py-3 text-sm text-muted-foreground [grid-area:footer]',\n className,\n )}\n {...rest}\n />\n );\n },\n);\n\nexport const AppShell = Object.assign(AppShellRoot, {\n Header: AppShellHeader,\n Sidebar: AppShellSidebar,\n Main: AppShellMain,\n Content: AppShellContent,\n Aside: AppShellAside,\n Footer: AppShellFooter,\n});\n\nexport function useAppShell() {\n return useAppShellContext();\n}\n\nexport default AppShell;\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/* Overlay positioning + visibility + transition surface — see Overlay.standard.md + Overlay.spec.md. */\nexport const overlayVariants = tv({\n base: 'absolute',\n variants: {\n position: {\n 'top-right': 'top-[var(--ui-overlay-inset,0.5rem)] right-[var(--ui-overlay-inset,0.5rem)]',\n 'top-left': 'top-[var(--ui-overlay-inset,0.5rem)] left-[var(--ui-overlay-inset,0.5rem)]',\n 'bottom-right': 'bottom-[var(--ui-overlay-inset,0.5rem)] right-[var(--ui-overlay-inset,0.5rem)]',\n 'bottom-left': 'bottom-[var(--ui-overlay-inset,0.5rem)] left-[var(--ui-overlay-inset,0.5rem)]',\n 'top': 'top-[var(--ui-overlay-inset,0.5rem)] left-1/2 -translate-x-1/2',\n 'bottom': 'bottom-[var(--ui-overlay-inset,0.5rem)] left-1/2 -translate-x-1/2',\n 'left': 'left-[var(--ui-overlay-inset,0.5rem)] top-1/2 -translate-y-1/2',\n 'right': 'right-[var(--ui-overlay-inset,0.5rem)] top-1/2 -translate-y-1/2',\n 'center': 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n 'custom': '', // consumer passed inset object — positioning via inline style\n },\n visibilityMode: {\n 'always': '',\n 'hover': 'opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 group-hover:[transition-duration:var(--ui-overlay-enter,200ms)] group-focus-within:[transition-duration:var(--ui-overlay-enter,200ms)]',\n 'focus-within': 'opacity-0 group-focus-within:opacity-100 group-focus-within:[transition-duration:var(--ui-overlay-enter,200ms)]',\n 'presence': 'data-[state=closed]:opacity-0 data-[state=open]:[transition-duration:var(--ui-overlay-enter,200ms)]',\n },\n transition: {\n 'none': '',\n 'fade': 'transition-opacity duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-scale': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-up': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-down': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-left': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n 'fade-slide-right': 'transition-[opacity,transform] duration-[var(--ui-overlay-exit,200ms)] ease-out',\n },\n },\n compoundVariants: [\n // === HOVER mode + transform-bearing transitions ===\n {\n visibilityMode: 'hover', transition: 'fade-scale',\n class:\n 'scale-95 group-hover:scale-100 group-focus-within:scale-100 ' +\n 'motion-reduce:scale-100 motion-reduce:group-hover:scale-100 motion-reduce:group-focus-within:scale-100',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-up',\n class:\n 'translate-y-1 group-hover:translate-y-0 group-focus-within:translate-y-0 ' +\n 'motion-reduce:translate-y-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-down',\n class:\n '-translate-y-1 group-hover:translate-y-0 group-focus-within:translate-y-0 ' +\n 'motion-reduce:translate-y-0 motion-reduce:group-hover:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-left',\n class:\n 'translate-x-1 group-hover:translate-x-0 group-focus-within:translate-x-0 ' +\n 'motion-reduce:translate-x-0 motion-reduce:group-hover:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n {\n visibilityMode: 'hover', transition: 'fade-slide-right',\n class:\n '-translate-x-1 group-hover:translate-x-0 group-focus-within:translate-x-0 ' +\n 'motion-reduce:translate-x-0 motion-reduce:group-hover:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n\n // === FOCUS-WITHIN mode + transform-bearing transitions ===\n {\n visibilityMode: 'focus-within', transition: 'fade-scale',\n class: 'scale-95 group-focus-within:scale-100 motion-reduce:scale-100 motion-reduce:group-focus-within:scale-100',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-up',\n class: 'translate-y-1 group-focus-within:translate-y-0 motion-reduce:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-down',\n class: '-translate-y-1 group-focus-within:translate-y-0 motion-reduce:translate-y-0 motion-reduce:group-focus-within:translate-y-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-left',\n class: 'translate-x-1 group-focus-within:translate-x-0 motion-reduce:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n {\n visibilityMode: 'focus-within', transition: 'fade-slide-right',\n class: '-translate-x-1 group-focus-within:translate-x-0 motion-reduce:translate-x-0 motion-reduce:group-focus-within:translate-x-0',\n },\n\n // === PRESENCE mode (data-state-driven) + transform-bearing transitions ===\n {\n visibilityMode: 'presence', transition: 'fade-scale',\n class: 'data-[state=closed]:scale-95 motion-reduce:data-[state=closed]:scale-100',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-up',\n class: 'data-[state=closed]:translate-y-1 motion-reduce:data-[state=closed]:translate-y-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-down',\n class: 'data-[state=closed]:-translate-y-1 motion-reduce:data-[state=closed]:translate-y-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-left',\n class: 'data-[state=closed]:translate-x-1 motion-reduce:data-[state=closed]:translate-x-0',\n },\n {\n visibilityMode: 'presence', transition: 'fade-slide-right',\n class: 'data-[state=closed]:-translate-x-1 motion-reduce:data-[state=closed]:translate-x-0',\n },\n ],\n defaultVariants: {\n position: 'top-right',\n visibilityMode: 'always',\n transition: 'none',\n },\n});\n\nexport type OverlayVariants = VariantProps<typeof overlayVariants>;\n","import {\n forwardRef,\n isValidElement,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {\n cn,\n CssExtensions,\n TransitionExtensions,\n type SizeValue,\n type AbsolutePosition,\n type AbsolutePositionPreset,\n type AbsoluteInsetOverrides,\n type PresenceAnimationDurationProp,\n} from '../../../foundation/utils';\nimport { Slot, Presence } from '../../../foundation/primitives';\nimport { overlayVariants } from './Overlay.variants';\n\nconst COMPONENT_NAME = 'Overlay';\n\n/* Re-exported for ergonomic consumer imports — same shape as the shared types. */\nexport type OverlayPosition = AbsolutePosition;\nexport type OverlayAppearOn = 'always' | 'hover' | 'focus-within';\nexport type OverlayTransition =\n | 'none'\n | 'fade'\n | 'fade-scale'\n | 'fade-slide-up'\n | 'fade-slide-down'\n | 'fade-slide-left'\n | 'fade-slide-right';\nexport type OverlayDuration = PresenceAnimationDurationProp;\n\nexport interface OverlayProps {\n /* Anchor location — preset corner/edge/center, or raw inset object. Default 'top-right'. */\n position?: OverlayPosition;\n\n /* Spacing from edge for preset positions. Default '0.5rem'. Ignored for custom inset object. */\n inset?: SizeValue;\n\n /* z-index. Default 10. */\n zIndex?: number | string;\n\n /* Visibility trigger while mounted. Default 'always'. Hover / focus-within modes require parent `className=\"group\"`. */\n appearOn?: OverlayAppearOn;\n\n /* Optional presence — when provided, controls mount/unmount with exit transition (defers unmount until transitionend). */\n isOpen?: boolean;\n\n /* Animation effect for show/hide. Defaults to 'fade' if any visibility gating is active, else 'none'. */\n transition?: OverlayTransition;\n\n /* Duration in ms. Number = symmetric; object = asymmetric enter/exit. Default 200. */\n transitionDuration?: OverlayDuration;\n\n /* CSS timing function. Default 'ease-out'. */\n transitionEasing?: string;\n\n /* Render as the single child element via Slot (no extra wrapper div). Default true. */\n asChild?: boolean;\n\n /* Extra classes merged onto the rendered element (or wrapper when asChild=false). */\n className?: string;\n\n /* Extra inline styles merged onto the rendered element. */\n style?: CSSProperties;\n\n /* Single React element when asChild=true (default), or arbitrary content when asChild=false. */\n children: ReactNode;\n}\n\n/* Renders a positioned overlay anchored to its nearest positioned ancestor — for image-corner controls, badges, hover-revealed actions, and conditionally mounted floating elements. */\nexport const Overlay = forwardRef<HTMLElement, OverlayProps>(\n (\n {\n position = 'top-right',\n inset,\n zIndex = 10,\n appearOn = 'always',\n isOpen,\n transition,\n transitionDuration,\n transitionEasing,\n asChild = true,\n className,\n style,\n children,\n },\n forwardedRef,\n ) => {\n const isPresenceMode = isOpen !== undefined;\n const isCustomPosition = typeof position === 'object' && position !== null;\n\n const effectiveTransition: OverlayTransition =\n transition ??\n (isPresenceMode || appearOn !== 'always' ? 'fade' : 'none');\n\n const visibilityMode: 'always' | 'hover' | 'focus-within' | 'presence' =\n isPresenceMode\n ? 'presence'\n : appearOn === 'hover'\n ? 'hover'\n : appearOn === 'focus-within'\n ? 'focus-within'\n : 'always';\n\n const { enter, exit } = TransitionExtensions.resolveDuration(transitionDuration);\n\n const inlineStyle: CSSProperties & Record<string, string | number> = {\n ...style,\n zIndex,\n // CSS vars consumed by tailwind variants — exit is the baseline\n // transition-duration; enter overrides it on hover / focus-within / open.\n ['--ui-overlay-enter' as string]: `${enter}ms`,\n ['--ui-overlay-exit' as string]: `${exit}ms`,\n };\n\n if (inset !== undefined) {\n inlineStyle['--ui-overlay-inset'] = CssExtensions.toCss(inset);\n }\n\n if (transitionEasing) {\n inlineStyle.transitionTimingFunction = transitionEasing;\n }\n\n if (isCustomPosition) {\n const p = position as AbsoluteInsetOverrides;\n if (p.top !== undefined) inlineStyle.top = CssExtensions.toCss(p.top);\n if (p.right !== undefined) inlineStyle.right = CssExtensions.toCss(p.right);\n if (p.bottom !== undefined) inlineStyle.bottom = CssExtensions.toCss(p.bottom);\n if (p.left !== undefined) inlineStyle.left = CssExtensions.toCss(p.left);\n }\n\n const classes = cn(\n overlayVariants({\n position: isCustomPosition ? 'custom' : (position as AbsolutePositionPreset),\n visibilityMode,\n transition: effectiveTransition,\n }),\n className,\n );\n\n const renderRoot = (extra?: Record<string, unknown>): ReactElement | null => {\n if (asChild) {\n if (!isValidElement(children)) return null;\n return (\n <Slot\n ref={forwardedRef as Ref<HTMLElement>}\n className={classes}\n style={inlineStyle}\n {...extra}\n >\n {children}\n </Slot>\n );\n }\n return (\n <div\n ref={forwardedRef as Ref<HTMLDivElement>}\n className={classes}\n style={inlineStyle}\n {...extra}\n >\n {children}\n </div>\n );\n };\n\n if (isPresenceMode) {\n const root = renderRoot();\n if (!root) return null;\n return <Presence isPresent={isOpen}>{root}</Presence>;\n }\n\n return renderRoot();\n },\n);\n\nOverlay.displayName = COMPONENT_NAME;\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementType,\n type Ref,\n} from 'react';\nimport { Slot } from '../../../foundation/primitives';\nimport { cn, surfaceVariants, type SurfaceVariants } from '../../../foundation/utils';\n\nconst COMPONENT_NAME = 'Surface';\n\n/** Represents the prop surface of the `Surface` atom. */\nexport interface SurfaceProps\n extends Omit<ComponentPropsWithoutRef<'div'>, 'children'>,\n SurfaceVariants {\n /** Names the HTML element to render; defaults to `div`. */\n as?: ElementType;\n /** Merges styles onto the immediate child instead of rendering a wrapper. */\n asChild?: boolean;\n children?: React.ReactNode;\n}\n\n/** Provides a styled visual surface composed from the `surfaceVariants` matrix. */\nexport const Surface = forwardRef<HTMLElement, SurfaceProps>(function Surface(\n {\n as: Component = 'div',\n asChild = false,\n variant,\n tone,\n radius,\n padding,\n elevation,\n className,\n children,\n ...rest\n },\n ref,\n) {\n const composed = cn(\n surfaceVariants({ variant, tone, radius, padding, elevation }),\n className,\n );\n\n if (asChild) {\n return (\n <Slot ref={ref as Ref<HTMLElement>} className={composed} {...rest}>\n {children}\n </Slot>\n );\n }\n\n return (\n <Component ref={ref as Ref<HTMLElement>} className={composed} {...rest}>\n {children}\n </Component>\n );\n});\n\nSurface.displayName = COMPONENT_NAME;\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Provides the vertical-rhythm (top/bottom padding) scale for the `Section` band. */\nexport const sectionVariants = tv({\n base: 'w-full',\n variants: {\n /* Vertical padding — the band's top/bottom breathing room. */\n py: {\n none: 'py-0',\n sm: 'py-6',\n md: 'py-10',\n lg: 'py-16',\n xl: 'py-24',\n },\n },\n defaultVariants: {\n py: 'md',\n },\n});\n\nexport type SectionVariants = VariantProps<typeof sectionVariants>;\n\n/** Represents the vertical-padding axis of the `Section` band (`none`–`xl`). */\nexport type SectionPaddingY = NonNullable<SectionVariants['py']>;\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn, surfaceVariants, type SurfaceTone } from '../../../foundation/utils';\nimport { Container, type ContainerProps } from '../container';\nimport { sectionVariants, type SectionPaddingY } from './Section.variants';\n\nexport interface SectionProps extends ComponentPropsWithoutRef<'section'> {\n /**\n * Tinted background tone for the band. Applies the shadow-less `subtle`\n * surface treatment (low-alpha tinted fill + `border-border`). Omit for a\n * transparent band (no fill, no border).\n */\n tone?: SurfaceTone;\n /** Max-width of the inner centered `Container`. Passthrough to `Container.size`. Default `lg`. */\n containerSize?: ContainerProps['size'];\n /** Vertical padding (the band's top/bottom rhythm). Default `md`. */\n py?: SectionPaddingY;\n /** Renders the band as a full-bleed `<section>` with no inner `Container` (edge-to-edge content). */\n bleed?: boolean;\n children?: ReactNode;\n}\n\n/**\n * Full-bleed `<section>` band with an inner centered `Container`. The repetitive\n * marketing \"section band\" pattern: optional tinted (shadow-less) background,\n * passthrough container width, and vertical padding. Pass `bleed` to drop the\n * inner Container for edge-to-edge content.\n */\nexport const Section = forwardRef<HTMLElement, SectionProps>(function Section(\n { tone, containerSize, py, bleed = false, className, children, ...rest },\n ref,\n) {\n return (\n <section\n ref={ref}\n className={cn(\n sectionVariants({ py }),\n tone && surfaceVariants({ variant: 'subtle', tone, radius: 'none' }),\n className,\n )}\n {...rest}\n >\n {bleed ? children : <Container size={containerSize}>{children}</Container>}\n </section>\n );\n});\n\nSection.displayName = 'Section';\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/** Provides the header-band chrome (height, sticky positioning) for `Navbar`. */\nexport const navbarVariants = tv({\n base: 'w-full',\n variants: {\n /* Sticks the band to the top of the scroll container when true. */\n sticky: {\n true: 'sticky top-0 z-sticky',\n false: '',\n },\n /* Band height — the bar's vertical size. */\n height: {\n sm: 'h-12',\n md: 'h-14',\n lg: 'h-16',\n },\n },\n defaultVariants: {\n sticky: false,\n height: 'md',\n },\n});\n\nexport type NavbarVariants = VariantProps<typeof navbarVariants>;\n\n/** Represents the band-height axis of the `Navbar` (`sm` · `md` · `lg`). */\nexport type NavbarHeight = NonNullable<NavbarVariants['height']>;\n","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn, surfaceVariants, type SurfaceTone } from '../../../foundation/utils';\nimport { Container, type ContainerProps } from '../container';\nimport {\n navbarVariants,\n type NavbarHeight,\n} from './Navbar.variants';\n\nexport interface NavbarProps\n extends Omit<ComponentPropsWithoutRef<'header'>, 'children'> {\n /** Leading slot — laid out at the start of the row (brand / logo / nav links). */\n start?: ReactNode;\n /** Centre slot — laid out in the middle of the row (search / primary nav). */\n center?: ReactNode;\n /** Trailing slot — laid out at the end of the row (actions / avatar / CTA). */\n end?: ReactNode;\n /**\n * Raw row content — replaces the `start` / `center` / `end` slot layout when\n * provided. Use for fully custom bars.\n */\n children?: ReactNode;\n /** Max-width of the inner centered `Container`. Passthrough to `Container.size`. Default `lg`. */\n containerSize?: ContainerProps['size'];\n /** Band height. Default `md`. */\n height?: NavbarHeight;\n /** Sticks the bar to the top of the scroll container. Default `false` (non-sticky). */\n sticky?: boolean;\n /**\n * Tinted background tone for the band — applies the shadow-less `subtle`\n * surface treatment. Omit for a transparent bar (relies on `bordered` / page bg).\n */\n tone?: SurfaceTone;\n /** Renders a bottom border under the bar. Default `true`. */\n bordered?: boolean;\n}\n\n/**\n * Lightweight header band (`<header>`) with `start` / `center` / `end` slots\n * laid out in a row inside a centered `Container`. The everyday \"navbar +\n * centered content\" need that `AppShell` (a 5-slot dashboard grid w/ sidebar)\n * overshoots. Non-sticky by default; pass `sticky` to pin it.\n */\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(function Navbar(\n {\n start,\n center,\n end,\n children,\n containerSize,\n height,\n sticky = false,\n tone,\n bordered = true,\n className,\n ...rest\n },\n ref,\n) {\n return (\n <header\n ref={ref}\n className={cn(\n navbarVariants({ sticky, height }),\n bordered && 'border-b border-border',\n tone ? surfaceVariants({ variant: 'subtle', tone, radius: 'none' }) : 'bg-card',\n className,\n )}\n {...rest}\n >\n <Container size={containerSize} className=\"flex h-full items-center gap-3\">\n {children ?? (\n <>\n {start != null && (\n <div className=\"flex min-w-0 items-center gap-3\">{start}</div>\n )}\n {center != null && (\n <div className=\"flex min-w-0 flex-1 items-center justify-center gap-3\">\n {center}\n </div>\n )}\n {/* Push `end` to the trailing edge when there's no centre slot to absorb the slack. */}\n {end != null && (\n <div\n className={cn(\n 'flex min-w-0 items-center gap-3',\n center == null && 'ml-auto',\n )}\n >\n {end}\n </div>\n )}\n </>\n )}\n </Container>\n </header>\n );\n});\n\nNavbar.displayName = 'Navbar';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/presentation/actions/button/Button.variants.ts","../src/presentation/actions/button/Button.tsx","../src/presentation/actions/link/Link.variants.ts","../src/presentation/actions/link/Link.tsx","../src/presentation/actions/buttonGroup/ButtonGroup.tsx","../src/presentation/actions/toggleButton/ToggleButton.variants.ts","../src/presentation/actions/toggleButton/ToggleButton.tsx","../src/presentation/actions/toggleButtonGroup/ToggleButtonGroup.tsx","../src/presentation/actions/segmentedControl/SegmentedControl.tsx","../src/presentation/actions/fab/FAB.variants.ts","../src/presentation/actions/fab/FAB.tsx","../src/presentation/actions/copyButton/CopyButton.tsx","../src/presentation/actions/disclosureButton/DisclosureButton.tsx","../src/presentation/actions/toolbar/Toolbar.tsx","../src/presentation/actions/speedDial/SpeedDial.tsx","../src/presentation/actions/backToTopButton/BackToTopButton.tsx"],"names":["forwardRef","jsx","COMPONENT_NAME","useRef","useEffect","jsxs","ToolbarButton","ToolbarLink","Toolbar","createContext","useContext","SpeedDialList","Children","isValidElement","SpeedDialTrigger","SpeedDialAction","BackToTopButton"],"mappings":"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","file":"chunk-Q3HSAOWW.js","sourcesContent":["import { tv, Tones, type VariantProps } from '../../../foundation/utils';\n\n/** Button visual surface — see Button.standard.md + Button.spec.md. */\nexport const buttonVariants = tv({\n base: [\n // layout\n 'group inline-flex items-center justify-center gap-2',\n // typography\n 'font-medium align-middle',\n // borders (forced-colors fallback)\n 'border border-transparent',\n 'forced-colors:border-[ButtonBorder]',\n // transitions (color only)\n 'transition-colors duration-150 ease-out',\n 'motion-reduce:transition-none',\n // focus\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n // disabled (native attr handles click-blocking; pointer-events-none would\n // suppress the cursor visual, so we don't add it here)\n 'disabled:opacity-50 disabled:cursor-not-allowed',\n // skeleton state — wins over everything\n 'data-[state=skeleton]:!bg-muted data-[state=skeleton]:!text-transparent data-[state=skeleton]:!border-transparent data-[state=skeleton]:!cursor-default data-[state=skeleton]:!pointer-events-none data-[state=skeleton]:animate-pulse',\n 'data-[state=skeleton]:[&>*]:!invisible',\n ],\n variants: {\n variant: {\n solid: '',\n soft: '',\n surface: '',\n outline: 'bg-transparent',\n ghost: 'bg-transparent',\n // Borderless + transparent at rest; on hover / focus-visible a bordered chip is\n // revealed (border + bg + foreground text). Per-tone reveal target set via\n // compoundVariants below. Pairs with `hoverSlot` for the icon-swap affordance.\n reveal: 'bg-transparent border-transparent',\n link: 'bg-transparent !h-auto !p-0 !rounded-none underline-offset-4 hover:underline focus-visible:ring-offset-0',\n // Base = neutral/default tone: dark image-overlay wash + blur. Non-neutral tones resolve\n // through the shared `Tones.glass` palette via compoundVariants below (so tone + color\n // overrides apply). `backdrop-blur-md` stays here for every tone.\n glass: 'backdrop-blur-md',\n 'glass-surface': 'backdrop-blur-md border-white/10',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n size: {\n // min-h/min-w floor keeps the hit-target ≥ 24×24 (WCAG 2.2 SC 2.5.8) even when\n // --ui-density-scale < 1 would otherwise shrink it below the floor. Applies to\n // square/circle xs too (the min-h sets the box height; min-w the width).\n xs: 'h-[calc(1.5rem*var(--ui-density-scale,1))] min-h-6 min-w-6 px-[calc(0.5rem*var(--ui-density-scale,1))] text-xs rounded-sm gap-1',\n sm: 'h-[calc(2rem*var(--ui-density-scale,1))] px-[calc(0.75rem*var(--ui-density-scale,1))] text-sm rounded-md gap-1.5',\n md: 'h-[calc(2.5rem*var(--ui-density-scale,1))] px-[calc(1rem*var(--ui-density-scale,1))] text-sm rounded-md gap-2',\n lg: 'h-[calc(3rem*var(--ui-density-scale,1))] px-[calc(1.5rem*var(--ui-density-scale,1))] text-base rounded-lg gap-2',\n xl: 'h-[calc(3.5rem*var(--ui-density-scale,1))] px-[calc(2rem*var(--ui-density-scale,1))] text-base rounded-lg gap-2.5',\n },\n shape: {\n default: '',\n square: 'aspect-square !px-0',\n circle: 'aspect-square !px-0 !rounded-full',\n },\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n wrap: {\n true: 'whitespace-normal text-left',\n false: 'whitespace-nowrap text-ellipsis overflow-hidden',\n },\n },\n compoundVariants: [\n // === SOLID × tone ===\n { variant: 'solid', tone: 'primary', class: 'bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/95' },\n { variant: 'solid', tone: 'neutral', class: 'bg-muted text-foreground hover:bg-muted/80 active:bg-muted/85' },\n { variant: 'solid', tone: 'danger', class: 'bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/95' },\n { variant: 'solid', tone: 'success', class: 'bg-success text-success-foreground hover:bg-success/90 active:bg-success/95' },\n { variant: 'solid', tone: 'warning', class: 'bg-warning text-warning-foreground hover:bg-warning/90 active:bg-warning/95' },\n\n // === SOFT × tone ===\n { variant: 'soft', tone: 'primary', class: 'bg-primary-soft text-primary-soft-foreground hover:bg-primary-soft/80 active:bg-primary-soft/85' },\n { variant: 'soft', tone: 'neutral', class: 'bg-muted/60 text-foreground hover:bg-muted/80 active:bg-muted/85' },\n { variant: 'soft', tone: 'danger', class: 'bg-destructive-soft text-destructive-soft-foreground hover:bg-destructive-soft/80 active:bg-destructive-soft/85' },\n { variant: 'soft', tone: 'success', class: 'bg-success-soft text-success-soft-foreground hover:bg-success-soft/80 active:bg-success-soft/85' },\n { variant: 'soft', tone: 'warning', class: 'bg-warning-soft text-warning-soft-foreground hover:bg-warning-soft/80 active:bg-warning-soft/85' },\n\n // === SURFACE × tone (subtle tinted bg + visible tone-colored border) ===\n { variant: 'surface', tone: 'primary', class: 'bg-primary/5 border-primary/40 text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'surface', tone: 'neutral', class: 'bg-muted/30 border-border-strong text-foreground hover:bg-muted/50 active:bg-muted/70' },\n { variant: 'surface', tone: 'danger', class: 'bg-destructive/5 border-destructive/40 text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'surface', tone: 'success', class: 'bg-success/5 border-success/40 text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'surface', tone: 'warning', class: 'bg-warning/10 border-warning/40 text-warning hover:bg-warning/15 active:bg-warning/20' },\n\n // === OUTLINE × tone ===\n { variant: 'outline', tone: 'primary', class: 'border-primary/50 text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'outline', tone: 'neutral', class: 'border-border-strong text-foreground hover:bg-muted/50 active:bg-muted/70' },\n { variant: 'outline', tone: 'danger', class: 'border-destructive/50 text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'outline', tone: 'success', class: 'border-success/50 text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'outline', tone: 'warning', class: 'border-warning/60 text-warning hover:bg-warning/10 active:bg-warning/15' },\n\n // === GHOST × tone ===\n { variant: 'ghost', tone: 'primary', class: 'text-primary hover:bg-primary/10 active:bg-primary/15' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground hover:bg-foreground/10 active:bg-foreground/15' },\n { variant: 'ghost', tone: 'danger', class: 'text-destructive hover:bg-destructive/10 active:bg-destructive/15' },\n { variant: 'ghost', tone: 'success', class: 'text-success hover:bg-success/10 active:bg-success/15' },\n { variant: 'ghost', tone: 'warning', class: 'text-warning hover:bg-warning/10 active:bg-warning/15' },\n\n // === REVEAL × tone (idle: muted transparent · hover/focus-visible: bordered chip revealed) ===\n // Idle text sits at reduced emphasis (muted-foreground / tone-tinted); hover & focus-visible\n // resolve the border + a surface background + full-emphasis foreground so a bordered chip\n // \"appears\". neutral is the common case (borderless icon affordance).\n { variant: 'reveal', tone: 'primary', class: 'text-primary/70 hover:border-border hover:bg-background hover:text-primary focus-visible:border-border focus-visible:bg-background focus-visible:text-primary active:bg-muted/70' },\n { variant: 'reveal', tone: 'neutral', class: 'text-muted-foreground hover:border-border hover:bg-background hover:text-foreground focus-visible:border-border focus-visible:bg-background focus-visible:text-foreground active:bg-muted/70' },\n { variant: 'reveal', tone: 'danger', class: 'text-destructive/70 hover:border-border hover:bg-background hover:text-destructive focus-visible:border-border focus-visible:bg-background focus-visible:text-destructive active:bg-muted/70' },\n { variant: 'reveal', tone: 'success', class: 'text-success/70 hover:border-border hover:bg-background hover:text-success focus-visible:border-border focus-visible:bg-background focus-visible:text-success active:bg-muted/70' },\n { variant: 'reveal', tone: 'warning', class: 'text-warning/70 hover:border-border hover:bg-background hover:text-warning focus-visible:border-border focus-visible:bg-background focus-visible:text-warning active:bg-muted/70' },\n\n // === LINK × tone (h/padding/radius cleared by variant) ===\n { variant: 'link', tone: 'primary', class: 'text-primary' },\n { variant: 'link', tone: 'neutral', class: 'text-foreground' },\n { variant: 'link', tone: 'danger', class: 'text-destructive' },\n { variant: 'link', tone: 'success', class: 'text-success' },\n { variant: 'link', tone: 'warning', class: 'text-warning' },\n\n // === GLASS / GLASS-SURFACE × tone ===\n // neutral = the image-overlay default: fixed dark wash + light text (reads over any imagery).\n { variant: ['glass', 'glass-surface'], tone: 'neutral', class: 'bg-black/45 text-white/70 hover:bg-black/65 hover:text-white active:bg-black/75' },\n // Every other tone resolves through the shared `Tones.glass` palette (`bg-{tone}/30 text-{tone}-foreground`)\n // so `tone=\"success\"` etc. AND per-instance `color` overrides actually apply, plus a tone-matched hover/active wash.\n { variant: ['glass', 'glass-surface'], tone: 'primary', class: `${Tones.glass.primary} hover:bg-primary/45 active:bg-primary/55` },\n { variant: ['glass', 'glass-surface'], tone: 'danger', class: `${Tones.glass.danger} hover:bg-destructive/45 active:bg-destructive/55` },\n { variant: ['glass', 'glass-surface'], tone: 'success', class: `${Tones.glass.success} hover:bg-success/45 active:bg-success/55` },\n { variant: ['glass', 'glass-surface'], tone: 'warning', class: `${Tones.glass.warning} hover:bg-warning/45 active:bg-warning/55` },\n // glass-surface non-neutral tones swap the white hairline for a tone-accent border (50% alpha).\n { variant: 'glass-surface', tone: 'primary', class: 'border-primary/50' },\n { variant: 'glass-surface', tone: 'danger', class: 'border-destructive/50' },\n { variant: 'glass-surface', tone: 'success', class: 'border-success/50' },\n { variant: 'glass-surface', tone: 'warning', class: 'border-warning/50' },\n ],\n defaultVariants: {\n variant: 'solid',\n tone: 'primary',\n size: 'md',\n shape: 'default',\n fullWidth: false,\n wrap: false,\n },\n});\n\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","import {\n forwardRef,\n useEffect,\n useRef,\n type ButtonHTMLAttributes,\n type CSSProperties,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEvent,\n type MouseEventHandler,\n type PointerEvent,\n type PointerEventHandler,\n type ReactNode,\n} from 'react';\nimport {\n cn,\n ColorExtensions,\n composeEventHandlers,\n ButtonType,\n CssExtensions,\n HtmlElement,\n IS_DEV,\n Key,\n OptionalExtensions,\n PressExtensions,\n type BoxSizeOverrides,\n type ColorProp,\n type ColorTone,\n type PaddingProp,\n type PressEvent,\n type RadiusProp,\n type SizePreset,\n type SizeUnion,\n type SizeValue,\n} from '../../../foundation/utils';\nimport { Slot } from '../../../foundation/primitives';\nimport { useFormControl } from '../../../foundation/primitives/formControlContext/FormControlContext';\nimport { Spinner } from '../../../foundation/icons';\nimport { useDebounceHandler } from '../../../foundation/hooks';\nimport { buttonVariants, type ButtonVariants } from './Button.variants';\n\nconst COMPONENT_NAME = 'Button';\n\n/* Named size presets — used for variant lookup. Any other string/number/object flows to box-overrides. Subset of the canonical `SizePreset` vocabulary. */\ntype ButtonSizePreset = Extract<SizePreset, 'xs' | 'sm' | 'md' | 'lg' | 'xl'>;\nconst BUTTON_SIZE_PRESETS: ReadonlySet<string> = new Set<ButtonSizePreset>(['xs', 'sm', 'md', 'lg', 'xl']);\n\n/* `size`: preset (variant class) | number/string (square inline dims) | `{width,height,minWidth,minHeight,boxSize}`.\n Raw/object forms set inline dims only — pair with `padding` if text-bearing. */\nexport type ButtonSize = SizeUnion<ButtonSizePreset>;\n\n/* Observable state surfaced via the `data-state` DOM attribute. */\nconst ButtonDataState = {\n Loading: 'loading',\n Skeleton: 'skeleton',\n Disabled: 'disabled',\n} as const;\ntype ButtonDataState = (typeof ButtonDataState)[keyof typeof ButtonDataState];\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'disabled' | 'color'>,\n Omit<ButtonVariants, 'size'> {\n /* Preset name OR raw value OR explicit dim object — see `ButtonSize` for details. */\n size?: ButtonSize;\n\n /* Per-instance color override for the active `tone`. String → all slots derived; object → per-slot (bg/text/soft/softText/ring). Sets local CSS vars that `bg-{tone}` etc. pick up. */\n color?: ColorProp;\n\n /* Slot before children (logical start). */\n leadingSlot?: ReactNode;\n\n /* Slot after children (logical end). */\n trailingSlot?: ReactNode;\n\n /* Content shown in place of `children` on hover / focus-visible (CSS-only swap — no JS hover state).\n Idle → `children` visible; hover/focus-visible → `hoverSlot` visible. Pairs with `variant=\"reveal\"`\n for a reveal-on-hover icon swap. When undefined, `children` renders normally. */\n hoverSlot?: ReactNode;\n\n /* Custom indicator shown in place of the built-in `<Spinner/>` when `isLoading` is true. */\n loadingSlot?: ReactNode;\n\n /* Action-loading: replaces leading w/ spinner, sets aria-busy, blocks clicks. */\n isLoading?: boolean;\n\n /* Replaces children when loading. No default — consumer supplies (i18n). */\n loadingText?: string;\n\n /* Content-loading: hides content (preserves dimensions) + shimmer. Mutually exclusive with `isLoading`. */\n isSkeleton?: boolean;\n\n /* Removes from focus order, blocks clicks. Forwards to native `disabled`. Inherited from an enclosing `Field` when omitted. */\n isDisabled?: boolean;\n\n /* Stretches to fill container width. */\n isFullWidth?: boolean;\n\n /* Allows multi-line label wrap; default truncates to single line. */\n isMultiline?: boolean;\n\n /* Render as the single child element via Slot. */\n asChild?: boolean;\n\n /* Independent padding override (preset token or `{x, y}` object). */\n padding?: PaddingProp;\n\n /* Independent radius override (preset token or raw value). */\n radius?: RadiusProp;\n\n /* Explicit width override. Number = px; string = any CSS unit. */\n width?: SizeValue;\n\n /* Explicit height override. Number = px; string = any CSS unit. */\n height?: SizeValue;\n\n /* Reserve a min width so the button doesn't reflow when its label morphs. */\n minWidth?: SizeValue;\n\n /* Reserve a min height — symmetric with `minWidth`. */\n minHeight?: SizeValue;\n\n /* Square shorthand — applied as fallback for both `width` and `height`. Explicit `width`/`height` win when both are set. Pairs with `shape=\"square\"` / `shape=\"circle\"` for icon buttons. */\n boxSize?: SizeValue;\n\n /* Default `ButtonType.Button` — NOT browser-default `'submit'`. */\n type?: ButtonType;\n\n /* Fires on pointer-down OR Space/Enter keydown (first event in a gesture). */\n onPressStart?: (event: PressEvent<HTMLButtonElement>) => void;\n\n /* Fires on pointer-up/cancel OR Space/Enter keyup. */\n onPressEnd?: (event: PressEvent<HTMLButtonElement>) => void;\n\n /* Fires when the pointer is held for `longPressDelay` ms. Suppresses the next click. */\n onLongPress?: (event: PointerEvent<HTMLButtonElement>) => void;\n\n /* Long-press duration (ms). Default 500. Out-of-range values trigger a dev warning. */\n longPressDelay?: number;\n\n /* Throttle clicks within window — first wins; subsequent swallowed via `preventDefault()`. */\n debounceMs?: number;\n}\n\ninterface UseButtonInteractivityOptions {\n isInactive: boolean;\n isLoading: boolean;\n isSkeleton: boolean;\n longPressDelay: number;\n debounceMs?: number;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n onPressStart?: (event: PressEvent<HTMLButtonElement>) => void;\n onPressEnd?: (event: PressEvent<HTMLButtonElement>) => void;\n onLongPress?: (event: PointerEvent<HTMLButtonElement>) => void;\n onPointerDown?: PointerEventHandler<HTMLButtonElement>;\n onPointerUp?: PointerEventHandler<HTMLButtonElement>;\n onPointerCancel?: PointerEventHandler<HTMLButtonElement>;\n onPointerLeave?: PointerEventHandler<HTMLButtonElement>;\n onKeyDown?: KeyboardEventHandler<HTMLButtonElement>;\n onKeyUp?: KeyboardEventHandler<HTMLButtonElement>;\n}\n\n/* Press / long-press / debounce wiring. Returns the 6 DOM event handlers for spread onto the element. */\nfunction useButtonInteractivity(opts: UseButtonInteractivityOptions) {\n const isPressingRef = useRef(false);\n const longPressTimerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const longPressFiredRef = useRef(false);\n\n useEffect(\n () => () => {\n if (longPressTimerRef.current !== undefined) {\n clearTimeout(longPressTimerRef.current);\n }\n },\n [],\n );\n\n const cancelLongPress = () => {\n if (longPressTimerRef.current !== undefined) {\n clearTimeout(longPressTimerRef.current);\n longPressTimerRef.current = undefined;\n }\n };\n\n const endPress = (e: PressEvent<HTMLButtonElement>) => {\n if (isPressingRef.current) {\n isPressingRef.current = false;\n opts.onPressEnd?.(e);\n }\n };\n\n const handlePointerDown = (e: PointerEvent<HTMLButtonElement>) => {\n if (opts.isInactive) return;\n // Cancel any pending timer, then arm only on the first pointer of a gesture — a second\n // pointer-down must not stack a second long-press timer.\n cancelLongPress();\n if (!isPressingRef.current) {\n isPressingRef.current = true;\n longPressFiredRef.current = false;\n opts.onPressStart?.(e);\n if (opts.onLongPress) {\n longPressTimerRef.current = setTimeout(() => {\n longPressFiredRef.current = true;\n opts.onLongPress?.(e);\n longPressTimerRef.current = undefined;\n }, opts.longPressDelay);\n }\n }\n };\n\n const handlePointerUp = (e: PointerEvent<HTMLButtonElement>) => {\n cancelLongPress();\n endPress(e);\n };\n\n const handlePointerCancel = (e: PointerEvent<HTMLButtonElement>) => {\n cancelLongPress();\n endPress(e);\n };\n\n const handlePointerLeave = () => {\n // Pointer leaving cancels a pending long-press but does NOT end the press itself —\n // pointer-up/cancel handlers do that. Matches React Aria.\n cancelLongPress();\n };\n\n const isActivationKey = (e: KeyboardEvent<HTMLButtonElement>) =>\n e.key === Key.Space || e.key === Key.Enter;\n\n const handleKeyDown = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (opts.isInactive) return;\n if (isActivationKey(e) && !e.repeat && !isPressingRef.current) {\n isPressingRef.current = true;\n longPressFiredRef.current = false;\n opts.onPressStart?.(e);\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent<HTMLButtonElement>) => {\n if (isActivationKey(e) && isPressingRef.current) {\n isPressingRef.current = false;\n opts.onPressEnd?.(e);\n }\n };\n\n // Long-press suppression happens BEFORE this — a suppressed click does NOT advance the throttle window.\n const debouncedOnClick = useDebounceHandler(opts.onClick, opts.debounceMs);\n\n const handleClick = (e: MouseEvent<HTMLButtonElement>) => {\n if (opts.isLoading || opts.isSkeleton) {\n // Block native activation too — e.g. `type=\"submit\"` must not submit while loading.\n e.preventDefault();\n return;\n }\n if (longPressFiredRef.current) {\n longPressFiredRef.current = false;\n e.preventDefault();\n return;\n }\n debouncedOnClick(e);\n };\n\n return {\n onClick: handleClick,\n onPointerDown: composeEventHandlers(opts.onPointerDown, handlePointerDown),\n onPointerUp: composeEventHandlers(opts.onPointerUp, handlePointerUp),\n onPointerCancel: composeEventHandlers(opts.onPointerCancel, handlePointerCancel),\n onPointerLeave: composeEventHandlers(opts.onPointerLeave, handlePointerLeave),\n onKeyDown: composeEventHandlers(opts.onKeyDown, handleKeyDown),\n onKeyUp: composeEventHandlers(opts.onKeyUp, handleKeyUp),\n };\n}\n\n/* Renders an action button — for text and/or icon content. */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n style,\n variant,\n tone,\n size,\n shape,\n isFullWidth,\n isMultiline,\n padding,\n radius,\n width,\n height,\n minWidth,\n minHeight,\n boxSize,\n leadingSlot,\n trailingSlot,\n hoverSlot,\n loadingSlot,\n isLoading,\n loadingText,\n isSkeleton,\n isDisabled,\n asChild,\n color,\n type = ButtonType.Button,\n children,\n onClick,\n onPressStart,\n onPressEnd,\n onLongPress,\n longPressDelay = PressExtensions.longPressDelay.default,\n debounceMs,\n onPointerDown,\n onPointerUp,\n onPointerCancel,\n onPointerLeave,\n onKeyDown,\n onKeyUp,\n ...rest\n },\n ref,\n ) => {\n if (IS_DEV && isLoading && isSkeleton) {\n console.warn(\n `[${COMPONENT_NAME}] \\`isLoading\\` and \\`isSkeleton\\` are mutually exclusive — \\`isSkeleton\\` takes precedence.`,\n );\n }\n\n let safeLongPressDelay = longPressDelay;\n if (\n longPressDelay < PressExtensions.longPressDelay.min ||\n longPressDelay > PressExtensions.longPressDelay.max\n ) {\n if (IS_DEV) {\n console.warn(\n `[${COMPONENT_NAME}] longPressDelay=${longPressDelay}ms is outside reasonable range (${PressExtensions.longPressDelay.min}–${PressExtensions.longPressDelay.max}ms). Falling back to ${PressExtensions.longPressDelay.default}ms.`,\n );\n }\n safeLongPressDelay = PressExtensions.longPressDelay.default;\n }\n\n if (\n IS_DEV &&\n (children === undefined || children === null || children === false) &&\n rest['aria-label'] === undefined &&\n rest['aria-labelledby'] === undefined\n ) {\n console.warn(\n `[${COMPONENT_NAME}] icon-only button (no text children) is missing an accessible name — pass \\`aria-label\\` or \\`aria-labelledby\\` (Button.standard.md rule 12).`,\n );\n }\n\n /* Inherit disabled-state from an enclosing `Field` when the local prop is omitted; standalone when no context. */\n const formControl = useFormControl();\n const resolvedDisabled = isDisabled ?? formControl?.isDisabled ?? false;\n\n const skeletonActive = !!isSkeleton;\n const loadingActive = !skeletonActive && !!isLoading;\n const isInactive = loadingActive || skeletonActive || resolvedDisabled;\n\n const dataState: ButtonDataState | undefined = skeletonActive\n ? ButtonDataState.Skeleton\n : loadingActive\n ? ButtonDataState.Loading\n : resolvedDisabled\n ? ButtonDataState.Disabled\n : undefined;\n\n const Comp = asChild ? Slot : HtmlElement.Button;\n\n /* Parse the union-typed `size` prop into preset (for variant lookup) + box overrides (for inline dims). */\n const { preset: sizePreset, box: sizeBox } = CssExtensions.parseSizeUnion<ButtonSizePreset>(\n size,\n BUTTON_SIZE_PRESETS,\n );\n\n const overrideStyle: CSSProperties | undefined = (() => {\n const padStyle = CssExtensions.resolvePadding(padding);\n const radStyle = CssExtensions.resolveRadius(radius);\n /* Box overrides — `size` (object form or raw value) is the base; flat width/height/minWidth/minHeight/boxSize props win when both are set. */\n const composedBox: BoxSizeOverrides = {\n ...(sizeBox ?? {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n ...(minWidth !== undefined ? { minWidth } : {}),\n ...(minHeight !== undefined ? { minHeight } : {}),\n ...(boxSize !== undefined ? { boxSize } : {}),\n };\n const boxStyle = CssExtensions.resolveBoxSize(composedBox);\n /* Per-instance color override → sets CSS vars on element, scoped locally. */\n const colorStyle = ColorExtensions.toneColorOverride(color, tone as ColorTone | undefined);\n if (!padStyle && !radStyle && !boxStyle && !colorStyle && !style) return undefined;\n return { ...colorStyle, ...padStyle, ...radStyle, ...boxStyle, ...style };\n })();\n\n const eventHandlers = useButtonInteractivity({\n isInactive,\n isLoading: loadingActive,\n isSkeleton: skeletonActive,\n longPressDelay: safeLongPressDelay,\n debounceMs,\n onClick,\n onPressStart,\n onPressEnd,\n onLongPress,\n onPointerDown,\n onPointerUp,\n onPointerCancel,\n onPointerLeave,\n onKeyDown,\n onKeyUp,\n });\n\n const content = loadingActive ? (\n <>\n {loadingSlot ?? <Spinner />}\n {loadingText !== undefined ? (\n <span>{loadingText}</span>\n ) : (\n // No loadingText: keep children in sr-only so the accessible name survives (Spinner is aria-hidden).\n <span className=\"sr-only\">{children}</span>\n )}\n </>\n ) : hoverSlot !== undefined ? (\n <>\n {leadingSlot}\n {/* CSS-only hover/focus-visible swap: `children` occupies the box and reserves its size;\n `hoverSlot` overlays it centered. Toggle via `group-hover`/`group-focus-visible` on the\n root `group` — no JS hover state. `aria-hidden` on the hidden layer so AT reads one label. */}\n <span className=\"relative inline-flex items-center justify-center\">\n <span className=\"inline-flex items-center justify-center group-hover:invisible group-focus-visible:invisible\">\n {children}\n </span>\n <span\n aria-hidden\n className=\"invisible absolute inset-0 inline-flex items-center justify-center group-hover:visible group-focus-visible:visible\"\n >\n {hoverSlot}\n </span>\n </span>\n {trailingSlot}\n </>\n ) : (\n <>\n {leadingSlot}\n {children}\n {trailingSlot}\n </>\n );\n\n /* asChild → Slot merges onto the user's element; leadingSlot/trailingSlot/isLoading aren't rendered (consumer owns children). */\n const renderedContent = asChild ? children : content;\n\n return (\n <Comp\n ref={ref}\n type={asChild ? undefined : type}\n className={cn(\n buttonVariants({\n variant,\n tone,\n size: sizePreset,\n shape,\n fullWidth: isFullWidth,\n wrap: isMultiline,\n }),\n className,\n )}\n style={overrideStyle}\n disabled={OptionalExtensions.from(resolvedDisabled, true)}\n aria-busy={OptionalExtensions.from(loadingActive || skeletonActive, true)}\n aria-disabled={OptionalExtensions.from(loadingActive || skeletonActive, true)}\n tabIndex={OptionalExtensions.from(skeletonActive, -1)}\n data-state={dataState}\n {...eventHandlers}\n {...rest}\n >\n {renderedContent}\n </Comp>\n );\n },\n);\n\nButton.displayName = COMPONENT_NAME;\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\nexport const linkVariants = tv({\n base: 'inline-flex items-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded-sm',\n variants: {\n variant: {\n default: 'text-primary hover:text-primary/85 hover:underline',\n subtle: 'text-foreground hover:underline',\n muted: 'text-muted-foreground hover:text-foreground hover:underline',\n inherit: 'text-current underline-offset-2 hover:underline',\n },\n size: {\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n});\n\nexport type LinkVariants = VariantProps<typeof linkVariants>;\n","import { forwardRef, type AnchorHTMLAttributes } from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { Slot } from '../../../foundation/primitives/slot/Slot';\nimport { linkVariants, type LinkVariants } from './Link.variants';\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement>, LinkVariants {\n /** When true, render the child element as the link instead of an `<a>`.\n * Use for router `<Link>` components from Next.js / React Router. */\n asChild?: boolean;\n}\n\n/** Anchor with consistent focus/hover styling — `asChild` swaps in router links. */\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n ref={ref}\n className={cn(linkVariants({ variant, size }), className)}\n {...(props as AnchorHTMLAttributes<HTMLAnchorElement>)}\n />\n );\n },\n);\nLink.displayName = 'Link';\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../../foundation/utils';\n\nexport interface ButtonGroupProps extends ComponentPropsWithoutRef<'div'> {\n /** Visual orientation. Default `horizontal`. */\n orientation?: 'horizontal' | 'vertical';\n /** Group children with collapsed inner radii (connected look). Default `true`. */\n isAttached?: boolean;\n}\n\n/** Visually groups action-children — collapses inner radii when `isAttached`. */\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n ({ orientation = 'horizontal', isAttached = true, className, ...props }, ref) => (\n <div\n ref={ref}\n role=\"group\"\n data-orientation={orientation}\n className={cn(\n 'inline-flex',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n isAttached\n ? orientation === 'horizontal'\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n className,\n )}\n {...props}\n />\n ),\n);\nButtonGroup.displayName = 'ButtonGroup';\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\n/* Variant × tone matrix for ToggleButton's press-state appearance. Applied on top of Button (variant='ghost' tone='neutral' baseline). Press state is keyed off `data-pressed=\"true\"` — distinct from Button's `data-state` (loading/skeleton/disabled). */\nexport const toggleButtonVariants = tv({\n base: '',\n variants: {\n variant: {\n ghost: '',\n soft: '',\n outline: 'border',\n solid: 'border',\n glass: 'border border-transparent backdrop-blur-md',\n 'glass-surface': 'border backdrop-blur-md',\n },\n tone: {\n primary: '',\n neutral: '',\n danger: '',\n success: '',\n warning: '',\n },\n },\n compoundVariants: [\n // === GHOST × tone — text color only, transparent bg ===\n { variant: 'ghost', tone: 'primary', class: 'text-foreground/50 data-[pressed=true]:text-primary' },\n { variant: 'ghost', tone: 'neutral', class: 'text-foreground/50 data-[pressed=true]:text-foreground' },\n { variant: 'ghost', tone: 'danger', class: 'text-foreground/50 data-[pressed=true]:text-destructive' },\n { variant: 'ghost', tone: 'success', class: 'text-foreground/50 data-[pressed=true]:text-success' },\n { variant: 'ghost', tone: 'warning', class: 'text-foreground/50 data-[pressed=true]:text-warning' },\n\n // === SOFT × tone — pressed gets tone-soft bg ===\n { variant: 'soft', tone: 'primary', class: 'text-foreground/70 data-[pressed=true]:bg-primary-soft data-[pressed=true]:text-primary-soft-foreground' },\n { variant: 'soft', tone: 'neutral', class: 'text-foreground/70 data-[pressed=true]:bg-muted data-[pressed=true]:text-foreground' },\n { variant: 'soft', tone: 'danger', class: 'text-foreground/70 data-[pressed=true]:bg-destructive-soft data-[pressed=true]:text-destructive-soft-foreground' },\n { variant: 'soft', tone: 'success', class: 'text-foreground/70 data-[pressed=true]:bg-success-soft data-[pressed=true]:text-success-soft-foreground' },\n { variant: 'soft', tone: 'warning', class: 'text-foreground/70 data-[pressed=true]:bg-warning-soft data-[pressed=true]:text-warning-soft-foreground' },\n\n // === OUTLINE × tone — pressed swaps to tone border + tone text ===\n { variant: 'outline', tone: 'primary', class: 'border-input text-foreground/70 data-[pressed=true]:border-primary data-[pressed=true]:text-primary' },\n { variant: 'outline', tone: 'neutral', class: 'border-input text-foreground/70 data-[pressed=true]:border-foreground data-[pressed=true]:text-foreground' },\n { variant: 'outline', tone: 'danger', class: 'border-input text-foreground/70 data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive' },\n { variant: 'outline', tone: 'success', class: 'border-input text-foreground/70 data-[pressed=true]:border-success data-[pressed=true]:text-success' },\n { variant: 'outline', tone: 'warning', class: 'border-input text-foreground/70 data-[pressed=true]:border-warning data-[pressed=true]:text-warning' },\n\n // === SOLID × tone — pressed fills with tone ===\n { variant: 'solid', tone: 'primary', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-primary data-[pressed=true]:border-primary data-[pressed=true]:text-primary-foreground' },\n { variant: 'solid', tone: 'neutral', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-foreground data-[pressed=true]:border-foreground data-[pressed=true]:text-background' },\n { variant: 'solid', tone: 'danger', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-destructive data-[pressed=true]:border-destructive data-[pressed=true]:text-destructive-foreground' },\n { variant: 'solid', tone: 'success', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-success data-[pressed=true]:border-success data-[pressed=true]:text-success-foreground' },\n { variant: 'solid', tone: 'warning', class: 'border-input bg-background text-foreground/70 data-[pressed=true]:bg-warning data-[pressed=true]:border-warning data-[pressed=true]:text-warning-foreground' },\n\n // === GLASS × tone — dark glass; pressed darkens slightly + tone-tinted text on tone variants ===\n { variant: 'glass', tone: 'primary', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white' },\n { variant: 'glass', tone: 'neutral', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white' },\n { variant: 'glass', tone: 'danger', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive' },\n { variant: 'glass', tone: 'success', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success' },\n { variant: 'glass', tone: 'warning', class: 'bg-black/45 text-white/60 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning' },\n\n // === GLASS-SURFACE × tone — same as glass + visible border emphasis on press ===\n { variant: 'glass-surface', tone: 'primary', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40' },\n { variant: 'glass-surface', tone: 'neutral', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-white data-[pressed=true]:border-white/40' },\n { variant: 'glass-surface', tone: 'danger', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-destructive data-[pressed=true]:border-destructive/60' },\n { variant: 'glass-surface', tone: 'success', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-success data-[pressed=true]:border-success/60' },\n { variant: 'glass-surface', tone: 'warning', class: 'bg-black/45 text-white/60 border-white/10 data-[pressed=true]:bg-black/65 data-[pressed=true]:text-warning data-[pressed=true]:border-warning/60' },\n ],\n defaultVariants: {\n variant: 'ghost',\n tone: 'primary',\n },\n});\n\nexport type ToggleButtonVariants = VariantProps<typeof toggleButtonVariants>;\n","import { forwardRef, type ReactNode } from 'react';\nimport { cn, type ColorProp } from '../../../foundation/utils';\nimport { useControlled } from '../../../foundation/hooks';\nimport { Button, type ButtonProps } from '../button/Button';\nimport { toggleButtonVariants, type ToggleButtonVariants } from './ToggleButton.variants';\nimport { Tooltip } from '../../display/tooltip';\n\nconst COMPONENT_NAME = 'ToggleButton';\n\n/* Render-prop signature for state-aware content/labels. */\ntype PressedFn<T> = (args: { pressed: boolean }) => T;\ntype StateAware<T> = T | PressedFn<T>;\n\n/* Children may be static OR a render-prop receiving `{ pressed }` — render-prop enables icon-swap patterns (e.g., Eye ↔ EyeOff) for both controlled and uncontrolled toggles. */\ntype ToggleButtonChildren = StateAware<ReactNode>;\n\nexport interface ToggleButtonProps\n extends Omit<ButtonProps, 'variant' | 'tone' | 'children' | 'title' | 'aria-label' | 'color'>,\n ToggleButtonVariants {\n /* Controlled pressed state. */\n isPressed?: boolean;\n\n /* Uncontrolled initial state. Ignored if `isPressed` is set. */\n defaultPressed?: boolean;\n\n /* Fires whenever pressed state changes. */\n onPressedChange?: (pressed: boolean) => void;\n\n /* Static content OR render-prop receiving `{ pressed }` for state-driven swap. */\n children?: ToggleButtonChildren;\n\n /* Tooltip text — string OR fn receiving `{ pressed }`. State-aware form keeps consumer-supplied strings (i18n discipline). */\n title?: StateAware<string>;\n\n /* Accessible label — string OR fn. Use when icon-only or when `aria-pressed` alone is insufficient context for screen readers. */\n 'aria-label'?: StateAware<string>;\n\n /* Per-instance color override — applies to the active `tone`'s theme tokens. See `ColorProp`. */\n color?: ColorProp;\n\n /* Optional rich tooltip (SDK `Tooltip`) shown on hover/focus — use for icon-only toggles. */\n tooltip?: ReactNode;\n\n /* Render element. `'div'` (role=button + Space/Enter keyboard) lets you nest INTERACTIVE children (a color picker, a link) inside a segment without invalid button-in-button markup. Default `'button'`. */\n as?: 'button' | 'div';\n}\n\n/* Two-state action button (on/off) — sets `aria-pressed` + `data-pressed=\"true|false\"`. Wraps Button to inherit size union, shape, asChild, loading, padding/radius. Press appearance lives in `toggleButtonVariants` (variant × tone matrix); ToggleButton's own appearance overrides Button's neutral-ghost baseline via class order. */\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(\n (\n {\n isPressed,\n defaultPressed,\n onPressedChange,\n onClick,\n variant = 'ghost',\n tone = 'primary',\n color,\n className,\n children,\n title,\n tooltip,\n 'aria-label': ariaLabel,\n as = 'button',\n ...buttonProps\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: isPressed,\n default: defaultPressed ?? false,\n onChange: onPressedChange,\n });\n\n const renderedChildren =\n typeof children === 'function' ? children({ pressed: value }) : children;\n\n /* Resolve state-aware string props to plain strings for the underlying Button. */\n const resolvedTitle =\n typeof title === 'function' ? title({ pressed: value }) : title;\n const resolvedAriaLabel =\n typeof ariaLabel === 'function' ? ariaLabel({ pressed: value }) : ariaLabel;\n\n const isDiv = as === 'div';\n\n const button = (\n <Button\n ref={ref}\n /* Ghost baseline — ToggleButton's compound classes paint over Button's defaults via class order. tone is forwarded so per-instance `color` overrides hit the right `--color-{tone}` slot. */\n variant=\"ghost\"\n tone={tone ?? undefined}\n color={color}\n /* `as=\"div\"` → render through Slot onto a real <div> so consumers may nest interactive children (button-in-button is invalid markup). Keyboard parity added on the div below. */\n asChild={isDiv}\n aria-pressed={value}\n aria-label={resolvedAriaLabel}\n data-pressed={value ? 'true' : 'false'}\n title={resolvedTitle}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setValue(!value);\n }}\n className={cn(toggleButtonVariants({ variant, tone }), className)}\n {...buttonProps}\n >\n {isDiv ? (\n <div\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault();\n setValue(!value);\n }\n }}\n >\n {renderedChildren}\n </div>\n ) : (\n renderedChildren\n )}\n </Button>\n );\n\n return tooltip ? <Tooltip content={tooltip}>{button}</Tooltip> : button;\n },\n);\n\nToggleButton.displayName = COMPONENT_NAME;\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type Ref,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { useControlled } from '../../../foundation/hooks';\nimport type { ToggleButtonProps } from '../toggleButton/ToggleButton';\n\ntype Mode = 'single' | 'multi';\n\n/**\n * Single-select props, generic over the value type `T`.\n *\n * `T` defaults to `string`, so untyped usage keeps the historical\n * `string | null` shape. Pass a string-literal union or string enum\n * (`<ToggleButtonGroup<GradientType> …>`) to have `value` / `onValueChange`\n * emit that narrowed type instead — no cast needed at the call site.\n */\ninterface SingleProps<T extends string = string> {\n type?: 'single';\n value?: T | null;\n defaultValue?: T | null;\n onValueChange?: (value: T | null) => void;\n}\n\ninterface MultiProps {\n type: 'multi';\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\ntype ToggleButtonGroupProps<T extends string = string> = Omit<\n ComponentPropsWithoutRef<'div'>,\n 'defaultValue' | 'onChange'\n> & {\n orientation?: 'horizontal' | 'vertical';\n isAttached?: boolean;\n /**\n * Visual style.\n * - `default` — standard button row/column (borders + attached radii).\n * - `segmented` — iOS-style connected pill row on a muted track; the active\n * segment lifts to a `background` surface. Forces `isAttached`.\n */\n variant?: 'default' | 'segmented';\n} & (SingleProps<T> | MultiProps);\n\ninterface ChildLike extends ToggleButtonProps {\n value?: string;\n}\n\n/**\n * Generic-callable signature — `forwardRef` erases the type parameter, so the\n * render fn is written against the base `string` shape and the exotic result is\n * re-typed here to preserve `<T>` at the call site.\n */\ninterface ToggleButtonGroupComponent {\n <T extends string = string>(\n props: ToggleButtonGroupProps<T> & { ref?: Ref<HTMLDivElement> },\n ): ReactElement;\n displayName?: string;\n}\n\n/** Coordinates a row/column of ToggleButton children — `type=\"single\" | \"multi\"`. */\nconst ToggleButtonGroupImpl = forwardRef<HTMLDivElement, ToggleButtonGroupProps>(\n (props, ref) => {\n const {\n orientation = 'horizontal',\n isAttached = true,\n variant = 'default',\n className,\n children,\n type,\n value,\n defaultValue,\n onValueChange,\n ...rest\n } = props;\n const mode: Mode = type === 'multi' ? 'multi' : 'single';\n const isSegmented = variant === 'segmented';\n // Segmented is inherently an attached pill row — the muted track only reads as one control when its segments touch.\n const attached = isSegmented || isAttached;\n\n const [singleValue, setSingleValue] = useControlled<string | null>({\n controlled: mode === 'single' ? (value as string | null | undefined) : undefined,\n default: mode === 'single' ? (defaultValue as string | null | undefined) ?? null : null,\n onChange:\n mode === 'single' ? (onValueChange as ((value: string | null) => void) | undefined) : undefined,\n });\n const [multiValue, setMultiValue] = useControlled<string[]>({\n controlled: mode === 'multi' ? (value as string[] | undefined) : undefined,\n default: mode === 'multi' ? (defaultValue as string[] | undefined) ?? [] : [],\n onChange:\n mode === 'multi' ? (onValueChange as ((value: string[]) => void) | undefined) : undefined,\n });\n\n const isPressed = (childValue: string | undefined): boolean => {\n if (childValue === undefined) return false;\n return mode === 'single' ? singleValue === childValue : multiValue.includes(childValue);\n };\n const togglePressed = (childValue: string | undefined) => {\n if (childValue === undefined) return;\n if (mode === 'single') {\n setSingleValue(singleValue === childValue ? null : childValue);\n } else {\n setMultiValue(\n multiValue.includes(childValue)\n ? multiValue.filter((v) => v !== childValue)\n : [...multiValue, childValue],\n );\n }\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n data-orientation={orientation}\n className={cn(\n 'inline-flex',\n orientation === 'horizontal' ? 'flex-row' : 'flex-col',\n attached\n ? orientation === 'horizontal'\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-l-md [&>*:last-child]:rounded-r-md [&>*:not(:first-child)]:-ml-px'\n : '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px'\n : 'gap-2',\n // Segmented: muted track + reset segment chrome; active segment lifts to a `background` surface.\n isSegmented && [\n 'rounded-md bg-muted p-1',\n '[&>*]:!rounded-md [&>*]:!ml-0 [&>*]:!border-transparent [&>*]:!bg-transparent',\n '[&>*[data-pressed=true]]:!bg-background [&>*[data-pressed=true]]:!text-foreground [&>*[data-pressed=true]]:shadow-sm',\n ],\n className,\n )}\n {...rest}\n >\n {Children.map(children, (child) => {\n if (!isValidElement(child)) return child;\n const c = child as ReactElement<ChildLike>;\n const childValue = c.props.value;\n // Compose with the child's own props — explicit `isPressed` wins; child's `onPressedChange` fires before the group toggle.\n return cloneElement(c, {\n isPressed: c.props.isPressed ?? isPressed(childValue),\n onPressedChange: (pressed: boolean) => {\n c.props.onPressedChange?.(pressed);\n togglePressed(childValue);\n },\n } as Partial<ChildLike>);\n })}\n </div>\n );\n },\n);\nToggleButtonGroupImpl.displayName = 'ToggleButtonGroup';\n\n/**\n * Public export. The `forwardRef` result is re-typed to the generic-callable\n * signature so `<ToggleButtonGroup<GradientType> …>` narrows `value` /\n * `onValueChange` to `GradientType | null`. Runtime is untouched — this is a\n * type-level cast only.\n */\nexport const ToggleButtonGroup = ToggleButtonGroupImpl as ToggleButtonGroupComponent;\n\nexport type { ToggleButtonGroupProps };\n","import { forwardRef } from 'react';\nimport { ToggleButtonGroup, type ToggleButtonGroupProps } from '../toggleButtonGroup/ToggleButtonGroup';\n\nexport type SegmentedControlProps = Omit<ToggleButtonGroupProps, 'variant'>;\n\n/**\n * iOS-style connected pill row.\n *\n * @deprecated Use `ToggleButtonGroup variant=\"segmented\"` — this is now a thin alias that\n * forwards to it. Kept for back-compat; will be removed in a future beta.\n */\nexport const SegmentedControl = forwardRef<HTMLDivElement, SegmentedControlProps>((props, ref) => (\n <ToggleButtonGroup ref={ref} variant=\"segmented\" {...(props as ToggleButtonGroupProps)} />\n));\nSegmentedControl.displayName = 'SegmentedControl';\n","import { tv, type VariantProps } from '../../../foundation/utils';\n\nexport const fabVariants = tv({\n base: 'fixed inline-flex items-center justify-center rounded-full shadow-lg transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n variants: {\n variant: {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90',\n secondary: 'bg-card text-card-foreground border border-border hover:bg-muted',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n },\n size: {\n sm: 'h-10 w-10',\n md: 'h-14 w-14',\n lg: 'h-16 w-16',\n },\n position: {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n position: 'bottom-right',\n },\n});\n\nexport type FABVariants = VariantProps<typeof fabVariants>;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { fabVariants, type FABVariants } from './FAB.variants';\n\nexport interface FABProps extends ButtonHTMLAttributes<HTMLButtonElement>, FABVariants {\n /** Required accessible label — FAB content is typically icon-only. */\n 'aria-label': string;\n children: ReactNode;\n}\n\n/** Floating Action Button — fixed-position circular button with shadow. */\nexport const FAB = forwardRef<HTMLButtonElement, FABProps>(\n ({ className, variant, size, position, type = 'button', ...props }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn(fabVariants({ variant, size, position }), className)}\n {...props}\n />\n ),\n);\nFAB.displayName = 'FAB';\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n type ReactNode,\n} from 'react';\nimport { Check, Copy } from 'lucide-react';\nimport { Icon } from '../../../foundation/icons';\nimport { useClipboard } from '../../../foundation/hooks';\nimport { OptionalExtensions } from '../../../foundation/utils';\nimport { Button, type ButtonProps } from '../button/Button';\n\nconst COMPONENT_NAME = 'CopyButton';\n\nexport interface CopyButtonProps\n extends Omit<ButtonProps, 'onClick' | 'children' | 'aria-label' | 'onError'> {\n /* Text to copy when the button is activated. */\n text: string;\n\n /* Reset window for the `copied` state in ms. Default 2000. Set 0 to keep `copied` true until the next mount / explicit reset. */\n resetAfter?: number;\n\n /* Static content OR render-prop receiving `{copied, error}` for state-driven swap. Falls back to icon-only Copy/Check when omitted. */\n children?:\n | ReactNode\n | ((args: { copied: boolean; error: Error | null }) => ReactNode);\n\n /* Required accessible label — clipboard buttons are commonly icon-only and need a programmatic name. */\n 'aria-label': string;\n\n /* Override aria-label while copied=true. Falls back to `aria-label` when omitted (i18n discipline — consumer supplies all user-facing strings). */\n copiedAriaLabel?: string;\n\n /* Called with the caught Error when `navigator.clipboard.writeText` rejects. Fires once per error transition. */\n onError?: (error: Error) => void;\n}\n\n/* Renders a clipboard-copy button — for code blocks, ID / URL fields, and inline copy affordances. */\nexport const CopyButton = forwardRef<HTMLButtonElement, CopyButtonProps>(\n (\n {\n text,\n resetAfter = 2000,\n children,\n variant = 'ghost',\n 'aria-label': ariaLabel,\n copiedAriaLabel,\n onError,\n ...props\n },\n ref,\n ) => {\n const { copied, error, copy } = useClipboard({ resetAfter });\n\n // Stable ref keeps the effect's deps minimal — onError can be re-passed\n // unstably without re-firing on every render where `error` is set.\n const onErrorRef = useRef(onError);\n useEffect(() => {\n onErrorRef.current = onError;\n });\n\n useEffect(() => {\n if (error) onErrorRef.current?.(error);\n }, [error]);\n\n const effectiveAriaLabel = copied\n ? (copiedAriaLabel ?? ariaLabel)\n : ariaLabel;\n\n const content =\n typeof children === 'function'\n ? children({ copied, error })\n : (children ?? <Icon icon={copied ? Check : Copy} size={16} />);\n\n const handleClick = useCallback(() => {\n void copy(text);\n }, [copy, text]);\n\n return (\n <Button\n ref={ref}\n variant={variant}\n aria-label={effectiveAriaLabel}\n data-copied={OptionalExtensions.from(copied, 'true')}\n onClick={handleClick}\n {...props}\n >\n {content}\n </Button>\n );\n },\n);\n\nCopyButton.displayName = COMPONENT_NAME;\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cn, dataAttr } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\nimport { useControlled } from '../../../foundation/hooks';\n\nexport interface DisclosureButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'onChange'> {\n /** Visible label (left-aligned). */\n children?: ReactNode;\n /** Controlled open state. */\n isOpen?: boolean;\n /** Uncontrolled initial state. */\n defaultOpen?: boolean;\n /** Fires whenever open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Side the chevron sits on. Default `right`. */\n chevronSide?: 'left' | 'right';\n}\n\n/** Button with a rotating chevron — sets `aria-expanded` + `data-state=\"open|closed\"`. */\nexport const DisclosureButton = forwardRef<HTMLButtonElement, DisclosureButtonProps>(\n (\n {\n children,\n isOpen,\n defaultOpen = false,\n onOpenChange,\n onClick,\n chevronSide = 'right',\n className,\n type = 'button',\n ...props\n },\n ref,\n ) => {\n const [value, setValue] = useControlled({\n controlled: isOpen,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const chevron = (\n <Icon\n icon={ChevronDown}\n size={16}\n className={cn('transition-transform', value && 'rotate-180')}\n />\n );\n return (\n <button\n ref={ref}\n type={type}\n aria-expanded={value}\n data-state={value ? 'open' : 'closed'}\n data-disabled={dataAttr(props.disabled)}\n onClick={(e) => {\n onClick?.(e);\n if (!e.defaultPrevented) setValue(!value);\n }}\n className={cn(\n 'inline-flex w-full items-center justify-between gap-2 rounded-md px-3 py-2 text-sm font-medium text-foreground transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className,\n )}\n {...props}\n >\n {chevronSide === 'left' && chevron}\n <span className=\"flex-1 text-left\">{children}</span>\n {chevronSide === 'right' && chevron}\n </button>\n );\n },\n);\nDisclosureButton.displayName = 'DisclosureButton';\n","import {\n createContext,\n forwardRef,\n useContext,\n type AnchorHTMLAttributes,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../../foundation/utils';\nimport { RovingFocusGroup, Slot, useRovingFocusItem } from '../../../foundation/primitives';\n\ninterface ToolbarContextValue {\n orientation: 'horizontal' | 'vertical';\n}\n\nconst ToolbarContext = createContext<ToolbarContextValue | null>(null);\n\nfunction useToolbarContext() {\n const ctx = useContext(ToolbarContext);\n if (!ctx) throw new Error('Toolbar.* must be used inside <Toolbar>');\n return ctx;\n}\n\nexport interface ToolbarProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: 'horizontal' | 'vertical';\n}\n\nconst ToolbarRoot = forwardRef<HTMLDivElement, ToolbarProps>(function Toolbar(\n { orientation = 'horizontal', className, children, ...rest },\n ref,\n) {\n return (\n <ToolbarContext.Provider value={{ orientation }}>\n <RovingFocusGroup\n ref={ref as never}\n orientation={orientation}\n canLoop\n role=\"toolbar\"\n aria-orientation={orientation}\n data-orientation={orientation}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-border bg-background p-1',\n orientation === 'vertical' && 'flex-col items-stretch',\n className,\n )}\n {...rest}\n >\n {children}\n </RovingFocusGroup>\n </ToolbarContext.Provider>\n );\n});\n\nexport interface ToolbarButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n asChild?: boolean;\n children: ReactNode;\n}\n\nexport const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n function ToolbarButton({ asChild, className, onKeyDown, onFocus, children, ...rest }, ref) {\n const roving = useRovingFocusItem();\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n ref={(node: HTMLButtonElement | null) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n type={asChild ? undefined : 'button'}\n tabIndex={roving.tabIndex}\n onFocus={(e: React.FocusEvent<HTMLButtonElement>) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n asChild\n ? className\n : cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm transition-colors hover:bg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className,\n ),\n )}\n {...rest}\n >\n {children}\n </Component>\n );\n },\n);\n\nexport interface ToolbarLinkProps\n extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'children'> {\n children: ReactNode;\n}\n\nexport const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>(function ToolbarLink(\n { className, onKeyDown, onFocus, children, ...rest },\n ref,\n) {\n const roving = useRovingFocusItem();\n return (\n <a\n ref={(node) => {\n roving.ref(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n tabIndex={roving.tabIndex}\n onFocus={(e) => {\n onFocus?.(e);\n roving.onFocus();\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n roving.onKeyDown(e);\n }}\n className={cn(\n 'inline-flex h-8 items-center justify-center rounded-sm px-2 text-sm text-foreground underline-offset-2 transition-colors hover:bg-muted hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n {...rest}\n >\n {children}\n </a>\n );\n});\n\nexport function ToolbarSeparator(props: HTMLAttributes<HTMLDivElement>) {\n const ctx = useToolbarContext();\n return (\n <div\n role=\"separator\"\n aria-orientation={ctx.orientation === 'vertical' ? 'horizontal' : 'vertical'}\n className={cn(\n 'shrink-0 bg-border',\n ctx.orientation === 'vertical' ? 'mx-1 h-px' : 'my-1 w-px self-stretch',\n )}\n {...props}\n />\n );\n}\n\nexport const Toolbar = Object.assign(ToolbarRoot, {\n Button: ToolbarButton,\n Link: ToolbarLink,\n Separator: ToolbarSeparator,\n});\n\nexport default Toolbar;\n","import {\n Children,\n createContext,\n forwardRef,\n isValidElement,\n useContext,\n useMemo,\n useRef,\n type ButtonHTMLAttributes,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\nimport { Plus, X } from 'lucide-react';\nimport { cn, composeRefs } from '../../../foundation/utils';\nimport { useControlled, useEscape, useOutsideClick } from '../../../foundation/hooks';\nimport { Presence } from '../../../foundation/primitives';\nimport { Icon } from '../../../foundation/icons';\nimport { FAB } from '../fab';\nimport type { FABVariants } from '../fab/FAB.variants';\n\nexport type SpeedDialPosition = NonNullable<FABVariants['position']>;\nexport type SpeedDialDirection = 'up' | 'down' | 'left' | 'right';\n\ninterface SpeedDialContextValue {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.MutableRefObject<HTMLButtonElement | null>;\n rootRef: React.MutableRefObject<HTMLDivElement | null>;\n direction: SpeedDialDirection;\n position: SpeedDialPosition;\n}\n\nconst SpeedDialContext = createContext<SpeedDialContextValue | null>(null);\n\nfunction useSpeedDialContext() {\n const ctx = useContext(SpeedDialContext);\n if (!ctx) throw new Error('SpeedDial.* must be used inside <SpeedDial>');\n return ctx;\n}\n\n/**\n * `Presence`-clonable list: a single `forwardRef` element that spreads\n * `data-state` (injected by `Presence`) + `ref` onto its node. Marked `group`\n * so each action item animates off its `data-[state]`; carries its own fade so\n * `Presence` has an animation on *this* node to watch before unmount. `forwardRef`\n * + `{...props}` spread are required so the ref and `data-state` actually land here.\n */\nconst SpeedDialList = forwardRef<HTMLUListElement, HTMLAttributes<HTMLUListElement>>(\n function SpeedDialList({ className, children, ...props }, ref) {\n return (\n <ul\n ref={ref}\n role=\"menu\"\n className={cn(\n 'group absolute flex',\n /* list fade gated on data-state; motion-safe so reduced-motion users\n get no movement. */\n 'motion-safe:data-[state=open]:animate-(--animate-fade-in)',\n 'motion-safe:data-[state=closed]:animate-(--animate-fade-out)',\n 'motion-reduce:animate-none',\n /* Per-item enter stagger: ramp `animation-delay` on the first few items\n while opening only (closed → delay 0 so no item outlasts the list's\n own fade-out, which gates unmount). */\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(2)]:[animation-delay:40ms]',\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(3)]:[animation-delay:80ms]',\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(4)]:[animation-delay:120ms]',\n 'motion-safe:group-data-[state=open]:[&>li:nth-child(n+5)]:[animation-delay:160ms]',\n className,\n )}\n {...props}\n >\n {children}\n </ul>\n );\n },\n);\n\nconst POSITION_TO_DIRECTION: Record<SpeedDialPosition, SpeedDialDirection> = {\n 'bottom-right': 'up',\n 'bottom-left': 'up',\n 'bottom-center': 'up',\n 'top-right': 'down',\n 'top-left': 'down',\n};\n\nconst POSITION_OFFSETS: Record<SpeedDialPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n};\n\nconst DIRECTION_TO_STACK: Record<SpeedDialDirection, string> = {\n up: 'flex-col-reverse bottom-full mb-3',\n down: 'flex-col top-full mt-3',\n left: 'flex-row-reverse right-full mr-3',\n right: 'flex-row top-1/2 -translate-y-1/2 left-full ml-3',\n};\n\nconst DIRECTION_LABEL_SIDE: Record<SpeedDialDirection, 'left' | 'right'> = {\n up: 'right',\n down: 'right',\n left: 'right',\n right: 'left',\n};\n\nexport interface SpeedDialProps {\n position?: SpeedDialPosition;\n direction?: SpeedDialDirection;\n isOpen?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n gap?: number;\n className?: string;\n children: ReactNode;\n}\n\nfunction SpeedDialRoot({\n position = 'bottom-right',\n direction,\n isOpen: openProp,\n defaultOpen = false,\n onOpenChange,\n gap = 12,\n className,\n children,\n}: SpeedDialProps) {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen,\n onChange: onOpenChange,\n });\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const resolvedDirection = direction ?? POSITION_TO_DIRECTION[position];\n\n useEscape(() => {\n if (!open) return;\n setOpen(false);\n requestAnimationFrame(() => triggerRef.current?.focus());\n }, open);\n\n useOutsideClick(\n rootRef,\n () => {\n if (open) setOpen(false);\n },\n open,\n );\n\n const ctx = useMemo<SpeedDialContextValue>(\n () => ({ open, setOpen, triggerRef, rootRef, direction: resolvedDirection, position }),\n [open, setOpen, resolvedDirection, position],\n );\n\n // The trigger renders always (a closed dial must still be openable); only the\n // action items are gated behind `open`.\n const childArray = Children.toArray(children);\n const triggerChildren = childArray.filter(\n (child) => isValidElement(child) && child.type === SpeedDialTrigger,\n );\n const actionChildren = childArray.filter(\n (child) => !(isValidElement(child) && child.type === SpeedDialTrigger),\n );\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (!open || (e.key !== 'ArrowDown' && e.key !== 'ArrowUp')) return;\n const root = rootRef.current;\n if (!root) return;\n const items = Array.from(root.querySelectorAll<HTMLButtonElement>('[role=\"menuitem\"]'));\n if (items.length === 0) return;\n e.preventDefault();\n const currentIndex = items.indexOf(document.activeElement as HTMLButtonElement);\n const nextIndex =\n currentIndex === -1\n ? e.key === 'ArrowDown'\n ? 0\n : items.length - 1\n : (currentIndex + (e.key === 'ArrowDown' ? 1 : -1) + items.length) % items.length;\n items[nextIndex]?.focus();\n };\n\n return (\n <SpeedDialContext.Provider value={ctx}>\n <div\n ref={rootRef}\n data-state={open ? 'open' : 'closed'}\n onKeyDown={handleKeyDown}\n className={cn('fixed', POSITION_OFFSETS[position], className)}\n >\n {/* `Presence` clones `data-state` (\"open\" | \"closed\") + a `ref` onto the\n list and defers unmount until its fade-out ends — keeps the exit from\n being killed by the hard `!open` unmount. Items pop in/out off the\n list's `group` state (see `SpeedDialAction`), staggered on enter. */}\n <Presence isPresent={open}>\n <SpeedDialList\n data-direction={resolvedDirection}\n style={{ gap }}\n className={DIRECTION_TO_STACK[resolvedDirection]}\n >\n {actionChildren}\n </SpeedDialList>\n </Presence>\n {triggerChildren}\n </div>\n </SpeedDialContext.Provider>\n );\n}\nSpeedDialRoot.displayName = 'SpeedDial';\n\nexport interface SpeedDialTriggerProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Required accessible label. Default `\"Toggle actions\"`. */\n 'aria-label'?: string;\n closedIcon?: ReactNode;\n openIcon?: ReactNode;\n variant?: FABVariants['variant'];\n size?: FABVariants['size'];\n}\n\nexport const SpeedDialTrigger = forwardRef<HTMLButtonElement, SpeedDialTriggerProps>(\n function SpeedDialTrigger(\n {\n 'aria-label': ariaLabel = 'Toggle actions',\n closedIcon,\n openIcon,\n variant,\n size,\n onClick,\n className,\n ...rest\n },\n forwardedRef,\n ) {\n const ctx = useSpeedDialContext();\n return (\n <FAB\n {...rest}\n ref={composeRefs(forwardedRef, ctx.triggerRef)}\n aria-label={ariaLabel}\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open}\n variant={variant}\n size={size}\n position={ctx.position}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n ctx.setOpen(!ctx.open);\n }}\n className={cn('static !bottom-auto !left-auto !right-auto !top-auto !translate-x-0', className)}\n >\n {ctx.open ? openIcon ?? <Icon icon={X} size={20} /> : closedIcon ?? <Icon icon={Plus} size={20} />}\n </FAB>\n );\n },\n);\n\nexport interface SpeedDialActionProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n 'aria-label': string;\n icon: ReactNode;\n onSelect?: () => void;\n tooltip?: ReactNode;\n}\n\nexport const SpeedDialAction = forwardRef<HTMLButtonElement, SpeedDialActionProps>(\n function SpeedDialAction(\n { 'aria-label': ariaLabel, icon, onSelect, tooltip, className, onClick, type = 'button', ...rest },\n forwardedRef,\n ) {\n const ctx = useSpeedDialContext();\n const labelSide = DIRECTION_LABEL_SIDE[ctx.direction];\n return (\n <li\n role=\"none\"\n data-side={labelSide}\n className={cn(\n 'flex items-center gap-2',\n /* fade+scale each action off the list's `group` state; motion-safe so\n reduced-motion users get no movement (delay ramp lives on the list). */\n 'motion-safe:group-data-[state=open]:animate-(--animate-pop-in)',\n 'motion-safe:group-data-[state=closed]:animate-(--animate-pop-out)',\n 'motion-reduce:animate-none',\n )}\n >\n {tooltip && labelSide === 'left' && (\n <span className=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\">\n {tooltip}\n </span>\n )}\n <button\n {...rest}\n ref={forwardedRef}\n type={type}\n role=\"menuitem\"\n aria-label={ariaLabel}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n onSelect?.();\n ctx.setOpen(false);\n requestAnimationFrame(() => ctx.triggerRef.current?.focus());\n }}\n className={cn(\n 'inline-flex h-10 w-10 items-center justify-center rounded-full bg-card text-card-foreground shadow-md transition-all hover:shadow-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n className,\n )}\n >\n {icon}\n </button>\n {tooltip && labelSide === 'right' && (\n <span className=\"rounded-md bg-popover px-2 py-1 text-xs text-popover-foreground shadow\">\n {tooltip}\n </span>\n )}\n </li>\n );\n },\n);\n\nexport const SpeedDial = Object.assign(SpeedDialRoot, {\n Trigger: SpeedDialTrigger,\n Action: SpeedDialAction,\n});\n\nexport default SpeedDial;\n","import {\n forwardRef,\n useEffect,\n useState,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { ArrowUp } from 'lucide-react';\nimport { cn } from '../../../foundation/utils';\nimport { Icon } from '../../../foundation/icons';\n\nexport type BackToTopPosition =\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'top-right'\n | 'top-left';\n\nexport interface BackToTopButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Scroll distance (px) before the button appears. Default 400. */\n threshold?: number;\n /** Scope to a specific scrollable element. Defaults to the window. */\n scrollContainer?: HTMLElement | null;\n position?: BackToTopPosition;\n /** Visible label. Omit for icon-only. */\n label?: ReactNode;\n 'aria-label'?: string;\n}\n\nconst POSITION: Record<BackToTopPosition, string> = {\n 'bottom-right': 'bottom-6 right-6',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-center': 'bottom-6 left-1/2 -translate-x-1/2',\n 'top-right': 'top-6 right-6',\n 'top-left': 'top-6 left-6',\n};\n\n/** Floating button revealed past `threshold` scroll — smooth-scrolls to top. */\nexport const BackToTopButton = forwardRef<HTMLButtonElement, BackToTopButtonProps>(\n function BackToTopButton(\n {\n threshold = 400,\n scrollContainer,\n position = 'bottom-right',\n label,\n 'aria-label': ariaLabel = 'Back to top',\n className,\n onClick,\n type = 'button',\n ...rest\n },\n ref,\n ) {\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n const el: HTMLElement | Window = scrollContainer ?? window;\n const read = () => {\n const y =\n 'scrollY' in el ? (el as Window).scrollY : (el as HTMLElement).scrollTop;\n setVisible(y >= threshold);\n };\n read();\n const target = el as EventTarget;\n target.addEventListener('scroll', read, { passive: true });\n return () => target.removeEventListener('scroll', read);\n }, [threshold, scrollContainer]);\n\n if (!visible) return null;\n\n return (\n <button\n ref={ref}\n type={type}\n aria-label={ariaLabel}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n const reducedMotion =\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n const target = scrollContainer ?? window;\n if ('scrollTo' in target) {\n (target as Window | HTMLElement).scrollTo({\n top: 0,\n behavior: reducedMotion ? 'auto' : 'smooth',\n });\n }\n }}\n className={cn(\n 'fixed z-banner inline-flex items-center justify-center gap-2 rounded-full bg-card text-card-foreground shadow-lg ring-1 ring-border transition-all hover:shadow-xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n label ? 'h-11 px-4 text-sm font-medium' : 'h-11 w-11',\n POSITION[position],\n className,\n )}\n {...rest}\n >\n <Icon icon={ArrowUp} size={16} />\n {label}\n </button>\n );\n },\n);\nBackToTopButton.displayName = 'BackToTopButton';\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/domain/color/index.ts","../src/domain/color/GradientType.ts","../src/domain/color/Gradient.ts"],"names":[],"mappings":";;;AAAA,IAAA,aAAA,GAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,YAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACCO,IAAM,YAAA,GAAe;AAAA;AAAA,EAE1B,MAAA,EAAQ,QAAA;AAAA;AAAA,EAER,MAAA,EAAQ;AACV;;;AC8BA,SAAS,QAAA,CAAS,QAAA,EAAoB,KAAA,EAAe,KAAA,EAAyB;AAC5E,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAO,CAAA,KAAM,KAAA,GAAQ,EAAE,GAAG,IAAA,EAAM,KAAA,KAAU,IAAK,CAAA;AACvF,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,KAAA,EAAM;AAC9B;AAGA,SAAS,aAAa,QAAA,EAA8B;AAClD,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA;AACrC,EAAA,MAAM,QAAQ,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO,EAAE,GAAG,IAAA,EAAM,OAAO,QAAA,CAAS,KAAA,CAAM,OAAO,CAAC,CAAA,CAAG,OAAM,CAAE,CAAA;AACnG,EAAA,OAAO,EAAE,GAAG,QAAA,EAAU,KAAA,EAAM;AAC9B;AAGA,SAAS,SAAA,CAAU,UAAoB,KAAA,EAAyB;AAC9D,EAAA,OAAO,QAAA,CAAS,SAAS,YAAA,CAAa,MAAA,GAAS,EAAE,GAAG,QAAA,EAAU,OAAM,GAAI,QAAA;AAC1E;AAGA,SAAS,UAAA,CAAW,UAAoB,MAAA,EAA0B;AAChE,EAAA,OAAO,QAAA,CAAS,SAAS,YAAA,CAAa,MAAA,GAAS,EAAE,GAAG,QAAA,EAAU,QAAO,GAAI,QAAA;AAC3E;AAGO,IAAM,QAAA,GAAW;AAAA,EACtB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF","file":"chunk-Y572FCSC.js","sourcesContent":["// color — domain module. Pure color value-types + operations (no React, no upward deps).\n\nexport { GradientType } from './GradientType';\nexport { Gradient } from './Gradient';\nexport type {\n GradientStop,\n LinearGradient,\n RadialGradient,\n} from './Gradient';\n","/** Defines the foreground gradient projection — linear or radial. */\nexport const GradientType = {\n /** Refers to a linear (directional) gradient. */\n Linear: 'linear',\n /** Refers to a radial (center-out) gradient. */\n Radial: 'radial',\n} as const;\n\nexport type GradientType = (typeof GradientType)[keyof typeof GradientType];\n","import { GradientType } from './GradientType';\n\n/** Defines one color stop of a foreground gradient (the start / end of a two-stop fill). */\nexport interface GradientStop {\n /** The stop color, `#RRGGBB`. */\n color: string;\n /** The stop's position along the gradient, `0..1`. */\n offset: number;\n}\n\n/** Defines the shared gradient data — the color stops, independent of projection. */\ninterface GradientBase {\n /** The ordered color stops (two: start, end). */\n stops: GradientStop[];\n}\n\n/** Defines a linear (directional) gradient. */\nexport interface LinearGradient extends GradientBase {\n /** Discriminant — a linear projection. */\n type: typeof GradientType.Linear;\n /** Direction in degrees; `0` = left→right, `90` = top→bottom. */\n angle: number;\n}\n\n/** Defines a radial (center-out) gradient. */\nexport interface RadialGradient extends GradientBase {\n /** Discriminant — a radial projection. */\n type: typeof GradientType.Radial;\n /** Extent as a fraction (`0..1`) of the canvas half-size — smaller is tighter. */\n radius: number;\n}\n\n/** Defines a foreground gradient — a linear or radial projection over shared stops. */\nexport type Gradient = LinearGradient | RadialGradient;\n\n/** Returns the gradient with one stop's color replaced (by index). */\nfunction withStop(gradient: Gradient, index: number, color: string): Gradient {\n const stops = gradient.stops.map((stop, i) => (i === index ? { ...stop, color } : stop));\n return { ...gradient, stops };\n}\n\n/** Returns the gradient with its stop colors mirrored end-to-end, each offset kept — a symmetric flip for any stop count. */\nfunction reverseStops(gradient: Gradient): Gradient {\n const last = gradient.stops.length - 1;\n const stops = gradient.stops.map((stop, i) => ({ ...stop, color: gradient.stops[last - i]!.color }));\n return { ...gradient, stops };\n}\n\n/** Returns the gradient with its linear angle set (no-op on a radial gradient). */\nfunction withAngle(gradient: Gradient, angle: number): Gradient {\n return gradient.type === GradientType.Linear ? { ...gradient, angle } : gradient;\n}\n\n/** Returns the gradient with its radial radius set (no-op on a linear gradient). */\nfunction withRadius(gradient: Gradient, radius: number): Gradient {\n return gradient.type === GradientType.Radial ? { ...gradient, radius } : gradient;\n}\n\n/** Operations over a `Gradient` value — the companion to the `Gradient` type. */\nexport const Gradient = {\n withStop,\n reverseStops,\n withAngle,\n withRadius,\n};\n"]}
|