@lifesg/react-design-system 4.0.0-alpha.6 → 4.0.0-alpha.8

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 (753) hide show
  1. package/accordion/accordion.js.map +1 -1
  2. package/alert/alert.js.map +1 -1
  3. package/alert/types.d.ts +2 -0
  4. package/animations/loading-dots/loading-dots.d.ts +5 -2
  5. package/animations/loading-dots/loading-dots.js.map +1 -1
  6. package/animations/loading-dots-spinner/loading-dots-spinner.d.ts +3 -0
  7. package/animations/loading-dots-spinner/loading-dots-spinner.js.map +1 -1
  8. package/animations/loading-dots-spinner/lottie-animation.d.ts +2 -2
  9. package/animations/loading-dots-spinner/lottie-animation.js.map +1 -1
  10. package/animations/loading-spinner/loading-spinner.d.ts +5 -2
  11. package/animations/loading-spinner/loading-spinner.js.map +1 -1
  12. package/animations/themed-loading-spinner/themed-loading-spinner.d.ts +5 -2
  13. package/animations/themed-loading-spinner/themed-loading-spinner.js.map +1 -1
  14. package/animations/types.d.ts +13 -6
  15. package/avatar/avatar.js.map +1 -1
  16. package/badge/badge.js.map +1 -1
  17. package/badge/types.d.ts +13 -2
  18. package/box-container/box-container.js.map +1 -1
  19. package/box-container/types.d.ts +2 -0
  20. package/breadcrumb/breadcrumb.js.map +1 -1
  21. package/breadcrumb/types.d.ts +7 -2
  22. package/button/button.js +1 -1
  23. package/button/button.js.map +1 -1
  24. package/button/button.styles.d.ts +1 -0
  25. package/button/button.styles.js +1 -1
  26. package/button/button.styles.js.map +1 -1
  27. package/button/button.styles_19i4dfq.css +21 -0
  28. package/button/types.d.ts +5 -0
  29. package/calendar/calendar.js.map +1 -1
  30. package/calendar/types.d.ts +3 -3
  31. package/card/card.js.map +1 -1
  32. package/checkbox/checkbox.js.map +1 -1
  33. package/checkbox/types.d.ts +4 -0
  34. package/cjs/accordion/accordion.js.map +1 -1
  35. package/cjs/alert/alert.js.map +1 -1
  36. package/cjs/animations/loading-dots/loading-dots.js.map +1 -1
  37. package/cjs/animations/loading-dots-spinner/loading-dots-spinner.js.map +1 -1
  38. package/cjs/animations/loading-dots-spinner/lottie-animation.js.map +1 -1
  39. package/cjs/animations/loading-spinner/loading-spinner.js.map +1 -1
  40. package/cjs/animations/themed-loading-spinner/themed-loading-spinner.js.map +1 -1
  41. package/cjs/avatar/avatar.js.map +1 -1
  42. package/cjs/badge/badge.js.map +1 -1
  43. package/cjs/box-container/box-container.js.map +1 -1
  44. package/cjs/breadcrumb/breadcrumb.js.map +1 -1
  45. package/cjs/button/button.js +1 -1
  46. package/cjs/button/button.js.map +1 -1
  47. package/cjs/button/button.styles.js +1 -1
  48. package/cjs/button/button.styles.js.map +1 -1
  49. package/cjs/button/button.styles_19i4dfq.css +21 -0
  50. package/cjs/calendar/calendar.js.map +1 -1
  51. package/cjs/card/card.js.map +1 -1
  52. package/cjs/checkbox/checkbox.js.map +1 -1
  53. package/cjs/countdown-timer/countdown-timer.js.map +1 -1
  54. package/cjs/dashed-border/dashed-border.js.map +1 -1
  55. package/cjs/data-table/data-table.js +1 -1
  56. package/cjs/data-table/data-table.js.map +1 -1
  57. package/cjs/data-table/data-table.styles.js +1 -1
  58. package/cjs/data-table/data-table.styles.js.map +1 -1
  59. package/cjs/data-table/{data-table.styles_rxganh.css → data-table.styles_1tnlmhe.css} +7 -6
  60. package/cjs/date-input/date-input.js.map +1 -1
  61. package/cjs/date-navigator/date-navigator.js.map +1 -1
  62. package/cjs/date-range-input/date-range-input.js.map +1 -1
  63. package/cjs/divider/divider.js.map +1 -1
  64. package/cjs/drawer/drawer.js.map +1 -1
  65. package/cjs/e-signature/e-signature.js.map +1 -1
  66. package/cjs/error-display/error-display-data.js +1 -1
  67. package/cjs/error-display/error-display-data.js.map +1 -1
  68. package/cjs/error-display/error-display.js.map +1 -1
  69. package/cjs/feedback-rating/feedback-rating.js.map +1 -1
  70. package/cjs/file-download/file-download.js.map +1 -1
  71. package/cjs/file-upload/file-item-edit.js.map +1 -1
  72. package/cjs/file-upload/file-list/file-list.js.map +1 -1
  73. package/cjs/file-upload/file-list-item/file-list-item.js.map +1 -1
  74. package/cjs/file-upload/file-list-item/file-list-item.styles.js +1 -1
  75. package/cjs/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  76. package/{file-upload/file-list-item/file-list-item.styles_o8000f.css → cjs/file-upload/file-list-item/file-list-item.styles_kgtfke.css} +1 -1
  77. package/cjs/file-upload/file-upload.js.map +1 -1
  78. package/cjs/filter/addons/filter-item-checkbox-helpers.js.map +1 -1
  79. package/cjs/filter/addons/filter-item-checkbox.js.map +1 -1
  80. package/cjs/filter/addons/filter-item-checkbox.styles.js +1 -1
  81. package/cjs/filter/addons/filter-item-checkbox.styles.js.map +1 -1
  82. package/cjs/filter/addons/{filter-item-checkbox.styles_7degw7.css → filter-item-checkbox.styles_6nbpdl.css} +1 -1
  83. package/cjs/filter/filter-item.js +1 -1
  84. package/cjs/filter/filter-item.js.map +1 -1
  85. package/cjs/filter/filter-item.styles.js +1 -1
  86. package/cjs/filter/filter-item.styles.js.map +1 -1
  87. package/cjs/filter/{filter-item.styles_cphjnj.css → filter-item.styles_1yixp8h.css} +1 -1
  88. package/cjs/filter/filter-modal.styles.js +1 -1
  89. package/cjs/filter/filter-modal.styles.js.map +1 -1
  90. package/{filter/filter-modal.styles_qw3xlg.css → cjs/filter/filter-modal.styles_kuth21.css} +1 -1
  91. package/cjs/filter/filter-sidebar.styles.js +1 -1
  92. package/cjs/filter/filter-sidebar.styles.js.map +1 -1
  93. package/cjs/filter/{filter-sidebar.styles_1otwpjl.css → filter-sidebar.styles_rbfq4f.css} +1 -1
  94. package/cjs/filter/filter.js.map +1 -1
  95. package/cjs/footer/footer.js.map +1 -1
  96. package/cjs/form/form-custom-field/form-custom-field.js +2 -0
  97. package/cjs/form/form-custom-field/form-custom-field.js.map +1 -0
  98. package/cjs/form/form-date-input/form-date-input.js +2 -0
  99. package/cjs/form/form-date-input/form-date-input.js.map +1 -0
  100. package/cjs/form/form-date-range-input/form-date-range-input.js +2 -0
  101. package/cjs/form/form-date-range-input/form-date-range-input.js.map +1 -0
  102. package/cjs/form/form-e-signature/form-e-signature.js +2 -0
  103. package/cjs/form/form-e-signature/form-e-signature.js.map +1 -0
  104. package/cjs/form/form-histogram-slider/form-histogram-slider.js +2 -0
  105. package/cjs/form/form-histogram-slider/form-histogram-slider.js.map +1 -0
  106. package/cjs/form/form-input/form-input.js +2 -0
  107. package/cjs/form/form-input/form-input.js.map +1 -0
  108. package/cjs/form/form-input-group/form-input-group.js +2 -0
  109. package/cjs/form/form-input-group/form-input-group.js.map +1 -0
  110. package/cjs/form/form-label/form-label-addon.js +2 -0
  111. package/cjs/form/form-label/form-label-addon.js.map +1 -0
  112. package/cjs/form/form-label/form-label-addon.styles.js +2 -0
  113. package/cjs/form/form-label/form-label-addon.styles.js.map +1 -0
  114. package/cjs/form/form-label/form-label-addon.styles_aztasj.css +1 -0
  115. package/cjs/form/form-label/form-label.js +2 -0
  116. package/cjs/form/form-label/form-label.js.map +1 -0
  117. package/cjs/form/form-label/form-label.styles.js +2 -0
  118. package/cjs/form/form-label/form-label.styles.js.map +1 -0
  119. package/cjs/form/form-label/form-label.styles_180zf7j.css +6 -0
  120. package/cjs/form/form-masked-input/form-masked-input.js +2 -0
  121. package/cjs/form/form-masked-input/form-masked-input.js.map +1 -0
  122. package/cjs/form/form-multi-select/form-multi-select.js +2 -0
  123. package/cjs/form/form-multi-select/form-multi-select.js.map +1 -0
  124. package/cjs/form/form-nested-multi-select/form-nested-multi-select.js +2 -0
  125. package/cjs/form/form-nested-multi-select/form-nested-multi-select.js.map +1 -0
  126. package/cjs/form/form-nested-select/form-nested-select.js +2 -0
  127. package/cjs/form/form-nested-select/form-nested-select.js.map +1 -0
  128. package/cjs/form/form-otp-verification/form-otp-verification.js +2 -0
  129. package/cjs/form/form-otp-verification/form-otp-verification.js.map +1 -0
  130. package/cjs/form/form-phone-number-input/form-phone-number-input.js +2 -0
  131. package/cjs/form/form-phone-number-input/form-phone-number-input.js.map +1 -0
  132. package/cjs/form/form-predictive-text-input/form-predictive-text-input.js +2 -0
  133. package/cjs/form/form-predictive-text-input/form-predictive-text-input.js.map +1 -0
  134. package/cjs/form/form-range-select/form-range-select.js +2 -0
  135. package/cjs/form/form-range-select/form-range-select.js.map +1 -0
  136. package/cjs/form/form-range-slider/form-range-slider.js +2 -0
  137. package/cjs/form/form-range-slider/form-range-slider.js.map +1 -0
  138. package/cjs/form/form-select/form-select.js +2 -0
  139. package/cjs/form/form-select/form-select.js.map +1 -0
  140. package/cjs/form/form-select-histogram/form-select-histogram.js +2 -0
  141. package/cjs/form/form-select-histogram/form-select-histogram.js.map +1 -0
  142. package/cjs/form/form-slider/form-slider.js +2 -0
  143. package/cjs/form/form-slider/form-slider.js.map +1 -0
  144. package/cjs/form/form-textarea/form-textarea.js +2 -0
  145. package/cjs/form/form-textarea/form-textarea.js.map +1 -0
  146. package/cjs/form/form-textarea/form-textarea.styles.js +2 -0
  147. package/cjs/form/form-textarea/form-textarea.styles.js.map +1 -0
  148. package/cjs/form/form-textarea/form-textarea.styles_1kneyif.css +3 -0
  149. package/cjs/form/form-time-range-picker/form-time-range-picker.js +2 -0
  150. package/cjs/form/form-time-range-picker/form-time-range-picker.js.map +1 -0
  151. package/cjs/form/form-timepicker/form-timepicker.js +2 -0
  152. package/cjs/form/form-timepicker/form-timepicker.js.map +1 -0
  153. package/cjs/form/form-unit-number-input/form-unit-number-input.js +2 -0
  154. package/cjs/form/form-unit-number-input/form-unit-number-input.js.map +1 -0
  155. package/cjs/form/form-wrapper.js +1 -1
  156. package/cjs/form/form-wrapper.js.map +1 -1
  157. package/cjs/form/index.js +1 -1
  158. package/cjs/form/index.js.map +1 -1
  159. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  160. package/cjs/histogram-slider/histogram-slider.js.map +1 -1
  161. package/cjs/image-button/image-button.js.map +1 -1
  162. package/cjs/input/input.js.map +1 -1
  163. package/cjs/input-group/input-group.js.map +1 -1
  164. package/cjs/input-multi-select/input-multi-select.js.map +1 -1
  165. package/cjs/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
  166. package/cjs/input-nested-select/input-nested-select.js.map +1 -1
  167. package/cjs/input-range-select/input-range-select.js.map +1 -1
  168. package/cjs/input-range-slider/input-range-slider.js.map +1 -1
  169. package/cjs/input-select/input-select.js.map +1 -1
  170. package/cjs/input-slider/input-slider.js.map +1 -1
  171. package/cjs/input-textarea/textarea.js.map +1 -1
  172. package/cjs/input-textarea/textarea.styles.js +1 -1
  173. package/cjs/input-textarea/textarea.styles.js.map +1 -1
  174. package/cjs/input-textarea/{textarea.styles_22z4n3.css → textarea.styles_q77m5x.css} +1 -1
  175. package/cjs/language-switcher/language-switcher.js.map +1 -1
  176. package/cjs/layout/index.js.map +1 -1
  177. package/cjs/link-list/components/common.js.map +1 -1
  178. package/cjs/link-list/components/link-list-eager.js.map +1 -1
  179. package/cjs/link-list/components/link-list-lazy.js.map +1 -1
  180. package/cjs/link-list/link-list.js.map +1 -1
  181. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  182. package/cjs/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  183. package/cjs/markup/markup.js.map +1 -1
  184. package/cjs/masked-input/masked-input.js.map +1 -1
  185. package/cjs/masthead/masthead.js.map +1 -1
  186. package/cjs/menu/menu.js.map +1 -1
  187. package/cjs/modal/index.js.map +1 -1
  188. package/cjs/modal-v2/modal-v2.js.map +1 -1
  189. package/cjs/navbar/navbar.js.map +1 -1
  190. package/cjs/notification-banner/notification-banner.js.map +1 -1
  191. package/cjs/otp-input/otp-input.js +1 -1
  192. package/cjs/otp-input/otp-input.js.map +1 -1
  193. package/cjs/otp-verification/contact-input-section.js +1 -1
  194. package/cjs/otp-verification/contact-input-section.js.map +1 -1
  195. package/cjs/otp-verification/otp-verification.js.map +1 -1
  196. package/cjs/otp-verification/verification-section.js +1 -1
  197. package/cjs/otp-verification/verification-section.js.map +1 -1
  198. package/cjs/overlay/overlay.js.map +1 -1
  199. package/cjs/pagination/pagination.js.map +1 -1
  200. package/cjs/phone-number-input/phone-number-input.js.map +1 -1
  201. package/cjs/pill/pill.js.map +1 -1
  202. package/cjs/popover/popover-inline/popover-inline.js.map +1 -1
  203. package/cjs/popover/popover.js.map +1 -1
  204. package/cjs/predictive-text-input/predictive-text-input.js +1 -1
  205. package/cjs/predictive-text-input/predictive-text-input.js.map +1 -1
  206. package/cjs/progress-indicator/progress-indicator.js.map +1 -1
  207. package/cjs/radio-button/radio-button.js.map +1 -1
  208. package/cjs/schedule/schedule.js.map +1 -1
  209. package/cjs/select-histogram/select-histogram.js.map +1 -1
  210. package/cjs/shared/dropdown-list/dropdown-list.js +1 -1
  211. package/cjs/shared/dropdown-list/dropdown-list.js.map +1 -1
  212. package/cjs/shared/dropdown-wrapper/element-with-dropdown.js +1 -1
  213. package/cjs/shared/dropdown-wrapper/element-with-dropdown.js.map +1 -1
  214. package/cjs/sidenav/sidenav.js.map +1 -1
  215. package/cjs/singpass-button/singpass-button.js.map +1 -1
  216. package/cjs/singpass-button/singpass-button.styles.js +1 -1
  217. package/cjs/singpass-button/singpass-button.styles.js.map +1 -1
  218. package/cjs/singpass-button/{singpass-button.styles_1miyex3.css → singpass-button.styles_1fj2lru.css} +1 -1
  219. package/cjs/smart-app-banner/smart-app-banner.js.map +1 -1
  220. package/cjs/smart-app-banner/smart-app-banner.styles.js +1 -1
  221. package/cjs/smart-app-banner/smart-app-banner.styles.js.map +1 -1
  222. package/{smart-app-banner/smart-app-banner.styles_15u6yv4.css → cjs/smart-app-banner/smart-app-banner.styles_r6yjq9.css} +1 -1
  223. package/cjs/tab/tab.js.map +1 -1
  224. package/cjs/table/table.js.map +1 -1
  225. package/cjs/tag/tag.js.map +1 -1
  226. package/cjs/text-list/index.js.map +1 -1
  227. package/cjs/theme/theme-provider/hooks.js.map +1 -1
  228. package/cjs/theme/theme-provider/index.js.map +1 -1
  229. package/cjs/theme/tokens/border.js.map +1 -1
  230. package/cjs/theme/tokens/breakpoint.js.map +1 -1
  231. package/cjs/theme/tokens/colour.js.map +1 -1
  232. package/cjs/theme/tokens/component.js.map +1 -1
  233. package/cjs/theme/tokens/font.js.map +1 -1
  234. package/cjs/theme/tokens/media-query.js.map +1 -1
  235. package/cjs/theme/tokens/motion.js.map +1 -1
  236. package/cjs/theme/tokens/radius.js.map +1 -1
  237. package/cjs/theme/tokens/shadow.js.map +1 -1
  238. package/cjs/theme/tokens/spacing.js.map +1 -1
  239. package/cjs/theme/utils/use-apply-styles.js.map +1 -1
  240. package/cjs/theme/utils/use-design-token.js.map +1 -1
  241. package/cjs/theme/utils/use-media-query.js.map +1 -1
  242. package/cjs/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  243. package/cjs/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  244. package/cjs/time-range-picker/time-range-picker.js.map +1 -1
  245. package/cjs/time-slot-bar/time-slot-bar.js.map +1 -1
  246. package/cjs/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
  247. package/cjs/time-slot-week-view/time-slot-week-view.js.map +1 -1
  248. package/cjs/timeline/timeline.js.map +1 -1
  249. package/cjs/timepicker/timepicker.js.map +1 -1
  250. package/cjs/timetable/timetable.js.map +1 -1
  251. package/cjs/toast/toast.js.map +1 -1
  252. package/cjs/toast/toast.styles.js +1 -1
  253. package/cjs/toast/toast.styles.js.map +1 -1
  254. package/{toast/toast.styles_1e0l60w.css → cjs/toast/toast.styles_57j3lf.css} +1 -1
  255. package/cjs/toggle/toggle.js.map +1 -1
  256. package/cjs/typography/index.js.map +1 -1
  257. package/cjs/uneditable-section/index.js.map +1 -1
  258. package/cjs/uneditable-section/section-item.js +1 -1
  259. package/cjs/uneditable-section/section-item.js.map +1 -1
  260. package/cjs/unit-number/unit-number-input.js.map +1 -1
  261. package/countdown-timer/countdown-timer.js.map +1 -1
  262. package/countdown-timer/types.d.ts +3 -3
  263. package/dashed-border/dashed-border.js.map +1 -1
  264. package/data-table/data-table.d.ts +1 -1
  265. package/data-table/data-table.js +1 -1
  266. package/data-table/data-table.js.map +1 -1
  267. package/data-table/data-table.styles.d.ts +1 -0
  268. package/data-table/data-table.styles.js +1 -1
  269. package/data-table/data-table.styles.js.map +1 -1
  270. package/data-table/{data-table.styles_rxganh.css → data-table.styles_1tnlmhe.css} +7 -6
  271. package/data-table/types.d.ts +2 -0
  272. package/date-input/date-input.js.map +1 -1
  273. package/date-input/types.d.ts +1 -1
  274. package/date-navigator/date-navigator.js.map +1 -1
  275. package/date-navigator/types.d.ts +1 -1
  276. package/date-range-input/date-range-input.js.map +1 -1
  277. package/date-range-input/types.d.ts +1 -1
  278. package/divider/divider.js.map +1 -1
  279. package/divider/types.d.ts +1 -1
  280. package/docs/component-catalog.json +644 -0
  281. package/drawer/drawer.js.map +1 -1
  282. package/e-signature/e-signature.js.map +1 -1
  283. package/error-display/error-display-data.js +1 -1
  284. package/error-display/error-display-data.js.map +1 -1
  285. package/error-display/error-display.js.map +1 -1
  286. package/feedback-rating/feedback-rating.js.map +1 -1
  287. package/file-download/file-download.js.map +1 -1
  288. package/file-download/types.d.ts +6 -1
  289. package/file-upload/file-item-edit.d.ts +1 -1
  290. package/file-upload/file-item-edit.js.map +1 -1
  291. package/file-upload/file-list/file-list.d.ts +1 -1
  292. package/file-upload/file-list/file-list.js.map +1 -1
  293. package/file-upload/file-list-item/file-list-item.d.ts +1 -1
  294. package/file-upload/file-list-item/file-list-item.js.map +1 -1
  295. package/file-upload/file-list-item/file-list-item.styles.js +1 -1
  296. package/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  297. package/{cjs/file-upload/file-list-item/file-list-item.styles_o8000f.css → file-upload/file-list-item/file-list-item.styles_kgtfke.css} +1 -1
  298. package/file-upload/file-upload.js.map +1 -1
  299. package/file-upload/types.d.ts +6 -2
  300. package/filter/addons/filter-item-checkbox-helpers.d.ts +2 -2
  301. package/filter/addons/filter-item-checkbox-helpers.js.map +1 -1
  302. package/filter/addons/filter-item-checkbox.d.ts +1 -1
  303. package/filter/addons/filter-item-checkbox.js.map +1 -1
  304. package/filter/addons/filter-item-checkbox.styles.js +1 -1
  305. package/filter/addons/filter-item-checkbox.styles.js.map +1 -1
  306. package/filter/addons/{filter-item-checkbox.styles_7degw7.css → filter-item-checkbox.styles_6nbpdl.css} +1 -1
  307. package/filter/addons/internal-types.d.ts +12 -0
  308. package/filter/addons/types.d.ts +60 -9
  309. package/filter/filter-item.js +1 -1
  310. package/filter/filter-item.js.map +1 -1
  311. package/filter/filter-item.styles.js +1 -1
  312. package/filter/filter-item.styles.js.map +1 -1
  313. package/filter/{filter-item.styles_cphjnj.css → filter-item.styles_1yixp8h.css} +1 -1
  314. package/filter/filter-modal.styles.js +1 -1
  315. package/filter/filter-modal.styles.js.map +1 -1
  316. package/{cjs/filter/filter-modal.styles_qw3xlg.css → filter/filter-modal.styles_kuth21.css} +1 -1
  317. package/filter/filter-sidebar.styles.js +1 -1
  318. package/filter/filter-sidebar.styles.js.map +1 -1
  319. package/filter/{filter-sidebar.styles_1otwpjl.css → filter-sidebar.styles_rbfq4f.css} +1 -1
  320. package/filter/filter.d.ts +1 -1
  321. package/filter/filter.js.map +1 -1
  322. package/filter/index.d.ts +1 -0
  323. package/filter/types.d.ts +31 -63
  324. package/footer/footer.js.map +1 -1
  325. package/form/form-custom-field/form-custom-field.js +2 -0
  326. package/form/form-custom-field/form-custom-field.js.map +1 -0
  327. package/form/form-custom-field/index.d.ts +2 -0
  328. package/form/form-custom-field/types.d.ts +7 -0
  329. package/form/form-date-input/form-date-input.js +2 -0
  330. package/form/form-date-input/form-date-input.js.map +1 -0
  331. package/form/form-date-input/index.d.ts +2 -0
  332. package/form/form-date-input/types.d.ts +8 -0
  333. package/form/form-date-range-input/form-date-range-input.js +2 -0
  334. package/form/form-date-range-input/form-date-range-input.js.map +1 -0
  335. package/form/form-date-range-input/index.d.ts +2 -0
  336. package/form/form-date-range-input/types.d.ts +8 -0
  337. package/form/form-e-signature/form-e-signature.js +2 -0
  338. package/form/form-e-signature/form-e-signature.js.map +1 -0
  339. package/form/form-e-signature/index.d.ts +2 -0
  340. package/form/form-e-signature/types.d.ts +8 -0
  341. package/form/form-histogram-slider/form-histogram-slider.js +2 -0
  342. package/form/form-histogram-slider/form-histogram-slider.js.map +1 -0
  343. package/form/form-histogram-slider/index.d.ts +2 -0
  344. package/form/form-histogram-slider/types.d.ts +8 -0
  345. package/form/form-input/form-input.js +2 -0
  346. package/form/form-input/form-input.js.map +1 -0
  347. package/form/form-input/index.d.ts +2 -0
  348. package/form/form-input/types.d.ts +8 -0
  349. package/form/form-input-group/form-input-group.js +2 -0
  350. package/form/form-input-group/form-input-group.js.map +1 -0
  351. package/form/form-input-group/index.d.ts +2 -0
  352. package/form/form-input-group/types.d.ts +10 -0
  353. package/form/form-label/form-label-addon.js +2 -0
  354. package/form/form-label/form-label-addon.js.map +1 -0
  355. package/form/form-label/form-label-addon.styles.js +2 -0
  356. package/form/form-label/form-label-addon.styles.js.map +1 -0
  357. package/form/form-label/form-label-addon.styles_aztasj.css +1 -0
  358. package/form/form-label/form-label.js +2 -0
  359. package/form/form-label/form-label.js.map +1 -0
  360. package/form/form-label/form-label.styles.js +2 -0
  361. package/form/form-label/form-label.styles.js.map +1 -0
  362. package/form/form-label/form-label.styles_180zf7j.css +6 -0
  363. package/form/form-label/index.d.ts +2 -0
  364. package/form/form-label/types.d.ts +39 -0
  365. package/form/form-masked-input/form-masked-input.js +2 -0
  366. package/form/form-masked-input/form-masked-input.js.map +1 -0
  367. package/form/form-masked-input/index.d.ts +2 -0
  368. package/form/form-masked-input/types.d.ts +8 -0
  369. package/form/form-multi-select/form-multi-select.js +2 -0
  370. package/form/form-multi-select/form-multi-select.js.map +1 -0
  371. package/form/form-multi-select/index.d.ts +2 -0
  372. package/form/form-multi-select/types.d.ts +10 -0
  373. package/form/form-nested-multi-select/form-nested-multi-select.js +2 -0
  374. package/form/form-nested-multi-select/form-nested-multi-select.js.map +1 -0
  375. package/form/form-nested-multi-select/index.d.ts +2 -0
  376. package/form/form-nested-multi-select/types.d.ts +11 -0
  377. package/form/form-nested-select/form-nested-select.js +2 -0
  378. package/form/form-nested-select/form-nested-select.js.map +1 -0
  379. package/form/form-nested-select/index.d.ts +2 -0
  380. package/form/form-nested-select/types.d.ts +11 -0
  381. package/form/{form-otp-verification.d.ts → form-otp-verification/form-otp-verification.d.ts} +1 -1
  382. package/form/form-otp-verification/form-otp-verification.js +2 -0
  383. package/form/form-otp-verification/form-otp-verification.js.map +1 -0
  384. package/form/form-otp-verification/index.d.ts +2 -0
  385. package/form/form-otp-verification/types.d.ts +1 -0
  386. package/form/form-phone-number-input/form-phone-number-input.js +2 -0
  387. package/form/form-phone-number-input/form-phone-number-input.js.map +1 -0
  388. package/form/form-phone-number-input/index.d.ts +2 -0
  389. package/form/form-phone-number-input/types.d.ts +8 -0
  390. package/form/form-predictive-text-input/form-predictive-text-input.js +2 -0
  391. package/form/form-predictive-text-input/form-predictive-text-input.js.map +1 -0
  392. package/form/form-predictive-text-input/index.d.ts +2 -0
  393. package/form/form-predictive-text-input/types.d.ts +10 -0
  394. package/form/form-range-select/form-range-select.js +2 -0
  395. package/form/form-range-select/form-range-select.js.map +1 -0
  396. package/form/form-range-select/index.d.ts +2 -0
  397. package/form/form-range-select/types.d.ts +10 -0
  398. package/form/form-range-slider/form-range-slider.js +2 -0
  399. package/form/form-range-slider/form-range-slider.js.map +1 -0
  400. package/form/form-range-slider/index.d.ts +2 -0
  401. package/form/form-range-slider/types.d.ts +8 -0
  402. package/form/form-select/form-select.js +2 -0
  403. package/form/form-select/form-select.js.map +1 -0
  404. package/form/form-select/index.d.ts +2 -0
  405. package/form/form-select/types.d.ts +10 -0
  406. package/form/form-select-histogram/form-select-histogram.js +2 -0
  407. package/form/form-select-histogram/form-select-histogram.js.map +1 -0
  408. package/form/form-select-histogram/index.d.ts +2 -0
  409. package/form/form-select-histogram/types.d.ts +8 -0
  410. package/form/form-slider/form-slider.js +2 -0
  411. package/form/form-slider/form-slider.js.map +1 -0
  412. package/form/form-slider/index.d.ts +2 -0
  413. package/form/form-slider/types.d.ts +8 -0
  414. package/form/form-textarea/form-textarea.js +2 -0
  415. package/form/form-textarea/form-textarea.js.map +1 -0
  416. package/form/form-textarea/form-textarea.styles.js +2 -0
  417. package/form/form-textarea/form-textarea.styles.js.map +1 -0
  418. package/form/form-textarea/form-textarea.styles_1kneyif.css +3 -0
  419. package/form/form-textarea/index.d.ts +2 -0
  420. package/form/form-textarea/types.d.ts +8 -0
  421. package/form/form-time-range-picker/form-time-range-picker.js +2 -0
  422. package/form/form-time-range-picker/form-time-range-picker.js.map +1 -0
  423. package/form/form-time-range-picker/index.d.ts +2 -0
  424. package/form/form-time-range-picker/types.d.ts +8 -0
  425. package/form/form-timepicker/form-timepicker.js +2 -0
  426. package/form/form-timepicker/form-timepicker.js.map +1 -0
  427. package/form/form-timepicker/index.d.ts +2 -0
  428. package/form/form-timepicker/types.d.ts +8 -0
  429. package/form/form-unit-number-input/form-unit-number-input.js +2 -0
  430. package/form/form-unit-number-input/form-unit-number-input.js.map +1 -0
  431. package/form/form-unit-number-input/index.d.ts +2 -0
  432. package/form/form-unit-number-input/types.d.ts +8 -0
  433. package/form/form-wrapper.js +1 -1
  434. package/form/form-wrapper.js.map +1 -1
  435. package/form/index.d.ts +47 -24
  436. package/form/index.js +1 -1
  437. package/form/index.js.map +1 -1
  438. package/form/types.d.ts +1 -208
  439. package/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  440. package/histogram-slider/histogram-slider.js.map +1 -1
  441. package/image-button/image-button.js.map +1 -1
  442. package/input/input.js.map +1 -1
  443. package/input-group/input-group.js.map +1 -1
  444. package/input-group/types.d.ts +1 -1
  445. package/input-multi-select/input-multi-select.js.map +1 -1
  446. package/input-multi-select/types.d.ts +1 -1
  447. package/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
  448. package/input-nested-select/input-nested-select.js.map +1 -1
  449. package/input-nested-select/types.d.ts +1 -1
  450. package/input-range-select/input-range-select.js.map +1 -1
  451. package/input-range-select/types.d.ts +1 -1
  452. package/input-range-slider/input-range-slider.js.map +1 -1
  453. package/input-select/input-select.js.map +1 -1
  454. package/input-select/types.d.ts +1 -1
  455. package/input-slider/input-slider.js.map +1 -1
  456. package/input-slider/types.d.ts +1 -1
  457. package/input-textarea/textarea.js.map +1 -1
  458. package/input-textarea/textarea.styles.js +1 -1
  459. package/input-textarea/textarea.styles.js.map +1 -1
  460. package/input-textarea/{textarea.styles_22z4n3.css → textarea.styles_q77m5x.css} +1 -1
  461. package/language-switcher/language-switcher.js.map +1 -1
  462. package/layout/index.js.map +1 -1
  463. package/link-list/components/common.d.ts +1 -1
  464. package/link-list/components/common.js.map +1 -1
  465. package/link-list/components/link-list-eager.d.ts +2 -2
  466. package/link-list/components/link-list-eager.js.map +1 -1
  467. package/link-list/components/link-list-lazy.d.ts +2 -2
  468. package/link-list/components/link-list-lazy.js.map +1 -1
  469. package/link-list/link-list.js.map +1 -1
  470. package/link-list/types.d.ts +89 -3
  471. package/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  472. package/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  473. package/markup/markup.js.map +1 -1
  474. package/masked-input/masked-input.js.map +1 -1
  475. package/masthead/masthead.js.map +1 -1
  476. package/menu/menu.js.map +1 -1
  477. package/menu/types.d.ts +17 -1
  478. package/modal/index.js.map +1 -1
  479. package/modal/types.d.ts +3 -1
  480. package/modal-v2/modal-v2.js.map +1 -1
  481. package/modal-v2/types.d.ts +17 -0
  482. package/navbar/navbar.js.map +1 -1
  483. package/navbar/types.d.ts +1 -0
  484. package/notification-banner/notification-banner.js.map +1 -1
  485. package/otp-input/otp-input.js +1 -1
  486. package/otp-input/otp-input.js.map +1 -1
  487. package/otp-input/types.d.ts +14 -9
  488. package/otp-verification/contact-input-section.js +1 -1
  489. package/otp-verification/contact-input-section.js.map +1 -1
  490. package/otp-verification/otp-verification.js.map +1 -1
  491. package/otp-verification/verification-section.js +1 -1
  492. package/otp-verification/verification-section.js.map +1 -1
  493. package/overlay/overlay.js.map +1 -1
  494. package/package.json +1 -1
  495. package/pagination/pagination.js.map +1 -1
  496. package/phone-number-input/phone-number-input.js.map +1 -1
  497. package/pill/pill.js.map +1 -1
  498. package/popover/popover-inline/index.d.ts +1 -0
  499. package/popover/popover-inline/popover-inline.d.ts +1 -1
  500. package/popover/popover-inline/popover-inline.js.map +1 -1
  501. package/popover/popover-inline/types.d.ts +36 -0
  502. package/popover/popover.js.map +1 -1
  503. package/popover/types.d.ts +2 -35
  504. package/predictive-text-input/predictive-text-input.js +1 -1
  505. package/predictive-text-input/predictive-text-input.js.map +1 -1
  506. package/predictive-text-input/types.d.ts +1 -1
  507. package/progress-indicator/progress-indicator.js.map +1 -1
  508. package/radio-button/radio-button.js.map +1 -1
  509. package/radio-button/types.d.ts +3 -0
  510. package/schedule/schedule.js.map +1 -1
  511. package/select-histogram/select-histogram.js.map +1 -1
  512. package/select-histogram/types.d.ts +1 -1
  513. package/shared/dropdown-list/dropdown-list.js +1 -1
  514. package/shared/dropdown-list/dropdown-list.js.map +1 -1
  515. package/shared/dropdown-wrapper/element-with-dropdown.d.ts +5 -4
  516. package/shared/dropdown-wrapper/element-with-dropdown.js +1 -1
  517. package/shared/dropdown-wrapper/element-with-dropdown.js.map +1 -1
  518. package/sidenav/sidenav.js.map +1 -1
  519. package/sidenav/types.d.ts +1 -0
  520. package/singpass-button/singpass-button.js.map +1 -1
  521. package/singpass-button/singpass-button.styles.js +1 -1
  522. package/singpass-button/singpass-button.styles.js.map +1 -1
  523. package/singpass-button/{singpass-button.styles_1miyex3.css → singpass-button.styles_1fj2lru.css} +1 -1
  524. package/smart-app-banner/smart-app-banner.js.map +1 -1
  525. package/smart-app-banner/smart-app-banner.styles.js +1 -1
  526. package/smart-app-banner/smart-app-banner.styles.js.map +1 -1
  527. package/{cjs/smart-app-banner/smart-app-banner.styles_15u6yv4.css → smart-app-banner/smart-app-banner.styles_r6yjq9.css} +1 -1
  528. package/smart-app-banner/types.d.ts +2 -0
  529. package/tab/tab.js.map +1 -1
  530. package/table/table.d.ts +9 -8
  531. package/table/table.js.map +1 -1
  532. package/table/types.d.ts +35 -0
  533. package/tag/tag.js.map +1 -1
  534. package/text-list/index.js.map +1 -1
  535. package/theme/styles/pa.css +0 -41
  536. package/theme/theme-provider/hooks.js.map +1 -1
  537. package/theme/theme-provider/index.js.map +1 -1
  538. package/theme/tokens/border.d.ts +9 -3
  539. package/theme/tokens/border.js.map +1 -1
  540. package/theme/tokens/breakpoint.js.map +1 -1
  541. package/theme/tokens/colour.d.ts +9 -3
  542. package/theme/tokens/colour.js.map +1 -1
  543. package/theme/tokens/component.d.ts +3 -1
  544. package/theme/tokens/component.js.map +1 -1
  545. package/theme/tokens/font.d.ts +6 -2
  546. package/theme/tokens/font.js.map +1 -1
  547. package/theme/tokens/media-query.d.ts +3 -1
  548. package/theme/tokens/media-query.js.map +1 -1
  549. package/theme/tokens/motion.d.ts +3 -1
  550. package/theme/tokens/motion.js.map +1 -1
  551. package/theme/tokens/radius.d.ts +3 -1
  552. package/theme/tokens/radius.js.map +1 -1
  553. package/theme/tokens/shadow.d.ts +3 -1
  554. package/theme/tokens/shadow.js.map +1 -1
  555. package/theme/tokens/spacing.d.ts +3 -1
  556. package/theme/tokens/spacing.js.map +1 -1
  557. package/theme/utils/use-apply-styles.js.map +1 -1
  558. package/theme/utils/use-design-token.js.map +1 -1
  559. package/theme/utils/use-media-query.js.map +1 -1
  560. package/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  561. package/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  562. package/time-range-picker/time-range-picker.js.map +1 -1
  563. package/time-range-picker/types.d.ts +1 -1
  564. package/time-slot-bar/time-slot-bar.js.map +1 -1
  565. package/time-slot-bar/types.d.ts +5 -1
  566. package/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
  567. package/time-slot-bar-week/types.d.ts +6 -0
  568. package/time-slot-week-view/time-slot-week-view.js.map +1 -1
  569. package/time-slot-week-view/types.d.ts +2 -0
  570. package/timeline/timeline.js.map +1 -1
  571. package/timeline/types.d.ts +1 -1
  572. package/timepicker/timepicker.js.map +1 -1
  573. package/timepicker/types.d.ts +2 -2
  574. package/timetable/timetable.js.map +1 -1
  575. package/toast/toast.js.map +1 -1
  576. package/toast/toast.styles.js +1 -1
  577. package/toast/toast.styles.js.map +1 -1
  578. package/{cjs/toast/toast.styles_1e0l60w.css → toast/toast.styles_57j3lf.css} +1 -1
  579. package/toast/types.d.ts +2 -0
  580. package/toggle/toggle.js.map +1 -1
  581. package/tools/shared/generated-file-formatter.d.ts +6 -0
  582. package/tools/shared/jsdoc-parser.d.ts +36 -0
  583. package/tools/shared/ts-morph-project-factory.d.ts +9 -0
  584. package/tools/shared/typescript-source-provider.d.ts +9 -0
  585. package/tools/storybook-argtypes/adapters/file-system-adapter.d.ts +69 -0
  586. package/tools/storybook-argtypes/arg-types-generator.d.ts +85 -0
  587. package/tools/storybook-argtypes/config/arg-types-config.d.ts +31 -0
  588. package/tools/storybook-argtypes/index.d.ts +11 -0
  589. package/tools/storybook-argtypes/services/arg-types-row-builder.d.ts +49 -0
  590. package/tools/storybook-argtypes/services/file-path-resolver.d.ts +118 -0
  591. package/tools/storybook-argtypes/services/index.d.ts +6 -0
  592. package/tools/storybook-argtypes/services/jsdoc-metadata-extractor.d.ts +33 -0
  593. package/tools/storybook-argtypes/services/story-registry-generator.d.ts +27 -0
  594. package/tools/storybook-argtypes/services/type-dependency-resolver.d.ts +46 -0
  595. package/tools/storybook-argtypes/services/type-formatting-service.d.ts +27 -0
  596. package/tools/storybook-argtypes/types.d.ts +114 -0
  597. package/typography/index.js.map +1 -1
  598. package/uneditable-section/index.js.map +1 -1
  599. package/uneditable-section/section-item.js +1 -1
  600. package/uneditable-section/section-item.js.map +1 -1
  601. package/uneditable-section/types.d.ts +2 -2
  602. package/unit-number/unit-number-input.js.map +1 -1
  603. package/button/button.styles_1pxy0co.css +0 -20
  604. package/cjs/button/button.styles_1pxy0co.css +0 -20
  605. package/cjs/form/form-custom-field.js +0 -2
  606. package/cjs/form/form-custom-field.js.map +0 -1
  607. package/cjs/form/form-date-input.js +0 -2
  608. package/cjs/form/form-date-input.js.map +0 -1
  609. package/cjs/form/form-date-range-input.js +0 -2
  610. package/cjs/form/form-date-range-input.js.map +0 -1
  611. package/cjs/form/form-e-signature.js +0 -2
  612. package/cjs/form/form-e-signature.js.map +0 -1
  613. package/cjs/form/form-histogram.js +0 -2
  614. package/cjs/form/form-histogram.js.map +0 -1
  615. package/cjs/form/form-input-group.js +0 -2
  616. package/cjs/form/form-input-group.js.map +0 -1
  617. package/cjs/form/form-input.js +0 -2
  618. package/cjs/form/form-input.js.map +0 -1
  619. package/cjs/form/form-label-addon.js +0 -2
  620. package/cjs/form/form-label-addon.js.map +0 -1
  621. package/cjs/form/form-label-addon.styles.js +0 -2
  622. package/cjs/form/form-label-addon.styles.js.map +0 -1
  623. package/cjs/form/form-label-addon.styles_b00z8p.css +0 -1
  624. package/cjs/form/form-label.js +0 -2
  625. package/cjs/form/form-label.js.map +0 -1
  626. package/cjs/form/form-label.styles.js +0 -2
  627. package/cjs/form/form-label.styles.js.map +0 -1
  628. package/cjs/form/form-label.styles_1nbe0bm.css +0 -6
  629. package/cjs/form/form-masked-input.js +0 -2
  630. package/cjs/form/form-masked-input.js.map +0 -1
  631. package/cjs/form/form-multi-select.js +0 -2
  632. package/cjs/form/form-multi-select.js.map +0 -1
  633. package/cjs/form/form-nested-multi-select.js +0 -2
  634. package/cjs/form/form-nested-multi-select.js.map +0 -1
  635. package/cjs/form/form-nested-select.js +0 -2
  636. package/cjs/form/form-nested-select.js.map +0 -1
  637. package/cjs/form/form-otp-verification.js +0 -2
  638. package/cjs/form/form-otp-verification.js.map +0 -1
  639. package/cjs/form/form-phone-number-input.js +0 -2
  640. package/cjs/form/form-phone-number-input.js.map +0 -1
  641. package/cjs/form/form-predictive-text-input.js +0 -2
  642. package/cjs/form/form-predictive-text-input.js.map +0 -1
  643. package/cjs/form/form-range-select.js +0 -2
  644. package/cjs/form/form-range-select.js.map +0 -1
  645. package/cjs/form/form-range-slider.js +0 -2
  646. package/cjs/form/form-range-slider.js.map +0 -1
  647. package/cjs/form/form-select-histogram.js +0 -2
  648. package/cjs/form/form-select-histogram.js.map +0 -1
  649. package/cjs/form/form-select.js +0 -2
  650. package/cjs/form/form-select.js.map +0 -1
  651. package/cjs/form/form-slider.js +0 -2
  652. package/cjs/form/form-slider.js.map +0 -1
  653. package/cjs/form/form-textarea.js +0 -2
  654. package/cjs/form/form-textarea.js.map +0 -1
  655. package/cjs/form/form-textarea.styles.js +0 -2
  656. package/cjs/form/form-textarea.styles.js.map +0 -1
  657. package/cjs/form/form-textarea.styles_3p9qoy.css +0 -3
  658. package/cjs/form/form-time-range-picker.js +0 -2
  659. package/cjs/form/form-time-range-picker.js.map +0 -1
  660. package/cjs/form/form-timepicker.js +0 -2
  661. package/cjs/form/form-timepicker.js.map +0 -1
  662. package/cjs/form/form-unit-number-input.js +0 -2
  663. package/cjs/form/form-unit-number-input.js.map +0 -1
  664. package/form/form-custom-field.js +0 -2
  665. package/form/form-custom-field.js.map +0 -1
  666. package/form/form-date-input.js +0 -2
  667. package/form/form-date-input.js.map +0 -1
  668. package/form/form-date-range-input.js +0 -2
  669. package/form/form-date-range-input.js.map +0 -1
  670. package/form/form-e-signature.js +0 -2
  671. package/form/form-e-signature.js.map +0 -1
  672. package/form/form-histogram.js +0 -2
  673. package/form/form-histogram.js.map +0 -1
  674. package/form/form-input-group.js +0 -2
  675. package/form/form-input-group.js.map +0 -1
  676. package/form/form-input.js +0 -2
  677. package/form/form-input.js.map +0 -1
  678. package/form/form-label-addon.js +0 -2
  679. package/form/form-label-addon.js.map +0 -1
  680. package/form/form-label-addon.styles.js +0 -2
  681. package/form/form-label-addon.styles.js.map +0 -1
  682. package/form/form-label-addon.styles_b00z8p.css +0 -1
  683. package/form/form-label.js +0 -2
  684. package/form/form-label.js.map +0 -1
  685. package/form/form-label.styles.js +0 -2
  686. package/form/form-label.styles.js.map +0 -1
  687. package/form/form-label.styles_1nbe0bm.css +0 -6
  688. package/form/form-masked-input.js +0 -2
  689. package/form/form-masked-input.js.map +0 -1
  690. package/form/form-multi-select.js +0 -2
  691. package/form/form-multi-select.js.map +0 -1
  692. package/form/form-nested-multi-select.js +0 -2
  693. package/form/form-nested-multi-select.js.map +0 -1
  694. package/form/form-nested-select.js +0 -2
  695. package/form/form-nested-select.js.map +0 -1
  696. package/form/form-otp-verification.js +0 -2
  697. package/form/form-otp-verification.js.map +0 -1
  698. package/form/form-phone-number-input.js +0 -2
  699. package/form/form-phone-number-input.js.map +0 -1
  700. package/form/form-predictive-text-input.js +0 -2
  701. package/form/form-predictive-text-input.js.map +0 -1
  702. package/form/form-range-select.js +0 -2
  703. package/form/form-range-select.js.map +0 -1
  704. package/form/form-range-slider.js +0 -2
  705. package/form/form-range-slider.js.map +0 -1
  706. package/form/form-select-histogram.js +0 -2
  707. package/form/form-select-histogram.js.map +0 -1
  708. package/form/form-select.js +0 -2
  709. package/form/form-select.js.map +0 -1
  710. package/form/form-slider.js +0 -2
  711. package/form/form-slider.js.map +0 -1
  712. package/form/form-textarea.js +0 -2
  713. package/form/form-textarea.js.map +0 -1
  714. package/form/form-textarea.styles.js +0 -2
  715. package/form/form-textarea.styles.js.map +0 -1
  716. package/form/form-textarea.styles_3p9qoy.css +0 -3
  717. package/form/form-time-range-picker.js +0 -2
  718. package/form/form-time-range-picker.js.map +0 -1
  719. package/form/form-timepicker.js +0 -2
  720. package/form/form-timepicker.js.map +0 -1
  721. package/form/form-unit-number-input.js +0 -2
  722. package/form/form-unit-number-input.js.map +0 -1
  723. package/link-list/internal-types.d.ts +0 -85
  724. /package/{codemod-utils.d.ts → codemods/codemod-utils.d.ts} +0 -0
  725. /package/{migrate-popover → codemods/migrate-popover}/index.d.ts +0 -0
  726. /package/{run-codemod.d.ts → codemods/run-codemod.d.ts} +0 -0
  727. /package/form/{form-custom-field.d.ts → form-custom-field/form-custom-field.d.ts} +0 -0
  728. /package/form/{form-date-input.d.ts → form-date-input/form-date-input.d.ts} +0 -0
  729. /package/form/{form-date-range-input.d.ts → form-date-range-input/form-date-range-input.d.ts} +0 -0
  730. /package/form/{form-e-signature.d.ts → form-e-signature/form-e-signature.d.ts} +0 -0
  731. /package/form/{form-histogram.d.ts → form-histogram-slider/form-histogram-slider.d.ts} +0 -0
  732. /package/form/{form-input.d.ts → form-input/form-input.d.ts} +0 -0
  733. /package/form/{form-input-group.d.ts → form-input-group/form-input-group.d.ts} +0 -0
  734. /package/form/{form-label-addon.d.ts → form-label/form-label-addon.d.ts} +0 -0
  735. /package/form/{form-label-addon.styles.d.ts → form-label/form-label-addon.styles.d.ts} +0 -0
  736. /package/form/{form-label.d.ts → form-label/form-label.d.ts} +0 -0
  737. /package/form/{form-label.styles.d.ts → form-label/form-label.styles.d.ts} +0 -0
  738. /package/form/{form-masked-input.d.ts → form-masked-input/form-masked-input.d.ts} +0 -0
  739. /package/form/{form-multi-select.d.ts → form-multi-select/form-multi-select.d.ts} +0 -0
  740. /package/form/{form-nested-multi-select.d.ts → form-nested-multi-select/form-nested-multi-select.d.ts} +0 -0
  741. /package/form/{form-nested-select.d.ts → form-nested-select/form-nested-select.d.ts} +0 -0
  742. /package/form/{form-phone-number-input.d.ts → form-phone-number-input/form-phone-number-input.d.ts} +0 -0
  743. /package/form/{form-predictive-text-input.d.ts → form-predictive-text-input/form-predictive-text-input.d.ts} +0 -0
  744. /package/form/{form-range-select.d.ts → form-range-select/form-range-select.d.ts} +0 -0
  745. /package/form/{form-range-slider.d.ts → form-range-slider/form-range-slider.d.ts} +0 -0
  746. /package/form/{form-select.d.ts → form-select/form-select.d.ts} +0 -0
  747. /package/form/{form-select-histogram.d.ts → form-select-histogram/form-select-histogram.d.ts} +0 -0
  748. /package/form/{form-slider.d.ts → form-slider/form-slider.d.ts} +0 -0
  749. /package/form/{form-textarea.d.ts → form-textarea/form-textarea.d.ts} +0 -0
  750. /package/form/{form-textarea.styles.d.ts → form-textarea/form-textarea.styles.d.ts} +0 -0
  751. /package/form/{form-time-range-picker.d.ts → form-time-range-picker/form-time-range-picker.d.ts} +0 -0
  752. /package/form/{form-timepicker.d.ts → form-timepicker/form-timepicker.d.ts} +0 -0
  753. /package/form/{form-unit-number-input.d.ts → form-unit-number-input/form-unit-number-input.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"filter-item-checkbox.js","sources":["../../../src/filter/addons/filter-item-checkbox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport type { AriaAttributes } from \"react\";\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { Button } from \"../../button\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Toggle } from \"../../toggle\";\nimport { FilterContext } from \"../filter-context\";\nimport { FilterItem } from \"../filter-item\";\nimport type {\n FilterItemCheckboxOptionProps,\n FilterItemCheckboxProps,\n} from \"../types\";\nimport * as styles from \"./filter-item-checkbox.styles\";\nimport {\n buildKeyPath,\n flattenNestedOptions,\n getAllDescendantChildren,\n getAllDescendantKeyPaths,\n hasNestedOptions,\n} from \"./filter-item-checkbox-helpers\";\nimport type { FlattenedFilterOption } from \"./types\";\n\nexport const FilterItemCheckbox = <T = FilterItemCheckboxOptionProps,>({\n selectedOptions,\n options,\n showAsCheckboxInMobile = false,\n minimisableOptions = true,\n onSelect,\n labelExtractor,\n valueExtractor,\n useToggleContentWidth,\n ...filterItemProps\n}: FilterItemCheckboxProps<T>) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const { mode } = useContext(FilterContext);\n const [selected, setSelected] = useState<T[]>(selectedOptions || []);\n const [minimisedHeight, setMinimisedHeight] = useState<number>();\n const [lastVisibleElementIndex, setLastVisibleElementIndex] =\n useState<number>(options.length);\n const parentRef = useRef<HTMLDivElement>(null);\n const lastVisibleElement = useRef<HTMLElement | null>(null);\n\n // Check if options have nested structure\n const isNested = useMemo(\n () => hasNestedOptions(options, (item) => (item as any).options),\n [options]\n );\n\n const isMobileToggleMode =\n mode === \"mobile\" && !showAsCheckboxInMobile && !isNested;\n\n // Flatten nested options\n const flattenedOptions = useMemo(\n () =>\n flattenNestedOptions(\n options,\n [],\n valueExtractor || ((item) => (item as any).value),\n labelExtractor || ((item) => (item as any).label)\n ),\n [options, valueExtractor, labelExtractor]\n );\n\n const optionCount = flattenedOptions.length;\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleItemClick = (item: T) => () => {\n // Find the flattened option\n const flatOption = flattenedOptions.find(\n (opt) => opt.originalItem === item\n );\n if (!flatOption) return;\n\n if (flatOption.hasChildren) {\n // Handle parent click - select/deselect all children\n const allChildren = getAllDescendantChildren<T>(\n flattenedOptions,\n flatOption.keyPath\n );\n\n const currentlySelectedChildren = allChildren.filter((child) =>\n selected.some((s) => getValue(s) === getValue(child))\n );\n\n let newSelection = [...selected];\n\n if (currentlySelectedChildren.length === allChildren.length) {\n // All children selected, deselect all\n newSelection = newSelection.filter(\n (s) =>\n !allChildren.some(\n (child) => getValue(child) === getValue(s)\n )\n );\n } else {\n // Some or no children selected, select all\n allChildren.forEach((child) => {\n if (\n !newSelection.some(\n (s) => getValue(s) === getValue(child)\n )\n ) {\n newSelection.push(child);\n }\n });\n }\n\n setSelected(newSelection);\n onSelect?.(newSelection);\n } else {\n // Handle leaf item click - toggle selection\n const newSelection = [...selected];\n const selectedIndex = selected.findIndex(\n (s) => getValue(s) === getValue(item)\n );\n\n if (selectedIndex >= 0) {\n newSelection.splice(selectedIndex, 1);\n } else {\n newSelection.push(item);\n }\n setSelected(newSelection);\n onSelect?.(newSelection);\n }\n };\n\n const handleSelectClearAll = () => {\n if (isNested) {\n if (selected.length > 0) {\n // Clear all\n setSelected([]);\n onSelect?.([]);\n } else {\n // Select all leaf nodes\n const leafOptions = flattenedOptions.filter(\n (option) => !option.hasChildren\n );\n const allValues = leafOptions.map(\n (option) => option.originalItem\n ) as T[];\n setSelected(allValues);\n onSelect?.(allValues);\n }\n } else {\n const newSelection = selected.length ? [] : options;\n setSelected(newSelection);\n onSelect?.(newSelection);\n }\n };\n\n const handleListItemKeyDown =\n (originalItem: T) => (event: React.KeyboardEvent) => {\n if (isNested && (event.key === \" \" || event.key === \"Enter\")) {\n event.preventDefault();\n handleItemClick(originalItem)();\n }\n };\n\n const handleCheckboxChange = (originalItem: T) => () => {\n if (!isNested) {\n handleItemClick(originalItem)();\n }\n };\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getCheckboxState = (flatOption: (typeof flattenedOptions)[0]) => {\n if (!flatOption.hasChildren) {\n // Leaf item - simple check\n return {\n checked: selected.some(\n (s) =>\n getValue(s) === getValue(flatOption.originalItem as T)\n ),\n indeterminate: false,\n };\n }\n\n // Parent item - check children states (following IndeterminateState pattern)\n const allChildren = getAllDescendantKeyPaths(\n flattenedOptions,\n flatOption.keyPath\n )\n .map((keyPath: string[]) =>\n flattenedOptions.find(\n (opt) => buildKeyPath(opt.keyPath) === buildKeyPath(keyPath)\n )\n )\n .filter((opt) => opt && !opt.hasChildren)\n .map((opt) => opt!.originalItem as T);\n\n const selectedChildren = allChildren.filter((child) =>\n selected.some((s) => getValue(s) === getValue(child))\n );\n\n return {\n checked:\n selectedChildren.length === allChildren.length &&\n allChildren.length > 0,\n indeterminate:\n selectedChildren.length > 0 &&\n selectedChildren.length < allChildren.length,\n };\n };\n\n const getLabel = (item: T): React.ReactNode => {\n return labelExtractor\n ? labelExtractor(item)\n : (item as any).label ?? item?.toString();\n };\n\n const getValue = (item: T): string => {\n return valueExtractor\n ? valueExtractor(item)\n : (item as any).value ?? item?.toString();\n };\n\n const setVisibleItemsWhenMinimised = () => {\n const elementBottom = lastVisibleElement.current\n ? lastVisibleElement.current.offsetTop +\n lastVisibleElement.current.clientHeight\n : undefined;\n setMinimisedHeight(elementBottom);\n };\n\n const setVisibleMobileItemsWhenMinimised = useCallback(() => {\n if (!parentRef.current) {\n setMinimisedHeight(undefined);\n return;\n }\n\n const children = Array.from(parentRef.current.children);\n\n let lastElementInRow = 0;\n let rowCount = 0;\n let rowTop = -1;\n\n for (let i = 0; i < children.length; i++) {\n const childTop = (children[i] as HTMLDivElement).offsetTop;\n if (childTop > rowTop) {\n rowCount++;\n rowTop = childTop;\n // show only the first 2 rows\n if (rowCount > 2) {\n break;\n }\n }\n lastElementInRow = i;\n }\n\n setLastVisibleElementIndex(lastElementInRow);\n\n if (rowCount > 2) {\n setMinimisedHeight(rowTop - 8); // gap from next row\n } else {\n setMinimisedHeight(undefined);\n }\n }, []);\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (selectedOptions !== selected) {\n setSelected(selectedOptions || []);\n }\n }, [selectedOptions]);\n\n useEffect(() => {\n if (isMobileToggleMode) {\n setVisibleMobileItemsWhenMinimised();\n } else {\n setVisibleItemsWhenMinimised();\n }\n }, [options]);\n\n useResizeDetector({\n handleWidth: true,\n handleHeight: false,\n skipOnMount: true,\n refreshMode: \"throttle\",\n targetRef: parentRef,\n onResize: isMobileToggleMode\n ? setVisibleMobileItemsWhenMinimised\n : setVisibleItemsWhenMinimised,\n });\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderCheckboxIcon = (\n originalItem: T,\n flatOption: FlattenedFilterOption<T>\n ) => {\n const { checked, indeterminate } = getCheckboxState(flatOption);\n\n return (\n <Checkbox\n className={styles.checkbox}\n displaySize=\"small\"\n checked={checked}\n indeterminate={indeterminate}\n onChange={handleCheckboxChange(originalItem)}\n tabIndex={isNested ? -1 : undefined}\n aria-hidden={isNested ? \"true\" : undefined}\n />\n );\n };\n\n const renderCheckbox = (\n option: FlattenedFilterOption<T>,\n index: number,\n minimised: boolean\n ) => {\n const originalItem = option.originalItem;\n const optionLabel = getLabel(originalItem);\n const { checked, indeterminate } = getCheckboxState(option);\n const isSelected = checked || indeterminate;\n const isVisible = !minimised || index < 5;\n\n // ARIA attributes for tree items\n const treeItemAriaAttributes: AriaAttributes = isNested\n ? {\n \"aria-checked\": indeterminate ? \"mixed\" : checked,\n \"aria-selected\": !!checked,\n \"aria-level\": option.level + 1,\n \"aria-posinset\": option.indexInParent + 1,\n \"aria-setsize\": option.parentSetSize,\n }\n : {};\n\n const itemRef = (el: HTMLElement | null) => {\n if (el && option.level) {\n el.style.setProperty(\n styles.tokens.item.level,\n String(option.level)\n );\n }\n if (index === 4) {\n lastVisibleElement.current = el;\n }\n };\n\n const itemClassName = clsx(\n styles.item,\n !isVisible && styles.itemHidden,\n isSelected && styles.itemSelected\n );\n\n const itemContent = (\n <>\n {renderCheckboxIcon(originalItem, option)}\n {optionLabel}\n </>\n );\n\n if (isNested) {\n return (\n <div\n key={buildKeyPath(option.keyPath)}\n role=\"treeitem\"\n {...treeItemAriaAttributes}\n onClick={handleItemClick(originalItem)}\n onKeyDown={handleListItemKeyDown(originalItem)}\n tabIndex={0}\n className={itemClassName}\n ref={itemRef}\n >\n {itemContent}\n </div>\n );\n }\n\n return (\n <label\n key={buildKeyPath(option.keyPath)}\n onKeyDown={handleListItemKeyDown(originalItem)}\n className={itemClassName}\n ref={itemRef}\n >\n {itemContent}\n </label>\n );\n };\n\n const renderToggle = (\n option: FlattenedFilterOption<T>,\n index: number,\n minimised: boolean\n ) => {\n const originalItem = option.originalItem;\n const optionLabel = getLabel(originalItem);\n const optionValue = getValue(originalItem);\n const checked = !!selected.find((s) => getValue(s) === optionValue);\n const isToggleVisible =\n !minimised ||\n (!!minimisedHeight && index <= lastVisibleElementIndex);\n return (\n <Toggle\n key={optionValue}\n type=\"checkbox\"\n checked={checked}\n className={clsx(\n !useToggleContentWidth && styles.toggle,\n !isToggleVisible && styles.toggleHidden\n )}\n onChange={handleItemClick(originalItem)}\n useContentWidth={useToggleContentWidth}\n >\n {optionLabel}\n </Toggle>\n );\n };\n\n const renderSelectClearAllButton = () => {\n if (optionCount < 3) {\n return null;\n }\n return (\n <Button\n className={styles.selectAllButton}\n styleType=\"link\"\n type=\"button\"\n sizeType=\"small\"\n onClick={handleSelectClearAll}\n aria-label={\n selected.length\n ? \"Clear all selections\"\n : `Select all in ${\n parentRef.current?.ariaLabel || \"this group\"\n }`\n }\n >\n {selected.length ? \"Clear all\" : \"Select all\"}\n </Button>\n );\n };\n\n return (\n <FilterItem\n minimisable={\n minimisableOptions\n ? isMobileToggleMode // set minimisable base on mobile toggle mode\n ? !!minimisedHeight\n : optionCount > 5\n : false // if minimisableOptions is false, never allow minimising\n }\n minimisedHeight={minimisedHeight}\n {...filterItemProps}\n className={clsx(styles.filterItem, filterItemProps.className)}\n >\n {(_, { minimised }) => (\n <>\n {renderSelectClearAllButton()}\n <div\n role={isNested ? \"tree\" : \"group\"}\n aria-label={filterItemProps.title}\n aria-multiselectable={true}\n ref={parentRef}\n className={clsx(\n styles.group,\n isMobileToggleMode && styles.groupMobileToggleMode\n )}\n >\n {flattenedOptions.map((option, i) =>\n isMobileToggleMode\n ? renderToggle(option, i, minimised)\n : renderCheckbox(option, i, minimised)\n )}\n </div>\n </>\n )}\n </FilterItem>\n );\n};\n\nFilterItemCheckbox.displayName = \"Filter.Checkbox\";\n"],"names":["FilterItemCheckbox","_a","selectedOptions","options","showAsCheckboxInMobile","minimisableOptions","onSelect","labelExtractor","valueExtractor","useToggleContentWidth","filterItemProps","__rest","mode","useContext","FilterContext","selected","setSelected","useState","minimisedHeight","setMinimisedHeight","lastVisibleElementIndex","setLastVisibleElementIndex","length","parentRef","useRef","lastVisibleElement","isNested","useMemo","hasNestedOptions","item","isMobileToggleMode","flattenedOptions","flattenNestedOptions","value","label","optionCount","handleItemClick","flatOption","find","opt","originalItem","hasChildren","allChildren","getAllDescendantChildren","keyPath","currentlySelectedChildren","filter","child","some","s","getValue","newSelection","forEach","push","selectedIndex","findIndex","splice","handleSelectClearAll","allValues","option","map","handleListItemKeyDown","event","key","preventDefault","handleCheckboxChange","getCheckboxState","checked","indeterminate","getAllDescendantKeyPaths","buildKeyPath","selectedChildren","getLabel","toString","setVisibleItemsWhenMinimised","elementBottom","current","offsetTop","clientHeight","undefined","setVisibleMobileItemsWhenMinimised","useCallback","children","Array","from","lastElementInRow","rowCount","rowTop","i","childTop","useEffect","useResizeDetector","handleWidth","handleHeight","skipOnMount","refreshMode","targetRef","onResize","renderCheckboxIcon","_jsx","Checkbox","className","styles.checkbox","displaySize","onChange","tabIndex","renderSelectClearAllButton","Button","styles.selectAllButton","styleType","type","sizeType","onClick","ariaLabel","FilterItem","Object","assign","minimisable","clsx","styles.filterItem","_","minimised","_jsxs","_Fragment","role","title","ref","styles.group","styles.groupMobileToggleMode","index","optionLabel","optionValue","Toggle","styles.toggle","styles.toggleHidden","useContentWidth","renderToggle","isSelected","isVisible","treeItemAriaAttributes","level","indexInParent","parentSetSize","itemRef","el","style","setProperty","styles.tokens","String","itemClassName","styles.item","styles.itemHidden","styles.itemSelected","itemContent","onKeyDown","renderCheckbox","displayName"],"mappings":"g9BA+BO,MAAMA,EAA0DC,QAAAC,gBACnEA,EAAeC,QACfA,EAAOC,uBACPA,GAAyB,EAAKC,mBAC9BA,GAAqB,EAAIC,SACzBA,EAAQC,eACRA,EAAcC,eACdA,EAAcC,sBACdA,KACGC,EAAeC,EAAAV,EATiD,CAAA,kBAAA,UAAA,yBAAA,qBAAA,WAAA,iBAAA,iBAAA,0BAcnE,MAAMW,KAAEA,GAASC,EAAWC,IACrBC,EAAUC,GAAeC,EAAcf,GAAmB,KAC1DgB,EAAiBC,GAAsBF,KACvCG,EAAyBC,GAC5BJ,EAAiBd,EAAQmB,QACvBC,EAAYC,EAAuB,MACnCC,EAAqBD,EAA2B,MAGhDE,EAAWC,GACb,IAAMC,EAAiBzB,GAAU0B,GAAUA,EAAa1B,WACxD,CAACA,IAGC2B,EACO,WAATlB,IAAsBR,IAA2BsB,EAG/CK,GAAmBJ,GACrB,IACIK,EACI7B,EACA,GACAK,GAAc,CAAMqB,GAAUA,EAAaI,OAC3C1B,GAAc,CAAMsB,GAAUA,EAAaK,SAEnD,CAAC/B,EAASK,EAAgBD,IAGxB4B,GAAcJ,GAAiBT,OAK/Bc,GAAmBP,GAAY,KAEjC,MAAMQ,EAAaN,GAAiBO,MAC/BC,GAAQA,EAAIC,eAAiBX,IAElC,GAAKQ,EAEL,GAAIA,EAAWI,YAAa,CAExB,MAAMC,EAAcC,EAChBZ,GACAM,EAAWO,SAGTC,EAA4BH,EAAYI,QAAQC,GAClDhC,EAASiC,MAAMC,GAAMC,GAASD,KAAOC,GAASH,OAGlD,IAAII,EAAe,IAAIpC,GAEnB8B,EAA0BvB,SAAWoB,EAAYpB,OAEjD6B,EAAeA,EAAaL,QACvBG,IACIP,EAAYM,MACRD,GAAUG,GAASH,KAAWG,GAASD,OAKpDP,EAAYU,SAASL,IAEZI,EAAaH,MACTC,GAAMC,GAASD,KAAOC,GAASH,MAGpCI,EAAaE,KAAKN,EACtB,IAIR/B,EAAYmC,GACZ7C,SAAAA,EAAW6C,EACf,KAAO,CAEH,MAAMA,EAAe,IAAIpC,GACnBuC,EAAgBvC,EAASwC,WAC1BN,GAAMC,GAASD,KAAOC,GAASrB,KAGhCyB,GAAiB,EACjBH,EAAaK,OAAOF,EAAe,GAEnCH,EAAaE,KAAKxB,GAEtBb,EAAYmC,GACZ7C,SAAAA,EAAW6C,EACf,GAGEM,GAAuB,KACzB,GAAI/B,EACA,GAAIX,EAASO,OAAS,EAElBN,EAAY,IACZV,SAAAA,EAAW,QACR,CAEH,MAGMoD,EAHc3B,GAAiBe,QAChCa,IAAYA,EAAOlB,cAEMmB,KACzBD,GAAWA,EAAOnB,eAEvBxB,EAAY0C,GACZpD,SAAAA,EAAWoD,EACf,KACG,CACH,MAAMP,EAAepC,EAASO,OAAS,GAAKnB,EAC5Ca,EAAYmC,GACZ7C,SAAAA,EAAW6C,EACf,GAGEU,GACDrB,GAAqBsB,KACdpC,GAA2B,MAAdoC,EAAMC,KAA6B,UAAdD,EAAMC,MACxCD,EAAME,iBACN5B,GAAgBI,EAAhBJ,GACJ,EAGF6B,GAAwBzB,GAAoB,KACzCd,GACDU,GAAgBI,EAAhBJ,EACJ,EAME8B,GAAoB7B,IACtB,IAAKA,EAAWI,YAEZ,MAAO,CACH0B,QAASpD,EAASiC,MACbC,GACGC,GAASD,KAAOC,GAASb,EAAWG,gBAE5C4B,eAAe,GAKvB,MAAM1B,EAAc2B,EAChBtC,GACAM,EAAWO,SAEVgB,KAAKhB,GACFb,GAAiBO,MACZC,GAAQ+B,EAAa/B,EAAIK,WAAa0B,EAAa1B,OAG3DE,QAAQP,GAAQA,IAAQA,EAAIE,cAC5BmB,KAAKrB,GAAQA,EAAKC,eAEjB+B,EAAmB7B,EAAYI,QAAQC,GACzChC,EAASiC,MAAMC,GAAMC,GAASD,KAAOC,GAASH,OAGlD,MAAO,CACHoB,QACII,EAAiBjD,SAAWoB,EAAYpB,QACxCoB,EAAYpB,OAAS,EACzB8C,cACIG,EAAiBjD,OAAS,GAC1BiD,EAAiBjD,OAASoB,EAAYpB,OAC7C,EAGCkD,GAAY3C,UACd,OAAOtB,EACDA,EAAesB,GACI,QAAnB5B,EAAC4B,EAAaK,aAAK,IAAAjC,EAAAA,EAAI4B,aAAI,EAAJA,EAAM4C,UAAU,EAG3CvB,GAAYrB,UACd,OAAOrB,EACDA,EAAeqB,GACI,QAAnB5B,EAAC4B,EAAaI,aAAK,IAAAhC,EAAAA,EAAI4B,aAAI,EAAJA,EAAM4C,UAAU,EAG3CC,GAA+B,KACjC,MAAMC,EAAgBlD,EAAmBmD,QACnCnD,EAAmBmD,QAAQC,UAC3BpD,EAAmBmD,QAAQE,kBAC3BC,EACN5D,EAAmBwD,EAAc,EAG/BK,GAAqCC,GAAY,KACnD,IAAK1D,EAAUqD,QAEX,YADAzD,OAAmB4D,GAIvB,MAAMG,EAAWC,MAAMC,KAAK7D,EAAUqD,QAAQM,UAE9C,IAAIG,EAAmB,EACnBC,EAAW,EACXC,GAAS,EAEb,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAS5D,OAAQkE,IAAK,CACtC,MAAMC,EAAYP,EAASM,GAAsBX,UACjD,GAAIY,EAAWF,IACXD,IACAC,EAASE,EAELH,EAAW,GACX,MAGRD,EAAmBG,CACvB,CAEAnE,EAA2BgE,GAGvBlE,EADAmE,EAAW,EACQC,EAAS,OAETR,EACvB,GACD,IAKHW,GAAU,KACFxF,IAAoBa,GACpBC,EAAYd,GAAmB,GACnC,GACD,CAACA,IAEJwF,GAAU,KACF5D,EACAkD,KAEAN,IACJ,GACD,CAACvE,IAEJwF,EAAkB,CACdC,aAAa,EACbC,cAAc,EACdC,aAAa,EACbC,YAAa,WACbC,UAAWzE,EACX0E,SAAUnE,EACJkD,GACAN,KAMV,MAAMwB,GAAqB,CACvB1D,EACAH,KAEA,MAAM8B,QAAEA,EAAOC,cAAEA,GAAkBF,GAAiB7B,GAEpD,OACI8D,EAACC,EAAQ,CACLC,UAAWC,EACXC,YAAY,QACZpC,QAASA,EACTC,cAAeA,EACfoC,SAAUvC,GAAqBzB,GAC/BiE,SAAU/E,GAAW,OAAKqD,EAAS,cACtBrD,EAAW,YAASqD,GACnC,EA6GJ2B,GAA6B,WAC/B,OAAIvE,GAAc,EACP,KAGPgE,EAACQ,EAAM,CACHN,UAAWO,EACXC,UAAU,OACVC,KAAK,SACLC,SAAS,QACTC,QAASvD,GAAoB,aAEzB1C,EAASO,OACH,uBACA,kBACqB,QAAjBrB,EAAAsB,EAAUqD,eAAO,IAAA3E,OAAA,EAAAA,EAAEgH,YAAa,eAClC/B,SAGXnE,EAASO,OAAS,YAAc,cAC5B,EAIjB,OACI6E,EAACe,EAAUC,OAAAC,OAAA,CACPC,cACIhH,IACMyB,IACMZ,EACFiB,GAAc,GAG5BjB,gBAAiBA,GACbR,EAAe,CACnB2F,UAAWiB,EAAKC,EAAmB7G,EAAgB2F,WAAUnB,SAE5D,CAACsC,GAAKC,eACHC,EAAAC,EAAA,CAAAzC,SAAA,CACKwB,KACDP,EAAA,MAAA,CACIyB,KAAMlG,EAAW,OAAS,QAAO,aACrBhB,EAAgBmH,MAAK,wBACX,EACtBC,IAAKvG,EACL8E,UAAWiB,EACPS,EACAjG,GAAsBkG,YAGzBjG,GAAiB6B,KAAI,CAACD,EAAQ6B,IAC3B1D,EAhFH,EACjB6B,EACAsE,EACAR,KAEA,MAAMjF,EAAemB,EAAOnB,aACtB0F,EAAc1D,GAAShC,GACvB2F,EAAcjF,GAASV,GACvB2B,IAAYpD,EAASuB,MAAMW,GAAMC,GAASD,KAAOkF,IAIvD,OACIhC,EAACiC,EAAM,CAEHtB,KAAK,WACL3C,QAASA,EACTkC,UAAWiB,GACN7G,GAAyB4H,KARjCZ,GACEvG,GAAmB+G,GAAS7G,IAQHkH,GAExB9B,SAAUpE,GAAgBI,GAC1B+F,gBAAiB9H,EAAqByE,SAErCgD,GAVIC,EAWA,EAwDaK,CAAa7E,EAAQ6B,EAAGiC,GA7J/B,EACnB9D,EACAsE,EACAR,KAEA,MAAMjF,EAAemB,EAAOnB,aACtB0F,EAAc1D,GAAShC,IACvB2B,QAAEA,EAAOC,cAAEA,GAAkBF,GAAiBP,GAC9C8E,EAAatE,GAAWC,EACxBsE,GAAajB,GAAaQ,EAAQ,EAGlCU,EAAyCjH,EACzC,CACI,eAAgB0C,EAAgB,QAAUD,EAC1C,kBAAmBA,EACnB,aAAcR,EAAOiF,MAAQ,EAC7B,gBAAiBjF,EAAOkF,cAAgB,EACxC,eAAgBlF,EAAOmF,eAE3B,CAAA,EAEAC,EAAWC,IACTA,GAAMrF,EAAOiF,OACbI,EAAGC,MAAMC,YACLC,EAActH,KAAK+G,MACnBQ,OAAOzF,EAAOiF,QAGR,IAAVX,IACAxG,EAAmBmD,QAAUoE,EACjC,EAGEK,EAAgB/B,EAClBgC,GACCZ,GAAaa,EACdd,GAAce,GAGZC,EACF/B,EAAAC,EAAA,CAAAzC,SAAA,CACKgB,GAAmB1D,EAAcmB,GACjCuE,KAIT,OAAIxG,EAEIyE,uBAEIyB,KAAK,YACDe,GACJ3B,QAAS5E,GAAgBI,GACzBkH,UAAW7F,GAAsBrB,GACjCiE,SAAU,EACVJ,UAAWgD,EACXvB,IAAKiB,EAAO7D,SAEXuE,IATInF,EAAaX,EAAOf,UAejCuD,EAAA,QAAA,CAEIuD,UAAW7F,GAAsBrB,GACjC6D,UAAWgD,EACXvB,IAAKiB,EAAO7D,SAEXuE,GALInF,EAAaX,EAAOf,SAMrB,EAsFc+G,CAAehG,EAAQ6B,EAAGiC,YAKvC,EAIrBzH,EAAmB4J,YAAc"}
1
+ {"version":3,"file":"filter-item-checkbox.js","sources":["../../../src/filter/addons/filter-item-checkbox.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport type { AriaAttributes } from \"react\";\nimport {\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { Button } from \"../../button\";\nimport { Checkbox } from \"../../checkbox\";\nimport { Toggle } from \"../../toggle\";\nimport { FilterContext } from \"../filter-context\";\nimport { FilterItem } from \"../filter-item\";\nimport * as styles from \"./filter-item-checkbox.styles\";\nimport {\n buildKeyPath,\n flattenNestedOptions,\n getAllDescendantChildren,\n getAllDescendantKeyPaths,\n hasNestedOptions,\n} from \"./filter-item-checkbox-helpers\";\nimport type { FlattenedFilterOption } from \"./internal-types\";\nimport type {\n FilterItemCheckboxOptionProps,\n FilterItemCheckboxProps,\n} from \"./types\";\n\nexport const FilterItemCheckbox = <T = FilterItemCheckboxOptionProps,>({\n selectedOptions,\n options,\n showAsCheckboxInMobile = false,\n minimisableOptions = true,\n onSelect,\n labelExtractor,\n valueExtractor,\n useToggleContentWidth,\n ...filterItemProps\n}: FilterItemCheckboxProps<T>) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const { mode } = useContext(FilterContext);\n const [selected, setSelected] = useState<T[]>(selectedOptions || []);\n const [minimisedHeight, setMinimisedHeight] = useState<number>();\n const [lastVisibleElementIndex, setLastVisibleElementIndex] =\n useState<number>(options.length);\n const parentRef = useRef<HTMLDivElement>(null);\n const lastVisibleElement = useRef<HTMLElement | null>(null);\n\n // Check if options have nested structure\n const isNested = useMemo(\n () => hasNestedOptions(options, (item) => (item as any).options),\n [options]\n );\n\n const isMobileToggleMode =\n mode === \"mobile\" && !showAsCheckboxInMobile && !isNested;\n\n // Flatten nested options\n const flattenedOptions = useMemo(\n () =>\n flattenNestedOptions(\n options,\n [],\n valueExtractor || ((item) => (item as any).value),\n labelExtractor || ((item) => (item as any).label)\n ),\n [options, valueExtractor, labelExtractor]\n );\n\n const optionCount = flattenedOptions.length;\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleItemClick = (item: T) => () => {\n // Find the flattened option\n const flatOption = flattenedOptions.find(\n (opt) => opt.originalItem === item\n );\n if (!flatOption) return;\n\n if (flatOption.hasChildren) {\n // Handle parent click - select/deselect all children\n const allChildren = getAllDescendantChildren<T>(\n flattenedOptions,\n flatOption.keyPath\n );\n\n const currentlySelectedChildren = allChildren.filter((child) =>\n selected.some((s) => getValue(s) === getValue(child))\n );\n\n let newSelection = [...selected];\n\n if (currentlySelectedChildren.length === allChildren.length) {\n // All children selected, deselect all\n newSelection = newSelection.filter(\n (s) =>\n !allChildren.some(\n (child) => getValue(child) === getValue(s)\n )\n );\n } else {\n // Some or no children selected, select all\n allChildren.forEach((child) => {\n if (\n !newSelection.some(\n (s) => getValue(s) === getValue(child)\n )\n ) {\n newSelection.push(child);\n }\n });\n }\n\n setSelected(newSelection);\n onSelect?.(newSelection);\n } else {\n // Handle leaf item click - toggle selection\n const newSelection = [...selected];\n const selectedIndex = selected.findIndex(\n (s) => getValue(s) === getValue(item)\n );\n\n if (selectedIndex >= 0) {\n newSelection.splice(selectedIndex, 1);\n } else {\n newSelection.push(item);\n }\n setSelected(newSelection);\n onSelect?.(newSelection);\n }\n };\n\n const handleSelectClearAll = () => {\n if (isNested) {\n if (selected.length > 0) {\n // Clear all\n setSelected([]);\n onSelect?.([]);\n } else {\n // Select all leaf nodes\n const leafOptions = flattenedOptions.filter(\n (option) => !option.hasChildren\n );\n const allValues = leafOptions.map(\n (option) => option.originalItem\n ) as T[];\n setSelected(allValues);\n onSelect?.(allValues);\n }\n } else {\n const newSelection = selected.length ? [] : options;\n setSelected(newSelection);\n onSelect?.(newSelection);\n }\n };\n\n const handleListItemKeyDown =\n (originalItem: T) => (event: React.KeyboardEvent) => {\n if (isNested && (event.key === \" \" || event.key === \"Enter\")) {\n event.preventDefault();\n handleItemClick(originalItem)();\n }\n };\n\n const handleCheckboxChange = (originalItem: T) => () => {\n if (!isNested) {\n handleItemClick(originalItem)();\n }\n };\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getCheckboxState = (flatOption: (typeof flattenedOptions)[0]) => {\n if (!flatOption.hasChildren) {\n // Leaf item - simple check\n return {\n checked: selected.some(\n (s) =>\n getValue(s) === getValue(flatOption.originalItem as T)\n ),\n indeterminate: false,\n };\n }\n\n // Parent item - check children states (following IndeterminateState pattern)\n const allChildren = getAllDescendantKeyPaths(\n flattenedOptions,\n flatOption.keyPath\n )\n .map((keyPath: string[]) =>\n flattenedOptions.find(\n (opt) => buildKeyPath(opt.keyPath) === buildKeyPath(keyPath)\n )\n )\n .filter((opt) => opt && !opt.hasChildren)\n .map((opt) => opt!.originalItem as T);\n\n const selectedChildren = allChildren.filter((child) =>\n selected.some((s) => getValue(s) === getValue(child))\n );\n\n return {\n checked:\n selectedChildren.length === allChildren.length &&\n allChildren.length > 0,\n indeterminate:\n selectedChildren.length > 0 &&\n selectedChildren.length < allChildren.length,\n };\n };\n\n const getLabel = (item: T): React.ReactNode => {\n return labelExtractor\n ? labelExtractor(item)\n : (item as any).label ?? item?.toString();\n };\n\n const getValue = (item: T): string => {\n return valueExtractor\n ? valueExtractor(item)\n : (item as any).value ?? item?.toString();\n };\n\n const setVisibleItemsWhenMinimised = () => {\n const elementBottom = lastVisibleElement.current\n ? lastVisibleElement.current.offsetTop +\n lastVisibleElement.current.clientHeight\n : undefined;\n setMinimisedHeight(elementBottom);\n };\n\n const setVisibleMobileItemsWhenMinimised = useCallback(() => {\n if (!parentRef.current) {\n setMinimisedHeight(undefined);\n return;\n }\n\n const children = Array.from(parentRef.current.children);\n\n let lastElementInRow = 0;\n let rowCount = 0;\n let rowTop = -1;\n\n for (let i = 0; i < children.length; i++) {\n const childTop = (children[i] as HTMLDivElement).offsetTop;\n if (childTop > rowTop) {\n rowCount++;\n rowTop = childTop;\n // show only the first 2 rows\n if (rowCount > 2) {\n break;\n }\n }\n lastElementInRow = i;\n }\n\n setLastVisibleElementIndex(lastElementInRow);\n\n if (rowCount > 2) {\n setMinimisedHeight(rowTop - 8); // gap from next row\n } else {\n setMinimisedHeight(undefined);\n }\n }, []);\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (selectedOptions !== selected) {\n setSelected(selectedOptions || []);\n }\n }, [selectedOptions]);\n\n useEffect(() => {\n if (isMobileToggleMode) {\n setVisibleMobileItemsWhenMinimised();\n } else {\n setVisibleItemsWhenMinimised();\n }\n }, [options]);\n\n useResizeDetector({\n handleWidth: true,\n handleHeight: false,\n skipOnMount: true,\n refreshMode: \"throttle\",\n targetRef: parentRef,\n onResize: isMobileToggleMode\n ? setVisibleMobileItemsWhenMinimised\n : setVisibleItemsWhenMinimised,\n });\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderCheckboxIcon = (\n originalItem: T,\n flatOption: FlattenedFilterOption<T>\n ) => {\n const { checked, indeterminate } = getCheckboxState(flatOption);\n\n return (\n <Checkbox\n className={styles.checkbox}\n displaySize=\"small\"\n checked={checked}\n indeterminate={indeterminate}\n onChange={handleCheckboxChange(originalItem)}\n tabIndex={isNested ? -1 : undefined}\n aria-hidden={isNested ? \"true\" : undefined}\n />\n );\n };\n\n const renderCheckbox = (\n option: FlattenedFilterOption<T>,\n index: number,\n minimised: boolean\n ) => {\n const originalItem = option.originalItem;\n const optionLabel = getLabel(originalItem);\n const { checked, indeterminate } = getCheckboxState(option);\n const isSelected = checked || indeterminate;\n const isVisible = !minimised || index < 5;\n\n // ARIA attributes for tree items\n const treeItemAriaAttributes: AriaAttributes = isNested\n ? {\n \"aria-checked\": indeterminate ? \"mixed\" : checked,\n \"aria-selected\": !!checked,\n \"aria-level\": option.level + 1,\n \"aria-posinset\": option.indexInParent + 1,\n \"aria-setsize\": option.parentSetSize,\n }\n : {};\n\n const itemRef = (el: HTMLElement | null) => {\n if (el && option.level) {\n el.style.setProperty(\n styles.tokens.item.level,\n String(option.level)\n );\n }\n if (index === 4) {\n lastVisibleElement.current = el;\n }\n };\n\n const itemClassName = clsx(\n styles.item,\n !isVisible && styles.itemHidden,\n isSelected && styles.itemSelected\n );\n\n const itemContent = (\n <>\n {renderCheckboxIcon(originalItem, option)}\n {optionLabel}\n </>\n );\n\n if (isNested) {\n return (\n <div\n key={buildKeyPath(option.keyPath)}\n role=\"treeitem\"\n {...treeItemAriaAttributes}\n onClick={handleItemClick(originalItem)}\n onKeyDown={handleListItemKeyDown(originalItem)}\n tabIndex={0}\n className={itemClassName}\n ref={itemRef}\n >\n {itemContent}\n </div>\n );\n }\n\n return (\n <label\n key={buildKeyPath(option.keyPath)}\n onKeyDown={handleListItemKeyDown(originalItem)}\n className={itemClassName}\n ref={itemRef}\n >\n {itemContent}\n </label>\n );\n };\n\n const renderToggle = (\n option: FlattenedFilterOption<T>,\n index: number,\n minimised: boolean\n ) => {\n const originalItem = option.originalItem;\n const optionLabel = getLabel(originalItem);\n const optionValue = getValue(originalItem);\n const checked = !!selected.find((s) => getValue(s) === optionValue);\n const isToggleVisible =\n !minimised ||\n (!!minimisedHeight && index <= lastVisibleElementIndex);\n return (\n <Toggle\n key={optionValue}\n type=\"checkbox\"\n checked={checked}\n className={clsx(\n !useToggleContentWidth && styles.toggle,\n !isToggleVisible && styles.toggleHidden\n )}\n onChange={handleItemClick(originalItem)}\n useContentWidth={useToggleContentWidth}\n >\n {optionLabel}\n </Toggle>\n );\n };\n\n const renderSelectClearAllButton = () => {\n if (optionCount < 3) {\n return null;\n }\n return (\n <Button\n className={styles.selectAllButton}\n styleType=\"link\"\n type=\"button\"\n sizeType=\"small\"\n onClick={handleSelectClearAll}\n aria-label={\n selected.length\n ? \"Clear all selections\"\n : `Select all in ${\n parentRef.current?.ariaLabel || \"this group\"\n }`\n }\n >\n {selected.length ? \"Clear all\" : \"Select all\"}\n </Button>\n );\n };\n\n return (\n <FilterItem\n minimisable={\n minimisableOptions\n ? isMobileToggleMode // set minimisable base on mobile toggle mode\n ? !!minimisedHeight\n : optionCount > 5\n : false // if minimisableOptions is false, never allow minimising\n }\n minimisedHeight={minimisedHeight}\n {...filterItemProps}\n className={clsx(styles.filterItem, filterItemProps.className)}\n >\n {(_, { minimised }) => (\n <>\n {renderSelectClearAllButton()}\n <div\n role={isNested ? \"tree\" : \"group\"}\n aria-label={filterItemProps.title}\n aria-multiselectable={true}\n ref={parentRef}\n className={clsx(\n styles.group,\n isMobileToggleMode && styles.groupMobileToggleMode\n )}\n >\n {flattenedOptions.map((option, i) =>\n isMobileToggleMode\n ? renderToggle(option, i, minimised)\n : renderCheckbox(option, i, minimised)\n )}\n </div>\n </>\n )}\n </FilterItem>\n );\n};\n\nFilterItemCheckbox.displayName = \"Filter.Checkbox\";\n"],"names":["FilterItemCheckbox","_a","selectedOptions","options","showAsCheckboxInMobile","minimisableOptions","onSelect","labelExtractor","valueExtractor","useToggleContentWidth","filterItemProps","__rest","mode","useContext","FilterContext","selected","setSelected","useState","minimisedHeight","setMinimisedHeight","lastVisibleElementIndex","setLastVisibleElementIndex","length","parentRef","useRef","lastVisibleElement","isNested","useMemo","hasNestedOptions","item","isMobileToggleMode","flattenedOptions","flattenNestedOptions","value","label","optionCount","handleItemClick","flatOption","find","opt","originalItem","hasChildren","allChildren","getAllDescendantChildren","keyPath","currentlySelectedChildren","filter","child","some","s","getValue","newSelection","forEach","push","selectedIndex","findIndex","splice","handleSelectClearAll","allValues","option","map","handleListItemKeyDown","event","key","preventDefault","handleCheckboxChange","getCheckboxState","checked","indeterminate","getAllDescendantKeyPaths","buildKeyPath","selectedChildren","getLabel","toString","setVisibleItemsWhenMinimised","elementBottom","current","offsetTop","clientHeight","undefined","setVisibleMobileItemsWhenMinimised","useCallback","children","Array","from","lastElementInRow","rowCount","rowTop","i","childTop","useEffect","useResizeDetector","handleWidth","handleHeight","skipOnMount","refreshMode","targetRef","onResize","renderCheckboxIcon","_jsx","Checkbox","className","styles.checkbox","displaySize","onChange","tabIndex","renderSelectClearAllButton","Button","styles.selectAllButton","styleType","type","sizeType","onClick","ariaLabel","FilterItem","Object","assign","minimisable","clsx","styles.filterItem","_","minimised","_jsxs","_Fragment","role","title","ref","styles.group","styles.groupMobileToggleMode","index","optionLabel","optionValue","Toggle","styles.toggle","styles.toggleHidden","useContentWidth","renderToggle","isSelected","isVisible","treeItemAriaAttributes","level","indexInParent","parentSetSize","itemRef","el","style","setProperty","styles.tokens","String","itemClassName","styles.item","styles.itemHidden","styles.itemSelected","itemContent","onKeyDown","renderCheckbox","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./filter-item-checkbox.styles_7degw7.css";const e={item:{level:"--fds-internal-filterItemCheckbox-item-level"}},t="f1m3a5f4",i="g11488am",l="g1nnu0tt",s="i4hhc1a",f="i7vabkq",c="i4eh8j6",h="c13wglju",m="twhh8xx",o="tb2fwos",a="sbvftpe";export{h as checkbox,t as filterItem,i as group,l as groupMobileToggleMode,s as item,f as itemHidden,c as itemSelected,a as selectAllButton,m as toggle,o as toggleHidden,e as tokens};
1
+ import"./filter-item-checkbox.styles_6nbpdl.css";const e={item:{level:"--fds-internal-filterItemCheckbox-item-level"}},t="f1m3a5f4",i="g11488am",l="g1nnu0tt",s="i4hhc1a",f="i7vabkq",c="i4eh8j6",h="c13wglju",m="twhh8xx",n="tb2fwos",o="sbvftpe";export{h as checkbox,t as filterItem,i as group,l as groupMobileToggleMode,s as item,f as itemHidden,c as itemSelected,o as selectAllButton,m as toggle,n as toggleHidden,e as tokens};
2
2
  //# sourceMappingURL=filter-item-checkbox.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-item-checkbox.styles.js","sources":["../../../src/filter/addons/filter-item-checkbox.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Colour, Font, MediaQuery, Spacing } from \"../../theme\";\n\nexport const tokens = {\n item: {\n level: \"--fds-internal-filterItemCheckbox-item-level\",\n },\n} as const;\n\nexport const filterItem = css`\n padding: 0 0 ${Spacing[\"spacing-16\"]};\n\n [data-id=\"content-container\"] {\n position: relative; // to get the item position relative to this parent\n padding: ${Spacing[\"spacing-8\"]} ${Spacing[\"spacing-8\"]} 0;\n\n ${MediaQuery.MaxWidth.lg} {\n padding: ${Spacing[\"spacing-16\"]} ${Spacing[\"spacing-20\"]}\n ${Spacing[\"spacing-8\"]};\n }\n }\n\n [data-id=\"minimise-button\"] {\n margin: ${Spacing[\"spacing-8\"]} ${Spacing[\"spacing-20\"]} 0;\n }\n`;\n\nexport const group = css`\n display: flex;\n flex-direction: column;\n\n ${MediaQuery.MaxWidth.lg} {\n flex-direction: row;\n flex-wrap: wrap;\n gap: 0;\n }\n`;\n\nexport const groupMobileToggleMode = css`\n ${MediaQuery.MaxWidth.lg} {\n gap: ${Spacing[\"spacing-16\"]};\n }\n`;\n\nexport const item = css`\n ${tokens.item.level}: 0;\n\n display: flex;\n align-items: flex-start;\n\n position: relative;\n width: 100%;\n min-height: 1.5rem;\n padding: ${Spacing[\"spacing-8\"]} ${Spacing[\"spacing-12\"]};\n padding-left: calc(\n ${Spacing[\"spacing-12\"]} + var(${tokens.item.level}) *\n ${Spacing[\"spacing-32\"]}\n );\n\n cursor: pointer;\n ${Font[\"body-md-regular\"]}\n color: ${Colour[\"text\"]};\n\n ${MediaQuery.MaxWidth.lg} {\n padding: ${Spacing[\"spacing-8\"]};\n padding-left: calc(\n ${Spacing[\"spacing-8\"]} + var(${tokens.item.level}) *\n ${Spacing[\"spacing-32\"]}\n );\n }\n`;\n\nexport const itemHidden = css`\n display: none;\n`;\n\nexport const itemSelected = css`\n color: ${Colour[\"text-selected\"]};\n`;\n\nexport const checkbox = css`\n flex-shrink: 0;\n margin-right: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const toggle = css`\n min-width: 5rem;\n`;\n\nexport const toggleHidden = css`\n visibility: hidden;\n`;\n\nexport const selectAllButton = css`\n height: fit-content;\n padding: 0;\n margin: ${Spacing[\"spacing-16\"]} 0 ${Spacing[\"spacing-8\"]}\n ${Spacing[\"spacing-12\"]};\n\n ${MediaQuery.MaxWidth.lg} {\n margin: 0 0 ${Spacing[\"spacing-16\"]} 0;\n }\n`;\n"],"names":["tokens","item","level","filterItem","group","groupMobileToggleMode","itemHidden","itemSelected","checkbox","toggle","toggleHidden","selectAllButton"],"mappings":"8EAIO,MAAMA,EAAS,CAClBC,KAAM,CACFC,MAAO,iDAIFC,EAAU,WAkBVC,EAAK,WAWLC,EAAqB,WAMrBJ,EAAI,UA4BJK,EAAU,UAIVC,EAAY,UAIZC,EAAQ,WAKRC,EAAM,UAINC,EAAY,UAIZC,EAAe"}
1
+ {"version":3,"file":"filter-item-checkbox.styles.js","sources":["../../../src/filter/addons/filter-item-checkbox.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Colour, Font, MediaQuery, Spacing } from \"../../theme\";\n\nexport const tokens = {\n item: {\n level: \"--fds-internal-filterItemCheckbox-item-level\",\n },\n} as const;\n\nexport const filterItem = css`\n padding: 0 0 ${Spacing[\"spacing-16\"]};\n\n [data-id=\"content-container\"] {\n position: relative; // to get the item position relative to this parent\n padding: ${Spacing[\"spacing-8\"]} ${Spacing[\"spacing-8\"]} 0;\n\n ${MediaQuery.MaxWidth.lg} {\n padding: ${Spacing[\"spacing-16\"]} ${Spacing[\"spacing-20\"]}\n ${Spacing[\"spacing-8\"]};\n }\n }\n\n [data-id=\"minimise-button\"] {\n margin: ${Spacing[\"spacing-8\"]} ${Spacing[\"spacing-20\"]} 0;\n }\n`;\n\nexport const group = css`\n display: flex;\n flex-direction: column;\n\n ${MediaQuery.MaxWidth.lg} {\n flex-direction: row;\n flex-wrap: wrap;\n gap: 0;\n }\n`;\n\nexport const groupMobileToggleMode = css`\n ${MediaQuery.MaxWidth.lg} {\n gap: ${Spacing[\"spacing-16\"]};\n }\n`;\n\nexport const item = css`\n ${tokens.item.level}: 0;\n\n display: flex;\n align-items: flex-start;\n\n position: relative;\n width: 100%;\n min-height: 1.5rem;\n padding: ${Spacing[\"spacing-8\"]} ${Spacing[\"spacing-12\"]};\n padding-left: calc(\n ${Spacing[\"spacing-12\"]} + var(${tokens.item.level}) *\n ${Spacing[\"spacing-32\"]}\n );\n\n cursor: pointer;\n ${Font[\"body-md-regular\"]}\n color: ${Colour[\"text\"]};\n\n ${MediaQuery.MaxWidth.lg} {\n padding: ${Spacing[\"spacing-8\"]};\n padding-left: calc(\n ${Spacing[\"spacing-8\"]} + var(${tokens.item.level}) *\n ${Spacing[\"spacing-32\"]}\n );\n }\n`;\n\nexport const itemHidden = css`\n display: none;\n`;\n\nexport const itemSelected = css`\n color: ${Colour[\"text-selected\"]};\n`;\n\nexport const checkbox = css`\n flex-shrink: 0;\n margin-right: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const toggle = css`\n min-width: 5rem;\n`;\n\nexport const toggleHidden = css`\n visibility: hidden;\n`;\n\nexport const selectAllButton = css`\n height: fit-content;\n min-height: unset;\n padding: 0;\n margin: ${Spacing[\"spacing-16\"]} 0 ${Spacing[\"spacing-8\"]}\n ${Spacing[\"spacing-12\"]};\n\n ${MediaQuery.MaxWidth.lg} {\n margin: 0 0 ${Spacing[\"spacing-16\"]} 0;\n }\n`;\n"],"names":["tokens","item","level","filterItem","group","groupMobileToggleMode","itemHidden","itemSelected","checkbox","toggle","toggleHidden","selectAllButton"],"mappings":"8EAIO,MAAMA,EAAS,CAClBC,KAAM,CACFC,MAAO,iDAIFC,EAAU,WAkBVC,EAAK,WAWLC,EAAqB,WAMrBJ,EAAI,UA4BJK,EAAU,UAIVC,EAAY,UAIZC,EAAQ,WAKRC,EAAM,UAINC,EAAY,UAIZC,EAAe"}
@@ -13,4 +13,4 @@
13
13
  .c13wglju{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;margin-right:var(--fds-spacing-8);}
14
14
  .twhh8xx{min-width:5rem;}
15
15
  .tb2fwos{visibility:hidden;}
16
- .sbvftpe{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;padding:0;margin:var(--fds-spacing-16) 0 var(--fds-spacing-8) var(--fds-spacing-12);}:where(body.fds-breakpoint-lg-max) .sbvftpe{margin:0 0 var(--fds-spacing-16) 0;}}
16
+ .sbvftpe{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;min-height:unset;padding:0;margin:var(--fds-spacing-16) 0 var(--fds-spacing-8) var(--fds-spacing-12);}:where(body.fds-breakpoint-lg-max) .sbvftpe{margin:0 0 var(--fds-spacing-16) 0;}}
@@ -0,0 +1,12 @@
1
+ import type { FilterItemCheckboxOptionProps } from "./types";
2
+ export interface FlattenedFilterOption<T = FilterItemCheckboxOptionProps> {
3
+ originalItem: T;
4
+ value: any;
5
+ label: string;
6
+ keyPath: string[];
7
+ level: number;
8
+ hasChildren: boolean;
9
+ parentKeyPath?: string[] | undefined;
10
+ indexInParent: number;
11
+ parentSetSize: number;
12
+ }
@@ -1,12 +1,63 @@
1
- import type { FilterItemCheckboxOptionProps } from "../types";
2
- export interface FlattenedFilterOption<T = FilterItemCheckboxOptionProps> {
3
- originalItem: T;
1
+ import type { FilterItemProps } from "../types";
2
+ /**
3
+ * Default shape for a checkbox option in `Filter.Checkbox`.
4
+ *
5
+ * Nest `options` to create hierarchical groups with parent-level
6
+ * select/deselect all behavior.
7
+ */
8
+ export interface FilterItemCheckboxOptionProps {
4
9
  value: any;
5
10
  label: string;
6
- keyPath: string[];
7
- level: number;
8
- hasChildren: boolean;
9
- parentKeyPath?: string[] | undefined;
10
- indexInParent: number;
11
- parentSetSize: number;
11
+ /** Nested child options. Providing children makes this item a parent node. */
12
+ options?: FilterItemCheckboxOptionProps[] | undefined;
13
+ }
14
+ /**
15
+ * Props for the `Filter.Checkbox` sub-component.
16
+ *
17
+ * Supply a generic type `T` to use a custom option shape together with
18
+ * `labelExtractor` and `valueExtractor`.
19
+ */
20
+ export interface FilterItemCheckboxProps<T = FilterItemCheckboxOptionProps> extends Omit<FilterItemProps, "children"> {
21
+ /** The full list of selectable options. */
22
+ options: T[];
23
+ /**
24
+ * The currently selected options. When provided, the component syncs its
25
+ * internal selection state to this value.
26
+ */
27
+ selectedOptions?: T[] | undefined;
28
+ /**
29
+ * Called when the selection changes.
30
+ *
31
+ * @param options The updated array of selected options.
32
+ */
33
+ onSelect?: ((options: T[]) => void) | undefined;
34
+ /**
35
+ * Derives the display label from an option item.
36
+ * Falls back to `item.label` when not provided.
37
+ */
38
+ labelExtractor?: ((item: T) => React.ReactNode) | undefined;
39
+ /**
40
+ * Derives the unique value key from an option item.
41
+ * Falls back to `item.value` when not provided.
42
+ */
43
+ valueExtractor?: ((item: T) => string) | undefined;
44
+ /**
45
+ * When `true`, toggle chips in mobile mode grow to fit their content width
46
+ * instead of stretching to a fixed minimum width.
47
+ */
48
+ useToggleContentWidth?: boolean | undefined;
49
+ /**
50
+ * When `true`, renders checkboxes instead of toggle chips in mobile mode.
51
+ * Has no effect for nested option trees, which always use checkboxes.
52
+ *
53
+ * @default false
54
+ */
55
+ showAsCheckboxInMobile?: boolean | undefined;
56
+ /**
57
+ * When `true`, shows a "View more / View less" button when there are more
58
+ * options than the minimised threshold.
59
+ *
60
+ * @default true
61
+ */
62
+ minimisableOptions?: boolean | undefined;
12
63
  }
@@ -1,2 +1,2 @@
1
- import{__rest as e}from"../_virtual/_tslib.js";import{jsxs as i,jsx as t}from"react/jsx-runtime";import{ChevronDownIcon as r}from"@lifesg/react-icons/chevron-down";import{useSpring as o,animated as a}from"@react-spring/web";import n from"clsx";import l from"../external/lodash/isNil.js";import{useContext as s,useState as d,useRef as m,useEffect as c}from"react";import{useResizeDetector as p}from"../external/react-resize-detector/build/index.esm.js";import{Button as h}from"../button/button.js";import{PopoverAddon as f}from"../form/form-label-addon.js";import{VisuallyHidden as u,inertValue as b}from"../shared/accessibility/index.js";import{ClickableIcon as j}from"../shared/clickable-icon/clickable-icon.js";import"../theme/theme-provider/index.js";import"../theme/theme-provider/context.js";import"../theme/tokens/border.js";import"../theme/tokens/colour.js";import"../theme/tokens/font.js";import"../theme/tokens/media-query.js";import{useApplyStyle as v}from"../theme/utils/use-apply-styles.js";import"../theme/utils/use-media-query.js";import"../util/calendar-helper.js";import"../external/dayjs/dayjs.min.js";import{useId as x}from"../util/simple-id-generator.js";import"../util/string-helper.js";import"@react-aria/live-announcer";import{FilterContext as y}from"./filter-context.js";import{tokens as g,divider as N,dividerVisible as k,dividerMobile as w,filterItemTitle as C,filterItemTitleMobile as $,filterItemExpandButton as D,chevronIcon as E,chevronIconExpanded as H,filterItemHeader as M,filterItemHeaderMobile as q,expandableItem as z,filterItemBody as O,minimisableContent as T,minimisableContentMinimisable as _,filterItemMinimiseButton as F,filterItemWrapper as I,filterItemWrapperDarker as V}from"./filter-item.styles.js";const A=A=>{var B,{collapsible:G=!0,initialExpanded:J=!1,expanded:K,onExpandChange:L,minimisable:P=!1,minimisedHeight:Q,showDivider:R=!0,showMobileDivider:S=!0,title:U,addon:W,children:X,className:Y}=A,Z=e(A,["collapsible","initialExpanded","expanded","onExpandChange","minimisable","minimisedHeight","showDivider","showMobileDivider","title","addon","children","className"]);const{mode:ee,rootNode:ie}=s(y),te="mobile"===ee,[re,oe]=d(be()),[ae,ne]=d(P),le=!te&&G,se=p(),de=p(),me=o({height:re?se.height:0}),ce=ae?null!=Q?Q:Math.min(.5*(null!==(B=de.height)&&void 0!==B?B:0),216):de.height,pe=x(),he=`${pe}-content`,fe=`${pe}-title`,ue=m(null);v(ue,{[g.minimisableContent.height]:ce?`${ce}px`:null}),c((()=>{oe(be())}),[G,K]),c((()=>{ne(P)}),[P]);function be(){return!!te||(l(K)?!G||J:K)}return i("div",{"aria-labelledby":fe,className:n(I,(le||te)&&V),children:[t("div",{className:n(N,(te?S:R)&&k,te&&w)}),(U||le)&&i("div",{className:n(M,te&&q),children:[U&&i("h3",{id:fe,"data-testid":"filter-item-title",className:n(C,te&&$),children:[U," ",W&&("popover"===(null==W?void 0:W.type)?t(f,{addon:W,rootNode:te?ie:void 0}):null)]}),le&&i(j,{className:D,"data-testid":"expand-collapse-button",focusHighlight:!1,focusOutline:"browser",onClick:()=>{const e=!re;l(K)&&oe(e),L&&L(e)},"aria-expanded":re,"aria-disabled":!le,"aria-controls":he,children:[U&&t(u,{children:U}),t(r,{"aria-hidden":!0,className:n(E,re&&H)})]})]}),t(a.div,{className:z,id:he,"data-testid":"expandable-container","data-expanded":re,style:me,inert:b(!re),children:t("div",{ref:se.ref,children:i("div",Object.assign({className:n(O,Y)},Z,{children:[t("div",{ref:ue,"data-testid":"minimisable-container",className:n(T,P&&_),children:t("div",{ref:de.ref,children:t("div",{"data-id":"content-container",children:"function"==typeof X?X(ee,{minimised:ae}):X})})}),P&&i(h,{className:F,"data-id":"minimise-button",sizeType:"small",styleType:"link",type:"button",onClick:()=>{ne(!ae)},children:[t(u,{children:`view ${ae?"more":"less"} in ${U}`}),i("span",{"aria-hidden":!0,children:["View ",ae?"more":"less"]})]})]}))})})]})};A.displayName="Filter.Item";export{A as FilterItem};
1
+ import{__rest as e}from"../_virtual/_tslib.js";import{jsxs as i,jsx as t}from"react/jsx-runtime";import{ChevronDownIcon as r}from"@lifesg/react-icons/chevron-down";import{useSpring as o,animated as a}from"@react-spring/web";import l from"clsx";import n from"../external/lodash/isNil.js";import{useContext as s,useState as d,useRef as m,useEffect as c}from"react";import{useResizeDetector as p}from"../external/react-resize-detector/build/index.esm.js";import{Button as h}from"../button/button.js";import{PopoverAddon as f}from"../form/form-label/form-label-addon.js";import{VisuallyHidden as u,inertValue as b}from"../shared/accessibility/index.js";import{ClickableIcon as j}from"../shared/clickable-icon/clickable-icon.js";import"../theme/theme-provider/index.js";import"../theme/theme-provider/context.js";import"../theme/tokens/border.js";import"../theme/tokens/colour.js";import"../theme/tokens/font.js";import"../theme/tokens/media-query.js";import{useApplyStyle as v}from"../theme/utils/use-apply-styles.js";import"../theme/utils/use-media-query.js";import"../util/calendar-helper.js";import"../external/dayjs/dayjs.min.js";import{useId as x}from"../util/simple-id-generator.js";import"../util/string-helper.js";import"@react-aria/live-announcer";import{FilterContext as y}from"./filter-context.js";import{tokens as g,divider as N,dividerVisible as k,dividerMobile as w,filterItemTitle as C,filterItemTitleMobile as $,filterItemExpandButton as D,chevronIcon as E,chevronIconExpanded as H,filterItemHeader as M,filterItemHeaderMobile as q,expandableItem as z,filterItemBody as O,minimisableContent as T,minimisableContentMinimisable as _,filterItemMinimiseButton as F,filterItemWrapper as I,filterItemWrapperDarker as V}from"./filter-item.styles.js";const A=A=>{var B,{collapsible:G=!0,initialExpanded:J=!1,expanded:K,onExpandChange:L,minimisable:P=!1,minimisedHeight:Q,showDivider:R=!0,showMobileDivider:S=!0,title:U,addon:W,children:X,className:Y}=A,Z=e(A,["collapsible","initialExpanded","expanded","onExpandChange","minimisable","minimisedHeight","showDivider","showMobileDivider","title","addon","children","className"]);const{mode:ee,rootNode:ie}=s(y),te="mobile"===ee,[re,oe]=d(be()),[ae,le]=d(P),ne=!te&&G,se=p(),de=p(),me=o({height:re?se.height:0}),ce=ae?null!=Q?Q:Math.min(.5*(null!==(B=de.height)&&void 0!==B?B:0),216):de.height,pe=x(),he=`${pe}-content`,fe=`${pe}-title`,ue=m(null);v(ue,{[g.minimisableContent.height]:ce?`${ce}px`:null}),c((()=>{oe(be())}),[G,K]),c((()=>{le(P)}),[P]);function be(){return!!te||(n(K)?!G||J:K)}return i("div",{"aria-labelledby":fe,className:l(I,(ne||te)&&V),children:[t("div",{className:l(N,(te?S:R)&&k,te&&w)}),(U||ne)&&i("div",{className:l(M,te&&q),children:[U&&i("h3",{id:fe,"data-testid":"filter-item-title",className:l(C,te&&$),children:[U," ",W&&("popover"===(null==W?void 0:W.type)?t(f,{addon:W,rootNode:te?ie:void 0}):null)]}),ne&&i(j,{className:D,"data-testid":"expand-collapse-button",focusHighlight:!1,focusOutline:"browser",onClick:()=>{const e=!re;n(K)&&oe(e),L&&L(e)},"aria-expanded":re,"aria-disabled":!ne,"aria-controls":he,children:[U&&t(u,{children:U}),t(r,{"aria-hidden":!0,className:l(E,re&&H)})]})]}),t(a.div,{className:z,id:he,"data-testid":"expandable-container","data-expanded":re,style:me,inert:b(!re),children:t("div",{ref:se.ref,children:i("div",Object.assign({className:l(O,Y)},Z,{children:[t("div",{ref:ue,"data-testid":"minimisable-container",className:l(T,P&&_),children:t("div",{ref:de.ref,children:t("div",{"data-id":"content-container",children:"function"==typeof X?X(ee,{minimised:ae}):X})})}),P&&i(h,{className:F,"data-id":"minimise-button",sizeType:"small",styleType:"link",type:"button",onClick:()=>{le(!ae)},children:[t(u,{children:`view ${ae?"more":"less"} in ${U}`}),i("span",{"aria-hidden":!0,children:["View ",ae?"more":"less"]})]})]}))})})]})};A.displayName="Filter.Item";export{A as FilterItem};
2
2
  //# sourceMappingURL=filter-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-item.js","sources":["../../src/filter/filter-item.tsx"],"sourcesContent":["import { ChevronDownIcon } from \"@lifesg/react-icons/chevron-down\";\nimport { animated, useSpring } from \"@react-spring/web\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { useContext, useEffect, useRef, useState } from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { Button } from \"../button\";\nimport { PopoverAddon } from \"../form/form-label-addon\";\nimport { inertValue, VisuallyHidden } from \"../shared/accessibility\";\nimport { ClickableIcon } from \"../shared/clickable-icon\";\nimport { useApplyStyle } from \"../theme\";\nimport { useId } from \"../util\";\nimport { FilterContext } from \"./filter-context\";\nimport * as styles from \"./filter-item.styles\";\nimport type { FilterItemProps } from \"./types\";\n\nconst DEFAULT_MINIMISED_HEIGHT_CAP = 216;\n\nexport const FilterItem = ({\n collapsible: desktopCollapsible = true,\n initialExpanded = false,\n expanded: controlledExpanded,\n onExpandChange,\n minimisable = false,\n minimisedHeight,\n showDivider = true,\n showMobileDivider = true,\n title,\n addon,\n children,\n className,\n ...otherProps\n}: FilterItemProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const { mode, rootNode } = useContext(FilterContext);\n const isMobile = mode === \"mobile\";\n const [expanded, setExpanded] = useState(getInitialExpandState());\n const [contentMinimised, setContentMinimised] = useState(minimisable);\n const collapsible = !isMobile && desktopCollapsible;\n\n const itemResizeDetector = useResizeDetector();\n const contentResizeDetector = useResizeDetector();\n const itemAnimationStyles = useSpring({\n height: expanded ? itemResizeDetector.height : 0,\n });\n const contentHeight = contentMinimised\n ? minimisedHeight ??\n Math.min(\n (contentResizeDetector.height ?? 0) * 0.5,\n DEFAULT_MINIMISED_HEIGHT_CAP\n )\n : contentResizeDetector.height;\n const internalId = useId();\n const contentId = `${internalId}-content`;\n const titleId = `${internalId}-title`;\n const minimisableContentRef = useRef<HTMLDivElement | null>(null);\n\n useApplyStyle(minimisableContentRef, {\n [styles.tokens.minimisableContent.height]: contentHeight\n ? `${contentHeight}px`\n : null,\n });\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n setExpanded(getInitialExpandState());\n }, [desktopCollapsible, controlledExpanded]);\n\n useEffect(() => {\n setContentMinimised(minimisable);\n }, [minimisable]);\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleExpandCollapse = () => {\n const nextState = !expanded;\n\n if (isNil(controlledExpanded)) {\n setExpanded(nextState);\n }\n\n if (onExpandChange) {\n onExpandChange(nextState);\n }\n };\n\n const handleMinimise = () => {\n setContentMinimised(!contentMinimised);\n };\n\n // =============================================================================\n // HELPERS\n // =============================================================================\n function getInitialExpandState() {\n if (isMobile) {\n return true;\n }\n if (isNil(controlledExpanded)) {\n return !desktopCollapsible || initialExpanded;\n }\n return controlledExpanded;\n }\n\n // =============================================================================\n // RENDER\n // =============================================================================\n\n const renderAddon = () => {\n switch (addon?.type) {\n case \"popover\":\n return (\n <PopoverAddon\n addon={addon}\n rootNode={isMobile ? rootNode : undefined}\n />\n );\n default:\n return null;\n }\n };\n\n return (\n <div\n aria-labelledby={titleId}\n className={clsx(\n styles.filterItemWrapper,\n (collapsible || isMobile) && styles.filterItemWrapperDarker\n )}\n >\n <div\n className={clsx(\n styles.divider,\n (isMobile ? showMobileDivider : showDivider) &&\n styles.dividerVisible,\n isMobile && styles.dividerMobile\n )}\n />\n {(title || collapsible) && (\n <div\n className={clsx(\n styles.filterItemHeader,\n isMobile && styles.filterItemHeaderMobile\n )}\n >\n {title && (\n <h3\n id={titleId}\n data-testid=\"filter-item-title\"\n className={clsx(\n styles.filterItemTitle,\n isMobile && styles.filterItemTitleMobile\n )}\n >\n {title} {addon && renderAddon()}\n </h3>\n )}\n {collapsible && (\n <ClickableIcon\n className={styles.filterItemExpandButton}\n data-testid={\"expand-collapse-button\"}\n focusHighlight={false}\n focusOutline=\"browser\"\n onClick={handleExpandCollapse}\n aria-expanded={expanded}\n aria-disabled={!collapsible}\n aria-controls={contentId}\n >\n {title && <VisuallyHidden>{title}</VisuallyHidden>}\n <ChevronDownIcon\n aria-hidden\n className={clsx(\n styles.chevronIcon,\n expanded && styles.chevronIconExpanded\n )}\n />\n </ClickableIcon>\n )}\n </div>\n )}\n <animated.div\n className={styles.expandableItem}\n id={contentId}\n data-testid={\"expandable-container\"}\n data-expanded={expanded}\n style={itemAnimationStyles}\n inert={inertValue(!expanded)}\n >\n <div ref={itemResizeDetector.ref}>\n <div\n className={clsx(styles.filterItemBody, className)}\n {...otherProps}\n >\n <div\n ref={minimisableContentRef}\n data-testid=\"minimisable-container\"\n className={clsx(\n styles.minimisableContent,\n minimisable &&\n styles.minimisableContentMinimisable\n )}\n >\n <div ref={contentResizeDetector.ref}>\n <div data-id=\"content-container\">\n {typeof children === \"function\"\n ? children(mode, {\n minimised: contentMinimised,\n })\n : children}\n </div>\n </div>\n </div>\n {minimisable && (\n <Button\n className={styles.filterItemMinimiseButton}\n data-id=\"minimise-button\"\n sizeType=\"small\"\n styleType=\"link\"\n type=\"button\"\n onClick={handleMinimise}\n >\n <VisuallyHidden>{`view ${\n contentMinimised ? \"more\" : \"less\"\n } in ${title}`}</VisuallyHidden>\n <span aria-hidden>\n View {contentMinimised ? \"more\" : \"less\"}\n </span>\n </Button>\n )}\n </div>\n </div>\n </animated.div>\n </div>\n );\n};\n\nFilterItem.displayName = \"Filter.Item\";\n"],"names":["FilterItem","_a","collapsible","desktopCollapsible","initialExpanded","expanded","controlledExpanded","onExpandChange","minimisable","minimisedHeight","showDivider","showMobileDivider","title","addon","children","className","otherProps","__rest","mode","rootNode","useContext","FilterContext","isMobile","setExpanded","useState","getInitialExpandState","contentMinimised","setContentMinimised","itemResizeDetector","useResizeDetector","contentResizeDetector","itemAnimationStyles","useSpring","height","contentHeight","Math","min","_b","internalId","useId","contentId","titleId","minimisableContentRef","useRef","useApplyStyle","styles.tokens","minimisableContent","useEffect","isNil","_jsxs","clsx","styles.filterItemWrapper","styles.filterItemWrapperDarker","_jsx","styles.divider","styles.dividerVisible","styles.dividerMobile","styles.filterItemHeader","styles.filterItemHeaderMobile","id","styles.filterItemTitle","styles.filterItemTitleMobile","type","PopoverAddon","undefined","ClickableIcon","styles.filterItemExpandButton","focusHighlight","focusOutline","onClick","nextState","VisuallyHidden","ChevronDownIcon","styles.chevronIcon","styles.chevronIconExpanded","animated","div","styles.expandableItem","style","inert","inertValue","ref","Object","assign","styles.filterItemBody","styles.minimisableContent","styles.minimisableContentMinimisable","minimised","Button","styles.filterItemMinimiseButton","sizeType","styleType","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"filter-item.js","sources":["../../src/filter/filter-item.tsx"],"sourcesContent":["import { ChevronDownIcon } from \"@lifesg/react-icons/chevron-down\";\nimport { animated, useSpring } from \"@react-spring/web\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { useContext, useEffect, useRef, useState } from \"react\";\nimport { useResizeDetector } from \"react-resize-detector\";\n\nimport { Button } from \"../button\";\nimport { PopoverAddon } from \"../form/form-label/form-label-addon\";\nimport { inertValue, VisuallyHidden } from \"../shared/accessibility\";\nimport { ClickableIcon } from \"../shared/clickable-icon\";\nimport { useApplyStyle } from \"../theme\";\nimport { useId } from \"../util\";\nimport { FilterContext } from \"./filter-context\";\nimport * as styles from \"./filter-item.styles\";\nimport type { FilterItemProps } from \"./types\";\n\nconst DEFAULT_MINIMISED_HEIGHT_CAP = 216;\n\nexport const FilterItem = ({\n collapsible: desktopCollapsible = true,\n initialExpanded = false,\n expanded: controlledExpanded,\n onExpandChange,\n minimisable = false,\n minimisedHeight,\n showDivider = true,\n showMobileDivider = true,\n title,\n addon,\n children,\n className,\n ...otherProps\n}: FilterItemProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const { mode, rootNode } = useContext(FilterContext);\n const isMobile = mode === \"mobile\";\n const [expanded, setExpanded] = useState(getInitialExpandState());\n const [contentMinimised, setContentMinimised] = useState(minimisable);\n const collapsible = !isMobile && desktopCollapsible;\n\n const itemResizeDetector = useResizeDetector();\n const contentResizeDetector = useResizeDetector();\n const itemAnimationStyles = useSpring({\n height: expanded ? itemResizeDetector.height : 0,\n });\n const contentHeight = contentMinimised\n ? minimisedHeight ??\n Math.min(\n (contentResizeDetector.height ?? 0) * 0.5,\n DEFAULT_MINIMISED_HEIGHT_CAP\n )\n : contentResizeDetector.height;\n const internalId = useId();\n const contentId = `${internalId}-content`;\n const titleId = `${internalId}-title`;\n const minimisableContentRef = useRef<HTMLDivElement | null>(null);\n\n useApplyStyle(minimisableContentRef, {\n [styles.tokens.minimisableContent.height]: contentHeight\n ? `${contentHeight}px`\n : null,\n });\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n setExpanded(getInitialExpandState());\n }, [desktopCollapsible, controlledExpanded]);\n\n useEffect(() => {\n setContentMinimised(minimisable);\n }, [minimisable]);\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleExpandCollapse = () => {\n const nextState = !expanded;\n\n if (isNil(controlledExpanded)) {\n setExpanded(nextState);\n }\n\n if (onExpandChange) {\n onExpandChange(nextState);\n }\n };\n\n const handleMinimise = () => {\n setContentMinimised(!contentMinimised);\n };\n\n // =============================================================================\n // HELPERS\n // =============================================================================\n function getInitialExpandState() {\n if (isMobile) {\n return true;\n }\n if (isNil(controlledExpanded)) {\n return !desktopCollapsible || initialExpanded;\n }\n return controlledExpanded;\n }\n\n // =============================================================================\n // RENDER\n // =============================================================================\n\n const renderAddon = () => {\n switch (addon?.type) {\n case \"popover\":\n return (\n <PopoverAddon\n addon={addon}\n rootNode={isMobile ? rootNode : undefined}\n />\n );\n default:\n return null;\n }\n };\n\n return (\n <div\n aria-labelledby={titleId}\n className={clsx(\n styles.filterItemWrapper,\n (collapsible || isMobile) && styles.filterItemWrapperDarker\n )}\n >\n <div\n className={clsx(\n styles.divider,\n (isMobile ? showMobileDivider : showDivider) &&\n styles.dividerVisible,\n isMobile && styles.dividerMobile\n )}\n />\n {(title || collapsible) && (\n <div\n className={clsx(\n styles.filterItemHeader,\n isMobile && styles.filterItemHeaderMobile\n )}\n >\n {title && (\n <h3\n id={titleId}\n data-testid=\"filter-item-title\"\n className={clsx(\n styles.filterItemTitle,\n isMobile && styles.filterItemTitleMobile\n )}\n >\n {title} {addon && renderAddon()}\n </h3>\n )}\n {collapsible && (\n <ClickableIcon\n className={styles.filterItemExpandButton}\n data-testid={\"expand-collapse-button\"}\n focusHighlight={false}\n focusOutline=\"browser\"\n onClick={handleExpandCollapse}\n aria-expanded={expanded}\n aria-disabled={!collapsible}\n aria-controls={contentId}\n >\n {title && <VisuallyHidden>{title}</VisuallyHidden>}\n <ChevronDownIcon\n aria-hidden\n className={clsx(\n styles.chevronIcon,\n expanded && styles.chevronIconExpanded\n )}\n />\n </ClickableIcon>\n )}\n </div>\n )}\n <animated.div\n className={styles.expandableItem}\n id={contentId}\n data-testid={\"expandable-container\"}\n data-expanded={expanded}\n style={itemAnimationStyles}\n inert={inertValue(!expanded)}\n >\n <div ref={itemResizeDetector.ref}>\n <div\n className={clsx(styles.filterItemBody, className)}\n {...otherProps}\n >\n <div\n ref={minimisableContentRef}\n data-testid=\"minimisable-container\"\n className={clsx(\n styles.minimisableContent,\n minimisable &&\n styles.minimisableContentMinimisable\n )}\n >\n <div ref={contentResizeDetector.ref}>\n <div data-id=\"content-container\">\n {typeof children === \"function\"\n ? children(mode, {\n minimised: contentMinimised,\n })\n : children}\n </div>\n </div>\n </div>\n {minimisable && (\n <Button\n className={styles.filterItemMinimiseButton}\n data-id=\"minimise-button\"\n sizeType=\"small\"\n styleType=\"link\"\n type=\"button\"\n onClick={handleMinimise}\n >\n <VisuallyHidden>{`view ${\n contentMinimised ? \"more\" : \"less\"\n } in ${title}`}</VisuallyHidden>\n <span aria-hidden>\n View {contentMinimised ? \"more\" : \"less\"}\n </span>\n </Button>\n )}\n </div>\n </div>\n </animated.div>\n </div>\n );\n};\n\nFilterItem.displayName = \"Filter.Item\";\n"],"names":["FilterItem","_a","collapsible","desktopCollapsible","initialExpanded","expanded","controlledExpanded","onExpandChange","minimisable","minimisedHeight","showDivider","showMobileDivider","title","addon","children","className","otherProps","__rest","mode","rootNode","useContext","FilterContext","isMobile","setExpanded","useState","getInitialExpandState","contentMinimised","setContentMinimised","itemResizeDetector","useResizeDetector","contentResizeDetector","itemAnimationStyles","useSpring","height","contentHeight","Math","min","_b","internalId","useId","contentId","titleId","minimisableContentRef","useRef","useApplyStyle","styles.tokens","minimisableContent","useEffect","isNil","_jsxs","clsx","styles.filterItemWrapper","styles.filterItemWrapperDarker","_jsx","styles.divider","styles.dividerVisible","styles.dividerMobile","styles.filterItemHeader","styles.filterItemHeaderMobile","id","styles.filterItemTitle","styles.filterItemTitleMobile","type","PopoverAddon","undefined","ClickableIcon","styles.filterItemExpandButton","focusHighlight","focusOutline","onClick","nextState","VisuallyHidden","ChevronDownIcon","styles.chevronIcon","styles.chevronIconExpanded","animated","div","styles.expandableItem","style","inert","inertValue","ref","Object","assign","styles.filterItemBody","styles.minimisableContent","styles.minimisableContentMinimisable","minimised","Button","styles.filterItemMinimiseButton","sizeType","styleType","displayName"],"mappings":"2tDAiBA,MAEaA,EAAcC,WACvBC,YAAaC,GAAqB,EAAIC,gBACtCA,GAAkB,EAClBC,SAAUC,EAAkBC,eAC5BA,EAAcC,YACdA,GAAc,EAAKC,gBACnBA,EAAeC,YACfA,GAAc,EAAIC,kBAClBA,GAAoB,EAAIC,MACxBA,EAAKC,MACLA,EAAKC,SACLA,EAAQC,UACRA,GAASd,EACNe,EAAUC,EAAAhB,EAbU,wKAkBvB,MAAMiB,KAAEA,GAAIC,SAAEA,IAAaC,EAAWC,GAChCC,GAAoB,WAATJ,IACVb,GAAUkB,IAAeC,EAASC,OAClCC,GAAkBC,IAAuBH,EAAShB,GACnDN,IAAeoB,IAAYnB,EAE3ByB,GAAqBC,IACrBC,GAAwBD,IACxBE,GAAsBC,EAAU,CAClCC,OAAQ5B,GAAWuB,GAAmBK,OAAS,IAE7CC,GAAgBR,GAChBjB,QAAAA,EACA0B,KAAKC,IACqC,IAAT,QAA5BC,EAAAP,GAAsBG,cAAM,IAAAI,EAAAA,EAAI,GAlCV,KAqC3BP,GAAsBG,OACtBK,GAAaC,IACbC,GAAY,GAAGF,aACfG,GAAU,GAAGH,WACbI,GAAwBC,EAA8B,MAE5DC,EAAcF,GAAuB,CACjC,CAACG,EAAcC,mBAAmBb,QAASC,GACrC,GAAGA,OACH,OAMVa,GAAU,KACNxB,GAAYE,KAAwB,GACrC,CAACtB,EAAoBG,IAExByC,GAAU,KACNpB,GAAoBnB,EAAY,GACjC,CAACA,IAuBJ,SAASiB,KACL,QAAIH,KAGA0B,EAAM1C,IACEH,GAAsBC,EAE3BE,EACX,CAoBA,OACI2C,EAAA,MAAA,CAAA,kBACqBR,GACjB1B,UAAWmC,EACPC,GACCjD,IAAeoB,KAAa8B,GAChCtC,SAAA,CAEDuC,SACItC,UAAWmC,EACPI,GACChC,GAAWX,EAAoBD,IAC5B6C,EACJjC,IAAYkC,MAGlB5C,GAASV,KACP+C,EAAA,MAAA,CACIlC,UAAWmC,EACPO,EACAnC,IAAYoC,GACf5C,SAAA,CAEAF,GACGqC,EAAA,KAAA,CACIU,GAAIlB,iBACQ,oBACZ1B,UAAWmC,EACPU,EACAtC,IAAYuC,GACf/C,SAAA,CAEAF,MAAQC,IA5CpB,aADDA,aAAK,EAALA,EAAOiD,MAGHT,EAACU,EAAY,CACTlD,MAAOA,EACPM,SAAUG,GAAWH,QAAW6C,IAIjC,SAuCF9D,IACG+C,EAACgB,GACGlD,UAAWmD,gBACE,yBACbC,gBAAgB,EAChBC,aAAa,UACbC,QAxFK,KACzB,MAAMC,GAAajE,GAEf2C,EAAM1C,IACNiB,GAAY+C,GAGZ/D,GACAA,EAAe+D,EACnB,EA+EiD,gBACdjE,GAAQ,iBACPH,GAAW,gBACZsC,GAAS1B,SAAA,CAEvBF,GAASyC,EAACkB,YAAgB3D,IAC3ByC,EAACmB,oBAEGzD,UAAWmC,EACPuB,EACApE,IAAYqE,WAOpCrB,EAACsB,EAASC,IAAG,CACT7D,UAAW8D,EACXlB,GAAInB,GAAS,cACA,uBAAsB,gBACpBnC,GACfyE,MAAO/C,GACPgD,MAAOC,GAAY3E,aAEnBgD,EAAA,MAAA,CAAK4B,IAAKrD,GAAmBqD,IAAGnE,SAC5BmC,EAAA,MAAAiC,OAAAC,OAAA,CACIpE,UAAWmC,EAAKkC,EAAuBrE,IACnCC,EAAU,CAAAF,SAAA,CAEduC,EAAA,MAAA,CACI4B,IAAKvC,iBACO,wBACZ3B,UAAWmC,EACPmC,EACA7E,GACI8E,GACPxE,SAEDuC,EAAA,MAAA,CAAK4B,IAAKnD,GAAsBmD,aAC5B5B,EAAA,MAAA,CAAA,UAAa,6BACY,mBAAbvC,EACFA,EAASI,GAAM,CACXqE,UAAW7D,KAEfZ,QAIjBN,GACGyC,EAACuC,EAAM,CACHzE,UAAW0E,EAA+B,UAClC,kBACRC,SAAS,QACTC,UAAU,OACV7B,KAAK,SACLO,QApIL,KACnB1C,IAAqBD,GAAiB,EAmISZ,SAAA,CAEvBuC,EAACkB,EAAc,CAAAzD,SAAE,QACbY,GAAmB,OAAS,aACzBd,MACPqC,EAAA,OAAA,CAAA,eAAA,EAAAnC,SAAA,CAAA,QACUY,GAAmB,OAAS,uBAOxD,EAId1B,EAAW4F,YAAc"}
@@ -1,2 +1,2 @@
1
- import"./filter-item.styles_cphjnj.css";const e={minimisableContent:{height:"--fds-internal-filter-minimisableContent-height"}},i="f1afprn0",f="fo96iku",t="d136l108",n="d89ue12",l="d4x3x5q",m="f1eimp3e",o="f1b5woey",s="fe52bn7",p="cjime8m",r="cl88d88",c="fxnpooo",j="f9puapc",a="eqgs6og",d="fu0jz3r",h="m1n17l6q",b="my7z4fl",g="fw516jj";export{p as chevronIcon,r as chevronIconExpanded,t as divider,l as dividerMobile,n as dividerVisible,a as expandableItem,d as filterItemBody,s as filterItemExpandButton,m as filterItemHeader,o as filterItemHeaderMobile,g as filterItemMinimiseButton,c as filterItemTitle,j as filterItemTitleMobile,i as filterItemWrapper,f as filterItemWrapperDarker,h as minimisableContent,b as minimisableContentMinimisable,e as tokens};
1
+ import"./filter-item.styles_1yixp8h.css";const e={minimisableContent:{height:"--fds-internal-filter-minimisableContent-height"}},i="f1afprn0",f="fo96iku",t="d136l108",n="d89ue12",l="d4x3x5q",m="f1eimp3e",o="f1b5woey",s="fe52bn7",p="cjime8m",r="cl88d88",a="fxnpooo",c="f9puapc",d="eqgs6og",h="fu0jz3r",x="m1n17l6q",b="my7z4fl",g="fw516jj";export{p as chevronIcon,r as chevronIconExpanded,t as divider,l as dividerMobile,n as dividerVisible,d as expandableItem,h as filterItemBody,s as filterItemExpandButton,m as filterItemHeader,o as filterItemHeaderMobile,g as filterItemMinimiseButton,a as filterItemTitle,c as filterItemTitleMobile,i as filterItemWrapper,f as filterItemWrapperDarker,x as minimisableContent,b as minimisableContentMinimisable,e as tokens};
2
2
  //# sourceMappingURL=filter-item.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-item.styles.js","sources":["../../src/filter/filter-item.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Colour, Font, Motion, Spacing } from \"../theme\";\n\nexport const tokens = {\n minimisableContent: {\n height: \"--fds-internal-filter-minimisableContent-height\",\n },\n} as const;\n\n// =============================================================================\n// FILTER ITEM STYLES\n// =============================================================================\n\nexport const filterItemWrapper = css`\n background-color: ${Colour[\"bg\"]};\n`;\n\nexport const filterItemWrapperDarker = css`\n background-color: ${Colour[\"bg-strong\"]};\n`;\n\nexport const divider = css`\n display: none;\n height: 1px;\n background-color: ${Colour[\"border\"]};\n`;\n\nexport const dividerVisible = css`\n display: block;\n`;\n\nexport const dividerMobile = css`\n margin: 0 ${Spacing[\"spacing-16\"]};\n`;\n\n// =============================================================================\n// HEADER STYLES\n// =============================================================================\n\nexport const filterItemHeader = css`\n display: flex;\n align-items: center;\n\n background-color: ${Colour[\"bg\"]};\n`;\n\nexport const filterItemHeaderMobile = css`\n background-color: transparent;\n`;\n\nexport const filterItemExpandButton = css`\n margin: 0 0 0 auto;\n\n color: ${Colour[\"icon\"]};\n &:hover {\n color: ${Colour[\"icon-hover\"]};\n }\n`;\n\nexport const chevronIcon = css`\n height: ${Font.Spec[\"body-size-baseline\"]};\n width: ${Font.Spec[\"body-size-baseline\"]};\n\n transform: rotate(0deg);\n transition: transform ${Motion[\"duration-350\"]} ${Motion[\"ease-standard\"]};\n`;\n\nexport const chevronIconExpanded = css`\n transform: rotate(180deg);\n`;\n\nexport const filterItemTitle = css`\n ${Font[\"heading-xs-semibold\"]}\n color: ${Colour[\"text\"]};\n\n margin: ${Spacing[\"spacing-24\"]} 0;\n margin-left: ${Spacing[\"spacing-20\"]};\n`;\n\nexport const filterItemTitleMobile = css`\n ${Font[\"body-md-semibold\"]}\n color: ${Colour[\"text-subtle\"]};\n\n margin: ${Spacing[\"spacing-24\"]} ${Spacing[\"spacing-20\"]} 0\n ${Spacing[\"spacing-20\"]};\n`;\n\n// =============================================================================\n// CONTENT STYLES\n// =============================================================================\n\nexport const expandableItem = css`\n overflow: hidden;\n`;\n\nexport const filterItemBody = css`\n padding: ${Spacing[\"spacing-24\"]} ${Spacing[\"spacing-20\"]};\n`;\n\nexport const minimisableContent = css`\n ${tokens.minimisableContent.height}: initial;\n height: var(${tokens.minimisableContent.height});\n`;\n\nexport const minimisableContentMinimisable = css`\n overflow: hidden;\n`;\n\nexport const filterItemMinimiseButton = css`\n height: fit-content;\n padding: 0;\n margin: ${Spacing[\"spacing-16\"]} 0 0 0;\n`;\n"],"names":["tokens","minimisableContent","height","filterItemWrapper","filterItemWrapperDarker","divider","dividerVisible","dividerMobile","filterItemHeader","filterItemHeaderMobile","filterItemExpandButton","chevronIcon","chevronIconExpanded","filterItemTitle","filterItemTitleMobile","expandableItem","filterItemBody","minimisableContentMinimisable","filterItemMinimiseButton"],"mappings":"8DAIO,MAAMA,EAAS,CAClBC,mBAAoB,CAChBC,OAAQ,oDAQHC,EAAiB,WAIjBC,EAAuB,UAIvBC,EAAO,WAMPC,EAAc,UAIdC,EAAa,UAQbC,EAAgB,WAOhBC,EAAsB,WAItBC,EAAsB,UAStBC,EAAW,UAQXC,EAAmB,UAInBC,EAAe,UAQfC,EAAqB,UAYrBC,EAAc,UAIdC,EAAc,UAIdf,EAAkB,WAKlBgB,EAA6B,UAI7BC,EAAwB"}
1
+ {"version":3,"file":"filter-item.styles.js","sources":["../../src/filter/filter-item.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Colour, Font, Motion, Spacing } from \"../theme\";\n\nexport const tokens = {\n minimisableContent: {\n height: \"--fds-internal-filter-minimisableContent-height\",\n },\n} as const;\n\n// =============================================================================\n// FILTER ITEM STYLES\n// =============================================================================\n\nexport const filterItemWrapper = css`\n background-color: ${Colour[\"bg\"]};\n`;\n\nexport const filterItemWrapperDarker = css`\n background-color: ${Colour[\"bg-strong\"]};\n`;\n\nexport const divider = css`\n display: none;\n height: 1px;\n background-color: ${Colour[\"border\"]};\n`;\n\nexport const dividerVisible = css`\n display: block;\n`;\n\nexport const dividerMobile = css`\n margin: 0 ${Spacing[\"spacing-16\"]};\n`;\n\n// =============================================================================\n// HEADER STYLES\n// =============================================================================\n\nexport const filterItemHeader = css`\n display: flex;\n align-items: center;\n\n background-color: ${Colour[\"bg\"]};\n`;\n\nexport const filterItemHeaderMobile = css`\n background-color: transparent;\n`;\n\nexport const filterItemExpandButton = css`\n margin: 0 0 0 auto;\n\n color: ${Colour[\"icon\"]};\n &:hover {\n color: ${Colour[\"icon-hover\"]};\n }\n`;\n\nexport const chevronIcon = css`\n height: ${Font.Spec[\"body-size-baseline\"]};\n width: ${Font.Spec[\"body-size-baseline\"]};\n\n transform: rotate(0deg);\n transition: transform ${Motion[\"duration-350\"]} ${Motion[\"ease-standard\"]};\n`;\n\nexport const chevronIconExpanded = css`\n transform: rotate(180deg);\n`;\n\nexport const filterItemTitle = css`\n ${Font[\"heading-xs-semibold\"]}\n color: ${Colour[\"text\"]};\n\n margin: ${Spacing[\"spacing-24\"]} 0;\n margin-left: ${Spacing[\"spacing-20\"]};\n`;\n\nexport const filterItemTitleMobile = css`\n ${Font[\"body-md-semibold\"]}\n color: ${Colour[\"text-subtle\"]};\n\n margin: ${Spacing[\"spacing-24\"]} ${Spacing[\"spacing-20\"]} 0\n ${Spacing[\"spacing-20\"]};\n`;\n\n// =============================================================================\n// CONTENT STYLES\n// =============================================================================\n\nexport const expandableItem = css`\n overflow: hidden;\n`;\n\nexport const filterItemBody = css`\n padding: ${Spacing[\"spacing-24\"]} ${Spacing[\"spacing-20\"]};\n`;\n\nexport const minimisableContent = css`\n ${tokens.minimisableContent.height}: initial;\n height: var(${tokens.minimisableContent.height});\n`;\n\nexport const minimisableContentMinimisable = css`\n overflow: hidden;\n`;\n\nexport const filterItemMinimiseButton = css`\n min-height: unset;\n padding: 0;\n margin: ${Spacing[\"spacing-16\"]} 0 0 0;\n`;\n"],"names":["tokens","minimisableContent","height","filterItemWrapper","filterItemWrapperDarker","divider","dividerVisible","dividerMobile","filterItemHeader","filterItemHeaderMobile","filterItemExpandButton","chevronIcon","chevronIconExpanded","filterItemTitle","filterItemTitleMobile","expandableItem","filterItemBody","minimisableContentMinimisable","filterItemMinimiseButton"],"mappings":"+DAIO,MAAMA,EAAS,CAClBC,mBAAoB,CAChBC,OAAQ,oDAQHC,EAAiB,WAIjBC,EAAuB,UAIvBC,EAAO,WAMPC,EAAc,UAIdC,EAAa,UAQbC,EAAgB,WAOhBC,EAAsB,WAItBC,EAAsB,UAStBC,EAAW,UAQXC,EAAmB,UAInBC,EAAe,UAQfC,EAAqB,UAYrBC,EAAc,UAIdC,EAAc,UAIdf,EAAkB,WAKlBgB,EAA6B,UAI7BC,EAAwB"}
@@ -14,4 +14,4 @@
14
14
  .fu0jz3r{padding:var(--fds-spacing-24) var(--fds-spacing-20);}
15
15
  .m1n17l6q{--fds-internal-filter-minimisableContent-height:initial;height:var(--fds-internal-filter-minimisableContent-height);}
16
16
  .my7z4fl{overflow:hidden;}
17
- .fw516jj{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;padding:0;margin:var(--fds-spacing-16) 0 0 0;}}
17
+ .fw516jj{min-height:unset;padding:0;margin:var(--fds-spacing-16) 0 0 0;}}
@@ -1,2 +1,2 @@
1
- import"./filter-modal.styles_qw3xlg.css";const f={filterHeader:{insetTop:"--fds-internal-filter-filterModalHeader-insetTop"}},e="m19agezm",o="m11wuwo8",l="fidypou",r="f1ijv0o9",t="f50yopa",i="f15rygha",a="f14huz7l",s="fxpov9b",p="f14zog8f",d="flrfycx";export{d as filterButton,p as filterClearButton,r as filterHeader,t as filterHeaderWithInsetTop,a as filterTitle,i as filterTitleGroup,s as filterToggleContent,l as floatingWrapper,e as mobileContainer,o as mobileOverlayContainer,f as tokens};
1
+ import"./filter-modal.styles_kuth21.css";const f={filterHeader:{insetTop:"--fds-internal-filter-filterModalHeader-insetTop"}},e="m19agezm",o="m11wuwo8",t="fidypou",r="f1ijv0o9",i="f50yopa",l="f15rygha",a="f14huz7l",s="fxpov9b",p="f14zog8f",d="flrfycx";export{d as filterButton,p as filterClearButton,r as filterHeader,i as filterHeaderWithInsetTop,a as filterTitle,l as filterTitleGroup,s as filterToggleContent,t as floatingWrapper,e as mobileContainer,o as mobileOverlayContainer,f as tokens};
2
2
  //# sourceMappingURL=filter-modal.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-modal.styles.js","sources":["../../src/filter/filter-modal.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Colour, Font, Spacing } from \"../theme\";\n\nexport const tokens = {\n filterHeader: {\n insetTop: \"--fds-internal-filter-filterModalHeader-insetTop\",\n },\n} as const;\n\n// =============================================================================\n// CONTAINER STYLES\n// =============================================================================\n\nexport const mobileContainer = css`\n background-color: ${Colour[\"bg-strong\"]};\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nexport const mobileOverlayContainer = css`\n background-color: ${Colour[\"bg\"]};\n height: 100%;\n width: 100%;\n`;\n\nexport const floatingWrapper = css`\n height: 100%;\n`;\n\n// =============================================================================\n// HEADER STYLES\n// =============================================================================\n\nexport const filterHeader = css`\n display: flex;\n align-items: center;\n background-color: ${Colour[\"bg\"]};\n`;\n\nexport const filterHeaderWithInsetTop = css`\n ${tokens.filterHeader.insetTop}: initial;\n padding-top: var(${tokens.filterHeader.insetTop});\n`;\n\nexport const filterTitleGroup = css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${Spacing[\"spacing-8\"]};\n margin: ${Spacing[\"spacing-24\"]} 0;\n`;\n\nexport const filterTitle = css`\n ${Font[\"heading-xs-semibold\"]}\n color: ${Colour[\"text\"]};\n`;\n\nexport const filterToggleContent = css`\n display: inline-flex;\n align-items: center;\n gap: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const filterClearButton = css`\n background-color: transparent;\n height: 100%;\n padding: ${Spacing[\"spacing-24\"]} ${Spacing[\"spacing-20\"]};\n`;\n\n// =============================================================================\n// COMPONENT STYLES\n// =============================================================================\n\nexport const filterButton = css`\n width: 100%;\n`;\n"],"names":["tokens","filterHeader","insetTop","mobileContainer","mobileOverlayContainer","floatingWrapper","filterHeaderWithInsetTop","filterTitleGroup","filterTitle","filterToggleContent","filterClearButton","filterButton"],"mappings":"+DAIO,MAAMA,EAAS,CAClBC,aAAc,CACVC,SAAU,qDAQLC,EAAe,WAQfC,EAAsB,WAMtBC,EAAe,UAQfJ,EAAY,WAMZK,EAAwB,UAKxBC,EAAgB,WAShBC,EAAW,WAKXC,EAAmB,UAMnBC,EAAiB,WAUjBC,EAAY"}
1
+ {"version":3,"file":"filter-modal.styles.js","sources":["../../src/filter/filter-modal.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Colour, Font, Spacing } from \"../theme\";\n\nexport const tokens = {\n filterHeader: {\n insetTop: \"--fds-internal-filter-filterModalHeader-insetTop\",\n },\n} as const;\n\n// =============================================================================\n// CONTAINER STYLES\n// =============================================================================\n\nexport const mobileContainer = css`\n background-color: ${Colour[\"bg-strong\"]};\n height: 100%;\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nexport const mobileOverlayContainer = css`\n background-color: ${Colour[\"bg\"]};\n height: 100%;\n width: 100%;\n`;\n\nexport const floatingWrapper = css`\n height: 100%;\n`;\n\n// =============================================================================\n// HEADER STYLES\n// =============================================================================\n\nexport const filterHeader = css`\n display: flex;\n align-items: center;\n background-color: ${Colour[\"bg\"]};\n`;\n\nexport const filterHeaderWithInsetTop = css`\n ${tokens.filterHeader.insetTop}: initial;\n padding-top: var(${tokens.filterHeader.insetTop});\n`;\n\nexport const filterTitleGroup = css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: ${Spacing[\"spacing-8\"]};\n margin: ${Spacing[\"spacing-24\"]} 0;\n`;\n\nexport const filterTitle = css`\n ${Font[\"heading-xs-semibold\"]}\n color: ${Colour[\"text\"]};\n`;\n\nexport const filterToggleContent = css`\n display: inline-flex;\n align-items: center;\n gap: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const filterClearButton = css`\n background-color: transparent;\n min-height: unset;\n padding: ${Spacing[\"spacing-24\"]} ${Spacing[\"spacing-20\"]};\n`;\n\n// =============================================================================\n// COMPONENT STYLES\n// =============================================================================\n\nexport const filterButton = css`\n width: 100%;\n`;\n"],"names":["tokens","filterHeader","insetTop","mobileContainer","mobileOverlayContainer","floatingWrapper","filterHeaderWithInsetTop","filterTitleGroup","filterTitle","filterToggleContent","filterClearButton","filterButton"],"mappings":"+DAIO,MAAMA,EAAS,CAClBC,aAAc,CACVC,SAAU,qDAQLC,EAAe,WAQfC,EAAsB,WAMtBC,EAAe,UAQfJ,EAAY,WAMZK,EAAwB,UAKxBC,EAAgB,WAShBC,EAAW,WAKXC,EAAmB,UAMnBC,EAAiB,WAUjBC,EAAY"}
@@ -6,5 +6,5 @@
6
6
  .f15rygha{-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:var(--fds-spacing-8);margin:var(--fds-spacing-24) 0;}
7
7
  .f14huz7l{font-family:var(--fds-font-family-heading);font-variant:var(--fds-font-variant);font-size:var(--fds-font-heading-size-xs);font-weight:var(--fds-font-weight-semibold);line-height:var(--fds-font-heading-lh-xs);letter-spacing:var(--fds-font-heading-ls-xs);color:var(--fds-colour-text);}
8
8
  .fxpov9b{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:var(--fds-spacing-8);}
9
- .f14zog8f{background-color:transparent;height:100%;padding:var(--fds-spacing-24) var(--fds-spacing-20);}
9
+ .f14zog8f{background-color:transparent;min-height:unset;padding:var(--fds-spacing-24) var(--fds-spacing-20);}
10
10
  .flrfycx{width:100%;}}
@@ -1,2 +1,2 @@
1
- import"./filter-sidebar.styles_1otwpjl.css";const t="d1a2pl71",f="fq9unar",r="fjfy2r5",s="f1i4s84l",l="f122t6n9";export{t as desktopContainer,l as filterClearButton,f as filterHeader,s as filterTitle,r as filterTitleGroup};
1
+ import"./filter-sidebar.styles_rbfq4f.css";const f="d1a2pl71",r="fq9unar",s="fjfy2r5",t="f1i4s84l",e="f122t6n9";export{f as desktopContainer,e as filterClearButton,r as filterHeader,t as filterTitle,s as filterTitleGroup};
2
2
  //# sourceMappingURL=filter-sidebar.styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filter-sidebar.styles.js","sources":["../../src/filter/filter-sidebar.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Border, Colour, Font, Radius, Spacing } from \"../theme\";\n\n// =============================================================================\n// CONTAINER STYLES\n// =============================================================================\n\nexport const desktopContainer = css`\n background-color: ${Colour[\"bg\"]};\n border: ${Border[\"width-010\"]} ${Border[\"solid\"]} ${Colour[\"border\"]};\n border-radius: ${Radius[\"md\"]};\n overflow: hidden;\n width: 100%;\n`;\n\n// =============================================================================\n// HEADER STYLES\n// =============================================================================\n\nexport const filterHeader = css`\n display: flex;\n align-items: center;\n\n background-color: ${Colour[\"bg\"]};\n color: ${Colour[\"text\"]};\n`;\n\nexport const filterTitleGroup = css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: ${Spacing[\"spacing-8\"]};\n margin: ${Spacing[\"spacing-24\"]} 0 ${Spacing[\"spacing-24\"]}\n ${Spacing[\"spacing-20\"]};\n`;\n\nexport const filterTitle = css`\n ${Font[\"heading-xs-semibold\"]}\n`;\n\nexport const filterClearButton = css`\n background-color: transparent;\n padding-right: ${Spacing[\"spacing-20\"]};\n padding-left: ${Spacing[\"spacing-20\"]};\n height: 100%;\n`;\n"],"names":["desktopContainer","filterHeader","filterTitleGroup","filterTitle","filterClearButton"],"mappings":"kEAQO,MAAMA,EAAgB,WAYhBC,EAAY,UAQZC,EAAgB,UAUhBC,EAAW,WAIXC,EAAiB"}
1
+ {"version":3,"file":"filter-sidebar.styles.js","sources":["../../src/filter/filter-sidebar.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Border, Colour, Font, Radius, Spacing } from \"../theme\";\n\n// =============================================================================\n// CONTAINER STYLES\n// =============================================================================\n\nexport const desktopContainer = css`\n background-color: ${Colour[\"bg\"]};\n border: ${Border[\"width-010\"]} ${Border[\"solid\"]} ${Colour[\"border\"]};\n border-radius: ${Radius[\"md\"]};\n overflow: hidden;\n width: 100%;\n`;\n\n// =============================================================================\n// HEADER STYLES\n// =============================================================================\n\nexport const filterHeader = css`\n display: flex;\n align-items: center;\n\n background-color: ${Colour[\"bg\"]};\n color: ${Colour[\"text\"]};\n`;\n\nexport const filterTitleGroup = css`\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: ${Spacing[\"spacing-8\"]};\n margin: ${Spacing[\"spacing-24\"]} 0 ${Spacing[\"spacing-24\"]}\n ${Spacing[\"spacing-20\"]};\n`;\n\nexport const filterTitle = css`\n ${Font[\"heading-xs-semibold\"]}\n`;\n\nexport const filterClearButton = css`\n background-color: transparent;\n padding-right: ${Spacing[\"spacing-20\"]};\n padding-left: ${Spacing[\"spacing-20\"]};\n min-height: unset;\n`;\n"],"names":["desktopContainer","filterHeader","filterTitleGroup","filterTitle","filterClearButton"],"mappings":"iEAQO,MAAMA,EAAgB,WAYhBC,EAAY,UAQZC,EAAgB,UAUhBC,EAAW,WAIXC,EAAiB"}
@@ -2,4 +2,4 @@
2
2
  .fq9unar{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:var(--fds-colour-bg);color:var(--fds-colour-text);}
3
3
  .fjfy2r5{-webkit-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start;gap:var(--fds-spacing-8);margin:var(--fds-spacing-24) 0 var(--fds-spacing-24) var(--fds-spacing-20);}
4
4
  .f1i4s84l{font-family:var(--fds-font-family-heading);font-variant:var(--fds-font-variant);font-size:var(--fds-font-heading-size-xs);font-weight:var(--fds-font-weight-semibold);line-height:var(--fds-font-heading-lh-xs);letter-spacing:var(--fds-font-heading-ls-xs);}
5
- .f122t6n9{background-color:transparent;padding-right:var(--fds-spacing-20);padding-left:var(--fds-spacing-20);height:100%;}}
5
+ .f122t6n9{background-color:transparent;padding-right:var(--fds-spacing-20);padding-left:var(--fds-spacing-20);min-height:unset;}}
@@ -39,7 +39,7 @@ export declare const Filter: {
39
39
  };
40
40
  /** A filter item that renders selectable checkboxes (desktop) or toggle chips (mobile). */
41
41
  Checkbox: {
42
- <T = import("./types").FilterItemCheckboxOptionProps>({ selectedOptions, options, showAsCheckboxInMobile, minimisableOptions, onSelect, labelExtractor, valueExtractor, useToggleContentWidth, ...filterItemProps }: import("./types").FilterItemCheckboxProps<T>): import("react/jsx-runtime").JSX.Element;
42
+ <T = import(".").FilterItemCheckboxOptionProps>({ selectedOptions, options, showAsCheckboxInMobile, minimisableOptions, onSelect, labelExtractor, valueExtractor, useToggleContentWidth, ...filterItemProps }: import(".").FilterItemCheckboxProps<T>): import("react/jsx-runtime").JSX.Element;
43
43
  displayName: string;
44
44
  };
45
45
  };
@@ -1 +1 @@
1
- {"version":3,"file":"filter.js","sources":["../../src/filter/filter.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport { useMaxWidthMediaQuery } from \"../theme\";\nimport { FilterItemCheckbox } from \"./addons/filter-item-checkbox\";\nimport { FilterItem } from \"./filter-item\";\nimport { FilterItemPage } from \"./filter-item-page\";\nimport { FilterModal } from \"./filter-modal\";\nimport { FilterSidebar } from \"./filter-sidebar\";\nimport type { FilterProps } from \"./types\";\n\n/**\n * A responsive filter panel that switches between a persistent sidebar on\n * desktop and a modal overlay on mobile.\n *\n * Use `Filter` to let users narrow a result set by one or more criteria.\n * On mobile (below lg breakpoint) the panel is hidden behind a toggle button and\n * rendered in a full-screen modal; otherwise it is displayed as a\n * fixed sidebar.\n *\n * Sub-components:\n * - `Filter.Sidebar` — standalone desktop sidebar, used by `Filter` internally.\n * - `Filter.Modal` — standalone mobile modal, used by `Filter` internally.\n * - `Filter.Item` — a collapsible section within the panel.\n * - `Filter.Page` — a drill-down sub-page inside the mobile modal.\n * - `Filter.Checkbox` — a filter item with selectable checkbox or toggle options.\n */\nexport const Filter = ({\n children,\n className,\n style,\n onDismiss,\n onDone,\n onModalOpen,\n toggleFilterButtonStyle,\n insets,\n id,\n \"data-testid\": testId,\n ...props\n}: FilterProps) => {\n const isMobile = useMaxWidthMediaQuery(\"lg\");\n\n useEffect(() => {\n if (!isMobile) {\n onDismiss?.();\n }\n }, [isMobile]);\n\n return (\n <div className={className} style={style} id={id} data-testid={testId}>\n {isMobile ? (\n <FilterModal\n onDismiss={onDismiss}\n onDone={onDone}\n onModalOpen={onModalOpen}\n toggleFilterButtonStyle={toggleFilterButtonStyle}\n insets={insets}\n {...props}\n >\n {typeof children === \"function\"\n ? children(\"mobile\")\n : children}\n </FilterModal>\n ) : (\n <FilterSidebar {...props}>\n {typeof children === \"function\"\n ? children(\"default\")\n : children}\n </FilterSidebar>\n )}\n </div>\n );\n};\n\n/** Standalone desktop sidebar variant of the filter panel. */\nFilter.Sidebar = FilterSidebar;\n/** Standalone mobile modal variant of the filter panel. */\nFilter.Modal = FilterModal;\n/** A collapsible section within a filter panel. */\nFilter.Item = FilterItem;\n/** A full-screen sub-page overlay for drill-down selection in the mobile modal. */\nFilter.Page = FilterItemPage;\n/** A filter item that renders selectable checkboxes (desktop) or toggle chips (mobile). */\nFilter.Checkbox = FilterItemCheckbox;\n"],"names":["Filter","_a","children","className","style","onDismiss","onDone","onModalOpen","toggleFilterButtonStyle","insets","id","testId","props","__rest","isMobile","useMaxWidthMediaQuery","useEffect","_jsx","FilterModal","Object","assign","FilterSidebar","Sidebar","Modal","Item","FilterItem","Page","FilterItemPage","Checkbox","FilterItemCheckbox"],"mappings":"s2BA0BO,MAAMA,EAAUC,QAAAC,SACnBA,EAAQC,UACRA,EAASC,MACTA,EAAKC,UACLA,EAASC,OACTA,EAAMC,YACNA,EAAWC,wBACXA,EAAuBC,OACvBA,EAAMC,GACNA,EACA,cAAeC,GAAMV,EAClBW,EAAKC,EAAAZ,EAXW,CAAA,WAAA,YAAA,QAAA,YAAA,SAAA,cAAA,0BAAA,SAAA,KAAA,gBAanB,MAAMa,EAAWC,EAAsB,MAQvC,OANAC,GAAU,KACDF,GACDT,SAAAA,GACJ,GACD,CAACS,IAGAG,SAAKd,UAAWA,EAAWC,MAAOA,EAAOM,GAAIA,EAAE,cAAeC,EAAMT,SAC/DY,EACGG,EAACC,EAAWC,OAAAC,OAAA,CACRf,UAAWA,EACXC,OAAQA,EACRC,YAAaA,EACbC,wBAAyBA,EACzBC,OAAQA,GACJG,EAAK,CAAAV,SAEY,mBAAbA,EACFA,EAAS,UACTA,KAGVe,EAACI,mBAAkBT,EAAK,CAAAV,SACC,mBAAbA,EACFA,EAAS,WACTA,MAGZ,EAKdF,EAAOsB,QAAUD,EAEjBrB,EAAOuB,MAAQL,EAEflB,EAAOwB,KAAOC,EAEdzB,EAAO0B,KAAOC,EAEd3B,EAAO4B,SAAWC"}
1
+ {"version":3,"file":"filter.js","sources":["../../src/filter/filter.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\nimport { useMaxWidthMediaQuery } from \"../theme\";\nimport { FilterItemCheckbox } from \"./addons/filter-item-checkbox\";\nimport { FilterItem } from \"./filter-item\";\nimport { FilterItemPage } from \"./filter-item-page\";\nimport { FilterModal } from \"./filter-modal\";\nimport { FilterSidebar } from \"./filter-sidebar\";\nimport type { FilterProps } from \"./types\";\n\n// @catalog\n/**\n * A responsive filter panel that switches between a persistent sidebar on\n * desktop and a modal overlay on mobile.\n *\n * Use `Filter` to let users narrow a result set by one or more criteria.\n * On mobile (below lg breakpoint) the panel is hidden behind a toggle button and\n * rendered in a full-screen modal; otherwise it is displayed as a\n * fixed sidebar.\n *\n * Sub-components:\n * - `Filter.Sidebar` — standalone desktop sidebar, used by `Filter` internally.\n * - `Filter.Modal` — standalone mobile modal, used by `Filter` internally.\n * - `Filter.Item` — a collapsible section within the panel.\n * - `Filter.Page` — a drill-down sub-page inside the mobile modal.\n * - `Filter.Checkbox` — a filter item with selectable checkbox or toggle options.\n */\nexport const Filter = ({\n children,\n className,\n style,\n onDismiss,\n onDone,\n onModalOpen,\n toggleFilterButtonStyle,\n insets,\n id,\n \"data-testid\": testId,\n ...props\n}: FilterProps) => {\n const isMobile = useMaxWidthMediaQuery(\"lg\");\n\n useEffect(() => {\n if (!isMobile) {\n onDismiss?.();\n }\n }, [isMobile]);\n\n return (\n <div className={className} style={style} id={id} data-testid={testId}>\n {isMobile ? (\n <FilterModal\n onDismiss={onDismiss}\n onDone={onDone}\n onModalOpen={onModalOpen}\n toggleFilterButtonStyle={toggleFilterButtonStyle}\n insets={insets}\n {...props}\n >\n {typeof children === \"function\"\n ? children(\"mobile\")\n : children}\n </FilterModal>\n ) : (\n <FilterSidebar {...props}>\n {typeof children === \"function\"\n ? children(\"default\")\n : children}\n </FilterSidebar>\n )}\n </div>\n );\n};\n\n/** Standalone desktop sidebar variant of the filter panel. */\nFilter.Sidebar = FilterSidebar;\n/** Standalone mobile modal variant of the filter panel. */\nFilter.Modal = FilterModal;\n/** A collapsible section within a filter panel. */\nFilter.Item = FilterItem;\n/** A full-screen sub-page overlay for drill-down selection in the mobile modal. */\nFilter.Page = FilterItemPage;\n/** A filter item that renders selectable checkboxes (desktop) or toggle chips (mobile). */\nFilter.Checkbox = FilterItemCheckbox;\n"],"names":["Filter","_a","children","className","style","onDismiss","onDone","onModalOpen","toggleFilterButtonStyle","insets","id","testId","props","__rest","isMobile","useMaxWidthMediaQuery","useEffect","_jsx","FilterModal","Object","assign","FilterSidebar","Sidebar","Modal","Item","FilterItem","Page","FilterItemPage","Checkbox","FilterItemCheckbox"],"mappings":"s2BA2BO,MAAMA,EAAUC,QAAAC,SACnBA,EAAQC,UACRA,EAASC,MACTA,EAAKC,UACLA,EAASC,OACTA,EAAMC,YACNA,EAAWC,wBACXA,EAAuBC,OACvBA,EAAMC,GACNA,EACA,cAAeC,GAAMV,EAClBW,EAAKC,EAAAZ,EAXW,CAAA,WAAA,YAAA,QAAA,YAAA,SAAA,cAAA,0BAAA,SAAA,KAAA,gBAanB,MAAMa,EAAWC,EAAsB,MAQvC,OANAC,GAAU,KACDF,GACDT,SAAAA,GACJ,GACD,CAACS,IAGAG,SAAKd,UAAWA,EAAWC,MAAOA,EAAOM,GAAIA,EAAE,cAAeC,EAAMT,SAC/DY,EACGG,EAACC,EAAWC,OAAAC,OAAA,CACRf,UAAWA,EACXC,OAAQA,EACRC,YAAaA,EACbC,wBAAyBA,EACzBC,OAAQA,GACJG,EAAK,CAAAV,SAEY,mBAAbA,EACFA,EAAS,UACTA,KAGVe,EAACI,mBAAkBT,EAAK,CAAAV,SACC,mBAAbA,EACFA,EAAS,WACTA,MAGZ,EAKdF,EAAOsB,QAAUD,EAEjBrB,EAAOuB,MAAQL,EAEflB,EAAOwB,KAAOC,EAEdzB,EAAO0B,KAAOC,EAEd3B,EAAO4B,SAAWC"}
package/filter/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ export * from "./addons/types";
1
2
  export * from "./filter";
2
3
  export * from "./types";