@bigbinary/neeto-atoms 1.0.10 → 1.0.12

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 (113) hide show
  1. package/dist/{Accordion-BzfsJePA.js → Accordion-Ch9S_qd3.js} +3 -3
  2. package/dist/Accordion-Ch9S_qd3.js.map +1 -0
  3. package/dist/{ColorPicker-D-7QGnf9.js → ColorPicker-DtOvy0Gy.js} +3 -2
  4. package/dist/ColorPicker-DtOvy0Gy.js.map +1 -0
  5. package/dist/Input-C1gcv9o2.js.map +1 -1
  6. package/dist/MultiEmailInput-SCTYovtX.js.map +1 -1
  7. package/dist/RadioGroup-BNeYQAoT.js.map +1 -1
  8. package/dist/{Select-BGODpJGc.js → Select-TlFBcxcY.js} +7 -3
  9. package/dist/Select-TlFBcxcY.js.map +1 -0
  10. package/dist/Textarea-C0z50h0N.js.map +1 -1
  11. package/dist/TimePickerPanel-CiF0RExY.js.map +1 -1
  12. package/dist/TranslationProvider-Ba9rn47H.js.map +1 -1
  13. package/dist/{Tree-Dkr11OPy.js → Tree-C7r10UY5.js} +2 -2
  14. package/dist/{Tree-Dkr11OPy.js.map → Tree-C7r10UY5.js.map} +1 -1
  15. package/dist/{TreeSelect-Cmc90YWJ.js → TreeSelect-DRGcYz-6.js} +2 -2
  16. package/dist/{TreeSelect-Cmc90YWJ.js.map → TreeSelect-DRGcYz-6.js.map} +1 -1
  17. package/dist/{Typography-D5TjXEfu.js → Typography-CMJ8OveZ.js} +3 -9
  18. package/dist/Typography-CMJ8OveZ.js.map +1 -0
  19. package/dist/cjs/{Accordion-BX5I9ypV.js → Accordion-BoTckTBI.js} +3 -3
  20. package/dist/cjs/Accordion-BoTckTBI.js.map +1 -0
  21. package/dist/cjs/{ColorPicker-DEELmqH8.js → ColorPicker-Uxgn8U0h.js} +3 -2
  22. package/dist/cjs/ColorPicker-Uxgn8U0h.js.map +1 -0
  23. package/dist/cjs/Input-pkugjUb0.js.map +1 -1
  24. package/dist/cjs/MultiEmailInput-l0_YVjbp.js.map +1 -1
  25. package/dist/cjs/RadioGroup-1RAoe38m.js.map +1 -1
  26. package/dist/cjs/{Select-DOPZHlqc.js → Select-Br1AT_wm.js} +7 -3
  27. package/dist/cjs/Select-Br1AT_wm.js.map +1 -0
  28. package/dist/cjs/Textarea-BfdlAJ59.js.map +1 -1
  29. package/dist/cjs/TimePickerPanel-DGNr97cj.js.map +1 -1
  30. package/dist/cjs/TranslationProvider-DBZHXmzX.js.map +1 -1
  31. package/dist/cjs/{Tree-qpOcsGL9.js → Tree-BPd0DuLh.js} +2 -2
  32. package/dist/cjs/{Tree-qpOcsGL9.js.map → Tree-BPd0DuLh.js.map} +1 -1
  33. package/dist/cjs/{TreeSelect-DiIEdiAU.js → TreeSelect-C9nQJKNo.js} +2 -2
  34. package/dist/cjs/{TreeSelect-DiIEdiAU.js.map → TreeSelect-C9nQJKNo.js.map} +1 -1
  35. package/dist/cjs/{Typography-C3rGpmAY.js → Typography-PojQmdAY.js} +3 -28
  36. package/dist/cjs/Typography-PojQmdAY.js.map +1 -0
  37. package/dist/cjs/components/Accordion.js +1 -1
  38. package/dist/cjs/components/ColorPicker.js +1 -1
  39. package/dist/cjs/components/DropdownMenu.js.map +1 -1
  40. package/dist/cjs/components/Select.js +1 -1
  41. package/dist/cjs/components/Tree.js +6 -34
  42. package/dist/cjs/components/Tree.js.map +1 -1
  43. package/dist/cjs/components/TreeSelect.js +2 -2
  44. package/dist/cjs/components/Typography.js +1 -1
  45. package/dist/cjs/components/index.js +180 -0
  46. package/dist/cjs/components/index.js.map +1 -0
  47. package/dist/cjs/formik/ActionBlock.js +48 -0
  48. package/dist/cjs/formik/ActionBlock.js.map +1 -0
  49. package/dist/cjs/formik/BlockNavigation.js +111 -0
  50. package/dist/cjs/formik/BlockNavigation.js.map +1 -0
  51. package/dist/cjs/formik/Select.js +2 -2
  52. package/dist/cjs/formik/Select.js.map +1 -1
  53. package/dist/cjs/formik/TreeSelect.js +2 -2
  54. package/dist/cjs/formik/index.js +12 -3
  55. package/dist/cjs/formik/index.js.map +1 -1
  56. package/dist/cjs/index.js +10 -9
  57. package/dist/cjs/index.js.map +1 -1
  58. package/dist/cjs/search-CfYUGi4v.js +37 -0
  59. package/dist/cjs/search-CfYUGi4v.js.map +1 -0
  60. package/dist/components/Accordion/Accordion.d.ts +3 -1
  61. package/dist/components/Accordion.js +1 -1
  62. package/dist/components/ColorPicker/ColorPicker.d.ts +1 -2
  63. package/dist/components/ColorPicker/Palette.d.ts +1 -1
  64. package/dist/components/ColorPicker/types.d.ts +6 -1
  65. package/dist/components/ColorPicker.js +1 -1
  66. package/dist/components/DropdownMenu/MenuItemButton.d.ts +1 -2
  67. package/dist/components/DropdownMenu/index.d.ts +1 -0
  68. package/dist/components/DropdownMenu.js.map +1 -1
  69. package/dist/components/Input/Input.d.ts +3 -1
  70. package/dist/components/MultiEmailInput/MultiEmailInput.d.ts +1 -2
  71. package/dist/components/RadioGroup/RadioGroup.d.ts +1 -1
  72. package/dist/components/RadioGroup/index.d.ts +1 -1
  73. package/dist/components/Select/Select.d.ts +1 -2
  74. package/dist/components/Select.js +1 -1
  75. package/dist/components/Textarea/Textarea.d.ts +3 -1
  76. package/dist/components/TimePicker/TimePickerPanel.d.ts +1 -2
  77. package/dist/components/Tree.js +2 -34
  78. package/dist/components/Tree.js.map +1 -1
  79. package/dist/components/TreeSelect.js +2 -2
  80. package/dist/components/Typography/Typography.d.ts +11 -4
  81. package/dist/components/Typography.js +1 -1
  82. package/dist/components/index.d.ts +36 -0
  83. package/dist/components/index.js +128 -0
  84. package/dist/components/index.js.map +1 -0
  85. package/dist/formik/ActionBlock.d.ts +18 -0
  86. package/dist/formik/ActionBlock.js +46 -0
  87. package/dist/formik/ActionBlock.js.map +1 -0
  88. package/dist/formik/BlockNavigation/BlockNavigationAlert.d.ts +23 -0
  89. package/dist/formik/BlockNavigation/index.d.ts +11 -0
  90. package/dist/formik/BlockNavigation.js +109 -0
  91. package/dist/formik/BlockNavigation.js.map +1 -0
  92. package/dist/formik/RadioGroup.d.ts +11 -0
  93. package/dist/formik/Select.js +2 -2
  94. package/dist/formik/Select.js.map +1 -1
  95. package/dist/formik/TreeSelect.js +2 -2
  96. package/dist/formik/index.d.ts +4 -0
  97. package/dist/formik/index.js +10 -3
  98. package/dist/formik/index.js.map +1 -1
  99. package/dist/hooks/useNavPrompt.d.ts +15 -0
  100. package/dist/index.js +10 -9
  101. package/dist/index.js.map +1 -1
  102. package/dist/search-BK7Ozh5_.js +33 -0
  103. package/dist/search-BK7Ozh5_.js.map +1 -0
  104. package/package.json +18 -7
  105. package/dist/Accordion-BzfsJePA.js.map +0 -1
  106. package/dist/ColorPicker-D-7QGnf9.js.map +0 -1
  107. package/dist/Select-BGODpJGc.js.map +0 -1
  108. package/dist/Typography-D5TjXEfu.js.map +0 -1
  109. package/dist/cjs/Accordion-BX5I9ypV.js.map +0 -1
  110. package/dist/cjs/ColorPicker-DEELmqH8.js.map +0 -1
  111. package/dist/cjs/Select-DOPZHlqc.js.map +0 -1
  112. package/dist/cjs/Typography-C3rGpmAY.js.map +0 -1
  113. package/dist/shadcn/components/typography.d.ts +0 -17
@@ -5,7 +5,7 @@ import { AccordionItem, AccordionTrigger, AccordionContent, Accordion as Accordi
5
5
 
6
6
  const AccordionItemComponent = forwardRef(({ title, children, className, value, ...otherProps }, ref) => (jsxs(AccordionItem, { ref: ref, value: value, className: cn(className), ...otherProps, children: [jsx(AccordionTrigger, { children: title }), jsx(AccordionContent, { children: children })] })));
7
7
  AccordionItemComponent.displayName = "Accordion.Item";
8
- const Accordion = forwardRef(({ className, children, ...otherProps }, ref) => {
8
+ const Accordion = forwardRef(({ className, children, type = "single", ...otherProps }, ref) => {
9
9
  // Auto-generate value props for items that don't have one
10
10
  const enhancedChildren = Children.map(children, (child, index) => {
11
11
  if (!React__default.isValidElement(child))
@@ -13,10 +13,10 @@ const Accordion = forwardRef(({ className, children, ...otherProps }, ref) => {
13
13
  const childValue = child.props.value ?? `item-${index}`;
14
14
  return React__default.cloneElement(child, { value: childValue });
15
15
  });
16
- return (jsx(Accordion$1, { ref: ref, className: cn(className), ...otherProps, children: enhancedChildren }));
16
+ return (jsx(Accordion$1, { ref: ref, type: type, className: cn(className), ...otherProps, children: enhancedChildren }));
17
17
  });
18
18
  Accordion.displayName = "Accordion";
19
19
  Accordion.Item = AccordionItemComponent;
20
20
 
21
21
  export { Accordion as A };
22
- //# sourceMappingURL=Accordion-BzfsJePA.js.map
22
+ //# sourceMappingURL=Accordion-Ch9S_qd3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion-Ch9S_qd3.js","sources":["../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import React, { forwardRef, type ReactNode, Children } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Accordion as PrimitiveAccordion,\n AccordionItem as PrimitiveAccordionItem,\n AccordionTrigger as PrimitiveAccordionTrigger,\n AccordionContent as PrimitiveAccordionContent,\n} from \"src/primitives/Accordion\";\n\ntype AccordionRootProps = React.ComponentProps<typeof PrimitiveAccordion>;\n\nexport interface AccordionProps extends Omit<\n AccordionRootProps,\n \"children\" | \"type\"\n> {\n /** Whether one or many items can be opened at the same time. */\n type?: \"single\" | \"multiple\";\n /** Accordion.Item children. */\n children?: ReactNode;\n}\n\ninterface AccordionItemProps extends React.ComponentProps<\n typeof PrimitiveAccordionItem\n> {\n /** Header text displayed in the trigger. */\n title: string;\n /** Content rendered when the item is expanded. */\n children?: ReactNode;\n}\n\nconst AccordionItemComponent = forwardRef<HTMLDivElement, AccordionItemProps>(\n ({ title, children, className, value, ...otherProps }, ref) => (\n <PrimitiveAccordionItem\n ref={ref}\n value={value}\n className={cn(className)}\n {...otherProps}\n >\n <PrimitiveAccordionTrigger>{title}</PrimitiveAccordionTrigger>\n <PrimitiveAccordionContent>{children}</PrimitiveAccordionContent>\n </PrimitiveAccordionItem>\n )\n);\n\nAccordionItemComponent.displayName = \"Accordion.Item\";\n\nconst Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n ({ className, children, type = \"single\", ...otherProps }, ref) => {\n // Auto-generate value props for items that don't have one\n const enhancedChildren = Children.map(children, (child, index) => {\n if (!React.isValidElement<AccordionItemProps>(child)) return child;\n const childValue = child.props.value ?? `item-${index}`;\n return React.cloneElement(child, { value: childValue });\n });\n\n return (\n <PrimitiveAccordion\n ref={ref}\n type={type}\n className={cn(className)}\n {...(otherProps as Record<string, unknown>)}\n >\n {enhancedChildren}\n </PrimitiveAccordion>\n );\n }\n) as React.ForwardRefExoticComponent<\n AccordionProps & React.RefAttributes<HTMLDivElement>\n> & {\n Item: typeof AccordionItemComponent;\n};\n\nAccordion.displayName = \"Accordion\";\nAccordion.Item = AccordionItemComponent;\n\nexport { Accordion };\n"],"names":["_jsxs","PrimitiveAccordionItem","_jsx","PrimitiveAccordionTrigger","PrimitiveAccordionContent","React","PrimitiveAccordion"],"mappings":";;;;;AA+BA,MAAM,sBAAsB,GAAG,UAAU,CACvC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,MACxDA,IAAA,CAACC,aAAsB,EAAA,EACrB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAA,GACpB,UAAU,EAAA,QAAA,EAAA,CAEdC,GAAA,CAACC,gBAAyB,EAAA,EAAA,QAAA,EAAE,KAAK,EAAA,CAA6B,EAC9DD,GAAA,CAACE,gBAAyB,EAAA,EAAA,QAAA,EAAE,QAAQ,EAAA,CAA6B,CAAA,EAAA,CAC1C,CAC1B,CACF;AAED,sBAAsB,CAAC,WAAW,GAAG,gBAAgB;AAErD,MAAM,SAAS,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,KAAI;;AAE/D,IAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAI;AAC/D,QAAA,IAAI,CAACC,cAAK,CAAC,cAAc,CAAqB,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QAClE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE;AACvD,QAAA,OAAOA,cAAK,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACzD,IAAA,CAAC,CAAC;IAEF,QACEH,GAAA,CAACI,WAAkB,EAAA,EACjB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAA,GACnB,UAAsC,EAAA,QAAA,EAE1C,gBAAgB,EAAA,CACE;AAEzB,CAAC;AAOH,SAAS,CAAC,WAAW,GAAG,WAAW;AACnC,SAAS,CAAC,IAAI,GAAG,sBAAsB;;;;"}
@@ -183,7 +183,8 @@ const getColor = (colorValue, showTransparencyControl) => {
183
183
  };
184
184
 
185
185
  const Palette = forwardRef(({ color, colorList = DEFAULT_PALETTE_COLORS, onChange, className, ...props }, ref) => (jsx("div", { ref: ref, className: cn("flex flex-row flex-wrap items-start justify-start gap-1", className), ...props, children: colorList.map(item => {
186
- const value = item.hex ?? item.rgb ?? "";
186
+ const rgbValue = "rgb" in item && typeof item.rgb === "string" ? item.rgb : undefined;
187
+ const value = item.hex ?? rgbValue ?? "";
187
188
  const isActive = !!color && !!value && color.toLowerCase() === value.toLowerCase();
188
189
  return (jsx("button", { type: "button", "data-testid": "color-palette-item", className: cn("size-6 rounded-[5px] border cursor-pointer overflow-hidden transition-colors", isActive
189
190
  ? "border-muted-foreground"
@@ -274,4 +275,4 @@ const ColorPicker = forwardRef(({ color = "", size = "large", onChange, dropdown
274
275
  ColorPicker.displayName = "ColorPicker";
275
276
 
276
277
  export { ColorPicker as C };
277
- //# sourceMappingURL=ColorPicker-D-7QGnf9.js.map
278
+ //# sourceMappingURL=ColorPicker-DtOvy0Gy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPicker-DtOvy0Gy.js","sources":["../node_modules/lucide-react/dist/esm/icons/pipette.js","../src/components/ColorPicker/hooks/useEyeDropper.ts","../src/components/ColorPicker/constants.ts","../src/components/ColorPicker/hooks/useRecentlyUsedColors.ts","../src/components/ColorPicker/utils.ts","../src/components/ColorPicker/Palette.tsx","../src/components/ColorPicker/Target.tsx","../src/components/ColorPicker/ColorPicker.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12\",\n key: \"1y3wsu\"\n }\n ],\n [\n \"path\",\n {\n d: \"m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z\",\n key: \"110lr1\"\n }\n ],\n [\"path\", { d: \"m2 22 .414-.414\", key: \"jhxm08\" }]\n];\nconst Pipette = createLucideIcon(\"pipette\", __iconNode);\n\nexport { __iconNode, Pipette as default };\n//# sourceMappingURL=pipette.js.map\n","import { useCallback } from \"react\";\n\ninterface EyeDropperResult {\n sRGBHex: string;\n}\n\ndeclare global {\n interface Window {\n EyeDropper?: new () => { open: () => Promise<EyeDropperResult> };\n }\n}\n\nconst isSupported = typeof window !== \"undefined\" && \"EyeDropper\" in window;\n\nexport const useEyeDropper = () => {\n const open = useCallback(async (): Promise<string> => {\n if (!window.EyeDropper) throw new Error(\"EyeDropper API not supported\");\n\n const dropper = new window.EyeDropper();\n const result = await dropper.open();\n\n return result.sRGBHex;\n }, []);\n\n return { isSupported, open };\n};\n","export const DEFAULT_PALETTE_COLORS = [\n { hex: \"#FFFFFF\" },\n { hex: \"#D6D6D6\" },\n { hex: \"#0A0E13\" },\n { hex: \"#FECE1E\" },\n { hex: \"#F32E48\" },\n { hex: \"#02C39A\" },\n { hex: \"#2A79C4\" },\n { hex: \"#B3E5FC\" },\n { hex: \"#C3C6F9\" },\n { hex: \"#8064CE\" },\n { hex: \"#FE861E\" },\n { hex: \"#FF7DC9\" },\n { hex: \"#028090\" },\n { hex: \"#095482\" },\n];\n\nexport const RECENTLY_USED_STORAGE_KEY = \"recently-used-colors\";\n\nexport const TARGET_SIZES = {\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n} as const;\n\nexport const PICKER_HEIGHT: Record<string, string> = {\n small: \"100px\",\n medium: \"120px\",\n large: \"140px\",\n};\n","import { useSyncExternalStore } from \"react\";\n\nimport { RECENTLY_USED_STORAGE_KEY } from \"../constants\";\n\ninterface ColorValue {\n hex: string;\n rgb: string | { r: number; g: number; b: number; a?: number };\n}\n\nconst getFromStorage = (key: string, fallback: ColorValue[]): ColorValue[] => {\n try {\n const stored = localStorage.getItem(key);\n\n return stored ? JSON.parse(stored) : fallback;\n } catch {\n return fallback;\n }\n};\n\nconst setToStorage = (key: string, value: ColorValue[]) => {\n try {\n localStorage.setItem(key, JSON.stringify(value));\n } catch {\n // Silently fail if storage is unavailable\n }\n};\n\nconst createSyncedStore = (storageKey: string) => {\n const listeners = new Set<() => void>();\n\n const store = {\n value: getFromStorage(storageKey, []),\n getSnapshot: () => store.value,\n getServerSnapshot: () => [] as ColorValue[],\n setValue: (newValue: ColorValue[]) => {\n store.value = newValue;\n setToStorage(storageKey, newValue);\n listeners.forEach(listener => listener());\n },\n subscribe: (callback: () => void) => {\n listeners.add(callback);\n\n const storageEventHandler = (event: StorageEvent) => {\n if (event.key !== storageKey) return;\n store.value = getFromStorage(storageKey, []);\n listeners.forEach(listener => listener());\n };\n\n if (listeners.size === 1) {\n window.addEventListener(\"storage\", storageEventHandler);\n }\n\n return () => {\n listeners.delete(callback);\n if (listeners.size === 0) {\n window.removeEventListener(\"storage\", storageEventHandler);\n }\n };\n },\n };\n\n return store;\n};\n\nconst store = createSyncedStore(RECENTLY_USED_STORAGE_KEY);\n\nexport const useRecentlyUsedColors = (): [\n ColorValue[],\n (value: ColorValue[]) => void,\n] => [\n useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot\n ),\n store.setValue,\n];\n","/**\n * Validates a hex color string (3, 4, 6, or 8 digits with optional #).\n */\nexport const isValidHex = (hex: string): boolean =>\n /^#?([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(hex);\n\n/**\n * Parses a hex color string into RGBA components.\n * Returns { r: 0, g: 0, b: 0, a: 1 } for invalid inputs.\n */\nexport const hexToRgb = (\n hex: string\n): { r: number; g: number; b: number; a: number } => {\n const raw = hex.replace(/^#/, \"\");\n\n if (\n !/^([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(raw)\n ) {\n return { r: 0, g: 0, b: 0, a: 1 };\n }\n\n let r: number,\n g: number,\n b: number,\n a = 255;\n if (raw.length === 3 || raw.length === 4) {\n r = parseInt(raw[0] + raw[0], 16);\n g = parseInt(raw[1] + raw[1], 16);\n b = parseInt(raw[2] + raw[2], 16);\n if (raw.length === 4) a = parseInt(raw[3] + raw[3], 16);\n } else {\n r = parseInt(raw.slice(0, 2), 16);\n g = parseInt(raw.slice(2, 4), 16);\n b = parseInt(raw.slice(4, 6), 16);\n if (raw.length === 8) a = parseInt(raw.slice(6, 8), 16);\n }\n\n return { r, g, b, a: Math.round((a / 255) * 100) / 100 };\n};\n\n/**\n * Converts a hex color to an 8-digit hex string (#RRGGBBAA).\n */\nexport const hexToHex8 = (hex: string): string => {\n const { r, g, b, a } = hexToRgb(hex);\n const alpha = Math.round(a * 255);\n\n return `#${[r, g, b, alpha].map(v => v.toString(16).padStart(2, \"0\")).join(\"\")}`;\n};\n\n/**\n * Converts a color value to a normalized { hex, rgb } object.\n * Handles transparency and validity checks.\n */\nexport const getColor = (\n colorValue: string,\n showTransparencyControl: boolean\n): { hex: string; rgb: { r: number; g: number; b: number; a: number } } => {\n if (!isValidHex(colorValue)) {\n return { hex: colorValue, rgb: { r: 0, g: 0, b: 0, a: 1 } };\n }\n\n const rgb = hexToRgb(colorValue);\n\n if (rgb.a === 0) {\n return { hex: colorValue, rgb };\n }\n\n const hex = showTransparencyControl\n ? hexToHex8(colorValue)\n : `#${colorValue.replace(/^#/, \"\").slice(0, 6)}`;\n\n return { hex, rgb: hexToRgb(hex) };\n};\n","import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { isValidHex } from \"./utils\";\nimport { DEFAULT_PALETTE_COLORS } from \"./constants\";\nimport type { PaletteColor } from \"./types\";\n\nexport interface PaletteProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"onChange\"\n> {\n /** Currently selected color. */\n color?: string;\n /** List of colors to render. */\n colorList?: PaletteColor[];\n /** Callback when a color swatch is clicked. */\n onChange?: (color: string) => void;\n}\n\nconst Palette = forwardRef<HTMLDivElement, PaletteProps>(\n (\n {\n color,\n colorList = DEFAULT_PALETTE_COLORS,\n onChange,\n className,\n ...props\n },\n ref\n ) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-row flex-wrap items-start justify-start gap-1\",\n className\n )}\n {...props}\n >\n {colorList.map(item => {\n const rgbValue =\n \"rgb\" in item && typeof item.rgb === \"string\" ? item.rgb : undefined;\n const value = item.hex ?? rgbValue ?? \"\";\n const isActive =\n !!color && !!value && color.toLowerCase() === value.toLowerCase();\n\n return (\n <button\n type=\"button\"\n key={value}\n data-testid=\"color-palette-item\"\n className={cn(\n \"size-6 rounded-[5px] border cursor-pointer overflow-hidden transition-colors\",\n isActive\n ? \"border-muted-foreground\"\n : \"border-border hover:border-muted-foreground/50\"\n )}\n onClick={() => onChange?.(value)}\n >\n <span\n className={cn(\n \"block size-full\",\n isValidHex(value)\n ? \"\"\n : \"bg-[repeating-conic-gradient(#ccc_0_25%,transparent_0_50%)] bg-[length:8px_8px]\"\n )}\n style={isValidHex(value) ? { backgroundColor: value } : undefined}\n />\n </button>\n );\n })}\n </div>\n )\n);\n\nPalette.displayName = \"ColorPicker.Palette\";\n\nexport { Palette };\n","import React, { forwardRef } from \"react\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { ChevronDown } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nconst targetVariants = cva(\n \"inline-flex items-center justify-between rounded-md border border-input bg-background transition-colors hover:border-muted-foreground focus-visible:outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/15 cursor-pointer\",\n {\n variants: {\n size: {\n small: \"h-7 p-0.5 gap-2\",\n medium: \"h-8 p-1 gap-2\",\n large: \"h-10 p-1.5 gap-3\",\n },\n },\n defaultVariants: {\n size: \"large\",\n },\n }\n);\n\nexport interface TargetProps\n extends\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"size\">,\n VariantProps<typeof targetVariants> {\n /** Show hex code text beside the color swatch. */\n showHexValue?: boolean;\n /** The original color prop value. */\n color?: string;\n /** The resolved color value to display. */\n colorValue?: string;\n}\n\nconst Target = forwardRef<HTMLButtonElement, TargetProps>(\n (\n { size = \"large\", showHexValue, color, colorValue, className, ...props },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n data-testid=\"color-picker-target\"\n className={cn(targetVariants({ size }), className)}\n {...props}\n >\n {showHexValue && (\n <span className=\"text-sm font-medium text-foreground min-w-[4.5rem] ps-1\">\n {color}\n </span>\n )}\n <span className=\"inline-flex items-center gap-2\">\n <span\n className=\"block size-5 rounded-md border border-border\"\n style={{ backgroundColor: colorValue }}\n />\n <ChevronDown className=\"size-4 text-muted-foreground\" />\n </span>\n </button>\n )\n);\n\nTarget.displayName = \"ColorPicker.Target\";\n\nexport { Target };\n","import { forwardRef, useState, useRef } from \"react\";\n\nimport { Pipette } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n HexColorPicker,\n HexColorInput,\n HexAlphaColorPicker,\n} from \"react-colorful\";\nimport { Button } from \"src/primitives/Button\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { useEyeDropper } from \"./hooks/useEyeDropper\";\nimport { useRecentlyUsedColors } from \"./hooks/useRecentlyUsedColors\";\nimport { Palette } from \"./Palette\";\nimport { Target } from \"./Target\";\nimport { PICKER_HEIGHT } from \"./constants\";\nimport type { ColorPickerProps } from \"./types\";\nimport { getColor } from \"./utils\";\n\nconst ColorPicker = forwardRef<HTMLDivElement, ColorPickerProps>(\n (\n {\n color = \"\",\n size = \"large\",\n onChange,\n dropdownProps,\n showEyeDropper = true,\n showHexValue = false,\n showTransparencyControl = false,\n showPicker = true,\n showHexPicker = true,\n colorPalette,\n showRecentlyUsedColors = showPicker,\n className,\n },\n ref\n ) => {\n const { t } = useTranslation();\n const [colorInternal, setColorInternal] = useState(color);\n const [isColorSelected, setIsColorSelected] = useState(false);\n const [open, setOpen] = useState(false);\n const hexColorInputValue = useRef(\"\");\n const { isSupported: eyeDropperSupported, open: openEyeDropper } =\n useEyeDropper();\n const [recentlyUsedColors, setRecentlyUsedColors] = useRecentlyUsedColors();\n\n const PickerComponent = showTransparencyControl\n ? HexAlphaColorPicker\n : HexColorPicker;\n\n const colorValue = color ?? colorInternal ?? \"\";\n\n const onColorChange = (value: string) => {\n setIsColorSelected(true);\n\n if (onChange) {\n onChange(getColor(value, showTransparencyControl));\n } else {\n setColorInternal(value);\n }\n };\n\n const onColorInputChange = (hex: string) => {\n hexColorInputValue.current = hex;\n const expectedLength = showTransparencyControl ? 9 : 7;\n if (hex.length !== expectedLength) return;\n\n onColorChange(hex);\n hexColorInputValue.current = \"\";\n };\n\n const onBlur = () => {\n if (!hexColorInputValue.current) return;\n\n onColorChange(hexColorInputValue.current);\n hexColorInputValue.current = \"\";\n };\n\n const pickColor = async () => {\n try {\n const hex = await openEyeDropper();\n onColorChange(hex);\n } catch {\n // User cancelled or API unavailable\n }\n };\n\n const onOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && showRecentlyUsedColors && isColorSelected) {\n const newColor = getColor(colorValue, showTransparencyControl);\n const filtered = recentlyUsedColors.filter(\n ({ hex }) => hex !== newColor.hex\n );\n const updated = [newColor, ...filtered];\n if (updated.length > 14) updated.pop();\n\n setRecentlyUsedColors(updated);\n setIsColorSelected(false);\n }\n\n setOpen(nextOpen);\n };\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>\n <Target\n color={color}\n colorValue={colorValue}\n showHexValue={showHexValue}\n size={size}\n />\n </PopoverTrigger>\n <PopoverContent\n ref={ref}\n align=\"start\"\n side=\"bottom\"\n className={cn(\"w-auto p-3\", className)}\n {...dropdownProps}\n >\n <div className=\"flex flex-col gap-3 w-56\">\n {showPicker && (\n <>\n {showHexPicker && (\n <div\n data-testid=\"neeto-color-picker-section\"\n style={{\n [\"--react-colorful-height\" as string]:\n PICKER_HEIGHT[size] ?? \"140px\",\n }}\n >\n <PickerComponent\n color={colorValue}\n onChange={onColorChange}\n style={{\n width: \"100%\",\n height: PICKER_HEIGHT[size] ?? \"140px\",\n }}\n />\n </div>\n )}\n <div className=\"flex items-center justify-center gap-2\">\n {showEyeDropper && eyeDropperSupported && (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n onClick={pickColor}\n aria-label={t(\n \"neetoatoms.colorPicker.pickColor\",\n \"Pick color from screen\"\n )}\n >\n <Pipette className=\"size-4\" />\n </Button>\n )}\n <div\n className=\"flex-1\"\n data-testid=\"colorpicker-editable-input\"\n >\n <HexColorInput\n prefixed\n alpha={!!showTransparencyControl}\n color={colorValue}\n data-testid=\"colorpicker-editable-input-textbox\"\n onChange={onColorInputChange}\n onBlur={onBlur}\n className=\"h-8 w-full rounded-lg border border-input bg-transparent px-2.5 text-sm outline-none focus-visible:border-primary focus-visible:ring-3 focus-visible:ring-primary/15\"\n />\n </div>\n </div>\n </>\n )}\n <div\n data-testid=\"color-palette\"\n className={cn(showPicker && \"border-t border-border pt-3\")}\n >\n <Palette\n color={color}\n colorList={colorPalette}\n onChange={onColorChange}\n />\n </div>\n {showRecentlyUsedColors && recentlyUsedColors.length > 0 && (\n <div\n className=\"border-t border-border pt-3\"\n data-testid=\"color-palette-recently-used\"\n >\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">\n {t(\"neetoatoms.colorPicker.recentlyUsed\", \"Recently used\")}\n </p>\n <Palette\n colorList={recentlyUsedColors}\n onChange={onColorChange}\n />\n </div>\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n }\n);\n\nColorPicker.displayName = \"ColorPicker\";\n\nexport { ColorPicker };\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +1 @@
1
- {"version":3,"file":"Input-C1gcv9o2.js","sources":["../src/components/Input/constants.ts","../src/components/Input/utils.ts","../src/components/Input/Input.tsx"],"sourcesContent":["export const SIZE_CONFIG = {\n small: { group: \"h-7\", input: \"text-xs px-2\", addon: \"px-1.5\" },\n medium: { group: \"h-8\", input: \"text-sm\", addon: \"px-2\" },\n large: { group: \"h-10\", input: \"text-sm\", addon: \"px-2.5\" },\n};\n","import React from \"react\";\n\nexport function toFixed(numStr: string, prec: number): string {\n const num = Number(numStr);\n if (Number.isNaN(num)) return numStr;\n\n return num.toFixed(prec);\n}\n\nexport function formatWithPrecision(\n value: string | number | undefined,\n precision: number\n): string | undefined {\n if (precision < 0 || !value) return value as string | undefined;\n\n const str = value.toString();\n const trimmed = str.trim();\n if (trimmed !== \"\" && !Number.isNaN(Number(trimmed)))\n return toFixed(str, precision);\n\n return str;\n}\n\nexport function enforceDecimalPrecision(\n value: string,\n precision: number\n): string {\n if (precision < 0 || !value) return value;\n\n const valueStr = value.toString();\n if (precision === 0) return valueStr.split(\".\")[0];\n\n const regex = new RegExp(`^\\\\d*\\\\.?\\\\d{0,${precision}}$`);\n if (regex.test(valueStr)) return value;\n\n const parts = valueStr.split(\".\");\n if (parts.length === 1) return parts[0];\n\n return `${parts[0]}.${parts[1].substring(0, precision)}`;\n}\n\nexport function formatWithRejectCharsRegex(\n value: string,\n rejectCharsRegex?: RegExp\n): string {\n if (!rejectCharsRegex) return value;\n\n const globalRegex = new RegExp(rejectCharsRegex, \"g\");\n\n return value.replace(globalRegex, \"\");\n}\n\nexport function getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n\n return value.trim();\n}\n\nexport function preserveCursor(\n e: React.ChangeEvent<HTMLInputElement>,\n updateValueFn: () => React.ChangeEvent<HTMLInputElement>\n) {\n const input = e.target;\n const prevCursor = input.selectionStart;\n const prevValue = input.value;\n\n const updatedEvent = updateValueFn();\n\n const lengthDiff = input.value.length - prevValue.length;\n const newCursor = Math.max(0, (prevCursor ?? 0) + lengthDiff);\n\n requestAnimationFrame(() => {\n if (document.activeElement !== input) return;\n if (input.type === \"number\") return;\n\n input.setSelectionRange(newCursor, newCursor);\n });\n\n return updatedEvent;\n}\n","import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupInput,\n} from \"src/primitives/InputGroup\";\n\nimport { SIZE_CONFIG } from \"./constants\";\nimport {\n formatWithPrecision,\n enforceDecimalPrecision,\n formatWithRejectCharsRegex,\n getTrimmedValue,\n preserveCursor,\n} from \"./utils\";\n\ntype InputSize = \"small\" | \"medium\" | \"large\";\n\nexport interface InputProps extends Omit<\n React.ComponentProps<\"input\">,\n \"size\" | \"prefix\"\n> {\n /** Size of the input. */\n size?: InputSize;\n /** Input type. */\n type?: string;\n /** Label displayed above the input. */\n label?: string;\n /** Error message displayed below the input. */\n error?: string;\n /** Help text displayed below the input. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Content rendered before the input. */\n prefix?: React.ReactNode;\n /** Content rendered after the input. */\n suffix?: React.ReactNode;\n /** Removes borders from the input. */\n nakedInput?: boolean;\n /** HTML size attribute for the input element. */\n contentSize?: number;\n /** Maximum character limit. Counter visible at 85%. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Regex to reject matching characters from input. */\n rejectCharsRegex?: RegExp;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Decimal places for number formatting. -1 to disable. */\n precision?: number;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = \"medium\",\n type = \"text\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n prefix = null,\n suffix = null,\n disabled = false,\n nakedInput = false,\n contentSize,\n required = false,\n maxLength,\n unlimitedChars = false,\n rejectCharsRegex,\n disableTrimOnBlur = false,\n precision = -1,\n labelProps,\n className = \"\",\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue);\n const isControlled = controlledValue !== undefined;\n\n const value =\n formatWithPrecision(controlledValue, precision) ?? valueInternal ?? \"\";\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n // --- Handlers ---\n\n const onChangeInternal = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onChangeInternal(e);\n\n return;\n }\n\n let formattedValue = formatWithRejectCharsRegex(\n e.target.value,\n rejectCharsRegex\n );\n formattedValue = enforceDecimalPrecision(formattedValue, precision);\n\n if (formattedValue !== e.target.value) {\n preserveCursor(e, () => {\n const syntheticEvent = Object.create(e, {\n target: { value: { ...e.target, value: formattedValue } },\n });\n e.target.value = formattedValue;\n onChangeInternal(syntheticEvent);\n\n return syntheticEvent;\n });\n } else {\n onChangeInternal(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onBlur?.(e);\n\n return;\n }\n\n const trimmedValue = getTrimmedValue(value, disableTrimOnBlur);\n const formattedValue = formatWithPrecision(trimmedValue, precision);\n\n if (formattedValue !== undefined && formattedValue !== value) {\n e.target.value = formattedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLInputElement>);\n }\n\n onBlur?.(e);\n };\n\n const handleWheel = (e: React.WheelEvent<HTMLInputElement>) => {\n if (type === \"number\") (e.target as HTMLInputElement).blur();\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Render ---\n\n const hasField = !!(label || error || helpText);\n const sizeConfig = SIZE_CONFIG[size];\n\n const inputGroup = (\n <InputGroup\n className={cn(\n sizeConfig.group,\n nakedInput &&\n \"border-0 shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-transparent\",\n !!error &&\n !nakedInput &&\n \"border-destructive ring-destructive/20 ring-3\",\n !hasField && className\n )}\n >\n {prefix && (\n <InputGroupAddon align=\"inline-start\" className={sizeConfig.addon}>\n <InputGroupText>{prefix}</InputGroupText>\n </InputGroupAddon>\n )}\n <InputGroupInput\n ref={ref}\n id={id}\n type={type}\n disabled={disabled}\n required={required}\n size={contentSize}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(sizeConfig.input, nakedInput && \"px-0\")}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onWheel={handleWheel}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <InputGroupAddon align=\"inline-end\" className={sizeConfig.addon}>\n <InputGroupText>{suffix}</InputGroupText>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n\n if (!hasField) {\n return inputGroup;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {inputGroup}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"Input-C1gcv9o2.js","sources":["../src/components/Input/constants.ts","../src/components/Input/utils.ts","../src/components/Input/Input.tsx"],"sourcesContent":["export const SIZE_CONFIG = {\n small: { group: \"h-7\", input: \"text-xs px-2\", addon: \"px-1.5\" },\n medium: { group: \"h-8\", input: \"text-sm\", addon: \"px-2\" },\n large: { group: \"h-10\", input: \"text-sm\", addon: \"px-2.5\" },\n};\n","import React from \"react\";\n\nexport function toFixed(numStr: string, prec: number): string {\n const num = Number(numStr);\n if (Number.isNaN(num)) return numStr;\n\n return num.toFixed(prec);\n}\n\nexport function formatWithPrecision(\n value: string | number | undefined,\n precision: number\n): string | undefined {\n if (precision < 0 || !value) return value as string | undefined;\n\n const str = value.toString();\n const trimmed = str.trim();\n if (trimmed !== \"\" && !Number.isNaN(Number(trimmed)))\n return toFixed(str, precision);\n\n return str;\n}\n\nexport function enforceDecimalPrecision(\n value: string,\n precision: number\n): string {\n if (precision < 0 || !value) return value;\n\n const valueStr = value.toString();\n if (precision === 0) return valueStr.split(\".\")[0];\n\n const regex = new RegExp(`^\\\\d*\\\\.?\\\\d{0,${precision}}$`);\n if (regex.test(valueStr)) return value;\n\n const parts = valueStr.split(\".\");\n if (parts.length === 1) return parts[0];\n\n return `${parts[0]}.${parts[1].substring(0, precision)}`;\n}\n\nexport function formatWithRejectCharsRegex(\n value: string,\n rejectCharsRegex?: RegExp\n): string {\n if (!rejectCharsRegex) return value;\n\n const globalRegex = new RegExp(rejectCharsRegex, \"g\");\n\n return value.replace(globalRegex, \"\");\n}\n\nexport function getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n\n return value.trim();\n}\n\nexport function preserveCursor(\n e: React.ChangeEvent<HTMLInputElement>,\n updateValueFn: () => React.ChangeEvent<HTMLInputElement>\n) {\n const input = e.target;\n const prevCursor = input.selectionStart;\n const prevValue = input.value;\n\n const updatedEvent = updateValueFn();\n\n const lengthDiff = input.value.length - prevValue.length;\n const newCursor = Math.max(0, (prevCursor ?? 0) + lengthDiff);\n\n requestAnimationFrame(() => {\n if (document.activeElement !== input) return;\n if (input.type === \"number\") return;\n\n input.setSelectionRange(newCursor, newCursor);\n });\n\n return updatedEvent;\n}\n","import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport {\n InputGroup,\n InputGroupAddon,\n InputGroupText,\n InputGroupInput,\n} from \"src/primitives/InputGroup\";\n\nimport { SIZE_CONFIG } from \"./constants\";\nimport {\n formatWithPrecision,\n enforceDecimalPrecision,\n formatWithRejectCharsRegex,\n getTrimmedValue,\n preserveCursor,\n} from \"./utils\";\n\ntype InputSize = \"small\" | \"medium\" | \"large\";\n\nexport interface InputProps extends Omit<\n React.ComponentProps<\"input\">,\n \"size\" | \"prefix\" | \"value\"\n> {\n /** Controlled value. */\n value?: string | number;\n /** Size of the input. */\n size?: InputSize;\n /** Input type. */\n type?: string;\n /** Label displayed above the input. */\n label?: string;\n /** Error message displayed below the input. */\n error?: string;\n /** Help text displayed below the input. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Content rendered before the input. */\n prefix?: React.ReactNode;\n /** Content rendered after the input. */\n suffix?: React.ReactNode;\n /** Removes borders from the input. */\n nakedInput?: boolean;\n /** HTML size attribute for the input element. */\n contentSize?: number;\n /** Maximum character limit. Counter visible at 85%. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Regex to reject matching characters from input. */\n rejectCharsRegex?: RegExp;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Decimal places for number formatting. -1 to disable. */\n precision?: number;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n size = \"medium\",\n type = \"text\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n prefix = null,\n suffix = null,\n disabled = false,\n nakedInput = false,\n contentSize,\n required = false,\n maxLength,\n unlimitedChars = false,\n rejectCharsRegex,\n disableTrimOnBlur = false,\n precision = -1,\n labelProps,\n className = \"\",\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue);\n const isControlled = controlledValue !== undefined;\n\n const value =\n formatWithPrecision(controlledValue, precision) ?? valueInternal ?? \"\";\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n // --- Handlers ---\n\n const onChangeInternal = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onChangeInternal(e);\n\n return;\n }\n\n let formattedValue = formatWithRejectCharsRegex(\n e.target.value,\n rejectCharsRegex\n );\n formattedValue = enforceDecimalPrecision(formattedValue, precision);\n\n if (formattedValue !== e.target.value) {\n preserveCursor(e, () => {\n const syntheticEvent = Object.create(e, {\n target: { value: { ...e.target, value: formattedValue } },\n });\n e.target.value = formattedValue;\n onChangeInternal(syntheticEvent);\n\n return syntheticEvent;\n });\n } else {\n onChangeInternal(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (type === \"file\") {\n onBlur?.(e);\n\n return;\n }\n\n const trimmedValue = getTrimmedValue(value, disableTrimOnBlur);\n const formattedValue = formatWithPrecision(trimmedValue, precision);\n\n if (formattedValue !== undefined && formattedValue !== value) {\n e.target.value = formattedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLInputElement>);\n }\n\n onBlur?.(e);\n };\n\n const handleWheel = (e: React.WheelEvent<HTMLInputElement>) => {\n if (type === \"number\") (e.target as HTMLInputElement).blur();\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Render ---\n\n const hasField = !!(label || error || helpText);\n const sizeConfig = SIZE_CONFIG[size];\n\n const inputGroup = (\n <InputGroup\n className={cn(\n sizeConfig.group,\n nakedInput &&\n \"border-0 shadow-none has-[[data-slot=input-group-control]:focus-visible]:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-transparent\",\n !!error &&\n !nakedInput &&\n \"border-destructive ring-destructive/20 ring-3\",\n !hasField && className\n )}\n >\n {prefix && (\n <InputGroupAddon align=\"inline-start\" className={sizeConfig.addon}>\n <InputGroupText>{prefix}</InputGroupText>\n </InputGroupAddon>\n )}\n <InputGroupInput\n ref={ref}\n id={id}\n type={type}\n disabled={disabled}\n required={required}\n size={contentSize}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(sizeConfig.input, nakedInput && \"px-0\")}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onWheel={handleWheel}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <InputGroupAddon align=\"inline-end\" className={sizeConfig.addon}>\n <InputGroupText>{suffix}</InputGroupText>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n\n if (!hasField) {\n return inputGroup;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {inputGroup}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nInput.displayName = \"Input\";\n\nexport { Input };\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MultiEmailInput-SCTYovtX.js","sources":["../src/components/MultiEmailInput/constants.ts","../src/components/MultiEmailInput/utils.ts","../src/components/MultiEmailInput/useMultiEmailState.ts","../src/components/MultiEmailInput/MultiEmailInput.tsx"],"sourcesContent":["export const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\\.[A-Z0-9-]+)*\\.[A-Z]{2,}$/i;\n\nexport const UNSTRICT_EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\n\nexport const EMAIL_SEPARATION_REGEX = /[^\\s,]+/g;\n","import { EMAIL_REGEX } from \"./constants\";\nimport type { EmailValue } from \"./types\";\n\nexport const formatEmailInputOption = (email: string): EmailValue => ({\n label: email,\n value: email,\n valid: EMAIL_REGEX.test(email),\n});\n\nexport const pruneDuplicates = (\n existing: EmailValue[],\n newEmailStrings: string[]\n): { uniqueEmails: EmailValue[]; duplicates: string[] } => {\n const seen = new Set(existing.map(e => e.value.toLowerCase()));\n const duplicates: string[] = [];\n const added: EmailValue[] = [];\n\n for (const emailStr of newEmailStrings) {\n const lower = emailStr.toLowerCase();\n if (seen.has(lower)) {\n duplicates.push(emailStr);\n } else {\n seen.add(lower);\n added.push(formatEmailInputOption(emailStr));\n }\n }\n\n return { uniqueEmails: [...existing, ...added], duplicates };\n};\n\nexport const filterValidEmails = (emails: EmailValue[]): EmailValue[] =>\n emails.filter(email => email.valid);\n\nexport const pluralizeEmail = (count: number): string =>\n count === 1 ? \"email\" : \"emails\";\n\nexport const formatDuplicateWarning = (duplicates: string[]): string => {\n const count = duplicates.length;\n\n return `Removed ${count} duplicate ${pluralizeEmail(count)} from the list: ${duplicates.join(\", \")}`;\n};\n","import { useState, useCallback, useMemo } from \"react\";\n\nimport { UNSTRICT_EMAIL_REGEX, EMAIL_SEPARATION_REGEX } from \"./constants\";\nimport { pruneDuplicates, filterValidEmails } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nexport function useMultiEmailState(props: MultiEmailInputProps) {\n const {\n value = [],\n onChange,\n onBlur,\n visibleEmailsCount = 3,\n isAlwaysExpanded = false,\n counter,\n filterInvalidEmails,\n } = props;\n\n const [inputValue, setInputValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [duplicateEmails, setDuplicateEmails] = useState<string[]>([]);\n\n const addEmails = useCallback(\n (input: string) => {\n const trimmed = input.trim();\n if (!trimmed) return;\n UNSTRICT_EMAIL_REGEX.lastIndex = 0;\n EMAIL_SEPARATION_REGEX.lastIndex = 0;\n const emailMatches =\n trimmed.match(UNSTRICT_EMAIL_REGEX) ||\n trimmed.match(EMAIL_SEPARATION_REGEX) ||\n [];\n if (emailMatches.length === 0) return;\n const { uniqueEmails, duplicates } = pruneDuplicates(value, emailMatches);\n onChange?.(uniqueEmails);\n setDuplicateEmails(duplicates);\n setInputValue(\"\");\n },\n [value, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!inputValue && event.key === \"Backspace\" && value.length > 0) {\n onChange?.(value.slice(0, -1));\n return;\n }\n if (!inputValue) return;\n if ([\"Enter\", \"Tab\", \",\", \" \"].includes(event.key)) {\n addEmails(inputValue);\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [inputValue, value, onChange, addEmails]\n );\n\n const handlePaste = useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>) => {\n const text = event.clipboardData.getData(\"text\");\n if (!text) return;\n event.preventDefault();\n addEmails(text);\n },\n [addEmails]\n );\n\n const handleBlur = useCallback(() => {\n if (inputValue) {\n addEmails(inputValue);\n } else {\n onBlur?.();\n }\n setIsFocused(false);\n setDuplicateEmails([]);\n }, [inputValue, addEmails, onBlur]);\n\n const handleFocus = useCallback(() => setIsFocused(true), []);\n\n const handleChipRemove = useCallback(\n (emailValue: string) =>\n onChange?.(value.filter(e => e.value !== emailValue)),\n [value, onChange]\n );\n\n const handleFilterInvalidEmails = useCallback(\n () => onChange?.(filterValidEmails(value)),\n [value, onChange]\n );\n\n const validCount = useMemo(() => value.filter(e => e.valid).length, [value]);\n const isCounterVisible =\n !!counter &&\n (typeof counter === \"boolean\" ||\n !counter.startsFrom ||\n validCount >= counter.startsFrom);\n const shouldCollapse =\n !isAlwaysExpanded && !isFocused && value.length > visibleEmailsCount;\n const visibleEmails = shouldCollapse\n ? value.slice(0, visibleEmailsCount)\n : value;\n const hiddenCount = shouldCollapse ? value.length - visibleEmailsCount : 0;\n const isFilterLinkVisible =\n !!filterInvalidEmails && value.length > validCount;\n\n return {\n inputValue,\n setInputValue,\n isFocused,\n duplicateEmails,\n handleKeyDown,\n handlePaste,\n handleBlur,\n handleFocus,\n handleChipRemove,\n handleFilterInvalidEmails,\n isCounterVisible,\n validCount,\n visibleEmails,\n hiddenCount,\n isFilterLinkVisible,\n };\n}\n","import React, { forwardRef, useId } from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Field, FieldLabel, FieldContent } from \"src/primitives/Field\";\nimport { useMultiEmailState } from \"./useMultiEmailState\";\nimport { pluralizeEmail, formatDuplicateWarning } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nconst CHIP_BASE =\n \"flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground\";\nconst CHIP_INVALID =\n \"border border-destructive text-destructive bg-destructive/10\";\nconst CHIPS_CONTAINER =\n \"flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\";\nconst CHIPS_ERROR =\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\";\n\nexport const MultiEmailInput = forwardRef<\n HTMLInputElement,\n MultiEmailInputProps\n>((props, ref) => {\n const {\n label,\n placeholder = \"\",\n helpText,\n error,\n disabled = false,\n required = false,\n maxHeight = 200,\n counter,\n filterInvalidEmails,\n prefix,\n suffix,\n labelProps,\n className,\n } = props;\n const id = useId();\n const s = useMultiEmailState(props);\n\n return (\n <Field className={cn(\"flex flex-col gap-1.5\", className)}>\n {(label || s.isCounterVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n {\" *\"}\n </span>\n )}\n </FieldLabel>\n )}\n {s.isCounterVisible && (\n <span className=\"text-xs text-muted-foreground\">\n {s.validCount}{\" \"}\n {typeof counter === \"object\" && counter?.label\n ? counter.label\n : pluralizeEmail(s.validCount)}\n </span>\n )}\n </div>\n )}\n <div\n className={cn(\n CHIPS_CONTAINER,\n !!error && CHIPS_ERROR,\n disabled && \"pointer-events-none opacity-50\"\n )}\n style={{ maxHeight: `${maxHeight}px`, overflowY: \"auto\" }}\n >\n {prefix && <div className=\"shrink-0\">{prefix}</div>}\n {s.visibleEmails.map(email => (\n <span\n key={email.value}\n className={cn(CHIP_BASE, !email.valid && CHIP_INVALID)}\n >\n {email.label}\n {!disabled && (\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"-ms-0.5 rounded-xs opacity-50 hover:opacity-100\"\n onMouseDown={e => e.preventDefault()}\n onClick={() => s.handleChipRemove(email.value)}\n aria-label={`Remove ${email.label}`}\n >\n <XIcon className=\"size-3 pointer-events-none\" />\n </button>\n )}\n </span>\n ))}\n {s.hiddenCount > 0 && (\n <span className=\"flex h-[calc(--spacing(5.25))] items-center rounded-sm bg-secondary px-1.5 text-xs font-medium text-secondary-foreground\">\n +{s.hiddenCount} more\n </span>\n )}\n <input\n ref={ref}\n id={id}\n type=\"text\"\n value={s.inputValue}\n onChange={e => s.setInputValue(e.target.value)}\n onKeyDown={s.handleKeyDown}\n onPaste={s.handlePaste}\n onFocus={s.handleFocus}\n onBlur={s.handleBlur}\n placeholder={props.value?.length ? \"\" : placeholder}\n disabled={disabled}\n className=\"min-w-16 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n {suffix && <div className=\"shrink-0\">{suffix}</div>}\n </div>\n <FieldContent>\n {!!error && (\n <p className=\"text-[0.8rem] text-destructive\">\n {error}\n {s.isFilterLinkVisible && (\n <button\n type=\"button\"\n className=\"ml-1 cursor-pointer font-semibold underline\"\n onClick={s.handleFilterInvalidEmails}\n >\n {filterInvalidEmails?.label ??\n \"Click here to remove invalid emails.\"}\n </button>\n )}\n </p>\n )}\n {!!helpText && (\n <p className=\"text-[0.8rem] text-muted-foreground\">{helpText}</p>\n )}\n {s.duplicateEmails.length > 0 && (\n <p className=\"text-[0.8rem] text-amber-600 dark:text-amber-400\">\n {formatDuplicateWarning(s.duplicateEmails)}\n </p>\n )}\n </FieldContent>\n </Field>\n );\n});\nMultiEmailInput.displayName = \"MultiEmailInput\";\n"],"names":["_jsxs","_jsx","XIcon"],"mappings":"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"}
1
+ {"version":3,"file":"MultiEmailInput-SCTYovtX.js","sources":["../src/components/MultiEmailInput/constants.ts","../src/components/MultiEmailInput/utils.ts","../src/components/MultiEmailInput/useMultiEmailState.ts","../src/components/MultiEmailInput/MultiEmailInput.tsx"],"sourcesContent":["export const EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9-]+(?:\\.[A-Z0-9-]+)*\\.[A-Z]{2,}$/i;\n\nexport const UNSTRICT_EMAIL_REGEX =\n /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/g;\n\nexport const EMAIL_SEPARATION_REGEX = /[^\\s,]+/g;\n","import { EMAIL_REGEX } from \"./constants\";\nimport type { EmailValue } from \"./types\";\n\nexport const formatEmailInputOption = (email: string): EmailValue => ({\n label: email,\n value: email,\n valid: EMAIL_REGEX.test(email),\n});\n\nexport const pruneDuplicates = (\n existing: EmailValue[],\n newEmailStrings: string[]\n): { uniqueEmails: EmailValue[]; duplicates: string[] } => {\n const seen = new Set(existing.map(e => e.value.toLowerCase()));\n const duplicates: string[] = [];\n const added: EmailValue[] = [];\n\n for (const emailStr of newEmailStrings) {\n const lower = emailStr.toLowerCase();\n if (seen.has(lower)) {\n duplicates.push(emailStr);\n } else {\n seen.add(lower);\n added.push(formatEmailInputOption(emailStr));\n }\n }\n\n return { uniqueEmails: [...existing, ...added], duplicates };\n};\n\nexport const filterValidEmails = (emails: EmailValue[]): EmailValue[] =>\n emails.filter(email => email.valid);\n\nexport const pluralizeEmail = (count: number): string =>\n count === 1 ? \"email\" : \"emails\";\n\nexport const formatDuplicateWarning = (duplicates: string[]): string => {\n const count = duplicates.length;\n\n return `Removed ${count} duplicate ${pluralizeEmail(count)} from the list: ${duplicates.join(\", \")}`;\n};\n","import { useState, useCallback, useMemo } from \"react\";\n\nimport { UNSTRICT_EMAIL_REGEX, EMAIL_SEPARATION_REGEX } from \"./constants\";\nimport { pruneDuplicates, filterValidEmails } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nexport function useMultiEmailState(props: MultiEmailInputProps) {\n const {\n value = [],\n onChange,\n onBlur,\n visibleEmailsCount = 3,\n isAlwaysExpanded = false,\n counter,\n filterInvalidEmails,\n } = props;\n\n const [inputValue, setInputValue] = useState(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const [duplicateEmails, setDuplicateEmails] = useState<string[]>([]);\n\n const addEmails = useCallback(\n (input: string) => {\n const trimmed = input.trim();\n if (!trimmed) return;\n UNSTRICT_EMAIL_REGEX.lastIndex = 0;\n EMAIL_SEPARATION_REGEX.lastIndex = 0;\n const emailMatches =\n trimmed.match(UNSTRICT_EMAIL_REGEX) ||\n trimmed.match(EMAIL_SEPARATION_REGEX) ||\n [];\n if (emailMatches.length === 0) return;\n const { uniqueEmails, duplicates } = pruneDuplicates(value, emailMatches);\n onChange?.(uniqueEmails);\n setDuplicateEmails(duplicates);\n setInputValue(\"\");\n },\n [value, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!inputValue && event.key === \"Backspace\" && value.length > 0) {\n onChange?.(value.slice(0, -1));\n return;\n }\n if (!inputValue) return;\n if ([\"Enter\", \"Tab\", \",\", \" \"].includes(event.key)) {\n addEmails(inputValue);\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [inputValue, value, onChange, addEmails]\n );\n\n const handlePaste = useCallback(\n (event: React.ClipboardEvent<HTMLInputElement>) => {\n const text = event.clipboardData.getData(\"text\");\n if (!text) return;\n event.preventDefault();\n addEmails(text);\n },\n [addEmails]\n );\n\n const handleBlur = useCallback(() => {\n if (inputValue) {\n addEmails(inputValue);\n } else {\n onBlur?.();\n }\n setIsFocused(false);\n setDuplicateEmails([]);\n }, [inputValue, addEmails, onBlur]);\n\n const handleFocus = useCallback(() => setIsFocused(true), []);\n\n const handleChipRemove = useCallback(\n (emailValue: string) =>\n onChange?.(value.filter(e => e.value !== emailValue)),\n [value, onChange]\n );\n\n const handleFilterInvalidEmails = useCallback(\n () => onChange?.(filterValidEmails(value)),\n [value, onChange]\n );\n\n const validCount = useMemo(() => value.filter(e => e.valid).length, [value]);\n const isCounterVisible =\n !!counter &&\n (typeof counter === \"boolean\" ||\n !counter.startsFrom ||\n validCount >= counter.startsFrom);\n const shouldCollapse =\n !isAlwaysExpanded && !isFocused && value.length > visibleEmailsCount;\n const visibleEmails = shouldCollapse\n ? value.slice(0, visibleEmailsCount)\n : value;\n const hiddenCount = shouldCollapse ? value.length - visibleEmailsCount : 0;\n const isFilterLinkVisible =\n !!filterInvalidEmails && value.length > validCount;\n\n return {\n inputValue,\n setInputValue,\n isFocused,\n duplicateEmails,\n handleKeyDown,\n handlePaste,\n handleBlur,\n handleFocus,\n handleChipRemove,\n handleFilterInvalidEmails,\n isCounterVisible,\n validCount,\n visibleEmails,\n hiddenCount,\n isFilterLinkVisible,\n };\n}\n","import { forwardRef, useId } from \"react\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Field, FieldLabel, FieldContent } from \"src/primitives/Field\";\nimport { useMultiEmailState } from \"./useMultiEmailState\";\nimport { pluralizeEmail, formatDuplicateWarning } from \"./utils\";\nimport type { MultiEmailInputProps } from \"./types\";\n\nconst CHIP_BASE =\n \"flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground\";\nconst CHIP_INVALID =\n \"border border-destructive text-destructive bg-destructive/10\";\nconst CHIPS_CONTAINER =\n \"flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\";\nconst CHIPS_ERROR =\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\";\n\nexport const MultiEmailInput = forwardRef<\n HTMLInputElement,\n MultiEmailInputProps\n>((props, ref) => {\n const {\n label,\n placeholder = \"\",\n helpText,\n error,\n disabled = false,\n required = false,\n maxHeight = 200,\n counter,\n filterInvalidEmails,\n prefix,\n suffix,\n labelProps,\n className,\n } = props;\n const id = useId();\n const s = useMultiEmailState(props);\n\n return (\n <Field className={cn(\"flex flex-col gap-1.5\", className)}>\n {(label || s.isCounterVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n {\" *\"}\n </span>\n )}\n </FieldLabel>\n )}\n {s.isCounterVisible && (\n <span className=\"text-xs text-muted-foreground\">\n {s.validCount}{\" \"}\n {typeof counter === \"object\" && counter?.label\n ? counter.label\n : pluralizeEmail(s.validCount)}\n </span>\n )}\n </div>\n )}\n <div\n className={cn(\n CHIPS_CONTAINER,\n !!error && CHIPS_ERROR,\n disabled && \"pointer-events-none opacity-50\"\n )}\n style={{ maxHeight: `${maxHeight}px`, overflowY: \"auto\" }}\n >\n {prefix && <div className=\"shrink-0\">{prefix}</div>}\n {s.visibleEmails.map(email => (\n <span\n key={email.value}\n className={cn(CHIP_BASE, !email.valid && CHIP_INVALID)}\n >\n {email.label}\n {!disabled && (\n <button\n type=\"button\"\n tabIndex={-1}\n className=\"-ms-0.5 rounded-xs opacity-50 hover:opacity-100\"\n onMouseDown={e => e.preventDefault()}\n onClick={() => s.handleChipRemove(email.value)}\n aria-label={`Remove ${email.label}`}\n >\n <XIcon className=\"size-3 pointer-events-none\" />\n </button>\n )}\n </span>\n ))}\n {s.hiddenCount > 0 && (\n <span className=\"flex h-[calc(--spacing(5.25))] items-center rounded-sm bg-secondary px-1.5 text-xs font-medium text-secondary-foreground\">\n +{s.hiddenCount} more\n </span>\n )}\n <input\n ref={ref}\n id={id}\n type=\"text\"\n value={s.inputValue}\n onChange={e => s.setInputValue(e.target.value)}\n onKeyDown={s.handleKeyDown}\n onPaste={s.handlePaste}\n onFocus={s.handleFocus}\n onBlur={s.handleBlur}\n placeholder={props.value?.length ? \"\" : placeholder}\n disabled={disabled}\n className=\"min-w-16 flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n {suffix && <div className=\"shrink-0\">{suffix}</div>}\n </div>\n <FieldContent>\n {!!error && (\n <p className=\"text-[0.8rem] text-destructive\">\n {error}\n {s.isFilterLinkVisible && (\n <button\n type=\"button\"\n className=\"ml-1 cursor-pointer font-semibold underline\"\n onClick={s.handleFilterInvalidEmails}\n >\n {filterInvalidEmails?.label ??\n \"Click here to remove invalid emails.\"}\n </button>\n )}\n </p>\n )}\n {!!helpText && (\n <p className=\"text-[0.8rem] text-muted-foreground\">{helpText}</p>\n )}\n {s.duplicateEmails.length > 0 && (\n <p className=\"text-[0.8rem] text-amber-600 dark:text-amber-400\">\n {formatDuplicateWarning(s.duplicateEmails)}\n </p>\n )}\n </FieldContent>\n </Field>\n );\n});\nMultiEmailInput.displayName = \"MultiEmailInput\";\n"],"names":["_jsxs","_jsx","XIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup-BNeYQAoT.js","sources":["../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n RadioGroup as PrimitiveRadioGroup,\n RadioGroupItem as PrimitiveRadioGroupItem,\n} from \"src/primitives/RadioGroup\";\nimport { Label } from \"src/primitives/Label\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\nexport interface RadioGroupProps extends Omit<\n React.ComponentProps<typeof PrimitiveRadioGroup>,\n \"children\"\n> {\n /** Group label displayed above the radio items. */\n label?: string;\n /** Error message displayed below the group. */\n error?: string;\n /** Helper text displayed below the group label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Layout orientation. Defaults to \"horizontal\". */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** RadioGroup.Item children. */\n children?: React.ReactNode;\n}\n\ninterface RadioGroupItemProps extends React.ComponentProps<\n typeof PrimitiveRadioGroupItem\n> {\n /** Label displayed next to the radio. */\n label?: string;\n /** Helper text displayed below the item label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Radio value (required). */\n value: string;\n /** Additional class name for the item wrapper. */\n className?: string;\n /** Optional id override; auto-generated if omitted. */\n id?: string;\n}\n\nconst RadioGroupItem = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroupItem>,\n RadioGroupItemProps\n>(({ label, helpText, value, className, id: idProp, ...props }, ref) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const helpTextId = `helpText_${id}`;\n\n return (\n <div\n className={cn(\n \"flex gap-2\",\n helpText ? \"items-start\" : \"items-center\",\n className\n )}\n >\n <PrimitiveRadioGroupItem\n ref={ref}\n id={id}\n value={value}\n aria-describedby={helpText ? helpTextId : undefined}\n className={helpText ? \"mt-0.5\" : undefined}\n {...props}\n />\n {(label || helpText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <Label htmlFor={id} className=\"cursor-pointer font-normal\">\n {label}\n </Label>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </div>\n )}\n </div>\n );\n});\n\nRadioGroupItem.displayName = \"RadioGroup.Item\";\n\nconst RadioGroupRoot = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroup>,\n RadioGroupProps\n>(\n (\n {\n label,\n error,\n helpText,\n orientation = \"horizontal\",\n className,\n disabled,\n required,\n children,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n\n const hasField = !!(label || error || helpText);\n\n const radioGroup = (\n <PrimitiveRadioGroup\n ref={ref}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n orientation={orientation}\n className={cn(\n \"data-[orientation=vertical]:grid data-[orientation=vertical]:gap-2 data-[orientation=horizontal]:flex data-[orientation=horizontal]:flex-row data-[orientation=horizontal]:flex-wrap data-[orientation=horizontal]:items-center data-[orientation=horizontal]:gap-4\",\n !hasField && className\n )}\n {...props}\n >\n {children}\n </PrimitiveRadioGroup>\n );\n\n if (!hasField) {\n return radioGroup;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || helpText) && (\n <div>\n {label && (\n <FieldLabel>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </div>\n )}\n <FieldContent>\n {radioGroup}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n </FieldContent>\n </Field>\n );\n }\n);\n\nRadioGroupRoot.displayName = \"RadioGroup\";\n\nconst RadioGroup = Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});\n\nexport { RadioGroup };\n"],"names":["_jsxs","_jsx","PrimitiveRadioGroupItem","PrimitiveRadioGroup"],"mappings":"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"}
1
+ {"version":3,"file":"RadioGroup-BNeYQAoT.js","sources":["../src/components/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n RadioGroup as PrimitiveRadioGroup,\n RadioGroupItem as PrimitiveRadioGroupItem,\n} from \"src/primitives/RadioGroup\";\nimport { Label } from \"src/primitives/Label\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\nexport interface RadioGroupProps extends Omit<\n React.ComponentProps<typeof PrimitiveRadioGroup>,\n \"children\"\n> {\n /** Group label displayed above the radio items. */\n label?: string;\n /** Error message displayed below the group. */\n error?: string;\n /** Helper text displayed below the group label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Layout orientation. Defaults to \"horizontal\". */\n orientation?: \"horizontal\" | \"vertical\";\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** RadioGroup.Item children. */\n children?: React.ReactNode;\n}\n\nexport interface RadioGroupItemProps extends React.ComponentProps<\n typeof PrimitiveRadioGroupItem\n> {\n /** Label displayed next to the radio. */\n label?: string;\n /** Helper text displayed below the item label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Radio value (required). */\n value: string;\n /** Additional class name for the item wrapper. */\n className?: string;\n /** Optional id override; auto-generated if omitted. */\n id?: string;\n}\n\nconst RadioGroupItem = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroupItem>,\n RadioGroupItemProps\n>(({ label, helpText, value, className, id: idProp, ...props }, ref) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const helpTextId = `helpText_${id}`;\n\n return (\n <div\n className={cn(\n \"flex gap-2\",\n helpText ? \"items-start\" : \"items-center\",\n className\n )}\n >\n <PrimitiveRadioGroupItem\n ref={ref}\n id={id}\n value={value}\n aria-describedby={helpText ? helpTextId : undefined}\n className={helpText ? \"mt-0.5\" : undefined}\n {...props}\n />\n {(label || helpText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <Label htmlFor={id} className=\"cursor-pointer font-normal\">\n {label}\n </Label>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </div>\n )}\n </div>\n );\n});\n\nRadioGroupItem.displayName = \"RadioGroup.Item\";\n\nconst RadioGroupRoot = forwardRef<\n React.ComponentRef<typeof PrimitiveRadioGroup>,\n RadioGroupProps\n>(\n (\n {\n label,\n error,\n helpText,\n orientation = \"horizontal\",\n className,\n disabled,\n required,\n children,\n ...props\n },\n ref\n ) => {\n const generatedId = useId();\n const errorId = `error_${generatedId}`;\n const helpTextId = `helpText_${generatedId}`;\n\n const hasField = !!(label || error || helpText);\n\n const radioGroup = (\n <PrimitiveRadioGroup\n ref={ref}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n orientation={orientation}\n className={cn(\n \"data-[orientation=vertical]:grid data-[orientation=vertical]:gap-2 data-[orientation=horizontal]:flex data-[orientation=horizontal]:flex-row data-[orientation=horizontal]:flex-wrap data-[orientation=horizontal]:items-center data-[orientation=horizontal]:gap-4\",\n !hasField && className\n )}\n {...props}\n >\n {children}\n </PrimitiveRadioGroup>\n );\n\n if (!hasField) {\n return radioGroup;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || helpText) && (\n <div>\n {label && (\n <FieldLabel>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </div>\n )}\n <FieldContent>\n {radioGroup}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n </FieldContent>\n </Field>\n );\n }\n);\n\nRadioGroupRoot.displayName = \"RadioGroup\";\n\nconst RadioGroup = Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});\n\nexport { RadioGroup };\n"],"names":["_jsxs","_jsx","PrimitiveRadioGroupItem","PrimitiveRadioGroup"],"mappings":"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"}
@@ -465,7 +465,9 @@ const SelectCombobox = forwardRef((p, ref) => {
465
465
  e.preventDefault();
466
466
  p.handleClear();
467
467
  }, [p.handleClear]);
468
- return (jsxs(Combobox, { name: p.name, ...(p.effectiveItems && !p.children
468
+ return (
469
+ // @ts-expect-error — conditional spread creates a union that TS cannot narrow to the Combobox discriminated-union props
470
+ jsxs(Combobox, { name: p.name, ...(p.effectiveItems && !p.children
469
471
  ? {
470
472
  items: p.effectiveItems,
471
473
  itemToStringLabel: p.labelForValue,
@@ -491,7 +493,9 @@ SelectCombobox.displayName = "SelectCombobox";
491
493
 
492
494
  const MultiSelectCombobox = forwardRef((p, ref) => {
493
495
  const { anchorEl, setAnchorEl, handleClick } = useComboboxAnchor(p.isSearchable);
494
- return (jsxs(Combobox, { multiple: true, name: p.name, ...(p.effectiveItems && !p.children
496
+ return (
497
+ // @ts-expect-error — conditional spread creates a union that TS cannot narrow to the Combobox discriminated-union props
498
+ jsxs(Combobox, { multiple: true, name: p.name, ...(p.effectiveItems && !p.children
495
499
  ? {
496
500
  items: p.effectiveItems,
497
501
  itemToStringLabel: p.labelForValue,
@@ -558,4 +562,4 @@ const Select = forwardRef((props, ref) => {
558
562
  Select.displayName = "Select";
559
563
 
560
564
  export { Select as S };
561
- //# sourceMappingURL=Select-BGODpJGc.js.map
565
+ //# sourceMappingURL=Select-TlFBcxcY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select-TlFBcxcY.js","sources":["../src/utils/hyphenize.ts","../src/utils/fieldIds.ts","../src/hooks/useAsyncOptions.ts","../src/hooks/useLazyLoadSentinel.ts","../src/hooks/useCreatableItems.ts","../src/components/Select/types.ts","../src/components/Select/utils.ts","../src/hooks/useMultiSelectOptions.ts","../src/components/Select/constants.ts","../src/hooks/useSelectState.ts","../src/hooks/useMultiSelectState.ts","../src/hooks/useComboboxAnchor.ts","../src/components/Select/OptionItem.tsx","../src/components/Select/MultiSelectDropdown.tsx","../src/components/Select/SelectCombobox.tsx","../src/components/Select/MultiSelectCombobox.tsx","../src/components/Select/Select.tsx"],"sourcesContent":["export function hyphenize(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, \"$1-$2\")\n .replace(/[\\s_]+/g, \"-\")\n .toLowerCase();\n}\n","import { hyphenize } from \"./hyphenize\";\n\nexport function buildAriaDescribedBy(\n error: string,\n errorId: string,\n helpText: React.ReactNode,\n helpTextId: string\n): string | undefined {\n return (\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined\n );\n}\n\nexport function buildTestIdPrefix(\n dataTestId: string | undefined,\n label: string\n): string | undefined {\n return dataTestId ?? (label ? hyphenize(label) : undefined);\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport type { SelectOptionBase } from \"src/components/Select/types\";\n\ninterface UseAsyncOptionsConfig {\n loadOptions?: (inputValue: string) => Promise<SelectOptionBase[]>;\n defaultOptions?: boolean | SelectOptionBase[];\n cacheOptions?: boolean;\n}\n\ninterface UseAsyncOptionsReturn {\n asyncOptions: SelectOptionBase[];\n isLoading: boolean;\n handleAsyncInputChange: (value: string) => void;\n}\n\nexport function useAsyncOptions({\n loadOptions,\n defaultOptions = false,\n cacheOptions = false,\n}: UseAsyncOptionsConfig): UseAsyncOptionsReturn {\n const [asyncOptions, setAsyncOptions] = useState<SelectOptionBase[]>(() =>\n Array.isArray(defaultOptions) ? defaultOptions : []\n );\n const [isLoading, setIsLoading] = useState(false);\n const cacheRef = useRef<Record<string, SelectOptionBase[]>>({});\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const latestRequestRef = useRef(0);\n const mountedRef = useRef(true);\n\n // Load default options on mount when `defaultOptions === true`\n useEffect(() => {\n if (!loadOptions || defaultOptions !== true) return;\n let cancelled = false;\n setIsLoading(true);\n loadOptions(\"\")\n .then(results => {\n if (cancelled) return;\n setAsyncOptions(results);\n if (cacheOptions) cacheRef.current[\"\"] = results;\n setIsLoading(false);\n })\n .catch(() => {\n if (!cancelled) setIsLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n // Clean up debounce timer and mark unmounted\n useEffect(() => {\n return () => {\n mountedRef.current = false;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n const handleAsyncInputChange = useCallback(\n (value: string) => {\n if (!loadOptions) return;\n\n const query = value.trim();\n\n // Check cache first\n if (cacheOptions && query in cacheRef.current) {\n setAsyncOptions(cacheRef.current[query]);\n return;\n }\n\n // Debounce the fetch\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n const requestId = ++latestRequestRef.current;\n setIsLoading(true);\n loadOptions(query)\n .then(results => {\n if (requestId !== latestRequestRef.current || !mountedRef.current)\n return;\n setAsyncOptions(results);\n if (cacheOptions) cacheRef.current[query] = results;\n setIsLoading(false);\n })\n .catch(() => {\n if (requestId === latestRequestRef.current && mountedRef.current) {\n setIsLoading(false);\n }\n });\n }, 300);\n },\n [loadOptions, cacheOptions]\n );\n\n return { asyncOptions, isLoading, handleAsyncInputChange };\n}\n","import { useCallback, useEffect, useRef } from \"react\";\n\ninterface UseLazyLoadSentinelConfig {\n fetchMore?: () => void;\n isEnabled: boolean;\n}\n\nexport function useLazyLoadSentinel({\n fetchMore,\n isEnabled,\n}: UseLazyLoadSentinelConfig) {\n const observerRef = useRef<IntersectionObserver | null>(null);\n const fetchMoreRef = useRef(fetchMore);\n fetchMoreRef.current = fetchMore;\n\n const sentinelRef = useCallback(\n (node: HTMLDivElement | null) => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n\n if (!node || !isEnabled) return;\n\n const observer = new IntersectionObserver(\n entries => {\n if (entries[0]?.isIntersecting) fetchMoreRef.current?.();\n },\n { root: null, rootMargin: \"0px\", threshold: 0.1 }\n );\n observer.observe(node);\n observerRef.current = observer;\n },\n [isEnabled]\n );\n\n // Clean up observer on unmount\n useEffect(() => {\n return () => {\n observerRef.current?.disconnect();\n };\n }, []);\n\n return sentinelRef;\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\n\nimport { computeEffectiveItems } from \"src/components/Select/utils\";\nimport type { SelectOptionBase as MultiSelectOptionBase } from \"src/components/Select/types\";\n\nexport const CREATE_PREFIX = \"__create__:\";\n\ninterface UseCreatableItemsConfig {\n isCreatable: boolean;\n isGrouped: boolean;\n flatOptions: MultiSelectOptionBase[];\n selectedValues: string[];\n baseUiItems?: string[] | { label: string; items: string[] }[];\n onCreateOption?: (inputValue: string) => void;\n onChange?: (values: string[]) => void;\n onAsyncInputChange?: (value: string) => void;\n children?: React.ReactNode;\n}\n\ninterface UseCreatableItemsReturn {\n inputValue: string;\n showCreateOption: boolean;\n effectiveItems: string[] | { label: string; items: string[] }[] | undefined;\n creatableFilter: (\n itemValue: string,\n query: string,\n itemToString?: (v: string) => string\n ) => boolean;\n handleInputValueChange: (value: string) => void;\n handleValueChange: (next: string[] | null) => void;\n}\n\nexport function useCreatableItems({\n isCreatable,\n isGrouped,\n flatOptions,\n selectedValues,\n baseUiItems,\n onCreateOption,\n onChange,\n onAsyncInputChange,\n children,\n}: UseCreatableItemsConfig): UseCreatableItemsReturn {\n const [inputValue, setInputValue] = useState(\"\");\n\n const handleInputValueChange = useCallback(\n (value: string) => {\n setInputValue(value);\n onAsyncInputChange?.(value);\n },\n [onAsyncInputChange]\n );\n\n const trimmedInput = inputValue.trim();\n const showCreateOption = useMemo(() => {\n if (!isCreatable || trimmedInput.length === 0) return false;\n const lower = trimmedInput.toLowerCase();\n return (\n !flatOptions.some(\n o => o.label.toLowerCase() === lower || o.value.toLowerCase() === lower\n ) && !selectedValues.includes(trimmedInput)\n );\n }, [isCreatable, trimmedInput, flatOptions, selectedValues]);\n\n const effectiveItems = React.useMemo(\n () =>\n computeEffectiveItems(\n children,\n baseUiItems,\n showCreateOption,\n isGrouped,\n trimmedInput\n ),\n [baseUiItems, children, isGrouped, showCreateOption, trimmedInput]\n );\n\n // Custom filter: always pass the \"Create\" item through\n const creatableFilter = useCallback(\n (\n itemValue: string,\n query: string,\n itemToString?: (v: string) => string\n ) => {\n if (itemValue.startsWith(CREATE_PREFIX)) return true;\n const label = itemToString?.(itemValue) ?? itemValue;\n return label.toLowerCase().includes(query.toLowerCase());\n },\n []\n );\n\n const handleValueChange = useCallback(\n (next: string[] | null) => {\n const raw = next ?? [];\n\n const createEntry = raw.find(v => v.startsWith(CREATE_PREFIX));\n if (createEntry) {\n const newValue = createEntry.slice(CREATE_PREFIX.length);\n const withNewValue = raw.map(v => (v === createEntry ? newValue : v));\n onCreateOption?.(newValue);\n onChange?.(withNewValue);\n return;\n }\n\n onChange?.(raw);\n },\n [onChange, onCreateOption]\n );\n\n return {\n inputValue,\n showCreateOption,\n effectiveItems,\n creatableFilter,\n handleInputValueChange,\n handleValueChange,\n };\n}\n","import type React from \"react\";\n\nimport type { ComboboxContent } from \"src/primitives/Combobox\";\nimport type { FieldLabel } from \"src/primitives/Field\";\n\nexport interface OptionBase {\n /** Display text for the option. */\n label: string;\n /** Unique value for the option. */\n value: string;\n /** Whether the option is disabled. */\n disabled?: boolean;\n}\n\nexport interface OptionGroup {\n /** Group heading text. */\n label: string;\n /** Options within this group. */\n options: OptionBase[];\n}\n\nexport type Option = OptionBase | OptionGroup;\n\nexport function isOptionGroup(opt: Option): opt is OptionGroup {\n return \"options\" in opt && Array.isArray(opt.options);\n}\n\nexport type SelectOptionBase = OptionBase;\nexport type SelectOptionGroup = OptionGroup;\nexport type SelectOption = Option;\n\ntype SelectSize = \"small\" | \"medium\" | \"large\";\n\ninterface SelectSharedProps {\n /** Unique identifier for the select. Auto-generated if omitted. */\n id?: string;\n /** Name attribute forwarded to the underlying input. */\n name?: string;\n /** Size of the trigger. */\n size?: SelectSize;\n /** Label displayed above the select. */\n label?: string;\n /** Error message displayed below the select. */\n error?: string;\n /** Help text displayed below the select. */\n helpText?: React.ReactNode;\n /** Placeholder text when no value is selected. */\n placeholder?: string;\n /** Flat or grouped option list. */\n options?: SelectOption[];\n /** Disable the select. */\n isDisabled?: boolean;\n /** Mark as required. */\n required?: boolean;\n /**\n * Enable search/filtering of options by typing in the input.\n * When false, the input is hidden and the trigger shows the selected label.\n * @default true\n */\n isSearchable?: boolean;\n /** Whether the first matching item is highlighted automatically. @default true */\n autoHighlight?: boolean;\n /** Callback fired when the dropdown opens or closes. */\n onOpenChange?: (open: boolean) => void;\n /**\n * Positioning strategy for the dropdown content.\n * @deprecated The Combobox primitive always uses popper-style positioning.\n * Use `contentProps.side` and `contentProps.align` for positioning control.\n */\n position?: \"item-aligned\" | \"popper\";\n /** Show a clear/reset button when a value is selected. */\n isClearable?: boolean;\n /**\n * Allow creating new options by typing a value that doesn't exist.\n * Works in both single and multi mode.\n */\n isCreatable?: boolean;\n /**\n * Callback fired when a new option is created via the \"Create X\" item.\n * The parent should update the `options` list to include the new value.\n */\n onCreateOption?: (inputValue: string) => void;\n /**\n * Customize the label for the \"Create\" option in the dropdown.\n * @default (inputValue) => `Create \"${inputValue}\"`\n */\n formatCreateLabel?: (inputValue: string) => string;\n /**\n * Async function that fetches options based on the current input value.\n * Works in both single and multi mode.\n */\n loadOptions?: (inputValue: string) => Promise<SelectOptionBase[]>;\n /**\n * Options to show before the user types anything.\n * When `true`, `loadOptions(\"\")` is called on mount.\n * @default false\n */\n defaultOptions?: boolean | SelectOptionBase[];\n /**\n * Cache results from `loadOptions` so repeated queries are instant.\n * @default false\n */\n cacheOptions?: boolean;\n /** Text shown while `loadOptions` is fetching. @default \"Loading…\" */\n loadingMessage?: string;\n /** Text displayed when no options match. @default \"No results found.\" */\n emptyMessage?: string;\n /**\n * Enable lazy loading of options as the user scrolls.\n * @default false\n */\n isAsyncLoadOptionEnabled?: boolean;\n /** Callback to load the next batch of options (lazy loading). */\n fetchMore?: () => void;\n /** Total number of options on the server (lazy loading). */\n totalOptionsCount?: number;\n /** Custom data-testid prefix for the component tree. */\n dataTestId?: string;\n /** Props forwarded to the FieldLabel. */\n labelProps?: Omit<\n React.ComponentProps<typeof FieldLabel>,\n \"htmlFor\" | \"children\"\n >;\n /** Props forwarded to the ComboboxContent. */\n contentProps?: Omit<\n React.ComponentProps<typeof ComboboxContent>,\n \"anchor\" | \"children\"\n >;\n /** Additional CSS class names for the outermost wrapper. */\n className?: string;\n /** Additional CSS class names for the input/trigger element. */\n inputClassName?: string;\n /** Children rendered inside the dropdown (overrides `options`). */\n children?: React.ReactNode;\n}\n\ninterface SingleSelectProps extends SelectSharedProps {\n /** When true, multiple values can be selected and the trigger shows chips. @default false */\n isMulti?: false;\n /** Controlled selected value. */\n value?: string;\n /** Default selected value (uncontrolled). */\n defaultValue?: string;\n /** Callback fired when value changes. */\n onChange?: (value: string) => void;\n}\n\ninterface MultiSelectVariantProps extends SelectSharedProps {\n /** When true, multiple values can be selected and the trigger shows chips. */\n isMulti: true;\n /** Controlled selected values. */\n value?: string[];\n /** Default selected values (uncontrolled). */\n defaultValue?: string[];\n /** Callback fired when selected values change. */\n onChange?: (values: string[]) => void;\n /** Additional CSS class names for the chips container. */\n chipsClassName?: string;\n /** Hide the remove button on individual chips. */\n hideChipRemove?: boolean;\n}\n\nexport type SelectProps = SingleSelectProps | MultiSelectVariantProps;\n\nexport type MultiSelectProps = Extract<SelectProps, { isMulti: true }>;\n","import { CREATE_PREFIX } from \"src/hooks/useCreatableItems\";\nimport { isOptionGroup } from \"./types\";\nimport type {\n SelectOption as MultiSelectOption,\n SelectOptionBase as MultiSelectOptionBase,\n} from \"./types\";\n\n/** Flatten grouped options into a flat lookup array. */\nexport function flattenOptions(\n options: MultiSelectOption[]\n): MultiSelectOptionBase[] {\n return options.flatMap(opt => (isOptionGroup(opt) ? opt.options : [opt]));\n}\n\n/** Check if any option is a group. */\nexport function hasGroups(options: MultiSelectOption[]): boolean {\n return options.some(isOptionGroup);\n}\n\n/** Convert options to base-ui `items` format for filtering support. */\nexport function toBaseUiItems(\n options: MultiSelectOption[]\n): string[] | { label: string; items: string[] }[] {\n if (hasGroups(options)) {\n return options.filter(isOptionGroup).map(g => ({\n label: g.label,\n items: g.options.map(o => o.value),\n }));\n }\n return (options as MultiSelectOptionBase[]).map(o => o.value);\n}\n\n/** Build the effective items array, appending a \"Create\" entry when needed. */\nexport function computeEffectiveItems(\n children: unknown,\n baseUiItems: string[] | { label: string; items: string[] }[] | undefined,\n showCreateOption: boolean,\n isGrouped: boolean,\n trimmedInput: string\n): string[] | { label: string; items: string[] }[] | undefined {\n if (children) return undefined;\n\n const createValue = showCreateOption\n ? `${CREATE_PREFIX}${trimmedInput}`\n : null;\n\n if (!baseUiItems && !createValue) return undefined;\n\n const base = baseUiItems ?? ([] as string[]);\n\n if (!createValue) return base;\n\n if (!isGrouped) {\n return [...(base as string[]), createValue];\n }\n\n return [\n ...(base as { label: string; items: string[] }[]),\n { label: \"\", items: [createValue] },\n ];\n}\n","import React from \"react\";\n\nimport { useAsyncOptions } from \"./useAsyncOptions\";\nimport { useLazyLoadSentinel } from \"./useLazyLoadSentinel\";\nimport {\n flattenOptions,\n hasGroups,\n toBaseUiItems,\n} from \"src/components/Select/utils\";\nimport type { SelectOption as MultiSelectOption } from \"src/components/Select/types\";\n\ninterface UseMultiSelectOptionsConfig {\n options?: MultiSelectOption[];\n loadOptions?: (\n inputValue: string\n ) => Promise<{ label: string; value: string; disabled?: boolean }[]>;\n defaultOptions?:\n | boolean\n | { label: string; value: string; disabled?: boolean }[];\n cacheOptions?: boolean;\n isAsyncLoadOptionEnabled?: boolean;\n fetchMore?: () => void;\n totalOptionsCount?: number;\n}\n\nexport function useMultiSelectOptions(props: UseMultiSelectOptionsConfig) {\n const isAsync = !!props.loadOptions;\n\n const { asyncOptions, isLoading, handleAsyncInputChange } = useAsyncOptions({\n loadOptions: props.loadOptions,\n defaultOptions: props.defaultOptions ?? false,\n cacheOptions: props.cacheOptions ?? false,\n });\n\n const resolvedOptions: MultiSelectOption[] = isAsync\n ? asyncOptions\n : (props.options ?? []);\n const flatOptions = flattenOptions(resolvedOptions);\n const isGrouped = hasGroups(resolvedOptions);\n\n const baseUiItems = React.useMemo(\n () =>\n resolvedOptions.length > 0 ? toBaseUiItems(resolvedOptions) : undefined,\n [resolvedOptions]\n );\n\n const hasMoreLazy =\n (props.isAsyncLoadOptionEnabled ?? false) &&\n typeof props.totalOptionsCount === \"number\" &&\n flatOptions.length < props.totalOptionsCount;\n\n const loaderCallbackRef = useLazyLoadSentinel({\n fetchMore: props.fetchMore,\n isEnabled: props.isAsyncLoadOptionEnabled ?? false,\n });\n\n return {\n isAsync,\n resolvedOptions,\n flatOptions,\n isGrouped,\n isLoading,\n handleAsyncInputChange,\n baseUiItems,\n hasMoreLazy,\n loaderCallbackRef,\n };\n}\n","// SIZE_CONFIG is shared by both SelectCombobox (single-select) and\n// MultiSelectCombobox (multi-select). Keys mirror the MultiSelect constants\n// that previously lived in MultiSelect.constants.ts.\nexport const SIZE_CONFIG: Record<\n \"small\" | \"medium\" | \"large\",\n { chips: string; input: string; chip: string }\n> = {\n small: {\n chips: \"min-h-7 text-xs gap-0.5 px-1 py-0.5\",\n input: \"text-xs\",\n chip: \"h-4.5 text-[0.6875rem] px-1\",\n },\n medium: {\n chips: \"min-h-8 text-sm gap-1 px-2.5 py-1\",\n input: \"text-sm\",\n chip: \"h-5.25 text-xs px-1.5\",\n },\n large: {\n chips: \"min-h-10 text-sm gap-1 px-2.5 py-1.5\",\n input: \"text-sm\",\n chip: \"h-6 text-xs px-2\",\n },\n};\n","import { useCallback, useId, useMemo, useState } from \"react\";\n\nimport { buildAriaDescribedBy, buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { useMultiSelectOptions } from \"./useMultiSelectOptions\";\nimport { CREATE_PREFIX } from \"./useCreatableItems\";\nimport { SIZE_CONFIG } from \"src/components/Select/constants\";\nimport type { SelectProps } from \"src/components/Select/types\";\n\ntype SingleSelectProps = Extract<SelectProps, { isMulti?: false }>;\n\nconst defaultFormatCreateLabel = (v: string) => `Create \"${v}\"`;\n\nexport function useSelectState(props: SingleSelectProps) {\n const {\n id: idProp,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n value: valueProp,\n defaultValue,\n onChange,\n dataTestId,\n isCreatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n isClearable = false,\n isDisabled = false,\n required = false,\n isSearchable = true,\n autoHighlight = true,\n onOpenChange,\n children,\n } = props;\n\n const opt = useMultiSelectOptions(props);\n\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n const sizeConfig = SIZE_CONFIG[size];\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<string>(\n defaultValue ?? \"\"\n );\n const currentValue = isControlled ? (valueProp ?? \"\") : internalValue;\n\n const applyValue = useCallback(\n (next: string) => {\n if (!isControlled) setInternalValue(next);\n onChange?.(next);\n },\n [isControlled, onChange]\n );\n\n const handleValueChange = useCallback(\n (next: string | null) => {\n const raw = next ?? \"\";\n\n // Handle the creatable \"Create X\" option\n if (raw.startsWith(CREATE_PREFIX)) {\n const newValue = raw.slice(CREATE_PREFIX.length);\n onCreateOption?.(newValue);\n applyValue(newValue);\n return;\n }\n\n applyValue(raw);\n },\n [applyValue, onCreateOption]\n );\n\n const [inputValue, setInputValueState] = useState(\"\");\n const trimmedInput = inputValue.trim();\n\n const combinedHandleInputValueChange = useCallback(\n (value: string) => {\n setInputValueState(value);\n if (opt.isAsync) opt.handleAsyncInputChange(value);\n },\n [opt.isAsync, opt.handleAsyncInputChange]\n );\n\n const handleClear = useCallback(() => {\n applyValue(\"\");\n }, [applyValue]);\n\n const showCreateOption = useMemo(() => {\n if (\n !isCreatable ||\n trimmedInput.length === 0 ||\n currentValue === trimmedInput\n )\n return false;\n const lower = trimmedInput.toLowerCase();\n return !opt.flatOptions.some(\n o => o.label.toLowerCase() === lower || o.value.toLowerCase() === lower\n );\n }, [isCreatable, trimmedInput, currentValue, opt.flatOptions]);\n\n const effectiveItems = useMemo(() => {\n if (children) return undefined;\n const base = opt.baseUiItems;\n if (!showCreateOption) return base;\n const createValue = `${CREATE_PREFIX}${trimmedInput}`;\n if (!opt.isGrouped) {\n return [...((base as string[]) ?? []), createValue];\n }\n return [\n ...((base as { label: string; items: string[] }[]) ?? []),\n { label: \"\", items: [createValue] },\n ];\n }, [\n children,\n opt.baseUiItems,\n opt.isGrouped,\n showCreateOption,\n trimmedInput,\n ]);\n\n const creatableFilter = useCallback(\n (\n itemValue: string,\n query: string,\n itemToString?: (v: string) => string\n ) => {\n if (itemValue.startsWith(CREATE_PREFIX)) return true;\n const label = itemToString?.(itemValue) ?? itemValue;\n return label.toLowerCase().includes(query.toLowerCase());\n },\n []\n );\n\n const ariaDescribedBy = buildAriaDescribedBy(\n error,\n errorId,\n helpText,\n helpTextId\n );\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n const showClearButton = isClearable && !!currentValue && !isDisabled;\n\n const flatOptionsMap = useMemo(\n () => new Map(opt.flatOptions.map(o => [o.value, o])),\n [opt.flatOptions]\n );\n\n const labelForValue = useCallback(\n (val: string) => {\n if (val.startsWith(CREATE_PREFIX)) {\n return formatCreateLabel(val.slice(CREATE_PREFIX.length));\n }\n return flatOptionsMap.get(val)?.label ?? val;\n },\n [flatOptionsMap, formatCreateLabel]\n );\n\n return {\n ...opt,\n id,\n errorId,\n helpTextId,\n sizeConfig,\n isControlled,\n currentValue,\n effectiveItems,\n creatableFilter,\n handleValueChange,\n handleInputValueChange: combinedHandleInputValueChange,\n handleClear,\n showCreateOption,\n showClearButton,\n ariaDescribedBy,\n testIdPrefix,\n labelForValue,\n flatOptionsMap,\n label,\n error,\n helpText,\n isDisabled,\n required,\n isSearchable,\n autoHighlight,\n onOpenChange,\n isClearable,\n };\n}\n","import { useCallback, useId, useMemo, useState } from \"react\";\n\nconst defaultFormatCreateLabel = (v: string) => `Create \"${v}\"`;\n\nimport { buildAriaDescribedBy, buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport { useCreatableItems, CREATE_PREFIX } from \"./useCreatableItems\";\nimport { useMultiSelectOptions } from \"./useMultiSelectOptions\";\nimport { SIZE_CONFIG } from \"src/components/Select/constants\";\nimport type { MultiSelectProps } from \"src/components/Select/types\";\n\nexport function useMultiSelectState(props: MultiSelectProps) {\n const {\n id: idProp,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n value: valueProp,\n defaultValue,\n onChange,\n dataTestId,\n isCreatable = false,\n onCreateOption,\n formatCreateLabel = defaultFormatCreateLabel,\n children,\n } = props;\n\n const opt = useMultiSelectOptions(props);\n\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n const sizeConfig = SIZE_CONFIG[size];\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState<string[]>(\n defaultValue ?? []\n );\n const selectedValues = isControlled ? valueProp : internalValue;\n\n const handleChange = useCallback(\n (values: string[]) => {\n setInternalValue(values);\n onChange?.(values);\n },\n [onChange]\n );\n\n const {\n showCreateOption,\n effectiveItems,\n creatableFilter,\n handleInputValueChange,\n handleValueChange,\n } = useCreatableItems({\n isCreatable,\n isGrouped: opt.isGrouped,\n flatOptions: opt.flatOptions,\n selectedValues,\n baseUiItems: opt.baseUiItems,\n onCreateOption,\n onChange: handleChange,\n onAsyncInputChange: opt.isAsync ? opt.handleAsyncInputChange : undefined,\n children,\n });\n\n const ariaDescribedBy = buildAriaDescribedBy(\n error,\n errorId,\n helpText,\n helpTextId\n );\n const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n\n const flatOptionsMap = useMemo(\n () => new Map(opt.flatOptions.map(o => [o.value, o])),\n [opt.flatOptions]\n );\n\n const labelForValue = useCallback(\n (val: string) => {\n if (val.startsWith(CREATE_PREFIX)) {\n return formatCreateLabel(val.slice(CREATE_PREFIX.length));\n }\n return flatOptionsMap.get(val)?.label ?? val;\n },\n [flatOptionsMap, formatCreateLabel]\n );\n\n return {\n ...opt,\n id,\n errorId,\n helpTextId,\n sizeConfig,\n isControlled,\n selectedValues,\n effectiveItems,\n creatableFilter,\n handleInputValueChange,\n handleValueChange,\n showCreateOption,\n ariaDescribedBy,\n testIdPrefix,\n labelForValue,\n flatOptionsMap,\n label,\n error,\n helpText,\n };\n}\n","import { useCallback, useState } from \"react\";\n\n/** Shared anchor + non-searchable click-to-focus behaviour for combobox triggers. */\nexport function useComboboxAnchor(isSearchable: boolean) {\n const [anchorEl, setAnchorEl] = useState<HTMLDivElement | null>(null);\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (!isSearchable) {\n (e.currentTarget as HTMLElement).querySelector(\"input\")?.focus();\n }\n },\n [isSearchable]\n );\n\n return { anchorEl, setAnchorEl, handleClick };\n}\n","import { ComboboxItem } from \"src/primitives/Combobox\";\nimport { CREATE_PREFIX } from \"src/hooks/useCreatableItems\";\nimport type { OptionBase } from \"./types\";\n\ninterface OptionItemProps {\n val: string;\n flatOptionsMap: Map<string, OptionBase>;\n labelForValue: (val: string) => string;\n testIdPrefix?: string;\n}\n\nexport function OptionItem({\n val,\n flatOptionsMap,\n labelForValue,\n testIdPrefix,\n}: OptionItemProps) {\n return (\n <ComboboxItem\n key={val}\n value={val}\n disabled={\n !val.startsWith(CREATE_PREFIX) && flatOptionsMap.get(val)?.disabled\n }\n className={val.startsWith(CREATE_PREFIX) ? \"text-primary\" : undefined}\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-option` }\n : {})}\n >\n {labelForValue(val)}\n </ComboboxItem>\n );\n}\n","import type React from \"react\";\n\nimport {\n ComboboxList,\n ComboboxGroup,\n ComboboxLabel,\n ComboboxCollection,\n ComboboxEmpty,\n} from \"src/primitives/Combobox\";\nimport { Spinner } from \"src/primitives/Spinner\";\nimport { OptionItem } from \"./OptionItem\";\nimport type { DropdownPassthroughProps } from \"./MultiSelectCombobox.types\";\n\ninterface MultiSelectDropdownProps extends DropdownPassthroughProps {\n labelForValue: (val: string) => string;\n testIdPrefix?: string;\n children?: React.ReactNode;\n}\n\nexport function MultiSelectDropdown({\n resolvedOptions,\n flatOptionsMap,\n isGrouped,\n isLoading,\n loadingMessage,\n emptyMessage,\n showCreateOption,\n labelForValue,\n testIdPrefix,\n hasMoreLazy,\n loaderCallbackRef,\n children,\n}: MultiSelectDropdownProps) {\n return (\n <ComboboxList\n {...(testIdPrefix\n ? { \"data-testid\": `${testIdPrefix}-select-menu` }\n : {})}\n >\n {isLoading && (\n <div className=\"flex w-full justify-center py-2 text-center text-sm text-muted-foreground\">\n {loadingMessage}\n </div>\n )}\n {!isLoading && !showCreateOption && (\n <ComboboxEmpty>{emptyMessage}</ComboboxEmpty>\n )}\n {children ??\n (resolvedOptions.length > 0 || showCreateOption ? (\n isGrouped ? (\n <ComboboxCollection>\n {(group: { label: string; items: string[] }) => (\n <ComboboxGroup\n key={group.label || \"__create__\"}\n items={group.items}\n >\n {group.label && <ComboboxLabel>{group.label}</ComboboxLabel>}\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n labelForValue={labelForValue}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n </ComboboxGroup>\n )}\n </ComboboxCollection>\n ) : (\n <ComboboxCollection>\n {(val: string) => (\n <OptionItem\n key={val}\n val={val}\n flatOptionsMap={flatOptionsMap}\n labelForValue={labelForValue}\n testIdPrefix={testIdPrefix}\n />\n )}\n </ComboboxCollection>\n )\n ) : null)}\n {hasMoreLazy && (\n <div\n ref={loaderCallbackRef}\n className=\"flex w-full items-center justify-center py-3\"\n data-testid={\n testIdPrefix ? `${testIdPrefix}-lazy-loader` : \"lazy-loader\"\n }\n >\n <Spinner />\n </div>\n )}\n </ComboboxList>\n );\n}\n","import { forwardRef, useCallback } from \"react\";\nimport { ChevronDownIcon, XIcon } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Combobox,\n ComboboxContent,\n ComboboxChips,\n ComboboxChipsInput,\n} from \"src/primitives/Combobox\";\nimport { useComboboxAnchor } from \"src/hooks/useComboboxAnchor\";\nimport { MultiSelectDropdown } from \"./MultiSelectDropdown\";\nimport type { SelectComboboxProps } from \"./SelectCombobox.types\";\n\nexport const SelectCombobox = forwardRef<HTMLInputElement, SelectComboboxProps>(\n (p, ref) => {\n const { anchorEl, setAnchorEl, handleClick } = useComboboxAnchor(\n p.isSearchable\n );\n\n const handleClearClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n p.handleClear();\n },\n [p.handleClear]\n );\n\n return (\n // @ts-expect-error — conditional spread creates a union that TS cannot narrow to the Combobox discriminated-union props\n <Combobox\n name={p.name}\n {...(p.effectiveItems && !p.children\n ? {\n items: p.effectiveItems,\n itemToStringLabel: p.labelForValue as (val: unknown) => string,\n ...(!p.isSearchable || p.isAsync\n ? { filter: null }\n : p.isCreatable\n ? { filter: p.creatableFilter }\n : {}),\n }\n : {})}\n {...(p.isControlled\n ? { value: p.valueProp }\n : { defaultValue: p.defaultValue })}\n onValueChange={p.handleValueChange as (next: unknown) => void}\n {...(p.isCreatable || p.isAsync\n ? { onInputValueChange: p.handleInputValueChange }\n : {})}\n onOpenChange={p.onOpenChange}\n disabled={p.isDisabled}\n autoHighlight={p.autoHighlight}\n >\n <div\n ref={setAnchorEl}\n onClick={handleClick}\n className={!p.isSearchable ? \"cursor-pointer\" : undefined}\n >\n <ComboboxChips\n className={cn(\n p.sizeConfig.chips,\n !!p.error &&\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\",\n p.inputClassName\n )}\n {...(p.testIdPrefix\n ? { \"data-testid\": `${p.testIdPrefix}-select-container` }\n : {})}\n >\n {!p.isSearchable &&\n (p.currentValue ? (\n <span className=\"flex-1 truncate\">\n {p.labelForValue(p.currentValue)}\n </span>\n ) : (\n <span className=\"flex-1 truncate text-muted-foreground\">\n {p.placeholder}\n </span>\n ))}\n\n <ComboboxChipsInput\n ref={ref}\n id={p.id}\n placeholder={\n p.isSearchable && !p.currentValue ? p.placeholder : undefined\n }\n aria-invalid={!!p.error || undefined}\n aria-describedby={p.ariaDescribedBy}\n aria-required={p.required || undefined}\n className={cn(\n p.sizeConfig.input,\n !p.isSearchable && \"w-0 min-w-0 overflow-hidden p-0 opacity-0\"\n )}\n disabled={p.isDisabled}\n {...(p.testIdPrefix\n ? { \"data-testid\": `${p.testIdPrefix}-select-input` }\n : {})}\n />\n\n {p.showClearButton && (\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label=\"Clear selection\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleClearClick}\n >\n <XIcon className=\"size-3.5\" />\n </button>\n )}\n\n <ChevronDownIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n </ComboboxChips>\n </div>\n\n <ComboboxContent anchor={anchorEl} {...p.contentProps}>\n <MultiSelectDropdown\n {...p.dropdownProps}\n labelForValue={p.labelForValue}\n testIdPrefix={p.testIdPrefix}\n >\n {p.children}\n </MultiSelectDropdown>\n </ComboboxContent>\n </Combobox>\n );\n }\n);\n\nSelectCombobox.displayName = \"SelectCombobox\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Combobox,\n ComboboxContent,\n ComboboxChips,\n ComboboxChip,\n ComboboxChipsInput,\n} from \"src/primitives/Combobox\";\nimport { useComboboxAnchor } from \"src/hooks/useComboboxAnchor\";\nimport { MultiSelectDropdown } from \"./MultiSelectDropdown\";\nimport type { MultiSelectComboboxProps } from \"./MultiSelectCombobox.types\";\n\nexport const MultiSelectCombobox = forwardRef<\n HTMLInputElement,\n MultiSelectComboboxProps\n>((p, ref) => {\n const { anchorEl, setAnchorEl, handleClick } = useComboboxAnchor(\n p.isSearchable\n );\n\n return (\n // @ts-expect-error — conditional spread creates a union that TS cannot narrow to the Combobox discriminated-union props\n <Combobox\n multiple\n name={p.name}\n {...(p.effectiveItems && !p.children\n ? {\n items: p.effectiveItems,\n itemToStringLabel: p.labelForValue as (val: unknown) => string,\n ...(!p.isSearchable || p.isAsync\n ? { filter: null }\n : p.isCreatable\n ? { filter: p.creatableFilter }\n : {}),\n }\n : {})}\n {...(p.isControlled\n ? { value: p.valueProp }\n : { defaultValue: p.defaultValue })}\n onValueChange={p.handleValueChange as (...args: unknown[]) => void}\n {...(p.isCreatable || p.isAsync\n ? { onInputValueChange: p.handleInputValueChange }\n : {})}\n onOpenChange={p.onOpenChange}\n disabled={p.isDisabled}\n autoHighlight={p.autoHighlight}\n >\n <div\n ref={setAnchorEl}\n onClick={handleClick}\n className={!p.isSearchable ? \"cursor-pointer\" : undefined}\n >\n <ComboboxChips\n className={cn(\n p.sizeConfig.chips,\n !!p.error &&\n \"border-destructive ring-3 ring-destructive/20 dark:border-destructive/50 dark:ring-destructive/40\",\n p.chipsClassName,\n p.inputClassName\n )}\n {...(p.testIdPrefix\n ? { \"data-testid\": `${p.testIdPrefix}-select-container` }\n : {})}\n >\n {p.selectedValues.map(val => (\n <ComboboxChip\n key={val}\n className={p.sizeConfig.chip}\n showRemove={!p.hideChipRemove}\n {...(p.testIdPrefix\n ? { \"data-testid\": `${p.testIdPrefix}-chip` }\n : {})}\n >\n {p.labelForValue(val)}\n </ComboboxChip>\n ))}\n <ComboboxChipsInput\n ref={ref}\n id={p.id}\n placeholder={\n p.isSearchable && p.selectedValues.length === 0\n ? p.placeholder\n : undefined\n }\n aria-invalid={!!p.error || undefined}\n aria-describedby={p.ariaDescribedBy}\n aria-required={p.required || undefined}\n className={cn(\n p.sizeConfig.input,\n !p.isSearchable && \"w-0 min-w-0 overflow-hidden p-0 opacity-0\"\n )}\n disabled={p.isDisabled}\n {...(p.testIdPrefix\n ? { \"data-testid\": `${p.testIdPrefix}-select-input` }\n : {})}\n />\n </ComboboxChips>\n </div>\n <ComboboxContent anchor={anchorEl} {...p.contentProps}>\n <MultiSelectDropdown\n {...p.dropdownProps}\n labelForValue={p.labelForValue}\n testIdPrefix={p.testIdPrefix}\n >\n {p.children}\n </MultiSelectDropdown>\n </ComboboxContent>\n </Combobox>\n );\n});\nMultiSelectCombobox.displayName = \"MultiSelectCombobox\";\n","import { forwardRef } from \"react\";\n\nimport { useSelectState } from \"src/hooks/useSelectState\";\nimport { useMultiSelectState } from \"src/hooks/useMultiSelectState\";\nimport { SelectFieldWrapper } from \"./SelectFieldWrapper\";\nimport { SelectCombobox } from \"./SelectCombobox\";\nimport { MultiSelectCombobox } from \"./MultiSelectCombobox\";\nimport type { SelectProps, MultiSelectProps } from \"./types\";\n\nexport type {\n SelectProps,\n SelectOption,\n SelectOptionBase,\n SelectOptionGroup,\n} from \"./types\";\n\ntype SingleSelectProps = Extract<SelectProps, { isMulti?: false }>;\n\nconst SingleSelectInner = forwardRef<HTMLInputElement, SingleSelectProps>(\n (props, ref) => {\n const s = useSelectState(props);\n\n return (\n <SelectFieldWrapper\n id={s.id}\n label={s.label}\n error={s.error}\n helpText={s.helpText}\n errorId={s.errorId}\n helpTextId={s.helpTextId}\n isDisabled={s.isDisabled}\n required={s.required}\n testIdPrefix={s.testIdPrefix}\n labelProps={props.labelProps}\n className={props.className}\n >\n <SelectCombobox\n ref={ref}\n name={props.name}\n id={s.id}\n effectiveItems={s.effectiveItems}\n labelForValue={s.labelForValue}\n isSearchable={s.isSearchable}\n isAsync={s.isAsync}\n isCreatable={props.isCreatable ?? false}\n creatableFilter={s.creatableFilter}\n isControlled={s.isControlled}\n valueProp={props.value}\n defaultValue={props.defaultValue}\n currentValue={s.currentValue}\n handleValueChange={s.handleValueChange}\n handleInputValueChange={s.handleInputValueChange}\n handleClear={s.handleClear}\n onOpenChange={props.onOpenChange}\n isDisabled={s.isDisabled}\n autoHighlight={s.autoHighlight}\n required={s.required}\n isClearable={props.isClearable ?? false}\n showClearButton={s.showClearButton}\n sizeConfig={s.sizeConfig}\n error={s.error}\n placeholder={props.placeholder ?? \"\"}\n ariaDescribedBy={s.ariaDescribedBy}\n testIdPrefix={s.testIdPrefix}\n inputClassName={props.inputClassName}\n contentProps={props.contentProps}\n dropdownProps={{\n resolvedOptions: s.resolvedOptions,\n flatOptionsMap: s.flatOptionsMap,\n isGrouped: s.isGrouped,\n isLoading: s.isLoading,\n loadingMessage: props.loadingMessage ?? \"Loading\\u2026\",\n emptyMessage: props.emptyMessage ?? \"No results found.\",\n showCreateOption: s.showCreateOption,\n hasMoreLazy: s.hasMoreLazy,\n loaderCallbackRef: s.loaderCallbackRef,\n }}\n >\n {props.children}\n </SelectCombobox>\n </SelectFieldWrapper>\n );\n }\n);\nSingleSelectInner.displayName = \"SingleSelectInner\";\n\nconst MultiSelectInner = forwardRef<HTMLInputElement, MultiSelectProps>(\n (props, ref) => {\n const s = useMultiSelectState(props);\n const { isDisabled = false, required = false } = props;\n\n return (\n <SelectFieldWrapper\n id={s.id}\n label={s.label}\n error={s.error}\n helpText={s.helpText}\n errorId={s.errorId}\n helpTextId={s.helpTextId}\n isDisabled={isDisabled}\n required={required}\n testIdPrefix={s.testIdPrefix}\n labelProps={props.labelProps}\n className={props.className}\n >\n <MultiSelectCombobox\n ref={ref}\n name={props.name}\n id={s.id}\n effectiveItems={s.effectiveItems}\n labelForValue={s.labelForValue}\n isSearchable={props.isSearchable ?? true}\n isAsync={s.isAsync}\n isCreatable={props.isCreatable ?? false}\n creatableFilter={s.creatableFilter}\n isControlled={s.isControlled}\n valueProp={props.value}\n defaultValue={props.defaultValue}\n selectedValues={s.selectedValues}\n handleValueChange={\n s.handleValueChange as (...args: unknown[]) => void\n }\n handleInputValueChange={\n s.handleInputValueChange as (...args: unknown[]) => void\n }\n onOpenChange={props.onOpenChange}\n isDisabled={isDisabled}\n autoHighlight={props.autoHighlight ?? true}\n sizeConfig={s.sizeConfig}\n error={s.error}\n chipsClassName={props.chipsClassName}\n inputClassName={props.inputClassName}\n placeholder={props.placeholder ?? \"\"}\n hideChipRemove={props.hideChipRemove ?? false}\n ariaDescribedBy={s.ariaDescribedBy}\n required={required}\n testIdPrefix={s.testIdPrefix}\n contentProps={props.contentProps}\n dropdownProps={{\n resolvedOptions: s.resolvedOptions,\n flatOptionsMap: s.flatOptionsMap,\n isGrouped: s.isGrouped,\n isLoading: s.isLoading,\n loadingMessage: props.loadingMessage ?? \"Loading\\u2026\",\n emptyMessage: props.emptyMessage ?? \"No results found.\",\n showCreateOption: s.showCreateOption,\n hasMoreLazy: s.hasMoreLazy,\n loaderCallbackRef: s.loaderCallbackRef,\n }}\n >\n {props.children}\n </MultiSelectCombobox>\n </SelectFieldWrapper>\n );\n }\n);\nMultiSelectInner.displayName = \"MultiSelectInner\";\n\nconst Select = forwardRef<HTMLInputElement, SelectProps>((props, ref) => {\n if (props.isMulti === true) {\n return <MultiSelectInner {...(props as MultiSelectProps)} ref={ref} />;\n }\n return <SingleSelectInner {...(props as SingleSelectProps)} ref={ref} />;\n});\n\nSelect.displayName = \"Select\";\n\nexport { Select };\n"],"names":["React","defaultFormatCreateLabel","_jsx","_jsxs","XIcon","ChevronDownIcon"],"mappings":"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"}