jaci-ui 0.9.4 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +11 -1
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -1
  4. package/dist/components/accordion/accordion.cjs.map +1 -1
  5. package/dist/components/accordion/accordion.js.map +1 -1
  6. package/dist/components/alert/alert.cjs.map +1 -1
  7. package/dist/components/alert/alert.js.map +1 -1
  8. package/dist/components/alert-dialog/alert-dialog.cjs.map +1 -1
  9. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  10. package/dist/components/aspect-ratio/aspect-ratio.cjs.map +1 -1
  11. package/dist/components/avatar/avatar.cjs.map +1 -1
  12. package/dist/components/avatar/avatar.js.map +1 -1
  13. package/dist/components/breadcrumbs/breadcrumbs.cjs.map +1 -1
  14. package/dist/components/button/button.cjs +1 -0
  15. package/dist/components/button/button.cjs.map +1 -1
  16. package/dist/components/button/button.d.cts +2 -1
  17. package/dist/components/button/button.d.ts +2 -1
  18. package/dist/components/button/button.js +1 -0
  19. package/dist/components/button/button.js.map +1 -1
  20. package/dist/components/button-group/button-group.cjs.map +1 -1
  21. package/dist/components/calendar/calendar.cjs +4 -6
  22. package/dist/components/calendar/calendar.cjs.map +1 -1
  23. package/dist/components/calendar/calendar.js +4 -6
  24. package/dist/components/calendar/calendar.js.map +1 -1
  25. package/dist/components/card/card.cjs.map +1 -1
  26. package/dist/components/carousel/carousel.cjs.map +1 -1
  27. package/dist/components/carousel/carousel.js.map +1 -1
  28. package/dist/components/checkbox-group/checkbox-group.cjs +7 -3
  29. package/dist/components/checkbox-group/checkbox-group.cjs.map +1 -1
  30. package/dist/components/checkbox-group/checkbox-group.js +7 -3
  31. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  32. package/dist/components/code/code.cjs.map +1 -1
  33. package/dist/components/code/code.js.map +1 -1
  34. package/dist/components/collapsible/collapsible.cjs.map +1 -1
  35. package/dist/components/collapsible/collapsible.js.map +1 -1
  36. package/dist/components/color-picker/color-picker.cjs.map +1 -1
  37. package/dist/components/color-picker/color-picker.js.map +1 -1
  38. package/dist/components/color-picker/color-utils.cjs +5 -3
  39. package/dist/components/color-picker/color-utils.cjs.map +1 -1
  40. package/dist/components/color-picker/color-utils.js +5 -3
  41. package/dist/components/color-picker/color-utils.js.map +1 -1
  42. package/dist/components/color-swatch/color-swatch.cjs.map +1 -1
  43. package/dist/components/combobox/combobox.cjs +2 -1
  44. package/dist/components/combobox/combobox.cjs.map +1 -1
  45. package/dist/components/combobox/combobox.js +2 -1
  46. package/dist/components/combobox/combobox.js.map +1 -1
  47. package/dist/components/command/command.cjs.map +1 -1
  48. package/dist/components/command/command.js.map +1 -1
  49. package/dist/components/context-menu/context-menu.cjs.map +1 -1
  50. package/dist/components/context-menu/context-menu.d.cts +2 -2
  51. package/dist/components/context-menu/context-menu.d.ts +2 -2
  52. package/dist/components/controls/checkbox.cjs.map +1 -1
  53. package/dist/components/controls/checkbox.js.map +1 -1
  54. package/dist/components/controls/input.cjs.map +1 -1
  55. package/dist/components/controls/input.js.map +1 -1
  56. package/dist/components/controls/radio.cjs.map +1 -1
  57. package/dist/components/controls/switch.cjs.map +1 -1
  58. package/dist/components/controls/switch.js.map +1 -1
  59. package/dist/components/controls/textarea.cjs.map +1 -1
  60. package/dist/components/controls/textarea.js.map +1 -1
  61. package/dist/components/copyable/copyable.cjs.map +1 -1
  62. package/dist/components/copyable/copyable.js.map +1 -1
  63. package/dist/components/data-toolbar/data-toolbar.cjs.map +1 -1
  64. package/dist/components/data-toolbar/data-toolbar.js.map +1 -1
  65. package/dist/components/data-view/data-view.cjs.map +1 -1
  66. package/dist/components/date-picker/date-picker.cjs +4 -7
  67. package/dist/components/date-picker/date-picker.cjs.map +1 -1
  68. package/dist/components/date-picker/date-picker.js +4 -7
  69. package/dist/components/date-picker/date-picker.js.map +1 -1
  70. package/dist/components/date-range-picker/date-range-picker.cjs +4 -6
  71. package/dist/components/date-range-picker/date-range-picker.cjs.map +1 -1
  72. package/dist/components/date-range-picker/date-range-picker.js +4 -6
  73. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  74. package/dist/components/dialog/dialog.cjs.map +1 -1
  75. package/dist/components/dialog/dialog.js.map +1 -1
  76. package/dist/components/download-trigger/download-trigger.cjs.map +1 -1
  77. package/dist/components/drawer/drawer.cjs.map +1 -1
  78. package/dist/components/drawer/drawer.js.map +1 -1
  79. package/dist/components/empty-state/empty-state.cjs.map +1 -1
  80. package/dist/components/feedback/badge.cjs.map +1 -1
  81. package/dist/components/field/field.cjs.map +1 -1
  82. package/dist/components/field/field.js.map +1 -1
  83. package/dist/components/fieldset/fieldset.cjs.map +1 -1
  84. package/dist/components/figure/figure.cjs.map +1 -1
  85. package/dist/components/figure/figure.js.map +1 -1
  86. package/dist/components/form/form.cjs.map +1 -1
  87. package/dist/components/form/form.js.map +1 -1
  88. package/dist/components/icon-button/icon-button.cjs.map +1 -1
  89. package/dist/components/icon-button/icon-button.js.map +1 -1
  90. package/dist/components/image/image.cjs.map +1 -1
  91. package/dist/components/image/image.js.map +1 -1
  92. package/dist/components/input-group/input-group.cjs.map +1 -1
  93. package/dist/components/kbd/kbd.cjs.map +1 -1
  94. package/dist/components/layout/index.cjs.map +1 -1
  95. package/dist/components/list/list.cjs.map +1 -1
  96. package/dist/components/menu/menu.cjs.map +1 -1
  97. package/dist/components/menu/menu.d.cts +2 -2
  98. package/dist/components/menu/menu.d.ts +2 -2
  99. package/dist/components/menubar/menubar.cjs.map +1 -1
  100. package/dist/components/menubar/menubar.d.cts +2 -2
  101. package/dist/components/menubar/menubar.d.ts +2 -2
  102. package/dist/components/menubar/menubar.js.map +1 -1
  103. package/dist/components/meter/meter.cjs.map +1 -1
  104. package/dist/components/meter/meter.js.map +1 -1
  105. package/dist/components/navigation/navigation.cjs.map +1 -1
  106. package/dist/components/navigation/navigation.js.map +1 -1
  107. package/dist/components/navigation-menu/navigation-menu.cjs.map +1 -1
  108. package/dist/components/navigation-menu/navigation-menu.js.map +1 -1
  109. package/dist/components/number-field/number-field.cjs +2 -1
  110. package/dist/components/number-field/number-field.cjs.map +1 -1
  111. package/dist/components/number-field/number-field.js +2 -1
  112. package/dist/components/number-field/number-field.js.map +1 -1
  113. package/dist/components/option-selector/option-selector.cjs.map +1 -1
  114. package/dist/components/option-selector/option-selector.js.map +1 -1
  115. package/dist/components/pagination/pagination.cjs.map +1 -1
  116. package/dist/components/pagination/pagination.js.map +1 -1
  117. package/dist/components/pin-input/pin-input.cjs.map +1 -1
  118. package/dist/components/pin-input/pin-input.js.map +1 -1
  119. package/dist/components/popover/popover.cjs.map +1 -1
  120. package/dist/components/popover/popover.js.map +1 -1
  121. package/dist/components/progress/progress.cjs.map +1 -1
  122. package/dist/components/progress/progress.js.map +1 -1
  123. package/dist/components/qr-code/qr-code.cjs.map +1 -1
  124. package/dist/components/qr-code/qr-code.js.map +1 -1
  125. package/dist/components/quote/quote.cjs.map +1 -1
  126. package/dist/components/quote/quote.js.map +1 -1
  127. package/dist/components/radio-group/radio-group.cjs +7 -3
  128. package/dist/components/radio-group/radio-group.cjs.map +1 -1
  129. package/dist/components/radio-group/radio-group.js +7 -3
  130. package/dist/components/radio-group/radio-group.js.map +1 -1
  131. package/dist/components/range-slider/range-slider.cjs.map +1 -1
  132. package/dist/components/range-slider/range-slider.js.map +1 -1
  133. package/dist/components/scroll-area/scroll-area.cjs.map +1 -1
  134. package/dist/components/select/select.cjs.map +1 -1
  135. package/dist/components/select/select.js.map +1 -1
  136. package/dist/components/sidebar/sidebar.cjs.map +1 -1
  137. package/dist/components/sidebar/sidebar.js.map +1 -1
  138. package/dist/components/skeleton/skeleton.cjs.map +1 -1
  139. package/dist/components/slider/slider.cjs.map +1 -1
  140. package/dist/components/slider/slider.js.map +1 -1
  141. package/dist/components/spacer/spacer.cjs.map +1 -1
  142. package/dist/components/stat/stat.cjs.map +1 -1
  143. package/dist/components/stat/stat.js.map +1 -1
  144. package/dist/components/stepper/stepper.cjs +2 -1
  145. package/dist/components/stepper/stepper.cjs.map +1 -1
  146. package/dist/components/stepper/stepper.js +2 -1
  147. package/dist/components/stepper/stepper.js.map +1 -1
  148. package/dist/components/table/table.cjs.map +1 -1
  149. package/dist/components/table/table.js.map +1 -1
  150. package/dist/components/tabs/tabs.cjs.map +1 -1
  151. package/dist/components/tabs/tabs.js.map +1 -1
  152. package/dist/components/tags-input/tags-input.cjs +10 -9
  153. package/dist/components/tags-input/tags-input.cjs.map +1 -1
  154. package/dist/components/tags-input/tags-input.js +10 -9
  155. package/dist/components/tags-input/tags-input.js.map +1 -1
  156. package/dist/components/toast/toast.cjs.map +1 -1
  157. package/dist/components/toast/toast.js.map +1 -1
  158. package/dist/components/toggle/toggle.cjs.map +1 -1
  159. package/dist/components/toggle-group/toggle-group.cjs.map +1 -1
  160. package/dist/components/toolbar/toolbar.cjs.map +1 -1
  161. package/dist/components/tooltip/tooltip.cjs.map +1 -1
  162. package/dist/components/tree-view/tree-view.cjs.map +1 -1
  163. package/dist/components/tree-view/tree-view.js.map +1 -1
  164. package/dist/components/typography/heading.cjs.map +1 -1
  165. package/dist/components/typography/link.cjs.map +1 -1
  166. package/dist/components/typography/paragraph.cjs.map +1 -1
  167. package/dist/components/typography/text.cjs.map +1 -1
  168. package/dist/components/upload/upload.cjs +2 -2
  169. package/dist/components/upload/upload.cjs.map +1 -1
  170. package/dist/components/upload/upload.js +2 -2
  171. package/dist/components/upload/upload.js.map +1 -1
  172. package/dist/components/visually-hidden/visually-hidden.cjs.map +1 -1
  173. package/dist/panda-preset.cjs.map +1 -1
  174. package/dist/styles/theme.cjs +18 -18
  175. package/dist/styles/theme.cjs.map +1 -1
  176. package/dist/styles/theme.js +18 -18
  177. package/dist/styles/theme.js.map +1 -1
  178. package/dist/styles.css +12 -21
  179. package/dist/theme/theme-provider.cjs.map +1 -1
  180. package/dist/theme/theme-provider.js.map +1 -1
  181. package/dist/theme/theme-scope.cjs.map +1 -1
  182. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { table } from \"../../styled-system/recipes\";\n\nexport type TableSortDirection = \"none\" | \"ascending\" | \"descending\";\nexport type TableDensity = \"compact\" | \"comfortable\";\nexport type TableSelectionMode = \"none\" | \"single\" | \"multiple\";\nexport type TableStatus = \"idle\" | \"loading\" | \"empty\" | \"error\" | \"ready\";\nexport type TableAlignment = \"start\" | \"center\" | \"end\";\nexport type TableHideBelow = \"sm\" | \"md\" | \"lg\";\n\nexport interface TableSortState {\n id: string;\n direction: Exclude<TableSortDirection, \"none\">;\n}\n\ninterface TableRowRecord {\n disabled: boolean;\n}\n\ninterface TableContextValue {\n allSelected: boolean;\n indeterminate: boolean;\n isRowSelected: (id: string) => boolean;\n registerRow: (id: string, row: TableRowRecord) => () => void;\n requestSort: (id: string, direction?: TableSortDirection) => void;\n selectedRowIds: ReadonlySet<string>;\n selectionMode: TableSelectionMode;\n toggleAll: (checked: boolean) => void;\n toggleRow: (id: string, checked: boolean) => void;\n sort: TableSortState | null;\n status: TableStatus;\n}\n\ninterface TableRowContextValue {\n id: string;\n selectionDisabled: boolean;\n}\n\ntype TableSection = \"head\" | \"body\" | \"foot\";\n\nconst TableContext = createContext<TableContextValue | null>(null);\nconst TableRowContext = createContext<TableRowContextValue | null>(null);\nconst TableSectionContext = createContext<TableSection>(\"body\");\n\nfunction useTableContext() {\n return useContext(TableContext);\n}\n\nfunction useRequiredTableContext() {\n const context = useTableContext();\n if (!context) throw new Error(\"Table parts must be rendered inside Table.Root.\");\n return context;\n}\n\nfunction useTableRowContext() {\n return useContext(TableRowContext);\n}\n\nfunction cycleSortDirection(direction: TableSortDirection): TableSortDirection {\n if (direction === \"none\") return \"ascending\";\n if (direction === \"ascending\") return \"descending\";\n return \"none\";\n}\n\nexport interface TableContainerProps extends ComponentPropsWithoutRef<\"div\"> {}\n\nexport const TableContainer = forwardRef<HTMLDivElement, TableContainerProps>(\n function TableContainer({ className, ...props }, ref) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx(table().container, className)}\n data-jaci-component=\"table\"\n data-slot=\"table-container\"\n />\n );\n },\n);\n\nexport interface TableRootProps extends ComponentPropsWithoutRef<\"table\"> {\n bordered?: boolean;\n density?: TableDensity;\n defaultSelectedRowIds?: readonly string[];\n defaultSort?: TableSortState | null;\n onSelectionChange?: (rowIds: string[]) => void;\n onSortChange?: (sort: TableSortState | null) => void;\n selectedRowIds?: readonly string[];\n selectionMode?: TableSelectionMode;\n sort?: TableSortState | null;\n status?: TableStatus;\n stickyHeader?: boolean;\n striped?: boolean;\n}\n\nexport const TableRoot = forwardRef<HTMLTableElement, TableRootProps>(function TableRoot(\n {\n bordered = false,\n className,\n defaultSelectedRowIds = [],\n defaultSort = null,\n density = \"comfortable\",\n onSelectionChange,\n onSortChange,\n selectedRowIds: controlledSelectedRowIds,\n selectionMode = \"none\",\n sort: controlledSort,\n status = \"idle\",\n stickyHeader = false,\n striped = false,\n ...props\n },\n ref,\n) {\n const [uncontrolledSelectedRowIds, setUncontrolledSelectedRowIds] = useState(\n () => new Set(defaultSelectedRowIds),\n );\n const [uncontrolledSort, setUncontrolledSort] = useState<TableSortState | null>(defaultSort);\n const [rows, setRows] = useState<Map<string, TableRowRecord>>(() => new Map());\n const selectedRowIds = useMemo(\n () => new Set(controlledSelectedRowIds ?? uncontrolledSelectedRowIds),\n [controlledSelectedRowIds, uncontrolledSelectedRowIds],\n );\n const sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n const selectableRows = useMemo(\n () => [...rows.entries()].filter(([, row]) => !row.disabled).map(([id]) => id),\n [rows],\n );\n const selectedSelectableRows = selectableRows.filter((id) => selectedRowIds.has(id));\n const allSelected =\n selectableRows.length > 0 && selectedSelectableRows.length === selectableRows.length;\n const indeterminate = selectedSelectableRows.length > 0 && !allSelected;\n const styles = table({ bordered, density, stickyHeader, striped });\n\n const updateSelection = useCallback(\n (next: Set<string>) => {\n const normalized = selectionMode === \"single\" ? new Set([...next].slice(-1)) : next;\n if (controlledSelectedRowIds === undefined) setUncontrolledSelectedRowIds(normalized);\n onSelectionChange?.([...normalized]);\n },\n [controlledSelectedRowIds, onSelectionChange, selectionMode],\n );\n const toggleRow = useCallback(\n (id: string, checked: boolean) => {\n const row = rows.get(id);\n if (selectionMode === \"none\" || row?.disabled) return;\n const next = new Set(selectedRowIds);\n if (selectionMode === \"single\") next.clear();\n if (checked) next.add(id);\n else next.delete(id);\n updateSelection(next);\n },\n [rows, selectedRowIds, selectionMode, updateSelection],\n );\n const toggleAll = useCallback(\n (checked: boolean) => {\n if (selectionMode !== \"multiple\") return;\n updateSelection(new Set(checked ? selectableRows : []));\n },\n [selectableRows, selectionMode, updateSelection],\n );\n const registerRow = useCallback((id: string, row: TableRowRecord) => {\n setRows((current) => {\n const next = new Map(current);\n next.set(id, row);\n return next;\n });\n return () =>\n setRows((current) => {\n if (!current.has(id)) return current;\n const next = new Map(current);\n next.delete(id);\n return next;\n });\n }, []);\n const requestSort = useCallback(\n (id: string, requestedDirection?: TableSortDirection) => {\n const currentDirection = sort?.id === id ? sort.direction : \"none\";\n const direction = requestedDirection ?? cycleSortDirection(currentDirection);\n const nextSort = direction === \"none\" ? null : { id, direction };\n if (controlledSort === undefined) setUncontrolledSort(nextSort);\n onSortChange?.(nextSort);\n },\n [controlledSort, onSortChange, sort],\n );\n\n const context = useMemo<TableContextValue>(\n () => ({\n allSelected,\n indeterminate,\n isRowSelected: (id) => selectedRowIds.has(id),\n registerRow,\n requestSort,\n selectedRowIds,\n selectionMode,\n status,\n toggleAll,\n toggleRow,\n sort,\n }),\n [\n allSelected,\n indeterminate,\n registerRow,\n requestSort,\n selectedRowIds,\n selectionMode,\n sort,\n status,\n toggleAll,\n toggleRow,\n ],\n );\n\n return (\n <TableContext.Provider value={context}>\n <table\n {...props}\n ref={ref}\n aria-busy={props[\"aria-busy\"] ?? (status === \"loading\" || undefined)}\n className={cx(styles.root, className)}\n data-jaci-component=\"table\"\n data-status={status}\n data-slot=\"table\"\n />\n </TableContext.Provider>\n );\n});\n\nexport type TableCaptionProps = ComponentPropsWithoutRef<\"caption\">;\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n function TableCaption({ className, ...props }, ref) {\n return (\n <caption\n {...props}\n ref={ref}\n className={cx(table().caption, className)}\n data-slot=\"table-caption\"\n />\n );\n },\n);\n\nexport type TableDescriptionProps = ComponentPropsWithoutRef<\"p\">;\nexport const TableDescription = forwardRef<HTMLParagraphElement, TableDescriptionProps>(\n function TableDescription({ className, ...props }, ref) {\n return (\n <p\n {...props}\n ref={ref}\n className={cx(table().description, className)}\n data-slot=\"table-description\"\n />\n );\n },\n);\n\nexport type TableHeaderProps = ComponentPropsWithoutRef<\"thead\">;\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n function TableHeader({ className, ...props }, ref) {\n return (\n <TableSectionContext.Provider value=\"head\">\n <thead\n {...props}\n ref={ref}\n className={cx(table().header, className)}\n data-slot=\"table-header\"\n />\n </TableSectionContext.Provider>\n );\n },\n);\n\nexport type TableBodyProps = ComponentPropsWithoutRef<\"tbody\">;\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, ...props },\n ref,\n) {\n return (\n <TableSectionContext.Provider value=\"body\">\n <tbody {...props} ref={ref} className={cx(table().body, className)} data-slot=\"table-body\" />\n </TableSectionContext.Provider>\n );\n});\n\nexport type TableFooterProps = ComponentPropsWithoutRef<\"tfoot\">;\nexport const TableFooter = forwardRef<HTMLTableSectionElement, TableFooterProps>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <TableSectionContext.Provider value=\"foot\">\n <tfoot\n {...props}\n ref={ref}\n className={cx(table().footer, className)}\n data-slot=\"table-footer\"\n />\n </TableSectionContext.Provider>\n );\n },\n);\n\nexport interface TableRowProps extends Omit<ComponentPropsWithoutRef<\"tr\">, \"id\"> {\n id: string;\n selectionDisabled?: boolean;\n selected?: boolean;\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { className, id, selectionDisabled = false, selected: selectedOverride, ...props },\n ref,\n) {\n const context = useTableContext();\n const section = useContext(TableSectionContext);\n const selected = selectedOverride ?? context?.isRowSelected(id) ?? false;\n useEffect(\n () =>\n section === \"head\" ? undefined : context?.registerRow(id, { disabled: selectionDisabled }),\n [context?.registerRow, id, section, selectionDisabled],\n );\n\n return (\n <TableRowContext.Provider value={{ id, selectionDisabled }}>\n <tr\n {...props}\n id={id}\n ref={ref}\n aria-selected={selected || undefined}\n className={cx(table().row, className)}\n data-selected={selected || undefined}\n data-selection-disabled={selectionDisabled || undefined}\n data-slot=\"table-row\"\n />\n </TableRowContext.Provider>\n );\n});\n\nexport interface TableHeadProps extends Omit<ComponentPropsWithoutRef<\"th\">, \"align\"> {\n align?: TableAlignment;\n hideBelow?: TableHideBelow;\n onSort?: (direction: TableSortDirection) => void;\n sortDirection?: TableSortDirection;\n sortable?: boolean;\n}\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n {\n align = \"start\",\n children,\n className,\n hideBelow,\n onSort,\n sortDirection,\n sortable = false,\n ...props\n },\n ref,\n) {\n const context = useTableContext();\n const styles = table({ align, hideBelow });\n const resolvedDirection =\n sortDirection ??\n (sortable && props.id && context?.sort?.id === props.id ? context.sort.direction : \"none\");\n const sort = () => {\n const next = cycleSortDirection(resolvedDirection);\n if (props.id) context?.requestSort(props.id, next);\n onSort?.(next);\n };\n\n return (\n <th\n {...props}\n ref={ref}\n aria-sort={sortable ? resolvedDirection : undefined}\n className={cx(styles.head, className)}\n data-align={align}\n data-hide-below={hideBelow}\n data-sort-direction={sortable ? resolvedDirection : undefined}\n data-slot=\"table-head\"\n scope={props.scope ?? \"col\"}\n >\n {sortable ? (\n <button\n aria-label={\n props[\"aria-label\"] ?? `Sort by ${typeof children === \"string\" ? children : \"column\"}`\n }\n className={styles.sortButton}\n onClick={sort}\n type=\"button\"\n >\n <span>{children}</span>\n <span aria-hidden=\"true\">\n {resolvedDirection === \"ascending\"\n ? \"↑\"\n : resolvedDirection === \"descending\"\n ? \"↓\"\n : \"↕\"}\n </span>\n </button>\n ) : (\n children\n )}\n </th>\n );\n});\n\nexport interface TableCellProps extends Omit<ComponentPropsWithoutRef<\"td\">, \"align\"> {\n align?: TableAlignment;\n hideBelow?: TableHideBelow;\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = \"start\", className, hideBelow, ...props },\n ref,\n) {\n const styles = table({ align, hideBelow });\n return (\n <td\n {...props}\n ref={ref}\n className={cx(styles.cell, className)}\n data-align={align}\n data-hide-below={hideBelow}\n data-slot=\"table-cell\"\n />\n );\n});\n\ninterface TableSelectionInputProps {\n \"aria-label\"?: string | undefined;\n checked?: boolean | undefined;\n indeterminate?: boolean | undefined;\n inputProps?: Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"checked\" | \"defaultChecked\" | \"onChange\" | \"type\"\n >;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nfunction SelectionInput({\n \"aria-label\": ariaLabel,\n checked = false,\n indeterminate = false,\n inputProps,\n onCheckedChange,\n}: TableSelectionInputProps) {\n const ref = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (ref.current) ref.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return (\n <input\n {...inputProps}\n ref={ref}\n aria-label={ariaLabel ?? inputProps?.[\"aria-label\"]}\n aria-checked={indeterminate ? \"mixed\" : checked}\n checked={checked}\n onChange={(event) => onCheckedChange?.(event.currentTarget.checked)}\n type=\"checkbox\"\n />\n );\n}\n\nexport interface TableSelectionHeaderProps\n extends Omit<ComponentPropsWithoutRef<\"th\">, \"children\">,\n TableSelectionInputProps {}\n\nexport const TableSelectionHeader = forwardRef<HTMLTableCellElement, TableSelectionHeaderProps>(\n function TableSelectionHeader(\n {\n checked: checkedOverride,\n className,\n indeterminate: indeterminateOverride,\n inputProps,\n onCheckedChange,\n ...props\n },\n ref,\n ) {\n const context = useRequiredTableContext();\n const ariaLabel = props[\"aria-label\"] ?? inputProps?.[\"aria-label\"] ?? \"Select all rows\";\n const checked = checkedOverride ?? context.allSelected;\n const indeterminate = indeterminateOverride ?? context.indeterminate;\n const disabled = Boolean(\n inputProps?.disabled ||\n (context.selectionMode !== \"multiple\" && !onCheckedChange && checkedOverride === undefined),\n );\n return (\n <th\n {...props}\n ref={ref}\n aria-label={ariaLabel}\n className={cx(table().selection, className)}\n data-slot=\"table-selection-header\"\n scope=\"col\"\n >\n <SelectionInput\n aria-label={ariaLabel}\n checked={checked}\n indeterminate={indeterminate}\n inputProps={{ ...inputProps, disabled }}\n onCheckedChange={onCheckedChange ?? context.toggleAll}\n />\n </th>\n );\n },\n);\n\nexport interface TableSelectionCellProps\n extends Omit<ComponentPropsWithoutRef<\"td\">, \"children\">,\n TableSelectionInputProps {}\n\nexport const TableSelectionCell = forwardRef<HTMLTableCellElement, TableSelectionCellProps>(\n function TableSelectionCell(\n {\n checked: checkedOverride,\n className,\n indeterminate = false,\n inputProps,\n onCheckedChange,\n ...props\n },\n ref,\n ) {\n const context = useRequiredTableContext();\n const row = useTableRowContext();\n const id = row?.id ?? \"\";\n const ariaLabel = props[\"aria-label\"] ?? inputProps?.[\"aria-label\"] ?? \"Select row\";\n const checked = checkedOverride ?? context.isRowSelected(id);\n const disabled = Boolean(\n inputProps?.disabled ||\n row?.selectionDisabled ||\n (context.selectionMode === \"none\" && !onCheckedChange && checkedOverride === undefined),\n );\n return (\n <td\n {...props}\n ref={ref}\n className={cx(table().selection, className)}\n data-slot=\"table-selection-cell\"\n >\n <SelectionInput\n aria-label={ariaLabel}\n checked={checked}\n indeterminate={indeterminate}\n inputProps={{ ...inputProps, disabled }}\n onCheckedChange={onCheckedChange ?? ((next) => context.toggleRow(id, next))}\n />\n </td>\n );\n },\n);\n\nexport interface TableStateProps extends Omit<ComponentPropsWithoutRef<\"tr\">, \"children\"> {\n children?: ReactNode;\n colSpan?: number;\n}\n\nconst TableStateRow = forwardRef<\n HTMLTableRowElement,\n TableStateProps & { live?: \"polite\" | \"assertive\" }\n>(function TableStateRow({ children, className, colSpan = 1, live = \"polite\", ...props }, ref) {\n const name = live === \"assertive\" ? \"error\" : \"loading\";\n return (\n <tr {...props} ref={ref} className={cx(table().row, className)} data-slot={`table-${name}-row`}>\n <td aria-live={live} className={table().empty} colSpan={colSpan} data-slot={`table-${name}`}>\n {children}\n </td>\n </tr>\n );\n});\n\nexport interface TableEmptyProps extends TableStateProps {}\nexport type TableLoadingProps = TableStateProps;\nexport type TableErrorProps = TableStateProps;\nexport const TableEmpty = forwardRef<HTMLTableRowElement, TableEmptyProps>(function TableEmpty(\n { children = \"No results found.\", className, colSpan = 1, ...props },\n ref,\n) {\n return (\n <tr {...props} ref={ref} className={cx(table().row, className)} data-slot=\"table-empty-row\">\n <td className={table().empty} colSpan={colSpan} data-slot=\"table-empty\">\n {children}\n </td>\n </tr>\n );\n});\n\nexport const TableLoading = forwardRef<HTMLTableRowElement, TableStateProps>(function TableLoading(\n { children = \"Loading…\", ...props },\n ref,\n) {\n return (\n <TableStateRow {...props} ref={ref} live=\"polite\">\n {children}\n </TableStateRow>\n );\n});\n\nexport const TableError = forwardRef<HTMLTableRowElement, TableStateProps>(function TableError(\n { children = \"Something went wrong.\", ...props },\n ref,\n) {\n return (\n <TableStateRow {...props} ref={ref} live=\"assertive\">\n {children}\n </TableStateRow>\n );\n});\n\nexport const Table = {\n Container: TableContainer,\n Root: TableRoot,\n Caption: TableCaption,\n Description: TableDescription,\n Header: TableHeader,\n Body: TableBody,\n Footer: TableFooter,\n Row: TableRow,\n Head: TableHead,\n Cell: TableCell,\n SelectionHeader: TableSelectionHeader,\n SelectionCell: TableSelectionCell,\n Empty: TableEmpty,\n Loading: TableLoading,\n Error: TableError,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","names":[],"sources":["../../../src/components/table/table.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { table } from \"../../styled-system/recipes\";\n\nexport type TableSortDirection = \"none\" | \"ascending\" | \"descending\";\nexport type TableDensity = \"compact\" | \"comfortable\";\nexport type TableSelectionMode = \"none\" | \"single\" | \"multiple\";\nexport type TableStatus = \"idle\" | \"loading\" | \"empty\" | \"error\" | \"ready\";\nexport type TableAlignment = \"start\" | \"center\" | \"end\";\nexport type TableHideBelow = \"sm\" | \"md\" | \"lg\";\n\nexport interface TableSortState {\n id: string;\n direction: Exclude<TableSortDirection, \"none\">;\n}\n\ninterface TableRowRecord {\n disabled: boolean;\n}\n\ninterface TableContextValue {\n allSelected: boolean;\n indeterminate: boolean;\n isRowSelected: (id: string) => boolean;\n registerRow: (id: string, row: TableRowRecord) => () => void;\n requestSort: (id: string, direction?: TableSortDirection) => void;\n selectedRowIds: ReadonlySet<string>;\n selectionMode: TableSelectionMode;\n toggleAll: (checked: boolean) => void;\n toggleRow: (id: string, checked: boolean) => void;\n sort: TableSortState | null;\n status: TableStatus;\n}\n\ninterface TableRowContextValue {\n id: string;\n selectionDisabled: boolean;\n}\n\ntype TableSection = \"head\" | \"body\" | \"foot\";\n\nconst TableContext = createContext<TableContextValue | null>(null);\nconst TableRowContext = createContext<TableRowContextValue | null>(null);\nconst TableSectionContext = createContext<TableSection>(\"body\");\n\nfunction useTableContext() {\n return useContext(TableContext);\n}\n\nfunction useRequiredTableContext() {\n const context = useTableContext();\n if (!context) throw new Error(\"Table parts must be rendered inside Table.Root.\");\n return context;\n}\n\nfunction useTableRowContext() {\n return useContext(TableRowContext);\n}\n\nfunction cycleSortDirection(direction: TableSortDirection): TableSortDirection {\n if (direction === \"none\") return \"ascending\";\n if (direction === \"ascending\") return \"descending\";\n return \"none\";\n}\n\nexport interface TableContainerProps extends ComponentPropsWithoutRef<\"div\"> {}\n\nexport const TableContainer = forwardRef<HTMLDivElement, TableContainerProps>(\n function TableContainer({ className, ...props }, ref) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx(table().container, className)}\n data-jaci-component=\"table\"\n data-slot=\"table-container\"\n />\n );\n },\n);\n\nexport interface TableRootProps extends ComponentPropsWithoutRef<\"table\"> {\n bordered?: boolean;\n density?: TableDensity;\n defaultSelectedRowIds?: readonly string[];\n defaultSort?: TableSortState | null;\n onSelectionChange?: (rowIds: string[]) => void;\n onSortChange?: (sort: TableSortState | null) => void;\n selectedRowIds?: readonly string[];\n selectionMode?: TableSelectionMode;\n sort?: TableSortState | null;\n status?: TableStatus;\n stickyHeader?: boolean;\n striped?: boolean;\n}\n\nexport const TableRoot = forwardRef<HTMLTableElement, TableRootProps>(function TableRoot(\n {\n bordered = false,\n className,\n defaultSelectedRowIds = [],\n defaultSort = null,\n density = \"comfortable\",\n onSelectionChange,\n onSortChange,\n selectedRowIds: controlledSelectedRowIds,\n selectionMode = \"none\",\n sort: controlledSort,\n status = \"idle\",\n stickyHeader = false,\n striped = false,\n ...props\n },\n ref,\n) {\n const [uncontrolledSelectedRowIds, setUncontrolledSelectedRowIds] = useState(\n () => new Set(defaultSelectedRowIds),\n );\n const [uncontrolledSort, setUncontrolledSort] = useState<TableSortState | null>(defaultSort);\n const [rows, setRows] = useState<Map<string, TableRowRecord>>(() => new Map());\n const selectedRowIds = useMemo(\n () => new Set(controlledSelectedRowIds ?? uncontrolledSelectedRowIds),\n [controlledSelectedRowIds, uncontrolledSelectedRowIds],\n );\n const sort = controlledSort === undefined ? uncontrolledSort : controlledSort;\n const selectableRows = useMemo(\n () => [...rows.entries()].filter(([, row]) => !row.disabled).map(([id]) => id),\n [rows],\n );\n const selectedSelectableRows = selectableRows.filter((id) => selectedRowIds.has(id));\n const allSelected =\n selectableRows.length > 0 && selectedSelectableRows.length === selectableRows.length;\n const indeterminate = selectedSelectableRows.length > 0 && !allSelected;\n const styles = table({ bordered, density, stickyHeader, striped });\n\n const updateSelection = useCallback(\n (next: Set<string>) => {\n const normalized = selectionMode === \"single\" ? new Set([...next].slice(-1)) : next;\n if (controlledSelectedRowIds === undefined) setUncontrolledSelectedRowIds(normalized);\n onSelectionChange?.([...normalized]);\n },\n [controlledSelectedRowIds, onSelectionChange, selectionMode],\n );\n const toggleRow = useCallback(\n (id: string, checked: boolean) => {\n const row = rows.get(id);\n if (selectionMode === \"none\" || row?.disabled) return;\n const next = new Set(selectedRowIds);\n if (selectionMode === \"single\") next.clear();\n if (checked) next.add(id);\n else next.delete(id);\n updateSelection(next);\n },\n [rows, selectedRowIds, selectionMode, updateSelection],\n );\n const toggleAll = useCallback(\n (checked: boolean) => {\n if (selectionMode !== \"multiple\") return;\n updateSelection(new Set(checked ? selectableRows : []));\n },\n [selectableRows, selectionMode, updateSelection],\n );\n const registerRow = useCallback((id: string, row: TableRowRecord) => {\n setRows((current) => {\n const next = new Map(current);\n next.set(id, row);\n return next;\n });\n return () =>\n setRows((current) => {\n if (!current.has(id)) return current;\n const next = new Map(current);\n next.delete(id);\n return next;\n });\n }, []);\n const requestSort = useCallback(\n (id: string, requestedDirection?: TableSortDirection) => {\n const currentDirection = sort?.id === id ? sort.direction : \"none\";\n const direction = requestedDirection ?? cycleSortDirection(currentDirection);\n const nextSort = direction === \"none\" ? null : { id, direction };\n if (controlledSort === undefined) setUncontrolledSort(nextSort);\n onSortChange?.(nextSort);\n },\n [controlledSort, onSortChange, sort],\n );\n\n const context = useMemo<TableContextValue>(\n () => ({\n allSelected,\n indeterminate,\n isRowSelected: (id) => selectedRowIds.has(id),\n registerRow,\n requestSort,\n selectedRowIds,\n selectionMode,\n status,\n toggleAll,\n toggleRow,\n sort,\n }),\n [\n allSelected,\n indeterminate,\n registerRow,\n requestSort,\n selectedRowIds,\n selectionMode,\n sort,\n status,\n toggleAll,\n toggleRow,\n ],\n );\n\n return (\n <TableContext.Provider value={context}>\n <table\n {...props}\n ref={ref}\n aria-busy={props[\"aria-busy\"] ?? (status === \"loading\" || undefined)}\n className={cx(styles.root, className)}\n data-jaci-component=\"table\"\n data-status={status}\n data-slot=\"table\"\n />\n </TableContext.Provider>\n );\n});\n\nexport type TableCaptionProps = ComponentPropsWithoutRef<\"caption\">;\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n function TableCaption({ className, ...props }, ref) {\n return (\n <caption\n {...props}\n ref={ref}\n className={cx(table().caption, className)}\n data-slot=\"table-caption\"\n />\n );\n },\n);\n\nexport type TableDescriptionProps = ComponentPropsWithoutRef<\"p\">;\nexport const TableDescription = forwardRef<HTMLParagraphElement, TableDescriptionProps>(\n function TableDescription({ className, ...props }, ref) {\n return (\n <p\n {...props}\n ref={ref}\n className={cx(table().description, className)}\n data-slot=\"table-description\"\n />\n );\n },\n);\n\nexport type TableHeaderProps = ComponentPropsWithoutRef<\"thead\">;\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n function TableHeader({ className, ...props }, ref) {\n return (\n <TableSectionContext.Provider value=\"head\">\n <thead\n {...props}\n ref={ref}\n className={cx(table().header, className)}\n data-slot=\"table-header\"\n />\n </TableSectionContext.Provider>\n );\n },\n);\n\nexport type TableBodyProps = ComponentPropsWithoutRef<\"tbody\">;\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, ...props },\n ref,\n) {\n return (\n <TableSectionContext.Provider value=\"body\">\n <tbody {...props} ref={ref} className={cx(table().body, className)} data-slot=\"table-body\" />\n </TableSectionContext.Provider>\n );\n});\n\nexport type TableFooterProps = ComponentPropsWithoutRef<\"tfoot\">;\nexport const TableFooter = forwardRef<HTMLTableSectionElement, TableFooterProps>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <TableSectionContext.Provider value=\"foot\">\n <tfoot\n {...props}\n ref={ref}\n className={cx(table().footer, className)}\n data-slot=\"table-footer\"\n />\n </TableSectionContext.Provider>\n );\n },\n);\n\nexport interface TableRowProps extends Omit<ComponentPropsWithoutRef<\"tr\">, \"id\"> {\n id: string;\n selectionDisabled?: boolean;\n selected?: boolean;\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { className, id, selectionDisabled = false, selected: selectedOverride, ...props },\n ref,\n) {\n const context = useTableContext();\n const section = useContext(TableSectionContext);\n const selected = selectedOverride ?? context?.isRowSelected(id) ?? false;\n useEffect(\n () =>\n section === \"head\" ? undefined : context?.registerRow(id, { disabled: selectionDisabled }),\n [context?.registerRow, id, section, selectionDisabled],\n );\n\n return (\n <TableRowContext.Provider value={{ id, selectionDisabled }}>\n <tr\n {...props}\n id={id}\n ref={ref}\n aria-selected={selected || undefined}\n className={cx(table().row, className)}\n data-selected={selected || undefined}\n data-selection-disabled={selectionDisabled || undefined}\n data-slot=\"table-row\"\n />\n </TableRowContext.Provider>\n );\n});\n\nexport interface TableHeadProps extends Omit<ComponentPropsWithoutRef<\"th\">, \"align\"> {\n align?: TableAlignment;\n hideBelow?: TableHideBelow;\n onSort?: (direction: TableSortDirection) => void;\n sortDirection?: TableSortDirection;\n sortable?: boolean;\n}\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n {\n align = \"start\",\n children,\n className,\n hideBelow,\n onSort,\n sortDirection,\n sortable = false,\n ...props\n },\n ref,\n) {\n const context = useTableContext();\n const styles = table({ align, hideBelow });\n const resolvedDirection =\n sortDirection ??\n (sortable && props.id && context?.sort?.id === props.id ? context.sort.direction : \"none\");\n const sort = () => {\n const next = cycleSortDirection(resolvedDirection);\n if (props.id) context?.requestSort(props.id, next);\n onSort?.(next);\n };\n\n return (\n <th\n {...props}\n ref={ref}\n aria-sort={sortable ? resolvedDirection : undefined}\n className={cx(styles.head, className)}\n data-align={align}\n data-hide-below={hideBelow}\n data-sort-direction={sortable ? resolvedDirection : undefined}\n data-slot=\"table-head\"\n scope={props.scope ?? \"col\"}\n >\n {sortable ? (\n <button\n aria-label={\n props[\"aria-label\"] ?? `Sort by ${typeof children === \"string\" ? children : \"column\"}`\n }\n className={styles.sortButton}\n onClick={sort}\n type=\"button\"\n >\n <span>{children}</span>\n <span aria-hidden=\"true\">\n {resolvedDirection === \"ascending\"\n ? \"↑\"\n : resolvedDirection === \"descending\"\n ? \"↓\"\n : \"↕\"}\n </span>\n </button>\n ) : (\n children\n )}\n </th>\n );\n});\n\nexport interface TableCellProps extends Omit<ComponentPropsWithoutRef<\"td\">, \"align\"> {\n align?: TableAlignment;\n hideBelow?: TableHideBelow;\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = \"start\", className, hideBelow, ...props },\n ref,\n) {\n const styles = table({ align, hideBelow });\n return (\n <td\n {...props}\n ref={ref}\n className={cx(styles.cell, className)}\n data-align={align}\n data-hide-below={hideBelow}\n data-slot=\"table-cell\"\n />\n );\n});\n\ninterface TableSelectionInputProps {\n \"aria-label\"?: string | undefined;\n checked?: boolean | undefined;\n indeterminate?: boolean | undefined;\n inputProps?: Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"checked\" | \"defaultChecked\" | \"onChange\" | \"type\"\n >;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nfunction SelectionInput({\n \"aria-label\": ariaLabel,\n checked = false,\n indeterminate = false,\n inputProps,\n onCheckedChange,\n}: TableSelectionInputProps) {\n const ref = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (ref.current) ref.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return (\n <input\n {...inputProps}\n ref={ref}\n aria-label={ariaLabel ?? inputProps?.[\"aria-label\"]}\n aria-checked={indeterminate ? \"mixed\" : checked}\n checked={checked}\n onChange={(event) => onCheckedChange?.(event.currentTarget.checked)}\n type=\"checkbox\"\n />\n );\n}\n\nexport interface TableSelectionHeaderProps\n extends Omit<ComponentPropsWithoutRef<\"th\">, \"children\">,\n TableSelectionInputProps {}\n\nexport const TableSelectionHeader = forwardRef<HTMLTableCellElement, TableSelectionHeaderProps>(\n function TableSelectionHeader(\n {\n checked: checkedOverride,\n className,\n indeterminate: indeterminateOverride,\n inputProps,\n onCheckedChange,\n ...props\n },\n ref,\n ) {\n const context = useRequiredTableContext();\n const ariaLabel = props[\"aria-label\"] ?? inputProps?.[\"aria-label\"] ?? \"Select all rows\";\n const checked = checkedOverride ?? context.allSelected;\n const indeterminate = indeterminateOverride ?? context.indeterminate;\n const disabled = Boolean(\n inputProps?.disabled ||\n (context.selectionMode !== \"multiple\" && !onCheckedChange && checkedOverride === undefined),\n );\n return (\n <th\n {...props}\n ref={ref}\n aria-label={ariaLabel}\n className={cx(table().selection, className)}\n data-slot=\"table-selection-header\"\n scope=\"col\"\n >\n <SelectionInput\n aria-label={ariaLabel}\n checked={checked}\n indeterminate={indeterminate}\n inputProps={{ ...inputProps, disabled }}\n onCheckedChange={onCheckedChange ?? context.toggleAll}\n />\n </th>\n );\n },\n);\n\nexport interface TableSelectionCellProps\n extends Omit<ComponentPropsWithoutRef<\"td\">, \"children\">,\n TableSelectionInputProps {}\n\nexport const TableSelectionCell = forwardRef<HTMLTableCellElement, TableSelectionCellProps>(\n function TableSelectionCell(\n {\n checked: checkedOverride,\n className,\n indeterminate = false,\n inputProps,\n onCheckedChange,\n ...props\n },\n ref,\n ) {\n const context = useRequiredTableContext();\n const row = useTableRowContext();\n const id = row?.id ?? \"\";\n const ariaLabel = props[\"aria-label\"] ?? inputProps?.[\"aria-label\"] ?? \"Select row\";\n const checked = checkedOverride ?? context.isRowSelected(id);\n const disabled = Boolean(\n inputProps?.disabled ||\n row?.selectionDisabled ||\n (context.selectionMode === \"none\" && !onCheckedChange && checkedOverride === undefined),\n );\n return (\n <td\n {...props}\n ref={ref}\n className={cx(table().selection, className)}\n data-slot=\"table-selection-cell\"\n >\n <SelectionInput\n aria-label={ariaLabel}\n checked={checked}\n indeterminate={indeterminate}\n inputProps={{ ...inputProps, disabled }}\n onCheckedChange={onCheckedChange ?? ((next) => context.toggleRow(id, next))}\n />\n </td>\n );\n },\n);\n\nexport interface TableStateProps extends Omit<ComponentPropsWithoutRef<\"tr\">, \"children\"> {\n children?: ReactNode;\n colSpan?: number;\n}\n\nconst TableStateRow = forwardRef<\n HTMLTableRowElement,\n TableStateProps & { live?: \"polite\" | \"assertive\" }\n>(function TableStateRow({ children, className, colSpan = 1, live = \"polite\", ...props }, ref) {\n const name = live === \"assertive\" ? \"error\" : \"loading\";\n return (\n <tr {...props} ref={ref} className={cx(table().row, className)} data-slot={`table-${name}-row`}>\n <td aria-live={live} className={table().empty} colSpan={colSpan} data-slot={`table-${name}`}>\n {children}\n </td>\n </tr>\n );\n});\n\nexport interface TableEmptyProps extends TableStateProps {}\nexport type TableLoadingProps = TableStateProps;\nexport type TableErrorProps = TableStateProps;\nexport const TableEmpty = forwardRef<HTMLTableRowElement, TableEmptyProps>(function TableEmpty(\n { children = \"No results found.\", className, colSpan = 1, ...props },\n ref,\n) {\n return (\n <tr {...props} ref={ref} className={cx(table().row, className)} data-slot=\"table-empty-row\">\n <td className={table().empty} colSpan={colSpan} data-slot=\"table-empty\">\n {children}\n </td>\n </tr>\n );\n});\n\nexport const TableLoading = forwardRef<HTMLTableRowElement, TableStateProps>(function TableLoading(\n { children = \"Loading…\", ...props },\n ref,\n) {\n return (\n <TableStateRow {...props} ref={ref} live=\"polite\">\n {children}\n </TableStateRow>\n );\n});\n\nexport const TableError = forwardRef<HTMLTableRowElement, TableStateProps>(function TableError(\n { children = \"Something went wrong.\", ...props },\n ref,\n) {\n return (\n <TableStateRow {...props} ref={ref} live=\"assertive\">\n {children}\n </TableStateRow>\n );\n});\n\nexport const Table = {\n Container: TableContainer,\n Root: TableRoot,\n Caption: TableCaption,\n Description: TableDescription,\n Header: TableHeader,\n Body: TableBody,\n Footer: TableFooter,\n Row: TableRow,\n Head: TableHead,\n Cell: TableCell,\n SelectionHeader: TableSelectionHeader,\n SelectionCell: TableSelectionCell,\n Empty: TableEmpty,\n Loading: TableLoading,\n Error: TableError,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.cjs","names":["tabs","BaseTabs","withRecipeClassName"],"sources":["../../../src/components/tabs/tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { createContext, forwardRef, useContext } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { withRecipeClassName } from \"../base-ui\";\nimport { tabs } from \"../../styled-system/recipes\";\n\nexport type TabsVariant = \"underline\" | \"pills\";\n\nconst TabsVariantContext = createContext<TabsVariant>(\"underline\");\n\nfunction useTabsStyles() {\n return tabs({ variant: useContext(TabsVariantContext) });\n}\n\nexport interface TabsRootProps extends ComponentPropsWithoutRef<typeof BaseTabs.Root> {\n variant?: TabsVariant;\n}\n\nexport const TabsRoot = forwardRef<HTMLDivElement, TabsRootProps>(function TabsRoot(\n { className, variant = \"underline\", ...props },\n ref,\n) {\n const styles = tabs({ variant });\n\n return (\n <TabsVariantContext.Provider value={variant}>\n <BaseTabs.Root\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.root, className)}\n data-jaci-component=\"tabs\"\n data-slot=\"tabs\"\n />\n </TabsVariantContext.Provider>\n );\n});\n\nexport type TabsListProps = ComponentPropsWithoutRef<typeof BaseTabs.List>;\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.List\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.list, className)}\n data-slot=\"tabs-list\"\n />\n );\n});\n\nexport type TabsTabProps = ComponentPropsWithoutRef<typeof BaseTabs.Tab>;\n\nexport const TabsTab = forwardRef<HTMLElement, TabsTabProps>(function TabsTab(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Tab\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.tab, className)}\n data-slot=\"tabs-tab\"\n />\n );\n});\n\nexport type TabsPanelProps = ComponentPropsWithoutRef<typeof BaseTabs.Panel>;\n\nexport const TabsPanel = forwardRef<HTMLDivElement, TabsPanelProps>(function TabsPanel(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Panel\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.panel, className)}\n data-slot=\"tabs-panel\"\n />\n );\n});\n\nexport const Tabs = {\n Root: TabsRoot,\n List: TabsList,\n Tab: TabsTab,\n Panel: TabsPanel,\n};\n"],"mappings":";;;;;;;AAWA,MAAM,sBAAA,GAAA,MAAA,cAAA,CAAgD,WAAW;AAEjE,SAAS,gBAAgB;CACvB,OAAOA,aAAAA,KAAK,EAAE,UAAA,GAAA,MAAA,WAAA,CAAoB,kBAAkB,EAAE,CAAC;AACzD;AAMA,MAAa,YAAA,GAAA,MAAA,WAAA,CAAqD,SAAS,SACzE,EAAE,WAAW,UAAU,aAAa,GAAG,SACvC,KACA;CACA,MAAM,SAASA,aAAAA,KAAK,EAAE,QAAQ,CAAC;CAE/B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAmB,UAApB;EAA6B,OAAO;YAClC,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,KAAS,MAAV;GACE,GAAI;GACC;GACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;GACrD,uBAAoB;GACpB,aAAU;EACX,CAAA;CAC0B,CAAA;AAEjC,CAAC;AAID,MAAa,YAAA,GAAA,MAAA,WAAA,CAAqD,SAAS,SACzE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,oBAAAA,KAAS,MAAV;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;EACrD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,WAAA,GAAA,MAAA,WAAA,CAAgD,SAAS,QACpE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,oBAAAA,KAAS,KAAV;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,KAAK,SAAS;EACpD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,aAAA,GAAA,MAAA,WAAA,CAAuD,SAAS,UAC3E,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,oBAAAA,KAAS,OAAV;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,OAAO,SAAS;EACtD,aAAU;CACX,CAAA;AAEL,CAAC;AAED,MAAa,OAAO;CAClB,MAAM;CACN,MAAM;CACN,KAAK;CACL,OAAO;AACT"}
1
+ {"version":3,"file":"tabs.cjs","names":["createContext","tabs","useContext","forwardRef","BaseTabs","withRecipeClassName"],"sources":["../../../src/components/tabs/tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { createContext, forwardRef, useContext } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { withRecipeClassName } from \"../base-ui\";\nimport { tabs } from \"../../styled-system/recipes\";\n\nexport type TabsVariant = \"underline\" | \"pills\";\n\nconst TabsVariantContext = createContext<TabsVariant>(\"underline\");\n\nfunction useTabsStyles() {\n return tabs({ variant: useContext(TabsVariantContext) });\n}\n\nexport interface TabsRootProps extends ComponentPropsWithoutRef<typeof BaseTabs.Root> {\n variant?: TabsVariant;\n}\n\nexport const TabsRoot = forwardRef<HTMLDivElement, TabsRootProps>(function TabsRoot(\n { className, variant = \"underline\", ...props },\n ref,\n) {\n const styles = tabs({ variant });\n\n return (\n <TabsVariantContext.Provider value={variant}>\n <BaseTabs.Root\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.root, className)}\n data-jaci-component=\"tabs\"\n data-slot=\"tabs\"\n />\n </TabsVariantContext.Provider>\n );\n});\n\nexport type TabsListProps = ComponentPropsWithoutRef<typeof BaseTabs.List>;\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.List\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.list, className)}\n data-slot=\"tabs-list\"\n />\n );\n});\n\nexport type TabsTabProps = ComponentPropsWithoutRef<typeof BaseTabs.Tab>;\n\nexport const TabsTab = forwardRef<HTMLElement, TabsTabProps>(function TabsTab(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Tab\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.tab, className)}\n data-slot=\"tabs-tab\"\n />\n );\n});\n\nexport type TabsPanelProps = ComponentPropsWithoutRef<typeof BaseTabs.Panel>;\n\nexport const TabsPanel = forwardRef<HTMLDivElement, TabsPanelProps>(function TabsPanel(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Panel\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.panel, className)}\n data-slot=\"tabs-panel\"\n />\n );\n});\n\nexport const Tabs = {\n Root: TabsRoot,\n List: TabsList,\n Tab: TabsTab,\n Panel: TabsPanel,\n};\n"],"mappings":";;;;;;;AAWA,MAAM,sBAAA,GAAqBA,MAAAA,cAAAA,CAA2B,WAAW;AAEjE,SAAS,gBAAgB;CACvB,OAAOC,aAAAA,KAAK,EAAE,UAAA,GAASC,MAAAA,WAAAA,CAAW,kBAAkB,EAAE,CAAC;AACzD;AAMA,MAAa,YAAA,GAAWC,MAAAA,WAAAA,CAA0C,SAAS,SACzE,EAAE,WAAW,UAAU,aAAa,GAAG,SACvC,KACA;CACA,MAAM,SAASF,aAAAA,KAAK,EAAE,QAAQ,CAAC;CAE/B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAmB,UAApB;EAA6B,OAAO;EAClC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACG,oBAAAA,KAAS,MAAV;GACE,GAAI;GACC;GACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;GACrD,uBAAoB;GACpB,aAAU;EACX,CAAA;CAC0B,CAAA;AAEjC,CAAC;AAID,MAAa,YAAA,GAAWF,MAAAA,WAAAA,CAA0C,SAAS,SACzE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,KAAS,MAAV;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;EACrD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,WAAA,GAAUF,MAAAA,WAAAA,CAAsC,SAAS,QACpE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,KAAS,KAAV;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,KAAK,SAAS;EACpD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,aAAA,GAAYF,MAAAA,WAAAA,CAA2C,SAAS,UAC3E,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,oBAAAA,KAAS,OAAV;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,OAAO,SAAS;EACtD,aAAU;CACX,CAAA;AAEL,CAAC;AAED,MAAa,OAAO;CAClB,MAAM;CACN,MAAM;CACN,KAAK;CACL,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","names":["BaseTabs","Tabs"],"sources":["../../../src/components/tabs/tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { createContext, forwardRef, useContext } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { withRecipeClassName } from \"../base-ui\";\nimport { tabs } from \"../../styled-system/recipes\";\n\nexport type TabsVariant = \"underline\" | \"pills\";\n\nconst TabsVariantContext = createContext<TabsVariant>(\"underline\");\n\nfunction useTabsStyles() {\n return tabs({ variant: useContext(TabsVariantContext) });\n}\n\nexport interface TabsRootProps extends ComponentPropsWithoutRef<typeof BaseTabs.Root> {\n variant?: TabsVariant;\n}\n\nexport const TabsRoot = forwardRef<HTMLDivElement, TabsRootProps>(function TabsRoot(\n { className, variant = \"underline\", ...props },\n ref,\n) {\n const styles = tabs({ variant });\n\n return (\n <TabsVariantContext.Provider value={variant}>\n <BaseTabs.Root\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.root, className)}\n data-jaci-component=\"tabs\"\n data-slot=\"tabs\"\n />\n </TabsVariantContext.Provider>\n );\n});\n\nexport type TabsListProps = ComponentPropsWithoutRef<typeof BaseTabs.List>;\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.List\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.list, className)}\n data-slot=\"tabs-list\"\n />\n );\n});\n\nexport type TabsTabProps = ComponentPropsWithoutRef<typeof BaseTabs.Tab>;\n\nexport const TabsTab = forwardRef<HTMLElement, TabsTabProps>(function TabsTab(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Tab\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.tab, className)}\n data-slot=\"tabs-tab\"\n />\n );\n});\n\nexport type TabsPanelProps = ComponentPropsWithoutRef<typeof BaseTabs.Panel>;\n\nexport const TabsPanel = forwardRef<HTMLDivElement, TabsPanelProps>(function TabsPanel(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Panel\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.panel, className)}\n data-slot=\"tabs-panel\"\n />\n );\n});\n\nexport const Tabs = {\n Root: TabsRoot,\n List: TabsList,\n Tab: TabsTab,\n Panel: TabsPanel,\n};\n"],"mappings":";;;;;;;AAWA,MAAM,qBAAqB,cAA2B,WAAW;AAEjE,SAAS,gBAAgB;CACvB,OAAO,KAAK,EAAE,SAAS,WAAW,kBAAkB,EAAE,CAAC;AACzD;AAMA,MAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,WAAW,UAAU,aAAa,GAAG,SACvC,KACA;CACA,MAAM,SAAS,KAAK,EAAE,QAAQ,CAAC;CAE/B,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO;YAClC,oBAACA,KAAS,MAAV;GACE,GAAI;GACC;GACL,WAAW,oBAAoB,OAAO,MAAM,SAAS;GACrD,uBAAoB;GACpB,aAAU;EACX,CAAA;CAC0B,CAAA;AAEjC,CAAC;AAID,MAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,oBAACA,KAAS,MAAV;EACE,GAAI;EACC;EACL,WAAW,oBAAoB,OAAO,MAAM,SAAS;EACrD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,UAAU,WAAsC,SAAS,QACpE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,oBAACA,KAAS,KAAV;EACE,GAAI;EACC;EACL,WAAW,oBAAoB,OAAO,KAAK,SAAS;EACpD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,oBAACA,KAAS,OAAV;EACE,GAAI;EACC;EACL,WAAW,oBAAoB,OAAO,OAAO,SAAS;EACtD,aAAU;CACX,CAAA;AAEL,CAAC;AAED,MAAaC,SAAO;CAClB,MAAM;CACN,MAAM;CACN,KAAK;CACL,OAAO;AACT"}
1
+ {"version":3,"file":"tabs.js","names":["BaseTabs","Tabs"],"sources":["../../../src/components/tabs/tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { Tabs as BaseTabs } from \"@base-ui/react/tabs\";\nimport { createContext, forwardRef, useContext } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { withRecipeClassName } from \"../base-ui\";\nimport { tabs } from \"../../styled-system/recipes\";\n\nexport type TabsVariant = \"underline\" | \"pills\";\n\nconst TabsVariantContext = createContext<TabsVariant>(\"underline\");\n\nfunction useTabsStyles() {\n return tabs({ variant: useContext(TabsVariantContext) });\n}\n\nexport interface TabsRootProps extends ComponentPropsWithoutRef<typeof BaseTabs.Root> {\n variant?: TabsVariant;\n}\n\nexport const TabsRoot = forwardRef<HTMLDivElement, TabsRootProps>(function TabsRoot(\n { className, variant = \"underline\", ...props },\n ref,\n) {\n const styles = tabs({ variant });\n\n return (\n <TabsVariantContext.Provider value={variant}>\n <BaseTabs.Root\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.root, className)}\n data-jaci-component=\"tabs\"\n data-slot=\"tabs\"\n />\n </TabsVariantContext.Provider>\n );\n});\n\nexport type TabsListProps = ComponentPropsWithoutRef<typeof BaseTabs.List>;\n\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(function TabsList(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.List\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.list, className)}\n data-slot=\"tabs-list\"\n />\n );\n});\n\nexport type TabsTabProps = ComponentPropsWithoutRef<typeof BaseTabs.Tab>;\n\nexport const TabsTab = forwardRef<HTMLElement, TabsTabProps>(function TabsTab(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Tab\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.tab, className)}\n data-slot=\"tabs-tab\"\n />\n );\n});\n\nexport type TabsPanelProps = ComponentPropsWithoutRef<typeof BaseTabs.Panel>;\n\nexport const TabsPanel = forwardRef<HTMLDivElement, TabsPanelProps>(function TabsPanel(\n { className, ...props },\n ref,\n) {\n const styles = useTabsStyles();\n\n return (\n <BaseTabs.Panel\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.panel, className)}\n data-slot=\"tabs-panel\"\n />\n );\n});\n\nexport const Tabs = {\n Root: TabsRoot,\n List: TabsList,\n Tab: TabsTab,\n Panel: TabsPanel,\n};\n"],"mappings":";;;;;;;AAWA,MAAM,qBAAqB,cAA2B,WAAW;AAEjE,SAAS,gBAAgB;CACvB,OAAO,KAAK,EAAE,SAAS,WAAW,kBAAkB,EAAE,CAAC;AACzD;AAMA,MAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,WAAW,UAAU,aAAa,GAAG,SACvC,KACA;CACA,MAAM,SAAS,KAAK,EAAE,QAAQ,CAAC;CAE/B,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO;EAClC,UAAA,oBAACA,KAAS,MAAV;GACE,GAAI;GACC;GACL,WAAW,oBAAoB,OAAO,MAAM,SAAS;GACrD,uBAAoB;GACpB,aAAU;EACX,CAAA;CAC0B,CAAA;AAEjC,CAAC;AAID,MAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,oBAACA,KAAS,MAAV;EACE,GAAI;EACC;EACL,WAAW,oBAAoB,OAAO,MAAM,SAAS;EACrD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,UAAU,WAAsC,SAAS,QACpE,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,oBAACA,KAAS,KAAV;EACE,GAAI;EACC;EACL,WAAW,oBAAoB,OAAO,KAAK,SAAS;EACpD,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,YAAY,WAA2C,SAAS,UAC3E,EAAE,WAAW,GAAG,SAChB,KACA;CACA,MAAM,SAAS,cAAc;CAE7B,OACE,oBAACA,KAAS,OAAV;EACE,GAAI;EACC;EACL,WAAW,oBAAoB,OAAO,OAAO,SAAS;EACtD,aAAU;CACX,CAAA;AAEL,CAAC;AAED,MAAaC,SAAO;CAClB,MAAM;CACN,MAAM;CACN,KAAK;CACL,OAAO;AACT"}
@@ -57,15 +57,16 @@ const TagsInput = (0, react.forwardRef)(function TagsInput({ "aria-describedby":
57
57
  const tag = rawTag.trim();
58
58
  const isAllowed = data.length === 0 || data.includes(tag);
59
59
  const duplicate = selectedTags.includes(tag);
60
- if (tag && isAllowed && (allowDuplicates || !duplicate)) if (editingTag) {
61
- updateTags([
62
- ...selectedTags.slice(0, editingTag.index),
63
- tag,
64
- ...selectedTags.slice(editingTag.index)
65
- ]);
66
- setEditingTag(null);
67
- } else updateTags([...selectedTags, tag]);
68
- else if (editingTag) return;
60
+ if (tag && isAllowed && (allowDuplicates || !duplicate)) {
61
+ if (editingTag) {
62
+ updateTags([
63
+ ...selectedTags.slice(0, editingTag.index),
64
+ tag,
65
+ ...selectedTags.slice(editingTag.index)
66
+ ]);
67
+ setEditingTag(null);
68
+ } else updateTags([...selectedTags, tag]);
69
+ } else if (editingTag) return;
69
70
  clearInput(event);
70
71
  }, [
71
72
  allowDuplicates,
@@ -1 +1 @@
1
- {"version":3,"file":"tags-input.cjs","names":["tagsInput","cx"],"sources":["../../../src/components/tags-input/tags-input.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ClipboardEvent,\n ReactNode,\n} from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { tagsInput } from \"../../styled-system/recipes\";\n\nexport interface TagsInputProps\n extends Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"children\" | \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n > {\n /** Current tags. Omit this prop to use the uncontrolled API. */\n tags?: readonly string[];\n /** Initial tags for the uncontrolled API. */\n defaultTags?: readonly string[];\n /** Called whenever a tag is added or removed. */\n onTagsChange?: (tags: string[]) => void;\n /** Optional suggestions. A tag is accepted after a comma only when it is in this list. */\n data?: readonly string[];\n /** Visible label for the input. */\n label?: ReactNode;\n /** Current text query. This is the native input value, not the selected tags. */\n value?: string;\n /** Initial text query for an uncontrolled input. */\n defaultValue?: string;\n /** Native input change callback. */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /** Optional callback useful when a controlled query is cleared by selecting a tag. */\n onInputValueChange?: (value: string) => void;\n allowDuplicates?: boolean;\n delimiter?: string | RegExp;\n editable?: boolean;\n}\n\nfunction changedEvent(event: ChangeEvent<HTMLInputElement>, value: string) {\n const target = event.target;\n const nextTarget = {\n checked: target.checked,\n id: target.id,\n name: target.name,\n value,\n } as HTMLInputElement;\n\n return {\n ...event,\n currentTarget: nextTarget,\n target: nextTarget,\n } as ChangeEvent<HTMLInputElement>;\n}\n\nfunction tagKey(tag: string, index: number) {\n return `${tag}-${index}`;\n}\n\nfunction hasDelimiter(value: string, delimiter: string | RegExp) {\n if (typeof delimiter === \"string\") return delimiter.length > 0 && value.includes(delimiter);\n delimiter.lastIndex = 0;\n const result = delimiter.test(value);\n delimiter.lastIndex = 0;\n return result;\n}\n\nexport const TagsInput = forwardRef<HTMLInputElement, TagsInputProps>(function TagsInput(\n {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-label\": ariaLabel,\n allowDuplicates = false,\n className,\n data = [],\n defaultTags = [],\n defaultValue = \"\",\n disabled = false,\n delimiter = /[,\\n]/u,\n editable = false,\n id: providedId,\n label,\n onBlur,\n onChange,\n onFocus,\n onInputValueChange,\n onTagsChange,\n placeholder,\n tags: controlledTags,\n value: controlledInputValue,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const [uncontrolledTags, setUncontrolledTags] = useState<string[]>(() => [...defaultTags]);\n const [uncontrolledInputValue, setUncontrolledInputValue] = useState(defaultValue);\n const [focused, setFocused] = useState(false);\n const [composing, setComposing] = useState(false);\n const [editingTag, setEditingTag] = useState<{ index: number; value: string } | null>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const styles = tagsInput();\n const selectedTags = controlledTags === undefined ? uncontrolledTags : [...controlledTags];\n const inputValue =\n controlledInputValue === undefined ? uncontrolledInputValue : controlledInputValue;\n\n const updateTags = useCallback(\n (nextTags: string[]) => {\n if (controlledTags === undefined) setUncontrolledTags(nextTags);\n onTagsChange?.(nextTags);\n },\n [controlledTags, onTagsChange],\n );\n\n const clearInput = useCallback(\n (event?: ChangeEvent<HTMLInputElement>) => {\n if (controlledInputValue === undefined) setUncontrolledInputValue(\"\");\n onInputValueChange?.(\"\");\n if (event) onChange?.(changedEvent(event, \"\"));\n },\n [controlledInputValue, onChange, onInputValueChange],\n );\n\n const addTag = useCallback(\n (rawTag: string, event?: ChangeEvent<HTMLInputElement>) => {\n const tag = rawTag.trim();\n const isAllowed = data.length === 0 || data.includes(tag);\n const duplicate = selectedTags.includes(tag);\n if (tag && isAllowed && (allowDuplicates || !duplicate)) {\n if (editingTag) {\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n tag,\n ...selectedTags.slice(editingTag.index),\n ]);\n setEditingTag(null);\n } else {\n updateTags([...selectedTags, tag]);\n }\n } else if (editingTag) {\n return;\n }\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, editingTag, selectedTags, updateTags],\n );\n\n const addDelimited = useCallback(\n (rawValue: string, event?: ChangeEvent<HTMLInputElement>) => {\n const separator =\n typeof delimiter === \"string\" && delimiter.length === 0 ? /\\r?\\n/u : delimiter;\n const values = rawValue\n .split(separator)\n .map((value) => value.trim())\n .filter(Boolean);\n const nextTags = [...selectedTags];\n for (const value of values) {\n const isAllowed = data.length === 0 || data.includes(value);\n if (isAllowed && (allowDuplicates || !nextTags.includes(value))) nextTags.push(value);\n }\n if (nextTags.length !== selectedTags.length) updateTags(nextTags);\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, delimiter, selectedTags, updateTags],\n );\n\n const suggestions = useMemo(() => {\n const query = inputValue.trim().toLocaleLowerCase();\n return data.filter(\n (item) =>\n !selectedTags.includes(item) &&\n (query.length === 0 || item.toLocaleLowerCase().includes(query)),\n );\n }, [data, inputValue, selectedTags]);\n\n function handleChange(event: ChangeEvent<HTMLInputElement>) {\n const nextValue = event.currentTarget.value;\n if (nextValue.trim() === \"\") {\n clearInput(event);\n onChange?.(event);\n return;\n }\n\n if (!composing && hasDelimiter(nextValue, delimiter)) {\n addDelimited(nextValue, event);\n return;\n }\n\n if (controlledInputValue === undefined) setUncontrolledInputValue(nextValue);\n onInputValueChange?.(nextValue);\n onChange?.(event);\n }\n\n function handleBlur(event: FocusEvent<HTMLInputElement>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handlePaste(event: ClipboardEvent<HTMLInputElement>) {\n const pasted = event.clipboardData.getData(\"text\");\n if (!pasted || (!hasDelimiter(pasted, delimiter) && !pasted.includes(\"\\n\"))) return;\n event.preventDefault();\n addDelimited(pasted);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.nativeEvent.isComposing || composing) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (inputValue.trim()) addTag(inputValue);\n else if (editingTag) setEditingTag(null);\n } else if (event.key === \"Escape\" && editingTag) {\n event.preventDefault();\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n editingTag.value,\n ...selectedTags.slice(editingTag.index),\n ]);\n clearInput();\n setEditingTag(null);\n } else if (event.key === \"Backspace\" && !inputValue && editable && selectedTags.length > 0) {\n const index = selectedTags.length - 1;\n const tag = selectedTags[index];\n if (tag === undefined) return;\n setEditingTag({ index, value: tag });\n updateTags(selectedTags.slice(0, -1));\n if (controlledInputValue === undefined) setUncontrolledInputValue(tag);\n onInputValueChange?.(tag);\n }\n props.onKeyDown?.(event);\n }\n\n function removeTag(index: number) {\n updateTags(selectedTags.filter((_, currentIndex) => currentIndex !== index));\n }\n\n return (\n <div\n className={styles.root}\n data-jaci-component=\"tags-input\"\n data-slot=\"tags-input\"\n ref={rootRef}\n >\n {label ? (\n <label className={styles.label} data-slot=\"tags-input-label\" htmlFor={id}>\n {label}\n </label>\n ) : null}\n <div\n className={cx(styles.control, className)}\n data-disabled={disabled || undefined}\n data-focus={focused || undefined}\n data-slot=\"tags-input-control\"\n >\n <div className={styles.tagList} data-slot=\"tags-input-tag-list\">\n {selectedTags.map((tag, index) => (\n <span className={styles.tag} data-slot=\"tags-input-tag\" key={tagKey(tag, index)}>\n <span className={styles.tagLabel} data-slot=\"tags-input-tag-label\">\n {tag}\n </span>\n <button\n aria-label={`Remove ${tag}`}\n className={styles.tagRemove}\n data-slot=\"tags-input-tag-remove\"\n disabled={disabled}\n onClick={() => removeTag(index)}\n type=\"button\"\n >\n ×\n </button>\n </span>\n ))}\n </div>\n <input\n {...props}\n {...(ariaDescribedBy ? { \"aria-describedby\": ariaDescribedBy } : {})}\n {...(ariaInvalid !== undefined ? { \"aria-invalid\": ariaInvalid } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n autoComplete=\"off\"\n className={styles.input}\n disabled={disabled}\n id={id}\n onBlur={handleBlur}\n onChange={handleChange}\n onCompositionEnd={() => setComposing(false)}\n onCompositionStart={() => setComposing(true)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n ref={ref}\n type=\"text\"\n value={inputValue}\n />\n </div>\n {focused && data.length > 0 ? (\n <div className={styles.positioner} data-slot=\"tags-input-positioner\">\n <div\n aria-label=\"Suggestions\"\n className={styles.list}\n data-slot=\"tags-input-list\"\n role=\"listbox\"\n >\n {suggestions.length > 0 ? (\n suggestions.map((item) => (\n <button\n aria-selected={false}\n className={styles.item}\n data-slot=\"tags-input-item\"\n key={item}\n onClick={() => addTag(item)}\n onMouseDown={(event: MouseEvent<HTMLButtonElement>) => event.preventDefault()}\n role=\"option\"\n type=\"button\"\n >\n {item}\n </button>\n ))\n ) : (\n <div className={styles.empty} data-slot=\"tags-input-empty\">\n No options\n </div>\n )}\n </div>\n </div>\n ) : null}\n </div>\n );\n});\n"],"mappings":";;;;;;AA6CA,SAAS,aAAa,OAAsC,OAAe;CACzE,MAAM,SAAS,MAAM;CACrB,MAAM,aAAa;EACjB,SAAS,OAAO;EAChB,IAAI,OAAO;EACX,MAAM,OAAO;EACb;CACF;CAEA,OAAO;EACL,GAAG;EACH,eAAe;EACf,QAAQ;CACV;AACF;AAEA,SAAS,OAAO,KAAa,OAAe;CAC1C,OAAO,GAAG,IAAI,GAAG;AACnB;AAEA,SAAS,aAAa,OAAe,WAA4B;CAC/D,IAAI,OAAO,cAAc,UAAU,OAAO,UAAU,SAAS,KAAK,MAAM,SAAS,SAAS;CAC1F,UAAU,YAAY;CACtB,MAAM,SAAS,UAAU,KAAK,KAAK;CACnC,UAAU,YAAY;CACtB,OAAO;AACT;AAEA,MAAa,aAAA,GAAA,MAAA,WAAA,CAAyD,SAAS,UAC7E,EACE,oBAAoB,iBACpB,gBAAgB,aAChB,cAAc,WACd,kBAAkB,OAClB,WACA,OAAO,CAAC,GACR,cAAc,CAAC,GACf,eAAe,IACf,WAAW,OACX,YAAY,UACZ,WAAW,OACX,IAAI,YACJ,OACA,QACA,UACA,SACA,oBACA,cACA,aACA,MAAM,gBACN,OAAO,sBACP,GAAG,SAEL,KACA;CACA,MAAM,eAAA,GAAA,MAAA,MAAA,CAAoB;CAC1B,MAAM,KAAK,cAAc;CACzB,MAAM,CAAC,kBAAkB,wBAAA,GAAA,MAAA,SAAA,OAAgD,CAAC,GAAG,WAAW,CAAC;CACzF,MAAM,CAAC,wBAAwB,8BAAA,GAAA,MAAA,SAAA,CAAsC,YAAY;CACjF,MAAM,CAAC,SAAS,eAAA,GAAA,MAAA,SAAA,CAAuB,KAAK;CAC5C,MAAM,CAAC,WAAW,iBAAA,GAAA,MAAA,SAAA,CAAyB,KAAK;CAChD,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,SAAA,CAAmE,IAAI;CAC1F,MAAM,WAAA,GAAA,MAAA,OAAA,CAAiC,IAAI;CAC3C,MAAM,SAASA,mBAAAA,UAAU;CACzB,MAAM,eAAe,mBAAmB,KAAA,IAAY,mBAAmB,CAAC,GAAG,cAAc;CACzF,MAAM,aACJ,yBAAyB,KAAA,IAAY,yBAAyB;CAEhE,MAAM,cAAA,GAAA,MAAA,YAAA,EACH,aAAuB;EACtB,IAAI,mBAAmB,KAAA,GAAW,oBAAoB,QAAQ;EAC9D,eAAe,QAAQ;CACzB,GACA,CAAC,gBAAgB,YAAY,CAC/B;CAEA,MAAM,cAAA,GAAA,MAAA,YAAA,EACH,UAA0C;EACzC,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,EAAE;EACpE,qBAAqB,EAAE;EACvB,IAAI,OAAO,WAAW,aAAa,OAAO,EAAE,CAAC;CAC/C,GACA;EAAC;EAAsB;EAAU;CAAkB,CACrD;CAEA,MAAM,UAAA,GAAA,MAAA,YAAA,EACH,QAAgB,UAA0C;EACzD,MAAM,MAAM,OAAO,KAAK;EACxB,MAAM,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,GAAG;EACxD,MAAM,YAAY,aAAa,SAAS,GAAG;EAC3C,IAAI,OAAO,cAAc,mBAAmB,CAAC,YAC3C,IAAI,YAAY;GACd,WAAW;IACT,GAAG,aAAa,MAAM,GAAG,WAAW,KAAK;IACzC;IACA,GAAG,aAAa,MAAM,WAAW,KAAK;GACxC,CAAC;GACD,cAAc,IAAI;EACpB,OACE,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC;OAE9B,IAAI,YACT;EAEF,WAAW,KAAK;CAClB,GACA;EAAC;EAAiB;EAAY;EAAM;EAAY;EAAc;CAAU,CAC1E;CAEA,MAAM,gBAAA,GAAA,MAAA,YAAA,EACH,UAAkB,UAA0C;EAC3D,MAAM,YACJ,OAAO,cAAc,YAAY,UAAU,WAAW,IAAI,WAAW;EACvE,MAAM,SAAS,SACZ,MAAM,SAAS,CAAC,CAChB,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,OAAO,OAAO;EACjB,MAAM,WAAW,CAAC,GAAG,YAAY;EACjC,KAAK,MAAM,SAAS,QAElB,KADkB,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK,OACxC,mBAAmB,CAAC,SAAS,SAAS,KAAK,IAAI,SAAS,KAAK,KAAK;EAEtF,IAAI,SAAS,WAAW,aAAa,QAAQ,WAAW,QAAQ;EAChE,WAAW,KAAK;CAClB,GACA;EAAC;EAAiB;EAAY;EAAM;EAAW;EAAc;CAAU,CACzE;CAEA,MAAM,eAAA,GAAA,MAAA,QAAA,OAA4B;EAChC,MAAM,QAAQ,WAAW,KAAK,CAAC,CAAC,kBAAkB;EAClD,OAAO,KAAK,QACT,SACC,CAAC,aAAa,SAAS,IAAI,MAC1B,MAAM,WAAW,KAAK,KAAK,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAClE;CACF,GAAG;EAAC;EAAM;EAAY;CAAY,CAAC;CAEnC,SAAS,aAAa,OAAsC;EAC1D,MAAM,YAAY,MAAM,cAAc;EACtC,IAAI,UAAU,KAAK,MAAM,IAAI;GAC3B,WAAW,KAAK;GAChB,WAAW,KAAK;GAChB;EACF;EAEA,IAAI,CAAC,aAAa,aAAa,WAAW,SAAS,GAAG;GACpD,aAAa,WAAW,KAAK;GAC7B;EACF;EAEA,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,SAAS;EAC3E,qBAAqB,SAAS;EAC9B,WAAW,KAAK;CAClB;CAEA,SAAS,WAAW,OAAqC;EACvD,WAAW,KAAK;EAChB,SAAS,KAAK;CAChB;CAEA,SAAS,YAAY,OAAyC;EAC5D,MAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;EACjD,IAAI,CAAC,UAAW,CAAC,aAAa,QAAQ,SAAS,KAAK,CAAC,OAAO,SAAS,IAAI,GAAI;EAC7E,MAAM,eAAe;EACrB,aAAa,MAAM;CACrB;CAEA,SAAS,cAAc,OAAwC;EAC7D,IAAI,MAAM,YAAY,eAAe,WAAW;EAChD,IAAI,MAAM,QAAQ,SAAS;GACzB,MAAM,eAAe;GACrB,IAAI,WAAW,KAAK,GAAG,OAAO,UAAU;QACnC,IAAI,YAAY,cAAc,IAAI;EACzC,OAAO,IAAI,MAAM,QAAQ,YAAY,YAAY;GAC/C,MAAM,eAAe;GACrB,WAAW;IACT,GAAG,aAAa,MAAM,GAAG,WAAW,KAAK;IACzC,WAAW;IACX,GAAG,aAAa,MAAM,WAAW,KAAK;GACxC,CAAC;GACD,WAAW;GACX,cAAc,IAAI;EACpB,OAAO,IAAI,MAAM,QAAQ,eAAe,CAAC,cAAc,YAAY,aAAa,SAAS,GAAG;GAC1F,MAAM,QAAQ,aAAa,SAAS;GACpC,MAAM,MAAM,aAAa;GACzB,IAAI,QAAQ,KAAA,GAAW;GACvB,cAAc;IAAE;IAAO,OAAO;GAAI,CAAC;GACnC,WAAW,aAAa,MAAM,GAAG,EAAE,CAAC;GACpC,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,GAAG;GACrE,qBAAqB,GAAG;EAC1B;EACA,MAAM,YAAY,KAAK;CACzB;CAEA,SAAS,UAAU,OAAe;EAChC,WAAW,aAAa,QAAQ,GAAG,iBAAiB,iBAAiB,KAAK,CAAC;CAC7E;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,WAAW,OAAO;EAClB,uBAAoB;EACpB,aAAU;EACV,KAAK;YAJP;GAMG,QACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAO,WAAW,OAAO;IAAO,aAAU;IAAmB,SAAS;cACnE;GACI,CAAA,IACL;GACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IACE,WAAWC,WAAAA,GAAG,OAAO,SAAS,SAAS;IACvC,iBAAe,YAAY,KAAA;IAC3B,cAAY,WAAW,KAAA;IACvB,aAAU;cAJZ,CAME,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,OAAO;KAAS,aAAU;eACvC,aAAa,KAAK,KAAK,UACtB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAW,OAAO;MAAK,aAAU;gBAAvC,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAW,OAAO;OAAU,aAAU;iBACzC;MACG,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OACE,cAAY,UAAU;OACtB,WAAW,OAAO;OAClB,aAAU;OACA;OACV,eAAe,UAAU,KAAK;OAC9B,MAAK;iBACN;MAEO,CAAA,CACJ;QAduD,OAAO,KAAK,KAAK,CAcxE,CACP;IACE,CAAA,GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KACE,GAAI;KACJ,GAAK,kBAAkB,EAAE,oBAAoB,gBAAgB,IAAI,CAAC;KAClE,GAAK,gBAAgB,KAAA,IAAY,EAAE,gBAAgB,YAAY,IAAI,CAAC;KACpE,GAAK,YAAY,EAAE,cAAc,UAAU,IAAI,CAAC;KAChD,cAAa;KACb,WAAW,OAAO;KACR;KACN;KACJ,QAAQ;KACR,UAAU;KACV,wBAAwB,aAAa,KAAK;KAC1C,0BAA0B,aAAa,IAAI;KAC3C,UAAU,UAAU;MAClB,WAAW,IAAI;MACf,UAAU,KAAK;KACjB;KACA,WAAW;KACX,SAAS;KACI;KACR;KACL,MAAK;KACL,OAAO;IACR,CAAA,CACE;;GACJ,WAAW,KAAK,SAAS,IACxB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAW,OAAO;IAAY,aAAU;cAC3C,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KACE,cAAW;KACX,WAAW,OAAO;KAClB,aAAU;KACV,MAAK;eAEJ,YAAY,SAAS,IACpB,YAAY,KAAK,SACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,iBAAe;MACf,WAAW,OAAO;MAClB,aAAU;MAEV,eAAe,OAAO,IAAI;MAC1B,cAAc,UAAyC,MAAM,eAAe;MAC5E,MAAK;MACL,MAAK;gBAEJ;KACK,GAPD,IAOC,CACT,IAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAW,OAAO;MAAO,aAAU;gBAAmB;KAEtD,CAAA;IAEJ,CAAA;GACF,CAAA,IACH;EACD;;AAET,CAAC"}
1
+ {"version":3,"file":"tags-input.cjs","names":["forwardRef","useId","useState","useRef","tagsInput","useCallback","useMemo","cx"],"sources":["../../../src/components/tags-input/tags-input.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ClipboardEvent,\n ReactNode,\n} from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { tagsInput } from \"../../styled-system/recipes\";\n\nexport interface TagsInputProps\n extends Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"children\" | \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n > {\n /** Current tags. Omit this prop to use the uncontrolled API. */\n tags?: readonly string[];\n /** Initial tags for the uncontrolled API. */\n defaultTags?: readonly string[];\n /** Called whenever a tag is added or removed. */\n onTagsChange?: (tags: string[]) => void;\n /** Optional suggestions. A tag is accepted after a comma only when it is in this list. */\n data?: readonly string[];\n /** Visible label for the input. */\n label?: ReactNode;\n /** Current text query. This is the native input value, not the selected tags. */\n value?: string;\n /** Initial text query for an uncontrolled input. */\n defaultValue?: string;\n /** Native input change callback. */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /** Optional callback useful when a controlled query is cleared by selecting a tag. */\n onInputValueChange?: (value: string) => void;\n allowDuplicates?: boolean;\n delimiter?: string | RegExp;\n editable?: boolean;\n}\n\nfunction changedEvent(event: ChangeEvent<HTMLInputElement>, value: string) {\n const target = event.target;\n const nextTarget = {\n checked: target.checked,\n id: target.id,\n name: target.name,\n value,\n } as HTMLInputElement;\n\n return {\n ...event,\n currentTarget: nextTarget,\n target: nextTarget,\n } as ChangeEvent<HTMLInputElement>;\n}\n\nfunction tagKey(tag: string, index: number) {\n return `${tag}-${index}`;\n}\n\nfunction hasDelimiter(value: string, delimiter: string | RegExp) {\n if (typeof delimiter === \"string\") return delimiter.length > 0 && value.includes(delimiter);\n delimiter.lastIndex = 0;\n const result = delimiter.test(value);\n delimiter.lastIndex = 0;\n return result;\n}\n\nexport const TagsInput = forwardRef<HTMLInputElement, TagsInputProps>(function TagsInput(\n {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-label\": ariaLabel,\n allowDuplicates = false,\n className,\n data = [],\n defaultTags = [],\n defaultValue = \"\",\n disabled = false,\n delimiter = /[,\\n]/u,\n editable = false,\n id: providedId,\n label,\n onBlur,\n onChange,\n onFocus,\n onInputValueChange,\n onTagsChange,\n placeholder,\n tags: controlledTags,\n value: controlledInputValue,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const [uncontrolledTags, setUncontrolledTags] = useState<string[]>(() => [...defaultTags]);\n const [uncontrolledInputValue, setUncontrolledInputValue] = useState(defaultValue);\n const [focused, setFocused] = useState(false);\n const [composing, setComposing] = useState(false);\n const [editingTag, setEditingTag] = useState<{ index: number; value: string } | null>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const styles = tagsInput();\n const selectedTags = controlledTags === undefined ? uncontrolledTags : [...controlledTags];\n const inputValue =\n controlledInputValue === undefined ? uncontrolledInputValue : controlledInputValue;\n\n const updateTags = useCallback(\n (nextTags: string[]) => {\n if (controlledTags === undefined) setUncontrolledTags(nextTags);\n onTagsChange?.(nextTags);\n },\n [controlledTags, onTagsChange],\n );\n\n const clearInput = useCallback(\n (event?: ChangeEvent<HTMLInputElement>) => {\n if (controlledInputValue === undefined) setUncontrolledInputValue(\"\");\n onInputValueChange?.(\"\");\n if (event) onChange?.(changedEvent(event, \"\"));\n },\n [controlledInputValue, onChange, onInputValueChange],\n );\n\n const addTag = useCallback(\n (rawTag: string, event?: ChangeEvent<HTMLInputElement>) => {\n const tag = rawTag.trim();\n const isAllowed = data.length === 0 || data.includes(tag);\n const duplicate = selectedTags.includes(tag);\n if (tag && isAllowed && (allowDuplicates || !duplicate)) {\n if (editingTag) {\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n tag,\n ...selectedTags.slice(editingTag.index),\n ]);\n setEditingTag(null);\n } else {\n updateTags([...selectedTags, tag]);\n }\n } else if (editingTag) {\n return;\n }\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, editingTag, selectedTags, updateTags],\n );\n\n const addDelimited = useCallback(\n (rawValue: string, event?: ChangeEvent<HTMLInputElement>) => {\n const separator =\n typeof delimiter === \"string\" && delimiter.length === 0 ? /\\r?\\n/u : delimiter;\n const values = rawValue\n .split(separator)\n .map((value) => value.trim())\n .filter(Boolean);\n const nextTags = [...selectedTags];\n for (const value of values) {\n const isAllowed = data.length === 0 || data.includes(value);\n if (isAllowed && (allowDuplicates || !nextTags.includes(value))) nextTags.push(value);\n }\n if (nextTags.length !== selectedTags.length) updateTags(nextTags);\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, delimiter, selectedTags, updateTags],\n );\n\n const suggestions = useMemo(() => {\n const query = inputValue.trim().toLocaleLowerCase();\n return data.filter(\n (item) =>\n !selectedTags.includes(item) &&\n (query.length === 0 || item.toLocaleLowerCase().includes(query)),\n );\n }, [data, inputValue, selectedTags]);\n\n function handleChange(event: ChangeEvent<HTMLInputElement>) {\n const nextValue = event.currentTarget.value;\n if (nextValue.trim() === \"\") {\n clearInput(event);\n onChange?.(event);\n return;\n }\n\n if (!composing && hasDelimiter(nextValue, delimiter)) {\n addDelimited(nextValue, event);\n return;\n }\n\n if (controlledInputValue === undefined) setUncontrolledInputValue(nextValue);\n onInputValueChange?.(nextValue);\n onChange?.(event);\n }\n\n function handleBlur(event: FocusEvent<HTMLInputElement>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handlePaste(event: ClipboardEvent<HTMLInputElement>) {\n const pasted = event.clipboardData.getData(\"text\");\n if (!pasted || (!hasDelimiter(pasted, delimiter) && !pasted.includes(\"\\n\"))) return;\n event.preventDefault();\n addDelimited(pasted);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.nativeEvent.isComposing || composing) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (inputValue.trim()) addTag(inputValue);\n else if (editingTag) setEditingTag(null);\n } else if (event.key === \"Escape\" && editingTag) {\n event.preventDefault();\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n editingTag.value,\n ...selectedTags.slice(editingTag.index),\n ]);\n clearInput();\n setEditingTag(null);\n } else if (event.key === \"Backspace\" && !inputValue && editable && selectedTags.length > 0) {\n const index = selectedTags.length - 1;\n const tag = selectedTags[index];\n if (tag === undefined) return;\n setEditingTag({ index, value: tag });\n updateTags(selectedTags.slice(0, -1));\n if (controlledInputValue === undefined) setUncontrolledInputValue(tag);\n onInputValueChange?.(tag);\n }\n props.onKeyDown?.(event);\n }\n\n function removeTag(index: number) {\n updateTags(selectedTags.filter((_, currentIndex) => currentIndex !== index));\n }\n\n return (\n <div\n className={styles.root}\n data-jaci-component=\"tags-input\"\n data-slot=\"tags-input\"\n ref={rootRef}\n >\n {label ? (\n <label className={styles.label} data-slot=\"tags-input-label\" htmlFor={id}>\n {label}\n </label>\n ) : null}\n <div\n className={cx(styles.control, className)}\n data-disabled={disabled || undefined}\n data-focus={focused || undefined}\n data-slot=\"tags-input-control\"\n >\n <div className={styles.tagList} data-slot=\"tags-input-tag-list\">\n {selectedTags.map((tag, index) => (\n <span className={styles.tag} data-slot=\"tags-input-tag\" key={tagKey(tag, index)}>\n <span className={styles.tagLabel} data-slot=\"tags-input-tag-label\">\n {tag}\n </span>\n <button\n aria-label={`Remove ${tag}`}\n className={styles.tagRemove}\n data-slot=\"tags-input-tag-remove\"\n disabled={disabled}\n onClick={() => removeTag(index)}\n type=\"button\"\n >\n ×\n </button>\n </span>\n ))}\n </div>\n <input\n {...props}\n {...(ariaDescribedBy ? { \"aria-describedby\": ariaDescribedBy } : {})}\n {...(ariaInvalid !== undefined ? { \"aria-invalid\": ariaInvalid } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n autoComplete=\"off\"\n className={styles.input}\n disabled={disabled}\n id={id}\n onBlur={handleBlur}\n onChange={handleChange}\n onCompositionEnd={() => setComposing(false)}\n onCompositionStart={() => setComposing(true)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n ref={ref}\n type=\"text\"\n value={inputValue}\n />\n </div>\n {focused && data.length > 0 ? (\n <div className={styles.positioner} data-slot=\"tags-input-positioner\">\n <div\n aria-label=\"Suggestions\"\n className={styles.list}\n data-slot=\"tags-input-list\"\n role=\"listbox\"\n >\n {suggestions.length > 0 ? (\n suggestions.map((item) => (\n <button\n aria-selected={false}\n className={styles.item}\n data-slot=\"tags-input-item\"\n key={item}\n onClick={() => addTag(item)}\n onMouseDown={(event: MouseEvent<HTMLButtonElement>) => event.preventDefault()}\n role=\"option\"\n type=\"button\"\n >\n {item}\n </button>\n ))\n ) : (\n <div className={styles.empty} data-slot=\"tags-input-empty\">\n No options\n </div>\n )}\n </div>\n </div>\n ) : null}\n </div>\n );\n});\n"],"mappings":";;;;;;AA6CA,SAAS,aAAa,OAAsC,OAAe;CACzE,MAAM,SAAS,MAAM;CACrB,MAAM,aAAa;EACjB,SAAS,OAAO;EAChB,IAAI,OAAO;EACX,MAAM,OAAO;EACb;CACF;CAEA,OAAO;EACL,GAAG;EACH,eAAe;EACf,QAAQ;CACV;AACF;AAEA,SAAS,OAAO,KAAa,OAAe;CAC1C,OAAO,GAAG,IAAI,GAAG;AACnB;AAEA,SAAS,aAAa,OAAe,WAA4B;CAC/D,IAAI,OAAO,cAAc,UAAU,OAAO,UAAU,SAAS,KAAK,MAAM,SAAS,SAAS;CAC1F,UAAU,YAAY;CACtB,MAAM,SAAS,UAAU,KAAK,KAAK;CACnC,UAAU,YAAY;CACtB,OAAO;AACT;AAEA,MAAa,aAAA,GAAYA,MAAAA,WAAAA,CAA6C,SAAS,UAC7E,EACE,oBAAoB,iBACpB,gBAAgB,aAChB,cAAc,WACd,kBAAkB,OAClB,WACA,OAAO,CAAC,GACR,cAAc,CAAC,GACf,eAAe,IACf,WAAW,OACX,YAAY,UACZ,WAAW,OACX,IAAI,YACJ,OACA,QACA,UACA,SACA,oBACA,cACA,aACA,MAAM,gBACN,OAAO,sBACP,GAAG,SAEL,KACA;CACA,MAAM,eAAA,GAAcC,MAAAA,MAAAA,CAAM;CAC1B,MAAM,KAAK,cAAc;CACzB,MAAM,CAAC,kBAAkB,wBAAA,GAAuBC,MAAAA,SAAAA,OAAyB,CAAC,GAAG,WAAW,CAAC;CACzF,MAAM,CAAC,wBAAwB,8BAAA,GAA6BA,MAAAA,SAAAA,CAAS,YAAY;CACjF,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAS,KAAK;CAC5C,MAAM,CAAC,WAAW,iBAAA,GAAgBA,MAAAA,SAAAA,CAAS,KAAK;CAChD,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAkD,IAAI;CAC1F,MAAM,WAAA,GAAUC,MAAAA,OAAAA,CAAuB,IAAI;CAC3C,MAAM,SAASC,mBAAAA,UAAU;CACzB,MAAM,eAAe,mBAAmB,KAAA,IAAY,mBAAmB,CAAC,GAAG,cAAc;CACzF,MAAM,aACJ,yBAAyB,KAAA,IAAY,yBAAyB;CAEhE,MAAM,cAAA,GAAaC,MAAAA,YAAAA,EAChB,aAAuB;EACtB,IAAI,mBAAmB,KAAA,GAAW,oBAAoB,QAAQ;EAC9D,eAAe,QAAQ;CACzB,GACA,CAAC,gBAAgB,YAAY,CAC/B;CAEA,MAAM,cAAA,GAAaA,MAAAA,YAAAA,EAChB,UAA0C;EACzC,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,EAAE;EACpE,qBAAqB,EAAE;EACvB,IAAI,OAAO,WAAW,aAAa,OAAO,EAAE,CAAC;CAC/C,GACA;EAAC;EAAsB;EAAU;CAAkB,CACrD;CAEA,MAAM,UAAA,GAASA,MAAAA,YAAAA,EACZ,QAAgB,UAA0C;EACzD,MAAM,MAAM,OAAO,KAAK;EACxB,MAAM,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,GAAG;EACxD,MAAM,YAAY,aAAa,SAAS,GAAG;EAC3C,IAAI,OAAO,cAAc,mBAAmB,CAAC,YAAY;GACvD,IAAI,YAAY;IACd,WAAW;KACT,GAAG,aAAa,MAAM,GAAG,WAAW,KAAK;KACzC;KACA,GAAG,aAAa,MAAM,WAAW,KAAK;IACxC,CAAC;IACD,cAAc,IAAI;GACpB,OACE,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC;EAErC,OAAO,IAAI,YACT;EAEF,WAAW,KAAK;CAClB,GACA;EAAC;EAAiB;EAAY;EAAM;EAAY;EAAc;CAAU,CAC1E;CAEA,MAAM,gBAAA,GAAeA,MAAAA,YAAAA,EAClB,UAAkB,UAA0C;EAC3D,MAAM,YACJ,OAAO,cAAc,YAAY,UAAU,WAAW,IAAI,WAAW;EACvE,MAAM,SAAS,SACZ,MAAM,SAAS,CAAC,CAChB,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,OAAO,OAAO;EACjB,MAAM,WAAW,CAAC,GAAG,YAAY;EACjC,KAAK,MAAM,SAAS,QAElB,KADkB,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK,OACxC,mBAAmB,CAAC,SAAS,SAAS,KAAK,IAAI,SAAS,KAAK,KAAK;EAEtF,IAAI,SAAS,WAAW,aAAa,QAAQ,WAAW,QAAQ;EAChE,WAAW,KAAK;CAClB,GACA;EAAC;EAAiB;EAAY;EAAM;EAAW;EAAc;CAAU,CACzE;CAEA,MAAM,eAAA,GAAcC,MAAAA,QAAAA,OAAc;EAChC,MAAM,QAAQ,WAAW,KAAK,CAAC,CAAC,kBAAkB;EAClD,OAAO,KAAK,QACT,SACC,CAAC,aAAa,SAAS,IAAI,MAC1B,MAAM,WAAW,KAAK,KAAK,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAClE;CACF,GAAG;EAAC;EAAM;EAAY;CAAY,CAAC;CAEnC,SAAS,aAAa,OAAsC;EAC1D,MAAM,YAAY,MAAM,cAAc;EACtC,IAAI,UAAU,KAAK,MAAM,IAAI;GAC3B,WAAW,KAAK;GAChB,WAAW,KAAK;GAChB;EACF;EAEA,IAAI,CAAC,aAAa,aAAa,WAAW,SAAS,GAAG;GACpD,aAAa,WAAW,KAAK;GAC7B;EACF;EAEA,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,SAAS;EAC3E,qBAAqB,SAAS;EAC9B,WAAW,KAAK;CAClB;CAEA,SAAS,WAAW,OAAqC;EACvD,WAAW,KAAK;EAChB,SAAS,KAAK;CAChB;CAEA,SAAS,YAAY,OAAyC;EAC5D,MAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;EACjD,IAAI,CAAC,UAAW,CAAC,aAAa,QAAQ,SAAS,KAAK,CAAC,OAAO,SAAS,IAAI,GAAI;EAC7E,MAAM,eAAe;EACrB,aAAa,MAAM;CACrB;CAEA,SAAS,cAAc,OAAwC;EAC7D,IAAI,MAAM,YAAY,eAAe,WAAW;EAChD,IAAI,MAAM,QAAQ,SAAS;GACzB,MAAM,eAAe;GACrB,IAAI,WAAW,KAAK,GAAG,OAAO,UAAU;QACnC,IAAI,YAAY,cAAc,IAAI;EACzC,OAAO,IAAI,MAAM,QAAQ,YAAY,YAAY;GAC/C,MAAM,eAAe;GACrB,WAAW;IACT,GAAG,aAAa,MAAM,GAAG,WAAW,KAAK;IACzC,WAAW;IACX,GAAG,aAAa,MAAM,WAAW,KAAK;GACxC,CAAC;GACD,WAAW;GACX,cAAc,IAAI;EACpB,OAAO,IAAI,MAAM,QAAQ,eAAe,CAAC,cAAc,YAAY,aAAa,SAAS,GAAG;GAC1F,MAAM,QAAQ,aAAa,SAAS;GACpC,MAAM,MAAM,aAAa;GACzB,IAAI,QAAQ,KAAA,GAAW;GACvB,cAAc;IAAE;IAAO,OAAO;GAAI,CAAC;GACnC,WAAW,aAAa,MAAM,GAAG,EAAE,CAAC;GACpC,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,GAAG;GACrE,qBAAqB,GAAG;EAC1B;EACA,MAAM,YAAY,KAAK;CACzB;CAEA,SAAS,UAAU,OAAe;EAChC,WAAW,aAAa,QAAQ,GAAG,iBAAiB,iBAAiB,KAAK,CAAC;CAC7E;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,WAAW,OAAO;EAClB,uBAAoB;EACpB,aAAU;EACV,KAAK;EAJP,UAAA;GAMG,QACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAO,WAAW,OAAO;IAAO,aAAU;IAAmB,SAAS;IACnE,UAAA;GACI,CAAA,IACL;GACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IACE,WAAWC,WAAAA,GAAG,OAAO,SAAS,SAAS;IACvC,iBAAe,YAAY,KAAA;IAC3B,cAAY,WAAW,KAAA;IACvB,aAAU;IAJZ,UAAA,CAME,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAW,OAAO;KAAS,aAAU;KACvC,UAAA,aAAa,KAAK,KAAK,UACtB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAW,OAAO;MAAK,aAAU;MAAvC,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAW,OAAO;OAAU,aAAU;OACzC,UAAA;MACG,CAAA,GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OACE,cAAY,UAAU;OACtB,WAAW,OAAO;OAClB,aAAU;OACA;OACV,eAAe,UAAU,KAAK;OAC9B,MAAK;OACN,UAAA;MAEO,CAAA,CACJ;KAduD,GAAA,OAAO,KAAK,KAAK,CAcxE,CACP;IACE,CAAA,GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KACE,GAAI;KACJ,GAAK,kBAAkB,EAAE,oBAAoB,gBAAgB,IAAI,CAAC;KAClE,GAAK,gBAAgB,KAAA,IAAY,EAAE,gBAAgB,YAAY,IAAI,CAAC;KACpE,GAAK,YAAY,EAAE,cAAc,UAAU,IAAI,CAAC;KAChD,cAAa;KACb,WAAW,OAAO;KACR;KACN;KACJ,QAAQ;KACR,UAAU;KACV,wBAAwB,aAAa,KAAK;KAC1C,0BAA0B,aAAa,IAAI;KAC3C,UAAU,UAAU;MAClB,WAAW,IAAI;MACf,UAAU,KAAK;KACjB;KACA,WAAW;KACX,SAAS;KACI;KACR;KACL,MAAK;KACL,OAAO;IACR,CAAA,CACE;;GACJ,WAAW,KAAK,SAAS,IACxB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAW,OAAO;IAAY,aAAU;IAC3C,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KACE,cAAW;KACX,WAAW,OAAO;KAClB,aAAU;KACV,MAAK;KAEJ,UAAA,YAAY,SAAS,IACpB,YAAY,KAAK,SACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,iBAAe;MACf,WAAW,OAAO;MAClB,aAAU;MAEV,eAAe,OAAO,IAAI;MAC1B,cAAc,UAAyC,MAAM,eAAe;MAC5E,MAAK;MACL,MAAK;MAEJ,UAAA;KACK,GAPD,IAOC,CACT,IAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAW,OAAO;MAAO,aAAU;MAAmB,UAAA;KAEtD,CAAA;IAEJ,CAAA;GACF,CAAA,IACH;EACD;;AAET,CAAC"}
@@ -57,15 +57,16 @@ const TagsInput = forwardRef(function TagsInput({ "aria-describedby": ariaDescri
57
57
  const tag = rawTag.trim();
58
58
  const isAllowed = data.length === 0 || data.includes(tag);
59
59
  const duplicate = selectedTags.includes(tag);
60
- if (tag && isAllowed && (allowDuplicates || !duplicate)) if (editingTag) {
61
- updateTags([
62
- ...selectedTags.slice(0, editingTag.index),
63
- tag,
64
- ...selectedTags.slice(editingTag.index)
65
- ]);
66
- setEditingTag(null);
67
- } else updateTags([...selectedTags, tag]);
68
- else if (editingTag) return;
60
+ if (tag && isAllowed && (allowDuplicates || !duplicate)) {
61
+ if (editingTag) {
62
+ updateTags([
63
+ ...selectedTags.slice(0, editingTag.index),
64
+ tag,
65
+ ...selectedTags.slice(editingTag.index)
66
+ ]);
67
+ setEditingTag(null);
68
+ } else updateTags([...selectedTags, tag]);
69
+ } else if (editingTag) return;
69
70
  clearInput(event);
70
71
  }, [
71
72
  allowDuplicates,
@@ -1 +1 @@
1
- {"version":3,"file":"tags-input.js","names":[],"sources":["../../../src/components/tags-input/tags-input.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ClipboardEvent,\n ReactNode,\n} from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { tagsInput } from \"../../styled-system/recipes\";\n\nexport interface TagsInputProps\n extends Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"children\" | \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n > {\n /** Current tags. Omit this prop to use the uncontrolled API. */\n tags?: readonly string[];\n /** Initial tags for the uncontrolled API. */\n defaultTags?: readonly string[];\n /** Called whenever a tag is added or removed. */\n onTagsChange?: (tags: string[]) => void;\n /** Optional suggestions. A tag is accepted after a comma only when it is in this list. */\n data?: readonly string[];\n /** Visible label for the input. */\n label?: ReactNode;\n /** Current text query. This is the native input value, not the selected tags. */\n value?: string;\n /** Initial text query for an uncontrolled input. */\n defaultValue?: string;\n /** Native input change callback. */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /** Optional callback useful when a controlled query is cleared by selecting a tag. */\n onInputValueChange?: (value: string) => void;\n allowDuplicates?: boolean;\n delimiter?: string | RegExp;\n editable?: boolean;\n}\n\nfunction changedEvent(event: ChangeEvent<HTMLInputElement>, value: string) {\n const target = event.target;\n const nextTarget = {\n checked: target.checked,\n id: target.id,\n name: target.name,\n value,\n } as HTMLInputElement;\n\n return {\n ...event,\n currentTarget: nextTarget,\n target: nextTarget,\n } as ChangeEvent<HTMLInputElement>;\n}\n\nfunction tagKey(tag: string, index: number) {\n return `${tag}-${index}`;\n}\n\nfunction hasDelimiter(value: string, delimiter: string | RegExp) {\n if (typeof delimiter === \"string\") return delimiter.length > 0 && value.includes(delimiter);\n delimiter.lastIndex = 0;\n const result = delimiter.test(value);\n delimiter.lastIndex = 0;\n return result;\n}\n\nexport const TagsInput = forwardRef<HTMLInputElement, TagsInputProps>(function TagsInput(\n {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-label\": ariaLabel,\n allowDuplicates = false,\n className,\n data = [],\n defaultTags = [],\n defaultValue = \"\",\n disabled = false,\n delimiter = /[,\\n]/u,\n editable = false,\n id: providedId,\n label,\n onBlur,\n onChange,\n onFocus,\n onInputValueChange,\n onTagsChange,\n placeholder,\n tags: controlledTags,\n value: controlledInputValue,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const [uncontrolledTags, setUncontrolledTags] = useState<string[]>(() => [...defaultTags]);\n const [uncontrolledInputValue, setUncontrolledInputValue] = useState(defaultValue);\n const [focused, setFocused] = useState(false);\n const [composing, setComposing] = useState(false);\n const [editingTag, setEditingTag] = useState<{ index: number; value: string } | null>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const styles = tagsInput();\n const selectedTags = controlledTags === undefined ? uncontrolledTags : [...controlledTags];\n const inputValue =\n controlledInputValue === undefined ? uncontrolledInputValue : controlledInputValue;\n\n const updateTags = useCallback(\n (nextTags: string[]) => {\n if (controlledTags === undefined) setUncontrolledTags(nextTags);\n onTagsChange?.(nextTags);\n },\n [controlledTags, onTagsChange],\n );\n\n const clearInput = useCallback(\n (event?: ChangeEvent<HTMLInputElement>) => {\n if (controlledInputValue === undefined) setUncontrolledInputValue(\"\");\n onInputValueChange?.(\"\");\n if (event) onChange?.(changedEvent(event, \"\"));\n },\n [controlledInputValue, onChange, onInputValueChange],\n );\n\n const addTag = useCallback(\n (rawTag: string, event?: ChangeEvent<HTMLInputElement>) => {\n const tag = rawTag.trim();\n const isAllowed = data.length === 0 || data.includes(tag);\n const duplicate = selectedTags.includes(tag);\n if (tag && isAllowed && (allowDuplicates || !duplicate)) {\n if (editingTag) {\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n tag,\n ...selectedTags.slice(editingTag.index),\n ]);\n setEditingTag(null);\n } else {\n updateTags([...selectedTags, tag]);\n }\n } else if (editingTag) {\n return;\n }\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, editingTag, selectedTags, updateTags],\n );\n\n const addDelimited = useCallback(\n (rawValue: string, event?: ChangeEvent<HTMLInputElement>) => {\n const separator =\n typeof delimiter === \"string\" && delimiter.length === 0 ? /\\r?\\n/u : delimiter;\n const values = rawValue\n .split(separator)\n .map((value) => value.trim())\n .filter(Boolean);\n const nextTags = [...selectedTags];\n for (const value of values) {\n const isAllowed = data.length === 0 || data.includes(value);\n if (isAllowed && (allowDuplicates || !nextTags.includes(value))) nextTags.push(value);\n }\n if (nextTags.length !== selectedTags.length) updateTags(nextTags);\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, delimiter, selectedTags, updateTags],\n );\n\n const suggestions = useMemo(() => {\n const query = inputValue.trim().toLocaleLowerCase();\n return data.filter(\n (item) =>\n !selectedTags.includes(item) &&\n (query.length === 0 || item.toLocaleLowerCase().includes(query)),\n );\n }, [data, inputValue, selectedTags]);\n\n function handleChange(event: ChangeEvent<HTMLInputElement>) {\n const nextValue = event.currentTarget.value;\n if (nextValue.trim() === \"\") {\n clearInput(event);\n onChange?.(event);\n return;\n }\n\n if (!composing && hasDelimiter(nextValue, delimiter)) {\n addDelimited(nextValue, event);\n return;\n }\n\n if (controlledInputValue === undefined) setUncontrolledInputValue(nextValue);\n onInputValueChange?.(nextValue);\n onChange?.(event);\n }\n\n function handleBlur(event: FocusEvent<HTMLInputElement>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handlePaste(event: ClipboardEvent<HTMLInputElement>) {\n const pasted = event.clipboardData.getData(\"text\");\n if (!pasted || (!hasDelimiter(pasted, delimiter) && !pasted.includes(\"\\n\"))) return;\n event.preventDefault();\n addDelimited(pasted);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.nativeEvent.isComposing || composing) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (inputValue.trim()) addTag(inputValue);\n else if (editingTag) setEditingTag(null);\n } else if (event.key === \"Escape\" && editingTag) {\n event.preventDefault();\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n editingTag.value,\n ...selectedTags.slice(editingTag.index),\n ]);\n clearInput();\n setEditingTag(null);\n } else if (event.key === \"Backspace\" && !inputValue && editable && selectedTags.length > 0) {\n const index = selectedTags.length - 1;\n const tag = selectedTags[index];\n if (tag === undefined) return;\n setEditingTag({ index, value: tag });\n updateTags(selectedTags.slice(0, -1));\n if (controlledInputValue === undefined) setUncontrolledInputValue(tag);\n onInputValueChange?.(tag);\n }\n props.onKeyDown?.(event);\n }\n\n function removeTag(index: number) {\n updateTags(selectedTags.filter((_, currentIndex) => currentIndex !== index));\n }\n\n return (\n <div\n className={styles.root}\n data-jaci-component=\"tags-input\"\n data-slot=\"tags-input\"\n ref={rootRef}\n >\n {label ? (\n <label className={styles.label} data-slot=\"tags-input-label\" htmlFor={id}>\n {label}\n </label>\n ) : null}\n <div\n className={cx(styles.control, className)}\n data-disabled={disabled || undefined}\n data-focus={focused || undefined}\n data-slot=\"tags-input-control\"\n >\n <div className={styles.tagList} data-slot=\"tags-input-tag-list\">\n {selectedTags.map((tag, index) => (\n <span className={styles.tag} data-slot=\"tags-input-tag\" key={tagKey(tag, index)}>\n <span className={styles.tagLabel} data-slot=\"tags-input-tag-label\">\n {tag}\n </span>\n <button\n aria-label={`Remove ${tag}`}\n className={styles.tagRemove}\n data-slot=\"tags-input-tag-remove\"\n disabled={disabled}\n onClick={() => removeTag(index)}\n type=\"button\"\n >\n ×\n </button>\n </span>\n ))}\n </div>\n <input\n {...props}\n {...(ariaDescribedBy ? { \"aria-describedby\": ariaDescribedBy } : {})}\n {...(ariaInvalid !== undefined ? { \"aria-invalid\": ariaInvalid } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n autoComplete=\"off\"\n className={styles.input}\n disabled={disabled}\n id={id}\n onBlur={handleBlur}\n onChange={handleChange}\n onCompositionEnd={() => setComposing(false)}\n onCompositionStart={() => setComposing(true)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n ref={ref}\n type=\"text\"\n value={inputValue}\n />\n </div>\n {focused && data.length > 0 ? (\n <div className={styles.positioner} data-slot=\"tags-input-positioner\">\n <div\n aria-label=\"Suggestions\"\n className={styles.list}\n data-slot=\"tags-input-list\"\n role=\"listbox\"\n >\n {suggestions.length > 0 ? (\n suggestions.map((item) => (\n <button\n aria-selected={false}\n className={styles.item}\n data-slot=\"tags-input-item\"\n key={item}\n onClick={() => addTag(item)}\n onMouseDown={(event: MouseEvent<HTMLButtonElement>) => event.preventDefault()}\n role=\"option\"\n type=\"button\"\n >\n {item}\n </button>\n ))\n ) : (\n <div className={styles.empty} data-slot=\"tags-input-empty\">\n No options\n </div>\n )}\n </div>\n </div>\n ) : null}\n </div>\n );\n});\n"],"mappings":";;;;;;AA6CA,SAAS,aAAa,OAAsC,OAAe;CACzE,MAAM,SAAS,MAAM;CACrB,MAAM,aAAa;EACjB,SAAS,OAAO;EAChB,IAAI,OAAO;EACX,MAAM,OAAO;EACb;CACF;CAEA,OAAO;EACL,GAAG;EACH,eAAe;EACf,QAAQ;CACV;AACF;AAEA,SAAS,OAAO,KAAa,OAAe;CAC1C,OAAO,GAAG,IAAI,GAAG;AACnB;AAEA,SAAS,aAAa,OAAe,WAA4B;CAC/D,IAAI,OAAO,cAAc,UAAU,OAAO,UAAU,SAAS,KAAK,MAAM,SAAS,SAAS;CAC1F,UAAU,YAAY;CACtB,MAAM,SAAS,UAAU,KAAK,KAAK;CACnC,UAAU,YAAY;CACtB,OAAO;AACT;AAEA,MAAa,YAAY,WAA6C,SAAS,UAC7E,EACE,oBAAoB,iBACpB,gBAAgB,aAChB,cAAc,WACd,kBAAkB,OAClB,WACA,OAAO,CAAC,GACR,cAAc,CAAC,GACf,eAAe,IACf,WAAW,OACX,YAAY,UACZ,WAAW,OACX,IAAI,YACJ,OACA,QACA,UACA,SACA,oBACA,cACA,aACA,MAAM,gBACN,OAAO,sBACP,GAAG,SAEL,KACA;CACA,MAAM,cAAc,MAAM;CAC1B,MAAM,KAAK,cAAc;CACzB,MAAM,CAAC,kBAAkB,uBAAuB,eAAyB,CAAC,GAAG,WAAW,CAAC;CACzF,MAAM,CAAC,wBAAwB,6BAA6B,SAAS,YAAY;CACjF,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAChD,MAAM,CAAC,YAAY,iBAAiB,SAAkD,IAAI;CAC1F,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,SAAS,UAAU;CACzB,MAAM,eAAe,mBAAmB,KAAA,IAAY,mBAAmB,CAAC,GAAG,cAAc;CACzF,MAAM,aACJ,yBAAyB,KAAA,IAAY,yBAAyB;CAEhE,MAAM,aAAa,aAChB,aAAuB;EACtB,IAAI,mBAAmB,KAAA,GAAW,oBAAoB,QAAQ;EAC9D,eAAe,QAAQ;CACzB,GACA,CAAC,gBAAgB,YAAY,CAC/B;CAEA,MAAM,aAAa,aAChB,UAA0C;EACzC,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,EAAE;EACpE,qBAAqB,EAAE;EACvB,IAAI,OAAO,WAAW,aAAa,OAAO,EAAE,CAAC;CAC/C,GACA;EAAC;EAAsB;EAAU;CAAkB,CACrD;CAEA,MAAM,SAAS,aACZ,QAAgB,UAA0C;EACzD,MAAM,MAAM,OAAO,KAAK;EACxB,MAAM,YAAY,KAAK,WAAW,KAAK,KAAK,SAAS,GAAG;EACxD,MAAM,YAAY,aAAa,SAAS,GAAG;EAC3C,IAAI,OAAO,cAAc,mBAAmB,CAAC,YAC3C,IAAI,YAAY;GACd,WAAW;IACT,GAAG,aAAa,MAAM,GAAG,WAAW,KAAK;IACzC;IACA,GAAG,aAAa,MAAM,WAAW,KAAK;GACxC,CAAC;GACD,cAAc,IAAI;EACpB,OACE,WAAW,CAAC,GAAG,cAAc,GAAG,CAAC;OAE9B,IAAI,YACT;EAEF,WAAW,KAAK;CAClB,GACA;EAAC;EAAiB;EAAY;EAAM;EAAY;EAAc;CAAU,CAC1E;CAEA,MAAM,eAAe,aAClB,UAAkB,UAA0C;EAC3D,MAAM,YACJ,OAAO,cAAc,YAAY,UAAU,WAAW,IAAI,WAAW;EACvE,MAAM,SAAS,SACZ,MAAM,SAAS,CAAC,CAChB,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,CAC5B,OAAO,OAAO;EACjB,MAAM,WAAW,CAAC,GAAG,YAAY;EACjC,KAAK,MAAM,SAAS,QAElB,KADkB,KAAK,WAAW,KAAK,KAAK,SAAS,KAAK,OACxC,mBAAmB,CAAC,SAAS,SAAS,KAAK,IAAI,SAAS,KAAK,KAAK;EAEtF,IAAI,SAAS,WAAW,aAAa,QAAQ,WAAW,QAAQ;EAChE,WAAW,KAAK;CAClB,GACA;EAAC;EAAiB;EAAY;EAAM;EAAW;EAAc;CAAU,CACzE;CAEA,MAAM,cAAc,cAAc;EAChC,MAAM,QAAQ,WAAW,KAAK,CAAC,CAAC,kBAAkB;EAClD,OAAO,KAAK,QACT,SACC,CAAC,aAAa,SAAS,IAAI,MAC1B,MAAM,WAAW,KAAK,KAAK,kBAAkB,CAAC,CAAC,SAAS,KAAK,EAClE;CACF,GAAG;EAAC;EAAM;EAAY;CAAY,CAAC;CAEnC,SAAS,aAAa,OAAsC;EAC1D,MAAM,YAAY,MAAM,cAAc;EACtC,IAAI,UAAU,KAAK,MAAM,IAAI;GAC3B,WAAW,KAAK;GAChB,WAAW,KAAK;GAChB;EACF;EAEA,IAAI,CAAC,aAAa,aAAa,WAAW,SAAS,GAAG;GACpD,aAAa,WAAW,KAAK;GAC7B;EACF;EAEA,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,SAAS;EAC3E,qBAAqB,SAAS;EAC9B,WAAW,KAAK;CAClB;CAEA,SAAS,WAAW,OAAqC;EACvD,WAAW,KAAK;EAChB,SAAS,KAAK;CAChB;CAEA,SAAS,YAAY,OAAyC;EAC5D,MAAM,SAAS,MAAM,cAAc,QAAQ,MAAM;EACjD,IAAI,CAAC,UAAW,CAAC,aAAa,QAAQ,SAAS,KAAK,CAAC,OAAO,SAAS,IAAI,GAAI;EAC7E,MAAM,eAAe;EACrB,aAAa,MAAM;CACrB;CAEA,SAAS,cAAc,OAAwC;EAC7D,IAAI,MAAM,YAAY,eAAe,WAAW;EAChD,IAAI,MAAM,QAAQ,SAAS;GACzB,MAAM,eAAe;GACrB,IAAI,WAAW,KAAK,GAAG,OAAO,UAAU;QACnC,IAAI,YAAY,cAAc,IAAI;EACzC,OAAO,IAAI,MAAM,QAAQ,YAAY,YAAY;GAC/C,MAAM,eAAe;GACrB,WAAW;IACT,GAAG,aAAa,MAAM,GAAG,WAAW,KAAK;IACzC,WAAW;IACX,GAAG,aAAa,MAAM,WAAW,KAAK;GACxC,CAAC;GACD,WAAW;GACX,cAAc,IAAI;EACpB,OAAO,IAAI,MAAM,QAAQ,eAAe,CAAC,cAAc,YAAY,aAAa,SAAS,GAAG;GAC1F,MAAM,QAAQ,aAAa,SAAS;GACpC,MAAM,MAAM,aAAa;GACzB,IAAI,QAAQ,KAAA,GAAW;GACvB,cAAc;IAAE;IAAO,OAAO;GAAI,CAAC;GACnC,WAAW,aAAa,MAAM,GAAG,EAAE,CAAC;GACpC,IAAI,yBAAyB,KAAA,GAAW,0BAA0B,GAAG;GACrE,qBAAqB,GAAG;EAC1B;EACA,MAAM,YAAY,KAAK;CACzB;CAEA,SAAS,UAAU,OAAe;EAChC,WAAW,aAAa,QAAQ,GAAG,iBAAiB,iBAAiB,KAAK,CAAC;CAC7E;CAEA,OACE,qBAAC,OAAD;EACE,WAAW,OAAO;EAClB,uBAAoB;EACpB,aAAU;EACV,KAAK;YAJP;GAMG,QACC,oBAAC,SAAD;IAAO,WAAW,OAAO;IAAO,aAAU;IAAmB,SAAS;cACnE;GACI,CAAA,IACL;GACJ,qBAAC,OAAD;IACE,WAAW,GAAG,OAAO,SAAS,SAAS;IACvC,iBAAe,YAAY,KAAA;IAC3B,cAAY,WAAW,KAAA;IACvB,aAAU;cAJZ,CAME,oBAAC,OAAD;KAAK,WAAW,OAAO;KAAS,aAAU;eACvC,aAAa,KAAK,KAAK,UACtB,qBAAC,QAAD;MAAM,WAAW,OAAO;MAAK,aAAU;gBAAvC,CACE,oBAAC,QAAD;OAAM,WAAW,OAAO;OAAU,aAAU;iBACzC;MACG,CAAA,GACN,oBAAC,UAAD;OACE,cAAY,UAAU;OACtB,WAAW,OAAO;OAClB,aAAU;OACA;OACV,eAAe,UAAU,KAAK;OAC9B,MAAK;iBACN;MAEO,CAAA,CACJ;QAduD,OAAO,KAAK,KAAK,CAcxE,CACP;IACE,CAAA,GACL,oBAAC,SAAD;KACE,GAAI;KACJ,GAAK,kBAAkB,EAAE,oBAAoB,gBAAgB,IAAI,CAAC;KAClE,GAAK,gBAAgB,KAAA,IAAY,EAAE,gBAAgB,YAAY,IAAI,CAAC;KACpE,GAAK,YAAY,EAAE,cAAc,UAAU,IAAI,CAAC;KAChD,cAAa;KACb,WAAW,OAAO;KACR;KACN;KACJ,QAAQ;KACR,UAAU;KACV,wBAAwB,aAAa,KAAK;KAC1C,0BAA0B,aAAa,IAAI;KAC3C,UAAU,UAAU;MAClB,WAAW,IAAI;MACf,UAAU,KAAK;KACjB;KACA,WAAW;KACX,SAAS;KACI;KACR;KACL,MAAK;KACL,OAAO;IACR,CAAA,CACE;;GACJ,WAAW,KAAK,SAAS,IACxB,oBAAC,OAAD;IAAK,WAAW,OAAO;IAAY,aAAU;cAC3C,oBAAC,OAAD;KACE,cAAW;KACX,WAAW,OAAO;KAClB,aAAU;KACV,MAAK;eAEJ,YAAY,SAAS,IACpB,YAAY,KAAK,SACf,oBAAC,UAAD;MACE,iBAAe;MACf,WAAW,OAAO;MAClB,aAAU;MAEV,eAAe,OAAO,IAAI;MAC1B,cAAc,UAAyC,MAAM,eAAe;MAC5E,MAAK;MACL,MAAK;gBAEJ;KACK,GAPD,IAOC,CACT,IAED,oBAAC,OAAD;MAAK,WAAW,OAAO;MAAO,aAAU;gBAAmB;KAEtD,CAAA;IAEJ,CAAA;GACF,CAAA,IACH;EACD;;AAET,CAAC"}
1
+ {"version":3,"file":"tags-input.js","names":[],"sources":["../../../src/components/tags-input/tags-input.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback, useId, useMemo, useRef, useState } from \"react\";\nimport type {\n ChangeEvent,\n ChangeEventHandler,\n ComponentPropsWithoutRef,\n FocusEvent,\n KeyboardEvent,\n MouseEvent,\n ClipboardEvent,\n ReactNode,\n} from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { tagsInput } from \"../../styled-system/recipes\";\n\nexport interface TagsInputProps\n extends Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"children\" | \"defaultValue\" | \"onChange\" | \"type\" | \"value\"\n > {\n /** Current tags. Omit this prop to use the uncontrolled API. */\n tags?: readonly string[];\n /** Initial tags for the uncontrolled API. */\n defaultTags?: readonly string[];\n /** Called whenever a tag is added or removed. */\n onTagsChange?: (tags: string[]) => void;\n /** Optional suggestions. A tag is accepted after a comma only when it is in this list. */\n data?: readonly string[];\n /** Visible label for the input. */\n label?: ReactNode;\n /** Current text query. This is the native input value, not the selected tags. */\n value?: string;\n /** Initial text query for an uncontrolled input. */\n defaultValue?: string;\n /** Native input change callback. */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /** Optional callback useful when a controlled query is cleared by selecting a tag. */\n onInputValueChange?: (value: string) => void;\n allowDuplicates?: boolean;\n delimiter?: string | RegExp;\n editable?: boolean;\n}\n\nfunction changedEvent(event: ChangeEvent<HTMLInputElement>, value: string) {\n const target = event.target;\n const nextTarget = {\n checked: target.checked,\n id: target.id,\n name: target.name,\n value,\n } as HTMLInputElement;\n\n return {\n ...event,\n currentTarget: nextTarget,\n target: nextTarget,\n } as ChangeEvent<HTMLInputElement>;\n}\n\nfunction tagKey(tag: string, index: number) {\n return `${tag}-${index}`;\n}\n\nfunction hasDelimiter(value: string, delimiter: string | RegExp) {\n if (typeof delimiter === \"string\") return delimiter.length > 0 && value.includes(delimiter);\n delimiter.lastIndex = 0;\n const result = delimiter.test(value);\n delimiter.lastIndex = 0;\n return result;\n}\n\nexport const TagsInput = forwardRef<HTMLInputElement, TagsInputProps>(function TagsInput(\n {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n \"aria-label\": ariaLabel,\n allowDuplicates = false,\n className,\n data = [],\n defaultTags = [],\n defaultValue = \"\",\n disabled = false,\n delimiter = /[,\\n]/u,\n editable = false,\n id: providedId,\n label,\n onBlur,\n onChange,\n onFocus,\n onInputValueChange,\n onTagsChange,\n placeholder,\n tags: controlledTags,\n value: controlledInputValue,\n ...props\n },\n ref,\n) {\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const [uncontrolledTags, setUncontrolledTags] = useState<string[]>(() => [...defaultTags]);\n const [uncontrolledInputValue, setUncontrolledInputValue] = useState(defaultValue);\n const [focused, setFocused] = useState(false);\n const [composing, setComposing] = useState(false);\n const [editingTag, setEditingTag] = useState<{ index: number; value: string } | null>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const styles = tagsInput();\n const selectedTags = controlledTags === undefined ? uncontrolledTags : [...controlledTags];\n const inputValue =\n controlledInputValue === undefined ? uncontrolledInputValue : controlledInputValue;\n\n const updateTags = useCallback(\n (nextTags: string[]) => {\n if (controlledTags === undefined) setUncontrolledTags(nextTags);\n onTagsChange?.(nextTags);\n },\n [controlledTags, onTagsChange],\n );\n\n const clearInput = useCallback(\n (event?: ChangeEvent<HTMLInputElement>) => {\n if (controlledInputValue === undefined) setUncontrolledInputValue(\"\");\n onInputValueChange?.(\"\");\n if (event) onChange?.(changedEvent(event, \"\"));\n },\n [controlledInputValue, onChange, onInputValueChange],\n );\n\n const addTag = useCallback(\n (rawTag: string, event?: ChangeEvent<HTMLInputElement>) => {\n const tag = rawTag.trim();\n const isAllowed = data.length === 0 || data.includes(tag);\n const duplicate = selectedTags.includes(tag);\n if (tag && isAllowed && (allowDuplicates || !duplicate)) {\n if (editingTag) {\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n tag,\n ...selectedTags.slice(editingTag.index),\n ]);\n setEditingTag(null);\n } else {\n updateTags([...selectedTags, tag]);\n }\n } else if (editingTag) {\n return;\n }\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, editingTag, selectedTags, updateTags],\n );\n\n const addDelimited = useCallback(\n (rawValue: string, event?: ChangeEvent<HTMLInputElement>) => {\n const separator =\n typeof delimiter === \"string\" && delimiter.length === 0 ? /\\r?\\n/u : delimiter;\n const values = rawValue\n .split(separator)\n .map((value) => value.trim())\n .filter(Boolean);\n const nextTags = [...selectedTags];\n for (const value of values) {\n const isAllowed = data.length === 0 || data.includes(value);\n if (isAllowed && (allowDuplicates || !nextTags.includes(value))) nextTags.push(value);\n }\n if (nextTags.length !== selectedTags.length) updateTags(nextTags);\n clearInput(event);\n },\n [allowDuplicates, clearInput, data, delimiter, selectedTags, updateTags],\n );\n\n const suggestions = useMemo(() => {\n const query = inputValue.trim().toLocaleLowerCase();\n return data.filter(\n (item) =>\n !selectedTags.includes(item) &&\n (query.length === 0 || item.toLocaleLowerCase().includes(query)),\n );\n }, [data, inputValue, selectedTags]);\n\n function handleChange(event: ChangeEvent<HTMLInputElement>) {\n const nextValue = event.currentTarget.value;\n if (nextValue.trim() === \"\") {\n clearInput(event);\n onChange?.(event);\n return;\n }\n\n if (!composing && hasDelimiter(nextValue, delimiter)) {\n addDelimited(nextValue, event);\n return;\n }\n\n if (controlledInputValue === undefined) setUncontrolledInputValue(nextValue);\n onInputValueChange?.(nextValue);\n onChange?.(event);\n }\n\n function handleBlur(event: FocusEvent<HTMLInputElement>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handlePaste(event: ClipboardEvent<HTMLInputElement>) {\n const pasted = event.clipboardData.getData(\"text\");\n if (!pasted || (!hasDelimiter(pasted, delimiter) && !pasted.includes(\"\\n\"))) return;\n event.preventDefault();\n addDelimited(pasted);\n }\n\n function handleKeyDown(event: KeyboardEvent<HTMLInputElement>) {\n if (event.nativeEvent.isComposing || composing) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (inputValue.trim()) addTag(inputValue);\n else if (editingTag) setEditingTag(null);\n } else if (event.key === \"Escape\" && editingTag) {\n event.preventDefault();\n updateTags([\n ...selectedTags.slice(0, editingTag.index),\n editingTag.value,\n ...selectedTags.slice(editingTag.index),\n ]);\n clearInput();\n setEditingTag(null);\n } else if (event.key === \"Backspace\" && !inputValue && editable && selectedTags.length > 0) {\n const index = selectedTags.length - 1;\n const tag = selectedTags[index];\n if (tag === undefined) return;\n setEditingTag({ index, value: tag });\n updateTags(selectedTags.slice(0, -1));\n if (controlledInputValue === undefined) setUncontrolledInputValue(tag);\n onInputValueChange?.(tag);\n }\n props.onKeyDown?.(event);\n }\n\n function removeTag(index: number) {\n updateTags(selectedTags.filter((_, currentIndex) => currentIndex !== index));\n }\n\n return (\n <div\n className={styles.root}\n data-jaci-component=\"tags-input\"\n data-slot=\"tags-input\"\n ref={rootRef}\n >\n {label ? (\n <label className={styles.label} data-slot=\"tags-input-label\" htmlFor={id}>\n {label}\n </label>\n ) : null}\n <div\n className={cx(styles.control, className)}\n data-disabled={disabled || undefined}\n data-focus={focused || undefined}\n data-slot=\"tags-input-control\"\n >\n <div className={styles.tagList} data-slot=\"tags-input-tag-list\">\n {selectedTags.map((tag, index) => (\n <span className={styles.tag} data-slot=\"tags-input-tag\" key={tagKey(tag, index)}>\n <span className={styles.tagLabel} data-slot=\"tags-input-tag-label\">\n {tag}\n </span>\n <button\n aria-label={`Remove ${tag}`}\n className={styles.tagRemove}\n data-slot=\"tags-input-tag-remove\"\n disabled={disabled}\n onClick={() => removeTag(index)}\n type=\"button\"\n >\n ×\n </button>\n </span>\n ))}\n </div>\n <input\n {...props}\n {...(ariaDescribedBy ? { \"aria-describedby\": ariaDescribedBy } : {})}\n {...(ariaInvalid !== undefined ? { \"aria-invalid\": ariaInvalid } : {})}\n {...(ariaLabel ? { \"aria-label\": ariaLabel } : {})}\n autoComplete=\"off\"\n className={styles.input}\n disabled={disabled}\n id={id}\n onBlur={handleBlur}\n onChange={handleChange}\n onCompositionEnd={() => setComposing(false)}\n onCompositionStart={() => setComposing(true)}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n placeholder={placeholder}\n ref={ref}\n type=\"text\"\n value={inputValue}\n />\n </div>\n {focused && data.length > 0 ? (\n <div className={styles.positioner} data-slot=\"tags-input-positioner\">\n <div\n aria-label=\"Suggestions\"\n className={styles.list}\n data-slot=\"tags-input-list\"\n role=\"listbox\"\n >\n {suggestions.length > 0 ? (\n suggestions.map((item) => (\n <button\n aria-selected={false}\n className={styles.item}\n data-slot=\"tags-input-item\"\n key={item}\n onClick={() => addTag(item)}\n onMouseDown={(event: MouseEvent<HTMLButtonElement>) => event.preventDefault()}\n role=\"option\"\n type=\"button\"\n >\n {item}\n </button>\n ))\n ) : (\n <div className={styles.empty} data-slot=\"tags-input-empty\">\n No options\n </div>\n )}\n </div>\n </div>\n ) : null}\n </div>\n );\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"toast.cjs","names":["BaseToast","withRecipeClassName","toastRecipe","cx","useThemePortalProps"],"sources":["../../../src/components/toast/toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { toast as toastRecipe } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\nimport { useThemePortalProps } from \"../../theme/theme-scope\";\n\nexport type ToastTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nconst toneByToastType: Record<string, ToastTone> = {\n danger: \"danger\",\n error: \"danger\",\n info: \"info\",\n success: \"success\",\n warning: \"warning\",\n};\n\nfunction resolveTone(type: string | undefined, tone: ToastTone | undefined): ToastTone {\n return tone ?? (type === undefined ? \"neutral\" : (toneByToastType[type] ?? \"neutral\"));\n}\n\nexport type ToastProviderProps = ComponentPropsWithoutRef<typeof BaseToast.Provider>;\n\n/**\n * Creates an isolated, declarative toast region. Configure `timeout` and\n * `limit` here; use `Toast.Root` to render each toast from local state or\n * `Toast.useToastManager()`.\n */\nexport function ToastProvider(props: ToastProviderProps) {\n return <BaseToast.Provider {...props} />;\n}\n\nexport type ToastViewportProps = ComponentPropsWithoutRef<typeof BaseToast.Viewport>;\n\n/**\n * A bottom-centred notification region.\n */\nexport const ToastViewport = forwardRef<HTMLDivElement, ToastViewportProps>(function ToastViewport(\n { \"aria-label\": ariaLabel, \"aria-live\": ariaLive, className, ...props },\n ref,\n) {\n return (\n <BaseToast.Viewport\n {...props}\n aria-label={ariaLabel ?? \"Notifications\"}\n aria-live={ariaLive ?? \"polite\"}\n ref={ref}\n className={withRecipeClassName(toastRecipe().viewport, className)}\n data-jaci-component=\"toast-viewport\"\n data-slot=\"toast-viewport\"\n />\n );\n});\n\nexport interface ToastRootProps extends ComponentPropsWithoutRef<typeof BaseToast.Root> {\n /**\n * Visual status. When omitted, the value is inferred from the toast's\n * `type` (`error` maps to `danger`) and otherwise remains neutral.\n */\n tone?: ToastTone;\n}\n\n/**\n * Renders a toast object while preserving Base UI's lifecycle, focus, swipe,\n * and auto-dismiss behavior. It is intentionally composed rather than a\n * global imperative notification API.\n */\nexport const ToastRoot = forwardRef<HTMLDivElement, ToastRootProps>(function ToastRoot(\n { className, toast: toastObject, tone, ...props },\n ref,\n) {\n const resolvedTone = resolveTone(toastObject.type, tone);\n\n return (\n <BaseToast.Root\n {...props}\n ref={ref}\n toast={toastObject}\n className={withRecipeClassName(toastRecipe({ tone: resolvedTone }).root, className)}\n data-jaci-component=\"toast\"\n data-jaci-tone={resolvedTone}\n data-slot=\"toast\"\n />\n );\n});\n\nexport type ToastContentProps = ComponentPropsWithoutRef<typeof BaseToast.Content>;\n\nexport const ToastContent = forwardRef<HTMLDivElement, ToastContentProps>(function ToastContent(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Content\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().content, className)}\n data-slot=\"toast-content\"\n />\n );\n});\n\n/** A layout wrapper for `Toast.Title` and `Toast.Description`. */\nexport type ToastTextProps = ComponentPropsWithoutRef<\"div\">;\n\nexport const ToastText = forwardRef<HTMLDivElement, ToastTextProps>(function ToastText(\n { className, ...props },\n ref,\n) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx(toastRecipe().text, className)}\n data-slot=\"toast-text\"\n />\n );\n});\n\nexport type ToastTitleProps = ComponentPropsWithoutRef<typeof BaseToast.Title>;\n\nexport const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(function ToastTitle(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Title\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().title, className)}\n data-slot=\"toast-title\"\n />\n );\n});\n\nexport type ToastDescriptionProps = ComponentPropsWithoutRef<typeof BaseToast.Description>;\n\nexport const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(\n function ToastDescription({ className, ...props }, ref) {\n return (\n <BaseToast.Description\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().description, className)}\n data-slot=\"toast-description\"\n />\n );\n },\n);\n\nexport type ToastCloseProps = ComponentPropsWithoutRef<typeof BaseToast.Close>;\n\nexport const ToastClose = forwardRef<HTMLButtonElement, ToastCloseProps>(function ToastClose(\n { \"aria-label\": ariaLabel, children, className, ...props },\n ref,\n) {\n const hasVisibleLabel = children != null;\n\n return (\n <BaseToast.Close\n {...props}\n aria-label={ariaLabel ?? (hasVisibleLabel ? undefined : \"Dismiss notification\")}\n ref={ref}\n className={withRecipeClassName(toastRecipe().close, className)}\n data-slot=\"toast-close\"\n >\n {children ?? \"×\"}\n </BaseToast.Close>\n );\n});\n\nexport type ToastActionProps = ComponentPropsWithoutRef<typeof BaseToast.Action>;\n\nexport const ToastAction = forwardRef<HTMLButtonElement, ToastActionProps>(function ToastAction(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Action\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().action, className)}\n data-slot=\"toast-action\"\n />\n );\n});\n\n/** Base UI's portal is preserved for rendering the viewport at document level. */\nexport function ToastPortal(props: ComponentPropsWithoutRef<typeof BaseToast.Portal>) {\n return <BaseToast.Portal {...useThemePortalProps(props)} />;\n}\n\nexport interface ToastComponent {\n Provider: typeof ToastProvider;\n Viewport: typeof ToastViewport;\n Root: typeof ToastRoot;\n Content: typeof ToastContent;\n Text: typeof ToastText;\n Title: typeof ToastTitle;\n Description: typeof ToastDescription;\n Close: typeof ToastClose;\n Action: typeof ToastAction;\n Portal: typeof ToastPortal;\n useToastManager: typeof BaseToast.useToastManager;\n}\n\nexport const Toast: ToastComponent = {\n Provider: ToastProvider,\n Viewport: ToastViewport,\n Root: ToastRoot,\n Content: ToastContent,\n Text: ToastText,\n Title: ToastTitle,\n Description: ToastDescription,\n Close: ToastClose,\n Action: ToastAction,\n Portal: ToastPortal,\n useToastManager: BaseToast.useToastManager,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"toast.cjs","names":["BaseToast","forwardRef","withRecipeClassName","toastRecipe","cx","useThemePortalProps"],"sources":["../../../src/components/toast/toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { toast as toastRecipe } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\nimport { useThemePortalProps } from \"../../theme/theme-scope\";\n\nexport type ToastTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nconst toneByToastType: Record<string, ToastTone> = {\n danger: \"danger\",\n error: \"danger\",\n info: \"info\",\n success: \"success\",\n warning: \"warning\",\n};\n\nfunction resolveTone(type: string | undefined, tone: ToastTone | undefined): ToastTone {\n return tone ?? (type === undefined ? \"neutral\" : (toneByToastType[type] ?? \"neutral\"));\n}\n\nexport type ToastProviderProps = ComponentPropsWithoutRef<typeof BaseToast.Provider>;\n\n/**\n * Creates an isolated, declarative toast region. Configure `timeout` and\n * `limit` here; use `Toast.Root` to render each toast from local state or\n * `Toast.useToastManager()`.\n */\nexport function ToastProvider(props: ToastProviderProps) {\n return <BaseToast.Provider {...props} />;\n}\n\nexport type ToastViewportProps = ComponentPropsWithoutRef<typeof BaseToast.Viewport>;\n\n/**\n * A bottom-centred notification region.\n */\nexport const ToastViewport = forwardRef<HTMLDivElement, ToastViewportProps>(function ToastViewport(\n { \"aria-label\": ariaLabel, \"aria-live\": ariaLive, className, ...props },\n ref,\n) {\n return (\n <BaseToast.Viewport\n {...props}\n aria-label={ariaLabel ?? \"Notifications\"}\n aria-live={ariaLive ?? \"polite\"}\n ref={ref}\n className={withRecipeClassName(toastRecipe().viewport, className)}\n data-jaci-component=\"toast-viewport\"\n data-slot=\"toast-viewport\"\n />\n );\n});\n\nexport interface ToastRootProps extends ComponentPropsWithoutRef<typeof BaseToast.Root> {\n /**\n * Visual status. When omitted, the value is inferred from the toast's\n * `type` (`error` maps to `danger`) and otherwise remains neutral.\n */\n tone?: ToastTone;\n}\n\n/**\n * Renders a toast object while preserving Base UI's lifecycle, focus, swipe,\n * and auto-dismiss behavior. It is intentionally composed rather than a\n * global imperative notification API.\n */\nexport const ToastRoot = forwardRef<HTMLDivElement, ToastRootProps>(function ToastRoot(\n { className, toast: toastObject, tone, ...props },\n ref,\n) {\n const resolvedTone = resolveTone(toastObject.type, tone);\n\n return (\n <BaseToast.Root\n {...props}\n ref={ref}\n toast={toastObject}\n className={withRecipeClassName(toastRecipe({ tone: resolvedTone }).root, className)}\n data-jaci-component=\"toast\"\n data-jaci-tone={resolvedTone}\n data-slot=\"toast\"\n />\n );\n});\n\nexport type ToastContentProps = ComponentPropsWithoutRef<typeof BaseToast.Content>;\n\nexport const ToastContent = forwardRef<HTMLDivElement, ToastContentProps>(function ToastContent(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Content\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().content, className)}\n data-slot=\"toast-content\"\n />\n );\n});\n\n/** A layout wrapper for `Toast.Title` and `Toast.Description`. */\nexport type ToastTextProps = ComponentPropsWithoutRef<\"div\">;\n\nexport const ToastText = forwardRef<HTMLDivElement, ToastTextProps>(function ToastText(\n { className, ...props },\n ref,\n) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx(toastRecipe().text, className)}\n data-slot=\"toast-text\"\n />\n );\n});\n\nexport type ToastTitleProps = ComponentPropsWithoutRef<typeof BaseToast.Title>;\n\nexport const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(function ToastTitle(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Title\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().title, className)}\n data-slot=\"toast-title\"\n />\n );\n});\n\nexport type ToastDescriptionProps = ComponentPropsWithoutRef<typeof BaseToast.Description>;\n\nexport const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(\n function ToastDescription({ className, ...props }, ref) {\n return (\n <BaseToast.Description\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().description, className)}\n data-slot=\"toast-description\"\n />\n );\n },\n);\n\nexport type ToastCloseProps = ComponentPropsWithoutRef<typeof BaseToast.Close>;\n\nexport const ToastClose = forwardRef<HTMLButtonElement, ToastCloseProps>(function ToastClose(\n { \"aria-label\": ariaLabel, children, className, ...props },\n ref,\n) {\n const hasVisibleLabel = children != null;\n\n return (\n <BaseToast.Close\n {...props}\n aria-label={ariaLabel ?? (hasVisibleLabel ? undefined : \"Dismiss notification\")}\n ref={ref}\n className={withRecipeClassName(toastRecipe().close, className)}\n data-slot=\"toast-close\"\n >\n {children ?? \"×\"}\n </BaseToast.Close>\n );\n});\n\nexport type ToastActionProps = ComponentPropsWithoutRef<typeof BaseToast.Action>;\n\nexport const ToastAction = forwardRef<HTMLButtonElement, ToastActionProps>(function ToastAction(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Action\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().action, className)}\n data-slot=\"toast-action\"\n />\n );\n});\n\n/** Base UI's portal is preserved for rendering the viewport at document level. */\nexport function ToastPortal(props: ComponentPropsWithoutRef<typeof BaseToast.Portal>) {\n return <BaseToast.Portal {...useThemePortalProps(props)} />;\n}\n\nexport interface ToastComponent {\n Provider: typeof ToastProvider;\n Viewport: typeof ToastViewport;\n Root: typeof ToastRoot;\n Content: typeof ToastContent;\n Text: typeof ToastText;\n Title: typeof ToastTitle;\n Description: typeof ToastDescription;\n Close: typeof ToastClose;\n Action: typeof ToastAction;\n Portal: typeof ToastPortal;\n useToastManager: typeof BaseToast.useToastManager;\n}\n\nexport const Toast: ToastComponent = {\n Provider: ToastProvider,\n Viewport: ToastViewport,\n Root: ToastRoot,\n Content: ToastContent,\n Text: ToastText,\n Title: ToastTitle,\n Description: ToastDescription,\n Close: ToastClose,\n Action: ToastAction,\n Portal: ToastPortal,\n useToastManager: BaseToast.useToastManager,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"toast.js","names":["BaseToast","toastRecipe","Toast"],"sources":["../../../src/components/toast/toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { toast as toastRecipe } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\nimport { useThemePortalProps } from \"../../theme/theme-scope\";\n\nexport type ToastTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nconst toneByToastType: Record<string, ToastTone> = {\n danger: \"danger\",\n error: \"danger\",\n info: \"info\",\n success: \"success\",\n warning: \"warning\",\n};\n\nfunction resolveTone(type: string | undefined, tone: ToastTone | undefined): ToastTone {\n return tone ?? (type === undefined ? \"neutral\" : (toneByToastType[type] ?? \"neutral\"));\n}\n\nexport type ToastProviderProps = ComponentPropsWithoutRef<typeof BaseToast.Provider>;\n\n/**\n * Creates an isolated, declarative toast region. Configure `timeout` and\n * `limit` here; use `Toast.Root` to render each toast from local state or\n * `Toast.useToastManager()`.\n */\nexport function ToastProvider(props: ToastProviderProps) {\n return <BaseToast.Provider {...props} />;\n}\n\nexport type ToastViewportProps = ComponentPropsWithoutRef<typeof BaseToast.Viewport>;\n\n/**\n * A bottom-centred notification region.\n */\nexport const ToastViewport = forwardRef<HTMLDivElement, ToastViewportProps>(function ToastViewport(\n { \"aria-label\": ariaLabel, \"aria-live\": ariaLive, className, ...props },\n ref,\n) {\n return (\n <BaseToast.Viewport\n {...props}\n aria-label={ariaLabel ?? \"Notifications\"}\n aria-live={ariaLive ?? \"polite\"}\n ref={ref}\n className={withRecipeClassName(toastRecipe().viewport, className)}\n data-jaci-component=\"toast-viewport\"\n data-slot=\"toast-viewport\"\n />\n );\n});\n\nexport interface ToastRootProps extends ComponentPropsWithoutRef<typeof BaseToast.Root> {\n /**\n * Visual status. When omitted, the value is inferred from the toast's\n * `type` (`error` maps to `danger`) and otherwise remains neutral.\n */\n tone?: ToastTone;\n}\n\n/**\n * Renders a toast object while preserving Base UI's lifecycle, focus, swipe,\n * and auto-dismiss behavior. It is intentionally composed rather than a\n * global imperative notification API.\n */\nexport const ToastRoot = forwardRef<HTMLDivElement, ToastRootProps>(function ToastRoot(\n { className, toast: toastObject, tone, ...props },\n ref,\n) {\n const resolvedTone = resolveTone(toastObject.type, tone);\n\n return (\n <BaseToast.Root\n {...props}\n ref={ref}\n toast={toastObject}\n className={withRecipeClassName(toastRecipe({ tone: resolvedTone }).root, className)}\n data-jaci-component=\"toast\"\n data-jaci-tone={resolvedTone}\n data-slot=\"toast\"\n />\n );\n});\n\nexport type ToastContentProps = ComponentPropsWithoutRef<typeof BaseToast.Content>;\n\nexport const ToastContent = forwardRef<HTMLDivElement, ToastContentProps>(function ToastContent(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Content\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().content, className)}\n data-slot=\"toast-content\"\n />\n );\n});\n\n/** A layout wrapper for `Toast.Title` and `Toast.Description`. */\nexport type ToastTextProps = ComponentPropsWithoutRef<\"div\">;\n\nexport const ToastText = forwardRef<HTMLDivElement, ToastTextProps>(function ToastText(\n { className, ...props },\n ref,\n) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx(toastRecipe().text, className)}\n data-slot=\"toast-text\"\n />\n );\n});\n\nexport type ToastTitleProps = ComponentPropsWithoutRef<typeof BaseToast.Title>;\n\nexport const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(function ToastTitle(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Title\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().title, className)}\n data-slot=\"toast-title\"\n />\n );\n});\n\nexport type ToastDescriptionProps = ComponentPropsWithoutRef<typeof BaseToast.Description>;\n\nexport const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(\n function ToastDescription({ className, ...props }, ref) {\n return (\n <BaseToast.Description\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().description, className)}\n data-slot=\"toast-description\"\n />\n );\n },\n);\n\nexport type ToastCloseProps = ComponentPropsWithoutRef<typeof BaseToast.Close>;\n\nexport const ToastClose = forwardRef<HTMLButtonElement, ToastCloseProps>(function ToastClose(\n { \"aria-label\": ariaLabel, children, className, ...props },\n ref,\n) {\n const hasVisibleLabel = children != null;\n\n return (\n <BaseToast.Close\n {...props}\n aria-label={ariaLabel ?? (hasVisibleLabel ? undefined : \"Dismiss notification\")}\n ref={ref}\n className={withRecipeClassName(toastRecipe().close, className)}\n data-slot=\"toast-close\"\n >\n {children ?? \"×\"}\n </BaseToast.Close>\n );\n});\n\nexport type ToastActionProps = ComponentPropsWithoutRef<typeof BaseToast.Action>;\n\nexport const ToastAction = forwardRef<HTMLButtonElement, ToastActionProps>(function ToastAction(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Action\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().action, className)}\n data-slot=\"toast-action\"\n />\n );\n});\n\n/** Base UI's portal is preserved for rendering the viewport at document level. */\nexport function ToastPortal(props: ComponentPropsWithoutRef<typeof BaseToast.Portal>) {\n return <BaseToast.Portal {...useThemePortalProps(props)} />;\n}\n\nexport interface ToastComponent {\n Provider: typeof ToastProvider;\n Viewport: typeof ToastViewport;\n Root: typeof ToastRoot;\n Content: typeof ToastContent;\n Text: typeof ToastText;\n Title: typeof ToastTitle;\n Description: typeof ToastDescription;\n Close: typeof ToastClose;\n Action: typeof ToastAction;\n Portal: typeof ToastPortal;\n useToastManager: typeof BaseToast.useToastManager;\n}\n\nexport const Toast: ToastComponent = {\n Provider: ToastProvider,\n Viewport: ToastViewport,\n Root: ToastRoot,\n Content: ToastContent,\n Text: ToastText,\n Title: ToastTitle,\n Description: ToastDescription,\n Close: ToastClose,\n Action: ToastAction,\n Portal: ToastPortal,\n useToastManager: BaseToast.useToastManager,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"toast.js","names":["BaseToast","toastRecipe","Toast"],"sources":["../../../src/components/toast/toast.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { toast as toastRecipe } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\nimport { useThemePortalProps } from \"../../theme/theme-scope\";\n\nexport type ToastTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nconst toneByToastType: Record<string, ToastTone> = {\n danger: \"danger\",\n error: \"danger\",\n info: \"info\",\n success: \"success\",\n warning: \"warning\",\n};\n\nfunction resolveTone(type: string | undefined, tone: ToastTone | undefined): ToastTone {\n return tone ?? (type === undefined ? \"neutral\" : (toneByToastType[type] ?? \"neutral\"));\n}\n\nexport type ToastProviderProps = ComponentPropsWithoutRef<typeof BaseToast.Provider>;\n\n/**\n * Creates an isolated, declarative toast region. Configure `timeout` and\n * `limit` here; use `Toast.Root` to render each toast from local state or\n * `Toast.useToastManager()`.\n */\nexport function ToastProvider(props: ToastProviderProps) {\n return <BaseToast.Provider {...props} />;\n}\n\nexport type ToastViewportProps = ComponentPropsWithoutRef<typeof BaseToast.Viewport>;\n\n/**\n * A bottom-centred notification region.\n */\nexport const ToastViewport = forwardRef<HTMLDivElement, ToastViewportProps>(function ToastViewport(\n { \"aria-label\": ariaLabel, \"aria-live\": ariaLive, className, ...props },\n ref,\n) {\n return (\n <BaseToast.Viewport\n {...props}\n aria-label={ariaLabel ?? \"Notifications\"}\n aria-live={ariaLive ?? \"polite\"}\n ref={ref}\n className={withRecipeClassName(toastRecipe().viewport, className)}\n data-jaci-component=\"toast-viewport\"\n data-slot=\"toast-viewport\"\n />\n );\n});\n\nexport interface ToastRootProps extends ComponentPropsWithoutRef<typeof BaseToast.Root> {\n /**\n * Visual status. When omitted, the value is inferred from the toast's\n * `type` (`error` maps to `danger`) and otherwise remains neutral.\n */\n tone?: ToastTone;\n}\n\n/**\n * Renders a toast object while preserving Base UI's lifecycle, focus, swipe,\n * and auto-dismiss behavior. It is intentionally composed rather than a\n * global imperative notification API.\n */\nexport const ToastRoot = forwardRef<HTMLDivElement, ToastRootProps>(function ToastRoot(\n { className, toast: toastObject, tone, ...props },\n ref,\n) {\n const resolvedTone = resolveTone(toastObject.type, tone);\n\n return (\n <BaseToast.Root\n {...props}\n ref={ref}\n toast={toastObject}\n className={withRecipeClassName(toastRecipe({ tone: resolvedTone }).root, className)}\n data-jaci-component=\"toast\"\n data-jaci-tone={resolvedTone}\n data-slot=\"toast\"\n />\n );\n});\n\nexport type ToastContentProps = ComponentPropsWithoutRef<typeof BaseToast.Content>;\n\nexport const ToastContent = forwardRef<HTMLDivElement, ToastContentProps>(function ToastContent(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Content\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().content, className)}\n data-slot=\"toast-content\"\n />\n );\n});\n\n/** A layout wrapper for `Toast.Title` and `Toast.Description`. */\nexport type ToastTextProps = ComponentPropsWithoutRef<\"div\">;\n\nexport const ToastText = forwardRef<HTMLDivElement, ToastTextProps>(function ToastText(\n { className, ...props },\n ref,\n) {\n return (\n <div\n {...props}\n ref={ref}\n className={cx(toastRecipe().text, className)}\n data-slot=\"toast-text\"\n />\n );\n});\n\nexport type ToastTitleProps = ComponentPropsWithoutRef<typeof BaseToast.Title>;\n\nexport const ToastTitle = forwardRef<HTMLHeadingElement, ToastTitleProps>(function ToastTitle(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Title\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().title, className)}\n data-slot=\"toast-title\"\n />\n );\n});\n\nexport type ToastDescriptionProps = ComponentPropsWithoutRef<typeof BaseToast.Description>;\n\nexport const ToastDescription = forwardRef<HTMLParagraphElement, ToastDescriptionProps>(\n function ToastDescription({ className, ...props }, ref) {\n return (\n <BaseToast.Description\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().description, className)}\n data-slot=\"toast-description\"\n />\n );\n },\n);\n\nexport type ToastCloseProps = ComponentPropsWithoutRef<typeof BaseToast.Close>;\n\nexport const ToastClose = forwardRef<HTMLButtonElement, ToastCloseProps>(function ToastClose(\n { \"aria-label\": ariaLabel, children, className, ...props },\n ref,\n) {\n const hasVisibleLabel = children != null;\n\n return (\n <BaseToast.Close\n {...props}\n aria-label={ariaLabel ?? (hasVisibleLabel ? undefined : \"Dismiss notification\")}\n ref={ref}\n className={withRecipeClassName(toastRecipe().close, className)}\n data-slot=\"toast-close\"\n >\n {children ?? \"×\"}\n </BaseToast.Close>\n );\n});\n\nexport type ToastActionProps = ComponentPropsWithoutRef<typeof BaseToast.Action>;\n\nexport const ToastAction = forwardRef<HTMLButtonElement, ToastActionProps>(function ToastAction(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToast.Action\n {...props}\n ref={ref}\n className={withRecipeClassName(toastRecipe().action, className)}\n data-slot=\"toast-action\"\n />\n );\n});\n\n/** Base UI's portal is preserved for rendering the viewport at document level. */\nexport function ToastPortal(props: ComponentPropsWithoutRef<typeof BaseToast.Portal>) {\n return <BaseToast.Portal {...useThemePortalProps(props)} />;\n}\n\nexport interface ToastComponent {\n Provider: typeof ToastProvider;\n Viewport: typeof ToastViewport;\n Root: typeof ToastRoot;\n Content: typeof ToastContent;\n Text: typeof ToastText;\n Title: typeof ToastTitle;\n Description: typeof ToastDescription;\n Close: typeof ToastClose;\n Action: typeof ToastAction;\n Portal: typeof ToastPortal;\n useToastManager: typeof BaseToast.useToastManager;\n}\n\nexport const Toast: ToastComponent = {\n Provider: ToastProvider,\n Viewport: ToastViewport,\n Root: ToastRoot,\n Content: ToastContent,\n Text: ToastText,\n Title: ToastTitle,\n Description: ToastDescription,\n Close: ToastClose,\n Action: ToastAction,\n Portal: ToastPortal,\n useToastManager: BaseToast.useToastManager,\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"toggle.cjs","names":["BaseToggle","withRecipeClassName","toggle"],"sources":["../../../src/components/toggle/toggle.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toggle as BaseToggle } from \"@base-ui/react/toggle\";\nimport { forwardRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { Toggle as BaseToggleType } from \"@base-ui/react/toggle\";\n\nimport { toggle } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\n\nexport type ToggleVariant = \"solid\" | \"outline\" | \"ghost\";\nexport type ToggleSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ToggleProps\n extends Omit<BaseToggleType.Props<string>, \"children\" | \"className\" | \"onPressedChange\"> {\n children?: ReactNode;\n className?: string;\n onPressedChange?: (pressed: boolean) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\n { children, className, onPressedChange, size = \"md\", variant = \"outline\", ...props },\n ref,\n) {\n return (\n <BaseToggle\n {...props}\n ref={ref}\n className={withRecipeClassName(toggle({ size, variant }), className)}\n data-jaci-component=\"toggle\"\n data-slot=\"toggle\"\n onPressedChange={(pressed) => onPressedChange?.(pressed)}\n >\n {children}\n </BaseToggle>\n );\n});\n"],"mappings":";;;;;;;AAsBA,MAAa,UAAA,GAAA,MAAA,WAAA,CAAoD,SAAS,OACxE,EAAE,UAAU,WAAW,iBAAiB,OAAO,MAAM,UAAU,WAAW,GAAG,SAC7E,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,sBAAAA,QAAD;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBC,eAAAA,OAAO;GAAE;GAAM;EAAQ,CAAC,GAAG,SAAS;EACnE,uBAAoB;EACpB,aAAU;EACV,kBAAkB,YAAY,kBAAkB,OAAO;EAEtD;CACS,CAAA;AAEhB,CAAC"}
1
+ {"version":3,"file":"toggle.cjs","names":["forwardRef","BaseToggle","withRecipeClassName","toggle"],"sources":["../../../src/components/toggle/toggle.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toggle as BaseToggle } from \"@base-ui/react/toggle\";\nimport { forwardRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { Toggle as BaseToggleType } from \"@base-ui/react/toggle\";\n\nimport { toggle } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\n\nexport type ToggleVariant = \"solid\" | \"outline\" | \"ghost\";\nexport type ToggleSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ToggleProps\n extends Omit<BaseToggleType.Props<string>, \"children\" | \"className\" | \"onPressedChange\"> {\n children?: ReactNode;\n className?: string;\n onPressedChange?: (pressed: boolean) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const Toggle = forwardRef<HTMLButtonElement, ToggleProps>(function Toggle(\n { children, className, onPressedChange, size = \"md\", variant = \"outline\", ...props },\n ref,\n) {\n return (\n <BaseToggle\n {...props}\n ref={ref}\n className={withRecipeClassName(toggle({ size, variant }), className)}\n data-jaci-component=\"toggle\"\n data-slot=\"toggle\"\n onPressedChange={(pressed) => onPressedChange?.(pressed)}\n >\n {children}\n </BaseToggle>\n );\n});\n"],"mappings":";;;;;;;AAsBA,MAAa,UAAA,GAASA,MAAAA,WAAAA,CAA2C,SAAS,OACxE,EAAE,UAAU,WAAW,iBAAiB,OAAO,MAAM,UAAU,WAAW,GAAG,SAC7E,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,QAAD;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBC,eAAAA,OAAO;GAAE;GAAM;EAAQ,CAAC,GAAG,SAAS;EACnE,uBAAoB;EACpB,aAAU;EACV,kBAAkB,YAAY,kBAAkB,OAAO;EAEtD;CACS,CAAA;AAEhB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-group.cjs","names":["toggleGroup","BaseToggleGroup","cx","BaseToggle","withRecipeClassName"],"sources":["../../../src/components/toggle-group/toggle-group.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toggle as BaseToggle } from \"@base-ui/react/toggle\";\nimport { ToggleGroup as BaseToggleGroup } from \"@base-ui/react/toggle-group\";\nimport { forwardRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { ToggleGroup as BaseToggleGroupType } from \"@base-ui/react/toggle-group\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { toggleGroup } from \"../../styled-system/recipes\";\nimport type { ToggleProps, ToggleSize, ToggleVariant } from \"../toggle\";\nimport { withRecipeClassName } from \"../base-ui\";\n\nexport interface ToggleGroupRootProps\n extends Omit<BaseToggleGroupType.Props<string>, \"children\" | \"className\" | \"onValueChange\"> {\n children?: ReactNode;\n className?: string;\n onValueChange?: (value: string[]) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const ToggleGroupRoot = forwardRef<HTMLDivElement, ToggleGroupRootProps>(\n function ToggleGroupRoot(\n {\n children,\n className,\n onValueChange,\n orientation = \"horizontal\",\n size = \"md\",\n variant = \"outline\",\n ...props\n },\n ref,\n ) {\n const styles = toggleGroup({ size, variant });\n\n return (\n <BaseToggleGroup\n {...props}\n ref={ref}\n className={cx(styles.root, className)}\n data-jaci-component=\"toggle-group\"\n data-orientation={orientation}\n data-slot=\"toggle-group\"\n onValueChange={(value) => onValueChange?.(value)}\n orientation={orientation}\n >\n {children}\n </BaseToggleGroup>\n );\n },\n);\n\nexport interface ToggleGroupItemProps extends Omit<ToggleProps, \"className\"> {\n className?: string;\n value: string;\n}\n\nexport const ToggleGroupItem = forwardRef<HTMLButtonElement, ToggleGroupItemProps>(\n function ToggleGroupItem(\n { children, className, onPressedChange, size = \"md\", value, variant = \"outline\", ...props },\n ref,\n ) {\n const styles = toggleGroup({ size, variant });\n\n return (\n <BaseToggle\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.item, className)}\n data-jaci-component=\"toggle-group\"\n data-slot=\"toggle-group-item\"\n onPressedChange={(pressed) => onPressedChange?.(pressed)}\n value={value}\n >\n {children}\n </BaseToggle>\n );\n },\n);\n\nexport const ToggleGroup = {\n Root: ToggleGroupRoot,\n Item: ToggleGroupItem,\n};\n"],"mappings":";;;;;;;;;AAsBA,MAAa,mBAAA,GAAA,MAAA,WAAA,CACX,SAAS,gBACP,EACE,UACA,WACA,eACA,cAAc,cACd,OAAO,MACP,UAAU,WACV,GAAG,SAEL,KACA;CACA,MAAM,SAASA,qBAAAA,YAAY;EAAE;EAAM;CAAQ,CAAC;CAE5C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,4BAAAA,aAAD;EACE,GAAI;EACC;EACL,WAAWC,WAAAA,GAAG,OAAO,MAAM,SAAS;EACpC,uBAAoB;EACpB,oBAAkB;EAClB,aAAU;EACV,gBAAgB,UAAU,gBAAgB,KAAK;EAClC;EAEZ;CACc,CAAA;AAErB,CACF;AAOA,MAAa,mBAAA,GAAA,MAAA,WAAA,CACX,SAAS,gBACP,EAAE,UAAU,WAAW,iBAAiB,OAAO,MAAM,OAAO,UAAU,WAAW,GAAG,SACpF,KACA;CACA,MAAM,SAASF,qBAAAA,YAAY;EAAE;EAAM;CAAQ,CAAC;CAE5C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACG,sBAAAA,QAAD;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;EACrD,uBAAoB;EACpB,aAAU;EACV,kBAAkB,YAAY,kBAAkB,OAAO;EAChD;EAEN;CACS,CAAA;AAEhB,CACF;AAEA,MAAa,cAAc;CACzB,MAAM;CACN,MAAM;AACR"}
1
+ {"version":3,"file":"toggle-group.cjs","names":["forwardRef","toggleGroup","BaseToggleGroup","cx","BaseToggle","withRecipeClassName"],"sources":["../../../src/components/toggle-group/toggle-group.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toggle as BaseToggle } from \"@base-ui/react/toggle\";\nimport { ToggleGroup as BaseToggleGroup } from \"@base-ui/react/toggle-group\";\nimport { forwardRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { ToggleGroup as BaseToggleGroupType } from \"@base-ui/react/toggle-group\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { toggleGroup } from \"../../styled-system/recipes\";\nimport type { ToggleProps, ToggleSize, ToggleVariant } from \"../toggle\";\nimport { withRecipeClassName } from \"../base-ui\";\n\nexport interface ToggleGroupRootProps\n extends Omit<BaseToggleGroupType.Props<string>, \"children\" | \"className\" | \"onValueChange\"> {\n children?: ReactNode;\n className?: string;\n onValueChange?: (value: string[]) => void;\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const ToggleGroupRoot = forwardRef<HTMLDivElement, ToggleGroupRootProps>(\n function ToggleGroupRoot(\n {\n children,\n className,\n onValueChange,\n orientation = \"horizontal\",\n size = \"md\",\n variant = \"outline\",\n ...props\n },\n ref,\n ) {\n const styles = toggleGroup({ size, variant });\n\n return (\n <BaseToggleGroup\n {...props}\n ref={ref}\n className={cx(styles.root, className)}\n data-jaci-component=\"toggle-group\"\n data-orientation={orientation}\n data-slot=\"toggle-group\"\n onValueChange={(value) => onValueChange?.(value)}\n orientation={orientation}\n >\n {children}\n </BaseToggleGroup>\n );\n },\n);\n\nexport interface ToggleGroupItemProps extends Omit<ToggleProps, \"className\"> {\n className?: string;\n value: string;\n}\n\nexport const ToggleGroupItem = forwardRef<HTMLButtonElement, ToggleGroupItemProps>(\n function ToggleGroupItem(\n { children, className, onPressedChange, size = \"md\", value, variant = \"outline\", ...props },\n ref,\n ) {\n const styles = toggleGroup({ size, variant });\n\n return (\n <BaseToggle\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.item, className)}\n data-jaci-component=\"toggle-group\"\n data-slot=\"toggle-group-item\"\n onPressedChange={(pressed) => onPressedChange?.(pressed)}\n value={value}\n >\n {children}\n </BaseToggle>\n );\n },\n);\n\nexport const ToggleGroup = {\n Root: ToggleGroupRoot,\n Item: ToggleGroupItem,\n};\n"],"mappings":";;;;;;;;;AAsBA,MAAa,mBAAA,GAAkBA,MAAAA,WAAAA,CAC7B,SAAS,gBACP,EACE,UACA,WACA,eACA,cAAc,cACd,OAAO,MACP,UAAU,WACV,GAAG,SAEL,KACA;CACA,MAAM,SAASC,qBAAAA,YAAY;EAAE;EAAM;CAAQ,CAAC;CAE5C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,4BAAAA,aAAD;EACE,GAAI;EACC;EACL,WAAWC,WAAAA,GAAG,OAAO,MAAM,SAAS;EACpC,uBAAoB;EACpB,oBAAkB;EAClB,aAAU;EACV,gBAAgB,UAAU,gBAAgB,KAAK;EAClC;EAEZ;CACc,CAAA;AAErB,CACF;AAOA,MAAa,mBAAA,GAAkBH,MAAAA,WAAAA,CAC7B,SAAS,gBACP,EAAE,UAAU,WAAW,iBAAiB,OAAO,MAAM,OAAO,UAAU,WAAW,GAAG,SACpF,KACA;CACA,MAAM,SAASC,qBAAAA,YAAY;EAAE;EAAM;CAAQ,CAAC;CAE5C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACG,sBAAAA,QAAD;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;EACrD,uBAAoB;EACpB,aAAU;EACV,kBAAkB,YAAY,kBAAkB,OAAO;EAChD;EAEN;CACS,CAAA;AAEhB,CACF;AAEA,MAAa,cAAc;CACzB,MAAM;CACN,MAAM;AACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar.cjs","names":["toolbar","BaseToolbar","withRecipeClassName"],"sources":["../../../src/components/toolbar/toolbar.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toolbar as BaseToolbar } from \"@base-ui/react/toolbar\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { toolbar } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\nimport type { ToggleSize, ToggleVariant } from \"../toggle\";\n\nexport type ToolbarOrientation = \"horizontal\" | \"vertical\";\n\nexport interface ToolbarRootProps extends ComponentPropsWithoutRef<typeof BaseToolbar.Root> {\n orientation?: ToolbarOrientation;\n}\n\nexport const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(function ToolbarRoot(\n { className, orientation = \"horizontal\", ...props },\n ref,\n) {\n const styles = toolbar();\n\n return (\n <BaseToolbar.Root\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.root, className)}\n data-jaci-component=\"toolbar\"\n data-orientation={orientation}\n data-slot=\"toolbar\"\n orientation={orientation}\n />\n );\n});\n\nexport type ToolbarGroupProps = ComponentPropsWithoutRef<typeof BaseToolbar.Group>;\n\nexport const ToolbarGroup = forwardRef<HTMLDivElement, ToolbarGroupProps>(function ToolbarGroup(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToolbar.Group\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().group, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-group\"\n />\n );\n});\n\nexport interface ToolbarButtonProps extends ComponentPropsWithoutRef<typeof BaseToolbar.Button> {\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n function ToolbarButton({ className, size = \"md\", variant = \"ghost\", ...props }, ref) {\n return (\n <BaseToolbar.Button\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar({ size, variant }).button, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-button\"\n />\n );\n },\n);\n\nexport type ToolbarLinkProps = ComponentPropsWithoutRef<typeof BaseToolbar.Link>;\n\nexport const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>(function ToolbarLink(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToolbar.Link\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().link, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-link\"\n />\n );\n});\n\nexport type ToolbarInputProps = ComponentPropsWithoutRef<typeof BaseToolbar.Input>;\n\nexport const ToolbarInput = forwardRef<HTMLInputElement, ToolbarInputProps>(function ToolbarInput(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToolbar.Input\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().input, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-input\"\n />\n );\n});\n\nexport type ToolbarSeparatorProps = ComponentPropsWithoutRef<typeof BaseToolbar.Separator>;\n\nexport const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n function ToolbarSeparator({ className, ...props }, ref) {\n return (\n <BaseToolbar.Separator\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().separator, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-separator\"\n />\n );\n },\n);\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Group: ToolbarGroup,\n Button: ToolbarButton,\n Link: ToolbarLink,\n Input: ToolbarInput,\n Separator: ToolbarSeparator,\n};\n"],"mappings":";;;;;;;AAgBA,MAAa,eAAA,GAAA,MAAA,WAAA,CAA2D,SAAS,YAC/E,EAAE,WAAW,cAAc,cAAc,GAAG,SAC5C,KACA;CACA,MAAM,SAASA,gBAAAA,QAAQ;CAEvB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,QAAY,MAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;EACrD,uBAAoB;EACpB,oBAAkB;EAClB,aAAU;EACG;CACd,CAAA;AAEL,CAAC;AAID,MAAa,gBAAA,GAAA,MAAA,WAAA,CAA6D,SAAS,aACjF,EAAE,WAAW,GAAG,SAChB,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACD,uBAAAA,QAAY,OAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,OAAO,SAAS;EACzD,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC;AAOD,MAAa,iBAAA,GAAA,MAAA,WAAA,CACX,SAAS,cAAc,EAAE,WAAW,OAAO,MAAM,UAAU,SAAS,GAAG,SAAS,KAAK;CACnF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,QAAY,QAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ;GAAE;GAAM;EAAQ,CAAC,CAAC,CAAC,QAAQ,SAAS;EAC3E,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CACF;AAIA,MAAa,eAAA,GAAA,MAAA,WAAA,CAA8D,SAAS,YAClF,EAAE,WAAW,GAAG,SAChB,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,QAAY,MAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,MAAM,SAAS;EACxD,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,gBAAA,GAAA,MAAA,WAAA,CAA+D,SAAS,aACnF,EAAE,WAAW,GAAG,SAChB,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,QAAY,OAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,OAAO,SAAS;EACzD,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,oBAAA,GAAA,MAAA,WAAA,CACX,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAS,KAAK;CACtD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,QAAY,WAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,WAAW,SAAS;EAC7D,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CACF;AAEA,MAAa,UAAU;CACrB,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,WAAW;AACb"}
1
+ {"version":3,"file":"toolbar.cjs","names":["forwardRef","toolbar","BaseToolbar","withRecipeClassName"],"sources":["../../../src/components/toolbar/toolbar.tsx"],"sourcesContent":["\"use client\";\n\nimport { Toolbar as BaseToolbar } from \"@base-ui/react/toolbar\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { toolbar } from \"../../styled-system/recipes\";\nimport { withRecipeClassName } from \"../base-ui\";\nimport type { ToggleSize, ToggleVariant } from \"../toggle\";\n\nexport type ToolbarOrientation = \"horizontal\" | \"vertical\";\n\nexport interface ToolbarRootProps extends ComponentPropsWithoutRef<typeof BaseToolbar.Root> {\n orientation?: ToolbarOrientation;\n}\n\nexport const ToolbarRoot = forwardRef<HTMLDivElement, ToolbarRootProps>(function ToolbarRoot(\n { className, orientation = \"horizontal\", ...props },\n ref,\n) {\n const styles = toolbar();\n\n return (\n <BaseToolbar.Root\n {...props}\n ref={ref}\n className={withRecipeClassName(styles.root, className)}\n data-jaci-component=\"toolbar\"\n data-orientation={orientation}\n data-slot=\"toolbar\"\n orientation={orientation}\n />\n );\n});\n\nexport type ToolbarGroupProps = ComponentPropsWithoutRef<typeof BaseToolbar.Group>;\n\nexport const ToolbarGroup = forwardRef<HTMLDivElement, ToolbarGroupProps>(function ToolbarGroup(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToolbar.Group\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().group, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-group\"\n />\n );\n});\n\nexport interface ToolbarButtonProps extends ComponentPropsWithoutRef<typeof BaseToolbar.Button> {\n size?: ToggleSize;\n variant?: ToggleVariant;\n}\n\nexport const ToolbarButton = forwardRef<HTMLButtonElement, ToolbarButtonProps>(\n function ToolbarButton({ className, size = \"md\", variant = \"ghost\", ...props }, ref) {\n return (\n <BaseToolbar.Button\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar({ size, variant }).button, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-button\"\n />\n );\n },\n);\n\nexport type ToolbarLinkProps = ComponentPropsWithoutRef<typeof BaseToolbar.Link>;\n\nexport const ToolbarLink = forwardRef<HTMLAnchorElement, ToolbarLinkProps>(function ToolbarLink(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToolbar.Link\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().link, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-link\"\n />\n );\n});\n\nexport type ToolbarInputProps = ComponentPropsWithoutRef<typeof BaseToolbar.Input>;\n\nexport const ToolbarInput = forwardRef<HTMLInputElement, ToolbarInputProps>(function ToolbarInput(\n { className, ...props },\n ref,\n) {\n return (\n <BaseToolbar.Input\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().input, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-input\"\n />\n );\n});\n\nexport type ToolbarSeparatorProps = ComponentPropsWithoutRef<typeof BaseToolbar.Separator>;\n\nexport const ToolbarSeparator = forwardRef<HTMLDivElement, ToolbarSeparatorProps>(\n function ToolbarSeparator({ className, ...props }, ref) {\n return (\n <BaseToolbar.Separator\n {...props}\n ref={ref}\n className={withRecipeClassName(toolbar().separator, className)}\n data-jaci-component=\"toolbar\"\n data-slot=\"toolbar-separator\"\n />\n );\n },\n);\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Group: ToolbarGroup,\n Button: ToolbarButton,\n Link: ToolbarLink,\n Input: ToolbarInput,\n Separator: ToolbarSeparator,\n};\n"],"mappings":";;;;;;;AAgBA,MAAa,eAAA,GAAcA,MAAAA,WAAAA,CAA6C,SAAS,YAC/E,EAAE,WAAW,cAAc,cAAc,GAAG,SAC5C,KACA;CACA,MAAM,SAASC,gBAAAA,QAAQ;CAEvB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,uBAAAA,QAAY,MAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoB,OAAO,MAAM,SAAS;EACrD,uBAAoB;EACpB,oBAAkB;EAClB,aAAU;EACG;CACd,CAAA;AAEL,CAAC;AAID,MAAa,gBAAA,GAAeH,MAAAA,WAAAA,CAA8C,SAAS,aACjF,EAAE,WAAW,GAAG,SAChB,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,uBAAAA,QAAY,OAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,OAAO,SAAS;EACzD,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC;AAOD,MAAa,iBAAA,GAAgBD,MAAAA,WAAAA,CAC3B,SAAS,cAAc,EAAE,WAAW,OAAO,MAAM,UAAU,SAAS,GAAG,SAAS,KAAK;CACnF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,uBAAAA,QAAY,QAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ;GAAE;GAAM;EAAQ,CAAC,CAAC,CAAC,QAAQ,SAAS;EAC3E,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CACF;AAIA,MAAa,eAAA,GAAcD,MAAAA,WAAAA,CAAgD,SAAS,YAClF,EAAE,WAAW,GAAG,SAChB,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,uBAAAA,QAAY,MAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,MAAM,SAAS;EACxD,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,gBAAA,GAAeD,MAAAA,WAAAA,CAAgD,SAAS,aACnF,EAAE,WAAW,GAAG,SAChB,KACA;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,uBAAAA,QAAY,OAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,OAAO,SAAS;EACzD,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CAAC;AAID,MAAa,oBAAA,GAAmBD,MAAAA,WAAAA,CAC9B,SAAS,iBAAiB,EAAE,WAAW,GAAG,SAAS,KAAK;CACtD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,uBAAAA,QAAY,WAAb;EACE,GAAI;EACC;EACL,WAAWC,gBAAAA,oBAAoBF,gBAAAA,QAAQ,CAAC,CAAC,WAAW,SAAS;EAC7D,uBAAoB;EACpB,aAAU;CACX,CAAA;AAEL,CACF;AAEA,MAAa,UAAU;CACrB,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,WAAW;AACb"}