@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
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { Dropdown, Typography, Select, Spin, Input } from "antd";
3
+ import { useState, useRef, useMemo, useEffect } from "react";
4
+ import { LoadingOutlined } from "@ant-design/icons";
5
+ import cx from "classnames";
6
+ import styles from "./SummarizedSelect.module.css.js";
7
+ import { Tag } from "../tag/Tag.js";
8
+ import { CaretDownIcon, MagnifyingGlassIcon } from "@phosphor-icons/react";
9
+ const isGroupOption = (option) => {
10
+ return "options" in option;
11
+ };
12
+ const getAllOptions = (options) => {
13
+ if (!options) return [];
14
+ return options.flatMap(
15
+ (option) => isGroupOption(option) ? option.options : [option]
16
+ );
17
+ };
18
+ const filterOptions = (options, searchValue) => {
19
+ if (!options) return [];
20
+ if (!searchValue) return options;
21
+ return options.map((option) => {
22
+ var _a;
23
+ if (isGroupOption(option)) {
24
+ const filteredSubOptions = option.options.filter(
25
+ (subOption) => {
26
+ var _a2;
27
+ return (_a2 = subOption.label) == null ? void 0 : _a2.toString().toLowerCase().includes(searchValue.toLowerCase());
28
+ }
29
+ );
30
+ return filteredSubOptions.length > 0 ? { ...option, options: filteredSubOptions } : null;
31
+ } else {
32
+ return ((_a = option.label) == null ? void 0 : _a.toString().toLowerCase().includes(searchValue.toLowerCase())) ? option : null;
33
+ }
34
+ }).filter((option) => option !== null);
35
+ };
36
+ function SummarizedSelect({
37
+ searchPlaceholder,
38
+ formControlPlaceholder,
39
+ loading,
40
+ multiple,
41
+ value,
42
+ onChange,
43
+ options,
44
+ renderLabel,
45
+ rootClassName,
46
+ popupClassName,
47
+ variant,
48
+ trigger = "select",
49
+ defaultOpen = false,
50
+ ...props
51
+ }) {
52
+ const isHeadline = variant === "headlined";
53
+ const antVariant = isHeadline ? "borderless" : variant;
54
+ const [searchValue, setSearchValue] = useState("");
55
+ const [focusTrigger, setFocusTrigger] = useState(defaultOpen ? 1 : 0);
56
+ const [isOpen, setIsOpen] = useState(defaultOpen);
57
+ const inputRef = useRef(null);
58
+ const measureSpanRef = useRef(null);
59
+ const [measuredWidth, setMeasuredWidth] = useState();
60
+ const displayText = useMemo(() => {
61
+ if (multiple && value.length > 0) {
62
+ return renderLabel(value.length);
63
+ }
64
+ if (!multiple && value) {
65
+ const option = getAllOptions(options).find((opt) => opt.value === value);
66
+ return option ? String(option.label) : String(value);
67
+ }
68
+ return formControlPlaceholder ?? "";
69
+ }, [multiple, value, options, renderLabel, formControlPlaceholder]);
70
+ useEffect(() => {
71
+ if (!measureSpanRef.current) return;
72
+ setMeasuredWidth(Math.ceil(measureSpanRef.current.offsetWidth) + 46);
73
+ }, [displayText]);
74
+ useEffect(() => {
75
+ if (focusTrigger > 0) {
76
+ requestAnimationFrame(() => {
77
+ requestAnimationFrame(() => {
78
+ setTimeout(() => {
79
+ var _a;
80
+ (_a = inputRef.current) == null ? void 0 : _a.focus({ cursor: "end" });
81
+ }, 100);
82
+ });
83
+ });
84
+ }
85
+ }, [focusTrigger]);
86
+ const filteredOptions = useMemo(() => {
87
+ return filterOptions(options, searchValue);
88
+ }, [searchValue, options]);
89
+ const flatFilteredOptions = useMemo(() => {
90
+ return getAllOptions(filteredOptions);
91
+ }, [filteredOptions]);
92
+ const allFlatOptions = useMemo(() => {
93
+ return getAllOptions(options);
94
+ }, [options]);
95
+ const handleTagClose = (removedValue) => {
96
+ if (!multiple) return;
97
+ onChange(value.filter((x) => x !== removedValue));
98
+ };
99
+ const handleToggleAll = () => {
100
+ if (!multiple) return;
101
+ const allFilteredValues = getAllOptions(filteredOptions).map(
102
+ (opt) => opt.value
103
+ );
104
+ const someSelected = allFilteredValues.some((val) => value.includes(val));
105
+ if (someSelected) {
106
+ onChange(value.filter((val) => !allFilteredValues.includes(val)));
107
+ }
108
+ };
109
+ const handleSelectFirstOption = () => {
110
+ if (flatFilteredOptions.length === 0) return;
111
+ const firstOption = flatFilteredOptions[0];
112
+ if (!firstOption) return;
113
+ const optionValue = firstOption.value;
114
+ if (multiple) {
115
+ if (value.includes(optionValue)) {
116
+ onChange(value.filter((v) => v !== optionValue));
117
+ } else {
118
+ onChange([...value, optionValue]);
119
+ }
120
+ } else {
121
+ onChange(optionValue);
122
+ setIsOpen(false);
123
+ }
124
+ };
125
+ const handleOptionClick = (optionValue) => {
126
+ if (multiple) {
127
+ if (value.includes(optionValue)) {
128
+ onChange(value.filter((v) => v !== optionValue));
129
+ } else {
130
+ onChange([...value, optionValue]);
131
+ }
132
+ } else {
133
+ onChange(optionValue);
134
+ setIsOpen(false);
135
+ }
136
+ };
137
+ const handleKeyDown = (e) => {
138
+ const navigationKeys = ["ArrowUp", "ArrowDown"];
139
+ if (e.key === "Enter") {
140
+ e.preventDefault();
141
+ e.stopPropagation();
142
+ handleSelectFirstOption();
143
+ return;
144
+ }
145
+ if (e.key === "Escape") {
146
+ e.preventDefault();
147
+ e.stopPropagation();
148
+ setIsOpen(false);
149
+ return;
150
+ }
151
+ if (navigationKeys.includes(e.key)) {
152
+ e.preventDefault();
153
+ return;
154
+ }
155
+ e.stopPropagation();
156
+ };
157
+ const optionRender = (option) => {
158
+ if ("logo" in option.data && option.data.logo) {
159
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
160
+ /* @__PURE__ */ jsx("div", { className: "h-4 shrink-0", children: option.data.logo }),
161
+ /* @__PURE__ */ jsx("span", { className: "overflow-ellipsis overflow-hidden", children: option.label })
162
+ ] });
163
+ }
164
+ return /* @__PURE__ */ jsx("div", { children: option.label });
165
+ };
166
+ const popupRender = (menu) => {
167
+ const valueToLabel = (val) => {
168
+ const option = allFlatOptions.find((opt) => opt.value === val);
169
+ return option ? option.label : val;
170
+ };
171
+ return /* @__PURE__ */ jsxs("div", { children: [
172
+ /* @__PURE__ */ jsx("div", { className: "mb-2 px-2 pb-2 border-b -mx-1 mt-1", children: /* @__PURE__ */ jsx(
173
+ Input,
174
+ {
175
+ ref: inputRef,
176
+ autoFocus: true,
177
+ placeholder: searchPlaceholder || "Search...",
178
+ value: searchValue,
179
+ onChange: (e) => {
180
+ setSearchValue(e.target.value);
181
+ e.stopPropagation();
182
+ e.preventDefault();
183
+ },
184
+ onKeyDown: handleKeyDown,
185
+ onClick: (e) => e.stopPropagation(),
186
+ prefix: /* @__PURE__ */ jsx(
187
+ MagnifyingGlassIcon,
188
+ {
189
+ size: 16,
190
+ className: "text-j2-text-placeholder"
191
+ }
192
+ ),
193
+ allowClear: true
194
+ },
195
+ focusTrigger
196
+ ) }),
197
+ multiple && value.length > 0 ? /* @__PURE__ */ jsx("div", { className: "px-2 pb-2", children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-y-1", children: value.map((value2) => /* @__PURE__ */ jsx(
198
+ Tag,
199
+ {
200
+ className: "opacity-100 z-10 flex max-w-full",
201
+ status: "default",
202
+ closable: true,
203
+ onClose: () => handleTagClose(value2),
204
+ children: /* @__PURE__ */ jsx(
205
+ "span",
206
+ {
207
+ className: "overflow-ellipsis overflow-hidden",
208
+ title: valueToLabel(value2),
209
+ children: valueToLabel(value2)
210
+ }
211
+ )
212
+ },
213
+ value2
214
+ )) }) }) : null,
215
+ /* @__PURE__ */ jsx(
216
+ "div",
217
+ {
218
+ className: cx(styles.menuContainer, "rounded-lg", {
219
+ [styles.headlinedMenuContainer]: isHeadline,
220
+ [styles.menuContainerMultiple]: multiple
221
+ }),
222
+ children: menu
223
+ }
224
+ ),
225
+ /* @__PURE__ */ jsx("div", { className: "flex justify-between items-center", children: multiple && /* @__PURE__ */ jsx("div", { className: "w-full mt-1 pt-1 border-t border-j2-border-secondary", children: /* @__PURE__ */ jsx(
226
+ "div",
227
+ {
228
+ "aria-selected": "false",
229
+ className: cx(
230
+ "ant-select-item ant-select-item-option w-full",
231
+ styles.clearAllButton
232
+ ),
233
+ title: "Clear all",
234
+ onClick: handleToggleAll,
235
+ children: /* @__PURE__ */ jsx("div", { className: "ant-select-item-option-content text-center font-semibold", children: "Clear all" })
236
+ }
237
+ ) }) })
238
+ ] });
239
+ };
240
+ const handleOpenChange = (open) => {
241
+ setIsOpen(open);
242
+ if (open) {
243
+ setFocusTrigger((prev) => prev + 1);
244
+ } else {
245
+ setSearchValue("");
246
+ }
247
+ };
248
+ const renderDropdownOptionRow = (option) => {
249
+ const optionValue = option.value;
250
+ const isSelected = multiple ? value.includes(optionValue) : value === optionValue;
251
+ const hasLogo = "logo" in option && option.logo;
252
+ return /* @__PURE__ */ jsx(
253
+ "div",
254
+ {
255
+ role: "option",
256
+ "aria-selected": isSelected,
257
+ onClick: () => handleOptionClick(optionValue),
258
+ className: cx(
259
+ "px-3 py-1.5 rounded cursor-pointer text-sm",
260
+ isSelected ? "bg-[var(--j2-color-primary)] text-white hover:bg-[var(--j2-color-primary)]" : "hover:bg-[var(--j2-color-bg-hover)]"
261
+ ),
262
+ children: hasLogo ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
263
+ /* @__PURE__ */ jsx("div", { className: "h-4 shrink-0", children: option.logo }),
264
+ /* @__PURE__ */ jsx("span", { className: "overflow-hidden overflow-ellipsis", children: option.label })
265
+ ] }) : option.label
266
+ },
267
+ optionValue
268
+ );
269
+ };
270
+ const dropdownPopupRender = () => {
271
+ const valueToLabel = (val) => {
272
+ const option = allFlatOptions.find((opt) => opt.value === val);
273
+ return option ? option.label : val;
274
+ };
275
+ return /* @__PURE__ */ jsxs("div", { className: "bg-white rounded-lg shadow-md p-2 min-w-[240px]", children: [
276
+ /* @__PURE__ */ jsx("div", { className: "pb-2 border-b border-j2-border-secondary", children: /* @__PURE__ */ jsx(
277
+ Input,
278
+ {
279
+ ref: inputRef,
280
+ autoFocus: true,
281
+ placeholder: searchPlaceholder || "Search...",
282
+ value: searchValue,
283
+ onChange: (e) => {
284
+ setSearchValue(e.target.value);
285
+ e.stopPropagation();
286
+ },
287
+ onKeyDown: handleKeyDown,
288
+ onClick: (e) => e.stopPropagation(),
289
+ prefix: /* @__PURE__ */ jsx(
290
+ MagnifyingGlassIcon,
291
+ {
292
+ size: 16,
293
+ className: "text-j2-text-placeholder"
294
+ }
295
+ ),
296
+ allowClear: true
297
+ },
298
+ focusTrigger
299
+ ) }),
300
+ multiple && value.length > 0 && /* @__PURE__ */ jsx("div", { className: "px-1 pt-2", children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-y-1", children: value.map((v) => /* @__PURE__ */ jsx(
301
+ Tag,
302
+ {
303
+ className: "opacity-100 z-10 flex max-w-full",
304
+ status: "default",
305
+ closable: true,
306
+ onClose: () => handleTagClose(v),
307
+ children: /* @__PURE__ */ jsx(
308
+ "span",
309
+ {
310
+ className: "overflow-ellipsis overflow-hidden",
311
+ title: valueToLabel(v),
312
+ children: valueToLabel(v)
313
+ }
314
+ )
315
+ },
316
+ v
317
+ )) }) }),
318
+ /* @__PURE__ */ jsx(
319
+ "div",
320
+ {
321
+ className: "max-h-72 overflow-y-auto py-1",
322
+ role: "listbox",
323
+ "aria-multiselectable": multiple || void 0,
324
+ children: filteredOptions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm text-[var(--j2-color-text-secondary)]", children: "No options found" }) : filteredOptions.map((opt) => {
325
+ if (isGroupOption(opt)) {
326
+ return /* @__PURE__ */ jsxs("div", { children: [
327
+ /* @__PURE__ */ 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 }),
328
+ opt.options.map(renderDropdownOptionRow)
329
+ ] }, `group-${opt.label}`);
330
+ }
331
+ return renderDropdownOptionRow(opt);
332
+ })
333
+ }
334
+ ),
335
+ multiple && value.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-1 pt-1 border-t border-j2-border-secondary", children: /* @__PURE__ */ jsx(
336
+ "div",
337
+ {
338
+ role: "button",
339
+ "aria-label": "Clear all",
340
+ title: "Clear all",
341
+ onClick: handleToggleAll,
342
+ className: cx(
343
+ "text-center font-semibold text-sm py-1.5 rounded cursor-pointer",
344
+ styles.clearAllButton
345
+ ),
346
+ children: "Clear all"
347
+ }
348
+ ) })
349
+ ] });
350
+ };
351
+ if (trigger === "dropdown") {
352
+ const hasSelection = multiple ? value.length > 0 : Boolean(value);
353
+ const triggerContent = /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
354
+ hasSelection ? displayText : formControlPlaceholder ?? "Select",
355
+ loading ? /* @__PURE__ */ jsx(
356
+ Spin,
357
+ {
358
+ indicator: /* @__PURE__ */ jsx(LoadingOutlined, { spin: true }),
359
+ size: "small",
360
+ "data-testid": "loading-spinner"
361
+ }
362
+ ) : /* @__PURE__ */ jsx(CaretDownIcon, { weight: "regular", "data-testid": "caret-down" })
363
+ ] });
364
+ return /* @__PURE__ */ jsx(
365
+ Dropdown,
366
+ {
367
+ open: isOpen,
368
+ onOpenChange: handleOpenChange,
369
+ trigger: ["click"],
370
+ disabled: props.disabled,
371
+ popupRender: dropdownPopupRender,
372
+ children: /* @__PURE__ */ jsx(
373
+ Typography.Link,
374
+ {
375
+ disabled: props.disabled,
376
+ className: cx("inline-flex", rootClassName),
377
+ children: triggerContent
378
+ }
379
+ )
380
+ }
381
+ );
382
+ }
383
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
384
+ /* @__PURE__ */ jsx(
385
+ "span",
386
+ {
387
+ ref: measureSpanRef,
388
+ "aria-hidden": true,
389
+ style: {
390
+ position: "absolute",
391
+ visibility: "hidden",
392
+ whiteSpace: "nowrap",
393
+ fontSize: "inherit"
394
+ },
395
+ children: displayText
396
+ }
397
+ ),
398
+ /* @__PURE__ */ jsx(
399
+ Select,
400
+ {
401
+ open: isOpen,
402
+ showSearch: false,
403
+ style: { width: measuredWidth },
404
+ suffixIcon: loading ? /* @__PURE__ */ jsx(
405
+ Spin,
406
+ {
407
+ indicator: /* @__PURE__ */ jsx(LoadingOutlined, { spin: true }),
408
+ size: "small",
409
+ "data-testid": "loading-spinner"
410
+ }
411
+ ) : /* @__PURE__ */ jsx(CaretDownIcon, { size: 14, "data-testid": "caret-down" }),
412
+ placeholder: formControlPlaceholder,
413
+ mode: multiple ? "multiple" : void 0,
414
+ value,
415
+ maxTagCount: 0,
416
+ maxTagPlaceholder: multiple ? () => renderLabel(value.length) : value,
417
+ options: filteredOptions,
418
+ onChange: (val) => {
419
+ if (multiple) {
420
+ if (Array.isArray(val)) {
421
+ onChange(val);
422
+ } else {
423
+ throw new Error("Value should be an array in multiple mode");
424
+ }
425
+ } else {
426
+ if (typeof val === "string") {
427
+ onChange(val);
428
+ } else {
429
+ throw new Error(
430
+ "Value should be a string in single selection mode"
431
+ );
432
+ }
433
+ }
434
+ },
435
+ popupRender,
436
+ optionRender,
437
+ onOpenChange: handleOpenChange,
438
+ classNames: {
439
+ root: cx(rootClassName, styles.summarizedSelect, {
440
+ [styles.hemisphericSelect]: variant !== "underlined" && variant !== "headlined",
441
+ [styles.isActive]: multiple && value.length > 0 && variant !== "underlined" && variant !== "headlined",
442
+ [styles.headlinedSelect]: isHeadline
443
+ }),
444
+ popup: { root: popupClassName }
445
+ },
446
+ variant: antVariant,
447
+ ...props
448
+ }
449
+ )
450
+ ] });
451
+ }
452
+ export {
453
+ SummarizedSelect
454
+ };
455
+ //# sourceMappingURL=SummarizedSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SummarizedSelect.js","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","icons.MagnifyingGlassIcon","value","icons.CaretDownIcon","AntdDropdown"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const hemisphericSelect = "_hemisphericSelect_2ivoh_1";
4
+ const summarizedSelect = "_summarizedSelect_2ivoh_11";
5
+ const isActive = "_isActive_2ivoh_22";
6
+ const menuContainer = "_menuContainer_2ivoh_36";
7
+ const menuContainerMultiple = "_menuContainerMultiple_2ivoh_46";
8
+ const headlinedSelect = "_headlinedSelect_2ivoh_61";
9
+ const headlinedMenuContainer = "_headlinedMenuContainer_2ivoh_105";
10
+ const clearAllButton = "_clearAllButton_2ivoh_116";
11
+ const styles = {
12
+ hemisphericSelect,
13
+ summarizedSelect,
14
+ isActive,
15
+ menuContainer,
16
+ menuContainerMultiple,
17
+ headlinedSelect,
18
+ headlinedMenuContainer,
19
+ clearAllButton
20
+ };
21
+ exports.clearAllButton = clearAllButton;
22
+ exports.default = styles;
23
+ exports.headlinedMenuContainer = headlinedMenuContainer;
24
+ exports.headlinedSelect = headlinedSelect;
25
+ exports.hemisphericSelect = hemisphericSelect;
26
+ exports.isActive = isActive;
27
+ exports.menuContainer = menuContainer;
28
+ exports.menuContainerMultiple = menuContainerMultiple;
29
+ exports.summarizedSelect = summarizedSelect;
30
+ //# sourceMappingURL=SummarizedSelect.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SummarizedSelect.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,30 @@
1
+ const hemisphericSelect = "_hemisphericSelect_2ivoh_1";
2
+ const summarizedSelect = "_summarizedSelect_2ivoh_11";
3
+ const isActive = "_isActive_2ivoh_22";
4
+ const menuContainer = "_menuContainer_2ivoh_36";
5
+ const menuContainerMultiple = "_menuContainerMultiple_2ivoh_46";
6
+ const headlinedSelect = "_headlinedSelect_2ivoh_61";
7
+ const headlinedMenuContainer = "_headlinedMenuContainer_2ivoh_105";
8
+ const clearAllButton = "_clearAllButton_2ivoh_116";
9
+ const styles = {
10
+ hemisphericSelect,
11
+ summarizedSelect,
12
+ isActive,
13
+ menuContainer,
14
+ menuContainerMultiple,
15
+ headlinedSelect,
16
+ headlinedMenuContainer,
17
+ clearAllButton
18
+ };
19
+ export {
20
+ clearAllButton,
21
+ styles as default,
22
+ headlinedMenuContainer,
23
+ headlinedSelect,
24
+ hemisphericSelect,
25
+ isActive,
26
+ menuContainer,
27
+ menuContainerMultiple,
28
+ summarizedSelect
29
+ };
30
+ //# sourceMappingURL=SummarizedSelect.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SummarizedSelect.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,14 @@
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 Skeleton = (props) => {
6
+ return /* @__PURE__ */ jsxRuntime.jsx(antd.Skeleton, { ...props });
7
+ };
8
+ Skeleton.Node = antd.Skeleton.Node;
9
+ Skeleton.Avatar = antd.Skeleton.Avatar;
10
+ Skeleton.Input = antd.Skeleton.Input;
11
+ Skeleton.Image = antd.Skeleton.Image;
12
+ Skeleton.Button = antd.Skeleton.Button;
13
+ exports.Skeleton = Skeleton;
14
+ //# sourceMappingURL=Skeleton.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.cjs","sources":["../../../../src/components/skeleton/Skeleton.tsx"],"sourcesContent":["import {\n Skeleton as AntdSkeleton,\n SkeletonProps as AntdSkeletonProps,\n} from 'antd'\n\ntype SkeletonProps = Expand<AntdSkeletonProps>\n\nconst Skeleton = (props: SkeletonProps) => {\n return <AntdSkeleton {...props} />\n}\n\nSkeleton.Node = AntdSkeleton.Node\nSkeleton.Avatar = AntdSkeleton.Avatar\nSkeleton.Input = AntdSkeleton.Input\nSkeleton.Image = AntdSkeleton.Image\nSkeleton.Button = AntdSkeleton.Button\n\nexport { Skeleton }\n"],"names":["jsx","AntdSkeleton"],"mappings":";;;;AAOA,MAAM,WAAW,CAAC,UAAyB;AACzC,SAAOA,+BAACC,KAAAA,UAAA,EAAc,GAAG,MAAA,CAAO;AAClC;AAEA,SAAS,OAAOA,KAAAA,SAAa;AAC7B,SAAS,SAASA,KAAAA,SAAa;AAC/B,SAAS,QAAQA,KAAAA,SAAa;AAC9B,SAAS,QAAQA,KAAAA,SAAa;AAC9B,SAAS,SAASA,KAAAA,SAAa;;"}
@@ -0,0 +1,14 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Skeleton as Skeleton$1 } from "antd";
3
+ const Skeleton = (props) => {
4
+ return /* @__PURE__ */ jsx(Skeleton$1, { ...props });
5
+ };
6
+ Skeleton.Node = Skeleton$1.Node;
7
+ Skeleton.Avatar = Skeleton$1.Avatar;
8
+ Skeleton.Input = Skeleton$1.Input;
9
+ Skeleton.Image = Skeleton$1.Image;
10
+ Skeleton.Button = Skeleton$1.Button;
11
+ export {
12
+ Skeleton
13
+ };
14
+ //# sourceMappingURL=Skeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.js","sources":["../../../../src/components/skeleton/Skeleton.tsx"],"sourcesContent":["import {\n Skeleton as AntdSkeleton,\n SkeletonProps as AntdSkeletonProps,\n} from 'antd'\n\ntype SkeletonProps = Expand<AntdSkeletonProps>\n\nconst Skeleton = (props: SkeletonProps) => {\n return <AntdSkeleton {...props} />\n}\n\nSkeleton.Node = AntdSkeleton.Node\nSkeleton.Avatar = AntdSkeleton.Avatar\nSkeleton.Input = AntdSkeleton.Input\nSkeleton.Image = AntdSkeleton.Image\nSkeleton.Button = AntdSkeleton.Button\n\nexport { Skeleton }\n"],"names":["AntdSkeleton"],"mappings":";;AAOA,MAAM,WAAW,CAAC,UAAyB;AACzC,SAAO,oBAACA,YAAA,EAAc,GAAG,MAAA,CAAO;AAClC;AAEA,SAAS,OAAOA,WAAa;AAC7B,SAAS,SAASA,WAAa;AAC/B,SAAS,QAAQA,WAAa;AAC9B,SAAS,QAAQA,WAAa;AAC9B,SAAS,SAASA,WAAa;"}
@@ -0,0 +1,20 @@
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 Icon = require("@ant-design/icons");
6
+ const ProgressCircle = require("../../svgs/ProgressCircle.svg.cjs");
7
+ const SpinIcon = ({ height, width }) => {
8
+ return /* @__PURE__ */ jsxRuntime.jsx(Icon, { spin: true, component: () => /* @__PURE__ */ jsxRuntime.jsx(ProgressCircle, {}), style: { height, width } });
9
+ };
10
+ const Spinner = ({ size = 80, className }) => {
11
+ return /* @__PURE__ */ jsxRuntime.jsx(
12
+ antd.Spin,
13
+ {
14
+ className,
15
+ indicator: /* @__PURE__ */ jsxRuntime.jsx(SpinIcon, { height: size, width: size })
16
+ }
17
+ );
18
+ };
19
+ exports.Spinner = Spinner;
20
+ //# sourceMappingURL=Spinner.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.cjs","sources":["../../../../src/components/spinner/Spinner.tsx"],"sourcesContent":["import { Spin } from 'antd'\nimport Icon from '@ant-design/icons'\n\nimport ProgressCircle from '../../svgs/ProgressCircle.svg?react'\n\ntype SpinnerProps = {\n size?: number\n className?: string\n}\n\nconst SpinIcon = ({ height, width }: { height?: number; width?: number }) => {\n return (\n <Icon spin component={() => <ProgressCircle />} style={{ height, width }} />\n )\n}\n\nexport const Spinner = ({ size = 80, className }: SpinnerProps) => {\n return (\n <Spin\n className={className}\n indicator={<SpinIcon height={size} width={size} />}\n />\n )\n}\n"],"names":["jsx","Spin"],"mappings":";;;;;;AAUA,MAAM,WAAW,CAAC,EAAE,QAAQ,YAAiD;AAC3E,SACEA,2BAAAA,IAAC,MAAA,EAAK,MAAI,MAAC,WAAW,MAAMA,2BAAAA,IAAC,gBAAA,CAAA,CAAe,GAAI,OAAO,EAAE,QAAQ,QAAM,CAAG;AAE9E;AAEO,MAAM,UAAU,CAAC,EAAE,OAAO,IAAI,gBAA8B;AACjE,SACEA,2BAAAA;AAAAA,IAACC,KAAAA;AAAAA,IAAA;AAAA,MACC;AAAA,MACA,WAAWD,2BAAAA,IAAC,UAAA,EAAS,QAAQ,MAAM,OAAO,KAAA,CAAM;AAAA,IAAA;AAAA,EAAA;AAGtD;;"}