@j2-health/design-system 0.2.0 → 0.3.0

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 (316) hide show
  1. package/README.md +38 -9
  2. package/dist/index.cjs +102 -3614
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +54 -3551
  5. package/dist/index.js.map +1 -1
  6. package/dist/src/AppConfigProvider.cjs +13 -0
  7. package/dist/src/AppConfigProvider.cjs.map +1 -0
  8. package/dist/src/AppConfigProvider.js +13 -0
  9. package/dist/src/AppConfigProvider.js.map +1 -0
  10. package/dist/src/appTheme.cjs +268 -0
  11. package/dist/src/appTheme.cjs.map +1 -0
  12. package/dist/src/appTheme.js +268 -0
  13. package/dist/src/appTheme.js.map +1 -0
  14. package/dist/src/components/alert/Alert.cjs +95 -0
  15. package/dist/src/components/alert/Alert.cjs.map +1 -0
  16. package/dist/src/components/alert/Alert.js +78 -0
  17. package/dist/src/components/alert/Alert.js.map +1 -0
  18. package/dist/src/components/alert/Alert.module.css.cjs +9 -0
  19. package/dist/src/components/alert/Alert.module.css.cjs.map +1 -0
  20. package/dist/src/components/alert/Alert.module.css.js +9 -0
  21. package/dist/src/components/alert/Alert.module.css.js.map +1 -0
  22. package/dist/src/components/barchart/BarChart.cjs +155 -0
  23. package/dist/src/components/barchart/BarChart.cjs.map +1 -0
  24. package/dist/src/components/barchart/BarChart.js +155 -0
  25. package/dist/src/components/barchart/BarChart.js.map +1 -0
  26. package/dist/src/components/barchart/chart.module.css.cjs +9 -0
  27. package/dist/src/components/barchart/chart.module.css.cjs.map +1 -0
  28. package/dist/src/components/barchart/chart.module.css.js +9 -0
  29. package/dist/src/components/barchart/chart.module.css.js.map +1 -0
  30. package/dist/src/components/breadcrumb/Breadcrumb.cjs +38 -0
  31. package/dist/src/components/breadcrumb/Breadcrumb.cjs.map +1 -0
  32. package/dist/src/components/breadcrumb/Breadcrumb.js +21 -0
  33. package/dist/src/components/breadcrumb/Breadcrumb.js.map +1 -0
  34. package/dist/src/components/bulkActionBar/BulkActionBar.cjs +81 -0
  35. package/dist/src/components/bulkActionBar/BulkActionBar.cjs.map +1 -0
  36. package/dist/src/components/bulkActionBar/BulkActionBar.js +81 -0
  37. package/dist/src/components/bulkActionBar/BulkActionBar.js.map +1 -0
  38. package/dist/src/components/button/Button.cjs +21 -0
  39. package/dist/src/components/button/Button.cjs.map +1 -0
  40. package/dist/src/components/button/Button.js +21 -0
  41. package/dist/src/components/button/Button.js.map +1 -0
  42. package/dist/src/components/card/Card.cjs +36 -0
  43. package/dist/src/components/card/Card.cjs.map +1 -0
  44. package/dist/src/components/card/Card.js +36 -0
  45. package/dist/src/components/card/Card.js.map +1 -0
  46. package/dist/src/components/checkbox/Checkbox.cjs +10 -0
  47. package/dist/src/components/checkbox/Checkbox.cjs.map +1 -0
  48. package/dist/src/components/checkbox/Checkbox.js +10 -0
  49. package/dist/src/components/checkbox/Checkbox.js.map +1 -0
  50. package/dist/src/components/checkboxTree/CheckboxTree.cjs +140 -0
  51. package/dist/src/components/checkboxTree/CheckboxTree.cjs.map +1 -0
  52. package/dist/src/components/checkboxTree/CheckboxTree.js +140 -0
  53. package/dist/src/components/checkboxTree/CheckboxTree.js.map +1 -0
  54. package/dist/src/components/checkboxTree/TreeNode.cjs +92 -0
  55. package/dist/src/components/checkboxTree/TreeNode.cjs.map +1 -0
  56. package/dist/src/components/checkboxTree/TreeNode.js +92 -0
  57. package/dist/src/components/checkboxTree/TreeNode.js.map +1 -0
  58. package/dist/src/components/checkboxTree/utils.cjs +59 -0
  59. package/dist/src/components/checkboxTree/utils.cjs.map +1 -0
  60. package/dist/src/components/checkboxTree/utils.js +59 -0
  61. package/dist/src/components/checkboxTree/utils.js.map +1 -0
  62. package/dist/src/components/collapse/Collapse.cjs +81 -0
  63. package/dist/src/components/collapse/Collapse.cjs.map +1 -0
  64. package/dist/src/components/collapse/Collapse.js +64 -0
  65. package/dist/src/components/collapse/Collapse.js.map +1 -0
  66. package/dist/src/components/collapse/Collapse.module.css.cjs +13 -0
  67. package/dist/src/components/collapse/Collapse.module.css.cjs.map +1 -0
  68. package/dist/src/components/collapse/Collapse.module.css.js +13 -0
  69. package/dist/src/components/collapse/Collapse.module.css.js.map +1 -0
  70. package/dist/src/components/drawer/Drawer.cjs +39 -0
  71. package/dist/src/components/drawer/Drawer.cjs.map +1 -0
  72. package/dist/src/components/drawer/Drawer.js +39 -0
  73. package/dist/src/components/drawer/Drawer.js.map +1 -0
  74. package/dist/src/components/dropdown/Dropdown.cjs +58 -0
  75. package/dist/src/components/dropdown/Dropdown.cjs.map +1 -0
  76. package/dist/src/components/dropdown/Dropdown.js +58 -0
  77. package/dist/src/components/dropdown/Dropdown.js.map +1 -0
  78. package/dist/src/components/filterform/FilterGroup.cjs +64 -0
  79. package/dist/src/components/filterform/FilterGroup.cjs.map +1 -0
  80. package/dist/src/components/filterform/FilterGroup.js +64 -0
  81. package/dist/src/components/filterform/FilterGroup.js.map +1 -0
  82. package/dist/src/components/filterform/FilterInput.cjs +238 -0
  83. package/dist/src/components/filterform/FilterInput.cjs.map +1 -0
  84. package/dist/src/components/filterform/FilterInput.d.ts +1 -0
  85. package/dist/src/components/filterform/FilterInput.js +221 -0
  86. package/dist/src/components/filterform/FilterInput.js.map +1 -0
  87. package/dist/src/components/filterform/FiltersForm.cjs +168 -0
  88. package/dist/src/components/filterform/FiltersForm.cjs.map +1 -0
  89. package/dist/src/components/filterform/FiltersForm.js +168 -0
  90. package/dist/src/components/filterform/FiltersForm.js.map +1 -0
  91. package/dist/src/components/filterform/FiltersForm.module.css.cjs +21 -0
  92. package/dist/src/components/filterform/FiltersForm.module.css.cjs.map +1 -0
  93. package/dist/src/components/filterform/FiltersForm.module.css.js +21 -0
  94. package/dist/src/components/filterform/FiltersForm.module.css.js.map +1 -0
  95. package/dist/src/components/filterform/filterHelpers.cjs +71 -0
  96. package/dist/src/components/filterform/filterHelpers.cjs.map +1 -0
  97. package/dist/src/components/filterform/filterHelpers.d.ts +18 -4
  98. package/dist/src/components/filterform/filterHelpers.js +71 -0
  99. package/dist/src/components/filterform/filterHelpers.js.map +1 -0
  100. package/dist/src/components/filterform/index.d.ts +3 -1
  101. package/dist/src/components/filterform/types.d.ts +4 -2
  102. package/dist/src/components/filterform/useFilterField.cjs +245 -0
  103. package/dist/src/components/filterform/useFilterField.cjs.map +1 -0
  104. package/dist/src/components/filterform/useFilterField.d.ts +17 -1
  105. package/dist/src/components/filterform/useFilterField.js +228 -0
  106. package/dist/src/components/filterform/useFilterField.js.map +1 -0
  107. package/dist/src/components/filterform/useFiltersForm.cjs +160 -0
  108. package/dist/src/components/filterform/useFiltersForm.cjs.map +1 -0
  109. package/dist/src/components/filterform/useFiltersForm.js +160 -0
  110. package/dist/src/components/filterform/useFiltersForm.js.map +1 -0
  111. package/dist/src/components/form/Form.cjs +11 -0
  112. package/dist/src/components/form/Form.cjs.map +1 -0
  113. package/dist/src/components/form/Form.js +11 -0
  114. package/dist/src/components/form/Form.js.map +1 -0
  115. package/dist/src/components/icons/index.cjs +27 -0
  116. package/dist/src/components/icons/index.cjs.map +1 -0
  117. package/dist/src/components/icons/index.js +3 -0
  118. package/dist/src/components/icons/index.js.map +1 -0
  119. package/dist/src/components/input/AntdInput.cjs +13 -0
  120. package/dist/src/components/input/AntdInput.cjs.map +1 -0
  121. package/dist/src/components/input/AntdInput.js +13 -0
  122. package/dist/src/components/input/AntdInput.js.map +1 -0
  123. package/dist/src/components/input/AntdSearchInput.cjs +13 -0
  124. package/dist/src/components/input/AntdSearchInput.cjs.map +1 -0
  125. package/dist/src/components/input/AntdSearchInput.js +13 -0
  126. package/dist/src/components/input/AntdSearchInput.js.map +1 -0
  127. package/dist/src/components/input/Input.cjs +9 -0
  128. package/dist/src/components/input/Input.cjs.map +1 -0
  129. package/dist/src/components/input/Input.js +9 -0
  130. package/dist/src/components/input/Input.js.map +1 -0
  131. package/dist/src/components/inputnumber/InputNumber.cjs +32 -0
  132. package/dist/src/components/inputnumber/InputNumber.cjs.map +1 -0
  133. package/dist/src/components/inputnumber/InputNumber.js +32 -0
  134. package/dist/src/components/inputnumber/InputNumber.js.map +1 -0
  135. package/dist/src/components/inputnumber/InputNumber.module.css.cjs +9 -0
  136. package/dist/src/components/inputnumber/InputNumber.module.css.cjs.map +1 -0
  137. package/dist/src/components/inputnumber/InputNumber.module.css.js +9 -0
  138. package/dist/src/components/inputnumber/InputNumber.module.css.js.map +1 -0
  139. package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs +52 -0
  140. package/dist/src/components/legacyNavMenu/LegacyNavMenu.cjs.map +1 -0
  141. package/dist/src/components/legacyNavMenu/LegacyNavMenu.js +52 -0
  142. package/dist/src/components/legacyNavMenu/LegacyNavMenu.js.map +1 -0
  143. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs +48 -0
  144. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.cjs.map +1 -0
  145. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js +48 -0
  146. package/dist/src/components/legacyNavMenu/LegacyNavMenu.module.css.js.map +1 -0
  147. package/dist/src/components/legacyNavMenu/UserProfile.cjs +78 -0
  148. package/dist/src/components/legacyNavMenu/UserProfile.cjs.map +1 -0
  149. package/dist/src/components/legacyNavMenu/UserProfile.js +78 -0
  150. package/dist/src/components/legacyNavMenu/UserProfile.js.map +1 -0
  151. package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs +42 -0
  152. package/dist/src/components/legacyNavMenu/UserProfile.module.css.cjs.map +1 -0
  153. package/dist/src/components/legacyNavMenu/UserProfile.module.css.js +42 -0
  154. package/dist/src/components/legacyNavMenu/UserProfile.module.css.js.map +1 -0
  155. package/dist/src/components/listpopover/ListPopover.cjs +125 -0
  156. package/dist/src/components/listpopover/ListPopover.cjs.map +1 -0
  157. package/dist/src/components/listpopover/ListPopover.js +125 -0
  158. package/dist/src/components/listpopover/ListPopover.js.map +1 -0
  159. package/dist/src/components/listpopover/ListPopover.module.css.cjs +9 -0
  160. package/dist/src/components/listpopover/ListPopover.module.css.cjs.map +1 -0
  161. package/dist/src/components/listpopover/ListPopover.module.css.js +9 -0
  162. package/dist/src/components/listpopover/ListPopover.module.css.js.map +1 -0
  163. package/dist/src/components/menu/Menu.cjs +18 -0
  164. package/dist/src/components/menu/Menu.cjs.map +1 -0
  165. package/dist/src/components/menu/Menu.js +18 -0
  166. package/dist/src/components/menu/Menu.js.map +1 -0
  167. package/dist/src/components/menu/Menu.module.css.cjs +12 -0
  168. package/dist/src/components/menu/Menu.module.css.cjs.map +1 -0
  169. package/dist/src/components/menu/Menu.module.css.js +12 -0
  170. package/dist/src/components/menu/Menu.module.css.js.map +1 -0
  171. package/dist/src/components/message/Message.module.css.cjs +9 -0
  172. package/dist/src/components/message/Message.module.css.cjs.map +1 -0
  173. package/dist/src/components/message/Message.module.css.js +9 -0
  174. package/dist/src/components/message/Message.module.css.js.map +1 -0
  175. package/dist/src/components/message/useMessage.cjs +55 -0
  176. package/dist/src/components/message/useMessage.cjs.map +1 -0
  177. package/dist/src/components/message/useMessage.js +55 -0
  178. package/dist/src/components/message/useMessage.js.map +1 -0
  179. package/dist/src/components/modal/Modal.cjs +32 -0
  180. package/dist/src/components/modal/Modal.cjs.map +1 -0
  181. package/dist/src/components/modal/Modal.js +32 -0
  182. package/dist/src/components/modal/Modal.js.map +1 -0
  183. package/dist/src/components/navMenu/NavMenu.cjs +132 -0
  184. package/dist/src/components/navMenu/NavMenu.cjs.map +1 -0
  185. package/dist/src/components/navMenu/NavMenu.js +115 -0
  186. package/dist/src/components/navMenu/NavMenu.js.map +1 -0
  187. package/dist/src/components/navMenu/NavMenu.module.css.cjs +18 -0
  188. package/dist/src/components/navMenu/NavMenu.module.css.cjs.map +1 -0
  189. package/dist/src/components/navMenu/NavMenu.module.css.js +18 -0
  190. package/dist/src/components/navMenu/NavMenu.module.css.js.map +1 -0
  191. package/dist/src/components/notification/Notification.module.css.cjs +9 -0
  192. package/dist/src/components/notification/Notification.module.css.cjs.map +1 -0
  193. package/dist/src/components/notification/Notification.module.css.js +9 -0
  194. package/dist/src/components/notification/Notification.module.css.js.map +1 -0
  195. package/dist/src/components/notification/useNotification.cjs +52 -0
  196. package/dist/src/components/notification/useNotification.cjs.map +1 -0
  197. package/dist/src/components/notification/useNotification.js +52 -0
  198. package/dist/src/components/notification/useNotification.js.map +1 -0
  199. package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs +21 -0
  200. package/dist/src/components/notificationModal/NotifcationModal.module.css.cjs.map +1 -0
  201. package/dist/src/components/notificationModal/NotifcationModal.module.css.js +21 -0
  202. package/dist/src/components/notificationModal/NotifcationModal.module.css.js.map +1 -0
  203. package/dist/src/components/notificationModal/NotificationModal.cjs +57 -0
  204. package/dist/src/components/notificationModal/NotificationModal.cjs.map +1 -0
  205. package/dist/src/components/notificationModal/NotificationModal.js +57 -0
  206. package/dist/src/components/notificationModal/NotificationModal.js.map +1 -0
  207. package/dist/src/components/pagination/Pagination.cjs +65 -0
  208. package/dist/src/components/pagination/Pagination.cjs.map +1 -0
  209. package/dist/src/components/pagination/Pagination.js +65 -0
  210. package/dist/src/components/pagination/Pagination.js.map +1 -0
  211. package/dist/src/components/pagination/Pagination.module.css.cjs +6 -0
  212. package/dist/src/components/pagination/Pagination.module.css.cjs.map +1 -0
  213. package/dist/src/components/pagination/Pagination.module.css.js +7 -0
  214. package/dist/src/components/pagination/Pagination.module.css.js.map +1 -0
  215. package/dist/src/components/popover/Popover.cjs +41 -0
  216. package/dist/src/components/popover/Popover.cjs.map +1 -0
  217. package/dist/src/components/popover/Popover.js +41 -0
  218. package/dist/src/components/popover/Popover.js.map +1 -0
  219. package/dist/src/components/popover/Popover.module.css.cjs +33 -0
  220. package/dist/src/components/popover/Popover.module.css.cjs.map +1 -0
  221. package/dist/src/components/popover/Popover.module.css.js +33 -0
  222. package/dist/src/components/popover/Popover.module.css.js.map +1 -0
  223. package/dist/src/components/progress/Progress.cjs +9 -0
  224. package/dist/src/components/progress/Progress.cjs.map +1 -0
  225. package/dist/src/components/progress/Progress.js +9 -0
  226. package/dist/src/components/progress/Progress.js.map +1 -0
  227. package/dist/src/components/radio/Radio.cjs +24 -0
  228. package/dist/src/components/radio/Radio.cjs.map +1 -0
  229. package/dist/src/components/radio/Radio.js +24 -0
  230. package/dist/src/components/radio/Radio.js.map +1 -0
  231. package/dist/src/components/rate/Rate.cjs +22 -0
  232. package/dist/src/components/rate/Rate.cjs.map +1 -0
  233. package/dist/src/components/rate/Rate.js +22 -0
  234. package/dist/src/components/rate/Rate.js.map +1 -0
  235. package/dist/src/components/select/AntdSelect.cjs +76 -0
  236. package/dist/src/components/select/AntdSelect.cjs.map +1 -0
  237. package/dist/src/components/select/AntdSelect.js +60 -0
  238. package/dist/src/components/select/AntdSelect.js.map +1 -0
  239. package/dist/src/components/select/Select.cjs +107 -0
  240. package/dist/src/components/select/Select.cjs.map +1 -0
  241. package/dist/src/components/select/Select.js +107 -0
  242. package/dist/src/components/select/Select.js.map +1 -0
  243. package/dist/src/components/select/SummarizedSelect.cjs +455 -0
  244. package/dist/src/components/select/SummarizedSelect.cjs.map +1 -0
  245. package/dist/src/components/select/SummarizedSelect.js +455 -0
  246. package/dist/src/components/select/SummarizedSelect.js.map +1 -0
  247. package/dist/src/components/select/SummarizedSelect.module.css.cjs +30 -0
  248. package/dist/src/components/select/SummarizedSelect.module.css.cjs.map +1 -0
  249. package/dist/src/components/select/SummarizedSelect.module.css.js +30 -0
  250. package/dist/src/components/select/SummarizedSelect.module.css.js.map +1 -0
  251. package/dist/src/components/skeleton/Skeleton.cjs +14 -0
  252. package/dist/src/components/skeleton/Skeleton.cjs.map +1 -0
  253. package/dist/src/components/skeleton/Skeleton.js +14 -0
  254. package/dist/src/components/skeleton/Skeleton.js.map +1 -0
  255. package/dist/src/components/spinner/Spinner.cjs +20 -0
  256. package/dist/src/components/spinner/Spinner.cjs.map +1 -0
  257. package/dist/src/components/spinner/Spinner.js +20 -0
  258. package/dist/src/components/spinner/Spinner.js.map +1 -0
  259. package/dist/src/components/steps/Steps.cjs +50 -0
  260. package/dist/src/components/steps/Steps.cjs.map +1 -0
  261. package/dist/src/components/steps/Steps.js +50 -0
  262. package/dist/src/components/steps/Steps.js.map +1 -0
  263. package/dist/src/components/steps/useSteps.cjs +56 -0
  264. package/dist/src/components/steps/useSteps.cjs.map +1 -0
  265. package/dist/src/components/steps/useSteps.js +56 -0
  266. package/dist/src/components/steps/useSteps.js.map +1 -0
  267. package/dist/src/components/switch/Switch.cjs +28 -0
  268. package/dist/src/components/switch/Switch.cjs.map +1 -0
  269. package/dist/src/components/switch/Switch.js +28 -0
  270. package/dist/src/components/switch/Switch.js.map +1 -0
  271. package/dist/src/components/table/Table.cjs +117 -0
  272. package/dist/src/components/table/Table.cjs.map +1 -0
  273. package/dist/src/components/table/Table.js +117 -0
  274. package/dist/src/components/table/Table.js.map +1 -0
  275. package/dist/src/components/table/Table.module.css.cjs +12 -0
  276. package/dist/src/components/table/Table.module.css.cjs.map +1 -0
  277. package/dist/src/components/table/Table.module.css.js +12 -0
  278. package/dist/src/components/table/Table.module.css.js.map +1 -0
  279. package/dist/src/components/tabs/Tabs.cjs +10 -0
  280. package/dist/src/components/tabs/Tabs.cjs.map +1 -0
  281. package/dist/src/components/tabs/Tabs.js +10 -0
  282. package/dist/src/components/tabs/Tabs.js.map +1 -0
  283. package/dist/src/components/tag/Tag.cjs +74 -0
  284. package/dist/src/components/tag/Tag.cjs.map +1 -0
  285. package/dist/src/components/tag/Tag.js +57 -0
  286. package/dist/src/components/tag/Tag.js.map +1 -0
  287. package/dist/src/components/tooltip/Tooltip.cjs +14 -0
  288. package/dist/src/components/tooltip/Tooltip.cjs.map +1 -0
  289. package/dist/src/components/tooltip/Tooltip.js +14 -0
  290. package/dist/src/components/tooltip/Tooltip.js.map +1 -0
  291. package/dist/src/components/vennDiagram/VennDiagram.cjs +53 -0
  292. package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -0
  293. package/dist/src/components/vennDiagram/VennDiagram.js +53 -0
  294. package/dist/src/components/vennDiagram/VennDiagram.js.map +1 -0
  295. package/dist/src/svgs/ProgressCircle.svg.cjs +22 -0
  296. package/dist/src/svgs/ProgressCircle.svg.cjs.map +1 -0
  297. package/dist/src/svgs/ProgressCircle.svg.js +6 -0
  298. package/dist/src/svgs/ProgressCircle.svg.js.map +1 -0
  299. package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs +22 -0
  300. package/dist/src/svgs/j2-logo-menu-collapse.svg.cjs.map +1 -0
  301. package/dist/src/svgs/j2-logo-menu-collapse.svg.js +6 -0
  302. package/dist/src/svgs/j2-logo-menu-collapse.svg.js.map +1 -0
  303. package/dist/src/svgs/j2-logo-menu.svg.cjs +22 -0
  304. package/dist/src/svgs/j2-logo-menu.svg.cjs.map +1 -0
  305. package/dist/src/svgs/j2-logo-menu.svg.js +6 -0
  306. package/dist/src/svgs/j2-logo-menu.svg.js.map +1 -0
  307. package/dist/src/svgs/menu-sidebar-collapse.svg.cjs +22 -0
  308. package/dist/src/svgs/menu-sidebar-collapse.svg.cjs.map +1 -0
  309. package/dist/src/svgs/menu-sidebar-collapse.svg.js +6 -0
  310. package/dist/src/svgs/menu-sidebar-collapse.svg.js.map +1 -0
  311. package/dist/src/svgs/menu-sidebar-expand.svg.cjs +22 -0
  312. package/dist/src/svgs/menu-sidebar-expand.svg.cjs.map +1 -0
  313. package/dist/src/svgs/menu-sidebar-expand.svg.js +6 -0
  314. package/dist/src/svgs/menu-sidebar-expand.svg.js.map +1 -0
  315. package/dist/style.css +646 -646
  316. package/package.json +6 -6
@@ -0,0 +1,455 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const antd = require("antd");
5
+ const React = require("react");
6
+ const Icon = require("@ant-design/icons");
7
+ const cx = require("classnames");
8
+ const SummarizedSelect_module = require("./SummarizedSelect.module.css.cjs");
9
+ const Tag = require("../tag/Tag.cjs");
10
+ const react = require("@phosphor-icons/react");
11
+ const isGroupOption = (option) => {
12
+ return "options" in option;
13
+ };
14
+ const getAllOptions = (options) => {
15
+ if (!options) return [];
16
+ return options.flatMap(
17
+ (option) => isGroupOption(option) ? option.options : [option]
18
+ );
19
+ };
20
+ const filterOptions = (options, searchValue) => {
21
+ if (!options) return [];
22
+ if (!searchValue) return options;
23
+ return options.map((option) => {
24
+ var _a;
25
+ if (isGroupOption(option)) {
26
+ const filteredSubOptions = option.options.filter(
27
+ (subOption) => {
28
+ var _a2;
29
+ return (_a2 = subOption.label) == null ? void 0 : _a2.toString().toLowerCase().includes(searchValue.toLowerCase());
30
+ }
31
+ );
32
+ return filteredSubOptions.length > 0 ? { ...option, options: filteredSubOptions } : null;
33
+ } else {
34
+ return ((_a = option.label) == null ? void 0 : _a.toString().toLowerCase().includes(searchValue.toLowerCase())) ? option : null;
35
+ }
36
+ }).filter((option) => option !== null);
37
+ };
38
+ function SummarizedSelect({
39
+ searchPlaceholder,
40
+ formControlPlaceholder,
41
+ loading,
42
+ multiple,
43
+ value,
44
+ onChange,
45
+ options,
46
+ renderLabel,
47
+ rootClassName,
48
+ popupClassName,
49
+ variant,
50
+ trigger = "select",
51
+ defaultOpen = false,
52
+ ...props
53
+ }) {
54
+ const isHeadline = variant === "headlined";
55
+ const antVariant = isHeadline ? "borderless" : variant;
56
+ const [searchValue, setSearchValue] = React.useState("");
57
+ const [focusTrigger, setFocusTrigger] = React.useState(defaultOpen ? 1 : 0);
58
+ const [isOpen, setIsOpen] = React.useState(defaultOpen);
59
+ const inputRef = React.useRef(null);
60
+ const measureSpanRef = React.useRef(null);
61
+ const [measuredWidth, setMeasuredWidth] = React.useState();
62
+ const displayText = React.useMemo(() => {
63
+ if (multiple && value.length > 0) {
64
+ return renderLabel(value.length);
65
+ }
66
+ if (!multiple && value) {
67
+ const option = getAllOptions(options).find((opt) => opt.value === value);
68
+ return option ? String(option.label) : String(value);
69
+ }
70
+ return formControlPlaceholder ?? "";
71
+ }, [multiple, value, options, renderLabel, formControlPlaceholder]);
72
+ React.useEffect(() => {
73
+ if (!measureSpanRef.current) return;
74
+ setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46);
75
+ }, [displayText]);
76
+ React.useEffect(() => {
77
+ if (focusTrigger > 0) {
78
+ requestAnimationFrame(() => {
79
+ requestAnimationFrame(() => {
80
+ setTimeout(() => {
81
+ var _a;
82
+ (_a = inputRef.current) == null ? void 0 : _a.focus({ cursor: "end" });
83
+ }, 100);
84
+ });
85
+ });
86
+ }
87
+ }, [focusTrigger]);
88
+ const filteredOptions = React.useMemo(() => {
89
+ return filterOptions(options, searchValue);
90
+ }, [searchValue, options]);
91
+ const flatFilteredOptions = React.useMemo(() => {
92
+ return getAllOptions(filteredOptions);
93
+ }, [filteredOptions]);
94
+ const allFlatOptions = React.useMemo(() => {
95
+ return getAllOptions(options);
96
+ }, [options]);
97
+ const handleTagClose = (removedValue) => {
98
+ if (!multiple) return;
99
+ onChange(value.filter((x) => x !== removedValue));
100
+ };
101
+ const handleToggleAll = () => {
102
+ if (!multiple) return;
103
+ const allFilteredValues = getAllOptions(filteredOptions).map(
104
+ (opt) => opt.value
105
+ );
106
+ const someSelected = allFilteredValues.some((val) => value.includes(val));
107
+ if (someSelected) {
108
+ onChange(value.filter((val) => !allFilteredValues.includes(val)));
109
+ }
110
+ };
111
+ const handleSelectFirstOption = () => {
112
+ if (flatFilteredOptions.length === 0) return;
113
+ const firstOption = flatFilteredOptions[0];
114
+ if (!firstOption) return;
115
+ const optionValue = firstOption.value;
116
+ if (multiple) {
117
+ if (value.includes(optionValue)) {
118
+ onChange(value.filter((v) => v !== optionValue));
119
+ } else {
120
+ onChange([...value, optionValue]);
121
+ }
122
+ } else {
123
+ onChange(optionValue);
124
+ setIsOpen(false);
125
+ }
126
+ };
127
+ const handleOptionClick = (optionValue) => {
128
+ if (multiple) {
129
+ if (value.includes(optionValue)) {
130
+ onChange(value.filter((v) => v !== optionValue));
131
+ } else {
132
+ onChange([...value, optionValue]);
133
+ }
134
+ } else {
135
+ onChange(optionValue);
136
+ setIsOpen(false);
137
+ }
138
+ };
139
+ const handleKeyDown = (e) => {
140
+ const navigationKeys = ["ArrowUp", "ArrowDown"];
141
+ if (e.key === "Enter") {
142
+ e.preventDefault();
143
+ e.stopPropagation();
144
+ handleSelectFirstOption();
145
+ return;
146
+ }
147
+ if (e.key === "Escape") {
148
+ e.preventDefault();
149
+ e.stopPropagation();
150
+ setIsOpen(false);
151
+ return;
152
+ }
153
+ if (navigationKeys.includes(e.key)) {
154
+ e.preventDefault();
155
+ return;
156
+ }
157
+ e.stopPropagation();
158
+ };
159
+ const optionRender = (option) => {
160
+ if ("logo" in option.data && option.data.logo) {
161
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
162
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 shrink-0", children: option.data.logo }),
163
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "overflow-ellipsis overflow-hidden", children: option.label })
164
+ ] });
165
+ }
166
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { children: option.label });
167
+ };
168
+ const popupRender = (menu) => {
169
+ const valueToLabel = (val) => {
170
+ const option = allFlatOptions.find((opt) => opt.value === val);
171
+ return option ? option.label : val;
172
+ };
173
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
174
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 px-2 pb-2 border-b -mx-1 mt-1", children: /* @__PURE__ */ jsxRuntime.jsx(
175
+ antd.Input,
176
+ {
177
+ ref: inputRef,
178
+ autoFocus: true,
179
+ placeholder: searchPlaceholder || "Search...",
180
+ value: searchValue,
181
+ onChange: (e) => {
182
+ setSearchValue(e.target.value);
183
+ e.stopPropagation();
184
+ e.preventDefault();
185
+ },
186
+ onKeyDown: handleKeyDown,
187
+ onClick: (e) => e.stopPropagation(),
188
+ prefix: /* @__PURE__ */ jsxRuntime.jsx(
189
+ react.MagnifyingGlassIcon,
190
+ {
191
+ size: 16,
192
+ className: "text-j2-text-placeholder"
193
+ }
194
+ ),
195
+ allowClear: true
196
+ },
197
+ focusTrigger
198
+ ) }),
199
+ multiple && value.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-2 pb-2", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-y-1", children: value.map((value2) => /* @__PURE__ */ jsxRuntime.jsx(
200
+ Tag.Tag,
201
+ {
202
+ className: "opacity-100 z-10 flex max-w-full",
203
+ status: "default",
204
+ closable: true,
205
+ onClose: () => handleTagClose(value2),
206
+ children: /* @__PURE__ */ jsxRuntime.jsx(
207
+ "span",
208
+ {
209
+ className: "overflow-ellipsis overflow-hidden",
210
+ title: valueToLabel(value2),
211
+ children: valueToLabel(value2)
212
+ }
213
+ )
214
+ },
215
+ value2
216
+ )) }) }) : null,
217
+ /* @__PURE__ */ jsxRuntime.jsx(
218
+ "div",
219
+ {
220
+ className: cx(SummarizedSelect_module.default.menuContainer, "rounded-lg", {
221
+ [SummarizedSelect_module.default.headlinedMenuContainer]: isHeadline,
222
+ [SummarizedSelect_module.default.menuContainerMultiple]: multiple
223
+ }),
224
+ children: menu
225
+ }
226
+ ),
227
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-between items-center", children: multiple && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full mt-1 pt-1 border-t border-j2-border-secondary", children: /* @__PURE__ */ jsxRuntime.jsx(
228
+ "div",
229
+ {
230
+ "aria-selected": "false",
231
+ className: cx(
232
+ "ant-select-item ant-select-item-option w-full",
233
+ SummarizedSelect_module.default.clearAllButton
234
+ ),
235
+ title: "Clear all",
236
+ onClick: handleToggleAll,
237
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "ant-select-item-option-content text-center font-semibold", children: "Clear all" })
238
+ }
239
+ ) }) })
240
+ ] });
241
+ };
242
+ const handleOpenChange = (open) => {
243
+ setIsOpen(open);
244
+ if (open) {
245
+ setFocusTrigger((prev) => prev + 1);
246
+ } else {
247
+ setSearchValue("");
248
+ }
249
+ };
250
+ const renderDropdownOptionRow = (option) => {
251
+ const optionValue = option.value;
252
+ const isSelected = multiple ? value.includes(optionValue) : value === optionValue;
253
+ const hasLogo = "logo" in option && option.logo;
254
+ return /* @__PURE__ */ jsxRuntime.jsx(
255
+ "div",
256
+ {
257
+ role: "option",
258
+ "aria-selected": isSelected,
259
+ onClick: () => handleOptionClick(optionValue),
260
+ className: cx(
261
+ "px-3 py-1.5 rounded cursor-pointer text-sm",
262
+ isSelected ? "bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]" : "hover:bg-[var(--j2-color-bg-hover)]"
263
+ ),
264
+ children: hasLogo ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
265
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 shrink-0", children: option.logo }),
266
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "overflow-hidden overflow-ellipsis", children: option.label })
267
+ ] }) : option.label
268
+ },
269
+ optionValue
270
+ );
271
+ };
272
+ const dropdownPopupRender = () => {
273
+ const valueToLabel = (val) => {
274
+ const option = allFlatOptions.find((opt) => opt.value === val);
275
+ return option ? option.label : val;
276
+ };
277
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-white rounded-lg shadow-md p-2 min-w-[240px]", children: [
278
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pb-2 border-b border-j2-border-secondary", children: /* @__PURE__ */ jsxRuntime.jsx(
279
+ antd.Input,
280
+ {
281
+ ref: inputRef,
282
+ autoFocus: true,
283
+ placeholder: searchPlaceholder || "Search...",
284
+ value: searchValue,
285
+ onChange: (e) => {
286
+ setSearchValue(e.target.value);
287
+ e.stopPropagation();
288
+ },
289
+ onKeyDown: handleKeyDown,
290
+ onClick: (e) => e.stopPropagation(),
291
+ prefix: /* @__PURE__ */ jsxRuntime.jsx(
292
+ react.MagnifyingGlassIcon,
293
+ {
294
+ size: 16,
295
+ className: "text-j2-text-placeholder"
296
+ }
297
+ ),
298
+ allowClear: true
299
+ },
300
+ focusTrigger
301
+ ) }),
302
+ multiple && value.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-1 pt-2", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-y-1", children: value.map((v) => /* @__PURE__ */ jsxRuntime.jsx(
303
+ Tag.Tag,
304
+ {
305
+ className: "opacity-100 z-10 flex max-w-full",
306
+ status: "default",
307
+ closable: true,
308
+ onClose: () => handleTagClose(v),
309
+ children: /* @__PURE__ */ jsxRuntime.jsx(
310
+ "span",
311
+ {
312
+ className: "overflow-ellipsis overflow-hidden",
313
+ title: valueToLabel(v),
314
+ children: valueToLabel(v)
315
+ }
316
+ )
317
+ },
318
+ v
319
+ )) }) }),
320
+ /* @__PURE__ */ jsxRuntime.jsx(
321
+ "div",
322
+ {
323
+ className: "max-h-72 overflow-y-auto py-1",
324
+ role: "listbox",
325
+ "aria-multiselectable": multiple || void 0,
326
+ children: filteredOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]", children: "No options found" }) : filteredOptions.map((opt) => {
327
+ if (isGroupOption(opt)) {
328
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
329
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-3 pt-2 pb-1 text-xs font-semibold uppercase tracking-wide text-[var(--j2-color-text-tertiary)]", children: opt.label }),
330
+ opt.options.map(renderDropdownOptionRow)
331
+ ] }, `group-${opt.label}`);
332
+ }
333
+ return renderDropdownOptionRow(opt);
334
+ })
335
+ }
336
+ ),
337
+ multiple && value.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1 pt-1 border-t border-j2-border-secondary", children: /* @__PURE__ */ jsxRuntime.jsx(
338
+ "div",
339
+ {
340
+ role: "button",
341
+ "aria-label": "Clear all",
342
+ title: "Clear all",
343
+ onClick: handleToggleAll,
344
+ className: cx(
345
+ "text-center font-semibold text-sm py-1.5 rounded cursor-pointer",
346
+ SummarizedSelect_module.default.clearAllButton
347
+ ),
348
+ children: "Clear all"
349
+ }
350
+ ) })
351
+ ] });
352
+ };
353
+ if (trigger === "dropdown") {
354
+ const hasSelection = multiple ? value.length > 0 : Boolean(value);
355
+ const triggerContent = /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex items-center gap-1", children: [
356
+ hasSelection ? displayText : formControlPlaceholder ?? "Select",
357
+ loading ? /* @__PURE__ */ jsxRuntime.jsx(
358
+ antd.Spin,
359
+ {
360
+ indicator: /* @__PURE__ */ jsxRuntime.jsx(Icon.LoadingOutlined, { spin: true }),
361
+ size: "small",
362
+ "data-testid": "loading-spinner"
363
+ }
364
+ ) : /* @__PURE__ */ jsxRuntime.jsx(react.CaretDownIcon, { weight: "regular", "data-testid": "caret-down" })
365
+ ] });
366
+ return /* @__PURE__ */ jsxRuntime.jsx(
367
+ antd.Dropdown,
368
+ {
369
+ open: isOpen,
370
+ onOpenChange: handleOpenChange,
371
+ trigger: ["click"],
372
+ disabled: props.disabled,
373
+ popupRender: dropdownPopupRender,
374
+ children: /* @__PURE__ */ jsxRuntime.jsx(
375
+ antd.Typography.Link,
376
+ {
377
+ disabled: props.disabled,
378
+ className: cx("inline-flex", rootClassName),
379
+ children: triggerContent
380
+ }
381
+ )
382
+ }
383
+ );
384
+ }
385
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
386
+ /* @__PURE__ */ jsxRuntime.jsx(
387
+ "span",
388
+ {
389
+ ref: measureSpanRef,
390
+ "aria-hidden": true,
391
+ style: {
392
+ position: "absolute",
393
+ visibility: "hidden",
394
+ whiteSpace: "nowrap",
395
+ fontSize: "inherit"
396
+ },
397
+ children: displayText
398
+ }
399
+ ),
400
+ /* @__PURE__ */ jsxRuntime.jsx(
401
+ antd.Select,
402
+ {
403
+ open: isOpen,
404
+ showSearch: false,
405
+ style: { width: measuredWidth },
406
+ suffixIcon: loading ? /* @__PURE__ */ jsxRuntime.jsx(
407
+ antd.Spin,
408
+ {
409
+ indicator: /* @__PURE__ */ jsxRuntime.jsx(Icon.LoadingOutlined, { spin: true }),
410
+ size: "small",
411
+ "data-testid": "loading-spinner"
412
+ }
413
+ ) : /* @__PURE__ */ jsxRuntime.jsx(react.CaretDownIcon, { size: 14, "data-testid": "caret-down" }),
414
+ placeholder: formControlPlaceholder,
415
+ mode: multiple ? "multiple" : void 0,
416
+ value,
417
+ maxTagCount: 0,
418
+ maxTagPlaceholder: multiple ? () => renderLabel(value.length) : value,
419
+ options: filteredOptions,
420
+ onChange: (val) => {
421
+ if (multiple) {
422
+ if (Array.isArray(val)) {
423
+ onChange(val);
424
+ } else {
425
+ throw new Error("Value should be an array in multiple mode");
426
+ }
427
+ } else {
428
+ if (typeof val === "string") {
429
+ onChange(val);
430
+ } else {
431
+ throw new Error(
432
+ "Value should be a string in single selection mode"
433
+ );
434
+ }
435
+ }
436
+ },
437
+ popupRender,
438
+ optionRender,
439
+ onOpenChange: handleOpenChange,
440
+ classNames: {
441
+ root: cx(rootClassName, SummarizedSelect_module.default.summarizedSelect, {
442
+ [SummarizedSelect_module.default.hemisphericSelect]: variant !== "underlined" && variant !== "headlined",
443
+ [SummarizedSelect_module.default.isActive]: multiple && value.length > 0 && variant !== "underlined" && variant !== "headlined",
444
+ [SummarizedSelect_module.default.headlinedSelect]: isHeadline
445
+ }),
446
+ popup: { root: popupClassName }
447
+ },
448
+ variant: antVariant,
449
+ ...props
450
+ }
451
+ )
452
+ ] });
453
+ }
454
+ exports.SummarizedSelect = SummarizedSelect;
455
+ //# sourceMappingURL=SummarizedSelect.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SummarizedSelect.cjs","sources":["../../../../src/components/select/SummarizedSelect.tsx"],"sourcesContent":["import {\n Dropdown as AntdDropdown,\n Select,\n Spin,\n Input,\n SelectProps,\n InputRef,\n Typography,\n} from 'antd'\nimport { DefaultOptionType } from 'antd/es/select'\nimport { useState, useMemo, useRef, useEffect } from 'react'\nimport { LoadingOutlined } from '@ant-design/icons'\nimport type { FlattenOptionData } from 'rc-select/lib/interface'\nimport * as icons from '../icons'\nimport { Tag } from '../tag'\nimport cx from 'classnames'\n\nimport styles from './SummarizedSelect.module.css'\n\ntype Option = DefaultOptionType\ntype OptionWithLogo = Option & {\n logo: React.ReactNode\n}\n\ntype GroupOption = {\n label: string\n options: Option[]\n}\n\nexport type SelectOption = Option | GroupOption | OptionWithLogo\n\nexport type SummarizedSelectVariant = SelectProps['variant'] | 'headlined'\n\nexport type SummarizedSelectTrigger = 'select' | 'dropdown'\n\ntype BaseProps = Omit<\n SelectProps<string | string[], SelectOption>,\n 'mode' | 'value' | 'onChange' | 'variant'\n> & {\n searchPlaceholder?: string\n formControlPlaceholder?: string\n rootClassName?: string\n popupClassName?: string\n variant?: SummarizedSelectVariant\n /**\n * Shape of the control that opens the popup.\n * - `'select'` (default): antd Select, styled by `variant`.\n * - `'dropdown'`: antd Dropdown with a `Typography.Link` target (label + caret).\n * Ignores `variant` — the trigger is always a link.\n */\n trigger?: SummarizedSelectTrigger\n defaultOpen?: boolean\n\n loading?: boolean\n}\n\ntype SingleProps = {\n multiple?: false\n renderLabel?: undefined\n value: string | undefined\n onChange: (newValue: string) => void\n}\n\ntype MultiProps = {\n multiple: true\n renderLabel: (count: number) => string\n value: string[]\n onChange: (newValue: string[]) => void\n}\n\nexport type Props = BaseProps & (SingleProps | MultiProps)\n\nconst isGroupOption = (option: SelectOption): option is GroupOption => {\n return 'options' in option\n}\n\nconst getAllOptions = (options: SelectOption[] | undefined): Option[] => {\n if (!options) return []\n\n return options.flatMap((option) =>\n isGroupOption(option) ? option.options : [option]\n )\n}\n\nconst filterOptions = (\n options: SelectOption[] | undefined,\n searchValue: string\n): SelectOption[] => {\n if (!options) return []\n if (!searchValue) return options\n\n return options\n .map((option) => {\n if (isGroupOption(option)) {\n const filteredSubOptions = option.options.filter((subOption) =>\n subOption.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n )\n return filteredSubOptions.length > 0\n ? { ...option, options: filteredSubOptions }\n : null\n } else {\n return option.label\n ?.toString()\n .toLowerCase()\n .includes(searchValue.toLowerCase())\n ? option\n : null\n }\n })\n .filter((option): option is SelectOption => option !== null)\n}\n\nexport function SummarizedSelect({\n searchPlaceholder,\n formControlPlaceholder,\n loading,\n multiple,\n value,\n onChange,\n options,\n renderLabel,\n rootClassName,\n popupClassName,\n variant,\n trigger = 'select',\n defaultOpen = false,\n ...props\n}: Props) {\n const isHeadline = variant === 'headlined'\n const antVariant = isHeadline ? 'borderless' : variant\n const [searchValue, setSearchValue] = useState('')\n const [focusTrigger, setFocusTrigger] = useState(defaultOpen ? 1 : 0)\n const [isOpen, setIsOpen] = useState(defaultOpen)\n const inputRef = useRef<InputRef>(null)\n const measureSpanRef = useRef<HTMLSpanElement>(null)\n const [measuredWidth, setMeasuredWidth] = useState<number>()\n\n const displayText = useMemo(() => {\n if (multiple && value.length > 0) {\n return renderLabel(value.length)\n }\n if (!multiple && value) {\n const option = getAllOptions(options).find((opt) => opt.value === value)\n return option ? String(option.label) : String(value)\n }\n return formControlPlaceholder ?? ''\n }, [multiple, value, options, renderLabel, formControlPlaceholder])\n\n useEffect(() => {\n if (!measureSpanRef.current) return\n // padding (22px = 11px each side) + arrow (18px) + border (6px)\n setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46)\n }, [displayText])\n\n useEffect(() => {\n if (focusTrigger > 0) {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n setTimeout(() => {\n inputRef.current?.focus({ cursor: 'end' })\n }, 100)\n })\n })\n }\n }, [focusTrigger])\n\n const filteredOptions = useMemo(() => {\n return filterOptions(options, searchValue)\n }, [searchValue, options])\n\n const flatFilteredOptions = useMemo(() => {\n return getAllOptions(filteredOptions)\n }, [filteredOptions])\n\n const allFlatOptions = useMemo(() => {\n return getAllOptions(options)\n }, [options])\n\n const handleTagClose = (removedValue: string) => {\n if (!multiple) return\n\n onChange(value.filter((x) => x !== removedValue))\n }\n\n const handleToggleAll = () => {\n if (!multiple) return\n\n const allFilteredValues = getAllOptions(filteredOptions).map(\n (opt) => opt.value as string\n )\n const someSelected = allFilteredValues.some((val) => value.includes(val))\n\n if (someSelected) {\n onChange(value.filter((val) => !allFilteredValues.includes(val)))\n }\n }\n\n const handleSelectFirstOption = () => {\n if (flatFilteredOptions.length === 0) return\n\n const firstOption = flatFilteredOptions[0]\n if (!firstOption) return\n\n const optionValue = firstOption.value as string\n\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleOptionClick = (optionValue: string) => {\n if (multiple) {\n if (value.includes(optionValue)) {\n onChange(value.filter((v) => v !== optionValue))\n } else {\n onChange([...value, optionValue])\n }\n } else {\n onChange(optionValue)\n setIsOpen(false)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Allow these navigation keys to bubble up to Select's native keyboard handler\n const navigationKeys = ['ArrowUp', 'ArrowDown']\n\n // Handle Enter - select first filtered option (custom behavior)\n if (e.key === 'Enter') {\n e.preventDefault()\n e.stopPropagation()\n handleSelectFirstOption()\n return\n }\n\n // Handle Escape - close dropdown (custom behavior)\n if (e.key === 'Escape') {\n e.preventDefault()\n e.stopPropagation()\n setIsOpen(false)\n return\n }\n\n // For arrow keys, prevent cursor movement but allow propagation to Select\n if (navigationKeys.includes(e.key)) {\n e.preventDefault() // Prevents cursor from moving to start/end of input text\n // Do NOT call stopPropagation() - let event bubble to Select component\n return\n }\n\n // For all other keys (including Backspace), stop propagation\n // This prevents backspace from removing tags in multiple mode\n e.stopPropagation()\n }\n\n const optionRender = (option: FlattenOptionData<SelectOption>) => {\n if ('logo' in option.data && option.data.logo) {\n return (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">{option.data.logo}</div>\n <span className=\"overflow-ellipsis overflow-hidden\">\n {option.label}\n </span>\n </div>\n )\n }\n return <div>{option.label}</div>\n }\n\n const popupRender = (menu: React.ReactElement) => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div>\n <div className=\"mb-2 px-2 pb-2 border-b -mx-1 mt-1\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n e.preventDefault()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 ? (\n <div className=\"px-2 pb-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((value) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={value}\n status=\"default\"\n closable\n onClose={() => handleTagClose(value)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(value)}\n >\n {valueToLabel(value)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n ) : null}\n <div\n className={cx(styles.menuContainer, 'rounded-lg', {\n [styles.headlinedMenuContainer]: isHeadline,\n [styles.menuContainerMultiple]: multiple,\n })}\n >\n {menu}\n </div>\n <div className=\"flex justify-between items-center\">\n {multiple && (\n <div className=\"w-full mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n aria-selected=\"false\"\n className={cx(\n 'ant-select-item ant-select-item-option w-full',\n styles.clearAllButton\n )}\n title=\"Clear all\"\n onClick={handleToggleAll}\n >\n <div className=\"ant-select-item-option-content text-center font-semibold\">\n Clear all\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n }\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open)\n if (open) {\n // Trigger focus by updating the counter\n setFocusTrigger((prev) => prev + 1)\n } else {\n setSearchValue('')\n }\n }\n\n const renderDropdownOptionRow = (option: Option) => {\n const optionValue = option.value as string\n const isSelected = multiple\n ? value.includes(optionValue)\n : value === optionValue\n const hasLogo = 'logo' in option && (option as OptionWithLogo).logo\n return (\n <div\n key={optionValue}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => handleOptionClick(optionValue)}\n className={cx(\n 'px-3 py-1.5 rounded cursor-pointer text-sm',\n isSelected\n ? 'bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]'\n : 'hover:bg-[var(--j2-color-bg-hover)]'\n )}\n >\n {hasLogo ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"h-4 shrink-0\">\n {(option as OptionWithLogo).logo}\n </div>\n <span className=\"overflow-hidden overflow-ellipsis\">\n {option.label}\n </span>\n </div>\n ) : (\n option.label\n )}\n </div>\n )\n }\n\n const dropdownPopupRender = () => {\n const valueToLabel = (val: string) => {\n const option = allFlatOptions.find((opt) => opt.value === val)\n return option ? (option.label as string) : val\n }\n\n return (\n <div className=\"bg-white rounded-lg shadow-md p-2 min-w-[240px]\">\n <div className=\"pb-2 border-b border-j2-border-secondary\">\n <Input\n ref={inputRef}\n key={focusTrigger}\n autoFocus\n placeholder={searchPlaceholder || 'Search...'}\n value={searchValue}\n onChange={(e) => {\n setSearchValue(e.target.value)\n e.stopPropagation()\n }}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n prefix={\n <icons.MagnifyingGlassIcon\n size={16}\n className=\"text-j2-text-placeholder\"\n />\n }\n allowClear\n />\n </div>\n {multiple && value.length > 0 && (\n <div className=\"px-1 pt-2\">\n <div className=\"flex flex-wrap gap-y-1\">\n {(value as string[]).map((v) => (\n <Tag\n className=\"opacity-100 z-10 flex max-w-full\"\n key={v}\n status=\"default\"\n closable\n onClose={() => handleTagClose(v)}\n >\n <span\n className=\"overflow-ellipsis overflow-hidden\"\n title={valueToLabel(v)}\n >\n {valueToLabel(v)}\n </span>\n </Tag>\n ))}\n </div>\n </div>\n )}\n <div\n className=\"max-h-72 overflow-y-auto py-1\"\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]\">\n No options found\n </div>\n ) : (\n filteredOptions.map((opt) => {\n if (isGroupOption(opt)) {\n return (\n <div key={`group-${opt.label}`}>\n <div className=\"px-3 pt-2 pb-1 text-xs font-semibold uppercase tracking-wide text-[var(--j2-color-text-tertiary)]\">\n {opt.label}\n </div>\n {opt.options.map(renderDropdownOptionRow)}\n </div>\n )\n }\n return renderDropdownOptionRow(opt)\n })\n )}\n </div>\n {multiple && value.length > 0 && (\n <div className=\"mt-1 pt-1 border-t border-j2-border-secondary\">\n <div\n role=\"button\"\n aria-label=\"Clear all\"\n title=\"Clear all\"\n onClick={handleToggleAll}\n className={cx(\n 'text-center font-semibold text-sm py-1.5 rounded cursor-pointer',\n styles.clearAllButton\n )}\n >\n Clear all\n </div>\n </div>\n )}\n </div>\n )\n }\n\n if (trigger === 'dropdown') {\n const hasSelection = multiple ? value.length > 0 : Boolean(value)\n const triggerContent = (\n <span className=\"inline-flex items-center gap-1\">\n {hasSelection ? displayText : (formControlPlaceholder ?? 'Select')}\n {loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon weight=\"regular\" data-testid=\"caret-down\" />\n )}\n </span>\n )\n\n return (\n <AntdDropdown\n open={isOpen}\n onOpenChange={handleOpenChange}\n trigger={['click']}\n disabled={props.disabled}\n popupRender={dropdownPopupRender}\n >\n <Typography.Link\n disabled={props.disabled}\n className={cx('inline-flex', rootClassName)}\n >\n {triggerContent}\n </Typography.Link>\n </AntdDropdown>\n )\n }\n\n return (\n <>\n <span\n ref={measureSpanRef}\n aria-hidden\n style={{\n position: 'absolute',\n visibility: 'hidden',\n whiteSpace: 'nowrap',\n fontSize: 'inherit',\n }}\n >\n {displayText}\n </span>\n <Select<string | string[], SelectOption>\n open={isOpen}\n showSearch={false}\n style={{ width: measuredWidth }}\n suffixIcon={\n loading ? (\n <Spin\n indicator={<LoadingOutlined spin />}\n size=\"small\"\n data-testid=\"loading-spinner\"\n />\n ) : (\n <icons.CaretDownIcon size={14} data-testid=\"caret-down\" />\n )\n }\n placeholder={formControlPlaceholder}\n mode={multiple ? 'multiple' : undefined}\n value={value}\n maxTagCount={0}\n maxTagPlaceholder={multiple ? () => renderLabel(value.length) : value}\n options={filteredOptions}\n onChange={(val) => {\n if (multiple) {\n if (Array.isArray(val)) {\n onChange(val)\n } else {\n throw new Error('Value should be an array in multiple mode')\n }\n } else {\n if (typeof val === 'string') {\n onChange(val)\n } else {\n throw new Error(\n 'Value should be a string in single selection mode'\n )\n }\n }\n }}\n popupRender={popupRender}\n optionRender={optionRender}\n onOpenChange={handleOpenChange}\n classNames={{\n root: cx(rootClassName, styles.summarizedSelect, {\n [styles.hemisphericSelect]:\n variant !== 'underlined' && variant !== 'headlined',\n [styles.isActive]:\n multiple &&\n value.length > 0 &&\n variant !== 'underlined' &&\n variant !== 'headlined',\n [styles.headlinedSelect]: isHeadline,\n }),\n popup: { root: popupClassName },\n }}\n variant={antVariant}\n {...props}\n />\n </>\n )\n}\n"],"names":["_a","useState","useRef","useMemo","useEffect","jsxs","jsx","Input","icons.MagnifyingGlassIcon","value","Tag","styles","Spin","LoadingOutlined","icons.CaretDownIcon","AntdDropdown","Typography","Fragment","Select"],"mappings":"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"}