@bigbinary/neeto-atoms 1.0.102 → 1.0.104

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 (258) hide show
  1. package/dist/{Avatar-ChF94Ken.js → Avatar-Dg5-X_dH.js} +8 -2
  2. package/dist/Avatar-Dg5-X_dH.js.map +1 -0
  3. package/dist/{Checkbox-DiAngQvO.js → Checkbox-BalUzegZ.js} +26 -7
  4. package/dist/Checkbox-BalUzegZ.js.map +1 -0
  5. package/dist/{DataTable-CwWARMEv.js → DataTable-mxDU-16D.js} +75 -55
  6. package/dist/DataTable-mxDU-16D.js.map +1 -0
  7. package/dist/{DatePicker-Uf_h3ohA.js → DatePicker-BoXx1Wve.js} +13 -4
  8. package/dist/DatePicker-BoXx1Wve.js.map +1 -0
  9. package/dist/{Dialog-D8C0-nEo.js → Dialog-Yw34WDqY.js} +2 -2
  10. package/dist/Dialog-Yw34WDqY.js.map +1 -0
  11. package/dist/{HelpIcon-CbnRiSjn.js → HelpIcon-xh488VXs.js} +11 -3
  12. package/dist/HelpIcon-xh488VXs.js.map +1 -0
  13. package/dist/{Input-CuIurquS.js → Input-W8foyOcS.js} +35 -7
  14. package/dist/Input-W8foyOcS.js.map +1 -0
  15. package/dist/{Label-DjOaTM4Q.js → Label-B-R4PNNq.js} +2 -2
  16. package/dist/{Label-DjOaTM4Q.js.map → Label-B-R4PNNq.js.map} +1 -1
  17. package/dist/{MultiEmailInput-BB334s4C.js → MultiEmailInput-Bzd2dPFC.js} +68 -25
  18. package/dist/MultiEmailInput-Bzd2dPFC.js.map +1 -0
  19. package/dist/{RadioGroup-CpgVdPzz.js → RadioGroup-CBXByAMW.js} +63 -34
  20. package/dist/RadioGroup-CBXByAMW.js.map +1 -0
  21. package/dist/{Select-YWCfd2p1.js → Select-N5Ten-tn.js} +3 -10
  22. package/dist/Select-N5Ten-tn.js.map +1 -0
  23. package/dist/{Slider-Bokg8-oi.js → Slider-CxQdlyHZ.js} +32 -7
  24. package/dist/Slider-CxQdlyHZ.js.map +1 -0
  25. package/dist/{Stepper-DO7EBWYL.js → Stepper-GK8gDn-s.js} +2 -1
  26. package/dist/Stepper-GK8gDn-s.js.map +1 -0
  27. package/dist/{Switch-Am2l2UdV.js → Switch-C9fqpoNR.js} +16 -2
  28. package/dist/Switch-C9fqpoNR.js.map +1 -0
  29. package/dist/{Tabs-ModAabFc.js → Tabs-DaXiF_67.js} +3 -3
  30. package/dist/Tabs-DaXiF_67.js.map +1 -0
  31. package/dist/{Textarea-CMGZZ4rL.js → Textarea-CUe09-sr.js} +34 -7
  32. package/dist/Textarea-CUe09-sr.js.map +1 -0
  33. package/dist/{TimePicker-Ca7iF-a_.js → TimePicker-BixF9wdU.js} +21 -4
  34. package/dist/TimePicker-BixF9wdU.js.map +1 -0
  35. package/dist/{Toastr-Cka6pudu.js → Toastr-CXqmoXjn.js} +9 -2
  36. package/dist/Toastr-CXqmoXjn.js.map +1 -0
  37. package/dist/{TreeSelect-wYDOZ5yD.js → TreeSelect-DMbr7J2H.js} +2 -1
  38. package/dist/TreeSelect-DMbr7J2H.js.map +1 -0
  39. package/dist/cjs/{Avatar-DGuMcBnh.js → Avatar-D2k6WnzD.js} +8 -2
  40. package/dist/cjs/Avatar-D2k6WnzD.js.map +1 -0
  41. package/dist/cjs/{Checkbox-7lX2aMKA.js → Checkbox-83g1FDsc.js} +26 -7
  42. package/dist/cjs/Checkbox-83g1FDsc.js.map +1 -0
  43. package/dist/cjs/{DataTable-ChgPVrRB.js → DataTable-OtA15NKE.js} +75 -55
  44. package/dist/cjs/DataTable-OtA15NKE.js.map +1 -0
  45. package/dist/cjs/{DatePicker-Czp9QLy0.js → DatePicker-DtmJ-VkV.js} +13 -4
  46. package/dist/cjs/DatePicker-DtmJ-VkV.js.map +1 -0
  47. package/dist/cjs/{Dialog-DNv7j7ts.js → Dialog-ZUHGaoAE.js} +2 -2
  48. package/dist/cjs/Dialog-ZUHGaoAE.js.map +1 -0
  49. package/dist/cjs/{HelpIcon-QpZY6Zmc.js → HelpIcon-BF1ePUQf.js} +11 -3
  50. package/dist/cjs/HelpIcon-BF1ePUQf.js.map +1 -0
  51. package/dist/cjs/{Input-lWo0YoZ9.js → Input-DIq7T9D0.js} +35 -7
  52. package/dist/cjs/Input-DIq7T9D0.js.map +1 -0
  53. package/dist/cjs/{Label-D8RFE9hd.js → Label-CpsdGBV8.js} +2 -2
  54. package/dist/cjs/{Label-D8RFE9hd.js.map → Label-CpsdGBV8.js.map} +1 -1
  55. package/dist/cjs/{MultiEmailInput-BlIqzq-o.js → MultiEmailInput-FNRR9b74.js} +68 -25
  56. package/dist/cjs/MultiEmailInput-FNRR9b74.js.map +1 -0
  57. package/dist/cjs/{RadioGroup-DCEw94Dk.js → RadioGroup-B-u8rdbf.js} +63 -34
  58. package/dist/cjs/RadioGroup-B-u8rdbf.js.map +1 -0
  59. package/dist/cjs/{Select-Bs5Fp3wj.js → Select-CGG3J9NS.js} +7 -14
  60. package/dist/cjs/Select-CGG3J9NS.js.map +1 -0
  61. package/dist/cjs/{Slider-CRmd_VMs.js → Slider-DIUSlx_m.js} +32 -7
  62. package/dist/cjs/Slider-DIUSlx_m.js.map +1 -0
  63. package/dist/cjs/{Stepper-BtZG_XmC.js → Stepper-BZBdL6JW.js} +2 -1
  64. package/dist/cjs/Stepper-BZBdL6JW.js.map +1 -0
  65. package/dist/cjs/{Switch-DY7bdiEz.js → Switch-BbRK3HUZ.js} +16 -2
  66. package/dist/cjs/Switch-BbRK3HUZ.js.map +1 -0
  67. package/dist/cjs/{Tabs-CA0QAWp0.js → Tabs-BQl63Ewe.js} +3 -3
  68. package/dist/cjs/Tabs-BQl63Ewe.js.map +1 -0
  69. package/dist/cjs/{Textarea-Cw7Uea82.js → Textarea-bxleSw86.js} +34 -7
  70. package/dist/cjs/Textarea-bxleSw86.js.map +1 -0
  71. package/dist/cjs/{TimePicker-DW7OM3IE.js → TimePicker-lJ2985nh.js} +21 -4
  72. package/dist/cjs/TimePicker-lJ2985nh.js.map +1 -0
  73. package/dist/cjs/{Toastr-E0yLh_MW.js → Toastr-9DXjD-Mq.js} +9 -2
  74. package/dist/cjs/Toastr-9DXjD-Mq.js.map +1 -0
  75. package/dist/cjs/{TreeSelect-C9BSJt1d.js → TreeSelect-3APPRsqr.js} +2 -1
  76. package/dist/cjs/TreeSelect-3APPRsqr.js.map +1 -0
  77. package/dist/cjs/components/Avatar.js +1 -1
  78. package/dist/cjs/components/Checkbox.js +4 -2
  79. package/dist/cjs/components/Checkbox.js.map +1 -1
  80. package/dist/cjs/components/DataTable.js +2 -1
  81. package/dist/cjs/components/DataTable.js.map +1 -1
  82. package/dist/cjs/components/DatePicker.js +4 -2
  83. package/dist/cjs/components/DatePicker.js.map +1 -1
  84. package/dist/cjs/components/Dialog.js +1 -1
  85. package/dist/cjs/components/DropdownMenu.js +3 -1
  86. package/dist/cjs/components/DropdownMenu.js.map +1 -1
  87. package/dist/cjs/components/Input.js +4 -2
  88. package/dist/cjs/components/Input.js.map +1 -1
  89. package/dist/cjs/components/Label.js +2 -2
  90. package/dist/cjs/components/MultiEmailInput.js +4 -2
  91. package/dist/cjs/components/MultiEmailInput.js.map +1 -1
  92. package/dist/cjs/components/RadioGroup.js +4 -2
  93. package/dist/cjs/components/RadioGroup.js.map +1 -1
  94. package/dist/cjs/components/Select.js +4 -3
  95. package/dist/cjs/components/Select.js.map +1 -1
  96. package/dist/cjs/components/Slider.js +4 -2
  97. package/dist/cjs/components/Slider.js.map +1 -1
  98. package/dist/cjs/components/Stepper.js +1 -1
  99. package/dist/cjs/components/Switch.js +4 -2
  100. package/dist/cjs/components/Switch.js.map +1 -1
  101. package/dist/cjs/components/Tabs.js +2 -2
  102. package/dist/cjs/components/Textarea.js +4 -2
  103. package/dist/cjs/components/Textarea.js.map +1 -1
  104. package/dist/cjs/components/TimePicker.js +4 -2
  105. package/dist/cjs/components/TimePicker.js.map +1 -1
  106. package/dist/cjs/components/Toastr.js +1 -1
  107. package/dist/cjs/components/TreeSelect.js +2 -2
  108. package/dist/cjs/components/index.js +21 -20
  109. package/dist/cjs/components/index.js.map +1 -1
  110. package/dist/cjs/fieldIds-DiVU6GVS.js +14 -0
  111. package/dist/cjs/fieldIds-DiVU6GVS.js.map +1 -0
  112. package/dist/cjs/formik/BlockNavigation.js +1 -1
  113. package/dist/cjs/formik/Checkbox.js +4 -2
  114. package/dist/cjs/formik/Checkbox.js.map +1 -1
  115. package/dist/cjs/formik/Input.js +4 -2
  116. package/dist/cjs/formik/Input.js.map +1 -1
  117. package/dist/cjs/formik/MultiEmailInput.js +4 -2
  118. package/dist/cjs/formik/MultiEmailInput.js.map +1 -1
  119. package/dist/cjs/formik/RadioGroup.js +4 -2
  120. package/dist/cjs/formik/RadioGroup.js.map +1 -1
  121. package/dist/cjs/formik/Select.js +4 -3
  122. package/dist/cjs/formik/Select.js.map +1 -1
  123. package/dist/cjs/formik/Slider.js +4 -2
  124. package/dist/cjs/formik/Slider.js.map +1 -1
  125. package/dist/cjs/formik/Switch.js +4 -2
  126. package/dist/cjs/formik/Switch.js.map +1 -1
  127. package/dist/cjs/formik/Textarea.js +4 -2
  128. package/dist/cjs/formik/Textarea.js.map +1 -1
  129. package/dist/cjs/formik/TreeSelect.js +2 -2
  130. package/dist/cjs/formik/index.js +13 -12
  131. package/dist/cjs/formik/index.js.map +1 -1
  132. package/dist/cjs/hyphenize-BTrVNVv3.js +13 -0
  133. package/dist/cjs/hyphenize-BTrVNVv3.js.map +1 -0
  134. package/dist/cjs/index.js +21 -20
  135. package/dist/cjs/index.js.map +1 -1
  136. package/dist/cjs/primitives/Button.js +2 -0
  137. package/dist/cjs/primitives/Button.js.map +1 -1
  138. package/dist/cjs/primitives/Field.js +1 -1
  139. package/dist/cjs/primitives/index.js +1 -1
  140. package/dist/components/Avatar.js +1 -1
  141. package/dist/components/Checkbox/Checkbox.d.ts +2 -0
  142. package/dist/components/Checkbox.js +4 -2
  143. package/dist/components/Checkbox.js.map +1 -1
  144. package/dist/components/DataTable.js +2 -1
  145. package/dist/components/DataTable.js.map +1 -1
  146. package/dist/components/DatePicker/DatePickerField.d.ts +1 -0
  147. package/dist/components/DatePicker/DatePickerTrigger.d.ts +1 -0
  148. package/dist/components/DatePicker/types.d.ts +2 -0
  149. package/dist/components/DatePicker.js +4 -2
  150. package/dist/components/DatePicker.js.map +1 -1
  151. package/dist/components/Dialog.js +1 -1
  152. package/dist/components/DropdownMenu.js +3 -1
  153. package/dist/components/DropdownMenu.js.map +1 -1
  154. package/dist/components/Input/Input.d.ts +2 -0
  155. package/dist/components/Input.js +4 -2
  156. package/dist/components/Input.js.map +1 -1
  157. package/dist/components/Label.js +2 -2
  158. package/dist/components/MultiEmailInput/types.d.ts +2 -0
  159. package/dist/components/MultiEmailInput.js +4 -2
  160. package/dist/components/MultiEmailInput.js.map +1 -1
  161. package/dist/components/RadioGroup/RadioGroup.d.ts +4 -0
  162. package/dist/components/RadioGroup.js +4 -2
  163. package/dist/components/RadioGroup.js.map +1 -1
  164. package/dist/components/Select/hooks/useMultiSelectState.d.ts +1 -1
  165. package/dist/components/Select/hooks/useSelectState.d.ts +1 -1
  166. package/dist/components/Select.js +4 -3
  167. package/dist/components/Select.js.map +1 -1
  168. package/dist/components/Slider/Slider.d.ts +2 -0
  169. package/dist/components/Slider.js +4 -2
  170. package/dist/components/Slider.js.map +1 -1
  171. package/dist/components/Stepper.js +1 -1
  172. package/dist/components/Switch/Switch.d.ts +2 -0
  173. package/dist/components/Switch.js +4 -2
  174. package/dist/components/Switch.js.map +1 -1
  175. package/dist/components/Tabs.js +2 -2
  176. package/dist/components/Textarea/Textarea.d.ts +2 -0
  177. package/dist/components/Textarea.js +4 -2
  178. package/dist/components/Textarea.js.map +1 -1
  179. package/dist/components/TimePicker/types.d.ts +2 -0
  180. package/dist/components/TimePicker.js +4 -2
  181. package/dist/components/TimePicker.js.map +1 -1
  182. package/dist/components/Toastr.js +1 -1
  183. package/dist/components/TreeSelect.js +2 -2
  184. package/dist/components/index.js +21 -20
  185. package/dist/components/index.js.map +1 -1
  186. package/dist/fieldIds-VpluAAMl.js +11 -0
  187. package/dist/fieldIds-VpluAAMl.js.map +1 -0
  188. package/dist/formik/BlockNavigation.js +1 -1
  189. package/dist/formik/Checkbox.js +4 -2
  190. package/dist/formik/Checkbox.js.map +1 -1
  191. package/dist/formik/Input.js +4 -2
  192. package/dist/formik/Input.js.map +1 -1
  193. package/dist/formik/MultiEmailInput.js +4 -2
  194. package/dist/formik/MultiEmailInput.js.map +1 -1
  195. package/dist/formik/RadioGroup.js +4 -2
  196. package/dist/formik/RadioGroup.js.map +1 -1
  197. package/dist/formik/Select.js +4 -3
  198. package/dist/formik/Select.js.map +1 -1
  199. package/dist/formik/Slider.js +4 -2
  200. package/dist/formik/Slider.js.map +1 -1
  201. package/dist/formik/Switch.js +4 -2
  202. package/dist/formik/Switch.js.map +1 -1
  203. package/dist/formik/Textarea.js +4 -2
  204. package/dist/formik/Textarea.js.map +1 -1
  205. package/dist/formik/TreeSelect.js +2 -2
  206. package/dist/formik/index.js +13 -12
  207. package/dist/formik/index.js.map +1 -1
  208. package/dist/hyphenize-TRhMI0tl.js +11 -0
  209. package/dist/hyphenize-TRhMI0tl.js.map +1 -0
  210. package/dist/index.js +21 -20
  211. package/dist/index.js.map +1 -1
  212. package/dist/primitives/Button.js +2 -0
  213. package/dist/primitives/Button.js.map +1 -1
  214. package/dist/primitives/Field.js +1 -1
  215. package/dist/primitives/index.js +1 -1
  216. package/dist/utils/fieldIds.d.ts +1 -1
  217. package/dist/utils/hyphenize.d.ts +1 -1
  218. package/package.json +1 -1
  219. package/dist/Avatar-ChF94Ken.js.map +0 -1
  220. package/dist/Checkbox-DiAngQvO.js.map +0 -1
  221. package/dist/DataTable-CwWARMEv.js.map +0 -1
  222. package/dist/DatePicker-Uf_h3ohA.js.map +0 -1
  223. package/dist/Dialog-D8C0-nEo.js.map +0 -1
  224. package/dist/HelpIcon-CbnRiSjn.js.map +0 -1
  225. package/dist/Input-CuIurquS.js.map +0 -1
  226. package/dist/MultiEmailInput-BB334s4C.js.map +0 -1
  227. package/dist/RadioGroup-CpgVdPzz.js.map +0 -1
  228. package/dist/Select-YWCfd2p1.js.map +0 -1
  229. package/dist/Slider-Bokg8-oi.js.map +0 -1
  230. package/dist/Stepper-DO7EBWYL.js.map +0 -1
  231. package/dist/Switch-Am2l2UdV.js.map +0 -1
  232. package/dist/Tabs-ModAabFc.js.map +0 -1
  233. package/dist/Textarea-CMGZZ4rL.js.map +0 -1
  234. package/dist/TimePicker-Ca7iF-a_.js.map +0 -1
  235. package/dist/Toastr-Cka6pudu.js.map +0 -1
  236. package/dist/TreeSelect-wYDOZ5yD.js.map +0 -1
  237. package/dist/cjs/Avatar-DGuMcBnh.js.map +0 -1
  238. package/dist/cjs/Checkbox-7lX2aMKA.js.map +0 -1
  239. package/dist/cjs/DataTable-ChgPVrRB.js.map +0 -1
  240. package/dist/cjs/DatePicker-Czp9QLy0.js.map +0 -1
  241. package/dist/cjs/Dialog-DNv7j7ts.js.map +0 -1
  242. package/dist/cjs/HelpIcon-QpZY6Zmc.js.map +0 -1
  243. package/dist/cjs/Input-lWo0YoZ9.js.map +0 -1
  244. package/dist/cjs/MultiEmailInput-BlIqzq-o.js.map +0 -1
  245. package/dist/cjs/RadioGroup-DCEw94Dk.js.map +0 -1
  246. package/dist/cjs/Select-Bs5Fp3wj.js.map +0 -1
  247. package/dist/cjs/Slider-CRmd_VMs.js.map +0 -1
  248. package/dist/cjs/Stepper-BtZG_XmC.js.map +0 -1
  249. package/dist/cjs/Switch-DY7bdiEz.js.map +0 -1
  250. package/dist/cjs/Tabs-CA0QAWp0.js.map +0 -1
  251. package/dist/cjs/Textarea-Cw7Uea82.js.map +0 -1
  252. package/dist/cjs/TimePicker-DW7OM3IE.js.map +0 -1
  253. package/dist/cjs/Toastr-E0yLh_MW.js.map +0 -1
  254. package/dist/cjs/TreeSelect-C9BSJt1d.js.map +0 -1
  255. package/dist/cjs/hyphenize-B8IGPzjp.js +0 -8
  256. package/dist/cjs/hyphenize-B8IGPzjp.js.map +0 -1
  257. package/dist/hyphenize-BU4K8zjb.js +0 -6
  258. package/dist/hyphenize-BU4K8zjb.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeSelect-DMbr7J2H.js","sources":["../src/components/TreeSelect/utils/pruneTree.ts","../src/components/TreeSelect/utils/resolveFieldNames.ts","../src/components/TreeSelect/hooks/useTreeSelectValue.ts","../src/components/TreeSelect/hooks/useTreeSelectState.ts","../src/components/TreeSelect/constants.ts","../src/components/TreeSelect/TreeSelectTrigger.tsx","../src/components/TreeSelect/TreeSelect.tsx"],"sourcesContent":["import type { TreeNodeData } from \"../../Tree/types\";\n\nexport const pruneTree = (\n nodes: TreeNodeData[],\n searchTerm: string\n): TreeNodeData[] => {\n if (!searchTerm.trim()) return nodes;\n\n const lower = searchTerm.toLowerCase();\n\n const prune = (items: TreeNodeData[]): TreeNodeData[] =>\n items.reduce<TreeNodeData[]>((acc, node) => {\n const titleStr = typeof node.title === \"string\" ? node.title : \"\";\n const nodeMatches = titleStr.toLowerCase().includes(lower);\n\n if (nodeMatches) {\n acc.push(node);\n } else {\n const prunedChildren = node.children ? prune(node.children) : [];\n if (prunedChildren.length > 0) {\n acc.push({ ...node, children: prunedChildren });\n }\n }\n\n return acc;\n }, []);\n\n return prune(nodes);\n};\n","import type { ReactNode } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\n\ninterface FieldNameMapping {\n label?: string;\n value?: string;\n}\n\nexport const resolveFieldNames = (\n nodes: TreeNodeData[],\n fieldNames: FieldNameMapping\n): TreeNodeData[] => {\n const labelKey = fieldNames.label ?? \"title\";\n const valueKey = fieldNames.value ?? \"key\";\n\n const remap = (items: TreeNodeData[]): TreeNodeData[] =>\n items.map(item => {\n const record = item as unknown as Record<string, unknown>;\n\n return {\n key: String(record[valueKey] ?? \"\"),\n title: record[labelKey] as ReactNode,\n disabled: record.disabled as boolean | undefined,\n children: Array.isArray(item.children)\n ? remap(item.children)\n : undefined,\n };\n });\n\n return remap(nodes);\n};\n","import { useCallback, useId, useMemo, useState } from \"react\";\nimport { findNode } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { resolveFieldNames } from \"../utils/resolveFieldNames\";\n\nexport function useTreeSelectValue(props: TreeSelectProps) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n treeData: rawTreeData,\n fieldNames,\n isClearable = false,\n isDisabled = false,\n size = \"medium\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n required = false,\n } = props;\n\n const id = useId();\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n const treeData = useMemo(() => {\n if (!fieldNames) return rawTreeData;\n\n return resolveFieldNames(rawTreeData, fieldNames);\n }, [rawTreeData, fieldNames?.label, fieldNames?.value]);\n\n const isControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue ?? \"\");\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 selectedLabel = useMemo(() => {\n if (!currentValue) return \"\";\n const node = findNode(currentValue, treeData);\n if (!node) return currentValue;\n\n return typeof node.title === \"string\" ? node.title : \"\";\n }, [currentValue, treeData]);\n\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n applyValue(\"\");\n },\n [applyValue]\n );\n\n const showClearButton = isClearable && !!currentValue && !isDisabled;\n\n return {\n id,\n errorId,\n helpTextId,\n label,\n error,\n helpText,\n required,\n isDisabled,\n size,\n treeData,\n currentValue,\n selectedLabel,\n applyValue,\n handleClear,\n showClearButton,\n };\n}\n","import { useCallback, useMemo, useRef, useState } from \"react\";\nimport type { TreeNodeData } from \"../../Tree/types\";\nimport { walkTree } from \"../../Tree/utils/adapter\";\nimport type { TreeSelectProps } from \"../types\";\nimport { pruneTree } from \"../utils/pruneTree\";\nimport { useTreeSelectValue } from \"./useTreeSelectValue\";\n\nexport function useTreeSelectState(props: TreeSelectProps) {\n const { isSearchable = false, defaultExpandedKeys } = props;\n const defaultExpandedKeysRef = useRef(defaultExpandedKeys);\n defaultExpandedKeysRef.current = defaultExpandedKeys;\n const value = useTreeSelectValue(props);\n\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [expandedKeys, setExpandedKeys] = useState<string[]>(\n defaultExpandedKeys ?? []\n );\n\n const prunedTreeData = useMemo(\n () =>\n searchTerm.trim()\n ? pruneTree(value.treeData, searchTerm)\n : value.treeData,\n [value.treeData, searchTerm]\n );\n\n const effectiveExpandedKeys = useMemo(() => {\n if (!searchTerm) return expandedKeys;\n\n const allKeys: string[] = [];\n walkTree(prunedTreeData, node => {\n if (node.children?.length) allKeys.push(node.key);\n });\n\n return allKeys;\n }, [searchTerm, prunedTreeData]);\n\n const handleSelect = useCallback(\n (keys: string[], info: { node: TreeNodeData }) => {\n if (value.isDisabled || info.node.disabled) return;\n value.applyValue(keys[0] ?? \"\");\n setIsOpen(false);\n setSearchTerm(\"\");\n },\n [value.applyValue, value.isDisabled]\n );\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (value.isDisabled) return;\n setIsOpen(open);\n if (!open) {\n setSearchTerm(\"\");\n setExpandedKeys(defaultExpandedKeysRef.current ?? []);\n }\n },\n [value.isDisabled]\n );\n\n const handleExpand = useCallback(\n (keys: string[]) => setExpandedKeys(keys),\n []\n );\n\n return {\n ...value,\n isSearchable,\n isOpen,\n handleOpenChange,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n };\n}\n","export const DROPDOWN_HEIGHT = 256;\n\nexport const SIZE_CONFIG: Record<\n \"small\" | \"medium\" | \"large\",\n { trigger: string; text: string }\n> = {\n small: {\n trigger: \"min-h-8 md:min-h-7 px-2 py-0.5\",\n text: \"text-base md:text-xs\",\n },\n medium: { trigger: \"min-h-8 px-2.5 py-1\", text: \"text-base md:text-sm\" },\n large: { trigger: \"min-h-10 px-2.5 py-1.5\", text: \"text-base md:text-sm\" },\n};\n","import { forwardRef, type ReactNode } from \"react\";\nimport { ChevronDown, X } from \"lucide-react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { SIZE_CONFIG } from \"./constants\";\n\ninterface TreeSelectTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n size: \"small\" | \"medium\" | \"large\";\n currentValue: string;\n selectedLabel: string;\n placeholder?: string;\n isDisabled: boolean;\n error: string;\n showClearButton: boolean;\n handleClear: (e: React.MouseEvent) => void;\n suffixIcon?: ReactNode;\n}\n\nexport const TreeSelectTrigger = forwardRef<\n HTMLButtonElement,\n TreeSelectTriggerProps\n>(\n (\n {\n size,\n currentValue,\n selectedLabel,\n placeholder,\n isDisabled,\n error,\n showClearButton,\n handleClear,\n suffixIcon,\n className,\n ...rest\n },\n ref\n ) => (\n <button\n ref={ref}\n type=\"button\"\n disabled={isDisabled}\n data-testid=\"neeto-ui-tree-select-wrapper\"\n {...rest}\n className={cn(\n \"inline-flex w-full items-center gap-1 rounded-md border border-input bg-background outline-none\",\n \"hover:bg-accent focus:ring-1 focus:ring-ring\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n error && \"border-destructive\",\n SIZE_CONFIG[size].trigger,\n SIZE_CONFIG[size].text,\n className\n )}\n >\n <span\n className={cn(\n \"flex-1 truncate text-left\",\n !currentValue && \"text-muted-foreground\"\n )}\n >\n {selectedLabel || placeholder || \"\"}\n </span>\n {showClearButton && (\n <span\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Clear selection\"\n className=\"shrink-0 text-muted-foreground hover:text-foreground\"\n onClick={handleClear}\n >\n <X className=\"size-3.5\" />\n </span>\n )}\n {suffixIcon ?? <ChevronDown className=\"size-4 shrink-0 opacity-50\" />}\n </button>\n )\n);\n\nTreeSelectTrigger.displayName = \"TreeSelectTrigger\";\n","import { forwardRef } from \"react\";\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"src/primitives/Popover\";\nimport { SelectFieldWrapper } from \"../Select/SelectFieldWrapper\";\nimport { Tree } from \"../Tree\";\nimport { useTreeSelectState } from \"./hooks/useTreeSelectState\";\nimport { TreeSelectTrigger } from \"./TreeSelectTrigger\";\nimport { SIZE_CONFIG, DROPDOWN_HEIGHT } from \"./constants\";\nimport type { TreeSelectProps } from \"./types\";\n\nconst TreeSelect = forwardRef<HTMLButtonElement, TreeSelectProps>(\n (props, ref) => {\n const {\n id,\n label,\n error,\n helpText,\n errorId,\n helpTextId,\n isDisabled,\n required,\n isOpen,\n handleOpenChange,\n currentValue,\n handleClear,\n selectedLabel,\n showClearButton,\n size,\n isSearchable,\n searchTerm,\n setSearchTerm,\n prunedTreeData,\n effectiveExpandedKeys,\n handleSelect,\n handleExpand,\n } = useTreeSelectState(props);\n const { suffixIcon, switcherIcon, autoExpandParent, className } = props;\n\n return (\n <SelectFieldWrapper\n id={id}\n label={label}\n error={error}\n helpText={helpText}\n errorId={errorId}\n helpTextId={helpTextId}\n isDisabled={isDisabled}\n required={required}\n className={className}\n testIdPrefix={props.testIdPrefix ?? \"tree\"}\n >\n <Popover open={isOpen} onOpenChange={handleOpenChange}>\n <PopoverTrigger asChild>\n <TreeSelectTrigger\n ref={ref}\n currentValue={currentValue}\n error={error}\n handleClear={handleClear}\n isDisabled={isDisabled}\n placeholder={props.placeholder}\n selectedLabel={selectedLabel}\n showClearButton={showClearButton}\n size={size}\n suffixIcon={suffixIcon}\n />\n </PopoverTrigger>\n <PopoverContent\n align=\"start\"\n className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n onOpenAutoFocus={e => {\n if (isSearchable) e.preventDefault();\n }}\n >\n {isSearchable && (\n <div className=\"border-b border-border px-2 py-1.5\">\n <input\n autoFocus\n type=\"text\"\n className={cn(\n \"w-full bg-transparent outline-none placeholder:text-muted-foreground\",\n SIZE_CONFIG[size].text\n )}\n placeholder=\"Search...\"\n value={searchTerm}\n onChange={e => setSearchTerm(e.target.value)}\n />\n </div>\n )}\n {prunedTreeData.length > 0 ? (\n <div className=\"p-1\">\n <Tree\n autoExpandParent={autoExpandParent}\n expandedKeys={effectiveExpandedKeys}\n height={DROPDOWN_HEIGHT}\n switcherIcon={switcherIcon}\n treeData={prunedTreeData}\n onExpand={handleExpand}\n onSelect={handleSelect}\n />\n </div>\n ) : (\n <div className=\"py-6 text-center text-sm text-muted-foreground\">\n No results found.\n </div>\n )}\n </PopoverContent>\n </Popover>\n </SelectFieldWrapper>\n );\n }\n);\n\nTreeSelect.displayName = \"TreeSelect\";\n\nexport { TreeSelect };\n"],"names":[],"mappings":"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"}
@@ -70,7 +70,13 @@ const Avatar = React.forwardRef(
70
70
  children: [
71
71
  user?.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(primitives_Avatar.AvatarImage, { src: user.imageUrl, alt: user?.name ?? "" }),
72
72
  /* @__PURE__ */ jsxRuntime.jsx(primitives_Avatar.AvatarFallback, { style: getAvatarColorStyle(seed), children: initials }),
73
- status && /* @__PURE__ */ jsxRuntime.jsx(primitives_Avatar.AvatarBadge, { className: utils.cn(STATUS_COLOR_MAP[status]) })
73
+ status && /* @__PURE__ */ jsxRuntime.jsx(
74
+ primitives_Avatar.AvatarBadge,
75
+ {
76
+ "data-testid": "indicator",
77
+ className: utils.cn(STATUS_COLOR_MAP[status])
78
+ }
79
+ )
74
80
  ]
75
81
  }
76
82
  );
@@ -92,4 +98,4 @@ const AvatarNamespace = Object.assign(Avatar, {
92
98
  });
93
99
 
94
100
  exports.AvatarNamespace = AvatarNamespace;
95
- //# sourceMappingURL=Avatar-DGuMcBnh.js.map
101
+ //# sourceMappingURL=Avatar-D2k6WnzD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar-D2k6WnzD.js","sources":["../../src/components/Avatar/constants.ts","../../src/components/Avatar/utils.ts","../../src/components/Avatar/Avatar.tsx"],"sourcesContent":["export const STATUS_COLOR_MAP: Record<string, string> = {\n online: \"bg-emerald-500 dark:bg-emerald-400\",\n idle: \"bg-amber-500 dark:bg-amber-400\",\n offline: \"bg-gray-400 dark:bg-gray-500\",\n};\n\nexport const SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n auto: \"bottom\",\n};\n\nexport const XL_CLASSES =\n \"data-[size=lg]:size-16 [&>[data-slot=avatar-badge]]:size-4 [&>[data-slot=avatar-fallback]]:text-lg\";\n","import type { CSSProperties } from \"react\";\n\nexport function getInitials(name?: string): string {\n if (!name) return \"\";\n\n return name\n .split(/\\s+/)\n .slice(0, 2)\n .map(word => word.charAt(0).toUpperCase())\n .join(\"\");\n}\n\nfunction cyrb53(str: string, seed = 0): number {\n let h1 = 0xdeadbeef ^ seed;\n let h2 = 0x41c6ce57 ^ seed;\n for (let i = 0; i < str.length; i++) {\n const ch = str.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 =\n Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^\n Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 =\n Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^\n Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n return 4294967296 * (2097151 & h2) + (h1 >>> 0);\n}\n\nexport function getAvatarColorStyle(seed?: string): CSSProperties | undefined {\n if (!seed) return undefined;\n\n const hue = cyrb53(seed) % 360;\n\n return {\n backgroundColor: `oklch(var(--avatar-l) var(--avatar-c) ${hue})`,\n color: \"var(--avatar-fg)\",\n };\n}\n","import React, { forwardRef } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Avatar as PrimitiveAvatar,\n AvatarImage,\n AvatarFallback,\n AvatarBadge,\n AvatarGroup,\n AvatarGroupCount,\n} from \"src/primitives/Avatar\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\nimport { STATUS_COLOR_MAP, SIDE_MAP, XL_CLASSES } from \"./constants\";\nimport { getAvatarColorStyle, getInitials } from \"./utils\";\n\ntype AvatarSize = \"sm\" | \"default\" | \"lg\" | \"xl\";\n\ninterface AvatarTooltipProps {\n /** Tooltip content. Defaults to user.name if showTooltip is true. */\n content?: React.ReactNode;\n /** Tooltip position. */\n position?: string;\n}\n\nexport interface AvatarProps extends Omit<\n React.ComponentProps<typeof PrimitiveAvatar>,\n \"size\"\n> {\n /** User data for the avatar. */\n user?: {\n id?: string | number;\n name?: string;\n email?: string;\n imageUrl?: string;\n };\n /** Status indicator displayed as a colored badge. */\n status?: \"online\" | \"idle\" | \"offline\" | null;\n /** Show the user's name in a tooltip on hover. */\n showTooltip?: boolean;\n /** Tooltip configuration. Overrides showTooltip content. */\n tooltipProps?: AvatarTooltipProps;\n /** Size of the avatar. */\n size?: AvatarSize;\n /** Additional CSS class names. */\n className?: string;\n}\n\nconst Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n user,\n status,\n showTooltip = false,\n tooltipProps,\n size = \"default\",\n className,\n ...otherProps\n },\n ref\n ) => {\n const initials = getInitials(user?.name);\n const isXl = size === \"xl\";\n const primitiveSize = isXl ? \"lg\" : size;\n const seed =\n user?.id != null\n ? String(user.id)\n : user?.email?.trim().toLowerCase() || user?.name;\n\n const avatarElement = (\n <PrimitiveAvatar\n ref={ref}\n size={primitiveSize}\n className={cn(isXl && XL_CLASSES, className)}\n data-testid=\"nui-avatar\"\n {...otherProps}\n >\n {user?.imageUrl && (\n <AvatarImage src={user.imageUrl} alt={user?.name ?? \"\"} />\n )}\n <AvatarFallback style={getAvatarColorStyle(seed)}>\n {initials}\n </AvatarFallback>\n {status && (\n <AvatarBadge\n data-testid=\"indicator\"\n className={cn(STATUS_COLOR_MAP[status])}\n />\n )}\n </PrimitiveAvatar>\n );\n\n const tooltipContent =\n tooltipProps?.content ?? (showTooltip ? user?.name : null);\n\n if (tooltipContent) {\n const side = SIDE_MAP[tooltipProps?.position ?? \"auto\"] ?? \"bottom\";\n\n return (\n <TooltipProvider delayDuration={0}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex\">{avatarElement}</span>\n </TooltipTrigger>\n <TooltipContent data-testid=\"tooltip-box\" side={side}>\n {tooltipContent}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return avatarElement;\n }\n);\n\nAvatar.displayName = \"Avatar\";\n\nconst AvatarNamespace = Object.assign(Avatar, {\n Group: AvatarGroup,\n GroupCount: AvatarGroupCount,\n});\n\nexport { AvatarNamespace as Avatar };\n"],"names":["forwardRef","jsxs","PrimitiveAvatar","cn","AvatarImage","AvatarFallback","jsx","AvatarBadge","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","AvatarGroup","AvatarGroupCount"],"mappings":"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"}
@@ -4,6 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var utils = require('./utils-BhM0B89p.js');
6
6
  var primitives_Checkbox = require('./primitives/Checkbox.js');
7
+ var fieldIds = require('./fieldIds-DiVU6GVS.js');
7
8
  var primitives_Field = require('./primitives/Field.js');
8
9
 
9
10
  const Checkbox = React.forwardRef(
@@ -15,12 +16,14 @@ const Checkbox = React.forwardRef(
15
16
  disabled = false,
16
17
  className,
17
18
  labelProps,
19
+ dataTestId,
18
20
  ...otherProps
19
21
  }, ref) => {
20
22
  const generatedId = React.useId();
21
23
  const id = otherProps.id ?? generatedId;
22
24
  const errorId = `error_${id}`;
23
25
  const helpTextId = `helpText_${id}`;
26
+ const testIdPrefix = fieldIds.buildTestIdPrefix(dataTestId, label);
24
27
  const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null].filter(Boolean).join(" ") || void 0;
25
28
  const hasField = !!(label || error || helpText);
26
29
  if (!hasField) {
@@ -34,7 +37,7 @@ const Checkbox = React.forwardRef(
34
37
  "aria-required": required || void 0,
35
38
  "aria-describedby": ariaDescribedBy,
36
39
  className,
37
- "data-testid": "nui-checkbox-container",
40
+ "data-testid": dataTestId ? `${testIdPrefix}-checkbox-input` : "nui-checkbox-container",
38
41
  ...otherProps
39
42
  }
40
43
  );
@@ -57,18 +60,34 @@ const Checkbox = React.forwardRef(
57
60
  "aria-invalid": !!error || void 0,
58
61
  "aria-required": required || void 0,
59
62
  "aria-describedby": ariaDescribedBy,
63
+ "data-testid": `${testIdPrefix}-checkbox-input`,
60
64
  ...otherProps
61
65
  }
62
66
  ),
63
67
  /* @__PURE__ */ jsxRuntime.jsxs(primitives_Field.FieldContent, { children: [
64
- label && /* @__PURE__ */ jsxRuntime.jsxs(primitives_Field.FieldLabel, { htmlFor: id, ...labelProps, children: [
65
- label,
66
- required && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" })
67
- ] }),
68
+ label && /* @__PURE__ */ jsxRuntime.jsxs(
69
+ primitives_Field.FieldLabel,
70
+ {
71
+ htmlFor: id,
72
+ "data-testid": `${testIdPrefix}-checkbox-label`,
73
+ ...labelProps,
74
+ children: [
75
+ label,
76
+ required && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" })
77
+ ]
78
+ }
79
+ ),
68
80
  helpText && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldDescription, { id: helpTextId, children: helpText })
69
81
  ] })
70
82
  ] }),
71
- error && /* @__PURE__ */ jsxRuntime.jsx(primitives_Field.FieldError, { "data-testid": "input-error", id: errorId, children: error })
83
+ error && /* @__PURE__ */ jsxRuntime.jsx(
84
+ primitives_Field.FieldError,
85
+ {
86
+ id: errorId,
87
+ "data-testid": `${testIdPrefix}-checkbox-error`,
88
+ children: error
89
+ }
90
+ )
72
91
  ]
73
92
  }
74
93
  );
@@ -77,4 +96,4 @@ const Checkbox = React.forwardRef(
77
96
  Checkbox.displayName = "Checkbox";
78
97
 
79
98
  exports.Checkbox = Checkbox;
80
- //# sourceMappingURL=Checkbox-7lX2aMKA.js.map
99
+ //# sourceMappingURL=Checkbox-83g1FDsc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox-83g1FDsc.js","sources":["../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { Checkbox as PrimitiveCheckbox } from \"src/primitives/Checkbox\";\nimport { buildTestIdPrefix } from \"src/utils/fieldIds\";\nimport {\n Field,\n FieldContent,\n FieldLabel,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\n\nexport interface CheckboxProps extends React.ComponentProps<\n typeof PrimitiveCheckbox\n> {\n /** Text displayed next to the checkbox. */\n label?: string;\n /** Error message displayed below the checkbox. */\n error?: string;\n /** Helper text displayed below the label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Shows a required indicator next to the label. */\n required?: boolean;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Prefix for the field's testid family(checkbox-input, checkbox-label, checkbox-error). Falls back to the hyphenized label. */\n dataTestId?: string;\n}\n\nconst Checkbox = forwardRef<\n React.ComponentRef<typeof PrimitiveCheckbox>,\n CheckboxProps\n>(\n (\n {\n label,\n error,\n helpText,\n required = false,\n disabled = false,\n className,\n labelProps,\n dataTestId,\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 const testIdPrefix = buildTestIdPrefix(dataTestId, label);\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const hasField = !!(label || error || helpText);\n\n if (!hasField) {\n return (\n <PrimitiveCheckbox\n ref={ref}\n id={id}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-required={required || undefined}\n aria-describedby={ariaDescribedBy}\n className={className}\n data-testid={\n dataTestId\n ? `${testIdPrefix}-checkbox-input`\n : \"nui-checkbox-container\"\n }\n {...otherProps}\n />\n );\n }\n\n return (\n <div\n className={cn(\"flex flex-col gap-1\", className)}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n data-testid=\"nui-checkbox-container\"\n >\n <Field orientation=\"horizontal\">\n <PrimitiveCheckbox\n ref={ref}\n id={id}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-required={required || undefined}\n aria-describedby={ariaDescribedBy}\n data-testid={`${testIdPrefix}-checkbox-input`}\n {...otherProps}\n />\n <FieldContent>\n {label && (\n <FieldLabel\n htmlFor={id}\n data-testid={`${testIdPrefix}-checkbox-label`}\n {...labelProps}\n >\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 </FieldContent>\n </Field>\n {error && (\n <FieldError\n id={errorId}\n data-testid={`${testIdPrefix}-checkbox-error`}\n >\n {error}\n </FieldError>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n"],"names":["forwardRef","useId","buildTestIdPrefix","jsx","PrimitiveCheckbox","jsxs","cn","Field","FieldContent","FieldLabel","FieldDescription","FieldError"],"mappings":"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"}
@@ -4,6 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
5
  var primitives_Table = require('./primitives/Table.js');
6
6
  var utils = require('./utils-BhM0B89p.js');
7
+ var hyphenize = require('./hyphenize-BTrVNVv3.js');
7
8
  var reactRouterDom = require('react-router-dom');
8
9
  var reactI18next = require('react-i18next');
9
10
  var primitives_Checkbox = require('./primitives/Checkbox.js');
@@ -3884,29 +3885,36 @@ const BulkSelectCallout = ({
3884
3885
  allRowsSelectedMessage,
3885
3886
  clearSelectionButtonLabel
3886
3887
  } = bulkSelectAllRowsProps;
3887
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 flex items-center justify-center gap-1 rounded-sm bg-primary/10 px-4 py-1.5 text-sm text-primary", children: isBulkAllSelected ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3888
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: allRowsSelectedMessage ?? selectAllRowMessage }),
3889
- /* @__PURE__ */ jsxRuntime.jsx(
3890
- primitives_Button.Button,
3891
- {
3892
- "data-testid": "clear-selections-button",
3893
- variant: "link",
3894
- onClick: onClearBulkSelection,
3895
- children: clearSelectionButtonLabel ?? "Clear selection"
3896
- }
3897
- )
3898
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3899
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: selectAllRowMessage }),
3900
- /* @__PURE__ */ jsxRuntime.jsx(
3901
- primitives_Button.Button,
3902
- {
3903
- "data-testid": "select-all-rows-button",
3904
- variant: "link",
3905
- onClick: onBulkSelectAll,
3906
- children: selectAllRowButtonLabel
3907
- }
3908
- )
3909
- ] }) });
3888
+ return /* @__PURE__ */ jsxRuntime.jsx(
3889
+ "div",
3890
+ {
3891
+ "data-testid": isBulkAllSelected ? "clear-selections-callout" : "select-all-rows-callout",
3892
+ className: "mb-2 flex items-center justify-center gap-1 rounded-sm bg-primary/10 px-4 py-1.5 text-sm text-primary",
3893
+ children: isBulkAllSelected ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3894
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: allRowsSelectedMessage ?? selectAllRowMessage }),
3895
+ /* @__PURE__ */ jsxRuntime.jsx(
3896
+ primitives_Button.Button,
3897
+ {
3898
+ "data-testid": "clear-selections-button",
3899
+ variant: "link",
3900
+ onClick: onClearBulkSelection,
3901
+ children: clearSelectionButtonLabel ?? "Clear selection"
3902
+ }
3903
+ )
3904
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
3905
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: selectAllRowMessage }),
3906
+ /* @__PURE__ */ jsxRuntime.jsx(
3907
+ primitives_Button.Button,
3908
+ {
3909
+ "data-testid": "select-all-rows-button",
3910
+ variant: "link",
3911
+ onClick: onBulkSelectAll,
3912
+ children: selectAllRowButtonLabel
3913
+ }
3914
+ )
3915
+ ] })
3916
+ }
3917
+ );
3910
3918
  };
3911
3919
 
3912
3920
  const DataTablePagination = ({
@@ -4135,6 +4143,7 @@ const HeaderDescription = ({
4135
4143
  info.Info,
4136
4144
  {
4137
4145
  "aria-hidden": "true",
4146
+ "data-testid": "column-info-icon",
4138
4147
  className: "size-4 text-muted-foreground"
4139
4148
  }
4140
4149
  )
@@ -4446,6 +4455,10 @@ const DataTable = ({
4446
4455
  const columnIndexInData = dataHeaders.findIndex(
4447
4456
  (dataHeader) => dataHeader.id === header.id
4448
4457
  );
4458
+ const headerDef = header.column.columnDef.header;
4459
+ const headerTitleTestId = `${hyphenize.hyphenize(
4460
+ typeof headerDef === "string" ? headerDef : void 0
4461
+ )}-header-title`;
4449
4462
  return /* @__PURE__ */ jsxRuntime.jsxs(
4450
4463
  primitives_Table.TableHead,
4451
4464
  {
@@ -4472,37 +4485,44 @@ const DataTable = ({
4472
4485
  header.isPlaceholder ? null : isSelectionCol ? flexRender(
4473
4486
  header.column.columnDef.header,
4474
4487
  header.getContext()
4475
- ) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
4476
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "me-auto flex min-w-0 items-center", children: [
4477
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: flexRender(
4478
- header.column.columnDef.header,
4479
- header.getContext()
4480
- ) }),
4481
- /* @__PURE__ */ jsxRuntime.jsx(HeaderDescription, { column: header.column })
4482
- ] }),
4483
- /* @__PURE__ */ jsxRuntime.jsx(SortIndicator, { column: header.column }),
4484
- showHeaderMenu && !isSelectionCol && /* @__PURE__ */ jsxRuntime.jsx(
4485
- HeaderCellMenu,
4486
- {
4487
- column: header.column,
4488
- columnIndex: columnIndexInData,
4489
- enableAddColumn,
4490
- enableColumnFreeze,
4491
- isColumnPinned: isColumnPinned(
4492
- header.column.id
4493
- ),
4494
- canMoveLeft: headerIndex > (selectionColumn ? 1 : 0),
4495
- canMoveRight: headerIndex < headerGroup.headers.length - 1,
4496
- onSort: handleSort,
4497
- onHideColumn: onColumnHideProp ? hideColumn : void 0,
4498
- onTogglePin: toggleColumnPin,
4499
- onAddColumn: onColumnAdd,
4500
- onDeleteColumn: onColumnDelete,
4501
- onMoveColumn: onColumnUpdate ? (colId, dir) => moveColumn(colId, dir) : void 0,
4502
- onMoreActionClick
4503
- }
4504
- )
4505
- ] }),
4488
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(
4489
+ "div",
4490
+ {
4491
+ "data-testid": headerTitleTestId,
4492
+ className: "flex items-center",
4493
+ children: [
4494
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "me-auto flex min-w-0 items-center", children: [
4495
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: flexRender(
4496
+ header.column.columnDef.header,
4497
+ header.getContext()
4498
+ ) }),
4499
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderDescription, { column: header.column })
4500
+ ] }),
4501
+ /* @__PURE__ */ jsxRuntime.jsx(SortIndicator, { column: header.column }),
4502
+ showHeaderMenu && !isSelectionCol && /* @__PURE__ */ jsxRuntime.jsx(
4503
+ HeaderCellMenu,
4504
+ {
4505
+ column: header.column,
4506
+ columnIndex: columnIndexInData,
4507
+ enableAddColumn,
4508
+ enableColumnFreeze,
4509
+ isColumnPinned: isColumnPinned(
4510
+ header.column.id
4511
+ ),
4512
+ canMoveLeft: headerIndex > (selectionColumn ? 1 : 0),
4513
+ canMoveRight: headerIndex < headerGroup.headers.length - 1,
4514
+ onSort: handleSort,
4515
+ onHideColumn: onColumnHideProp ? hideColumn : void 0,
4516
+ onTogglePin: toggleColumnPin,
4517
+ onAddColumn: onColumnAdd,
4518
+ onDeleteColumn: onColumnDelete,
4519
+ onMoveColumn: onColumnUpdate ? (colId, dir) => moveColumn(colId, dir) : void 0,
4520
+ onMoreActionClick
4521
+ }
4522
+ )
4523
+ ]
4524
+ }
4525
+ ),
4506
4526
  enableColumnResize && /* @__PURE__ */ jsxRuntime.jsx(
4507
4527
  ResizeHandle,
4508
4528
  {
@@ -4590,4 +4610,4 @@ exports.useColumnVisibility = useColumnVisibility;
4590
4610
  exports.useTablePagination = useTablePagination;
4591
4611
  exports.useTableSelection = useTableSelection;
4592
4612
  exports.useTableSort = useTableSort;
4593
- //# sourceMappingURL=DataTable-ChgPVrRB.js.map
4613
+ //# sourceMappingURL=DataTable-OtA15NKE.js.map