@dev-dga/react 0.8.3 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/{chunk-EFKAKU2X.js → chunk-66EVFQVL.js} +2 -2
  3. package/dist/{chunk-SOIZIH7F.js → chunk-6DN3JE3P.js} +10 -1
  4. package/dist/chunk-6DN3JE3P.js.map +1 -0
  5. package/dist/{chunk-D7BZ6L4Z.cjs → chunk-BBGCS5PZ.cjs} +7 -2
  6. package/dist/chunk-BBGCS5PZ.cjs.map +1 -0
  7. package/dist/{chunk-MUM6HKPT.js → chunk-BTP7G7WR.js} +7 -2
  8. package/dist/chunk-BTP7G7WR.js.map +1 -0
  9. package/dist/{chunk-LES7CZSC.cjs → chunk-CISRE6BC.cjs} +14 -3
  10. package/dist/chunk-CISRE6BC.cjs.map +1 -0
  11. package/dist/{chunk-4ZCLTLVC.cjs → chunk-CVQFSXRR.cjs} +10 -1
  12. package/dist/chunk-CVQFSXRR.cjs.map +1 -0
  13. package/dist/{chunk-BNULFLPC.js → chunk-HBAHWCBK.js} +14 -3
  14. package/dist/chunk-HBAHWCBK.js.map +1 -0
  15. package/dist/{chunk-54GIEP6E.cjs → chunk-I6BOBHO6.cjs} +7 -2
  16. package/dist/chunk-I6BOBHO6.cjs.map +1 -0
  17. package/dist/{chunk-DBB47IAX.js → chunk-IFB53HNO.js} +1 -1
  18. package/dist/chunk-IFB53HNO.js.map +1 -0
  19. package/dist/{chunk-TWCX4EZR.js → chunk-JOJ23OD4.js} +6 -1
  20. package/dist/{chunk-TWCX4EZR.js.map → chunk-JOJ23OD4.js.map} +1 -1
  21. package/dist/{chunk-PI4OPECU.cjs → chunk-LG2IADSZ.cjs} +1 -1
  22. package/dist/{chunk-PI4OPECU.cjs.map → chunk-LG2IADSZ.cjs.map} +1 -1
  23. package/dist/{chunk-CHE75QHA.js → chunk-MCHL23CE.js} +1 -1
  24. package/dist/{chunk-CHE75QHA.js.map → chunk-MCHL23CE.js.map} +1 -1
  25. package/dist/{chunk-MWOGVEQB.cjs → chunk-NUC6WJU4.cjs} +5 -5
  26. package/dist/{chunk-MWOGVEQB.cjs.map → chunk-NUC6WJU4.cjs.map} +1 -1
  27. package/dist/{chunk-JQO3EFLX.cjs → chunk-PAUY27WX.cjs} +3 -14
  28. package/dist/chunk-PAUY27WX.cjs.map +1 -0
  29. package/dist/{chunk-6A73DWVA.js → chunk-UAECZXU5.js} +3 -14
  30. package/dist/chunk-UAECZXU5.js.map +1 -0
  31. package/dist/{chunk-43763K2A.cjs → chunk-WI4WQGF6.cjs} +1 -1
  32. package/dist/{chunk-43763K2A.cjs.map → chunk-WI4WQGF6.cjs.map} +1 -1
  33. package/dist/components/Combobox/Combobox.cjs +2 -2
  34. package/dist/components/Combobox/Combobox.js +1 -1
  35. package/dist/components/Combobox/index.cjs +2 -2
  36. package/dist/components/Combobox/index.js +1 -1
  37. package/dist/components/DateRangePicker/DateRangePicker.cjs +2 -2
  38. package/dist/components/DateRangePicker/DateRangePicker.js +1 -1
  39. package/dist/components/DateRangePicker/index.cjs +2 -2
  40. package/dist/components/DateRangePicker/index.js +1 -1
  41. package/dist/components/Modal/Modal.cjs +4 -2
  42. package/dist/components/Modal/Modal.cjs.map +1 -1
  43. package/dist/components/Modal/Modal.js +3 -1
  44. package/dist/components/Modal/index.cjs +4 -2
  45. package/dist/components/Modal/index.cjs.map +1 -1
  46. package/dist/components/Modal/index.js +3 -1
  47. package/dist/components/ScrollArea/ScrollArea.cjs +2 -2
  48. package/dist/components/ScrollArea/ScrollArea.js +1 -1
  49. package/dist/components/ScrollArea/index.cjs +2 -2
  50. package/dist/components/ScrollArea/index.js +1 -1
  51. package/dist/components/Sidebar/Sidebar.cjs +2 -2
  52. package/dist/components/Sidebar/Sidebar.js +1 -1
  53. package/dist/components/Sidebar/SidebarMenu.cjs +3 -3
  54. package/dist/components/Sidebar/SidebarMenu.js +2 -2
  55. package/dist/components/Sidebar/index.cjs +4 -4
  56. package/dist/components/Sidebar/index.js +3 -3
  57. package/dist/components/TagInput/TagInput.cjs +2 -2
  58. package/dist/components/TagInput/TagInput.js +1 -1
  59. package/dist/components/TagInput/index.cjs +2 -2
  60. package/dist/components/TagInput/index.js +1 -1
  61. package/dist/components/Tooltip/Tooltip.cjs +2 -2
  62. package/dist/components/Tooltip/Tooltip.js +1 -1
  63. package/dist/components/Tooltip/index.cjs +2 -2
  64. package/dist/components/Tooltip/index.js +1 -1
  65. package/dist/index.cjs +23 -21
  66. package/dist/index.cjs.map +1 -1
  67. package/dist/index.d.cts +20 -6
  68. package/dist/index.d.ts +20 -6
  69. package/dist/index.js +35 -33
  70. package/package.json +3 -3
  71. package/dist/chunk-4ZCLTLVC.cjs.map +0 -1
  72. package/dist/chunk-54GIEP6E.cjs.map +0 -1
  73. package/dist/chunk-6A73DWVA.js.map +0 -1
  74. package/dist/chunk-BNULFLPC.js.map +0 -1
  75. package/dist/chunk-D7BZ6L4Z.cjs.map +0 -1
  76. package/dist/chunk-DBB47IAX.js.map +0 -1
  77. package/dist/chunk-JQO3EFLX.cjs.map +0 -1
  78. package/dist/chunk-LES7CZSC.cjs.map +0 -1
  79. package/dist/chunk-MUM6HKPT.js.map +0 -1
  80. package/dist/chunk-SOIZIH7F.js.map +0 -1
  81. /package/dist/{chunk-EFKAKU2X.js.map → chunk-66EVFQVL.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-JQO3EFLX.cjs","../src/components/ScrollArea/ScrollArea.tsx"],"names":[],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-JQO3EFLX.cjs","sourcesContent":[null,"'use client';\n\nimport { ScrollArea as ScrollAreaPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst scrollAreaVariants = cva('ddga-scroll-area', {\n variants: {\n orientation: {\n vertical: 'ddga-scroll-area--vertical',\n horizontal: 'ddga-scroll-area--horizontal',\n both: 'ddga-scroll-area--both',\n },\n },\n defaultVariants: {\n orientation: 'vertical',\n },\n});\n\nfunction warnMissingLabel(ariaLabel?: string, ariaLabelledby?: string) {\n if (process.env.NODE_ENV === 'production') return;\n if (ariaLabel || ariaLabelledby) return;\n // Warn on every render (dev only) — mirrors the Popover sibling's a11y warning.\n console.warn(\n '[dga/ScrollArea] <ScrollArea> has no accessible name. The scroll viewport is ' +\n 'keyboard-focusable; pass `aria-label` or `aria-labelledby` so screen-reader users ' +\n 'know what region they are scrolling. If the content is itself focusable (e.g. a list ' +\n 'of links) and you do not want a labelled region, pass `viewportProps={{ tabIndex: -1 }}`.',\n );\n}\n\ntype ScrollAreaOrientation = 'vertical' | 'horizontal' | 'both';\n\nexport interface ScrollAreaProps\n extends\n Omit<React.ComponentProps<typeof ScrollAreaPrimitive.Root>, 'asChild' | 'orientation'>,\n Omit<VariantProps<typeof scrollAreaVariants>, 'orientation'> {\n /** Which scrollbar(s) to render. Default `'vertical'`. */\n orientation?: ScrollAreaOrientation;\n /** Ref to the scrollable viewport — use for programmatic scrolling. */\n viewportRef?: React.Ref<HTMLDivElement>;\n /**\n * Extra props forwarded to the viewport element (use `viewportRef` for the ref).\n * To drop the extra tab stop when the scrolled content is itself fully focusable\n * (e.g. a list of links), pass `viewportProps={{ tabIndex: -1 }}`.\n */\n viewportProps?: Omit<React.ComponentProps<'div'>, 'ref'>;\n /** Names the scroll region. Warns (dev only) if neither this nor `aria-labelledby` is set. */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\n/**\n * Cross-browser, design-system-styled scroll container (wraps Radix ScrollArea).\n *\n * Set the bounding size (height / max-height) on the element via `className` /\n * `style` — without a bounded size nothing scrolls, exactly like native overflow.\n * The viewport is keyboard-focusable (`tabIndex={0}`) so keyboard users can scroll\n * with the arrow / Page keys; pass `aria-label` to name the region.\n *\n * Does not support `asChild`: it is a structural wrapper composing several Radix\n * parts, and the meaningful node — the viewport — is exposed via `viewportRef`.\n */\nexport function ScrollArea({\n className,\n orientation = 'vertical',\n type = 'hover',\n scrollHideDelay = 600,\n viewportRef,\n viewportProps,\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n ...props\n}: ScrollAreaProps) {\n warnMissingLabel(ariaLabel, ariaLabelledby);\n\n const hasLabel = Boolean(ariaLabel || ariaLabelledby);\n const showVertical = orientation === 'vertical' || orientation === 'both';\n const showHorizontal = orientation === 'horizontal' || orientation === 'both';\n\n const { className: viewportClassName, ...restViewportProps } = viewportProps ?? {};\n\n return (\n <ScrollAreaPrimitive.Root\n data-slot=\"scroll-area\"\n type={type}\n scrollHideDelay={scrollHideDelay}\n className={cn(scrollAreaVariants({ orientation }), className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport\n data-slot=\"scroll-area-viewport\"\n className={cn('ddga-scroll-area__viewport', viewportClassName)}\n ref={viewportRef}\n tabIndex={0}\n role={hasLabel ? 'region' : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n {...restViewportProps}\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n {showVertical ? (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation=\"vertical\"\n className=\"ddga-scroll-area__scrollbar\"\n >\n <ScrollAreaPrimitive.Thumb\n data-slot=\"scroll-area-thumb\"\n className=\"ddga-scroll-area__thumb\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n ) : null}\n {showHorizontal ? (\n <ScrollAreaPrimitive.Scrollbar\n data-slot=\"scroll-area-scrollbar\"\n orientation=\"horizontal\"\n className=\"ddga-scroll-area__scrollbar\"\n >\n <ScrollAreaPrimitive.Thumb\n data-slot=\"scroll-area-thumb\"\n className=\"ddga-scroll-area__thumb\"\n />\n </ScrollAreaPrimitive.Scrollbar>\n ) : null}\n {orientation === 'both' ? (\n <ScrollAreaPrimitive.Corner\n data-slot=\"scroll-area-corner\"\n className=\"ddga-scroll-area__corner\"\n />\n ) : null}\n </ScrollAreaPrimitive.Root>\n );\n}\n\nexport { scrollAreaVariants };\nexport type { ScrollAreaOrientation };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-LES7CZSC.cjs","../src/components/Sidebar/Sidebar.tsx"],"names":["value"],"mappings":"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","file":"/home/devdhaif/work/react/dga-dev/packages/react/dist/chunk-LES7CZSC.cjs","sourcesContent":[null,"'use client';\n\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Slot as SlotPrimitive } from 'radix-ui';\nimport { cn } from '../../utils/cn';\nimport { Drawer, DrawerContent } from '../Drawer';\nimport { PanelLeft } from '../../internal/icons';\nimport { SidebarContext, useSidebar, type SidebarContextValue } from './SidebarContext';\nimport { useIsMobile } from './useIsMobile';\n\n// ─── SidebarProvider ─── //\n\ninterface SidebarProviderProps extends React.ComponentProps<'div'> {\n /** Uncontrolled initial desktop state. Default true (expanded). */\n defaultOpen?: boolean;\n /** Controlled desktop open state. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Viewport width (px) below which the mobile Drawer engages. Default 768. */\n mobileBreakpoint?: number;\n /** Register Cmd/Ctrl+B to toggle. Default true. */\n keyboardShortcut?: boolean;\n}\n\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange,\n mobileBreakpoint = 768,\n keyboardShortcut = true,\n className,\n style,\n children,\n ...props\n}: SidebarProviderProps) {\n const isMobile = useIsMobile(mobileBreakpoint);\n const [openMobile, setOpenMobile] = useState(false);\n\n const isControlled = openProp !== undefined;\n const [openInternal, setOpenInternal] = useState(defaultOpen);\n const open = isControlled ? (openProp as boolean) : openInternal;\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (!isControlled) setOpenInternal(value);\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n const toggleSidebar = useCallback(() => {\n if (isMobile) {\n setOpenMobile((v) => !v);\n return;\n }\n if (isControlled) {\n onOpenChange?.(!open);\n } else {\n setOpenInternal((v) => !v);\n }\n }, [isMobile, isControlled, onOpenChange, open]);\n\n useEffect(() => {\n if (!keyboardShortcut) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key.toLowerCase() === 'b' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n toggleSidebar();\n }\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [keyboardShortcut, toggleSidebar]);\n\n const state: 'expanded' | 'collapsed' = open ? 'expanded' : 'collapsed';\n\n const value = useMemo<SidebarContextValue>(\n () => ({ state, open, setOpen, openMobile, setOpenMobile, isMobile, toggleSidebar }),\n [state, open, setOpen, openMobile, isMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={value}>\n <div\n data-slot=\"sidebar-wrapper\"\n className={cn('ddga-sidebar-wrapper', className)}\n style={style}\n {...props}\n >\n {children}\n </div>\n </SidebarContext.Provider>\n );\n}\n\n// ─── Sidebar (container) ─── //\n\ninterface SidebarProps extends React.ComponentProps<'div'> {\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'icon' | 'offcanvas' | 'none';\n /** Logical side; flips with dir. Default 'start'. */\n side?: 'start' | 'end';\n}\n\nfunction Sidebar({\n variant = 'sidebar',\n collapsible = 'icon',\n side = 'start',\n className,\n children,\n 'aria-label': ariaLabel = 'Sidebar',\n ...props\n}: SidebarProps) {\n const { isMobile, openMobile, setOpenMobile, state } = useSidebar();\n\n if (isMobile) {\n return (\n <Drawer open={openMobile} onOpenChange={setOpenMobile}>\n <DrawerContent\n side={side}\n size=\"sm\"\n aria-label={ariaLabel}\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n data-variant={variant}\n data-side={side}\n className={cn('ddga-sidebar', 'ddga-sidebar--mobile', className)}\n {...props}\n >\n {children}\n </DrawerContent>\n </Drawer>\n );\n }\n\n return (\n <aside\n data-slot=\"sidebar\"\n aria-label={ariaLabel}\n data-state={state}\n data-collapsible={collapsible}\n data-variant={variant}\n data-side={side}\n className={cn('ddga-sidebar', className)}\n {...props}\n >\n {children}\n </aside>\n );\n}\n\n// ─── Trigger / Rail / Inset ─── //\n\ninterface SidebarTriggerProps extends React.ComponentProps<'button'> {\n asChild?: boolean;\n}\n\nfunction SidebarTrigger({\n asChild,\n className,\n onClick,\n children,\n 'aria-label': ariaLabel = 'Toggle sidebar',\n ...props\n}: SidebarTriggerProps) {\n const { toggleSidebar, open, openMobile, isMobile } = useSidebar();\n const Comp = asChild ? SlotPrimitive.Slot : 'button';\n return (\n <Comp\n type={asChild ? undefined : 'button'}\n data-slot=\"sidebar-trigger\"\n // Don't override the child element's accessible name when asChild.\n aria-label={asChild ? undefined : ariaLabel}\n aria-haspopup={isMobile ? 'dialog' : undefined}\n aria-expanded={isMobile ? openMobile : open}\n className={cn('ddga-sidebar__trigger', className)}\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n toggleSidebar();\n }}\n {...props}\n >\n {children ?? <PanelLeft aria-hidden=\"true\" />}\n </Comp>\n );\n}\n\nfunction SidebarRail({\n className,\n 'aria-label': ariaLabel = 'Toggle sidebar',\n ...props\n}: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n return (\n <button\n type=\"button\"\n data-slot=\"sidebar-rail\"\n aria-label={ariaLabel}\n title={ariaLabel}\n tabIndex={-1}\n className={cn('ddga-sidebar__rail', className)}\n onClick={toggleSidebar}\n {...props}\n />\n );\n}\n\ninterface SidebarInsetProps extends React.ComponentProps<'main'> {\n asChild?: boolean;\n}\n\nfunction SidebarInset({ asChild, className, ...props }: SidebarInsetProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'main';\n return (\n <Comp data-slot=\"sidebar-inset\" className={cn('ddga-sidebar-inset', className)} {...props} />\n );\n}\n\n// ─── Structure ─── //\n\ntype SidebarSectionProps = React.ComponentProps<'div'> & { asChild?: boolean };\n\nfunction SidebarHeader({ asChild, className, ...props }: SidebarSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp data-slot=\"sidebar-header\" className={cn('ddga-sidebar__header', className)} {...props} />\n );\n}\n\nfunction SidebarContent({ asChild, className, ...props }: SidebarSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp\n data-slot=\"sidebar-content\"\n className={cn('ddga-sidebar__content', className)}\n {...props}\n />\n );\n}\n\nfunction SidebarFooter({ asChild, className, ...props }: SidebarSectionProps) {\n const Comp = asChild ? SlotPrimitive.Slot : 'div';\n return (\n <Comp data-slot=\"sidebar-footer\" className={cn('ddga-sidebar__footer', className)} {...props} />\n );\n}\n\nfunction SidebarSeparator({ className, ...props }: React.ComponentProps<'hr'>) {\n return (\n <hr\n data-slot=\"sidebar-separator\"\n className={cn('ddga-sidebar__separator', className)}\n {...props}\n />\n );\n}\n\n// ─── Exports ─── //\n\nexport { SidebarProvider };\nexport type { SidebarProviderProps };\n\nexport { Sidebar };\nexport type { SidebarProps };\n\nexport { SidebarTrigger, SidebarRail, SidebarInset };\nexport type { SidebarTriggerProps, SidebarInsetProps };\n\nexport { SidebarHeader, SidebarContent, SidebarFooter, SidebarSeparator };\nexport type { SidebarSectionProps };\n\nexport { useSidebar };\nexport type { SidebarContextValue };\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/TagInput/TagInput.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useState, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useFieldA11y, FieldMessage } from '../../field';\nimport { Badge, type BadgeProps } from '../Badge';\n\n// ─── 1. Variants (cva) ─── //\n\n// Applied to the *control* (the bordered box), not the raw <input> — the box\n// owns the border, sizing, focus ring and disabled/error styling so the chips\n// and the text input wrap inside the field. Mirrors Input's box, but the box\n// grows vertically as chips wrap (min-block-size, not a fixed height).\nconst tagInputVariants = cva('ddga-tag-input', {\n variants: {\n size: {\n sm: 'ddga-tag-input--sm',\n md: 'ddga-tag-input--md',\n lg: 'ddga-tag-input--lg',\n },\n error: {\n true: 'ddga-tag-input--error',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// ─── 2. Types ─── //\n\n// We own `value` / `defaultValue` (string[] tags, not strings), `onChange`\n// (fires with the tag array), and the design-system `size` variant — so they\n// are stripped from the native input props the rest are spread onto.\ntype NativeInputProps = Omit<\n React.ComponentProps<'input'>,\n 'value' | 'defaultValue' | 'onChange' | 'size'\n>;\n\ninterface TagInputProps\n extends NativeInputProps, Omit<VariantProps<typeof tagInputVariants>, 'error'> {\n /** Controlled tag list. */\n value?: string[];\n /** Uncontrolled initial tag list. */\n defaultValue?: string[];\n /** Fires with the full accepted tag set after every add/remove. */\n onChange?: (tags: string[]) => void;\n /** Visible field label, associated to the text input. */\n label?: ReactNode;\n /** Hint shown below the field. Hidden while an error message is showing. */\n helperText?: ReactNode;\n /** Message shown below the field when invalid. */\n errorMessage?: ReactNode;\n /** Marks the field invalid: sets `aria-invalid` and error styling. */\n error?: boolean;\n /** Caps the number of tags. Adds beyond the cap are no-ops. */\n max?: number;\n /** Allow the same tag more than once. Off → duplicates are rejected. */\n allowDuplicates?: boolean;\n /** Make duplicate detection case-sensitive. Default: case-insensitive. */\n caseSensitive?: boolean;\n /** Consumer gate run on each candidate tag. Return false to reject (draft kept). */\n validate?: (tag: string, tags: string[]) => boolean;\n /** Characters that commit the draft and split a paste. Newline always splits a paste. */\n delimiters?: string[];\n /** Badge variant used for the chips. */\n chipVariant?: BadgeProps['variant'];\n /** Accessible name for each chip's remove button. */\n removeLabel?: (tag: string) => string;\n /** Live-region text announced on add/remove (screen readers). */\n formatAnnouncement?: (tag: string, action: 'add' | 'remove') => string;\n}\n\n// ─── 3. Component ─── //\n\nfunction TagInput({\n id: externalId,\n value,\n defaultValue,\n onChange,\n label,\n helperText,\n errorMessage,\n error,\n size,\n disabled,\n placeholder,\n max,\n allowDuplicates = false,\n caseSensitive = false,\n validate,\n delimiters = [','],\n chipVariant = 'secondary',\n removeLabel = (tag) => `Remove ${tag}`,\n formatAnnouncement = (tag, action) => `${tag} ${action === 'add' ? 'added' : 'removed'}`,\n className,\n ...props\n}: TagInputProps) {\n const isControlled = value !== undefined;\n const [uncontrolledTags, setUncontrolledTags] = useState<string[]>(defaultValue ?? []);\n const tags = isControlled ? value : uncontrolledTags;\n\n const [draft, setDraft] = useState('');\n const [announcement, setAnnouncement] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { fieldId, errorId, helperId, hasError, hasErrorMessage, hasHelper, controlProps } =\n useFieldA11y({\n name: 'TagInput',\n id: externalId,\n label,\n error,\n errorMessage,\n helperText,\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'],\n });\n\n const commit = (next: string[]) => {\n if (!isControlled) setUncontrolledTags(next);\n onChange?.(next);\n };\n\n const norm = (t: string) => (caseSensitive ? t : t.toLowerCase());\n\n // Run raw fragments through the full accept pipeline (trim → drop-empty →\n // max cap → dedup → validate), appending the survivors. Only ever appends,\n // so the accepted set is `next.slice(current.length)`.\n const accept = (raw: string[], current: string[]): string[] => {\n let next = current;\n for (const fragment of raw) {\n const trimmed = fragment.trim();\n if (!trimmed) continue;\n if (max !== undefined && next.length >= max) break;\n if (!allowDuplicates && next.some((t) => norm(t) === norm(trimmed))) continue;\n if (validate && !validate(trimmed, next)) continue;\n next = [...next, trimmed];\n }\n return next;\n };\n\n const announceAdded = (added: string[]) => {\n if (added.length > 0) {\n setAnnouncement(added.map((t) => formatAnnouncement(t, 'add')).join(', '));\n }\n };\n\n const commitDraft = () => {\n const next = accept([draft], tags);\n if (next.length > tags.length) {\n commit(next);\n announceAdded(next.slice(tags.length));\n setDraft('');\n }\n // Rejected (dup / max / validate / empty): keep the draft so it can be fixed.\n };\n\n // Build a paste splitter from the delimiter chars + newlines. `-` is escaped\n // too (trailing in the class) so a delimiter like `-` can't form an invalid\n // character-class range (e.g. `['|','-']` → `[|-…]` would throw).\n const splitPaste = (text: string): string[] => {\n const escaped = delimiters.map((d) => d.replace(/[.*+?^${}()|[\\]\\\\-]/g, '\\\\$&'));\n const pattern = new RegExp(`[${escaped.join('')}\\\\n\\\\r]`);\n return text.split(pattern);\n };\n\n const removeTag = (index: number) => {\n const removed = tags[index];\n commit(tags.filter((_, i) => i !== index));\n setAnnouncement(formatAnnouncement(removed, 'remove'));\n inputRef.current?.focus();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n if (event.key === 'Enter') {\n // Always swallow Enter so it adds a tag instead of submitting the form.\n event.preventDefault();\n if (draft.trim()) commitDraft();\n } else if (delimiters.includes(event.key)) {\n event.preventDefault();\n if (draft.trim()) commitDraft();\n } else if (event.key === 'Backspace' && draft === '' && tags.length > 0) {\n event.preventDefault();\n removeTag(tags.length - 1);\n }\n };\n\n const handlePaste = (event: React.ClipboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n const text = event.clipboardData.getData('text');\n const fragments = splitPaste(text);\n // No delimiter in the pasted text → let it type normally into the draft.\n if (fragments.length <= 1) return;\n event.preventDefault();\n const next = accept(fragments, tags);\n if (next.length > tags.length) {\n commit(next);\n announceAdded(next.slice(tags.length));\n // Clear any in-progress draft so it isn't left stranded after the paste.\n setDraft('');\n }\n };\n\n // Clicking the box chrome (not a chip button or the input) focuses the input.\n const handleBoxMouseDown = (event: React.MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n if (target === inputRef.current || target.closest('button')) return;\n event.preventDefault();\n inputRef.current?.focus();\n };\n\n const chipSize: BadgeProps['size'] = size === 'lg' ? 'md' : 'sm';\n\n return (\n <div data-slot=\"tag-input-field\" className=\"ddga-field\">\n {label && (\n <label htmlFor={fieldId} className=\"ddga-tag-input__label\">\n {label}\n </label>\n )}\n <div\n data-slot=\"tag-input-control\"\n className={cn(tagInputVariants({ size, error: hasError }), className)}\n data-disabled={disabled || undefined}\n onMouseDown={disabled ? undefined : handleBoxMouseDown}\n >\n {tags.length > 0 && (\n <ul data-slot=\"tag-input-list\" className=\"ddga-tag-input__list\" role=\"list\">\n {tags.map((tag, index) => (\n <li\n // Tags can repeat (allowDuplicates) so the value alone is not a\n // stable key; pair it with the index.\n key={`${tag}-${index}`}\n data-slot=\"tag-input-item\"\n className=\"ddga-tag-input__item\"\n // `display:contents` on the list/item can drop the implicit\n // list semantics in some engines; re-assert them explicitly.\n role=\"listitem\"\n >\n <Badge\n variant={chipVariant}\n size={chipSize}\n // Controlled-open: the chip never self-hides — removal flows\n // through onChange so controlled consumers stay the source of truth.\n open\n dismissible={!disabled}\n onDismiss={() => removeTag(index)}\n closeLabel={removeLabel(tag)}\n >\n {tag}\n </Badge>\n </li>\n ))}\n </ul>\n )}\n <input\n // Spread consumer props first, then our a11y contract + handlers so\n // they cannot be clobbered.\n {...props}\n {...controlProps}\n ref={inputRef}\n data-slot=\"tag-input\"\n className=\"ddga-tag-input__field\"\n type=\"text\"\n value={draft}\n disabled={disabled}\n placeholder={tags.length === 0 ? placeholder : undefined}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n />\n </div>\n <div data-slot=\"tag-input-live\" className=\"ddga-sr-only\" role=\"status\" aria-live=\"polite\">\n {announcement}\n </div>\n {hasErrorMessage && (\n <FieldMessage id={errorId} variant=\"error\">\n {errorMessage}\n </FieldMessage>\n )}\n {hasHelper && (\n <FieldMessage id={helperId} variant=\"helper\">\n {helperText}\n </FieldMessage>\n )}\n </div>\n );\n}\n\n// ─── 4. Exports ─── //\n\nexport { TagInput, tagInputVariants };\nexport type { TagInputProps };\n"],"mappings":";;;;;;;;;;;;;;AAEA,SAAS,QAAQ,gBAAgC;AACjD,SAAS,WAA8B;AAuN/B,cAIF,YAJE;AA5MR,IAAM,mBAAmB,IAAI,kBAAkB;AAAA,EAC7C,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAgDD,SAAS,SAAS;AAAA,EAChB,IAAI;AAAA,EACJ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB;AAAA,EACA,aAAa,CAAC,GAAG;AAAA,EACjB,cAAc;AAAA,EACd,cAAc,CAAC,QAAQ,UAAU,GAAG;AAAA,EACpC,qBAAqB,CAAC,KAAK,WAAW,GAAG,GAAG,IAAI,WAAW,QAAQ,UAAU,SAAS;AAAA,EACtF;AAAA,EACA,GAAG;AACL,GAAkB;AAChB,QAAM,eAAe,UAAU;AAC/B,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAmB,gBAAgB,CAAC,CAAC;AACrF,QAAM,OAAO,eAAe,QAAQ;AAEpC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,EAAE;AACnD,QAAM,WAAW,OAAyB,IAAI;AAE9C,QAAM,EAAE,SAAS,SAAS,UAAU,UAAU,iBAAiB,WAAW,aAAa,IACrF,aAAa;AAAA,IACX,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,MAAM,YAAY;AAAA,IAChC,mBAAmB,MAAM,iBAAiB;AAAA,EAC5C,CAAC;AAEH,QAAM,SAAS,CAAC,SAAmB;AACjC,QAAI,CAAC,aAAc,qBAAoB,IAAI;AAC3C,eAAW,IAAI;AAAA,EACjB;AAEA,QAAM,OAAO,CAAC,MAAe,gBAAgB,IAAI,EAAE,YAAY;AAK/D,QAAM,SAAS,CAAC,KAAe,YAAgC;AAC7D,QAAI,OAAO;AACX,eAAW,YAAY,KAAK;AAC1B,YAAM,UAAU,SAAS,KAAK;AAC9B,UAAI,CAAC,QAAS;AACd,UAAI,QAAQ,UAAa,KAAK,UAAU,IAAK;AAC7C,UAAI,CAAC,mBAAmB,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,EAAG;AACrE,UAAI,YAAY,CAAC,SAAS,SAAS,IAAI,EAAG;AAC1C,aAAO,CAAC,GAAG,MAAM,OAAO;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,CAAC,UAAoB;AACzC,QAAI,MAAM,SAAS,GAAG;AACpB,sBAAgB,MAAM,IAAI,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,QAAM,cAAc,MAAM;AACxB,UAAM,OAAO,OAAO,CAAC,KAAK,GAAG,IAAI;AACjC,QAAI,KAAK,SAAS,KAAK,QAAQ;AAC7B,aAAO,IAAI;AACX,oBAAc,KAAK,MAAM,KAAK,MAAM,CAAC;AACrC,eAAS,EAAE;AAAA,IACb;AAAA,EAEF;AAKA,QAAM,aAAa,CAAC,SAA2B;AAC7C,UAAM,UAAU,WAAW,IAAI,CAAC,MAAM,EAAE,QAAQ,wBAAwB,MAAM,CAAC;AAC/E,UAAM,UAAU,IAAI,OAAO,IAAI,QAAQ,KAAK,EAAE,CAAC,SAAS;AACxD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B;AAEA,QAAM,YAAY,CAAC,UAAkB;AACnC,UAAM,UAAU,KAAK,KAAK;AAC1B,WAAO,KAAK,OAAO,CAAC,GAAG,MAAM,MAAM,KAAK,CAAC;AACzC,oBAAgB,mBAAmB,SAAS,QAAQ,CAAC;AACrD,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,QAAM,gBAAgB,CAAC,UAAiD;AACtE,QAAI,SAAU;AACd,QAAI,MAAM,QAAQ,SAAS;AAEzB,YAAM,eAAe;AACrB,UAAI,MAAM,KAAK,EAAG,aAAY;AAAA,IAChC,WAAW,WAAW,SAAS,MAAM,GAAG,GAAG;AACzC,YAAM,eAAe;AACrB,UAAI,MAAM,KAAK,EAAG,aAAY;AAAA,IAChC,WAAW,MAAM,QAAQ,eAAe,UAAU,MAAM,KAAK,SAAS,GAAG;AACvE,YAAM,eAAe;AACrB,gBAAU,KAAK,SAAS,CAAC;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,cAAc,CAAC,UAAkD;AACrE,QAAI,SAAU;AACd,UAAM,OAAO,MAAM,cAAc,QAAQ,MAAM;AAC/C,UAAM,YAAY,WAAW,IAAI;AAEjC,QAAI,UAAU,UAAU,EAAG;AAC3B,UAAM,eAAe;AACrB,UAAM,OAAO,OAAO,WAAW,IAAI;AACnC,QAAI,KAAK,SAAS,KAAK,QAAQ;AAC7B,aAAO,IAAI;AACX,oBAAc,KAAK,MAAM,KAAK,MAAM,CAAC;AAErC,eAAS,EAAE;AAAA,IACb;AAAA,EACF;AAGA,QAAM,qBAAqB,CAAC,UAA4C;AACtE,UAAM,SAAS,MAAM;AACrB,QAAI,WAAW,SAAS,WAAW,OAAO,QAAQ,QAAQ,EAAG;AAC7D,UAAM,eAAe;AACrB,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,QAAM,WAA+B,SAAS,OAAO,OAAO;AAE5D,SACE,qBAAC,SAAI,aAAU,mBAAkB,WAAU,cACxC;AAAA,aACC,oBAAC,WAAM,SAAS,SAAS,WAAU,yBAChC,iBACH;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,WAAW,GAAG,iBAAiB,EAAE,MAAM,OAAO,SAAS,CAAC,GAAG,SAAS;AAAA,QACpE,iBAAe,YAAY;AAAA,QAC3B,aAAa,WAAW,SAAY;AAAA,QAEnC;AAAA,eAAK,SAAS,KACb,oBAAC,QAAG,aAAU,kBAAiB,WAAU,wBAAuB,MAAK,QAClE,eAAK,IAAI,CAAC,KAAK,UACd;AAAA,YAAC;AAAA;AAAA,cAIC,aAAU;AAAA,cACV,WAAU;AAAA,cAGV,MAAK;AAAA,cAEL;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS;AAAA,kBACT,MAAM;AAAA,kBAGN,MAAI;AAAA,kBACJ,aAAa,CAAC;AAAA,kBACd,WAAW,MAAM,UAAU,KAAK;AAAA,kBAChC,YAAY,YAAY,GAAG;AAAA,kBAE1B;AAAA;AAAA,cACH;AAAA;AAAA,YAlBK,GAAG,GAAG,IAAI,KAAK;AAAA,UAmBtB,CACD,GACH;AAAA,UAEF;AAAA,YAAC;AAAA;AAAA,cAGE,GAAG;AAAA,cACH,GAAG;AAAA,cACJ,KAAK;AAAA,cACL,aAAU;AAAA,cACV,WAAU;AAAA,cACV,MAAK;AAAA,cACL,OAAO;AAAA,cACP;AAAA,cACA,aAAa,KAAK,WAAW,IAAI,cAAc;AAAA,cAC/C,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA,cAChD,WAAW;AAAA,cACX,SAAS;AAAA;AAAA,UACX;AAAA;AAAA;AAAA,IACF;AAAA,IACA,oBAAC,SAAI,aAAU,kBAAiB,WAAU,gBAAe,MAAK,UAAS,aAAU,UAC9E,wBACH;AAAA,IACC,mBACC,oBAAC,gBAAa,IAAI,SAAS,SAAQ,SAChC,wBACH;AAAA,IAED,aACC,oBAAC,gBAAa,IAAI,UAAU,SAAQ,UACjC,sBACH;AAAA,KAEJ;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Combobox/Combobox.tsx"],"sourcesContent":["'use client';\n\nimport {\n Children,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useId,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\nimport { Command } from 'cmdk';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { Check, ChevronDown } from '../../internal/icons';\nimport { useFieldA11y, FieldMessage } from '../../field';\nimport { DgaContext } from '../../providers/DgaContext';\n\n// ─── 1. Variants ─── //\n\n// Trigger height matches Input/Select so a Combobox lines up in a form row.\nconst comboboxTriggerVariants = cva('ddga-combobox-trigger', {\n variants: {\n size: {\n sm: 'ddga-combobox-trigger--sm',\n md: 'ddga-combobox-trigger--md',\n },\n error: {\n true: 'ddga-combobox-trigger--error',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n});\n\n// Keep a no-op `comboboxVariants` for parity with the project's barrel\n// convention (every component re-exports a *Variants from its barrel).\nconst comboboxVariants = comboboxTriggerVariants;\n\n// ─── 2. Context (bridges Root state to Items + label lookup) ─── //\n//\n// Items register `value → label` on mount so the trigger can render the\n// selected option's human-readable label without consumers having to thread\n// a separate `displayValue` function in the common case. Async-loaded\n// options can still override via `<Combobox getLabel={...}>` below.\n\ninterface ComboboxContextValue {\n value?: string;\n select: (value: string) => void;\n}\n\nconst ComboboxContext = createContext<ComboboxContextValue | null>(null);\n\nfunction useComboboxContext(component: string): ComboboxContextValue {\n const ctx = useContext(ComboboxContext);\n if (!ctx) {\n throw new Error(`<${component}> must be rendered inside <Combobox>.`);\n }\n return ctx;\n}\n\n// ─── 3. Types ─── //\n\ninterface ComboboxProps extends VariantProps<typeof comboboxTriggerVariants> {\n /** Currently selected option value (controlled). */\n value?: string;\n /** Initial value when uncontrolled. */\n defaultValue?: string;\n /** Fires whenever the selection changes (controlled or uncontrolled). */\n onValueChange?: (value: string) => void;\n /** Controlled popover open state. */\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Visible label above the trigger. */\n label?: ReactNode;\n /** Hint shown below the trigger when there's no error. */\n helperText?: ReactNode;\n /** Message shown below the trigger when `error` is true. */\n errorMessage?: ReactNode;\n /** Marks the field invalid — sets `aria-invalid` and the error border. */\n error?: boolean;\n /** Marks the field required — adds the asterisk + `aria-required`. */\n required?: boolean;\n /** Disables the trigger entirely. */\n disabled?: boolean;\n /** Placeholder shown in the trigger when no value is selected. */\n placeholder?: ReactNode;\n /** Placeholder for the search input inside the panel. Defaults to `\"Search…\"`. */\n searchPlaceholder?: string;\n /** Shown when no item matches the search query. Defaults to `\"No results.\"`. */\n emptyMessage?: ReactNode;\n /**\n * Override the trigger label resolver — useful when items are loaded async\n * after the value is set, or when the trigger should show a richer label\n * than the item's rendered children. Receives the current value, returns\n * the node to display. Falls back to the registered item's label.\n */\n getLabel?: (value: string) => ReactNode;\n /** Caller-supplied id for the trigger; falls back to a generated one. */\n id?: string;\n /** Forwarded to the trigger (the focusable button). */\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n /** `<ComboboxItem>` (+ optional Group / Separator) children. */\n children: ReactNode;\n}\n\ninterface ComboboxItemProps extends Omit<\n React.ComponentProps<typeof Command.Item>,\n 'value' | 'onSelect'\n> {\n /** Stable value for filtering + selection. */\n value: string;\n /** Extra search terms cmdk should match against the input. */\n keywords?: string[];\n /** Disable this item from selection. */\n disabled?: boolean;\n /** Optional select handler — fires alongside the root's `onValueChange`. */\n onSelect?: (value: string) => void;\n}\n\ninterface ComboboxGroupProps extends React.ComponentProps<typeof Command.Group> {\n /** Group heading rendered above its items. */\n heading?: ReactNode;\n}\n\ntype ComboboxSeparatorProps = React.ComponentProps<typeof Command.Separator>;\n\n// ─── 4. Root ─── //\n\nfunction Combobox({\n value: controlledValue,\n defaultValue,\n onValueChange,\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n label,\n helperText,\n errorMessage,\n error,\n required,\n disabled,\n size,\n placeholder,\n searchPlaceholder = 'Search…',\n emptyMessage = 'No results.',\n getLabel,\n id: externalId,\n className,\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n}: ComboboxProps) {\n // Uncontrolled fallbacks.\n const [internalValue, setInternalValue] = useState<string | undefined>(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\n const isOpenControlled = controlledOpen !== undefined;\n const open = isOpenControlled ? controlledOpen : internalOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isOpenControlled) setInternalOpen(next);\n onOpenChange?.(next);\n },\n [isOpenControlled, onOpenChange],\n );\n\n const select = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onValueChange?.(next);\n setOpen(false);\n },\n [isControlled, onValueChange, setOpen],\n );\n\n const ctx = useMemo<ComboboxContextValue>(() => ({ value, select }), [value, select]);\n\n // Walk `children` once to build a value → label map. Synchronous so the\n // trigger shows the right label on first render — registration via\n // useEffect would only fire when items mount, and items don't mount until\n // the popover opens (Radix Portal lazy-mounts). Recurses through\n // `ComboboxGroup` so grouped items still resolve. Bare children only —\n // doesn't dive into arbitrary nested DOM.\n const itemLabels = useMemo<Map<string, ReactNode>>(() => {\n const map = new Map<string, ReactNode>();\n const visit = (nodes: ReactNode): void => {\n Children.forEach(nodes, (child) => {\n if (!isValidElement(child)) return;\n const childProps = child.props as { value?: unknown; children?: ReactNode };\n if (typeof childProps.value === 'string') {\n map.set(childProps.value, childProps.children);\n } else if (childProps.children) {\n visit(childProps.children);\n }\n });\n };\n visit(children);\n return map;\n }, [children]);\n\n // Field a11y wiring — same primitive as Select.\n const { fieldId, errorId, helperId, hasError, hasErrorMessage, hasHelper, controlProps } =\n useFieldA11y({\n name: 'Combobox',\n id: externalId,\n label,\n error,\n errorMessage,\n helperText,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n });\n\n // Portal anchored to DgaProvider root (mirrors Select/Modal/DropdownMenu).\n const providerCtx = useContext(DgaContext);\n // Body-mounted portal target (see DgaProvider) — escapes ancestor\n // clipping while keeping theme inheritance via mirrored data-theme/vars.\n const portalContainer = providerCtx?.portalEl ?? providerCtx?.rootEl ?? undefined;\n\n // Trigger label — explicit override wins; otherwise look up from the\n // children-derived map; otherwise fall back to the placeholder.\n const triggerLabel = useMemo<ReactNode>(() => {\n if (value === undefined) return null;\n if (getLabel) return getLabel(value);\n return itemLabels.get(value) ?? null;\n }, [value, getLabel, itemLabels]);\n\n const searchId = useId();\n\n return (\n <ComboboxContext.Provider value={ctx}>\n <div data-slot=\"combobox-field\" className=\"ddga-field\">\n {label && (\n <label htmlFor={fieldId} className=\"ddga-combobox__label\">\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"ddga-combobox__required\">\n *\n </span>\n )}\n </label>\n )}\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen}>\n <PopoverPrimitive.Trigger asChild>\n <button\n type=\"button\"\n {...controlProps}\n // Trigger stays a plain button — Radix Popover.Trigger sets\n // aria-haspopup + aria-expanded + aria-controls so AT users\n // hear \"Pick a fruit, button, has popup\". We declared role=\"combobox\"\n // earlier but it requires aria-controls pointing to the listbox,\n // which Radix wires for dialog semantics — axe flagged the mismatch.\n aria-required={required || undefined}\n disabled={disabled}\n data-slot=\"combobox-trigger\"\n className={cn(comboboxTriggerVariants({ size, error: hasError }), className)}\n >\n <span className=\"ddga-combobox__value\">\n {triggerLabel ?? <span className=\"ddga-combobox__placeholder\">{placeholder}</span>}\n </span>\n <ChevronDown aria-hidden=\"true\" className=\"ddga-combobox__icon\" />\n </button>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal container={portalContainer}>\n <PopoverPrimitive.Content\n data-slot=\"combobox-content\"\n className=\"ddga-combobox-content\"\n sideOffset={4}\n align=\"start\"\n // Popover.Content is role=\"dialog\" → axe requires an accessible\n // name. Use the field label when it's a string; otherwise fall\n // back to a generic \"Options\" so a11y stays valid even when the\n // consumer composes a rich React node as the label.\n aria-label={ariaLabel ?? (typeof label === 'string' ? label : 'Options')}\n aria-labelledby={ariaLabelledBy}\n // Match trigger width so the panel doesn't visually float over.\n style={{ inlineSize: 'var(--radix-popover-trigger-width)' }}\n onOpenAutoFocus={(event) => {\n // cmdk handles its own focus management (Input gets focused on\n // mount via autoFocus below). Prevent Radix from also moving\n // focus or we lose the search input as the auto-focus target.\n event.preventDefault();\n }}\n >\n <Command\n id={searchId}\n data-slot=\"combobox-command\"\n className=\"ddga-combobox-command\"\n // cmdk's default filter matches if the input is a substring of\n // the item value OR any keyword — fine for our v1 use case.\n >\n <Command.Input\n autoFocus\n placeholder={searchPlaceholder}\n data-slot=\"combobox-input\"\n className=\"ddga-combobox-input\"\n />\n <Command.List data-slot=\"combobox-list\" className=\"ddga-combobox-list\">\n <Command.Empty data-slot=\"combobox-empty\" className=\"ddga-combobox-empty\">\n {emptyMessage}\n </Command.Empty>\n {children}\n </Command.List>\n </Command>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n {hasErrorMessage && (\n <FieldMessage id={errorId} variant=\"error\">\n {errorMessage}\n </FieldMessage>\n )}\n {hasHelper && (\n <FieldMessage id={helperId} variant=\"helper\">\n {helperText}\n </FieldMessage>\n )}\n </div>\n </ComboboxContext.Provider>\n );\n}\n\n// ─── 5. Item ─── //\n\nfunction ComboboxItem({\n value,\n keywords,\n disabled,\n onSelect,\n className,\n children,\n ...props\n}: ComboboxItemProps) {\n const { value: selectedValue, select } = useComboboxContext('ComboboxItem');\n\n const isSelected = selectedValue === value;\n\n return (\n <Command.Item\n value={value}\n keywords={keywords}\n disabled={disabled}\n onSelect={(v) => {\n onSelect?.(v);\n select(v);\n }}\n data-slot=\"combobox-item\"\n // cmdk owns `data-selected` for keyboard highlight — use a separate\n // attribute for the chosen value so the two don't collide.\n data-active={isSelected ? '' : undefined}\n className={cn('ddga-combobox-item', className)}\n {...props}\n >\n <span className=\"ddga-combobox-item__check\" aria-hidden=\"true\">\n {isSelected ? <Check /> : null}\n </span>\n <span className=\"ddga-combobox-item__label\">{children}</span>\n </Command.Item>\n );\n}\n\n// ─── 6. Group + Separator (cmdk passthroughs) ─── //\n\nfunction ComboboxGroup({ className, heading, ...props }: ComboboxGroupProps) {\n return (\n <Command.Group\n heading={heading}\n data-slot=\"combobox-group\"\n className={cn('ddga-combobox-group', className)}\n {...props}\n />\n );\n}\n\nfunction ComboboxSeparator({ className, ...props }: ComboboxSeparatorProps) {\n return (\n <Command.Separator\n data-slot=\"combobox-separator\"\n className={cn('ddga-combobox-separator', className)}\n {...props}\n />\n );\n}\n\n// ─── 7. Exports ─── //\n\nexport {\n Combobox,\n ComboboxItem,\n ComboboxGroup,\n ComboboxSeparator,\n comboboxTriggerVariants,\n comboboxVariants,\n};\nexport type { ComboboxProps, ComboboxItemProps, ComboboxGroupProps, ComboboxSeparatorProps };\n"],"mappings":"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","names":[]}