@lifesg/react-design-system 4.0.0-alpha.5 → 4.0.0-alpha.7

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 (910) hide show
  1. package/accordion/accordion.js.map +1 -1
  2. package/accordion/types.d.ts +1 -1
  3. package/alert/alert.js.map +1 -1
  4. package/alert/types.d.ts +2 -0
  5. package/animations/loading-dots/loading-dots.d.ts +5 -2
  6. package/animations/loading-dots/loading-dots.js.map +1 -1
  7. package/animations/loading-dots-spinner/loading-dots-spinner.d.ts +3 -0
  8. package/animations/loading-dots-spinner/loading-dots-spinner.js.map +1 -1
  9. package/animations/loading-dots-spinner/lottie-animation.d.ts +2 -2
  10. package/animations/loading-dots-spinner/lottie-animation.js.map +1 -1
  11. package/animations/loading-spinner/loading-spinner.d.ts +5 -2
  12. package/animations/loading-spinner/loading-spinner.js.map +1 -1
  13. package/animations/themed-loading-spinner/themed-loading-spinner.d.ts +5 -2
  14. package/animations/themed-loading-spinner/themed-loading-spinner.js.map +1 -1
  15. package/animations/types.d.ts +13 -6
  16. package/avatar/avatar.js.map +1 -1
  17. package/badge/badge.js.map +1 -1
  18. package/badge/types.d.ts +13 -2
  19. package/box-container/box-container.js.map +1 -1
  20. package/box-container/types.d.ts +2 -0
  21. package/breadcrumb/breadcrumb.d.ts +7 -0
  22. package/breadcrumb/breadcrumb.js.map +1 -1
  23. package/breadcrumb/types.d.ts +36 -0
  24. package/button/button.d.ts +1 -0
  25. package/button/button.js.map +1 -1
  26. package/button/types.d.ts +47 -9
  27. package/calendar/calendar.d.ts +3 -0
  28. package/calendar/calendar.js.map +1 -1
  29. package/calendar/types.d.ts +46 -10
  30. package/card/card.d.ts +1 -0
  31. package/card/card.js.map +1 -1
  32. package/card/types.d.ts +1 -0
  33. package/checkbox/checkbox.d.ts +3 -0
  34. package/checkbox/checkbox.js.map +1 -1
  35. package/checkbox/types.d.ts +23 -3
  36. package/cjs/accordion/accordion.js.map +1 -1
  37. package/cjs/alert/alert.js.map +1 -1
  38. package/cjs/animations/loading-dots/loading-dots.js.map +1 -1
  39. package/cjs/animations/loading-dots-spinner/loading-dots-spinner.js.map +1 -1
  40. package/cjs/animations/loading-dots-spinner/lottie-animation.js.map +1 -1
  41. package/cjs/animations/loading-spinner/loading-spinner.js.map +1 -1
  42. package/cjs/animations/themed-loading-spinner/themed-loading-spinner.js.map +1 -1
  43. package/cjs/avatar/avatar.js.map +1 -1
  44. package/cjs/badge/badge.js.map +1 -1
  45. package/cjs/box-container/box-container.js.map +1 -1
  46. package/cjs/breadcrumb/breadcrumb.js.map +1 -1
  47. package/cjs/button/button.js.map +1 -1
  48. package/cjs/calendar/calendar.js.map +1 -1
  49. package/cjs/card/card.js.map +1 -1
  50. package/cjs/checkbox/checkbox.js.map +1 -1
  51. package/cjs/countdown-timer/countdown-timer.js.map +1 -1
  52. package/cjs/dashed-border/dashed-border.js.map +1 -1
  53. package/cjs/data-table/data-table.js +1 -1
  54. package/cjs/data-table/data-table.js.map +1 -1
  55. package/cjs/data-table/data-table.styles.js +1 -1
  56. package/cjs/data-table/data-table.styles.js.map +1 -1
  57. package/cjs/data-table/data-table.styles_rxganh.css +27 -0
  58. package/cjs/date-input/date-input.js.map +1 -1
  59. package/cjs/date-navigator/date-navigator.js.map +1 -1
  60. package/cjs/date-range-input/date-range-input.js.map +1 -1
  61. package/cjs/divider/divider.js.map +1 -1
  62. package/cjs/drawer/drawer.js.map +1 -1
  63. package/cjs/e-signature/e-signature.js.map +1 -1
  64. package/cjs/error-display/error-display.js.map +1 -1
  65. package/cjs/external/dompurify/dist/purify.es.js +2 -2
  66. package/cjs/external/dompurify/dist/purify.es.js.map +1 -1
  67. package/cjs/external/lodash/_setCacheHas.js.map +1 -1
  68. package/cjs/external/lodash/lodash.js +1 -1
  69. package/cjs/external/lodash/lodash.js.map +1 -1
  70. package/cjs/feedback-rating/feedback-rating.js.map +1 -1
  71. package/cjs/file-download/file-download.js.map +1 -1
  72. package/cjs/file-upload/file-item-edit.js.map +1 -1
  73. package/cjs/file-upload/file-list/file-list.js.map +1 -1
  74. package/cjs/file-upload/file-list-item/file-list-item.js.map +1 -1
  75. package/cjs/file-upload/file-list-item/file-list-item.styles.js +1 -1
  76. package/cjs/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  77. package/cjs/file-upload/file-list-item/{file-list-item.styles_o8000f.css → file-list-item.styles_kgtfke.css} +1 -1
  78. package/cjs/file-upload/file-upload.js.map +1 -1
  79. package/cjs/filter/addons/filter-item-checkbox-helpers.js.map +1 -1
  80. package/cjs/filter/addons/filter-item-checkbox.js.map +1 -1
  81. package/cjs/filter/filter-item.js +1 -1
  82. package/cjs/filter/filter-item.js.map +1 -1
  83. package/cjs/filter/filter.js.map +1 -1
  84. package/cjs/footer/footer.js.map +1 -1
  85. package/cjs/form/form-custom-field/form-custom-field.js +2 -0
  86. package/cjs/form/form-custom-field/form-custom-field.js.map +1 -0
  87. package/cjs/form/form-date-input/form-date-input.js +2 -0
  88. package/cjs/form/form-date-input/form-date-input.js.map +1 -0
  89. package/cjs/form/form-date-range-input/form-date-range-input.js +2 -0
  90. package/cjs/form/form-date-range-input/form-date-range-input.js.map +1 -0
  91. package/cjs/form/form-e-signature/form-e-signature.js +2 -0
  92. package/cjs/form/form-e-signature/form-e-signature.js.map +1 -0
  93. package/cjs/form/form-histogram-slider/form-histogram-slider.js +2 -0
  94. package/cjs/form/form-histogram-slider/form-histogram-slider.js.map +1 -0
  95. package/cjs/form/form-input/form-input.js +2 -0
  96. package/cjs/form/form-input/form-input.js.map +1 -0
  97. package/cjs/form/form-input-group/form-input-group.js +2 -0
  98. package/cjs/form/form-input-group/form-input-group.js.map +1 -0
  99. package/cjs/form/form-label/form-label-addon.js +2 -0
  100. package/cjs/form/form-label/form-label-addon.js.map +1 -0
  101. package/cjs/form/form-label/form-label-addon.styles.js +2 -0
  102. package/cjs/form/form-label/form-label-addon.styles.js.map +1 -0
  103. package/cjs/form/form-label/form-label-addon.styles_aztasj.css +1 -0
  104. package/cjs/form/form-label/form-label.js +2 -0
  105. package/cjs/form/form-label/form-label.js.map +1 -0
  106. package/cjs/form/form-label/form-label.styles.js +2 -0
  107. package/cjs/form/form-label/form-label.styles.js.map +1 -0
  108. package/cjs/form/form-label/form-label.styles_180zf7j.css +6 -0
  109. package/cjs/form/form-masked-input/form-masked-input.js +2 -0
  110. package/cjs/form/form-masked-input/form-masked-input.js.map +1 -0
  111. package/cjs/form/form-multi-select/form-multi-select.js +2 -0
  112. package/cjs/form/form-multi-select/form-multi-select.js.map +1 -0
  113. package/cjs/form/form-nested-multi-select/form-nested-multi-select.js +2 -0
  114. package/cjs/form/form-nested-multi-select/form-nested-multi-select.js.map +1 -0
  115. package/cjs/form/form-nested-select/form-nested-select.js +2 -0
  116. package/cjs/form/form-nested-select/form-nested-select.js.map +1 -0
  117. package/cjs/form/form-otp-verification/form-otp-verification.js +2 -0
  118. package/cjs/form/form-otp-verification/form-otp-verification.js.map +1 -0
  119. package/cjs/form/form-phone-number-input/form-phone-number-input.js +2 -0
  120. package/cjs/form/form-phone-number-input/form-phone-number-input.js.map +1 -0
  121. package/cjs/form/form-predictive-text-input/form-predictive-text-input.js +2 -0
  122. package/cjs/form/form-predictive-text-input/form-predictive-text-input.js.map +1 -0
  123. package/cjs/form/form-range-select/form-range-select.js +2 -0
  124. package/cjs/form/form-range-select/form-range-select.js.map +1 -0
  125. package/cjs/form/form-range-slider/form-range-slider.js +2 -0
  126. package/cjs/form/form-range-slider/form-range-slider.js.map +1 -0
  127. package/cjs/form/form-select/form-select.js +2 -0
  128. package/cjs/form/form-select/form-select.js.map +1 -0
  129. package/cjs/form/form-select-histogram/form-select-histogram.js +2 -0
  130. package/cjs/form/form-select-histogram/form-select-histogram.js.map +1 -0
  131. package/cjs/form/form-slider/form-slider.js +2 -0
  132. package/cjs/form/form-slider/form-slider.js.map +1 -0
  133. package/cjs/form/form-textarea/form-textarea.js +2 -0
  134. package/cjs/form/form-textarea/form-textarea.js.map +1 -0
  135. package/cjs/form/form-textarea/form-textarea.styles.js +2 -0
  136. package/cjs/form/form-textarea/form-textarea.styles.js.map +1 -0
  137. package/cjs/form/form-textarea/form-textarea.styles_1kneyif.css +3 -0
  138. package/cjs/form/form-time-range-picker/form-time-range-picker.js +2 -0
  139. package/cjs/form/form-time-range-picker/form-time-range-picker.js.map +1 -0
  140. package/cjs/form/form-timepicker/form-timepicker.js +2 -0
  141. package/cjs/form/form-timepicker/form-timepicker.js.map +1 -0
  142. package/cjs/form/form-unit-number-input/form-unit-number-input.js +2 -0
  143. package/cjs/form/form-unit-number-input/form-unit-number-input.js.map +1 -0
  144. package/cjs/form/form-wrapper.js +1 -1
  145. package/cjs/form/form-wrapper.js.map +1 -1
  146. package/cjs/form/index.js +1 -1
  147. package/cjs/form/index.js.map +1 -1
  148. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
  149. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  150. package/cjs/histogram-slider/histogram-slider.js.map +1 -1
  151. package/cjs/image-button/image-button.js.map +1 -1
  152. package/cjs/index.js +1 -1
  153. package/cjs/input/input.js.map +1 -1
  154. package/cjs/input-group/input-group.js.map +1 -1
  155. package/cjs/input-multi-select/input-multi-select.js.map +1 -1
  156. package/cjs/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
  157. package/cjs/input-nested-select/input-nested-select.js.map +1 -1
  158. package/cjs/input-range-select/input-range-select.js.map +1 -1
  159. package/cjs/input-range-slider/input-range-slider.js.map +1 -1
  160. package/cjs/input-select/input-select.js.map +1 -1
  161. package/cjs/input-slider/input-slider.js.map +1 -1
  162. package/cjs/input-textarea/textarea.js.map +1 -1
  163. package/cjs/input-textarea/textarea.styles.js +1 -1
  164. package/cjs/input-textarea/textarea.styles.js.map +1 -1
  165. package/cjs/input-textarea/{textarea.styles_22z4n3.css → textarea.styles_q77m5x.css} +1 -1
  166. package/cjs/language-switcher/language-switcher.js.map +1 -1
  167. package/cjs/layout/index.js +1 -1
  168. package/cjs/layout/index.js.map +1 -1
  169. package/cjs/link-list/components/common.js.map +1 -1
  170. package/cjs/link-list/components/link-list-eager.js.map +1 -1
  171. package/cjs/link-list/components/link-list-lazy.js.map +1 -1
  172. package/cjs/link-list/link-list.js.map +1 -1
  173. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  174. package/cjs/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  175. package/cjs/markup/markup.js.map +1 -1
  176. package/cjs/masked-input/masked-input.js.map +1 -1
  177. package/cjs/masthead/masthead.js.map +1 -1
  178. package/cjs/menu/menu.js +1 -1
  179. package/cjs/menu/menu.js.map +1 -1
  180. package/cjs/modal/index.js.map +1 -1
  181. package/cjs/modal/modal-box.js +1 -1
  182. package/cjs/modal/modal-box.js.map +1 -1
  183. package/cjs/modal-v2/index.js +1 -1
  184. package/cjs/modal-v2/index.js.map +1 -1
  185. package/cjs/modal-v2/modal-v2.js +1 -1
  186. package/cjs/modal-v2/modal-v2.js.map +1 -1
  187. package/cjs/modal-v2/slots/card.js +1 -1
  188. package/cjs/modal-v2/slots/card.js.map +1 -1
  189. package/cjs/navbar/navbar.js.map +1 -1
  190. package/cjs/notification-banner/notification-banner-hoc.js.map +1 -1
  191. package/cjs/notification-banner/notification-banner.js.map +1 -1
  192. package/cjs/otp-input/otp-input.js +1 -1
  193. package/cjs/otp-input/otp-input.js.map +1 -1
  194. package/cjs/otp-verification/contact-input-section.js +1 -1
  195. package/cjs/otp-verification/contact-input-section.js.map +1 -1
  196. package/cjs/otp-verification/otp-verification.js.map +1 -1
  197. package/cjs/otp-verification/verification-section.js +1 -1
  198. package/cjs/otp-verification/verification-section.js.map +1 -1
  199. package/cjs/overlay/overlay.js.map +1 -1
  200. package/cjs/pagination/pagination.js.map +1 -1
  201. package/cjs/phone-number-input/phone-number-input.js.map +1 -1
  202. package/cjs/pill/pill.js.map +1 -1
  203. package/cjs/popover/popover-inline/popover-inline.js.map +1 -1
  204. package/cjs/popover/popover-trigger.js.map +1 -1
  205. package/cjs/popover/popover.js +1 -1
  206. package/cjs/popover/popover.js.map +1 -1
  207. package/cjs/predictive-text-input/predictive-text-input.js +1 -1
  208. package/cjs/predictive-text-input/predictive-text-input.js.map +1 -1
  209. package/cjs/progress-indicator/progress-indicator.js.map +1 -1
  210. package/cjs/radio-button/radio-button.js.map +1 -1
  211. package/cjs/schedule/schedule.js.map +1 -1
  212. package/cjs/schedule/shared/with-optional-popover.js +1 -1
  213. package/cjs/schedule/shared/with-optional-popover.js.map +1 -1
  214. package/cjs/select-histogram/select-histogram.js.map +1 -1
  215. package/cjs/shared/dropdown-list/dropdown-list.js +1 -1
  216. package/cjs/shared/dropdown-list/dropdown-list.js.map +1 -1
  217. package/cjs/shared/dropdown-wrapper/element-with-dropdown.js +1 -1
  218. package/cjs/shared/dropdown-wrapper/element-with-dropdown.js.map +1 -1
  219. package/cjs/sidenav/sidenav.js.map +1 -1
  220. package/cjs/singpass-button/singpass-button.js.map +1 -1
  221. package/cjs/smart-app-banner/smart-app-banner.js.map +1 -1
  222. package/cjs/tab/tab.js.map +1 -1
  223. package/cjs/table/table.js.map +1 -1
  224. package/cjs/table/table.styles.js +1 -1
  225. package/cjs/table/table.styles.js.map +1 -1
  226. package/cjs/table/{table.styles_1af5ipv.css → table.styles_1vjx31g.css} +1 -1
  227. package/cjs/tag/tag.js.map +1 -1
  228. package/cjs/text-list/index.js.map +1 -1
  229. package/cjs/theme/theme-provider/breakpoint.js +1 -1
  230. package/cjs/theme/theme-provider/breakpoint.js.map +1 -1
  231. package/cjs/theme/theme-provider/hooks.js.map +1 -1
  232. package/cjs/theme/theme-provider/index.js.map +1 -1
  233. package/cjs/theme/tokens/border.js.map +1 -1
  234. package/cjs/theme/tokens/breakpoint.js.map +1 -1
  235. package/cjs/theme/tokens/colour.js.map +1 -1
  236. package/cjs/theme/tokens/component.js.map +1 -1
  237. package/cjs/theme/tokens/font.js.map +1 -1
  238. package/cjs/theme/tokens/media-query.js.map +1 -1
  239. package/cjs/theme/tokens/motion.js.map +1 -1
  240. package/cjs/theme/tokens/radius.js.map +1 -1
  241. package/cjs/theme/tokens/shadow.js.map +1 -1
  242. package/cjs/theme/tokens/spacing.js.map +1 -1
  243. package/cjs/theme/types.js.map +1 -1
  244. package/cjs/theme/utils/css-variable.js.map +1 -1
  245. package/cjs/theme/utils/font.js.map +1 -1
  246. package/cjs/theme/utils/use-apply-styles.js +1 -1
  247. package/cjs/theme/utils/use-apply-styles.js.map +1 -1
  248. package/cjs/theme/utils/use-design-token-override.js.map +1 -1
  249. package/cjs/theme/utils/use-design-token.js.map +1 -1
  250. package/cjs/theme/utils/use-media-query.js.map +1 -1
  251. package/cjs/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  252. package/cjs/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  253. package/cjs/time-range-picker/common.styles.js +1 -1
  254. package/cjs/time-range-picker/common.styles.js.map +1 -1
  255. package/cjs/time-range-picker/{common.styles_1qwp4xa.css → common.styles_cnkkax.css} +2 -1
  256. package/cjs/time-range-picker/dial-picker/dial-picker.js +1 -1
  257. package/cjs/time-range-picker/dial-picker/dial-picker.js.map +1 -1
  258. package/cjs/time-range-picker/time-range-picker.js.map +1 -1
  259. package/cjs/time-slot-bar/time-slot-bar.js.map +1 -1
  260. package/cjs/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
  261. package/cjs/time-slot-week-view/time-slot-week-view.js.map +1 -1
  262. package/cjs/timeline/timeline.js.map +1 -1
  263. package/cjs/timepicker/timepicker.js +1 -1
  264. package/cjs/timepicker/timepicker.js.map +1 -1
  265. package/cjs/timepicker/timepicker.styles.js +1 -1
  266. package/cjs/timepicker/timepicker.styles.js.map +1 -1
  267. package/cjs/timepicker/timepicker.styles_lyizvq.css +2 -0
  268. package/cjs/timetable/timetable-row/with-optional-popover.js +1 -1
  269. package/cjs/timetable/timetable-row/with-optional-popover.js.map +1 -1
  270. package/cjs/timetable/timetable.js +1 -1
  271. package/cjs/timetable/timetable.js.map +1 -1
  272. package/cjs/toast/toast.js.map +1 -1
  273. package/cjs/toggle/toggle.js.map +1 -1
  274. package/cjs/typography/index.js.map +1 -1
  275. package/cjs/uneditable-section/index.js.map +1 -1
  276. package/cjs/uneditable-section/section-item.js +1 -1
  277. package/cjs/uneditable-section/section-item.js.map +1 -1
  278. package/cjs/unit-number/unit-number-input.js.map +1 -1
  279. package/cjs/util/merge-refs.js.map +1 -1
  280. package/cjs/util/use-throttle.js +2 -0
  281. package/cjs/util/use-throttle.js.map +1 -0
  282. package/countdown-timer/countdown-timer.js.map +1 -1
  283. package/countdown-timer/types.d.ts +6 -6
  284. package/dashed-border/dashed-border.js.map +1 -1
  285. package/data-table/data-table.js +1 -1
  286. package/data-table/data-table.js.map +1 -1
  287. package/data-table/data-table.styles.d.ts +2 -1
  288. package/data-table/data-table.styles.js +1 -1
  289. package/data-table/data-table.styles.js.map +1 -1
  290. package/data-table/data-table.styles_rxganh.css +27 -0
  291. package/date-input/date-input.js.map +1 -1
  292. package/date-input/types.d.ts +1 -1
  293. package/date-navigator/date-navigator.js.map +1 -1
  294. package/date-navigator/types.d.ts +1 -1
  295. package/date-range-input/date-range-input.js.map +1 -1
  296. package/date-range-input/types.d.ts +2 -2
  297. package/divider/divider.js.map +1 -1
  298. package/divider/types.d.ts +1 -1
  299. package/docs/component-catalog.json +644 -0
  300. package/drawer/drawer.js.map +1 -1
  301. package/drawer/types.d.ts +1 -1
  302. package/e-signature/e-signature.js.map +1 -1
  303. package/e-signature/types.d.ts +1 -1
  304. package/error-display/error-display.js.map +1 -1
  305. package/external/dompurify/dist/purify.es.js +2 -2
  306. package/external/dompurify/dist/purify.es.js.map +1 -1
  307. package/external/lodash/_setCacheHas.js.map +1 -1
  308. package/external/lodash/lodash.js +1 -1
  309. package/external/lodash/lodash.js.map +1 -1
  310. package/feedback-rating/feedback-rating.js.map +1 -1
  311. package/file-download/file-download.js.map +1 -1
  312. package/file-download/types.d.ts +6 -1
  313. package/file-upload/file-item-edit.d.ts +1 -1
  314. package/file-upload/file-item-edit.js.map +1 -1
  315. package/file-upload/file-list/file-list.d.ts +1 -1
  316. package/file-upload/file-list/file-list.js.map +1 -1
  317. package/file-upload/file-list-item/file-list-item.d.ts +1 -1
  318. package/file-upload/file-list-item/file-list-item.js.map +1 -1
  319. package/file-upload/file-list-item/file-list-item.styles.js +1 -1
  320. package/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  321. package/file-upload/file-list-item/{file-list-item.styles_o8000f.css → file-list-item.styles_kgtfke.css} +1 -1
  322. package/file-upload/file-upload.js.map +1 -1
  323. package/file-upload/types.d.ts +6 -3
  324. package/filter/addons/filter-item-checkbox-helpers.d.ts +2 -2
  325. package/filter/addons/filter-item-checkbox-helpers.js.map +1 -1
  326. package/filter/addons/filter-item-checkbox.d.ts +1 -1
  327. package/filter/addons/filter-item-checkbox.js.map +1 -1
  328. package/filter/addons/internal-types.d.ts +12 -0
  329. package/filter/addons/types.d.ts +60 -9
  330. package/filter/filter-item.js +1 -1
  331. package/filter/filter-item.js.map +1 -1
  332. package/filter/filter.d.ts +1 -1
  333. package/filter/filter.js.map +1 -1
  334. package/filter/index.d.ts +1 -0
  335. package/filter/types.d.ts +36 -72
  336. package/footer/footer.js.map +1 -1
  337. package/form/form-custom-field/form-custom-field.js +2 -0
  338. package/form/form-custom-field/form-custom-field.js.map +1 -0
  339. package/form/form-custom-field/index.d.ts +2 -0
  340. package/form/form-custom-field/types.d.ts +7 -0
  341. package/form/form-date-input/form-date-input.js +2 -0
  342. package/form/form-date-input/form-date-input.js.map +1 -0
  343. package/form/form-date-input/index.d.ts +2 -0
  344. package/form/form-date-input/types.d.ts +8 -0
  345. package/form/form-date-range-input/form-date-range-input.js +2 -0
  346. package/form/form-date-range-input/form-date-range-input.js.map +1 -0
  347. package/form/form-date-range-input/index.d.ts +2 -0
  348. package/form/form-date-range-input/types.d.ts +8 -0
  349. package/form/form-e-signature/form-e-signature.js +2 -0
  350. package/form/form-e-signature/form-e-signature.js.map +1 -0
  351. package/form/form-e-signature/index.d.ts +2 -0
  352. package/form/form-e-signature/types.d.ts +8 -0
  353. package/form/form-histogram-slider/form-histogram-slider.js +2 -0
  354. package/form/form-histogram-slider/form-histogram-slider.js.map +1 -0
  355. package/form/form-histogram-slider/index.d.ts +2 -0
  356. package/form/form-histogram-slider/types.d.ts +8 -0
  357. package/form/form-input/form-input.js +2 -0
  358. package/form/form-input/form-input.js.map +1 -0
  359. package/form/form-input/index.d.ts +2 -0
  360. package/form/form-input/types.d.ts +8 -0
  361. package/form/form-input-group/form-input-group.js +2 -0
  362. package/form/form-input-group/form-input-group.js.map +1 -0
  363. package/form/form-input-group/index.d.ts +2 -0
  364. package/form/form-input-group/types.d.ts +10 -0
  365. package/form/form-label/form-label-addon.js +2 -0
  366. package/form/form-label/form-label-addon.js.map +1 -0
  367. package/form/form-label/form-label-addon.styles.js +2 -0
  368. package/form/form-label/form-label-addon.styles.js.map +1 -0
  369. package/form/form-label/form-label-addon.styles_aztasj.css +1 -0
  370. package/form/form-label/form-label.js +2 -0
  371. package/form/form-label/form-label.js.map +1 -0
  372. package/form/form-label/form-label.styles.js +2 -0
  373. package/form/form-label/form-label.styles.js.map +1 -0
  374. package/form/form-label/form-label.styles_180zf7j.css +6 -0
  375. package/form/form-label/index.d.ts +2 -0
  376. package/form/form-label/types.d.ts +39 -0
  377. package/form/form-masked-input/form-masked-input.js +2 -0
  378. package/form/form-masked-input/form-masked-input.js.map +1 -0
  379. package/form/form-masked-input/index.d.ts +2 -0
  380. package/form/form-masked-input/types.d.ts +8 -0
  381. package/form/form-multi-select/form-multi-select.js +2 -0
  382. package/form/form-multi-select/form-multi-select.js.map +1 -0
  383. package/form/form-multi-select/index.d.ts +2 -0
  384. package/form/form-multi-select/types.d.ts +10 -0
  385. package/form/form-nested-multi-select/form-nested-multi-select.js +2 -0
  386. package/form/form-nested-multi-select/form-nested-multi-select.js.map +1 -0
  387. package/form/form-nested-multi-select/index.d.ts +2 -0
  388. package/form/form-nested-multi-select/types.d.ts +11 -0
  389. package/form/form-nested-select/form-nested-select.js +2 -0
  390. package/form/form-nested-select/form-nested-select.js.map +1 -0
  391. package/form/form-nested-select/index.d.ts +2 -0
  392. package/form/form-nested-select/types.d.ts +11 -0
  393. package/form/{form-otp-verification.d.ts → form-otp-verification/form-otp-verification.d.ts} +1 -1
  394. package/form/form-otp-verification/form-otp-verification.js +2 -0
  395. package/form/form-otp-verification/form-otp-verification.js.map +1 -0
  396. package/form/form-otp-verification/index.d.ts +2 -0
  397. package/form/form-otp-verification/types.d.ts +1 -0
  398. package/form/form-phone-number-input/form-phone-number-input.js +2 -0
  399. package/form/form-phone-number-input/form-phone-number-input.js.map +1 -0
  400. package/form/form-phone-number-input/index.d.ts +2 -0
  401. package/form/form-phone-number-input/types.d.ts +8 -0
  402. package/form/form-predictive-text-input/form-predictive-text-input.js +2 -0
  403. package/form/form-predictive-text-input/form-predictive-text-input.js.map +1 -0
  404. package/form/form-predictive-text-input/index.d.ts +2 -0
  405. package/form/form-predictive-text-input/types.d.ts +10 -0
  406. package/form/form-range-select/form-range-select.js +2 -0
  407. package/form/form-range-select/form-range-select.js.map +1 -0
  408. package/form/form-range-select/index.d.ts +2 -0
  409. package/form/form-range-select/types.d.ts +10 -0
  410. package/form/form-range-slider/form-range-slider.js +2 -0
  411. package/form/form-range-slider/form-range-slider.js.map +1 -0
  412. package/form/form-range-slider/index.d.ts +2 -0
  413. package/form/form-range-slider/types.d.ts +8 -0
  414. package/form/form-select/form-select.js +2 -0
  415. package/form/form-select/form-select.js.map +1 -0
  416. package/form/form-select/index.d.ts +2 -0
  417. package/form/form-select/types.d.ts +10 -0
  418. package/form/form-select-histogram/form-select-histogram.js +2 -0
  419. package/form/form-select-histogram/form-select-histogram.js.map +1 -0
  420. package/form/form-select-histogram/index.d.ts +2 -0
  421. package/form/form-select-histogram/types.d.ts +8 -0
  422. package/form/form-slider/form-slider.js +2 -0
  423. package/form/form-slider/form-slider.js.map +1 -0
  424. package/form/form-slider/index.d.ts +2 -0
  425. package/form/form-slider/types.d.ts +8 -0
  426. package/form/form-textarea/form-textarea.js +2 -0
  427. package/form/form-textarea/form-textarea.js.map +1 -0
  428. package/form/form-textarea/form-textarea.styles.js +2 -0
  429. package/form/form-textarea/form-textarea.styles.js.map +1 -0
  430. package/form/form-textarea/form-textarea.styles_1kneyif.css +3 -0
  431. package/form/form-textarea/index.d.ts +2 -0
  432. package/form/form-textarea/types.d.ts +8 -0
  433. package/form/form-time-range-picker/form-time-range-picker.js +2 -0
  434. package/form/form-time-range-picker/form-time-range-picker.js.map +1 -0
  435. package/form/form-time-range-picker/index.d.ts +2 -0
  436. package/form/form-time-range-picker/types.d.ts +8 -0
  437. package/form/form-timepicker/form-timepicker.js +2 -0
  438. package/form/form-timepicker/form-timepicker.js.map +1 -0
  439. package/form/form-timepicker/index.d.ts +2 -0
  440. package/form/form-timepicker/types.d.ts +8 -0
  441. package/form/form-unit-number-input/form-unit-number-input.js +2 -0
  442. package/form/form-unit-number-input/form-unit-number-input.js.map +1 -0
  443. package/form/form-unit-number-input/index.d.ts +2 -0
  444. package/form/form-unit-number-input/types.d.ts +8 -0
  445. package/form/form-wrapper.js +1 -1
  446. package/form/form-wrapper.js.map +1 -1
  447. package/form/index.d.ts +104 -24
  448. package/form/index.js +1 -1
  449. package/form/index.js.map +1 -1
  450. package/form/types.d.ts +27 -85
  451. package/fullscreen-image-carousel/fullscreen-image-carousel.d.ts +7 -0
  452. package/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
  453. package/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  454. package/fullscreen-image-carousel/types.d.ts +91 -3
  455. package/histogram-slider/histogram-slider.d.ts +6 -0
  456. package/histogram-slider/histogram-slider.js.map +1 -1
  457. package/histogram-slider/types.d.ts +63 -3
  458. package/image-button/image-button.d.ts +6 -0
  459. package/image-button/image-button.js.map +1 -1
  460. package/image-button/types.d.ts +11 -1
  461. package/index.js +1 -1
  462. package/input/input.d.ts +6 -0
  463. package/input/input.js.map +1 -1
  464. package/input/types.d.ts +38 -2
  465. package/input-group/input-group.d.ts +7 -0
  466. package/input-group/input-group.js.map +1 -1
  467. package/input-group/types.d.ts +84 -8
  468. package/input-multi-select/input-multi-select.d.ts +6 -0
  469. package/input-multi-select/input-multi-select.js.map +1 -1
  470. package/input-multi-select/types.d.ts +46 -5
  471. package/input-nested-multi-select/input-nested-multi-select.d.ts +8 -0
  472. package/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
  473. package/input-nested-multi-select/types.d.ts +35 -5
  474. package/input-nested-select/input-nested-select.d.ts +9 -2
  475. package/input-nested-select/input-nested-select.js.map +1 -1
  476. package/input-nested-select/types.d.ts +77 -8
  477. package/input-range-select/input-range-select.d.ts +6 -0
  478. package/input-range-select/input-range-select.js.map +1 -1
  479. package/input-range-select/types.d.ts +68 -1
  480. package/input-range-slider/input-range-slider.d.ts +7 -0
  481. package/input-range-slider/input-range-slider.js.map +1 -1
  482. package/input-range-slider/types.d.ts +91 -6
  483. package/input-select/input-select.d.ts +5 -0
  484. package/input-select/input-select.js.map +1 -1
  485. package/input-select/types.d.ts +70 -14
  486. package/input-slider/input-slider.d.ts +6 -0
  487. package/input-slider/input-slider.js.map +1 -1
  488. package/input-slider/types.d.ts +21 -2
  489. package/input-textarea/textarea.d.ts +3 -0
  490. package/input-textarea/textarea.js.map +1 -1
  491. package/input-textarea/textarea.styles.js +1 -1
  492. package/input-textarea/textarea.styles.js.map +1 -1
  493. package/input-textarea/{textarea.styles_22z4n3.css → textarea.styles_q77m5x.css} +1 -1
  494. package/input-textarea/types.d.ts +24 -1
  495. package/language-switcher/language-switcher.d.ts +6 -0
  496. package/language-switcher/language-switcher.js.map +1 -1
  497. package/language-switcher/types.d.ts +23 -0
  498. package/layout/index.d.ts +16 -2
  499. package/layout/index.js +1 -1
  500. package/layout/index.js.map +1 -1
  501. package/layout/types.d.ts +61 -3
  502. package/link-list/components/common.d.ts +1 -1
  503. package/link-list/components/common.js.map +1 -1
  504. package/link-list/components/link-list-eager.d.ts +2 -2
  505. package/link-list/components/link-list-eager.js.map +1 -1
  506. package/link-list/components/link-list-lazy.d.ts +2 -2
  507. package/link-list/components/link-list-lazy.js.map +1 -1
  508. package/link-list/link-list.d.ts +6 -0
  509. package/link-list/link-list.js.map +1 -1
  510. package/link-list/types.d.ts +92 -3
  511. package/local-nav/local-nav-dropdown/local-nav-dropdown.d.ts +11 -0
  512. package/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  513. package/local-nav/local-nav-menu/local-nav-menu.d.ts +6 -0
  514. package/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  515. package/local-nav/types.d.ts +51 -0
  516. package/markup/markup.d.ts +6 -0
  517. package/markup/markup.js.map +1 -1
  518. package/markup/types.d.ts +6 -2
  519. package/masked-input/masked-input.d.ts +6 -0
  520. package/masked-input/masked-input.js.map +1 -1
  521. package/masked-input/types.d.ts +83 -8
  522. package/masthead/masthead.d.ts +6 -0
  523. package/masthead/masthead.js.map +1 -1
  524. package/masthead/types.d.ts +9 -0
  525. package/menu/menu.d.ts +27 -4
  526. package/menu/menu.js +1 -1
  527. package/menu/menu.js.map +1 -1
  528. package/menu/types.d.ts +49 -1
  529. package/modal/index.d.ts +13 -0
  530. package/modal/index.js.map +1 -1
  531. package/modal/modal-box.js +1 -1
  532. package/modal/modal-box.js.map +1 -1
  533. package/modal/types.d.ts +56 -7
  534. package/modal-v2/index.d.ts +1 -15
  535. package/modal-v2/index.js +1 -1
  536. package/modal-v2/index.js.map +1 -1
  537. package/modal-v2/modal-v2.d.ts +32 -1
  538. package/modal-v2/modal-v2.js +1 -1
  539. package/modal-v2/modal-v2.js.map +1 -1
  540. package/modal-v2/slots/card.js +1 -1
  541. package/modal-v2/slots/card.js.map +1 -1
  542. package/modal-v2/types.d.ts +92 -8
  543. package/navbar/navbar.d.ts +7 -0
  544. package/navbar/navbar.js.map +1 -1
  545. package/navbar/types.d.ts +201 -13
  546. package/notification-banner/notification-banner-hoc.d.ts +6 -0
  547. package/notification-banner/notification-banner-hoc.js.map +1 -1
  548. package/notification-banner/notification-banner.d.ts +7 -0
  549. package/notification-banner/notification-banner.js.map +1 -1
  550. package/notification-banner/types.d.ts +57 -2
  551. package/otp-input/otp-input.d.ts +7 -0
  552. package/otp-input/otp-input.js +1 -1
  553. package/otp-input/otp-input.js.map +1 -1
  554. package/otp-input/types.d.ts +63 -15
  555. package/otp-verification/contact-input-section.js +1 -1
  556. package/otp-verification/contact-input-section.js.map +1 -1
  557. package/otp-verification/internal-types.d.ts +22 -5
  558. package/otp-verification/otp-verification.d.ts +6 -0
  559. package/otp-verification/otp-verification.js.map +1 -1
  560. package/otp-verification/types.d.ts +125 -6
  561. package/otp-verification/verification-section.js +1 -1
  562. package/otp-verification/verification-section.js.map +1 -1
  563. package/overlay/overlay.d.ts +7 -0
  564. package/overlay/overlay.js.map +1 -1
  565. package/overlay/types.d.ts +57 -2
  566. package/package.json +1 -1
  567. package/pagination/pagination.d.ts +5 -0
  568. package/pagination/pagination.js.map +1 -1
  569. package/pagination/types.d.ts +48 -0
  570. package/phone-number-input/phone-number-input.d.ts +7 -0
  571. package/phone-number-input/phone-number-input.js.map +1 -1
  572. package/phone-number-input/types.d.ts +78 -13
  573. package/pill/pill.d.ts +6 -0
  574. package/pill/pill.js.map +1 -1
  575. package/pill/types.d.ts +19 -0
  576. package/popover/popover-inline/index.d.ts +1 -0
  577. package/popover/popover-inline/popover-inline.d.ts +6 -1
  578. package/popover/popover-inline/popover-inline.js.map +1 -1
  579. package/popover/popover-inline/types.d.ts +36 -0
  580. package/popover/popover-trigger.d.ts +6 -0
  581. package/popover/popover-trigger.js.map +1 -1
  582. package/popover/popover.d.ts +6 -0
  583. package/popover/popover.js +1 -1
  584. package/popover/popover.js.map +1 -1
  585. package/popover/types.d.ts +125 -11
  586. package/predictive-text-input/predictive-text-input.d.ts +6 -0
  587. package/predictive-text-input/predictive-text-input.js +1 -1
  588. package/predictive-text-input/predictive-text-input.js.map +1 -1
  589. package/predictive-text-input/types.d.ts +65 -11
  590. package/progress-indicator/progress-indicator.d.ts +7 -0
  591. package/progress-indicator/progress-indicator.js.map +1 -1
  592. package/progress-indicator/types.d.ts +18 -0
  593. package/radio-button/radio-button.d.ts +5 -0
  594. package/radio-button/radio-button.js.map +1 -1
  595. package/radio-button/types.d.ts +14 -0
  596. package/schedule/internal-types.d.ts +18 -0
  597. package/schedule/schedule-day-view/types.d.ts +2 -1
  598. package/schedule/schedule-week-view/types.d.ts +2 -1
  599. package/schedule/schedule.d.ts +3 -0
  600. package/schedule/schedule.js.map +1 -1
  601. package/schedule/shared/with-optional-popover.js +1 -1
  602. package/schedule/shared/with-optional-popover.js.map +1 -1
  603. package/schedule/types.d.ts +129 -10
  604. package/select-histogram/select-histogram.d.ts +5 -0
  605. package/select-histogram/select-histogram.js.map +1 -1
  606. package/select-histogram/types.d.ts +57 -4
  607. package/shared/dropdown-list/dropdown-list.js +1 -1
  608. package/shared/dropdown-list/dropdown-list.js.map +1 -1
  609. package/shared/dropdown-list/types.d.ts +52 -19
  610. package/shared/dropdown-wrapper/element-with-dropdown.d.ts +5 -4
  611. package/shared/dropdown-wrapper/element-with-dropdown.js +1 -1
  612. package/shared/dropdown-wrapper/element-with-dropdown.js.map +1 -1
  613. package/shared/dropdown-wrapper/types.d.ts +6 -0
  614. package/sidenav/sidenav.d.ts +10 -0
  615. package/sidenav/sidenav.js.map +1 -1
  616. package/sidenav/types.d.ts +71 -21
  617. package/singpass-button/singpass-button.d.ts +6 -0
  618. package/singpass-button/singpass-button.js.map +1 -1
  619. package/singpass-button/types.d.ts +29 -2
  620. package/smart-app-banner/smart-app-banner.d.ts +5 -0
  621. package/smart-app-banner/smart-app-banner.js.map +1 -1
  622. package/smart-app-banner/types.d.ts +56 -0
  623. package/tab/tab.d.ts +7 -0
  624. package/tab/tab.js.map +1 -1
  625. package/tab/types.d.ts +55 -6
  626. package/table/table.d.ts +30 -8
  627. package/table/table.js.map +1 -1
  628. package/table/table.styles.js +1 -1
  629. package/table/table.styles.js.map +1 -1
  630. package/table/{table.styles_1af5ipv.css → table.styles_1vjx31g.css} +1 -1
  631. package/table/types.d.ts +35 -0
  632. package/tag/tag.d.ts +5 -0
  633. package/tag/tag.js.map +1 -1
  634. package/tag/types.d.ts +24 -0
  635. package/text-list/index.d.ts +17 -0
  636. package/text-list/index.js.map +1 -1
  637. package/text-list/types.d.ts +33 -4
  638. package/theme/theme-provider/breakpoint.d.ts +0 -1
  639. package/theme/theme-provider/breakpoint.js +1 -1
  640. package/theme/theme-provider/breakpoint.js.map +1 -1
  641. package/theme/theme-provider/hooks.d.ts +16 -0
  642. package/theme/theme-provider/hooks.js.map +1 -1
  643. package/theme/theme-provider/index.d.ts +7 -0
  644. package/theme/theme-provider/index.js.map +1 -1
  645. package/theme/theme-provider/types.d.ts +14 -0
  646. package/theme/tokens/border.d.ts +9 -0
  647. package/theme/tokens/border.js.map +1 -1
  648. package/theme/tokens/breakpoint.d.ts +3 -0
  649. package/theme/tokens/breakpoint.js.map +1 -1
  650. package/theme/tokens/colour.d.ts +9 -0
  651. package/theme/tokens/colour.js.map +1 -1
  652. package/theme/tokens/component.d.ts +3 -0
  653. package/theme/tokens/component.js.map +1 -1
  654. package/theme/tokens/font.d.ts +6 -0
  655. package/theme/tokens/font.js.map +1 -1
  656. package/theme/tokens/media-query.d.ts +3 -0
  657. package/theme/tokens/media-query.js.map +1 -1
  658. package/theme/tokens/motion.d.ts +3 -0
  659. package/theme/tokens/motion.js.map +1 -1
  660. package/theme/tokens/radius.d.ts +3 -0
  661. package/theme/tokens/radius.js.map +1 -1
  662. package/theme/tokens/shadow.d.ts +3 -0
  663. package/theme/tokens/shadow.js.map +1 -1
  664. package/theme/tokens/spacing.d.ts +3 -0
  665. package/theme/tokens/spacing.js.map +1 -1
  666. package/theme/types.d.ts +23 -3
  667. package/theme/types.js.map +1 -1
  668. package/theme/utils/css-variable.d.ts +10 -2
  669. package/theme/utils/css-variable.js.map +1 -1
  670. package/theme/utils/font.d.ts +2 -1
  671. package/theme/utils/font.js.map +1 -1
  672. package/theme/utils/use-apply-styles.d.ts +8 -2
  673. package/theme/utils/use-apply-styles.js +1 -1
  674. package/theme/utils/use-apply-styles.js.map +1 -1
  675. package/theme/utils/use-design-token-override.d.ts +9 -1
  676. package/theme/utils/use-design-token-override.js.map +1 -1
  677. package/theme/utils/use-design-token.d.ts +9 -0
  678. package/theme/utils/use-design-token.js.map +1 -1
  679. package/theme/utils/use-media-query.d.ts +41 -3
  680. package/theme/utils/use-media-query.js.map +1 -1
  681. package/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  682. package/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  683. package/time-range-picker/common.styles.d.ts +1 -0
  684. package/time-range-picker/common.styles.js +1 -1
  685. package/time-range-picker/common.styles.js.map +1 -1
  686. package/time-range-picker/{common.styles_1qwp4xa.css → common.styles_cnkkax.css} +2 -1
  687. package/time-range-picker/dial-picker/dial-picker.js +1 -1
  688. package/time-range-picker/dial-picker/dial-picker.js.map +1 -1
  689. package/time-range-picker/time-range-picker.d.ts +5 -0
  690. package/time-range-picker/time-range-picker.js.map +1 -1
  691. package/time-range-picker/types.d.ts +85 -25
  692. package/time-slot-bar/internal-types.d.ts +1 -0
  693. package/time-slot-bar/time-slot-bar.d.ts +7 -0
  694. package/time-slot-bar/time-slot-bar.js.map +1 -1
  695. package/time-slot-bar/types.d.ts +116 -20
  696. package/time-slot-bar-week/time-slot-bar-week.d.ts +8 -0
  697. package/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
  698. package/time-slot-bar-week/types.d.ts +80 -13
  699. package/time-slot-week-view/time-slot-week-view.d.ts +7 -0
  700. package/time-slot-week-view/time-slot-week-view.js.map +1 -1
  701. package/time-slot-week-view/types.d.ts +55 -10
  702. package/timeline/timeline.d.ts +6 -0
  703. package/timeline/timeline.js.map +1 -1
  704. package/timeline/types.d.ts +58 -4
  705. package/timepicker/timepicker.d.ts +5 -0
  706. package/timepicker/timepicker.js +1 -1
  707. package/timepicker/timepicker.js.map +1 -1
  708. package/timepicker/timepicker.styles.d.ts +1 -0
  709. package/timepicker/timepicker.styles.js +1 -1
  710. package/timepicker/timepicker.styles.js.map +1 -1
  711. package/timepicker/timepicker.styles_lyizvq.css +2 -0
  712. package/timepicker/types.d.ts +49 -14
  713. package/timetable/timetable-row/with-optional-popover.js +1 -1
  714. package/timetable/timetable-row/with-optional-popover.js.map +1 -1
  715. package/timetable/timetable.d.ts +6 -0
  716. package/timetable/timetable.js +1 -1
  717. package/timetable/timetable.js.map +1 -1
  718. package/timetable/types.d.ts +175 -50
  719. package/toast/toast.d.ts +6 -0
  720. package/toast/toast.js.map +1 -1
  721. package/toast/types.d.ts +44 -8
  722. package/toggle/toggle.d.ts +6 -0
  723. package/toggle/toggle.js.map +1 -1
  724. package/toggle/types.d.ts +95 -17
  725. package/tools/shared/generated-file-formatter.d.ts +6 -0
  726. package/tools/shared/jsdoc-parser.d.ts +36 -0
  727. package/tools/shared/ts-morph-project-factory.d.ts +9 -0
  728. package/tools/shared/typescript-source-provider.d.ts +9 -0
  729. package/tools/storybook-argtypes/adapters/file-system-adapter.d.ts +69 -0
  730. package/tools/storybook-argtypes/arg-types-generator.d.ts +85 -0
  731. package/tools/storybook-argtypes/config/arg-types-config.d.ts +31 -0
  732. package/tools/storybook-argtypes/index.d.ts +11 -0
  733. package/tools/storybook-argtypes/services/arg-types-row-builder.d.ts +43 -0
  734. package/tools/storybook-argtypes/services/file-path-resolver.d.ts +118 -0
  735. package/tools/storybook-argtypes/services/index.d.ts +6 -0
  736. package/tools/storybook-argtypes/services/jsdoc-metadata-extractor.d.ts +33 -0
  737. package/tools/storybook-argtypes/services/story-registry-generator.d.ts +27 -0
  738. package/tools/storybook-argtypes/services/type-dependency-resolver.d.ts +46 -0
  739. package/tools/storybook-argtypes/services/type-formatting-service.d.ts +27 -0
  740. package/tools/storybook-argtypes/types.d.ts +102 -0
  741. package/typography/index.d.ts +29 -0
  742. package/typography/index.js.map +1 -1
  743. package/typography/types.d.ts +51 -8
  744. package/uneditable-section/index.d.ts +15 -0
  745. package/uneditable-section/index.js.map +1 -1
  746. package/uneditable-section/section-item.js +1 -1
  747. package/uneditable-section/section-item.js.map +1 -1
  748. package/uneditable-section/types.d.ts +66 -23
  749. package/unit-number/types.d.ts +30 -4
  750. package/unit-number/unit-number-input.d.ts +6 -0
  751. package/unit-number/unit-number-input.js.map +1 -1
  752. package/util/index.d.ts +1 -0
  753. package/util/merge-refs.d.ts +1 -1
  754. package/util/merge-refs.js.map +1 -1
  755. package/util/use-throttle.d.ts +1 -0
  756. package/util/use-throttle.js +2 -0
  757. package/util/use-throttle.js.map +1 -0
  758. package/cjs/data-table/data-table.styles_1iqq1g7.css +0 -26
  759. package/cjs/form/form-custom-field.js +0 -2
  760. package/cjs/form/form-custom-field.js.map +0 -1
  761. package/cjs/form/form-date-input.js +0 -2
  762. package/cjs/form/form-date-input.js.map +0 -1
  763. package/cjs/form/form-date-range-input.js +0 -2
  764. package/cjs/form/form-date-range-input.js.map +0 -1
  765. package/cjs/form/form-e-signature.js +0 -2
  766. package/cjs/form/form-e-signature.js.map +0 -1
  767. package/cjs/form/form-histogram.js +0 -2
  768. package/cjs/form/form-histogram.js.map +0 -1
  769. package/cjs/form/form-input-group.js +0 -2
  770. package/cjs/form/form-input-group.js.map +0 -1
  771. package/cjs/form/form-input.js +0 -2
  772. package/cjs/form/form-input.js.map +0 -1
  773. package/cjs/form/form-label-addon.js +0 -2
  774. package/cjs/form/form-label-addon.js.map +0 -1
  775. package/cjs/form/form-label-addon.styles.js +0 -2
  776. package/cjs/form/form-label-addon.styles.js.map +0 -1
  777. package/cjs/form/form-label-addon.styles_b00z8p.css +0 -1
  778. package/cjs/form/form-label.js +0 -2
  779. package/cjs/form/form-label.js.map +0 -1
  780. package/cjs/form/form-label.styles.js +0 -2
  781. package/cjs/form/form-label.styles.js.map +0 -1
  782. package/cjs/form/form-label.styles_1nbe0bm.css +0 -6
  783. package/cjs/form/form-masked-input.js +0 -2
  784. package/cjs/form/form-masked-input.js.map +0 -1
  785. package/cjs/form/form-multi-select.js +0 -2
  786. package/cjs/form/form-multi-select.js.map +0 -1
  787. package/cjs/form/form-nested-multi-select.js +0 -2
  788. package/cjs/form/form-nested-multi-select.js.map +0 -1
  789. package/cjs/form/form-nested-select.js +0 -2
  790. package/cjs/form/form-nested-select.js.map +0 -1
  791. package/cjs/form/form-otp-verification.js +0 -2
  792. package/cjs/form/form-otp-verification.js.map +0 -1
  793. package/cjs/form/form-phone-number-input.js +0 -2
  794. package/cjs/form/form-phone-number-input.js.map +0 -1
  795. package/cjs/form/form-predictive-text-input.js +0 -2
  796. package/cjs/form/form-predictive-text-input.js.map +0 -1
  797. package/cjs/form/form-range-select.js +0 -2
  798. package/cjs/form/form-range-select.js.map +0 -1
  799. package/cjs/form/form-range-slider.js +0 -2
  800. package/cjs/form/form-range-slider.js.map +0 -1
  801. package/cjs/form/form-select-histogram.js +0 -2
  802. package/cjs/form/form-select-histogram.js.map +0 -1
  803. package/cjs/form/form-select.js +0 -2
  804. package/cjs/form/form-select.js.map +0 -1
  805. package/cjs/form/form-slider.js +0 -2
  806. package/cjs/form/form-slider.js.map +0 -1
  807. package/cjs/form/form-textarea.js +0 -2
  808. package/cjs/form/form-textarea.js.map +0 -1
  809. package/cjs/form/form-textarea.styles.js +0 -2
  810. package/cjs/form/form-textarea.styles.js.map +0 -1
  811. package/cjs/form/form-textarea.styles_3p9qoy.css +0 -3
  812. package/cjs/form/form-time-range-picker.js +0 -2
  813. package/cjs/form/form-time-range-picker.js.map +0 -1
  814. package/cjs/form/form-timepicker.js +0 -2
  815. package/cjs/form/form-timepicker.js.map +0 -1
  816. package/cjs/form/form-unit-number-input.js +0 -2
  817. package/cjs/form/form-unit-number-input.js.map +0 -1
  818. package/cjs/timepicker/timepicker.styles_1jm33yw.css +0 -1
  819. package/data-table/data-table.styles_1iqq1g7.css +0 -26
  820. package/form/form-custom-field.js +0 -2
  821. package/form/form-custom-field.js.map +0 -1
  822. package/form/form-date-input.js +0 -2
  823. package/form/form-date-input.js.map +0 -1
  824. package/form/form-date-range-input.js +0 -2
  825. package/form/form-date-range-input.js.map +0 -1
  826. package/form/form-e-signature.js +0 -2
  827. package/form/form-e-signature.js.map +0 -1
  828. package/form/form-histogram.js +0 -2
  829. package/form/form-histogram.js.map +0 -1
  830. package/form/form-input-group.js +0 -2
  831. package/form/form-input-group.js.map +0 -1
  832. package/form/form-input.js +0 -2
  833. package/form/form-input.js.map +0 -1
  834. package/form/form-label-addon.js +0 -2
  835. package/form/form-label-addon.js.map +0 -1
  836. package/form/form-label-addon.styles.js +0 -2
  837. package/form/form-label-addon.styles.js.map +0 -1
  838. package/form/form-label-addon.styles_b00z8p.css +0 -1
  839. package/form/form-label.js +0 -2
  840. package/form/form-label.js.map +0 -1
  841. package/form/form-label.styles.js +0 -2
  842. package/form/form-label.styles.js.map +0 -1
  843. package/form/form-label.styles_1nbe0bm.css +0 -6
  844. package/form/form-masked-input.js +0 -2
  845. package/form/form-masked-input.js.map +0 -1
  846. package/form/form-multi-select.js +0 -2
  847. package/form/form-multi-select.js.map +0 -1
  848. package/form/form-nested-multi-select.js +0 -2
  849. package/form/form-nested-multi-select.js.map +0 -1
  850. package/form/form-nested-select.js +0 -2
  851. package/form/form-nested-select.js.map +0 -1
  852. package/form/form-otp-verification.js +0 -2
  853. package/form/form-otp-verification.js.map +0 -1
  854. package/form/form-phone-number-input.js +0 -2
  855. package/form/form-phone-number-input.js.map +0 -1
  856. package/form/form-predictive-text-input.js +0 -2
  857. package/form/form-predictive-text-input.js.map +0 -1
  858. package/form/form-range-select.js +0 -2
  859. package/form/form-range-select.js.map +0 -1
  860. package/form/form-range-slider.js +0 -2
  861. package/form/form-range-slider.js.map +0 -1
  862. package/form/form-select-histogram.js +0 -2
  863. package/form/form-select-histogram.js.map +0 -1
  864. package/form/form-select.js +0 -2
  865. package/form/form-select.js.map +0 -1
  866. package/form/form-slider.js +0 -2
  867. package/form/form-slider.js.map +0 -1
  868. package/form/form-textarea.js +0 -2
  869. package/form/form-textarea.js.map +0 -1
  870. package/form/form-textarea.styles.js +0 -2
  871. package/form/form-textarea.styles.js.map +0 -1
  872. package/form/form-textarea.styles_3p9qoy.css +0 -3
  873. package/form/form-time-range-picker.js +0 -2
  874. package/form/form-time-range-picker.js.map +0 -1
  875. package/form/form-timepicker.js +0 -2
  876. package/form/form-timepicker.js.map +0 -1
  877. package/form/form-unit-number-input.js +0 -2
  878. package/form/form-unit-number-input.js.map +0 -1
  879. package/link-list/internal-types.d.ts +0 -31
  880. package/timepicker/timepicker.styles_1jm33yw.css +0 -1
  881. /package/{codemod-utils.d.ts → codemods/codemod-utils.d.ts} +0 -0
  882. /package/{migrate-popover → codemods/migrate-popover}/index.d.ts +0 -0
  883. /package/{run-codemod.d.ts → codemods/run-codemod.d.ts} +0 -0
  884. /package/form/{form-custom-field.d.ts → form-custom-field/form-custom-field.d.ts} +0 -0
  885. /package/form/{form-date-input.d.ts → form-date-input/form-date-input.d.ts} +0 -0
  886. /package/form/{form-date-range-input.d.ts → form-date-range-input/form-date-range-input.d.ts} +0 -0
  887. /package/form/{form-e-signature.d.ts → form-e-signature/form-e-signature.d.ts} +0 -0
  888. /package/form/{form-histogram.d.ts → form-histogram-slider/form-histogram-slider.d.ts} +0 -0
  889. /package/form/{form-input.d.ts → form-input/form-input.d.ts} +0 -0
  890. /package/form/{form-input-group.d.ts → form-input-group/form-input-group.d.ts} +0 -0
  891. /package/form/{form-label-addon.d.ts → form-label/form-label-addon.d.ts} +0 -0
  892. /package/form/{form-label-addon.styles.d.ts → form-label/form-label-addon.styles.d.ts} +0 -0
  893. /package/form/{form-label.d.ts → form-label/form-label.d.ts} +0 -0
  894. /package/form/{form-label.styles.d.ts → form-label/form-label.styles.d.ts} +0 -0
  895. /package/form/{form-masked-input.d.ts → form-masked-input/form-masked-input.d.ts} +0 -0
  896. /package/form/{form-multi-select.d.ts → form-multi-select/form-multi-select.d.ts} +0 -0
  897. /package/form/{form-nested-multi-select.d.ts → form-nested-multi-select/form-nested-multi-select.d.ts} +0 -0
  898. /package/form/{form-nested-select.d.ts → form-nested-select/form-nested-select.d.ts} +0 -0
  899. /package/form/{form-phone-number-input.d.ts → form-phone-number-input/form-phone-number-input.d.ts} +0 -0
  900. /package/form/{form-predictive-text-input.d.ts → form-predictive-text-input/form-predictive-text-input.d.ts} +0 -0
  901. /package/form/{form-range-select.d.ts → form-range-select/form-range-select.d.ts} +0 -0
  902. /package/form/{form-range-slider.d.ts → form-range-slider/form-range-slider.d.ts} +0 -0
  903. /package/form/{form-select.d.ts → form-select/form-select.d.ts} +0 -0
  904. /package/form/{form-select-histogram.d.ts → form-select-histogram/form-select-histogram.d.ts} +0 -0
  905. /package/form/{form-slider.d.ts → form-slider/form-slider.d.ts} +0 -0
  906. /package/form/{form-textarea.d.ts → form-textarea/form-textarea.d.ts} +0 -0
  907. /package/form/{form-textarea.styles.d.ts → form-textarea/form-textarea.styles.d.ts} +0 -0
  908. /package/form/{form-time-range-picker.d.ts → form-time-range-picker/form-time-range-picker.d.ts} +0 -0
  909. /package/form/{form-timepicker.d.ts → form-timepicker/form-timepicker.d.ts} +0 -0
  910. /package/form/{form-unit-number-input.d.ts → form-unit-number-input/form-unit-number-input.d.ts} +0 -0
@@ -1,2 +1,8 @@
1
1
  import type { PredictiveTextInputProps } from "./types";
2
+ /**
3
+ * A text input that fetches and displays matching suggestions as the user types.
4
+ *
5
+ * Use `PredictiveTextInput` for search-as-you-type or autocomplete scenarios
6
+ * where options are loaded asynchronously based on the current input.
7
+ */
2
8
  export declare const PredictiveTextInput: <T, V>({ className, "data-testid": testId, selectedOption, minimumCharacters, fetchOptions, placeholder, readOnly, disabled, error, valueExtractor, listExtractor, displayValueExtractor, onSelectOption, alignment, dropdownZIndex, dropdownRootNode, dropdownWidth, "aria-describedby": ariaDescribedBy, ...otherProps }: PredictiveTextInputProps<T, V>) => JSX.Element;
@@ -1,2 +1,2 @@
1
- import{__rest as e,__awaiter as r}from"../_virtual/_tslib.js";import{jsx as t,Fragment as o,jsxs as i}from"react/jsx-runtime";import s from"../external/lodash/debounce.js";import{useState as l,useRef as n,useCallback as a,useEffect as d}from"react";import{Input as p}from"../input/input.js";import{VisuallyHidden as m,concatIds as c}from"../shared/accessibility/index.js";import"clsx";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"../util/calendar-helper.js";import"../external/dayjs/dayjs.min.js";import{useId as u}from"../util/simple-id-generator.js";import"../util/string-helper.js";import"@react-aria/live-announcer";import"../theme/utils/use-media-query.js";import"../shared/dropdown-list/dropdown-label.styles_mloii0.css";import{DropdownList as h}from"../shared/dropdown-list/dropdown-list.js";import{DropdownListState as f}from"../shared/dropdown-list/dropdown-list-state.js";import"../shared/dropdown-list/expandable-element.js";import"@lifesg/react-icons/caret-right";import"@lifesg/react-icons/exclamation-circle-fill";import"@lifesg/react-icons/minus-square-fill";import"@lifesg/react-icons/square";import"@lifesg/react-icons/square-tick-fill";import"@lifesg/react-icons/tick";import"react-virtuoso";import"../markup/markup.js";import"../shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css";import{ElementWithDropdown as g}from"../shared/dropdown-wrapper/element-with-dropdown.js";import{InputWrapper as x}from"../shared/input-wrapper/input-wrapper.js";import"../shared/dropdown-list/dropdown-list.styles_konwm.css";import"../shared/dropdown-list/dropdown-search.js";import"../shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css";import"immer";import"../external/lodash/_getTag.js";import"../external/lodash/isArguments.js";import"../external/lodash/_baseGetTag.js";import"../external/lodash/isBuffer.js";import"../external/lodash/isTypedArray.js";import"../external/lodash/_Stack.js";import"../external/lodash/_SetCache.js";import"../external/lodash/_equalByTag.js";import"../shared/dropdown-list/virtuoso-components.js";const j=j=>{var{className:w,"data-testid":y,selectedOption:v,minimumCharacters:b=3,fetchOptions:_,placeholder:T="Enter here...",readOnly:O=!1,disabled:I=!1,error:k,valueExtractor:A,listExtractor:C,displayValueExtractor:E,onSelectOption:S,alignment:q,dropdownZIndex:N,dropdownRootNode:G,dropdownWidth:H,"aria-describedby":M}=j,P=e(j,["className","data-testid","selectedOption","minimumCharacters","fetchOptions","placeholder","readOnly","disabled","error","valueExtractor","listExtractor","displayValueExtractor","onSelectOption","alignment","dropdownZIndex","dropdownRootNode","dropdownWidth","aria-describedby"]);const B=e=>e?E?E(e):e.toString():"",[D,L]=l((()=>v?B(v):"")),[R,W]=l((()=>v?B(v):"")),[Z,$]=l([]),[F,V]=l(!0),[z,J]=l(!1),[K,Q]=l(!!v),[U,X]=l(v),[Y,ee]=l(!1),[re,te]=l(!1),oe=u(),[ie,se]=l(null),le=`${oe}-instruction`,ne=n(null),ae=n(null),de=n(_),pe=a((e=>r(void 0,void 0,void 0,(function*(){if(de.current){J(!1),V(!0);try{const r=yield de.current(e);W(e),$(null!=r?r:[]),V(!1)}catch(e){J(!0),V(!1)}}}))),[]),me=a(s((e=>{pe(e)}),500),[pe]);d((()=>{de.current=_}),[_]),d((()=>{D&&D.length>=b?K?D!==R&&me(D):(ee(!0),me(D)):me.cancel(),""===D&&U&&(null==S||S(void 0,void 0),we(),X(void 0)),v&&D!==B(v)&&Q(!1)}),[D,v]),d((()=>{L(v?B(v):""),W(v?B(v):""),X(v),$([]),Q(!!v)}),[v]),d((()=>{var e;const r=ye(),t=null!==(e=null==Z?void 0:Z.length)&&void 0!==e?e:0;"loading"===r&&D.length>=b?se("Loading suggested results"):"fail"!==r?!Y||F||z||se(0===t?D?"No results found.":null:`${t} result${t>1?"s":""} found. Press down arrow to scroll through the list.`):se("Suggestions failed to load. Try again.")}),[Z,D,z,F]),d((()=>()=>{me.cancel()}),[me]);const ce=(e,r)=>{var t;null===(t=ae.current)||void 0===t||t.focus(),L(B(e)),W(e?B(e):""),Q(!0),X(e),ee(!1),null==S||S(e,r)},ue=()=>{te(!0)},he=e=>{Y||!ne.current||ne.current.contains(e.relatedTarget)||(te(!1),xe())},fe=()=>{ee(!1),te(!1)},ge=()=>{L(""),$([]),Q(!1),ee(!1),null==S||S(void 0,void 0)},xe=()=>{if(!K)if(U){const e=B(U);L(e),ee(!1)}else ge()},je=e=>{L(e.target.value),Q(!1)},we=e=>{W(""),Q(!1),$([]),V(!0)},ye=()=>z?"fail":F?"loading":"success";return t(f,{children:t(g,{enabled:!O&&!I,isOpen:Y,renderElement:()=>i(x,{className:w,"data-testid":y,ref:ne,tabIndex:-1,onFocus:ue,onBlur:he,focused:re,disabled:I,readOnly:O,error:k,children:[i(m,{id:le,"aria-hidden":!0,children:["Type in ",b," or more characters for suggested results."]}),ie&&t(m,{"aria-live":"polite",children:ie}),t(p,Object.assign({role:"combobox",ref:ae,id:oe,type:"text",value:D,onChange:je,placeholder:T,readOnly:O,disabled:I,allowClear:!0,onClear:ge,"aria-expanded":Y,"aria-controls":oe,"aria-autocomplete":"list","aria-haspopup":"listbox",onBlur:D.length<b?xe:void 0,styleType:"no-border","aria-describedby":c(M,le)},P))]}),renderDropdown:()=>t(o,{children:t(h,{listboxId:oe,listItems:Z,onSelectItem:ce,onDismiss:fe,valueExtractor:A,listExtractor:C,itemsLoadState:ye(),itemTruncationType:"end",itemMaxLines:1,labelDisplayType:"next-line",disableItemFocus:!0,onRetry:()=>pe(D),width:H,matchElementWidth:!0})}),onOpen:()=>{!K&&D.length>=b&&te(!0)},onClose:()=>{ee(!1),te(!1),xe()},onDismiss:()=>{var e;ee(!1),te(!1),xe(),null===(e=ae.current)||void 0===e||e.focus()},clickToToggle:!1,offset:8,alignment:q,fitAvailableHeight:!0,customZIndex:N,rootNode:G})})};export{j as PredictiveTextInput};
1
+ import{__rest as e,__awaiter as r}from"../_virtual/_tslib.js";import{jsx as t,jsxs as o}from"react/jsx-runtime";import i from"../external/lodash/debounce.js";import{useState as s,useRef as l,useCallback as n,useEffect as a}from"react";import{Input as d}from"../input/input.js";import{VisuallyHidden as p,concatIds as m}from"../shared/accessibility/index.js";import"clsx";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"../util/calendar-helper.js";import"../external/dayjs/dayjs.min.js";import{useId as c}from"../util/simple-id-generator.js";import"../util/string-helper.js";import"@react-aria/live-announcer";import"../theme/utils/use-media-query.js";import"../shared/dropdown-list/dropdown-label.styles_mloii0.css";import{DropdownList as u}from"../shared/dropdown-list/dropdown-list.js";import{DropdownListState as h}from"../shared/dropdown-list/dropdown-list-state.js";import"../shared/dropdown-list/expandable-element.js";import"@lifesg/react-icons/caret-right";import"@lifesg/react-icons/exclamation-circle-fill";import"@lifesg/react-icons/minus-square-fill";import"@lifesg/react-icons/square";import"@lifesg/react-icons/square-tick-fill";import"@lifesg/react-icons/tick";import"react-virtuoso";import"../markup/markup.js";import"../shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css";import{ElementWithDropdown as f}from"../shared/dropdown-wrapper/element-with-dropdown.js";import{InputWrapper as g}from"../shared/input-wrapper/input-wrapper.js";import"../shared/dropdown-list/dropdown-list.styles_konwm.css";import"../shared/dropdown-list/dropdown-search.js";import"../shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css";import"immer";import"../external/lodash/_getTag.js";import"../external/lodash/isArguments.js";import"../external/lodash/_baseGetTag.js";import"../external/lodash/isBuffer.js";import"../external/lodash/isTypedArray.js";import"../external/lodash/_Stack.js";import"../external/lodash/_SetCache.js";import"../external/lodash/_equalByTag.js";import"../shared/dropdown-list/virtuoso-components.js";const x=x=>{var{className:j,"data-testid":w,selectedOption:y,minimumCharacters:v=3,fetchOptions:b,placeholder:_="Enter here...",readOnly:T=!1,disabled:O=!1,error:I,valueExtractor:k,listExtractor:A,displayValueExtractor:C,onSelectOption:E,alignment:S,dropdownZIndex:q,dropdownRootNode:N,dropdownWidth:H,"aria-describedby":G}=x,M=e(x,["className","data-testid","selectedOption","minimumCharacters","fetchOptions","placeholder","readOnly","disabled","error","valueExtractor","listExtractor","displayValueExtractor","onSelectOption","alignment","dropdownZIndex","dropdownRootNode","dropdownWidth","aria-describedby"]);const P=e=>e?C?C(e):e.toString():"",[B,D]=s((()=>y?P(y):"")),[L,R]=s((()=>y?P(y):"")),[W,Z]=s([]),[$,F]=s(!0),[V,z]=s(!1),[J,K]=s(!!y),[Q,U]=s(y),[X,Y]=s(!1),[ee,re]=s(!1),te=c(),[oe,ie]=s(null),se=`${te}-instruction`,le=l(null),ne=l(null),ae=l(b),de=n((e=>r(void 0,void 0,void 0,(function*(){if(ae.current){z(!1),F(!0);try{const r=yield ae.current(e);R(e),Z(null!=r?r:[]),F(!1)}catch(e){z(!0),F(!1)}}}))),[]),pe=n(i((e=>{de(e)}),500),[de]);a((()=>{ae.current=b}),[b]),a((()=>{B&&B.length>=v?J?B!==L&&pe(B):(Y(!0),pe(B)):pe.cancel(),""===B&&Q&&(null==E||E(void 0,void 0),je(),U(void 0)),y&&B!==P(y)&&K(!1)}),[B,y]),a((()=>{D(y?P(y):""),R(y?P(y):""),U(y),K(!!y)}),[y]),a((()=>{var e;const r=we(),t=null!==(e=null==W?void 0:W.length)&&void 0!==e?e:0;"loading"===r&&B.length>=v?ie("Loading suggested results"):"fail"!==r?!X||$||V||ie(0===t?B?"No results found.":null:`${t} result${t>1?"s":""} found. Press down arrow to scroll through the list.`):ie("Suggestions failed to load. Try again.")}),[W,B,V,$]),a((()=>()=>{pe.cancel()}),[pe]);const me=(e,r)=>{var t;null===(t=ne.current)||void 0===t||t.focus(),D(P(e)),R(e?P(e):""),K(!0),U(e),Y(!1),null==E||E(e,r)},ce=()=>{re(!0)},ue=e=>{X||!le.current||le.current.contains(e.relatedTarget)||(re(!1),ge())},he=()=>{Y(!1),re(!1)},fe=()=>{D(""),K(!1),Y(!1),null==E||E(void 0,void 0)},ge=()=>{if(!J)if(Q){const e=P(Q);D(e),Y(!1)}else fe()},xe=e=>{D(e.target.value),K(!1)},je=e=>{R(""),K(!1),F(!0)},we=()=>V?"fail":$?"loading":"success";return t(h,{children:t(f,{enabled:!T&&!O,isOpen:X,renderElement:()=>o(g,{className:j,"data-testid":w,ref:le,tabIndex:-1,onFocus:ce,onBlur:ue,focused:ee,disabled:O,readOnly:T,error:I,children:[o(p,{id:se,"aria-hidden":!0,children:["Type in ",v," or more characters for suggested results."]}),oe&&t(p,{"aria-live":"polite",children:oe}),t(d,Object.assign({role:"combobox",ref:ne,id:te,type:"text",value:B,onChange:xe,placeholder:_,readOnly:T,disabled:O,allowClear:!0,onClear:fe,"aria-expanded":X,"aria-controls":te,"aria-autocomplete":"list","aria-haspopup":"listbox",onBlur:B.length<v?ge:void 0,styleType:"no-border","aria-describedby":m(G,se)},M))]}),renderDropdown:()=>t(u,{listboxId:te,listItems:W,onSelectItem:me,onDismiss:he,valueExtractor:k,listExtractor:A,itemsLoadState:we(),itemTruncationType:"end",itemMaxLines:1,labelDisplayType:"next-line",disableItemFocus:!0,onRetry:()=>de(B),width:H,matchElementWidth:!0}),onOpen:()=>{!J&&B.length>=v&&re(!0)},onClose:()=>{Y(!1),re(!1),ge()},onDismiss:()=>{var e;Y(!1),re(!1),ge(),null===(e=ne.current)||void 0===e||e.focus()},onHide:()=>{Z([]),F(!0),z(!1)},clickToToggle:!1,offset:8,alignment:S,fitAvailableHeight:!0,customZIndex:q,rootNode:N})})};export{x as PredictiveTextInput};
2
2
  //# sourceMappingURL=predictive-text-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"predictive-text-input.js","sources":["../../src/predictive-text-input/predictive-text-input.tsx"],"sourcesContent":["import debounce from \"lodash/debounce\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { Input } from \"../input\";\nimport { concatIds, VisuallyHidden } from \"../shared/accessibility\";\nimport { DropdownList, DropdownListState } from \"../shared/dropdown-list\";\nimport type { ItemsLoadStateType } from \"../shared/dropdown-list/types\";\nimport { ElementWithDropdown } from \"../shared/dropdown-wrapper\";\nimport { InputWrapper } from \"../shared/input-wrapper\";\nimport { useId } from \"../util\";\nimport type { PredictiveTextInputProps } from \"./types\";\n\nexport const PredictiveTextInput = <T, V>({\n className,\n \"data-testid\": testId,\n selectedOption,\n minimumCharacters = 3,\n fetchOptions,\n placeholder = \"Enter here...\",\n readOnly = false,\n disabled = false,\n error,\n valueExtractor,\n listExtractor,\n displayValueExtractor,\n onSelectOption,\n alignment,\n dropdownZIndex,\n dropdownRootNode,\n dropdownWidth,\n \"aria-describedby\": ariaDescribedBy,\n ...otherProps\n}: PredictiveTextInputProps<T, V>): JSX.Element => {\n const getDisplayValue = (item: T | undefined): string => {\n if (!item) return \"\";\n return displayValueExtractor\n ? displayValueExtractor(item)\n : item.toString();\n };\n\n // =============================================================================\n // CONST, STATE\n // =============================================================================\n const [input, setInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [searchedInput, setSearchedInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [options, setOptions] = useState<T[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [isError, setIsError] = useState<boolean>(false);\n const [isOptionSelected, setIsOptionSelected] = useState<boolean>(\n !!selectedOption\n );\n const [prevOptionSelected, setPrevOptionSelected] = useState<T | undefined>(\n selectedOption\n );\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const internalId = useId();\n const [resultAnnouncement, setResultAnnouncement] = useState<string | null>(\n null\n );\n const instructionId = `${internalId}-instruction`;\n\n const nodeRef = useRef<HTMLDivElement | null>(null);\n const selectorRef = useRef<HTMLInputElement | null>(null);\n\n const fetchOptionsRef = useRef(fetchOptions);\n\n // =============================================================================\n // DEBOUNCE FUNCTIONS\n // =============================================================================\n const handleFetchOptions = useCallback(async (input: string) => {\n if (!fetchOptionsRef.current) return;\n setIsError(false);\n setIsLoading(true);\n try {\n const fetchedOptions = await fetchOptionsRef.current(input);\n setSearchedInput(input);\n setOptions(fetchedOptions ?? []);\n setIsLoading(false);\n } catch {\n setIsError(true);\n setIsLoading(false);\n }\n }, []);\n\n const fetchOptionsDebounced = useCallback(\n debounce((input: string) => {\n handleFetchOptions(input);\n }, 500),\n [handleFetchOptions]\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n\n useEffect(() => {\n fetchOptionsRef.current = fetchOptions;\n }, [fetchOptions]);\n\n useEffect(() => {\n /***\n * Should not fetch options for the following the scenario :\n * 1. When input < minimumCharacters\n * 2. When user selected option from dropdown becomes input\n * 3. Initial selectedOption passed in as input\n */\n if (input && input.length >= minimumCharacters) {\n if (!isOptionSelected) {\n setIsOpen(true);\n fetchOptionsDebounced(input);\n } else if (input !== searchedInput) {\n fetchOptionsDebounced(input);\n }\n } else {\n fetchOptionsDebounced.cancel();\n }\n\n if (input === \"\" && prevOptionSelected) {\n onSelectOption?.(undefined, undefined);\n handleDropdownDismiss();\n setPrevOptionSelected(undefined);\n }\n\n if (selectedOption && input !== getDisplayValue(selectedOption)) {\n setIsOptionSelected(false);\n }\n }, [input, selectedOption]);\n\n useEffect(() => {\n setInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setSearchedInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setPrevOptionSelected(selectedOption);\n setOptions([]);\n setIsOptionSelected(!!selectedOption);\n }, [selectedOption]);\n\n useEffect(() => {\n const state = getItemsLoadState();\n const count = options?.length ?? 0;\n\n if (state === \"loading\" && input.length >= minimumCharacters) {\n setResultAnnouncement(\"Loading suggested results\");\n return;\n }\n\n if (state === \"fail\") {\n setResultAnnouncement(\"Suggestions failed to load. Try again.\");\n return;\n }\n\n if (isOpen && !isLoading && !isError) {\n if (count === 0) {\n setResultAnnouncement(input ? \"No results found.\" : null);\n } else {\n setResultAnnouncement(\n `${count} result${\n count > 1 ? \"s\" : \"\"\n } found. Press down arrow to scroll through the list.`\n );\n }\n }\n }, [options, input, isError, isLoading]);\n\n // =============================================================================\n // Cleanup: cancel debounce on unmount\n // =============================================================================\n useEffect(() => {\n return () => {\n fetchOptionsDebounced.cancel();\n };\n }, [fetchOptionsDebounced]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleListItemClick = (item: T, extractedValue: V) => {\n selectorRef.current?.focus();\n setInput(getDisplayValue(item));\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(true);\n setPrevOptionSelected(item);\n setIsOpen(false);\n onSelectOption?.(item, extractedValue);\n };\n\n const handleOpen = () => {\n if (!isOptionSelected && input.length >= minimumCharacters) {\n setIsFocused(true);\n }\n };\n\n const handleClose = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n };\n\n const handleNodeFocus = () => {\n setIsFocused(true);\n };\n\n const handleNodeBlur = (e: React.FocusEvent) => {\n if (\n !isOpen &&\n nodeRef.current &&\n !nodeRef.current.contains(e.relatedTarget as Node)\n ) {\n setIsFocused(false);\n handleOnBlur();\n }\n };\n\n const handleListDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n };\n\n const handleDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n selectorRef.current?.focus();\n };\n\n const handleOnClear = () => {\n setInput(\"\");\n setOptions([]);\n setIsOptionSelected(false);\n setIsOpen(false);\n onSelectOption?.(undefined, undefined);\n };\n\n const handleOnBlur = () => {\n if (!isOptionSelected) {\n if (prevOptionSelected) {\n const prevValue = getDisplayValue(prevOptionSelected);\n setInput(prevValue);\n setIsOpen(false);\n } else {\n handleOnClear();\n }\n }\n };\n\n const handleTyping = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInput(e.target.value);\n setIsOptionSelected(false);\n };\n\n const handleDropdownDismiss = (item?: T) => {\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(!!item);\n setOptions([]);\n setIsLoading(true);\n };\n\n // =============================================================================\n // HELPER FUNCTION\n // =============================================================================\n const getItemsLoadState = (): ItemsLoadStateType => {\n if (isError) return \"fail\";\n return isLoading ? \"loading\" : \"success\";\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n const renderInputElement = () => {\n return (\n <InputWrapper\n className={className}\n data-testid={testId}\n ref={nodeRef}\n tabIndex={-1}\n onFocus={handleNodeFocus}\n onBlur={handleNodeBlur}\n focused={isFocused}\n disabled={disabled}\n readOnly={readOnly}\n error={error}\n >\n <VisuallyHidden id={instructionId} aria-hidden>\n Type in {minimumCharacters} or more characters for suggested\n results.\n </VisuallyHidden>\n {resultAnnouncement && (\n <VisuallyHidden aria-live=\"polite\">\n {resultAnnouncement}\n </VisuallyHidden>\n )}\n <Input\n role=\"combobox\"\n ref={selectorRef}\n id={internalId}\n type=\"text\"\n value={input}\n onChange={handleTyping}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n allowClear\n onClear={handleOnClear}\n aria-expanded={isOpen}\n aria-controls={internalId}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n onBlur={\n input.length < minimumCharacters\n ? handleOnBlur\n : undefined\n }\n styleType=\"no-border\"\n aria-describedby={concatIds(ariaDescribedBy, instructionId)}\n {...otherProps}\n />\n </InputWrapper>\n );\n };\n\n const renderDropdown = () => {\n return (\n <>\n <DropdownList\n listboxId={internalId}\n listItems={options}\n onSelectItem={handleListItemClick}\n onDismiss={handleListDismiss}\n valueExtractor={valueExtractor}\n listExtractor={listExtractor}\n itemsLoadState={getItemsLoadState()}\n itemTruncationType={\"end\"}\n itemMaxLines={1}\n labelDisplayType={\"next-line\"}\n disableItemFocus\n onRetry={() => handleFetchOptions(input)}\n width={dropdownWidth}\n matchElementWidth\n />\n </>\n );\n };\n\n return (\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={isOpen}\n renderElement={renderInputElement}\n renderDropdown={renderDropdown}\n onOpen={handleOpen}\n onClose={handleClose}\n onDismiss={handleDismiss}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n );\n};\n"],"names":["PredictiveTextInput","_a","className","testId","selectedOption","minimumCharacters","fetchOptions","placeholder","readOnly","disabled","error","valueExtractor","listExtractor","displayValueExtractor","onSelectOption","alignment","dropdownZIndex","dropdownRootNode","dropdownWidth","ariaDescribedBy","otherProps","__rest","getDisplayValue","item","toString","input","setInput","useState","searchedInput","setSearchedInput","options","setOptions","isLoading","setIsLoading","isError","setIsError","isOptionSelected","setIsOptionSelected","prevOptionSelected","setPrevOptionSelected","isOpen","setIsOpen","isFocused","setIsFocused","internalId","useId","resultAnnouncement","setResultAnnouncement","instructionId","nodeRef","useRef","selectorRef","fetchOptionsRef","handleFetchOptions","useCallback","__awaiter","current","fetchedOptions","fetchOptionsDebounced","debounce","useEffect","length","cancel","undefined","handleDropdownDismiss","state","getItemsLoadState","count","handleListItemClick","extractedValue","focus","handleNodeFocus","handleNodeBlur","e","contains","relatedTarget","handleOnBlur","handleListDismiss","handleOnClear","prevValue","handleTyping","target","value","_jsx","DropdownListState","children","ElementWithDropdown","enabled","renderElement","_jsxs","InputWrapper","ref","tabIndex","onFocus","onBlur","focused","VisuallyHidden","id","Input","Object","assign","role","type","onChange","allowClear","onClear","styleType","concatIds","renderDropdown","_Fragment","DropdownList","listboxId","listItems","onSelectItem","onDismiss","itemsLoadState","itemTruncationType","itemMaxLines","labelDisplayType","disableItemFocus","onRetry","width","matchElementWidth","onOpen","onClose","clickToToggle","offset","fitAvailableHeight","customZIndex","rootNode"],"mappings":"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"}
1
+ {"version":3,"file":"predictive-text-input.js","sources":["../../src/predictive-text-input/predictive-text-input.tsx"],"sourcesContent":["import debounce from \"lodash/debounce\";\nimport type React from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { Input } from \"../input\";\nimport { concatIds, VisuallyHidden } from \"../shared/accessibility\";\nimport { DropdownList, DropdownListState } from \"../shared/dropdown-list\";\nimport type { ItemsLoadStateType } from \"../shared/dropdown-list/types\";\nimport { ElementWithDropdown } from \"../shared/dropdown-wrapper\";\nimport { InputWrapper } from \"../shared/input-wrapper\";\nimport { useId } from \"../util\";\nimport type { PredictiveTextInputProps } from \"./types\";\n\n// @catalog\n/**\n * A text input that fetches and displays matching suggestions as the user types.\n *\n * Use `PredictiveTextInput` for search-as-you-type or autocomplete scenarios\n * where options are loaded asynchronously based on the current input.\n */\nexport const PredictiveTextInput = <T, V>({\n className,\n \"data-testid\": testId,\n selectedOption,\n minimumCharacters = 3,\n fetchOptions,\n placeholder = \"Enter here...\",\n readOnly = false,\n disabled = false,\n error,\n valueExtractor,\n listExtractor,\n displayValueExtractor,\n onSelectOption,\n alignment,\n dropdownZIndex,\n dropdownRootNode,\n dropdownWidth,\n \"aria-describedby\": ariaDescribedBy,\n ...otherProps\n}: PredictiveTextInputProps<T, V>): JSX.Element => {\n const getDisplayValue = (item: T | undefined): string => {\n if (!item) return \"\";\n return displayValueExtractor\n ? displayValueExtractor(item)\n : item.toString();\n };\n\n // =============================================================================\n // CONST, STATE\n // =============================================================================\n const [input, setInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [searchedInput, setSearchedInput] = useState<string>(() =>\n selectedOption ? getDisplayValue(selectedOption) : \"\"\n );\n const [options, setOptions] = useState<T[]>([]);\n const [isLoading, setIsLoading] = useState<boolean>(true);\n const [isError, setIsError] = useState<boolean>(false);\n const [isOptionSelected, setIsOptionSelected] = useState<boolean>(\n !!selectedOption\n );\n const [prevOptionSelected, setPrevOptionSelected] = useState<T | undefined>(\n selectedOption\n );\n const [isOpen, setIsOpen] = useState(false);\n const [isFocused, setIsFocused] = useState(false);\n\n const internalId = useId();\n const [resultAnnouncement, setResultAnnouncement] = useState<string | null>(\n null\n );\n const instructionId = `${internalId}-instruction`;\n\n const nodeRef = useRef<HTMLDivElement | null>(null);\n const selectorRef = useRef<HTMLInputElement | null>(null);\n\n const fetchOptionsRef = useRef(fetchOptions);\n\n // =============================================================================\n // DEBOUNCE FUNCTIONS\n // =============================================================================\n const handleFetchOptions = useCallback(async (input: string) => {\n if (!fetchOptionsRef.current) return;\n setIsError(false);\n setIsLoading(true);\n try {\n const fetchedOptions = await fetchOptionsRef.current(input);\n setSearchedInput(input);\n setOptions(fetchedOptions ?? []);\n setIsLoading(false);\n } catch {\n setIsError(true);\n setIsLoading(false);\n }\n }, []);\n\n const fetchOptionsDebounced = useCallback(\n debounce((input: string) => {\n handleFetchOptions(input);\n }, 500),\n [handleFetchOptions]\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n\n useEffect(() => {\n fetchOptionsRef.current = fetchOptions;\n }, [fetchOptions]);\n\n useEffect(() => {\n /***\n * Should not fetch options for the following the scenario :\n * 1. When input < minimumCharacters\n * 2. When user selected option from dropdown becomes input\n * 3. Initial selectedOption passed in as input\n */\n if (input && input.length >= minimumCharacters) {\n if (!isOptionSelected) {\n setIsOpen(true);\n fetchOptionsDebounced(input);\n } else if (input !== searchedInput) {\n fetchOptionsDebounced(input);\n }\n } else {\n fetchOptionsDebounced.cancel();\n }\n\n if (input === \"\" && prevOptionSelected) {\n onSelectOption?.(undefined, undefined);\n handleDropdownDismiss();\n setPrevOptionSelected(undefined);\n }\n\n if (selectedOption && input !== getDisplayValue(selectedOption)) {\n setIsOptionSelected(false);\n }\n }, [input, selectedOption]);\n\n useEffect(() => {\n setInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setSearchedInput(selectedOption ? getDisplayValue(selectedOption) : \"\");\n setPrevOptionSelected(selectedOption);\n setIsOptionSelected(!!selectedOption);\n }, [selectedOption]);\n\n useEffect(() => {\n const state = getItemsLoadState();\n const count = options?.length ?? 0;\n\n if (state === \"loading\" && input.length >= minimumCharacters) {\n setResultAnnouncement(\"Loading suggested results\");\n return;\n }\n\n if (state === \"fail\") {\n setResultAnnouncement(\"Suggestions failed to load. Try again.\");\n return;\n }\n\n if (isOpen && !isLoading && !isError) {\n if (count === 0) {\n setResultAnnouncement(input ? \"No results found.\" : null);\n } else {\n setResultAnnouncement(\n `${count} result${\n count > 1 ? \"s\" : \"\"\n } found. Press down arrow to scroll through the list.`\n );\n }\n }\n }, [options, input, isError, isLoading]);\n\n // =============================================================================\n // Cleanup: cancel debounce on unmount\n // =============================================================================\n useEffect(() => {\n return () => {\n fetchOptionsDebounced.cancel();\n };\n }, [fetchOptionsDebounced]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleListItemClick = (item: T, extractedValue: V) => {\n selectorRef.current?.focus();\n setInput(getDisplayValue(item));\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(true);\n setPrevOptionSelected(item);\n setIsOpen(false);\n onSelectOption?.(item, extractedValue);\n };\n\n const handleOpen = () => {\n if (!isOptionSelected && input.length >= minimumCharacters) {\n setIsFocused(true);\n }\n };\n\n const handleClose = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n };\n\n const handleNodeFocus = () => {\n setIsFocused(true);\n };\n\n const handleNodeBlur = (e: React.FocusEvent) => {\n if (\n !isOpen &&\n nodeRef.current &&\n !nodeRef.current.contains(e.relatedTarget as Node)\n ) {\n setIsFocused(false);\n handleOnBlur();\n }\n };\n\n const handleListDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n };\n\n const handleDismiss = () => {\n setIsOpen(false);\n setIsFocused(false);\n handleOnBlur();\n selectorRef.current?.focus();\n };\n\n const handleHide = () => {\n // reset dropdown state once it fully closes\n setOptions([]);\n setIsLoading(true);\n setIsError(false);\n };\n\n const handleOnClear = () => {\n setInput(\"\");\n setIsOptionSelected(false);\n setIsOpen(false);\n onSelectOption?.(undefined, undefined);\n };\n\n const handleOnBlur = () => {\n if (!isOptionSelected) {\n if (prevOptionSelected) {\n const prevValue = getDisplayValue(prevOptionSelected);\n setInput(prevValue);\n setIsOpen(false);\n } else {\n handleOnClear();\n }\n }\n };\n\n const handleTyping = (e: React.ChangeEvent<HTMLInputElement>) => {\n setInput(e.target.value);\n setIsOptionSelected(false);\n };\n\n const handleDropdownDismiss = (item?: T) => {\n setSearchedInput(item ? getDisplayValue(item) : \"\");\n setIsOptionSelected(!!item);\n setIsLoading(true);\n };\n\n // =============================================================================\n // HELPER FUNCTION\n // =============================================================================\n const getItemsLoadState = (): ItemsLoadStateType => {\n if (isError) return \"fail\";\n return isLoading ? \"loading\" : \"success\";\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n const renderInputElement = () => {\n return (\n <InputWrapper\n className={className}\n data-testid={testId}\n ref={nodeRef}\n tabIndex={-1}\n onFocus={handleNodeFocus}\n onBlur={handleNodeBlur}\n focused={isFocused}\n disabled={disabled}\n readOnly={readOnly}\n error={error}\n >\n <VisuallyHidden id={instructionId} aria-hidden>\n Type in {minimumCharacters} or more characters for suggested\n results.\n </VisuallyHidden>\n {resultAnnouncement && (\n <VisuallyHidden aria-live=\"polite\">\n {resultAnnouncement}\n </VisuallyHidden>\n )}\n <Input\n role=\"combobox\"\n ref={selectorRef}\n id={internalId}\n type=\"text\"\n value={input}\n onChange={handleTyping}\n placeholder={placeholder}\n readOnly={readOnly}\n disabled={disabled}\n allowClear\n onClear={handleOnClear}\n aria-expanded={isOpen}\n aria-controls={internalId}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n onBlur={\n input.length < minimumCharacters\n ? handleOnBlur\n : undefined\n }\n styleType=\"no-border\"\n aria-describedby={concatIds(ariaDescribedBy, instructionId)}\n {...otherProps}\n />\n </InputWrapper>\n );\n };\n\n const renderDropdown = () => {\n return (\n <DropdownList\n listboxId={internalId}\n listItems={options}\n onSelectItem={handleListItemClick}\n onDismiss={handleListDismiss}\n valueExtractor={valueExtractor}\n listExtractor={listExtractor}\n itemsLoadState={getItemsLoadState()}\n itemTruncationType={\"end\"}\n itemMaxLines={1}\n labelDisplayType={\"next-line\"}\n disableItemFocus\n onRetry={() => handleFetchOptions(input)}\n width={dropdownWidth}\n matchElementWidth\n />\n );\n };\n\n return (\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={isOpen}\n renderElement={renderInputElement}\n renderDropdown={renderDropdown}\n onOpen={handleOpen}\n onClose={handleClose}\n onDismiss={handleDismiss}\n onHide={handleHide}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n );\n};\n"],"names":["PredictiveTextInput","_a","className","testId","selectedOption","minimumCharacters","fetchOptions","placeholder","readOnly","disabled","error","valueExtractor","listExtractor","displayValueExtractor","onSelectOption","alignment","dropdownZIndex","dropdownRootNode","dropdownWidth","ariaDescribedBy","otherProps","__rest","getDisplayValue","item","toString","input","setInput","useState","searchedInput","setSearchedInput","options","setOptions","isLoading","setIsLoading","isError","setIsError","isOptionSelected","setIsOptionSelected","prevOptionSelected","setPrevOptionSelected","isOpen","setIsOpen","isFocused","setIsFocused","internalId","useId","resultAnnouncement","setResultAnnouncement","instructionId","nodeRef","useRef","selectorRef","fetchOptionsRef","handleFetchOptions","useCallback","__awaiter","current","fetchedOptions","fetchOptionsDebounced","debounce","useEffect","length","cancel","undefined","handleDropdownDismiss","state","getItemsLoadState","count","handleListItemClick","extractedValue","focus","handleNodeFocus","handleNodeBlur","e","contains","relatedTarget","handleOnBlur","handleListDismiss","handleOnClear","prevValue","handleTyping","target","value","_jsx","DropdownListState","children","ElementWithDropdown","enabled","renderElement","_jsxs","InputWrapper","ref","tabIndex","onFocus","onBlur","focused","VisuallyHidden","id","Input","Object","assign","role","type","onChange","allowClear","onClear","styleType","concatIds","renderDropdown","DropdownList","listboxId","listItems","onSelectItem","onDismiss","itemsLoadState","itemTruncationType","itemMaxLines","labelDisplayType","disableItemFocus","onRetry","width","matchElementWidth","onOpen","onClose","onHide","clickToToggle","offset","fitAvailableHeight","customZIndex","rootNode"],"mappings":"qvEAoBO,MAAMA,EAA6BC,QAAAC,UACtCA,EACA,cAAeC,EAAMC,eACrBA,EAAcC,kBACdA,EAAoB,EAACC,aACrBA,EAAYC,YACZA,EAAc,gBAAeC,SAC7BA,GAAW,EAAKC,SAChBA,GAAW,EAAKC,MAChBA,EAAKC,eACLA,EAAcC,cACdA,EAAaC,sBACbA,EAAqBC,eACrBA,EAAcC,UACdA,EAASC,eACTA,EAAcC,iBACdA,EAAgBC,cAChBA,EACA,mBAAoBC,KACjBC,EAAUC,EAAApB,EAnByB,CAAA,YAAA,cAAA,iBAAA,oBAAA,eAAA,cAAA,WAAA,WAAA,QAAA,iBAAA,gBAAA,wBAAA,iBAAA,YAAA,iBAAA,mBAAA,gBAAA,qBAqBtC,MAAMqB,EAAmBC,GAChBA,EACEV,EACDA,EAAsBU,GACtBA,EAAKC,WAHO,IASfC,EAAOC,GAAYC,GAAiB,IACvCvB,EAAiBkB,EAAgBlB,GAAkB,MAEhDwB,EAAeC,GAAoBF,GAAiB,IACvDvB,EAAiBkB,EAAgBlB,GAAkB,MAEhD0B,EAASC,GAAcJ,EAAc,KACrCK,EAAWC,GAAgBN,GAAkB,IAC7CO,EAASC,GAAcR,GAAkB,IACzCS,EAAkBC,GAAuBV,IAC1CvB,IAECkC,EAAoBC,GAAyBZ,EAChDvB,IAEGoC,EAAQC,GAAad,GAAS,IAC9Be,GAAWC,IAAgBhB,GAAS,GAErCiB,GAAaC,KACZC,GAAoBC,IAAyBpB,EAChD,MAEEqB,GAAgB,GAAGJ,iBAEnBK,GAAUC,EAA8B,MACxCC,GAAcD,EAAgC,MAE9CE,GAAkBF,EAAO5C,GAKzB+C,GAAqBC,GAAmB7B,GAAiB8B,OAAA,OAAA,OAAA,GAAA,YAC3D,GAAKH,GAAgBI,QAArB,CACArB,GAAW,GACXF,GAAa,GACb,IACI,MAAMwB,QAAuBL,GAAgBI,QAAQ/B,GACrDI,EAAiBJ,GACjBM,EAAW0B,QAAAA,EAAkB,IAC7BxB,GAAa,EACjB,CAAE,MAAAhC,GACEkC,GAAW,GACXF,GAAa,EACjB,CAX8B,CAYlC,KAAG,IAEGyB,GAAwBJ,EAC1BK,GAAUlC,IACN4B,GAAmB5B,EAAM,GAC1B,KACH,CAAC4B,KAOLO,GAAU,KACNR,GAAgBI,QAAUlD,CAAY,GACvC,CAACA,IAEJsD,GAAU,KAOFnC,GAASA,EAAMoC,QAAUxD,EACpB+B,EAGMX,IAAUG,GACjB8B,GAAsBjC,IAHtBgB,GAAU,GACViB,GAAsBjC,IAK1BiC,GAAsBI,SAGZ,KAAVrC,GAAgBa,IAChBxB,SAAAA,OAAiBiD,OAAWA,GAC5BC,KACAzB,OAAsBwB,IAGtB3D,GAAkBqB,IAAUH,EAAgBlB,IAC5CiC,GAAoB,EACxB,GACD,CAACZ,EAAOrB,IAEXwD,GAAU,KACNlC,EAAStB,EAAiBkB,EAAgBlB,GAAkB,IAC5DyB,EAAiBzB,EAAiBkB,EAAgBlB,GAAkB,IACpEmC,EAAsBnC,GACtBiC,IAAsBjC,EAAe,GACtC,CAACA,IAEJwD,GAAU,WACN,MAAMK,EAAQC,KACRC,EAAuB,QAAflE,EAAA6B,aAAO,EAAPA,EAAS+B,cAAM,IAAA5D,EAAAA,EAAI,EAEnB,YAAVgE,GAAuBxC,EAAMoC,QAAUxD,EACvC0C,GAAsB,6BAIZ,SAAVkB,GAKAzB,GAAWR,GAAcE,GAErBa,GADU,IAAVoB,EACsB1C,EAAQ,oBAAsB,KAGhD,GAAG0C,WACCA,EAAQ,EAAI,IAAM,0DAV9BpB,GAAsB,yCAc1B,GACD,CAACjB,EAASL,EAAOS,EAASF,IAK7B4B,GAAU,IACC,KACHF,GAAsBI,QAAQ,GAEnC,CAACJ,KAKJ,MAAMU,GAAsB,CAAC7C,EAAS8C,WACf,QAAnBpE,EAAAkD,GAAYK,eAAO,IAAAvD,GAAAA,EAAEqE,QACrB5C,EAASJ,EAAgBC,IACzBM,EAAiBN,EAAOD,EAAgBC,GAAQ,IAChDc,GAAoB,GACpBE,EAAsBhB,GACtBkB,GAAU,GACV3B,SAAAA,EAAiBS,EAAM8C,EAAe,EAepCE,GAAkB,KACpB5B,IAAa,EAAK,EAGhB6B,GAAkBC,IAEfjC,IACDS,GAAQO,SACPP,GAAQO,QAAQkB,SAASD,EAAEE,iBAE5BhC,IAAa,GACbiC,KACJ,EAGEC,GAAoB,KACtBpC,GAAU,GACVE,IAAa,EAAM,EAiBjBmC,GAAgB,KAClBpD,EAAS,IACTW,GAAoB,GACpBI,GAAU,GACV3B,SAAAA,OAAiBiD,OAAWA,EAAU,EAGpCa,GAAe,KACjB,IAAKxC,EACD,GAAIE,EAAoB,CACpB,MAAMyC,EAAYzD,EAAgBgB,GAClCZ,EAASqD,GACTtC,GAAU,EACd,MACIqC,IAER,EAGEE,GAAgBP,IAClB/C,EAAS+C,EAAEQ,OAAOC,OAClB7C,GAAoB,EAAM,EAGxB2B,GAAyBzC,IAC3BM,EAAgD,IAChDQ,GAAoB,GACpBJ,GAAa,EAAK,EAMhBiC,GAAoB,IAClBhC,EAAgB,OACbF,EAAY,UAAY,UA+EnC,OACImD,EAACC,EAAiB,CAAAC,SACdF,EAACG,EAAmB,CAChBC,SAAU/E,IAAaC,EACvB+B,OAAQA,EACRgD,cA9Ee,IAEnBC,EAACC,EAAY,CACTxF,UAAWA,EAAS,cACPC,EACbwF,IAAK1C,GACL2C,UAAU,EACVC,QAAStB,GACTuB,OAAQtB,GACRuB,QAASrD,GACTjC,SAAUA,EACVD,SAAUA,EACVE,MAAOA,EAAK2E,SAAA,CAEZI,EAACO,EAAc,CAACC,GAAIjD,GAAa,eAAA,EAAAqC,SAAA,CAAA,WACpBhF,EAAiB,gDAG7ByC,IACGqC,EAACa,EAAc,CAAA,YAAW,SAAQX,SAC7BvC,KAGTqC,EAACe,EAAKC,OAAAC,OAAA,CACFC,KAAK,WACLV,IAAKxC,GACL8C,GAAIrD,GACJ0D,KAAK,OACLpB,MAAOzD,EACP8E,SAAUvB,GACVzE,YAAaA,EACbC,SAAUA,EACVC,SAAUA,EACV+F,YAAU,EACVC,QAAS3B,GAAa,gBACPtC,EAAM,gBACNI,GAAU,oBACP,OAAM,gBACV,UACdkD,OACIrE,EAAMoC,OAASxD,EACTuE,QACAb,EAEV2C,UAAU,+BACQC,EAAUxF,EAAiB6B,KACzC5B,OAiCRwF,eA3BW,IAEfzB,EAAC0B,EAAY,CACTC,UAAWlE,GACXmE,UAAWjF,EACXkF,aAAc5C,GACd6C,UAAWpC,GACXlE,eAAgBA,EAChBC,cAAeA,EACfsG,eAAgBhD,KAChBiD,mBAAoB,MACpBC,aAAc,EACdC,iBAAkB,YAClBC,oBACAC,QAAS,IAAMlE,GAAmB5B,GAClC+F,MAAOtG,EACPuG,mBAAiB,IAYjBC,OAvKO,MACVtF,GAAoBX,EAAMoC,QAAUxD,GACrCsC,IAAa,EACjB,EAqKQgF,QAlKQ,KAChBlF,GAAU,GACVE,IAAa,GACbiC,IAAc,EAgKNqC,UAzIU,WAClBxE,GAAU,GACVE,IAAa,GACbiC,KACmB,QAAnB3E,EAAAkD,GAAYK,eAAO,IAAAvD,GAAAA,EAAEqE,OAAO,EAsIpBsD,OAnIO,KAEf7F,EAAW,IACXE,GAAa,GACbE,GAAW,EAAM,EAgIT0F,eAAe,EACfC,OAAQ,EACR/G,UAAWA,EACXgH,oBAAkB,EAClBC,aAAchH,EACdiH,SAAUhH,KAEE"}
@@ -1,39 +1,93 @@
1
1
  import type { RefObject } from "react";
2
2
  import type { ListItemDisplayProps } from "../shared/dropdown-list/types";
3
3
  import type { DropdownAlignmentType } from "../shared/dropdown-wrapper";
4
+ /**
5
+ * Props for the `PredictiveTextInput` component.
6
+ *
7
+ * `T` is the shape of each option item returned by `fetchOptions`.
8
+ * `V` is the extracted value type produced by `valueExtractor`.
9
+ */
4
10
  export interface PredictiveTextInputProps<T, V> extends React.AriaAttributes {
5
11
  id?: string | undefined;
6
12
  className?: string | undefined;
7
13
  "data-testid"?: string | undefined;
8
- /** Minimum number of characters, before options are shown */
14
+ /**
15
+ * Minimum number of characters the user must type before `fetchOptions` is
16
+ * called and the dropdown opens.
17
+ *
18
+ * @default 3
19
+ */
9
20
  minimumCharacters?: number | undefined;
21
+ /**
22
+ * Placeholder text shown inside the input when it is empty.
23
+ *
24
+ * @default "Enter here..."
25
+ */
10
26
  placeholder?: string | undefined;
11
27
  readOnly?: boolean | undefined;
12
28
  disabled?: boolean | undefined;
29
+ /**
30
+ * Applies error styling to the input wrapper.
31
+ */
13
32
  error?: boolean | undefined;
33
+ /**
34
+ * The currently confirmed option. Updating this prop resets the displayed
35
+ * text and clears the dropdown options list. Pass `undefined` to clear the
36
+ * selection.
37
+ */
14
38
  selectedOption?: T | undefined;
39
+ /**
40
+ * Horizontal alignment of the dropdown relative to the input element.
41
+ */
15
42
  alignment?: DropdownAlignmentType | undefined;
43
+ /**
44
+ * CSS `z-index` applied to the dropdown overlay.
45
+ */
16
46
  dropdownZIndex?: number | undefined;
17
47
  /**
18
- * The root element that contains the dropdown element. Defaults to the document body.
48
+ * The root element that contains the dropdown element.
19
49
  *
20
- * If the parent that contains the trigger element has a higher z-index than the dropdown,
21
- * the dropdown may not be visible. Specify the parent element here instead
50
+ * @remarks Specify this if you need to change the parent of the
51
+ * dropdown in the HTML DOM.
52
+ * Possible use case: sharing a stacking context.
53
+ *
54
+ * Note: if a parent of the trigger has a higher `z-index` than the dropdown,
55
+ * the dropdown may be obscured.
56
+ *
57
+ * @default document.body
22
58
  */
23
59
  dropdownRootNode?: RefObject<HTMLElement> | undefined;
24
60
  /**
25
- * Custom width for the dropdown. When specified, the dropdown will use this
26
- * width instead of matching the input element width.
61
+ * Custom width for the dropdown. When specified, the dropdown uses this
62
+ * width instead of matching the trigger element width.
27
63
  */
28
64
  dropdownWidth?: string | undefined;
29
- /** Async Function to populate options */
65
+ /**
66
+ * Async function called with the current input string to retrieve matching
67
+ * options. A rejected promise triggers the error state in the
68
+ * dropdown.
69
+ *
70
+ * @param input The current text in the input field.
71
+ */
30
72
  fetchOptions: (input: string) => Promise<T[]>;
31
- /** Function to derive value from an item */
73
+ /**
74
+ * Derives the submitted value `V` from a selected item `T`.
75
+ */
32
76
  valueExtractor?: ((item: T) => V) | undefined;
33
- /** Function to derive options display value from an item */
77
+ /**
78
+ * Derives the display label for each option in the dropdown list.
79
+ */
34
80
  listExtractor?: ((item: T) => string | ListItemDisplayProps) | undefined;
35
- /** Function to derive display value for selected option */
81
+ /**
82
+ * Derives the text shown in the input field after an option is selected.
83
+ */
36
84
  displayValueExtractor?: ((option: T) => string) | undefined;
37
- /** Callback function when option is selected */
85
+ /**
86
+ * Called when the user selects an option from the dropdown or clears the
87
+ * field.
88
+ *
89
+ * @param option The selected item, or `undefined` when cleared.
90
+ * @param extractedValue The value produced by `valueExtractor`, or `undefined` when cleared.
91
+ */
38
92
  onSelectOption?: ((option: T | undefined, extractedValue: V | undefined) => void) | undefined;
39
93
  }
@@ -1,2 +1,9 @@
1
1
  import type { ProgressIndicatorProps } from "./types";
2
+ /**
3
+ * A horizontal step-progress bar that tracks a user's position through a
4
+ * multi-step flow.
5
+ *
6
+ * Use `ProgressIndicator` when you need to communicate progress through an
7
+ * ordered sequence of steps.
8
+ */
2
9
  export declare const ProgressIndicator: <T>({ steps, currentIndex, displayExtractor, className, ...otherProps }: ProgressIndicatorProps<T>) => import("react/jsx-runtime").JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"progress-indicator.js","sources":["../../src/progress-indicator/progress-indicator.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport kebabCase from \"lodash/kebabCase\";\n\nimport { VisuallyHidden } from \"../shared/accessibility\";\nimport { useMaxWidthMediaQuery } from \"../theme\";\nimport { Typography } from \"../typography\";\nimport * as styles from \"./progress-indicator.styles\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\nexport const ProgressIndicator = <T,>({\n steps,\n currentIndex,\n displayExtractor,\n className,\n ...otherProps\n}: ProgressIndicatorProps<T>) => {\n // =============================================================================\n // CONST, STATE, REFS\n // =============================================================================\n const isTablet = useMaxWidthMediaQuery(\"lg\");\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getDisplayValue = (item: T): string => {\n if (displayExtractor) {\n return displayExtractor(item);\n }\n return item?.toString() ?? \"\";\n };\n\n const getStepAriaLabel = (stepIndex: number, currentIndex: number) => {\n if (stepIndex < currentIndex) {\n return \"Completed step\";\n } else if (stepIndex === currentIndex) {\n return \"Current step\";\n } else {\n return \"Upcoming step\";\n }\n };\n\n const getId = (stepIndex: number, currentIndex: number) => {\n return kebabCase(\n `${getStepAriaLabel(stepIndex, currentIndex)} ${stepIndex}`\n );\n };\n\n // =============================================================================\n // RENDER\n // =============================================================================\n if (!steps.length) return null;\n\n const renderBars = () => {\n return steps.map((step: T, stepIndex: number) => {\n // previous and current index elements are highlighted\n const highlighted = stepIndex <= currentIndex;\n\n return (\n <div\n key={stepIndex}\n id={getId(stepIndex, currentIndex)}\n className={styles.indicator}\n >\n <div\n className={clsx(\n styles.indicatorBar,\n highlighted && styles.indicatorBarHighlighted\n )}\n />\n </div>\n );\n });\n };\n\n const renderStepTitleDesktop = () => {\n return steps.map((step: T, stepIndex: number) => {\n const highlighted = stepIndex <= currentIndex;\n const current = stepIndex === currentIndex;\n const fontWeight = current ? \"bold\" : \"regular\";\n\n return (\n <div\n key={stepIndex}\n id={`${getId(stepIndex, currentIndex)}-title`}\n className={styles.indicator}\n >\n <Typography.BodyMD\n className={clsx(\n styles.indicatorTitleDesktop,\n highlighted &&\n styles.indicatorTitleDesktopHighlighted\n )}\n weight={fontWeight}\n aria-current={current}\n >\n {getDisplayValue(step)}\n <VisuallyHidden>\n {getStepAriaLabel(stepIndex, currentIndex)}\n </VisuallyHidden>\n </Typography.BodyMD>\n </div>\n );\n });\n };\n\n const renderStepTitleTablet = () => {\n return (\n <div\n key={currentIndex}\n id={getId(currentIndex, currentIndex)}\n className={styles.indicator}\n >\n <Typography.BodyMD\n className={styles.indicatorTitleTablet}\n weight={\"semibold\"}\n id={`${getId(currentIndex, currentIndex)}-counter`}\n >\n Step {currentIndex + 1} of {steps.length}\n </Typography.BodyMD>\n <Typography.BodyMD\n className={styles.indicatorTitleTablet}\n weight={\"regular\"}\n id={`${getId(currentIndex, currentIndex)}-title`}\n >\n {getDisplayValue(steps[currentIndex])}\n </Typography.BodyMD>\n </div>\n );\n };\n\n return (\n <div className={clsx(styles.wrapper, className)} {...otherProps}>\n <div className={styles.content}>{renderBars()}</div>\n <div className={styles.content}>\n {isTablet ? renderStepTitleTablet() : renderStepTitleDesktop()}\n </div>\n </div>\n );\n};\n"],"names":["ProgressIndicator","_a","steps","currentIndex","displayExtractor","className","otherProps","__rest","isTablet","useMaxWidthMediaQuery","getDisplayValue","item","toString","getStepAriaLabel","stepIndex","getId","kebabCase","length","_jsxs","clsx","styles.wrapper","children","_jsx","styles.content","map","step","highlighted","id","styles.indicator","styles.indicatorBar","styles.indicatorBarHighlighted","Typography","BodyMD","styles.indicatorTitleTablet","weight","current","fontWeight","styles.indicatorTitleDesktop","styles.indicatorTitleDesktopHighlighted","VisuallyHidden"],"mappings":"q+BASO,MAAMA,EAAyBC,IAAA,IAAAC,MAClCA,EAAKC,aACLA,EAAYC,iBACZA,EAAgBC,UAChBA,GAASJ,EACNK,EAAUC,EAAAN,EALqB,CAAA,QAAA,eAAA,mBAAA,cAUlC,MAAMO,EAAWC,EAAsB,MAajCC,EAAmBC,UACrB,OAAIP,EACOA,EAAiBO,GAEL,QAAhBV,EAAAU,aAAI,EAAJA,EAAMC,kBAAU,IAAAX,EAAAA,EAAI,EAAE,EAG3BY,EAAmB,CAACC,EAAmBX,IACrCW,EAAYX,EACL,iBACAW,IAAcX,EACd,eAEA,gBAITY,EAAQ,CAACD,EAAmBX,IACvBa,EACH,GAAGH,EAAiBC,EAAWX,MAAiBW,KAOxD,IAAKZ,EAAMe,OAAQ,OAAO,KAgF1B,OACIC,uBAAKb,UAAWc,EAAKC,EAAgBf,IAAgBC,EAAU,CAAAe,SAAA,CAC3DC,EAAA,MAAA,CAAKjB,UAAWkB,EAAcF,SA/E3BnB,EAAMsB,KAAI,CAACC,EAASX,KAEvB,MAAMY,EAAcZ,GAAaX,EAEjC,OACImB,EAAA,MAAA,CAEIK,GAAIZ,EAAMD,EAAWX,GACrBE,UAAWuB,EAAgBP,SAE3BC,EAAA,MAAA,CACIjB,UAAWc,EACPU,EACAH,GAAeI,MAPlBhB,EAUH,MAgEVQ,SAAKjB,UAAWkB,EAAcF,SACzBb,EA3BLU,EAAA,MAAA,CAEIS,GAAIZ,EAAMZ,EAAcA,GACxBE,UAAWuB,EAAgBP,SAAA,CAE3BH,EAACa,EAAWC,QACR3B,UAAW4B,EACXC,OAAQ,WACRP,GAAI,GAAGZ,EAAMZ,EAAcA,+BAErBA,EAAe,EAAC,OAAMD,EAAMe,UAEtCK,EAACS,EAAWC,QACR3B,UAAW4B,EACXC,OAAQ,UACRP,GAAI,GAAGZ,EAAMZ,EAAcA,oBAE1BO,EAAgBR,EAAMC,QAhBtBA,GAjCND,EAAMsB,KAAI,CAACC,EAASX,KACvB,MAAMY,EAAcZ,GAAaX,EAC3BgC,EAAUrB,IAAcX,EACxBiC,EAAaD,EAAU,OAAS,UAEtC,OACIb,EAAA,MAAA,CAEIK,GAAI,GAAGZ,EAAMD,EAAWX,WACxBE,UAAWuB,EAAgBP,SAE3BH,EAACa,EAAWC,OAAM,CACd3B,UAAWc,EACPkB,EACAX,GACIY,GAERJ,OAAQE,EAAU,eACJD,EAAOd,SAAA,CAEpBX,EAAgBe,GACjBH,EAACiB,EAAc,CAAAlB,SACVR,EAAiBC,EAAWX,SAfhCW,EAkBH,SAoCR"}
1
+ {"version":3,"file":"progress-indicator.js","sources":["../../src/progress-indicator/progress-indicator.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport kebabCase from \"lodash/kebabCase\";\n\nimport { VisuallyHidden } from \"../shared/accessibility\";\nimport { useMaxWidthMediaQuery } from \"../theme\";\nimport { Typography } from \"../typography\";\nimport * as styles from \"./progress-indicator.styles\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\n// @catalog\n/**\n * A horizontal step-progress bar that tracks a user's position through a\n * multi-step flow.\n *\n * Use `ProgressIndicator` when you need to communicate progress through an\n * ordered sequence of steps.\n */\nexport const ProgressIndicator = <T,>({\n steps,\n currentIndex,\n displayExtractor,\n className,\n ...otherProps\n}: ProgressIndicatorProps<T>) => {\n // =============================================================================\n // CONST, STATE, REFS\n // =============================================================================\n const isTablet = useMaxWidthMediaQuery(\"lg\");\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getDisplayValue = (item: T): string => {\n if (displayExtractor) {\n return displayExtractor(item);\n }\n return item?.toString() ?? \"\";\n };\n\n const getStepAriaLabel = (stepIndex: number, currentIndex: number) => {\n if (stepIndex < currentIndex) {\n return \"Completed step\";\n } else if (stepIndex === currentIndex) {\n return \"Current step\";\n } else {\n return \"Upcoming step\";\n }\n };\n\n const getId = (stepIndex: number, currentIndex: number) => {\n return kebabCase(\n `${getStepAriaLabel(stepIndex, currentIndex)} ${stepIndex}`\n );\n };\n\n // =============================================================================\n // RENDER\n // =============================================================================\n if (!steps.length) return null;\n\n const renderBars = () => {\n return steps.map((step: T, stepIndex: number) => {\n // previous and current index elements are highlighted\n const highlighted = stepIndex <= currentIndex;\n\n return (\n <div\n key={stepIndex}\n id={getId(stepIndex, currentIndex)}\n className={styles.indicator}\n >\n <div\n className={clsx(\n styles.indicatorBar,\n highlighted && styles.indicatorBarHighlighted\n )}\n />\n </div>\n );\n });\n };\n\n const renderStepTitleDesktop = () => {\n return steps.map((step: T, stepIndex: number) => {\n const highlighted = stepIndex <= currentIndex;\n const current = stepIndex === currentIndex;\n const fontWeight = current ? \"bold\" : \"regular\";\n\n return (\n <div\n key={stepIndex}\n id={`${getId(stepIndex, currentIndex)}-title`}\n className={styles.indicator}\n >\n <Typography.BodyMD\n className={clsx(\n styles.indicatorTitleDesktop,\n highlighted &&\n styles.indicatorTitleDesktopHighlighted\n )}\n weight={fontWeight}\n aria-current={current}\n >\n {getDisplayValue(step)}\n <VisuallyHidden>\n {getStepAriaLabel(stepIndex, currentIndex)}\n </VisuallyHidden>\n </Typography.BodyMD>\n </div>\n );\n });\n };\n\n const renderStepTitleTablet = () => {\n return (\n <div\n key={currentIndex}\n id={getId(currentIndex, currentIndex)}\n className={styles.indicator}\n >\n <Typography.BodyMD\n className={styles.indicatorTitleTablet}\n weight={\"semibold\"}\n id={`${getId(currentIndex, currentIndex)}-counter`}\n >\n Step {currentIndex + 1} of {steps.length}\n </Typography.BodyMD>\n <Typography.BodyMD\n className={styles.indicatorTitleTablet}\n weight={\"regular\"}\n id={`${getId(currentIndex, currentIndex)}-title`}\n >\n {getDisplayValue(steps[currentIndex])}\n </Typography.BodyMD>\n </div>\n );\n };\n\n return (\n <div className={clsx(styles.wrapper, className)} {...otherProps}>\n <div className={styles.content}>{renderBars()}</div>\n <div className={styles.content}>\n {isTablet ? renderStepTitleTablet() : renderStepTitleDesktop()}\n </div>\n </div>\n );\n};\n"],"names":["ProgressIndicator","_a","steps","currentIndex","displayExtractor","className","otherProps","__rest","isTablet","useMaxWidthMediaQuery","getDisplayValue","item","toString","getStepAriaLabel","stepIndex","getId","kebabCase","length","_jsxs","clsx","styles.wrapper","children","_jsx","styles.content","map","step","highlighted","id","styles.indicator","styles.indicatorBar","styles.indicatorBarHighlighted","Typography","BodyMD","styles.indicatorTitleTablet","weight","current","fontWeight","styles.indicatorTitleDesktop","styles.indicatorTitleDesktopHighlighted","VisuallyHidden"],"mappings":"q+BAiBO,MAAMA,EAAyBC,IAAA,IAAAC,MAClCA,EAAKC,aACLA,EAAYC,iBACZA,EAAgBC,UAChBA,GAASJ,EACNK,EAAUC,EAAAN,EALqB,CAAA,QAAA,eAAA,mBAAA,cAUlC,MAAMO,EAAWC,EAAsB,MAajCC,EAAmBC,UACrB,OAAIP,EACOA,EAAiBO,GAEL,QAAhBV,EAAAU,aAAI,EAAJA,EAAMC,kBAAU,IAAAX,EAAAA,EAAI,EAAE,EAG3BY,EAAmB,CAACC,EAAmBX,IACrCW,EAAYX,EACL,iBACAW,IAAcX,EACd,eAEA,gBAITY,EAAQ,CAACD,EAAmBX,IACvBa,EACH,GAAGH,EAAiBC,EAAWX,MAAiBW,KAOxD,IAAKZ,EAAMe,OAAQ,OAAO,KAgF1B,OACIC,uBAAKb,UAAWc,EAAKC,EAAgBf,IAAgBC,EAAU,CAAAe,SAAA,CAC3DC,EAAA,MAAA,CAAKjB,UAAWkB,EAAcF,SA/E3BnB,EAAMsB,KAAI,CAACC,EAASX,KAEvB,MAAMY,EAAcZ,GAAaX,EAEjC,OACImB,EAAA,MAAA,CAEIK,GAAIZ,EAAMD,EAAWX,GACrBE,UAAWuB,EAAgBP,SAE3BC,EAAA,MAAA,CACIjB,UAAWc,EACPU,EACAH,GAAeI,MAPlBhB,EAUH,MAgEVQ,SAAKjB,UAAWkB,EAAcF,SACzBb,EA3BLU,EAAA,MAAA,CAEIS,GAAIZ,EAAMZ,EAAcA,GACxBE,UAAWuB,EAAgBP,SAAA,CAE3BH,EAACa,EAAWC,QACR3B,UAAW4B,EACXC,OAAQ,WACRP,GAAI,GAAGZ,EAAMZ,EAAcA,+BAErBA,EAAe,EAAC,OAAMD,EAAMe,UAEtCK,EAACS,EAAWC,QACR3B,UAAW4B,EACXC,OAAQ,UACRP,GAAI,GAAGZ,EAAMZ,EAAcA,oBAE1BO,EAAgBR,EAAMC,QAhBtBA,GAjCND,EAAMsB,KAAI,CAACC,EAASX,KACvB,MAAMY,EAAcZ,GAAaX,EAC3BgC,EAAUrB,IAAcX,EACxBiC,EAAaD,EAAU,OAAS,UAEtC,OACIb,EAAA,MAAA,CAEIK,GAAI,GAAGZ,EAAMD,EAAWX,WACxBE,UAAWuB,EAAgBP,SAE3BH,EAACa,EAAWC,OAAM,CACd3B,UAAWc,EACPkB,EACAX,GACIY,GAERJ,OAAQE,EAAU,eACJD,EAAOd,SAAA,CAEpBX,EAAgBe,GACjBH,EAACiB,EAAc,CAAAlB,SACVR,EAAiBC,EAAWX,SAfhCW,EAkBH,SAoCR"}
@@ -1,6 +1,24 @@
1
+ /**
2
+ * Props for the `ProgressIndicator` component.
3
+ *
4
+ * The type parameter `T` represents the shape of each step item in the
5
+ * `steps` array.
6
+ */
1
7
  export interface ProgressIndicatorProps<T> {
8
+ /**
9
+ * Ordered list of step items to render as progress bars and labels.
10
+ */
2
11
  steps: T[];
12
+ /**
13
+ * Zero-based index of the current active step.
14
+ * All steps at or before this index are visually highlighted.
15
+ */
3
16
  currentIndex: number;
17
+ /**
18
+ * Derives the display label for a step item.
19
+ *
20
+ * @remarks Falls back to `item.toString()` when omitted.
21
+ */
4
22
  displayExtractor?: ((item: T) => string) | undefined;
5
23
  className?: string | undefined;
6
24
  id?: string | undefined;
@@ -1,2 +1,7 @@
1
1
  import type { RadioButtonProps } from "./types";
2
+ /**
3
+ * A single radio button input.
4
+ *
5
+ * Use `RadioButton` as an input within a radio group.
6
+ */
2
7
  export declare const RadioButton: ({ className, checked, disabled, displaySize, focusableWhenDisabled, onChange, tabIndex, ...otherProps }: RadioButtonProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"radio-button.js","sources":["../../src/radio-button/radio-button.tsx"],"sourcesContent":["import { CircleDotIcon, CircleIcon } from \"@lifesg/react-icons\";\nimport clsx from \"clsx\";\nimport type { ChangeEvent } from \"react\";\n\nimport * as styles from \"./radio-button.styles\";\nimport type { RadioButtonProps } from \"./types\";\n\nexport const RadioButton = ({\n className,\n checked,\n disabled,\n displaySize = \"default\",\n focusableWhenDisabled,\n onChange,\n tabIndex,\n ...otherProps\n}: RadioButtonProps) => {\n // =============================================================================\n // CONST\n // =============================================================================\n const isFocusableWhenDisabled = !!disabled && !!focusableWhenDisabled;\n const isNativeDisabled = !!disabled && !focusableWhenDisabled;\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleOnChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n onChange?.(event);\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n const renderIcon = () => {\n return checked ? (\n <CircleDotIcon\n data-testid=\"radio-checked\"\n className={clsx(\n styles.icon,\n disabled ? styles.checkedIconDisabled : styles.checkedIcon\n )}\n aria-hidden\n />\n ) : (\n <CircleIcon\n data-testid=\"radio-unchecked\"\n className={clsx(\n styles.icon,\n disabled\n ? styles.uncheckedIconDisabled\n : styles.uncheckedIcon\n )}\n aria-hidden\n />\n );\n };\n\n return (\n <div\n className={clsx(styles.container, className)}\n data-display-size={displaySize}\n data-testid=\"radio-button\"\n >\n <input\n type=\"radio\"\n data-testid=\"radio-input\"\n onChange={handleOnChange}\n checked={checked}\n disabled={isNativeDisabled}\n aria-disabled={isFocusableWhenDisabled}\n tabIndex={isFocusableWhenDisabled ? 0 : tabIndex}\n className={clsx(styles.input, !disabled && styles.inputActive)}\n {...otherProps}\n />\n {renderIcon()}\n </div>\n );\n};\n"],"names":["RadioButton","_a","className","checked","disabled","displaySize","focusableWhenDisabled","onChange","tabIndex","otherProps","__rest","isFocusableWhenDisabled","isNativeDisabled","_jsxs","clsx","styles.container","children","_jsx","Object","assign","type","event","preventDefault","styles.input","styles.inputActive","CircleDotIcon","styles.icon","styles.checkedIconDisabled","styles.checkedIcon","CircleIcon","styles.uncheckedIconDisabled","styles.uncheckedIcon"],"mappings":"4WAOO,MAAMA,EAAeC,QAAAC,UACxBA,EAASC,QACTA,EAAOC,SACPA,EAAQC,YACRA,EAAc,UAASC,sBACvBA,EAAqBC,SACrBA,EAAQC,SACRA,GAAQP,EACLQ,EAAUC,EAAAT,EARW,gGAaxB,MAAMU,IAA4BP,KAAcE,EAC1CM,IAAqBR,IAAaE,EAyCxC,OACIO,EAAA,MAAA,CACIX,UAAWY,EAAKC,EAAkBb,GAAU,oBACzBG,gBACP,eAAcW,SAAA,CAE1BC,EAAA,QAAAC,OAAAC,OAAA,CACIC,KAAK,QAAO,cACA,cACZb,SA7CYc,IAChBjB,EACAiB,EAAMC,iBAIVf,SAAAA,EAAWc,EAAM,EAwCTlB,QAASA,EACTC,SAAUQ,EAAgB,gBACXD,EACfH,SAAUG,EAA0B,EAAIH,EACxCN,UAAWY,EAAKS,GAAenB,GAAYoB,IACvCf,IAtCLN,EACHc,EAACQ,EAAa,CAAA,cACE,gBACZvB,UAAWY,EACPY,EACAtB,EAAWuB,EAA6BC,sBAKhDX,EAACY,EAAU,CAAA,cACK,kBACZ3B,UAAWY,EACPY,EACAtB,EACM0B,EACAC,GACT,eAAA,MAwBH"}
1
+ {"version":3,"file":"radio-button.js","sources":["../../src/radio-button/radio-button.tsx"],"sourcesContent":["import { CircleDotIcon, CircleIcon } from \"@lifesg/react-icons\";\nimport clsx from \"clsx\";\nimport type { ChangeEvent } from \"react\";\n\nimport * as styles from \"./radio-button.styles\";\nimport type { RadioButtonProps } from \"./types\";\n\n// @catalog\n/**\n * A single radio button input.\n *\n * Use `RadioButton` as an input within a radio group.\n */\nexport const RadioButton = ({\n className,\n checked,\n disabled,\n displaySize = \"default\",\n focusableWhenDisabled,\n onChange,\n tabIndex,\n ...otherProps\n}: RadioButtonProps) => {\n // =============================================================================\n // CONST\n // =============================================================================\n const isFocusableWhenDisabled = !!disabled && !!focusableWhenDisabled;\n const isNativeDisabled = !!disabled && !focusableWhenDisabled;\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleOnChange = (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n onChange?.(event);\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n const renderIcon = () => {\n return checked ? (\n <CircleDotIcon\n data-testid=\"radio-checked\"\n className={clsx(\n styles.icon,\n disabled ? styles.checkedIconDisabled : styles.checkedIcon\n )}\n aria-hidden\n />\n ) : (\n <CircleIcon\n data-testid=\"radio-unchecked\"\n className={clsx(\n styles.icon,\n disabled\n ? styles.uncheckedIconDisabled\n : styles.uncheckedIcon\n )}\n aria-hidden\n />\n );\n };\n\n return (\n <div\n className={clsx(styles.container, className)}\n data-display-size={displaySize}\n data-testid=\"radio-button\"\n >\n <input\n type=\"radio\"\n data-testid=\"radio-input\"\n onChange={handleOnChange}\n checked={checked}\n disabled={isNativeDisabled}\n aria-disabled={isFocusableWhenDisabled}\n tabIndex={isFocusableWhenDisabled ? 0 : tabIndex}\n className={clsx(styles.input, !disabled && styles.inputActive)}\n {...otherProps}\n />\n {renderIcon()}\n </div>\n );\n};\n"],"names":["RadioButton","_a","className","checked","disabled","displaySize","focusableWhenDisabled","onChange","tabIndex","otherProps","__rest","isFocusableWhenDisabled","isNativeDisabled","_jsxs","clsx","styles.container","children","_jsx","Object","assign","type","event","preventDefault","styles.input","styles.inputActive","CircleDotIcon","styles.icon","styles.checkedIconDisabled","styles.checkedIcon","CircleIcon","styles.uncheckedIconDisabled","styles.uncheckedIcon"],"mappings":"4WAaO,MAAMA,EAAeC,QAAAC,UACxBA,EAASC,QACTA,EAAOC,SACPA,EAAQC,YACRA,EAAc,UAASC,sBACvBA,EAAqBC,SACrBA,EAAQC,SACRA,GAAQP,EACLQ,EAAUC,EAAAT,EARW,gGAaxB,MAAMU,IAA4BP,KAAcE,EAC1CM,IAAqBR,IAAaE,EAyCxC,OACIO,EAAA,MAAA,CACIX,UAAWY,EAAKC,EAAkBb,GAAU,oBACzBG,gBACP,eAAcW,SAAA,CAE1BC,EAAA,QAAAC,OAAAC,OAAA,CACIC,KAAK,QAAO,cACA,cACZb,SA7CYc,IAChBjB,EACAiB,EAAMC,iBAIVf,SAAAA,EAAWc,EAAM,EAwCTlB,QAASA,EACTC,SAAUQ,EAAgB,gBACXD,EACfH,SAAUG,EAA0B,EAAIH,EACxCN,UAAWY,EAAKS,GAAenB,GAAYoB,IACvCf,IAtCLN,EACHc,EAACQ,EAAa,CAAA,cACE,gBACZvB,UAAWY,EACPY,EACAtB,EAAWuB,EAA6BC,sBAKhDX,EAACY,EAAU,CAAA,cACK,kBACZ3B,UAAWY,EACPY,EACAtB,EACM0B,EACAC,GACT,eAAA,MAwBH"}
@@ -1,5 +1,19 @@
1
+ /** Visual size variant for the radio button. */
1
2
  export type RadioButtonSize = "small" | "default";
3
+ /** Props for the `RadioButton` component. */
2
4
  export interface RadioButtonProps extends React.InputHTMLAttributes<HTMLInputElement> {
5
+ /** The selected state of the component */
6
+ checked?: boolean | undefined;
7
+ disabled?: boolean | undefined;
8
+ /**
9
+ * Visual size of the radio button icon.
10
+ *
11
+ * @default "default"
12
+ */
3
13
  displaySize?: RadioButtonSize | undefined;
14
+ /**
15
+ * When `true` and `disabled` is also `true`, the radio button remains
16
+ * keyboard-focusable. `onChange` is still suppressed.
17
+ */
4
18
  focusableWhenDisabled?: boolean | undefined;
5
19
  }
@@ -0,0 +1,18 @@
1
+ import type { RefObject } from "react";
2
+ /** Shared props passed to the day-view and week-view sub-components. */
3
+ export interface CommonScheduleViewProps {
4
+ /** The currently displayed date in `YYYY-MM-DD` format. */
5
+ date: string;
6
+ /** Whether the schedule is in a loading state. */
7
+ loading: boolean;
8
+ /** Earliest visible time in `HH:mm` format. */
9
+ minTime: string;
10
+ /** Latest visible time in `HH:mm` format. */
11
+ maxTime: string;
12
+ /** Time in `HH:mm` format to scroll into view on mount. */
13
+ initialScrollTime?: string | undefined;
14
+ /** Ref to the scrollable container element. */
15
+ containerRef: RefObject<HTMLDivElement>;
16
+ /** Message displayed inside blocked time slots. */
17
+ blockedMessage?: string | undefined;
18
+ }
@@ -1,4 +1,5 @@
1
- import type { CommonScheduleViewProps, ScheduleEmptySlotProps, ScheduleEntityProps, SchedulePopoverProps } from "../types";
1
+ import type { CommonScheduleViewProps } from "../internal-types";
2
+ import type { ScheduleEmptySlotProps, ScheduleEntityProps, SchedulePopoverProps } from "../types";
2
3
  export interface ScheduleDayViewProps extends CommonScheduleViewProps {
3
4
  serviceData: ScheduleEntityProps[];
4
5
  isMobile: boolean;
@@ -1,4 +1,5 @@
1
- import type { CommonScheduleViewProps, ScheduleEntityProps, ScheduleSlotProps } from "../types";
1
+ import type { CommonScheduleViewProps } from "../internal-types";
2
+ import type { ScheduleEntityProps, ScheduleSlotProps } from "../types";
2
3
  export interface ScheduleWeekViewProps extends CommonScheduleViewProps {
3
4
  serviceData: ScheduleEntityProps[];
4
5
  onSlotClick?: (data: ScheduleSlotProps, e: React.MouseEvent) => void | undefined;
@@ -1,2 +1,5 @@
1
1
  import type { ScheduleProps } from "./types";
2
+ /**
3
+ * A grid visualisation of slot-based time availability for services across day and week views.
4
+ */
2
5
  export declare const Schedule: ({ id, className, view, date, serviceData, loading, minTime, maxTime, initialScrollTime, minDate, maxDate, emptyContentMessage, emptySlotPopover, onPreviousDayClick, onNextDayClick, onCalendarDateSelect, onTodayClick, onEmptySlotClick, blockedMessage, onClickHiddenSlots, "data-testid": testId, ...otherProps }: ScheduleProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","sources":["../../src/schedule/schedule.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { isEmpty } from \"lodash\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { ErrorDisplay } from \"../error-display\";\nimport { useMaxWidthMediaQuery } from \"../theme\";\nimport * as styles from \"./schedule.styles\";\nimport { ScheduleDayView } from \"./schedule-day-view/schedule-day-view\";\nimport { ScheduleHeader } from \"./schedule-header/schedule-header\";\nimport { ScheduleWeekView } from \"./schedule-week-view/schedule-week-view\";\nimport type { CommonScheduleViewProps, ScheduleProps } from \"./types\";\n\nexport const Schedule = ({\n id,\n className,\n view = \"day\",\n date,\n serviceData,\n loading = false,\n minTime = \"00:00\",\n maxTime = \"23:59\",\n initialScrollTime = minTime,\n minDate,\n maxDate,\n emptyContentMessage,\n emptySlotPopover,\n onPreviousDayClick,\n onNextDayClick,\n onCalendarDateSelect,\n onTodayClick,\n onEmptySlotClick,\n blockedMessage,\n onClickHiddenSlots,\n \"data-testid\": testId = \"schedule\",\n ...otherProps\n}: ScheduleProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [currentView, setCurrentView] = useState<\"day\" | \"week\">(view);\n const isSmallScreen = useMaxWidthMediaQuery(\"lg\");\n const effectiveView = isSmallScreen ? \"day\" : currentView;\n const contentContainerRef = useRef<HTMLDivElement>(null);\n const [visibleServiceIdx, setVisibleServiceIdx] = useState(0);\n const isEmptyContent = serviceData.length === 0 || isEmpty(serviceData);\n const filteredServiceData = useMemo(\n () =>\n serviceData.map((service) => ({\n ...service,\n slots: service.slots.filter((slot) => slot.date === date),\n })),\n [serviceData, date]\n );\n let visibleServiceData = filteredServiceData;\n if (isSmallScreen) {\n visibleServiceData =\n filteredServiceData.length > 0\n ? [filteredServiceData[visibleServiceIdx]]\n : [];\n }\n const showPrevArrow = isSmallScreen && visibleServiceIdx > 0;\n const showNextArrow =\n isSmallScreen && visibleServiceIdx < filteredServiceData.length - 1;\n\n useEffect(() => {\n setVisibleServiceIdx(0);\n }, [filteredServiceData]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleViewChange = (newView: \"day\" | \"week\") => {\n setCurrentView(newView);\n };\n\n const handleTodayClick = useCallback(() => {\n onTodayClick?.();\n }, [onTodayClick]);\n\n const handleNextService = useCallback(() => {\n if (!filteredServiceData) return;\n setVisibleServiceIdx((idx) =>\n idx < filteredServiceData.length - 1 ? idx + 1 : idx\n );\n }, [filteredServiceData]);\n\n const handlePrevService = useCallback(() => {\n setVisibleServiceIdx((idx) => (idx > 0 ? idx - 1 : idx));\n }, []);\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n\n const renderEmptyContent = () => (\n <div className={clsx(styles.emptyTableContainer, \"empty-container\")}>\n <ErrorDisplay\n className={styles.noResultsFound}\n type=\"no-item-found\"\n description={emptyContentMessage}\n />\n </div>\n );\n\n const commonScheduleViewProps: CommonScheduleViewProps = {\n date,\n loading,\n minTime,\n maxTime,\n initialScrollTime,\n containerRef: contentContainerRef,\n blockedMessage,\n };\n\n const renderScheduleView = () => (\n <div\n className={styles.scheduleBodyContainer}\n ref={contentContainerRef}\n data-id=\"schedule-container\"\n >\n {effectiveView === \"day\" ? (\n <ScheduleDayView\n {...commonScheduleViewProps}\n serviceData={visibleServiceData}\n emptySlotPopover={emptySlotPopover}\n isMobile={isSmallScreen}\n onNextService={handleNextService}\n onPrevService={handlePrevService}\n showPrevArrow={showPrevArrow}\n showNextArrow={showNextArrow}\n onEmptySlotClick={onEmptySlotClick}\n />\n ) : (\n <ScheduleWeekView\n {...commonScheduleViewProps}\n serviceData={serviceData}\n onClickHiddenSlots={onClickHiddenSlots}\n />\n )}\n </div>\n );\n\n return (\n <div\n id={id}\n className={clsx(\n styles.container,\n loading && styles.containerLoading,\n className\n )}\n data-testid={testId}\n {...otherProps}\n >\n <ScheduleHeader\n data-id=\"schedule-header\"\n date={date}\n view={effectiveView}\n minDate={minDate}\n maxDate={maxDate}\n onPreviousDayClick={onPreviousDayClick}\n onNextDayClick={onNextDayClick}\n onCalendarDateSelect={onCalendarDateSelect}\n onViewChange={handleViewChange}\n onTodayClick={handleTodayClick}\n />\n\n {isEmptyContent ? renderEmptyContent() : renderScheduleView()}\n </div>\n );\n};\n"],"names":["Schedule","_a","id","className","view","date","serviceData","loading","minTime","maxTime","initialScrollTime","minDate","maxDate","emptyContentMessage","emptySlotPopover","onPreviousDayClick","onNextDayClick","onCalendarDateSelect","onTodayClick","onEmptySlotClick","blockedMessage","onClickHiddenSlots","testId","otherProps","__rest","currentView","setCurrentView","useState","isSmallScreen","useMaxWidthMediaQuery","effectiveView","contentContainerRef","useRef","visibleServiceIdx","setVisibleServiceIdx","isEmptyContent","length","isEmpty","filteredServiceData","useMemo","map","service","slots","filter","slot","visibleServiceData","showPrevArrow","showNextArrow","useEffect","handleTodayClick","useCallback","handleNextService","idx","handlePrevService","commonScheduleViewProps","containerRef","_jsxs","Object","assign","clsx","styles.container","styles.containerLoading","children","_jsx","ScheduleHeader","onViewChange","newView","styles.emptyTableContainer","ErrorDisplay","styles.noResultsFound","type","description","styles.scheduleBodyContainer","ref","ScheduleDayView","isMobile","onNextService","onPrevService","ScheduleWeekView"],"mappings":"6oCAYO,MAAMA,EAAYC,IAAA,IAAAC,GACrBA,EAAEC,UACFA,EAASC,KACTA,EAAO,MAAKC,KACZA,EAAIC,YACJA,EAAWC,QACXA,GAAU,EAAKC,QACfA,EAAU,QAAOC,QACjBA,EAAU,QAAOC,kBACjBA,EAAoBF,EAAOG,QAC3BA,EAAOC,QACPA,EAAOC,oBACPA,EAAmBC,iBACnBA,EAAgBC,mBAChBA,EAAkBC,eAClBA,EAAcC,qBACdA,EAAoBC,aACpBA,EAAYC,iBACZA,EAAgBC,eAChBA,EAAcC,mBACdA,EACA,cAAeC,EAAS,YAAUrB,EAC/BsB,EAAUC,EAAAvB,EAtBQ,CAAA,KAAA,YAAA,OAAA,OAAA,cAAA,UAAA,UAAA,UAAA,oBAAA,UAAA,UAAA,sBAAA,mBAAA,qBAAA,iBAAA,uBAAA,eAAA,mBAAA,iBAAA,qBAAA,gBA2BrB,MAAOwB,EAAaC,GAAkBC,EAAyBvB,GACzDwB,EAAgBC,EAAsB,MACtCC,EAAgBF,EAAgB,MAAQH,EACxCM,EAAsBC,EAAuB,OAC5CC,EAAmBC,GAAwBP,EAAS,GACrDQ,EAAwC,IAAvB7B,EAAY8B,QAAgBC,EAAAA,QAAQ/B,GACrDgC,EAAsBC,GACxB,IACIjC,EAAYkC,KAAKC,kCACVA,GAAO,CACVC,MAAOD,EAAQC,MAAMC,QAAQC,GAASA,EAAKvC,OAASA,SAE5D,CAACC,EAAaD,IAElB,IAAIwC,EAAqBP,EACrBV,IACAiB,EACIP,EAAoBF,OAAS,EACvB,CAACE,EAAoBL,IACrB,IAEd,MAAMa,EAAgBlB,GAAiBK,EAAoB,EACrDc,GACFnB,GAAiBK,EAAoBK,EAAoBF,OAAS,EAEtEY,GAAU,KACNd,EAAqB,EAAE,GACxB,CAACI,IAKJ,MAIMW,GAAmBC,GAAY,KACjChC,SAAAA,GAAgB,GACjB,CAACA,IAEEiC,GAAoBD,GAAY,KAC7BZ,GACLJ,GAAsBkB,GAClBA,EAAMd,EAAoBF,OAAS,EAAIgB,EAAM,EAAIA,GACpD,GACF,CAACd,IAEEe,GAAoBH,GAAY,KAClChB,GAAsBkB,GAASA,EAAM,EAAIA,EAAM,EAAIA,GAAK,GACzD,IAgBGE,GAAmD,CACrDjD,OACAE,UACAC,UACAC,UACAC,oBACA6C,aAAcxB,EACdX,kBA+BJ,OACIoC,EAAA,MAAAC,OAAAC,OAAA,CACIxD,GAAIA,EACJC,UAAWwD,EACPC,EACArD,GAAWsD,EACX1D,GACH,cACYmB,GACTC,EAAU,CAAAuC,SAAA,CAEdC,EAACC,EAAc,CAAA,UACH,kBACR3D,KAAMA,EACND,KAAM0B,EACNnB,QAASA,EACTC,QAASA,EACTG,mBAAoBA,EACpBC,eAAgBA,EAChBC,qBAAsBA,EACtBgD,aA3FcC,IACtBxC,EAAewC,EAAQ,EA2FfhD,aAAc+B,KApEtBc,EAAA,MAuEK5B,EAvEL,CAAKhC,UAAWwD,EAAKQ,EAA4B,mBAAkBL,SAC/DC,EAACK,GACGjE,UAAWkE,EACXC,KAAK,gBACLC,YAAa1D,MAiBjBV,UAAWqE,EACXC,IAAK1C,EAAmB,UAChB,qBAAoB+B,SAET,QAAlBhC,EACGiC,EAACW,mBACOpB,GAAuB,CAC3BhD,YAAauC,EACb/B,iBAAkBA,EAClB6D,SAAU/C,EACVgD,cAAezB,GACf0B,cAAexB,GACfP,cAAeA,EACfC,cAAeA,GACf5B,iBAAkBA,KAGtB4C,EAACe,EAAgBrB,OAAAC,OAAA,CAAA,EACTJ,IACJhD,YAAaA,EACbe,mBAAoBA,UA+B1B"}
1
+ {"version":3,"file":"schedule.js","sources":["../../src/schedule/schedule.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport { isEmpty } from \"lodash\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { ErrorDisplay } from \"../error-display\";\nimport { useMaxWidthMediaQuery } from \"../theme\";\nimport type { CommonScheduleViewProps } from \"./internal-types\";\nimport * as styles from \"./schedule.styles\";\nimport { ScheduleDayView } from \"./schedule-day-view/schedule-day-view\";\nimport { ScheduleHeader } from \"./schedule-header/schedule-header\";\nimport { ScheduleWeekView } from \"./schedule-week-view/schedule-week-view\";\nimport type { ScheduleProps } from \"./types\";\n\n// @catalog\n/**\n * A grid visualisation of slot-based time availability for services across day and week views.\n */\nexport const Schedule = ({\n id,\n className,\n view = \"day\",\n date,\n serviceData,\n loading = false,\n minTime = \"00:00\",\n maxTime = \"23:59\",\n initialScrollTime = minTime,\n minDate,\n maxDate,\n emptyContentMessage,\n emptySlotPopover,\n onPreviousDayClick,\n onNextDayClick,\n onCalendarDateSelect,\n onTodayClick,\n onEmptySlotClick,\n blockedMessage,\n onClickHiddenSlots,\n \"data-testid\": testId = \"schedule\",\n ...otherProps\n}: ScheduleProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [currentView, setCurrentView] = useState<\"day\" | \"week\">(view);\n const isSmallScreen = useMaxWidthMediaQuery(\"lg\");\n const effectiveView = isSmallScreen ? \"day\" : currentView;\n const contentContainerRef = useRef<HTMLDivElement>(null);\n const [visibleServiceIdx, setVisibleServiceIdx] = useState(0);\n const isEmptyContent = serviceData.length === 0 || isEmpty(serviceData);\n const filteredServiceData = useMemo(\n () =>\n serviceData.map((service) => ({\n ...service,\n slots: service.slots.filter((slot) => slot.date === date),\n })),\n [serviceData, date]\n );\n let visibleServiceData = filteredServiceData;\n if (isSmallScreen) {\n visibleServiceData =\n filteredServiceData.length > 0\n ? [filteredServiceData[visibleServiceIdx]]\n : [];\n }\n const showPrevArrow = isSmallScreen && visibleServiceIdx > 0;\n const showNextArrow =\n isSmallScreen && visibleServiceIdx < filteredServiceData.length - 1;\n\n useEffect(() => {\n setVisibleServiceIdx(0);\n }, [filteredServiceData]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleViewChange = (newView: \"day\" | \"week\") => {\n setCurrentView(newView);\n };\n\n const handleTodayClick = useCallback(() => {\n onTodayClick?.();\n }, [onTodayClick]);\n\n const handleNextService = useCallback(() => {\n if (!filteredServiceData) return;\n setVisibleServiceIdx((idx) =>\n idx < filteredServiceData.length - 1 ? idx + 1 : idx\n );\n }, [filteredServiceData]);\n\n const handlePrevService = useCallback(() => {\n setVisibleServiceIdx((idx) => (idx > 0 ? idx - 1 : idx));\n }, []);\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n\n const renderEmptyContent = () => (\n <div className={clsx(styles.emptyTableContainer, \"empty-container\")}>\n <ErrorDisplay\n className={styles.noResultsFound}\n type=\"no-item-found\"\n description={emptyContentMessage}\n />\n </div>\n );\n\n const commonScheduleViewProps: CommonScheduleViewProps = {\n date,\n loading,\n minTime,\n maxTime,\n initialScrollTime,\n containerRef: contentContainerRef,\n blockedMessage,\n };\n\n const renderScheduleView = () => (\n <div\n className={styles.scheduleBodyContainer}\n ref={contentContainerRef}\n data-id=\"schedule-container\"\n >\n {effectiveView === \"day\" ? (\n <ScheduleDayView\n {...commonScheduleViewProps}\n serviceData={visibleServiceData}\n emptySlotPopover={emptySlotPopover}\n isMobile={isSmallScreen}\n onNextService={handleNextService}\n onPrevService={handlePrevService}\n showPrevArrow={showPrevArrow}\n showNextArrow={showNextArrow}\n onEmptySlotClick={onEmptySlotClick}\n />\n ) : (\n <ScheduleWeekView\n {...commonScheduleViewProps}\n serviceData={serviceData}\n onClickHiddenSlots={onClickHiddenSlots}\n />\n )}\n </div>\n );\n\n return (\n <div\n id={id}\n className={clsx(\n styles.container,\n loading && styles.containerLoading,\n className\n )}\n data-testid={testId}\n {...otherProps}\n >\n <ScheduleHeader\n data-id=\"schedule-header\"\n date={date}\n view={effectiveView}\n minDate={minDate}\n maxDate={maxDate}\n onPreviousDayClick={onPreviousDayClick}\n onNextDayClick={onNextDayClick}\n onCalendarDateSelect={onCalendarDateSelect}\n onViewChange={handleViewChange}\n onTodayClick={handleTodayClick}\n />\n\n {isEmptyContent ? renderEmptyContent() : renderScheduleView()}\n </div>\n );\n};\n"],"names":["Schedule","_a","id","className","view","date","serviceData","loading","minTime","maxTime","initialScrollTime","minDate","maxDate","emptyContentMessage","emptySlotPopover","onPreviousDayClick","onNextDayClick","onCalendarDateSelect","onTodayClick","onEmptySlotClick","blockedMessage","onClickHiddenSlots","testId","otherProps","__rest","currentView","setCurrentView","useState","isSmallScreen","useMaxWidthMediaQuery","effectiveView","contentContainerRef","useRef","visibleServiceIdx","setVisibleServiceIdx","isEmptyContent","length","isEmpty","filteredServiceData","useMemo","map","service","slots","filter","slot","visibleServiceData","showPrevArrow","showNextArrow","useEffect","handleTodayClick","useCallback","handleNextService","idx","handlePrevService","commonScheduleViewProps","containerRef","_jsxs","Object","assign","clsx","styles.container","styles.containerLoading","children","_jsx","ScheduleHeader","onViewChange","newView","styles.emptyTableContainer","ErrorDisplay","styles.noResultsFound","type","description","styles.scheduleBodyContainer","ref","ScheduleDayView","isMobile","onNextService","onPrevService","ScheduleWeekView"],"mappings":"6oCAiBO,MAAMA,EAAYC,IAAA,IAAAC,GACrBA,EAAEC,UACFA,EAASC,KACTA,EAAO,MAAKC,KACZA,EAAIC,YACJA,EAAWC,QACXA,GAAU,EAAKC,QACfA,EAAU,QAAOC,QACjBA,EAAU,QAAOC,kBACjBA,EAAoBF,EAAOG,QAC3BA,EAAOC,QACPA,EAAOC,oBACPA,EAAmBC,iBACnBA,EAAgBC,mBAChBA,EAAkBC,eAClBA,EAAcC,qBACdA,EAAoBC,aACpBA,EAAYC,iBACZA,EAAgBC,eAChBA,EAAcC,mBACdA,EACA,cAAeC,EAAS,YAAUrB,EAC/BsB,EAAUC,EAAAvB,EAtBQ,CAAA,KAAA,YAAA,OAAA,OAAA,cAAA,UAAA,UAAA,UAAA,oBAAA,UAAA,UAAA,sBAAA,mBAAA,qBAAA,iBAAA,uBAAA,eAAA,mBAAA,iBAAA,qBAAA,gBA2BrB,MAAOwB,EAAaC,GAAkBC,EAAyBvB,GACzDwB,EAAgBC,EAAsB,MACtCC,EAAgBF,EAAgB,MAAQH,EACxCM,EAAsBC,EAAuB,OAC5CC,EAAmBC,GAAwBP,EAAS,GACrDQ,EAAwC,IAAvB7B,EAAY8B,QAAgBC,EAAAA,QAAQ/B,GACrDgC,EAAsBC,GACxB,IACIjC,EAAYkC,KAAKC,kCACVA,GAAO,CACVC,MAAOD,EAAQC,MAAMC,QAAQC,GAASA,EAAKvC,OAASA,SAE5D,CAACC,EAAaD,IAElB,IAAIwC,EAAqBP,EACrBV,IACAiB,EACIP,EAAoBF,OAAS,EACvB,CAACE,EAAoBL,IACrB,IAEd,MAAMa,EAAgBlB,GAAiBK,EAAoB,EACrDc,GACFnB,GAAiBK,EAAoBK,EAAoBF,OAAS,EAEtEY,GAAU,KACNd,EAAqB,EAAE,GACxB,CAACI,IAKJ,MAIMW,GAAmBC,GAAY,KACjChC,SAAAA,GAAgB,GACjB,CAACA,IAEEiC,GAAoBD,GAAY,KAC7BZ,GACLJ,GAAsBkB,GAClBA,EAAMd,EAAoBF,OAAS,EAAIgB,EAAM,EAAIA,GACpD,GACF,CAACd,IAEEe,GAAoBH,GAAY,KAClChB,GAAsBkB,GAASA,EAAM,EAAIA,EAAM,EAAIA,GAAK,GACzD,IAgBGE,GAAmD,CACrDjD,OACAE,UACAC,UACAC,UACAC,oBACA6C,aAAcxB,EACdX,kBA+BJ,OACIoC,EAAA,MAAAC,OAAAC,OAAA,CACIxD,GAAIA,EACJC,UAAWwD,EACPC,EACArD,GAAWsD,EACX1D,GACH,cACYmB,GACTC,EAAU,CAAAuC,SAAA,CAEdC,EAACC,EAAc,CAAA,UACH,kBACR3D,KAAMA,EACND,KAAM0B,EACNnB,QAASA,EACTC,QAASA,EACTG,mBAAoBA,EACpBC,eAAgBA,EAChBC,qBAAsBA,EACtBgD,aA3FcC,IACtBxC,EAAewC,EAAQ,EA2FfhD,aAAc+B,KApEtBc,EAAA,MAuEK5B,EAvEL,CAAKhC,UAAWwD,EAAKQ,EAA4B,mBAAkBL,SAC/DC,EAACK,GACGjE,UAAWkE,EACXC,KAAK,gBACLC,YAAa1D,MAiBjBV,UAAWqE,EACXC,IAAK1C,EAAmB,UAChB,qBAAoB+B,SAET,QAAlBhC,EACGiC,EAACW,mBACOpB,GAAuB,CAC3BhD,YAAauC,EACb/B,iBAAkBA,EAClB6D,SAAU/C,EACVgD,cAAezB,GACf0B,cAAexB,GACfP,cAAeA,EACfC,cAAeA,GACf5B,iBAAkBA,KAGtB4C,EAACe,EAAgBrB,OAAAC,OAAA,CAAA,EACTJ,IACJhD,YAAaA,EACbe,mBAAoBA,UA+B1B"}
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import"../../_virtual/_tslib.js";import"clsx";import"react";import"../../theme/theme-provider/context.js";import"../../typography/typography.js";import"../../card/card.styles_1gh9gs3.css";import"../../markup/markup.js";import"../../modal-v2/index.js";import"../../theme/theme-provider/index.js";import"../../theme/tokens/border.js";import"../../theme/tokens/colour.js";import"../../theme/tokens/font.js";import"../../theme/tokens/media-query.js";import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import"../../theme/utils/use-media-query.js";import"../../popover/popover.styles_ujnf0h.css";import{PopoverTrigger as e}from"../../popover/popover-trigger.js";import"../../popover/popover-inline/popover-inline.styles_bkopnt.css";import{popoverTrigger as o}from"./with-optional-popover.styles.js";const r=({containerRef:r,children:i,customPopover:p})=>{if(!p)return i;const s={position:"bottom-start",rootNode:r,customOffset:p.offset,children:i,trigger:p.trigger,delay:p.delay,popoverContent:p.content};return t(e,Object.assign({className:o,zIndex:2},s))};export{r as WithOptionalPopover};
1
+ import{jsx as t}from"react/jsx-runtime";import"../../_virtual/_tslib.js";import"clsx";import"react";import"../../theme/theme-provider/context.js";import"../../typography/typography.js";import"../../card/card.styles_1gh9gs3.css";import"../../markup/markup.js";import"../../modal-v2/modal-v2.js";import"../../theme/theme-provider/index.js";import"../../theme/tokens/border.js";import"../../theme/tokens/colour.js";import"../../theme/tokens/font.js";import"../../theme/tokens/media-query.js";import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import"../../theme/utils/use-media-query.js";import"../../popover/popover.styles_ujnf0h.css";import{PopoverTrigger as e}from"../../popover/popover-trigger.js";import"../../popover/popover-inline/popover-inline.styles_bkopnt.css";import{popoverTrigger as o}from"./with-optional-popover.styles.js";const r=({containerRef:r,children:i,customPopover:p})=>{if(!p)return i;const s={position:"bottom-start",rootNode:r,customOffset:p.offset,children:i,trigger:p.trigger,delay:p.delay,popoverContent:p.content};return t(e,Object.assign({className:o,zIndex:2},s))};export{r as WithOptionalPopover};
2
2
  //# sourceMappingURL=with-optional-popover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-optional-popover.js","sources":["../../../src/schedule/shared/with-optional-popover.tsx"],"sourcesContent":["import type { RefObject } from \"react\";\n\nimport type { PopoverTriggerProps } from \"../../popover\";\nimport { PopoverTrigger } from \"../../popover\";\nimport type { SchedulePopoverProps } from \"../types\";\nimport * as styles from \"./with-optional-popover.styles\";\n\ninterface ConditionalCellWrapperProps {\n containerRef: RefObject<HTMLDivElement>;\n children: JSX.Element;\n customPopover?: SchedulePopoverProps;\n}\n\nexport const WithOptionalPopover = ({\n containerRef,\n children,\n customPopover,\n}: ConditionalCellWrapperProps) => {\n if (!customPopover) {\n return children;\n }\n\n const popoverTriggerProps: PopoverTriggerProps = {\n position: \"bottom-start\",\n rootNode: containerRef,\n customOffset: customPopover.offset,\n children: children,\n trigger: customPopover.trigger,\n delay: customPopover.delay,\n popoverContent: customPopover.content,\n };\n\n return (\n <PopoverTrigger\n className={styles.popoverTrigger}\n zIndex={2}\n {...popoverTriggerProps}\n />\n );\n};\n"],"names":["WithOptionalPopover","containerRef","children","customPopover","popoverTriggerProps","position","rootNode","customOffset","offset","trigger","delay","popoverContent","content","_jsx","PopoverTrigger","Object","assign","className","styles.popoverTrigger","zIndex"],"mappings":"g/BAaO,MAAMA,EAAsB,EAC/BC,eACAC,WACAC,oBAEA,IAAKA,EACD,OAAOD,EAGX,MAAME,EAA2C,CAC7CC,SAAU,eACVC,SAAUL,EACVM,aAAcJ,EAAcK,OAC5BN,SAAUA,EACVO,QAASN,EAAcM,QACvBC,MAAOP,EAAcO,MACrBC,eAAgBR,EAAcS,SAGlC,OACIC,EAACC,EAAcC,OAAAC,OAAA,CACXC,UAAWC,EACXC,OAAQ,GACJf,GACN"}
1
+ {"version":3,"file":"with-optional-popover.js","sources":["../../../src/schedule/shared/with-optional-popover.tsx"],"sourcesContent":["import type { RefObject } from \"react\";\n\nimport type { PopoverTriggerProps } from \"../../popover\";\nimport { PopoverTrigger } from \"../../popover\";\nimport type { SchedulePopoverProps } from \"../types\";\nimport * as styles from \"./with-optional-popover.styles\";\n\ninterface ConditionalCellWrapperProps {\n containerRef: RefObject<HTMLDivElement>;\n children: JSX.Element;\n customPopover?: SchedulePopoverProps;\n}\n\nexport const WithOptionalPopover = ({\n containerRef,\n children,\n customPopover,\n}: ConditionalCellWrapperProps) => {\n if (!customPopover) {\n return children;\n }\n\n const popoverTriggerProps: PopoverTriggerProps = {\n position: \"bottom-start\",\n rootNode: containerRef,\n customOffset: customPopover.offset,\n children: children,\n trigger: customPopover.trigger,\n delay: customPopover.delay,\n popoverContent: customPopover.content,\n };\n\n return (\n <PopoverTrigger\n className={styles.popoverTrigger}\n zIndex={2}\n {...popoverTriggerProps}\n />\n );\n};\n"],"names":["WithOptionalPopover","containerRef","children","customPopover","popoverTriggerProps","position","rootNode","customOffset","offset","trigger","delay","popoverContent","content","_jsx","PopoverTrigger","Object","assign","className","styles.popoverTrigger","zIndex"],"mappings":"m/BAaO,MAAMA,EAAsB,EAC/BC,eACAC,WACAC,oBAEA,IAAKA,EACD,OAAOD,EAGX,MAAME,EAA2C,CAC7CC,SAAU,eACVC,SAAUL,EACVM,aAAcJ,EAAcK,OAC5BN,SAAUA,EACVO,QAASN,EAAcM,QACvBC,MAAOP,EAAcO,MACrBC,eAAgBR,EAAcS,SAGlC,OACIC,EAACC,EAAcC,OAAAC,OAAA,CACXC,UAAWC,EACXC,OAAQ,GACJf,GACN"}