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

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 (954) hide show
  1. package/accordion/accordion-item.styles_1j4eb32.css +2 -2
  2. package/accordion/accordion.d.ts +19 -0
  3. package/accordion/accordion.js.map +1 -1
  4. package/accordion/accordion.styles_bzrfrs.css +2 -2
  5. package/accordion/types.d.ts +42 -2
  6. package/alert/alert.d.ts +8 -0
  7. package/alert/alert.js.map +1 -1
  8. package/alert/alert.styles_patwo2.css +2 -2
  9. package/alert/types.d.ts +26 -2
  10. package/animations/loading-dots/loading-dots.styles_1rgrrmw.css +2 -2
  11. package/animations/loading-dots/lottie-animation.styles_1m15v69.css +1 -1
  12. package/animations/loading-dots-spinner/loading-dots-spinner.styles_1hcqkhs.css +2 -2
  13. package/animations/loading-dots-spinner/lottie-animation.styles_13d1unb.css +1 -1
  14. package/animations/loading-spinner/loading-spinner.styles_n6xoft.css +2 -2
  15. package/animations/loading-spinner/lottie-animation.styles_bnn4qt.css +1 -1
  16. package/avatar/avatar.d.ts +7 -0
  17. package/avatar/avatar.js.map +1 -1
  18. package/avatar/avatar.styles_16efw4.css +2 -2
  19. package/avatar/types.d.ts +11 -0
  20. package/badge/badge.d.ts +7 -0
  21. package/badge/badge.js.map +1 -1
  22. package/badge/badge.styles_1c3c6wj.css +2 -2
  23. package/badge/types.d.ts +20 -0
  24. package/box-container/box-container.d.ts +8 -0
  25. package/box-container/box-container.js.map +1 -1
  26. package/box-container/box-container.styles_5t2j9k.css +2 -2
  27. package/box-container/types.d.ts +24 -0
  28. package/breadcrumb/breadcrumb.d.ts +7 -0
  29. package/breadcrumb/breadcrumb.js.map +1 -1
  30. package/breadcrumb/breadcrumb.styles_1nl4aua.css +2 -2
  31. package/breadcrumb/types.d.ts +31 -0
  32. package/button/button.d.ts +1 -0
  33. package/button/button.js.map +1 -1
  34. package/button/button.styles_1pxy0co.css +2 -2
  35. package/button/types.d.ts +42 -9
  36. package/calendar/calendar.d.ts +3 -0
  37. package/calendar/calendar.js.map +1 -1
  38. package/calendar/calendar.styles_11ho5x8.css +2 -2
  39. package/calendar/types.d.ts +43 -7
  40. package/card/card.d.ts +1 -0
  41. package/card/card.js.map +1 -1
  42. package/card/card.styles_1gh9gs3.css +2 -2
  43. package/card/types.d.ts +1 -0
  44. package/checkbox/checkbox.d.ts +3 -0
  45. package/checkbox/checkbox.js.map +1 -1
  46. package/checkbox/checkbox.styles_gm5bu1.css +2 -2
  47. package/checkbox/types.d.ts +19 -3
  48. package/cjs/accordion/accordion-item.styles_1j4eb32.css +2 -2
  49. package/cjs/accordion/accordion.js.map +1 -1
  50. package/cjs/accordion/accordion.styles_bzrfrs.css +2 -2
  51. package/cjs/alert/alert.js.map +1 -1
  52. package/cjs/alert/alert.styles_patwo2.css +2 -2
  53. package/cjs/animations/loading-dots/loading-dots.styles_1rgrrmw.css +2 -2
  54. package/cjs/animations/loading-dots/lottie-animation.styles_1m15v69.css +1 -1
  55. package/cjs/animations/loading-dots-spinner/loading-dots-spinner.styles_1hcqkhs.css +2 -2
  56. package/cjs/animations/loading-dots-spinner/lottie-animation.styles_13d1unb.css +1 -1
  57. package/cjs/animations/loading-spinner/loading-spinner.styles_n6xoft.css +2 -2
  58. package/cjs/animations/loading-spinner/lottie-animation.styles_bnn4qt.css +1 -1
  59. package/cjs/avatar/avatar.js.map +1 -1
  60. package/cjs/avatar/avatar.styles_16efw4.css +2 -2
  61. package/cjs/badge/badge.js.map +1 -1
  62. package/cjs/badge/badge.styles_1c3c6wj.css +2 -2
  63. package/cjs/box-container/box-container.js.map +1 -1
  64. package/cjs/box-container/box-container.styles_5t2j9k.css +2 -2
  65. package/cjs/breadcrumb/breadcrumb.js.map +1 -1
  66. package/cjs/breadcrumb/breadcrumb.styles_1nl4aua.css +2 -2
  67. package/cjs/button/button.js.map +1 -1
  68. package/cjs/button/button.styles_1pxy0co.css +2 -2
  69. package/cjs/calendar/calendar.js.map +1 -1
  70. package/cjs/calendar/calendar.styles_11ho5x8.css +2 -2
  71. package/cjs/card/card.js.map +1 -1
  72. package/cjs/card/card.styles_1gh9gs3.css +2 -2
  73. package/cjs/checkbox/checkbox.js.map +1 -1
  74. package/cjs/checkbox/checkbox.styles_gm5bu1.css +2 -2
  75. package/cjs/countdown-timer/countdown-timer.js.map +1 -1
  76. package/cjs/countdown-timer/countdown-timer.styles_ipn1b0.css +2 -2
  77. package/cjs/dashed-border/dashed-border.js.map +1 -1
  78. package/cjs/dashed-border/dashed-border.styles_zszoox.css +2 -2
  79. package/cjs/data-table/data-table.js +1 -1
  80. package/cjs/data-table/data-table.js.map +1 -1
  81. package/cjs/data-table/data-table.styles.js +1 -1
  82. package/cjs/data-table/data-table.styles.js.map +1 -1
  83. package/cjs/data-table/data-table.styles_rxganh.css +27 -0
  84. package/cjs/date-input/date-input.js.map +1 -1
  85. package/cjs/date-input/date-input.styles_1r5kcc7.css +1 -1
  86. package/cjs/date-navigator/date-navigator.js.map +1 -1
  87. package/cjs/date-navigator/date-navigator.styles_wokh56.css +2 -2
  88. package/cjs/date-range-input/date-range-input.js.map +1 -1
  89. package/cjs/date-range-input/date-range-input.styles_1s7ojnj.css +2 -2
  90. package/cjs/divider/divider.js.map +1 -1
  91. package/cjs/divider/divider.styles_1xpzh8p.css +2 -2
  92. package/cjs/drawer/drawer.js.map +1 -1
  93. package/cjs/drawer/drawer.styles_94hx3y.css +2 -2
  94. package/cjs/e-signature/e-signature-canvas.js +1 -1
  95. package/cjs/e-signature/e-signature-canvas.js.map +1 -1
  96. package/cjs/e-signature/e-signature.js.map +1 -1
  97. package/cjs/e-signature/e-signature.styles_lukd9f.css +2 -2
  98. package/cjs/error-display/error-display.js.map +1 -1
  99. package/cjs/error-display/error-display.styles_d3tql1.css +2 -2
  100. package/cjs/external/dompurify/dist/purify.es.js +3 -3
  101. package/cjs/external/dompurify/dist/purify.es.js.map +1 -1
  102. package/cjs/external/lodash/_setCacheHas.js.map +1 -1
  103. package/cjs/external/lodash/lodash.js +1 -1
  104. package/cjs/external/lodash/lodash.js.map +1 -1
  105. package/cjs/feedback-rating/feedback-rating-stars-container.styles_dmi8z9.css +2 -2
  106. package/cjs/feedback-rating/feedback-rating.js.map +1 -1
  107. package/cjs/feedback-rating/feedback-rating.styles_1kdklb6.css +2 -2
  108. package/cjs/file-download/file-download.js.map +1 -1
  109. package/cjs/file-download/file-download.styles_iggk8q.css +2 -2
  110. package/cjs/file-download/file-list-card/file-list-card.styles.js +1 -1
  111. package/cjs/file-download/file-list-card/file-list-card.styles.js.map +1 -1
  112. package/{file-download/file-list-card/file-list-card.styles_oom8ii.css → cjs/file-download/file-list-card/file-list-card.styles_18j2gut.css} +3 -3
  113. package/cjs/file-upload/dropzone.styles_1pllsau.css +2 -2
  114. package/cjs/file-upload/file-item-edit.js +1 -1
  115. package/cjs/file-upload/file-item-edit.js.map +1 -1
  116. package/cjs/file-upload/file-item-edit.styles.js +1 -1
  117. package/cjs/file-upload/file-item-edit.styles.js.map +1 -1
  118. package/cjs/file-upload/{file-item-edit.styles_1qbpbxj.css → file-item-edit.styles_19bvztn.css} +6 -5
  119. package/cjs/file-upload/file-list/file-list.js +1 -1
  120. package/cjs/file-upload/file-list/file-list.js.map +1 -1
  121. package/cjs/file-upload/file-list/file-list.styles.js +1 -1
  122. package/cjs/file-upload/file-list/file-list.styles.js.map +1 -1
  123. package/cjs/file-upload/file-list/file-list.styles_1w7so98.css +3 -0
  124. package/cjs/file-upload/file-list-item/file-list-item-thumbnail.styles_1y4si19.css +2 -2
  125. package/cjs/file-upload/file-list-item/file-list-item.js +1 -1
  126. package/cjs/file-upload/file-list-item/file-list-item.js.map +1 -1
  127. package/cjs/file-upload/file-list-item/file-list-item.styles.js +1 -1
  128. package/cjs/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  129. package/cjs/file-upload/file-list-item/file-list-item.styles_o8000f.css +17 -0
  130. package/cjs/file-upload/file-upload.js +1 -1
  131. package/cjs/file-upload/file-upload.js.map +1 -1
  132. package/cjs/file-upload/file-upload.styles_9ffwcd.css +2 -2
  133. package/cjs/filter/addons/filter-item-checkbox.styles_7degw7.css +2 -2
  134. package/cjs/filter/filter-item-page.styles_17ewfrz.css +1 -1
  135. package/cjs/filter/filter-item.js.map +1 -1
  136. package/cjs/filter/filter-item.styles_cphjnj.css +2 -2
  137. package/cjs/filter/filter-modal.styles_qw3xlg.css +2 -2
  138. package/cjs/filter/filter-sidebar.styles_1otwpjl.css +2 -2
  139. package/cjs/filter/filter.js.map +1 -1
  140. package/cjs/filter/filter.styles_1ykijwm.css +2 -2
  141. package/cjs/footer/footer-download-app.styles_1v1j2us.css +2 -2
  142. package/cjs/footer/footer-resource-addon.styles_1jepb1d.css +2 -2
  143. package/cjs/footer/footer.js +1 -1
  144. package/cjs/footer/footer.js.map +1 -1
  145. package/cjs/footer/footer.styles_1msorhc.css +2 -2
  146. package/cjs/form/form-label-addon.js +1 -1
  147. package/cjs/form/form-label-addon.js.map +1 -1
  148. package/cjs/form/form-label-addon.styles_b00z8p.css +1 -1
  149. package/cjs/form/form-label.styles.js +1 -1
  150. package/cjs/form/form-label.styles.js.map +1 -1
  151. package/cjs/form/{form-label.styles_11r0652.css → form-label.styles_1nbe0bm.css} +2 -2
  152. package/cjs/form/form-textarea.styles_3p9qoy.css +2 -2
  153. package/cjs/form/form-wrapper.styles_199rslu.css +1 -1
  154. package/cjs/form/index.js +1 -1
  155. package/cjs/form/index.js.map +1 -1
  156. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
  157. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  158. package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.styles_vc6y5c.css +2 -2
  159. package/cjs/fullscreen-image-carousel/stateful-image.styles_1xe8ypm.css +2 -2
  160. package/cjs/histogram-slider/histogram-slider.js.map +1 -1
  161. package/cjs/histogram-slider/histogram-slider.styles_wvd4w.css +2 -2
  162. package/cjs/image-button/image-button.js.map +1 -1
  163. package/cjs/image-button/image-button.styles_6n1qsr.css +2 -2
  164. package/cjs/index.js +1 -1
  165. package/cjs/input/input.js.map +1 -1
  166. package/cjs/input/input.styles_1cblor0.css +2 -2
  167. package/cjs/input-group/input-group-list-addon.styles_17iuqtw.css +2 -2
  168. package/cjs/input-group/input-group.js.map +1 -1
  169. package/cjs/input-group/input-group.styles_bqye6f.css +2 -2
  170. package/cjs/input-multi-select/input-multi-select.js.map +1 -1
  171. package/cjs/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
  172. package/cjs/input-nested-select/input-nested-select.js.map +1 -1
  173. package/cjs/input-range-select/input-range-select.js.map +1 -1
  174. package/cjs/input-range-select/input-range-select.styles_adbrbm.css +2 -2
  175. package/cjs/input-range-slider/input-range-slider.js.map +1 -1
  176. package/cjs/input-range-slider/input-range-slider.styles_aljl2v.css +2 -2
  177. package/cjs/input-select/input-select.js.map +1 -1
  178. package/cjs/input-slider/input-slider.js.map +1 -1
  179. package/cjs/input-textarea/textarea-counter.styles_1n3wsnv.css +1 -1
  180. package/cjs/input-textarea/textarea.js.map +1 -1
  181. package/cjs/input-textarea/textarea.styles_22z4n3.css +2 -2
  182. package/cjs/language-switcher/dropdown-panel.styles_1qsjf8d.css +2 -2
  183. package/cjs/language-switcher/dropdown-variant.styles_1vrdfky.css +2 -2
  184. package/cjs/language-switcher/language-switcher.js.map +1 -1
  185. package/cjs/language-switcher/link-container-variant.styles_1iw6zux.css +2 -2
  186. package/cjs/layout/col-div.styles_16o6mwx.css +1 -1
  187. package/cjs/layout/container.styles_v70ec6.css +2 -2
  188. package/cjs/layout/index.js +1 -1
  189. package/cjs/layout/index.js.map +1 -1
  190. package/cjs/layout/section.styles_hstcaf.css +1 -1
  191. package/cjs/link-list/link-list.js.map +1 -1
  192. package/cjs/link-list/link-list.styles_m57vks.css +2 -2
  193. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  194. package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.styles_uhd4xl.css +2 -2
  195. package/cjs/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  196. package/cjs/local-nav/local-nav-menu/local-nav-menu.styles_pq19dh.css +2 -2
  197. package/cjs/markup/markup.js.map +1 -1
  198. package/cjs/markup/markup.style_1iu40x9.css +2 -2
  199. package/cjs/masked-input/masked-input.js.map +1 -1
  200. package/cjs/masked-input/masked-input.styles_1cm388a.css +2 -2
  201. package/cjs/masthead/masthead.js.map +1 -1
  202. package/cjs/masthead/masthead.styles_1huzon9.css +2 -2
  203. package/cjs/menu/menu-content.styles_p7ijll.css +2 -2
  204. package/cjs/menu/menu-item.styles_liyed8.css +2 -2
  205. package/cjs/menu/menu-link.styles_hfxoez.css +2 -2
  206. package/cjs/menu/menu-section.styles_g7my4d.css +2 -2
  207. package/cjs/menu/menu.js +1 -1
  208. package/cjs/menu/menu.js.map +1 -1
  209. package/cjs/modal/index.js.map +1 -1
  210. package/cjs/modal/modal-box.js +1 -1
  211. package/cjs/modal/modal-box.js.map +1 -1
  212. package/cjs/modal/modal-box.styles_y52cts.css +2 -2
  213. package/cjs/modal/modal.styles_1lbblx6.css +2 -2
  214. package/cjs/modal-v2/index.js +1 -1
  215. package/cjs/modal-v2/index.js.map +1 -1
  216. package/cjs/modal-v2/modal-v2.js +1 -1
  217. package/cjs/modal-v2/modal-v2.js.map +1 -1
  218. package/cjs/modal-v2/modal-v2.styles_a8gv5i.css +2 -2
  219. package/cjs/modal-v2/slots/card.js +1 -1
  220. package/cjs/modal-v2/slots/card.js.map +1 -1
  221. package/cjs/modal-v2/slots/slot-styles_13sd376.css +2 -2
  222. package/cjs/navbar/brand.styles_zcgddp.css +1 -1
  223. package/cjs/navbar/drawer.js +1 -1
  224. package/cjs/navbar/drawer.js.map +1 -1
  225. package/cjs/navbar/drawer.styles_7hnxp5.css +2 -2
  226. package/cjs/navbar/menu.styles_gdpqc.css +2 -2
  227. package/cjs/navbar/navbar-action-buttons.styles_1vpm0nk.css +2 -2
  228. package/cjs/navbar/navbar-items.styles_1i3ltot.css +2 -2
  229. package/cjs/navbar/navbar.js +1 -1
  230. package/cjs/navbar/navbar.js.map +1 -1
  231. package/cjs/navbar/navbar.styles_koy0c7.css +2 -2
  232. package/cjs/notification-banner/notification-banner-hoc.js.map +1 -1
  233. package/cjs/notification-banner/notification-banner.js.map +1 -1
  234. package/cjs/notification-banner/notification-banner.styles_uxlysy.css +2 -2
  235. package/cjs/otp-input/otp-input.js.map +1 -1
  236. package/cjs/otp-input/otp-input.styles_5sbutl.css +2 -2
  237. package/cjs/otp-verification/contact-input-section.styles_odrjvt.css +2 -2
  238. package/cjs/otp-verification/otp-verification.js.map +1 -1
  239. package/cjs/otp-verification/otp-verification.styles_dg9bm8.css +1 -1
  240. package/cjs/otp-verification/thumbnail/thumbnail.styles_shqylh.css +2 -2
  241. package/cjs/otp-verification/verification-section.styles_x8jj.css +2 -2
  242. package/cjs/overlay/overlay.js +1 -1
  243. package/cjs/overlay/overlay.js.map +1 -1
  244. package/cjs/overlay/overlay.styles_12wym18.css +2 -2
  245. package/cjs/pagination/pagination.js.map +1 -1
  246. package/cjs/pagination/pagination.styles_6bcgva.css +2 -2
  247. package/cjs/phone-number-input/phone-number-input.js.map +1 -1
  248. package/cjs/pill/pill.js.map +1 -1
  249. package/cjs/pill/pill.styles_xwrniu.css +2 -2
  250. package/cjs/popover/popover-inline/popover-inline.js.map +1 -1
  251. package/cjs/popover/popover-inline/popover-inline.styles_bkopnt.css +2 -2
  252. package/cjs/popover/popover-trigger.js.map +1 -1
  253. package/cjs/popover/popover-trigger.styles_8zokig.css +1 -1
  254. package/cjs/popover/popover.js +1 -1
  255. package/cjs/popover/popover.js.map +1 -1
  256. package/cjs/popover/popover.styles_ujnf0h.css +2 -2
  257. package/cjs/predictive-text-input/predictive-text-input.js.map +1 -1
  258. package/cjs/progress-indicator/progress-indicator.js.map +1 -1
  259. package/cjs/progress-indicator/progress-indicator.styles_1c038s4.css +2 -2
  260. package/cjs/radio-button/radio-button.js.map +1 -1
  261. package/cjs/radio-button/radio-button.styles_1c4v6v.css +2 -2
  262. package/cjs/schedule/schedule-day-view/schedule-day-view.styles_8ti149.css +2 -2
  263. package/cjs/schedule/schedule-header/schedule-header.js +1 -1
  264. package/cjs/schedule/schedule-header/schedule-header.js.map +1 -1
  265. package/cjs/schedule/schedule-header/schedule-header.styles_1n2u5vj.css +2 -2
  266. package/cjs/schedule/schedule-week-view/schedule-week-view.styles_x7x50m.css +2 -2
  267. package/cjs/schedule/schedule-week-view/time-cell.styles_1sorjz8.css +2 -2
  268. package/cjs/schedule/schedule.js.map +1 -1
  269. package/cjs/schedule/schedule.styles_fdy5a1.css +2 -2
  270. package/cjs/schedule/shared/with-optional-popover.js +1 -1
  271. package/cjs/schedule/shared/with-optional-popover.js.map +1 -1
  272. package/cjs/schedule/shared/with-optional-popover.styles_7mv3p2.css +1 -1
  273. package/cjs/schedule/time-indicator/time-indicator.styles_1eaxyes.css +2 -2
  274. package/cjs/select-histogram/select-histogram.js.map +1 -1
  275. package/cjs/select-histogram/select-histogram.styles_n260dy.css +2 -2
  276. package/cjs/shared/accessibility/index_13g9vp.css +1 -1
  277. package/cjs/shared/clickable-icon/clickable-icon.styles_1v2imml.css +2 -2
  278. package/cjs/shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css +2 -2
  279. package/cjs/shared/dropdown-list/dropdown-label.styles_mloii0.css +2 -2
  280. package/cjs/shared/dropdown-list/dropdown-list.styles_konwm.css +2 -2
  281. package/cjs/shared/dropdown-list/dropdown-search.styles_1hc1gkh.css +2 -2
  282. package/cjs/shared/dropdown-list/expandable-element.styles_rkkvqr.css +2 -2
  283. package/cjs/shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css +2 -2
  284. package/cjs/shared/dropdown-wrapper/dropdown-wrapper.styles_15hwwoj.css +2 -2
  285. package/cjs/shared/fade-wrapper/fade-wrapper.styles_16iug7l.css +2 -2
  286. package/cjs/shared/image-placeholder/image-placeholder.styles_44nwil.css +1 -1
  287. package/cjs/shared/input-wrapper/input-wrapper.styles_je6maw.css +2 -2
  288. package/cjs/shared/internal-calendar/calendar-dropdown.styles_wybjai.css +1 -1
  289. package/cjs/shared/internal-calendar/calendar-manager.js +1 -1
  290. package/cjs/shared/internal-calendar/calendar-manager.js.map +1 -1
  291. package/cjs/shared/internal-calendar/calendar-manager.styles.js +1 -1
  292. package/cjs/shared/internal-calendar/calendar-manager.styles.js.map +1 -1
  293. package/cjs/shared/internal-calendar/{calendar-manager.styles_1iuq5zw.css → calendar-manager.styles_1njwkj2.css} +3 -3
  294. package/cjs/shared/internal-calendar/day-cell/day-cell.styles_1t5oqc1.css +2 -2
  295. package/cjs/shared/internal-calendar/internal-calendar-month.styles_14oh57f.css +2 -2
  296. package/cjs/shared/internal-calendar/internal-calendar-year.styles_therlc.css +2 -2
  297. package/cjs/shared/internal-calendar/internal-calendar.styles_gnc3eq.css +1 -1
  298. package/cjs/shared/internal-calendar/standard/standard-calendar-day-view.styles_1bw26au.css +2 -2
  299. package/cjs/shared/progress-bar/progress-bar.styles_125ri7a.css +1 -1
  300. package/cjs/shared/range-input-inner-container/range-input-inner-container.styles_1v61utg.css +2 -2
  301. package/cjs/shared/standalone-date-input/standalone-date-input.styles_157qo89.css +2 -2
  302. package/cjs/shared/time-slot/time-slot.styles_18s0to7.css +2 -2
  303. package/cjs/shared/timepicker-dropdown/timepicker-dropdown.styles_119l6k6.css +2 -2
  304. package/cjs/sidenav/sidenav-drawer-item.styles_1ljnyx2.css +2 -2
  305. package/cjs/sidenav/sidenav-drawer-subitem.styles_2y58kf.css +1 -1
  306. package/cjs/sidenav/sidenav-group.styles_1x604sw.css +2 -2
  307. package/cjs/sidenav/sidenav-item.styles_lqw3kh.css +2 -2
  308. package/cjs/sidenav/sidenav.js.map +1 -1
  309. package/cjs/sidenav/sidenav.styles_1vxezie.css +2 -2
  310. package/cjs/singpass-button/singpass-button.js.map +1 -1
  311. package/cjs/singpass-button/singpass-button.styles_1miyex3.css +2 -2
  312. package/cjs/smart-app-banner/smart-app-banner.js.map +1 -1
  313. package/cjs/smart-app-banner/smart-app-banner.styles_15u6yv4.css +2 -2
  314. package/cjs/tab/tab-link-chain.styles_49got4.css +2 -2
  315. package/cjs/tab/tab.js.map +1 -1
  316. package/cjs/tab/tab.styles_1najffw.css +1 -1
  317. package/cjs/table/table.js.map +1 -1
  318. package/cjs/table/table.styles.js +1 -1
  319. package/cjs/table/table.styles.js.map +1 -1
  320. package/cjs/table/{table.styles_1af5ipv.css → table.styles_1vjx31g.css} +2 -2
  321. package/cjs/tag/tag.js.map +1 -1
  322. package/cjs/tag/tag.style_d98c53.css +2 -2
  323. package/cjs/text-list/index.js.map +1 -1
  324. package/cjs/text-list/text-list.styles_w3fvyt.css +2 -2
  325. package/cjs/theme/theme-provider/breakpoint.js +1 -1
  326. package/cjs/theme/theme-provider/breakpoint.js.map +1 -1
  327. package/cjs/theme/theme-provider/hooks.js.map +1 -1
  328. package/cjs/theme/theme-provider/index.js.map +1 -1
  329. package/cjs/theme/tokens/border.js.map +1 -1
  330. package/cjs/theme/tokens/breakpoint.js.map +1 -1
  331. package/cjs/theme/tokens/colour.js.map +1 -1
  332. package/cjs/theme/tokens/component.js.map +1 -1
  333. package/cjs/theme/tokens/font.js.map +1 -1
  334. package/cjs/theme/tokens/media-query.js.map +1 -1
  335. package/cjs/theme/tokens/motion.js.map +1 -1
  336. package/cjs/theme/tokens/radius.js.map +1 -1
  337. package/cjs/theme/tokens/shadow.js.map +1 -1
  338. package/cjs/theme/tokens/spacing.js.map +1 -1
  339. package/cjs/theme/types.js +1 -1
  340. package/cjs/theme/types.js.map +1 -1
  341. package/cjs/theme/utils/css-variable.js.map +1 -1
  342. package/cjs/theme/utils/font.js.map +1 -1
  343. package/cjs/theme/utils/use-apply-styles.js +1 -1
  344. package/cjs/theme/utils/use-apply-styles.js.map +1 -1
  345. package/cjs/theme/utils/use-design-token-override.js +2 -0
  346. package/cjs/theme/utils/use-design-token-override.js.map +1 -0
  347. package/cjs/theme/utils/use-design-token.js.map +1 -1
  348. package/cjs/theme/utils/use-media-query.js.map +1 -1
  349. package/cjs/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  350. package/cjs/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  351. package/cjs/time-range-picker/combobox-picker/combobox-picker.styles_7i9vso.css +1 -1
  352. package/cjs/time-range-picker/common.styles.js +1 -1
  353. package/cjs/time-range-picker/common.styles.js.map +1 -1
  354. package/cjs/time-range-picker/{common.styles_1qwp4xa.css → common.styles_cnkkax.css} +2 -1
  355. package/cjs/time-range-picker/dial-picker/dial-picker.js +1 -1
  356. package/cjs/time-range-picker/dial-picker/dial-picker.js.map +1 -1
  357. package/cjs/time-range-picker/time-range-picker.js.map +1 -1
  358. package/cjs/time-slot-bar/time-slot-bar.js.map +1 -1
  359. package/cjs/time-slot-bar/time-slot-bar.styles_wigbyd.css +2 -2
  360. package/cjs/time-slot-bar-week/time-slot-bar-week-days.styles_evdvs9.css +2 -2
  361. package/cjs/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
  362. package/cjs/time-slot-bar-week/time-slot-bar-week.styles_11ybf42.css +1 -1
  363. package/cjs/time-slot-week-view/time-slot-week-days.styles_1h21vyw.css +2 -2
  364. package/cjs/time-slot-week-view/time-slot-week-view.js.map +1 -1
  365. package/cjs/time-slot-week-view/time-slot-week-view.styles_gqgsw2.css +1 -1
  366. package/cjs/timeline/timeline.js.map +1 -1
  367. package/cjs/timeline/timeline.styles_1jxzik4.css +2 -2
  368. package/cjs/timepicker/timepicker.js +1 -1
  369. package/cjs/timepicker/timepicker.js.map +1 -1
  370. package/cjs/timepicker/timepicker.styles.js +1 -1
  371. package/cjs/timepicker/timepicker.styles.js.map +1 -1
  372. package/cjs/timepicker/timepicker.styles_lyizvq.css +2 -0
  373. package/cjs/timetable/timetable-header/timetable-header.styles_11gl1h4.css +2 -2
  374. package/cjs/timetable/timetable-row/row-bar.styles_1x0vrsz.css +1 -1
  375. package/cjs/timetable/timetable-row/row-cell.styles_y1dl5j.css +2 -2
  376. package/cjs/timetable/timetable-row/with-optional-popover.js +1 -1
  377. package/cjs/timetable/timetable-row/with-optional-popover.js.map +1 -1
  378. package/cjs/timetable/timetable.js +1 -1
  379. package/cjs/timetable/timetable.js.map +1 -1
  380. package/cjs/timetable/timetable.styles_7rp8kz.css +2 -2
  381. package/cjs/toast/toast.js.map +1 -1
  382. package/cjs/toast/toast.styles_1e0l60w.css +2 -2
  383. package/cjs/toggle/toggle-icon.styles_ba71y.css +2 -2
  384. package/cjs/toggle/toggle.js.map +1 -1
  385. package/cjs/toggle/toggle.styles_1t5qrye.css +2 -2
  386. package/cjs/typography/index.js.map +1 -1
  387. package/cjs/typography/typography-text.styles_1734x2k.css +2 -2
  388. package/cjs/typography/typography.styles.js +1 -1
  389. package/cjs/typography/typography.styles.js.map +1 -1
  390. package/cjs/typography/{typography.styles_1155j4c.css → typography.styles_1wd82dn.css} +2 -2
  391. package/cjs/uneditable-section/index.js.map +1 -1
  392. package/cjs/uneditable-section/section-item.styles_mwx8ht.css +2 -2
  393. package/cjs/uneditable-section/uneditable-section.js +1 -1
  394. package/cjs/uneditable-section/uneditable-section.js.map +1 -1
  395. package/cjs/uneditable-section/uneditable-section.styles_aj9zun.css +2 -2
  396. package/cjs/unit-number/unit-number-input.js.map +1 -1
  397. package/cjs/unit-number/unit-number-input.styles_8yizj.css +2 -2
  398. package/cjs/util/merge-refs.js.map +1 -1
  399. package/cjs/util/use-throttle.js +2 -0
  400. package/cjs/util/use-throttle.js.map +1 -0
  401. package/countdown-timer/countdown-timer.d.ts +6 -0
  402. package/countdown-timer/countdown-timer.js.map +1 -1
  403. package/countdown-timer/countdown-timer.styles_ipn1b0.css +2 -2
  404. package/countdown-timer/types.d.ts +55 -11
  405. package/dashed-border/dashed-border.d.ts +6 -0
  406. package/dashed-border/dashed-border.js.map +1 -1
  407. package/dashed-border/dashed-border.styles_zszoox.css +2 -2
  408. package/dashed-border/types.d.ts +27 -5
  409. package/data-table/data-table.d.ts +8 -0
  410. package/data-table/data-table.js +1 -1
  411. package/data-table/data-table.js.map +1 -1
  412. package/data-table/data-table.styles.d.ts +2 -1
  413. package/data-table/data-table.styles.js +1 -1
  414. package/data-table/data-table.styles.js.map +1 -1
  415. package/data-table/data-table.styles_rxganh.css +27 -0
  416. package/data-table/types.d.ts +58 -12
  417. package/date-input/date-input.d.ts +5 -0
  418. package/date-input/date-input.js.map +1 -1
  419. package/date-input/date-input.styles_1r5kcc7.css +1 -1
  420. package/date-input/types.d.ts +32 -16
  421. package/date-navigator/date-navigator.d.ts +6 -0
  422. package/date-navigator/date-navigator.js.map +1 -1
  423. package/date-navigator/date-navigator.styles_wokh56.css +2 -2
  424. package/date-navigator/types.d.ts +44 -7
  425. package/date-range-input/date-range-input.d.ts +4 -0
  426. package/date-range-input/date-range-input.js.map +1 -1
  427. package/date-range-input/date-range-input.styles_1s7ojnj.css +2 -2
  428. package/date-range-input/types.d.ts +50 -14
  429. package/divider/divider.d.ts +6 -0
  430. package/divider/divider.js.map +1 -1
  431. package/divider/divider.styles_1xpzh8p.css +2 -2
  432. package/divider/types.d.ts +27 -4
  433. package/drawer/drawer.d.ts +7 -0
  434. package/drawer/drawer.js.map +1 -1
  435. package/drawer/drawer.styles_94hx3y.css +2 -2
  436. package/drawer/types.d.ts +16 -4
  437. package/e-signature/e-signature-canvas.js +1 -1
  438. package/e-signature/e-signature-canvas.js.map +1 -1
  439. package/e-signature/e-signature.d.ts +5 -0
  440. package/e-signature/e-signature.js.map +1 -1
  441. package/e-signature/e-signature.styles_lukd9f.css +2 -2
  442. package/e-signature/types.d.ts +23 -1
  443. package/error-display/error-display.d.ts +7 -0
  444. package/error-display/error-display.js.map +1 -1
  445. package/error-display/error-display.styles_d3tql1.css +2 -2
  446. package/error-display/types.d.ts +36 -6
  447. package/external/dompurify/dist/purify.es.js +2 -2
  448. package/external/dompurify/dist/purify.es.js.map +1 -1
  449. package/external/lodash/_setCacheHas.js.map +1 -1
  450. package/external/lodash/lodash.js +1 -1
  451. package/external/lodash/lodash.js.map +1 -1
  452. package/feedback-rating/feedback-rating-stars-container.styles_dmi8z9.css +2 -2
  453. package/feedback-rating/feedback-rating.d.ts +6 -0
  454. package/feedback-rating/feedback-rating.js.map +1 -1
  455. package/feedback-rating/feedback-rating.styles_1kdklb6.css +2 -2
  456. package/feedback-rating/types.d.ts +29 -0
  457. package/file-download/file-download.d.ts +6 -0
  458. package/file-download/file-download.js.map +1 -1
  459. package/file-download/file-download.styles_iggk8q.css +2 -2
  460. package/file-download/file-list-card/file-list-card.styles.js +1 -1
  461. package/file-download/file-list-card/file-list-card.styles.js.map +1 -1
  462. package/{cjs/file-download/file-list-card/file-list-card.styles_oom8ii.css → file-download/file-list-card/file-list-card.styles_18j2gut.css} +3 -3
  463. package/file-download/types.d.ts +44 -11
  464. package/file-upload/dropzone.styles_1pllsau.css +2 -2
  465. package/file-upload/file-item-edit.d.ts +4 -1
  466. package/file-upload/file-item-edit.js +1 -1
  467. package/file-upload/file-item-edit.js.map +1 -1
  468. package/file-upload/file-item-edit.styles.d.ts +1 -0
  469. package/file-upload/file-item-edit.styles.js +1 -1
  470. package/file-upload/file-item-edit.styles.js.map +1 -1
  471. package/file-upload/{file-item-edit.styles_1qbpbxj.css → file-item-edit.styles_19bvztn.css} +6 -5
  472. package/file-upload/file-list/file-list.d.ts +3 -0
  473. package/file-upload/file-list/file-list.js +1 -1
  474. package/file-upload/file-list/file-list.js.map +1 -1
  475. package/file-upload/file-list/file-list.styles.js +1 -1
  476. package/file-upload/file-list/file-list.styles.js.map +1 -1
  477. package/file-upload/file-list/file-list.styles_1w7so98.css +3 -0
  478. package/file-upload/file-list-item/file-list-item-thumbnail.styles_1y4si19.css +2 -2
  479. package/file-upload/file-list-item/file-list-item.d.ts +3 -1
  480. package/file-upload/file-list-item/file-list-item.js +1 -1
  481. package/file-upload/file-list-item/file-list-item.js.map +1 -1
  482. package/file-upload/file-list-item/file-list-item.styles.d.ts +3 -0
  483. package/file-upload/file-list-item/file-list-item.styles.js +1 -1
  484. package/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
  485. package/file-upload/file-list-item/file-list-item.styles_o8000f.css +17 -0
  486. package/file-upload/file-upload.d.ts +2 -1
  487. package/file-upload/file-upload.js +1 -1
  488. package/file-upload/file-upload.js.map +1 -1
  489. package/file-upload/file-upload.styles_9ffwcd.css +2 -2
  490. package/file-upload/types.d.ts +124 -20
  491. package/filter/addons/filter-item-checkbox.styles_7degw7.css +2 -2
  492. package/filter/filter-item-page.styles_17ewfrz.css +1 -1
  493. package/filter/filter-item.js.map +1 -1
  494. package/filter/filter-item.styles_cphjnj.css +2 -2
  495. package/filter/filter-modal.styles_qw3xlg.css +2 -2
  496. package/filter/filter-sidebar.styles_1otwpjl.css +2 -2
  497. package/filter/filter.d.ts +21 -0
  498. package/filter/filter.js.map +1 -1
  499. package/filter/filter.styles_1ykijwm.css +2 -2
  500. package/filter/types.d.ts +157 -21
  501. package/footer/footer-download-app.styles_1v1j2us.css +2 -2
  502. package/footer/footer-resource-addon.styles_1jepb1d.css +2 -2
  503. package/footer/footer.d.ts +8 -1
  504. package/footer/footer.js +1 -1
  505. package/footer/footer.js.map +1 -1
  506. package/footer/footer.styles_1msorhc.css +2 -2
  507. package/footer/types.d.ts +55 -4
  508. package/form/form-label-addon.js +1 -1
  509. package/form/form-label-addon.js.map +1 -1
  510. package/form/form-label-addon.styles_b00z8p.css +1 -1
  511. package/form/form-label.styles.js +1 -1
  512. package/form/form-label.styles.js.map +1 -1
  513. package/form/{form-label.styles_11r0652.css → form-label.styles_1nbe0bm.css} +2 -2
  514. package/form/form-textarea.styles_3p9qoy.css +2 -2
  515. package/form/form-wrapper.styles_199rslu.css +1 -1
  516. package/form/index.d.ts +65 -8
  517. package/form/index.js +1 -1
  518. package/form/index.js.map +1 -1
  519. package/form/types.d.ts +155 -6
  520. package/fullscreen-image-carousel/fullscreen-image-carousel.d.ts +7 -0
  521. package/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
  522. package/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
  523. package/fullscreen-image-carousel/fullscreen-image-carousel.styles_vc6y5c.css +2 -2
  524. package/fullscreen-image-carousel/stateful-image.styles_1xe8ypm.css +2 -2
  525. package/fullscreen-image-carousel/types.d.ts +91 -3
  526. package/histogram-slider/histogram-slider.d.ts +6 -0
  527. package/histogram-slider/histogram-slider.js.map +1 -1
  528. package/histogram-slider/histogram-slider.styles_wvd4w.css +2 -2
  529. package/histogram-slider/types.d.ts +63 -3
  530. package/image-button/image-button.d.ts +6 -0
  531. package/image-button/image-button.js.map +1 -1
  532. package/image-button/image-button.styles_6n1qsr.css +2 -2
  533. package/image-button/types.d.ts +11 -1
  534. package/index.d.ts +0 -1
  535. package/index.js +1 -1
  536. package/input/input.d.ts +6 -0
  537. package/input/input.js.map +1 -1
  538. package/input/input.styles_1cblor0.css +2 -2
  539. package/input/types.d.ts +38 -2
  540. package/input-group/input-group-list-addon.styles_17iuqtw.css +2 -2
  541. package/input-group/input-group.d.ts +7 -0
  542. package/input-group/input-group.js.map +1 -1
  543. package/input-group/input-group.styles_bqye6f.css +2 -2
  544. package/input-group/types.d.ts +84 -8
  545. package/input-multi-select/input-multi-select.d.ts +6 -0
  546. package/input-multi-select/input-multi-select.js.map +1 -1
  547. package/input-multi-select/types.d.ts +46 -5
  548. package/input-nested-multi-select/input-nested-multi-select.d.ts +8 -0
  549. package/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
  550. package/input-nested-multi-select/types.d.ts +35 -5
  551. package/input-nested-select/input-nested-select.d.ts +9 -2
  552. package/input-nested-select/input-nested-select.js.map +1 -1
  553. package/input-nested-select/types.d.ts +77 -8
  554. package/input-range-select/input-range-select.d.ts +6 -0
  555. package/input-range-select/input-range-select.js.map +1 -1
  556. package/input-range-select/input-range-select.styles_adbrbm.css +2 -2
  557. package/input-range-select/types.d.ts +68 -1
  558. package/input-range-slider/input-range-slider.d.ts +7 -0
  559. package/input-range-slider/input-range-slider.js.map +1 -1
  560. package/input-range-slider/input-range-slider.styles_aljl2v.css +2 -2
  561. package/input-range-slider/types.d.ts +91 -6
  562. package/input-select/input-select.d.ts +5 -0
  563. package/input-select/input-select.js.map +1 -1
  564. package/input-select/types.d.ts +70 -14
  565. package/input-slider/input-slider.d.ts +6 -0
  566. package/input-slider/input-slider.js.map +1 -1
  567. package/input-slider/types.d.ts +21 -2
  568. package/input-textarea/textarea-counter.styles_1n3wsnv.css +1 -1
  569. package/input-textarea/textarea.d.ts +3 -0
  570. package/input-textarea/textarea.js.map +1 -1
  571. package/input-textarea/textarea.styles_22z4n3.css +2 -2
  572. package/input-textarea/types.d.ts +24 -1
  573. package/language-switcher/dropdown-panel.styles_1qsjf8d.css +2 -2
  574. package/language-switcher/dropdown-variant.styles_1vrdfky.css +2 -2
  575. package/language-switcher/language-switcher.d.ts +6 -0
  576. package/language-switcher/language-switcher.js.map +1 -1
  577. package/language-switcher/link-container-variant.styles_1iw6zux.css +2 -2
  578. package/language-switcher/types.d.ts +23 -0
  579. package/layout/col-div.styles_16o6mwx.css +1 -1
  580. package/layout/container.styles_v70ec6.css +2 -2
  581. package/layout/index.d.ts +16 -2
  582. package/layout/index.js +1 -1
  583. package/layout/index.js.map +1 -1
  584. package/layout/section.styles_hstcaf.css +1 -1
  585. package/layout/types.d.ts +61 -3
  586. package/link-list/internal-types.d.ts +57 -3
  587. package/link-list/link-list.d.ts +6 -0
  588. package/link-list/link-list.js.map +1 -1
  589. package/link-list/link-list.styles_m57vks.css +2 -2
  590. package/link-list/types.d.ts +3 -0
  591. package/local-nav/local-nav-dropdown/local-nav-dropdown.d.ts +11 -0
  592. package/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
  593. package/local-nav/local-nav-dropdown/local-nav-dropdown.styles_uhd4xl.css +2 -2
  594. package/local-nav/local-nav-menu/local-nav-menu.d.ts +6 -0
  595. package/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
  596. package/local-nav/local-nav-menu/local-nav-menu.styles_pq19dh.css +2 -2
  597. package/local-nav/types.d.ts +51 -0
  598. package/markup/markup.d.ts +6 -0
  599. package/markup/markup.js.map +1 -1
  600. package/markup/markup.style_1iu40x9.css +2 -2
  601. package/markup/types.d.ts +6 -2
  602. package/masked-input/masked-input.d.ts +6 -0
  603. package/masked-input/masked-input.js.map +1 -1
  604. package/masked-input/masked-input.styles_1cm388a.css +2 -2
  605. package/masked-input/types.d.ts +83 -8
  606. package/masthead/masthead.d.ts +6 -0
  607. package/masthead/masthead.js.map +1 -1
  608. package/masthead/masthead.styles_1huzon9.css +2 -2
  609. package/masthead/types.d.ts +9 -0
  610. package/menu/menu-content.styles_p7ijll.css +2 -2
  611. package/menu/menu-item.styles_liyed8.css +2 -2
  612. package/menu/menu-link.styles_hfxoez.css +2 -2
  613. package/menu/menu-section.styles_g7my4d.css +2 -2
  614. package/menu/menu.d.ts +27 -4
  615. package/menu/menu.js +1 -1
  616. package/menu/menu.js.map +1 -1
  617. package/menu/types.d.ts +32 -0
  618. package/modal/index.d.ts +13 -0
  619. package/modal/index.js.map +1 -1
  620. package/modal/modal-box.js +1 -1
  621. package/modal/modal-box.js.map +1 -1
  622. package/modal/modal-box.styles_y52cts.css +2 -2
  623. package/modal/modal.styles_1lbblx6.css +2 -2
  624. package/modal/types.d.ts +54 -7
  625. package/modal-v2/index.d.ts +1 -15
  626. package/modal-v2/index.js +1 -1
  627. package/modal-v2/index.js.map +1 -1
  628. package/modal-v2/modal-v2.d.ts +32 -1
  629. package/modal-v2/modal-v2.js +1 -1
  630. package/modal-v2/modal-v2.js.map +1 -1
  631. package/modal-v2/modal-v2.styles_a8gv5i.css +2 -2
  632. package/modal-v2/slots/card.js +1 -1
  633. package/modal-v2/slots/card.js.map +1 -1
  634. package/modal-v2/slots/slot-styles_13sd376.css +2 -2
  635. package/modal-v2/types.d.ts +75 -8
  636. package/navbar/brand.styles_zcgddp.css +1 -1
  637. package/navbar/drawer.js +1 -1
  638. package/navbar/drawer.js.map +1 -1
  639. package/navbar/drawer.styles_7hnxp5.css +2 -2
  640. package/navbar/menu.styles_gdpqc.css +2 -2
  641. package/navbar/navbar-action-buttons.styles_1vpm0nk.css +2 -2
  642. package/navbar/navbar-items.styles_1i3ltot.css +2 -2
  643. package/navbar/navbar.d.ts +7 -0
  644. package/navbar/navbar.js +1 -1
  645. package/navbar/navbar.js.map +1 -1
  646. package/navbar/navbar.styles_koy0c7.css +2 -2
  647. package/navbar/types.d.ts +200 -13
  648. package/notification-banner/notification-banner-hoc.d.ts +6 -0
  649. package/notification-banner/notification-banner-hoc.js.map +1 -1
  650. package/notification-banner/notification-banner.d.ts +7 -0
  651. package/notification-banner/notification-banner.js.map +1 -1
  652. package/notification-banner/notification-banner.styles_uxlysy.css +2 -2
  653. package/notification-banner/types.d.ts +57 -2
  654. package/otp-input/otp-input.d.ts +7 -0
  655. package/otp-input/otp-input.js.map +1 -1
  656. package/otp-input/otp-input.styles_5sbutl.css +2 -2
  657. package/otp-input/types.d.ts +54 -11
  658. package/otp-verification/contact-input-section.styles_odrjvt.css +2 -2
  659. package/otp-verification/internal-types.d.ts +22 -5
  660. package/otp-verification/otp-verification.d.ts +6 -0
  661. package/otp-verification/otp-verification.js.map +1 -1
  662. package/otp-verification/otp-verification.styles_dg9bm8.css +1 -1
  663. package/otp-verification/thumbnail/thumbnail.styles_shqylh.css +2 -2
  664. package/otp-verification/types.d.ts +125 -6
  665. package/otp-verification/verification-section.styles_x8jj.css +2 -2
  666. package/overlay/overlay.d.ts +7 -0
  667. package/overlay/overlay.js +1 -1
  668. package/overlay/overlay.js.map +1 -1
  669. package/overlay/overlay.styles_12wym18.css +2 -2
  670. package/overlay/types.d.ts +57 -15
  671. package/package.json +1 -7
  672. package/pagination/pagination.d.ts +5 -0
  673. package/pagination/pagination.js.map +1 -1
  674. package/pagination/pagination.styles_6bcgva.css +2 -2
  675. package/pagination/types.d.ts +48 -0
  676. package/phone-number-input/phone-number-input.d.ts +7 -0
  677. package/phone-number-input/phone-number-input.js.map +1 -1
  678. package/phone-number-input/types.d.ts +78 -13
  679. package/pill/pill.d.ts +6 -0
  680. package/pill/pill.js.map +1 -1
  681. package/pill/pill.styles_xwrniu.css +2 -2
  682. package/pill/types.d.ts +19 -0
  683. package/popover/popover-inline/popover-inline.d.ts +5 -0
  684. package/popover/popover-inline/popover-inline.js.map +1 -1
  685. package/popover/popover-inline/popover-inline.styles_bkopnt.css +2 -2
  686. package/popover/popover-trigger.d.ts +6 -0
  687. package/popover/popover-trigger.js.map +1 -1
  688. package/popover/popover-trigger.styles_8zokig.css +1 -1
  689. package/popover/popover.d.ts +6 -0
  690. package/popover/popover.js +1 -1
  691. package/popover/popover.js.map +1 -1
  692. package/popover/popover.styles_ujnf0h.css +2 -2
  693. package/popover/types.d.ts +150 -3
  694. package/predictive-text-input/predictive-text-input.d.ts +6 -0
  695. package/predictive-text-input/predictive-text-input.js.map +1 -1
  696. package/predictive-text-input/types.d.ts +65 -11
  697. package/progress-indicator/progress-indicator.d.ts +7 -0
  698. package/progress-indicator/progress-indicator.js.map +1 -1
  699. package/progress-indicator/progress-indicator.styles_1c038s4.css +2 -2
  700. package/progress-indicator/types.d.ts +18 -0
  701. package/radio-button/radio-button.d.ts +5 -0
  702. package/radio-button/radio-button.js.map +1 -1
  703. package/radio-button/radio-button.styles_1c4v6v.css +2 -2
  704. package/radio-button/types.d.ts +11 -0
  705. package/schedule/internal-types.d.ts +18 -0
  706. package/schedule/schedule-day-view/schedule-day-view.styles_8ti149.css +2 -2
  707. package/schedule/schedule-day-view/types.d.ts +2 -1
  708. package/schedule/schedule-header/schedule-header.js +1 -1
  709. package/schedule/schedule-header/schedule-header.js.map +1 -1
  710. package/schedule/schedule-header/schedule-header.styles_1n2u5vj.css +2 -2
  711. package/schedule/schedule-week-view/schedule-week-view.styles_x7x50m.css +2 -2
  712. package/schedule/schedule-week-view/time-cell.styles_1sorjz8.css +2 -2
  713. package/schedule/schedule-week-view/types.d.ts +2 -1
  714. package/schedule/schedule.d.ts +3 -0
  715. package/schedule/schedule.js.map +1 -1
  716. package/schedule/schedule.styles_fdy5a1.css +2 -2
  717. package/schedule/shared/with-optional-popover.js +1 -1
  718. package/schedule/shared/with-optional-popover.js.map +1 -1
  719. package/schedule/shared/with-optional-popover.styles_7mv3p2.css +1 -1
  720. package/schedule/time-indicator/time-indicator.styles_1eaxyes.css +2 -2
  721. package/schedule/types.d.ts +129 -10
  722. package/select-histogram/select-histogram.d.ts +5 -0
  723. package/select-histogram/select-histogram.js.map +1 -1
  724. package/select-histogram/select-histogram.styles_n260dy.css +2 -2
  725. package/select-histogram/types.d.ts +57 -4
  726. package/shared/accessibility/index_13g9vp.css +1 -1
  727. package/shared/clickable-icon/clickable-icon.styles_1v2imml.css +2 -2
  728. package/shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css +2 -2
  729. package/shared/dropdown-list/dropdown-label.styles_mloii0.css +2 -2
  730. package/shared/dropdown-list/dropdown-list.styles_konwm.css +2 -2
  731. package/shared/dropdown-list/dropdown-search.styles_1hc1gkh.css +2 -2
  732. package/shared/dropdown-list/expandable-element.styles_rkkvqr.css +2 -2
  733. package/shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css +2 -2
  734. package/shared/dropdown-list/types.d.ts +52 -19
  735. package/shared/dropdown-wrapper/dropdown-wrapper.styles_15hwwoj.css +2 -2
  736. package/shared/dropdown-wrapper/types.d.ts +6 -0
  737. package/shared/fade-wrapper/fade-wrapper.styles_16iug7l.css +2 -2
  738. package/shared/image-placeholder/image-placeholder.styles_44nwil.css +1 -1
  739. package/shared/input-wrapper/input-wrapper.styles_je6maw.css +2 -2
  740. package/shared/internal-calendar/calendar-dropdown.styles_wybjai.css +1 -1
  741. package/shared/internal-calendar/calendar-manager.js +1 -1
  742. package/shared/internal-calendar/calendar-manager.js.map +1 -1
  743. package/shared/internal-calendar/calendar-manager.styles.js +1 -1
  744. package/shared/internal-calendar/calendar-manager.styles.js.map +1 -1
  745. package/shared/internal-calendar/{calendar-manager.styles_1iuq5zw.css → calendar-manager.styles_1njwkj2.css} +3 -3
  746. package/shared/internal-calendar/day-cell/day-cell.styles_1t5oqc1.css +2 -2
  747. package/shared/internal-calendar/internal-calendar-month.styles_14oh57f.css +2 -2
  748. package/shared/internal-calendar/internal-calendar-year.styles_therlc.css +2 -2
  749. package/shared/internal-calendar/internal-calendar.styles_gnc3eq.css +1 -1
  750. package/shared/internal-calendar/standard/standard-calendar-day-view.styles_1bw26au.css +2 -2
  751. package/shared/progress-bar/progress-bar.styles_125ri7a.css +1 -1
  752. package/shared/range-input-inner-container/range-input-inner-container.styles_1v61utg.css +2 -2
  753. package/shared/standalone-date-input/standalone-date-input.styles_157qo89.css +2 -2
  754. package/shared/time-slot/time-slot.styles_18s0to7.css +2 -2
  755. package/shared/timepicker-dropdown/timepicker-dropdown.styles_119l6k6.css +2 -2
  756. package/sidenav/sidenav-drawer-item.styles_1ljnyx2.css +2 -2
  757. package/sidenav/sidenav-drawer-subitem.styles_2y58kf.css +1 -1
  758. package/sidenav/sidenav-group.styles_1x604sw.css +2 -2
  759. package/sidenav/sidenav-item.styles_lqw3kh.css +2 -2
  760. package/sidenav/sidenav.d.ts +10 -0
  761. package/sidenav/sidenav.js.map +1 -1
  762. package/sidenav/sidenav.styles_1vxezie.css +2 -2
  763. package/sidenav/types.d.ts +70 -21
  764. package/singpass-button/singpass-button.d.ts +6 -0
  765. package/singpass-button/singpass-button.js.map +1 -1
  766. package/singpass-button/singpass-button.styles_1miyex3.css +2 -2
  767. package/singpass-button/types.d.ts +29 -2
  768. package/smart-app-banner/smart-app-banner.d.ts +5 -0
  769. package/smart-app-banner/smart-app-banner.js.map +1 -1
  770. package/smart-app-banner/smart-app-banner.styles_15u6yv4.css +2 -2
  771. package/smart-app-banner/types.d.ts +54 -0
  772. package/tab/tab-link-chain.styles_49got4.css +2 -2
  773. package/tab/tab.d.ts +7 -0
  774. package/tab/tab.js.map +1 -1
  775. package/tab/tab.styles_1najffw.css +1 -1
  776. package/tab/types.d.ts +55 -6
  777. package/table/table.d.ts +21 -0
  778. package/table/table.js.map +1 -1
  779. package/table/table.styles.js +1 -1
  780. package/table/table.styles.js.map +1 -1
  781. package/table/{table.styles_1af5ipv.css → table.styles_1vjx31g.css} +2 -2
  782. package/tag/tag.d.ts +5 -0
  783. package/tag/tag.js.map +1 -1
  784. package/tag/tag.style_d98c53.css +2 -2
  785. package/tag/types.d.ts +24 -0
  786. package/text-list/index.d.ts +17 -0
  787. package/text-list/index.js.map +1 -1
  788. package/text-list/text-list.styles_w3fvyt.css +2 -2
  789. package/text-list/types.d.ts +33 -4
  790. package/theme/styles/a11y-playground.css +3 -0
  791. package/theme/styles/bookingsg.css +7 -4
  792. package/theme/styles/careercompass.css +4 -1
  793. package/theme/styles/ccube.css +3 -0
  794. package/theme/styles/default.css +9 -5
  795. package/theme/styles/imda.css +3 -0
  796. package/theme/styles/lifesg.css +3 -0
  797. package/theme/styles/mylegacy.css +7 -4
  798. package/theme/styles/oneservice.css +52 -0
  799. package/theme/styles/pa.css +3 -0
  800. package/theme/styles/rbs.css +3 -0
  801. package/theme/styles/sgw-digital-lobby.css +5 -2
  802. package/theme/styles/smgs.css +3 -0
  803. package/theme/styles/spf.css +3 -0
  804. package/theme/styles/supportgowhere.css +3 -0
  805. package/theme/theme-provider/breakpoint.d.ts +0 -1
  806. package/theme/theme-provider/breakpoint.js +1 -1
  807. package/theme/theme-provider/breakpoint.js.map +1 -1
  808. package/theme/theme-provider/hooks.d.ts +16 -0
  809. package/theme/theme-provider/hooks.js.map +1 -1
  810. package/theme/theme-provider/index.d.ts +7 -0
  811. package/theme/theme-provider/index.js.map +1 -1
  812. package/theme/theme-provider/types.d.ts +14 -0
  813. package/theme/tokens/border.d.ts +3 -0
  814. package/theme/tokens/border.js.map +1 -1
  815. package/theme/tokens/breakpoint.d.ts +3 -0
  816. package/theme/tokens/breakpoint.js.map +1 -1
  817. package/theme/tokens/colour.d.ts +3 -0
  818. package/theme/tokens/colour.js.map +1 -1
  819. package/theme/tokens/component.d.ts +1 -0
  820. package/theme/tokens/component.js.map +1 -1
  821. package/theme/tokens/font.d.ts +2 -0
  822. package/theme/tokens/font.js.map +1 -1
  823. package/theme/tokens/media-query.d.ts +1 -0
  824. package/theme/tokens/media-query.js.map +1 -1
  825. package/theme/tokens/motion.d.ts +1 -0
  826. package/theme/tokens/motion.js.map +1 -1
  827. package/theme/tokens/radius.d.ts +1 -0
  828. package/theme/tokens/radius.js.map +1 -1
  829. package/theme/tokens/shadow.d.ts +1 -0
  830. package/theme/tokens/shadow.js.map +1 -1
  831. package/theme/tokens/spacing.d.ts +1 -0
  832. package/theme/tokens/spacing.js.map +1 -1
  833. package/theme/types.d.ts +24 -4
  834. package/theme/types.js +1 -1
  835. package/theme/types.js.map +1 -1
  836. package/theme/utils/css-variable.d.ts +10 -2
  837. package/theme/utils/css-variable.js.map +1 -1
  838. package/theme/utils/font.d.ts +2 -1
  839. package/theme/utils/font.js.map +1 -1
  840. package/theme/utils/index.d.ts +1 -0
  841. package/theme/utils/use-apply-styles.d.ts +8 -2
  842. package/theme/utils/use-apply-styles.js +1 -1
  843. package/theme/utils/use-apply-styles.js.map +1 -1
  844. package/theme/utils/use-design-token-override.d.ts +19 -0
  845. package/theme/utils/use-design-token-override.js +2 -0
  846. package/theme/utils/use-design-token-override.js.map +1 -0
  847. package/theme/utils/use-design-token.d.ts +9 -0
  848. package/theme/utils/use-design-token.js.map +1 -1
  849. package/theme/utils/use-media-query.d.ts +41 -3
  850. package/theme/utils/use-media-query.js.map +1 -1
  851. package/time-range-picker/combobox-picker/combobox-picker.js +1 -1
  852. package/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
  853. package/time-range-picker/combobox-picker/combobox-picker.styles_7i9vso.css +1 -1
  854. package/time-range-picker/common.styles.d.ts +1 -0
  855. package/time-range-picker/common.styles.js +1 -1
  856. package/time-range-picker/common.styles.js.map +1 -1
  857. package/time-range-picker/{common.styles_1qwp4xa.css → common.styles_cnkkax.css} +2 -1
  858. package/time-range-picker/dial-picker/dial-picker.js +1 -1
  859. package/time-range-picker/dial-picker/dial-picker.js.map +1 -1
  860. package/time-range-picker/time-range-picker.d.ts +5 -0
  861. package/time-range-picker/time-range-picker.js.map +1 -1
  862. package/time-range-picker/types.d.ts +85 -25
  863. package/time-slot-bar/internal-types.d.ts +1 -0
  864. package/time-slot-bar/time-slot-bar.d.ts +7 -0
  865. package/time-slot-bar/time-slot-bar.js.map +1 -1
  866. package/time-slot-bar/time-slot-bar.styles_wigbyd.css +2 -2
  867. package/time-slot-bar/types.d.ts +112 -20
  868. package/time-slot-bar-week/time-slot-bar-week-days.styles_evdvs9.css +2 -2
  869. package/time-slot-bar-week/time-slot-bar-week.d.ts +8 -0
  870. package/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
  871. package/time-slot-bar-week/time-slot-bar-week.styles_11ybf42.css +1 -1
  872. package/time-slot-bar-week/types.d.ts +74 -13
  873. package/time-slot-week-view/time-slot-week-days.styles_1h21vyw.css +2 -2
  874. package/time-slot-week-view/time-slot-week-view.d.ts +7 -0
  875. package/time-slot-week-view/time-slot-week-view.js.map +1 -1
  876. package/time-slot-week-view/time-slot-week-view.styles_gqgsw2.css +1 -1
  877. package/time-slot-week-view/types.d.ts +53 -10
  878. package/timeline/timeline.d.ts +6 -0
  879. package/timeline/timeline.js.map +1 -1
  880. package/timeline/timeline.styles_1jxzik4.css +2 -2
  881. package/timeline/types.d.ts +58 -4
  882. package/timepicker/timepicker.d.ts +5 -0
  883. package/timepicker/timepicker.js +1 -1
  884. package/timepicker/timepicker.js.map +1 -1
  885. package/timepicker/timepicker.styles.d.ts +1 -0
  886. package/timepicker/timepicker.styles.js +1 -1
  887. package/timepicker/timepicker.styles.js.map +1 -1
  888. package/timepicker/timepicker.styles_lyizvq.css +2 -0
  889. package/timepicker/types.d.ts +49 -14
  890. package/timetable/timetable-header/timetable-header.styles_11gl1h4.css +2 -2
  891. package/timetable/timetable-row/row-bar.styles_1x0vrsz.css +1 -1
  892. package/timetable/timetable-row/row-cell.styles_y1dl5j.css +2 -2
  893. package/timetable/timetable-row/with-optional-popover.js +1 -1
  894. package/timetable/timetable-row/with-optional-popover.js.map +1 -1
  895. package/timetable/timetable.d.ts +6 -0
  896. package/timetable/timetable.js +1 -1
  897. package/timetable/timetable.js.map +1 -1
  898. package/timetable/timetable.styles_7rp8kz.css +2 -2
  899. package/timetable/types.d.ts +175 -50
  900. package/toast/toast.d.ts +6 -0
  901. package/toast/toast.js.map +1 -1
  902. package/toast/toast.styles_1e0l60w.css +2 -2
  903. package/toast/types.d.ts +42 -8
  904. package/toggle/toggle-icon.styles_ba71y.css +2 -2
  905. package/toggle/toggle.d.ts +6 -0
  906. package/toggle/toggle.js.map +1 -1
  907. package/toggle/toggle.styles_1t5qrye.css +2 -2
  908. package/toggle/types.d.ts +95 -17
  909. package/typography/index.d.ts +29 -0
  910. package/typography/index.js.map +1 -1
  911. package/typography/types.d.ts +51 -8
  912. package/typography/typography-text.styles_1734x2k.css +2 -2
  913. package/typography/typography.styles.js +1 -1
  914. package/typography/typography.styles.js.map +1 -1
  915. package/typography/{typography.styles_1155j4c.css → typography.styles_1wd82dn.css} +2 -2
  916. package/uneditable-section/index.d.ts +16 -1
  917. package/uneditable-section/index.js.map +1 -1
  918. package/uneditable-section/section-item.styles_mwx8ht.css +2 -2
  919. package/uneditable-section/types.d.ts +66 -23
  920. package/uneditable-section/uneditable-section.d.ts +2 -1
  921. package/uneditable-section/uneditable-section.js +1 -1
  922. package/uneditable-section/uneditable-section.js.map +1 -1
  923. package/uneditable-section/uneditable-section.styles_aj9zun.css +2 -2
  924. package/unit-number/types.d.ts +30 -4
  925. package/unit-number/unit-number-input.d.ts +6 -0
  926. package/unit-number/unit-number-input.js.map +1 -1
  927. package/unit-number/unit-number-input.styles_8yizj.css +2 -2
  928. package/util/index.d.ts +1 -0
  929. package/util/merge-refs.d.ts +1 -1
  930. package/util/merge-refs.js.map +1 -1
  931. package/util/use-throttle.d.ts +1 -0
  932. package/util/use-throttle.js +2 -0
  933. package/util/use-throttle.js.map +1 -0
  934. package/cjs/data-table/data-table.styles_1iqq1g7.css +0 -26
  935. package/cjs/example/example.js +0 -2
  936. package/cjs/example/example.js.map +0 -1
  937. package/cjs/example/example_r47nvz.css +0 -1
  938. package/cjs/example/index.js +0 -2
  939. package/cjs/example/index.js.map +0 -1
  940. package/cjs/file-upload/file-list/file-list.styles_1ea12kj.css +0 -3
  941. package/cjs/file-upload/file-list-item/file-list-item.styles_y7my2m.css +0 -14
  942. package/cjs/timepicker/timepicker.styles_1jm33yw.css +0 -1
  943. package/data-table/data-table.styles_1iqq1g7.css +0 -26
  944. package/example/example.d.ts +0 -2
  945. package/example/example.js +0 -2
  946. package/example/example.js.map +0 -1
  947. package/example/example_r47nvz.css +0 -1
  948. package/example/index.d.ts +0 -1
  949. package/example/index.js +0 -2
  950. package/example/index.js.map +0 -1
  951. package/example/types.d.ts +0 -3
  952. package/file-upload/file-list/file-list.styles_1ea12kj.css +0 -3
  953. package/file-upload/file-list-item/file-list-item.styles_y7my2m.css +0 -14
  954. package/timepicker/timepicker.styles_1jm33yw.css +0 -1
package/form/index.d.ts CHANGED
@@ -1,27 +1,84 @@
1
1
  export * from "./types";
2
+ /**
3
+ * A collection of form field components that each combine a label, input
4
+ * control, and inline error message with consistent ARIA wiring.
5
+ *
6
+ * Use `Form.*` sub-components to build accessible forms. Use `Form.CustomField` to wrap any
7
+ * bespoke input element in the same layout.
8
+ *
9
+ * Sub-components:
10
+ * - `Form.CustomField` — layout shell for wrapping custom input elements.
11
+ * - `Form.DateInput` — single date picker.
12
+ * - `Form.DateRangeInput` — date range picker.
13
+ * - `Form.ESignature` — e-signature capture field.
14
+ * - `Form.HistogramSlider` — range slider with histogram overlay.
15
+ * - `Form.Input` — single-line text input field.
16
+ * - `Form.InputGroup` — grouped inputs with shared label and error state.
17
+ * - `Form.Label` — standalone label for use outside a `Form.*` field.
18
+ * - `Form.MaskedInput` — text input with a character-level input mask.
19
+ * - `Form.MultiSelect` — multi-value dropdown select.
20
+ * - `Form.NestedMultiSelect` — hierarchical multi-value select.
21
+ * - `Form.NestedSelect` — hierarchical single-value select.
22
+ * - `Form.OtpVerification` — OTP send-and-verify flow.
23
+ * - `Form.PhoneNumberInput` — phone number input with country code selection.
24
+ * - `Form.PredictiveTextInput` — text input with predictive suggestions.
25
+ * - `Form.RangeSelect` — dual-value range dropdown select.
26
+ * - `Form.RangeSlider` — dual-handle range slider.
27
+ * - `Form.Select` — single-value dropdown select.
28
+ * - `Form.SelectHistogram` — select control with histogram.
29
+ * - `Form.Slider` — single-value range slider.
30
+ * - `Form.Textarea` — multi-line text area.
31
+ * - `Form.Timepicker` — time picker.
32
+ * - `Form.TimeRangePicker` — time range picker.
33
+ * - `Form.UnitNumberInput` — structured unit number input.
34
+ */
2
35
  export declare const Form: {
36
+ /** Layout shell that wraps any custom input element with label, subtitle, and error message. */
37
+ CustomField: ({ id, "data-error-testid": errorTestId, "data-testid": testId, children, ...otherProps }: import("./types").FormCustomFieldProps) => JSX.Element;
38
+ /** Single date picker with form layout. */
3
39
  DateInput: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormDateInputProps) => JSX.Element;
40
+ /** Date range picker with form layout. */
4
41
  DateRangeInput: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormDateRangeInputProps) => JSX.Element;
42
+ /** E-signature capture field with form layout. */
5
43
  ESignature: (props: import("./types").FormESignatureProps) => import("react/jsx-runtime").JSX.Element;
44
+ /** Range slider with histogram overlay and form layout. */
6
45
  HistogramSlider: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormHistogramSliderProps) => JSX.Element;
46
+ /** Single-line text input field with form layout. */
7
47
  Input: (props: import("./types").FormInputProps & import("react").RefAttributes<HTMLInputElement>) => React.ReactElement | null;
48
+ /** Grouped inputs with shared label, error state, and form layout. */
8
49
  InputGroup: <T, V>(props: import("./types").FormInputGroupProps<T, V> & import("react").RefAttributes<HTMLInputElement>) => React.ReactElement | null;
9
- MaskedInput: (props: import("./types").FormMaskedInputProps & import("react").RefAttributes<HTMLInputElement>) => React.ReactElement | null;
50
+ /** Standalone label element for use outside a `Form.*` field with optional subtitle and addon icon. */
10
51
  Label: ({ id, children, addon, subtitle, "data-testid": testId, className, style, ...otherProps }: import("./types").FormLabelProps) => JSX.Element;
52
+ /** Text input with a character-level input mask and form layout. */
53
+ MaskedInput: (props: import("./types").FormMaskedInputProps & import("react").RefAttributes<HTMLInputElement>) => React.ReactElement | null;
54
+ /** Multi-value dropdown select with form layout. */
11
55
  MultiSelect: <T, V>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, enableSearch, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, variant, ...otherProps }: import("./types").FormMultiSelectProps<T, V>) => JSX.Element;
12
- NestedSelect: <V1, V2, V3>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormNestedSelectProps<V1, V2, V3>) => JSX.Element;
56
+ /** Hierarchical multi-value select with form layout. */
13
57
  NestedMultiSelect: <V1, V2, V3>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormNestedMultiSelectProps<V1, V2, V3>) => JSX.Element;
58
+ /** Hierarchical single-value select with form layout. */
59
+ NestedSelect: <V1, V2, V3>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormNestedSelectProps<V1, V2, V3>) => JSX.Element;
60
+ /** OTP send-and-verify flow with form layout. */
61
+ OtpVerification: ({ label, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("../otp-verification").FormOtpVerificationProps) => JSX.Element;
62
+ /** Phone number input with country code selection and form layout. */
63
+ PhoneNumberInput: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormPhoneNumberInputProps) => JSX.Element;
64
+ /** Text input with predictive suggestions and form layout. */
65
+ PredictiveTextInput: <T, V>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormPredictiveTextInputProps<T, V>) => JSX.Element;
66
+ /** Dual-value range dropdown select with form layout. */
67
+ RangeSelect: <T, V>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, enableSearch, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormInputRangeSelectProps<T, V>) => JSX.Element;
68
+ /** Dual-handle range slider with form layout. */
69
+ RangeSlider: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormRangeSliderProps) => JSX.Element;
70
+ /** Single-value dropdown select with form layout. */
14
71
  Select: <T, V>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, enableSearch, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, variant, ...otherProps }: import("./types").FormInputSelectProps<T, V>) => JSX.Element;
72
+ /** Select control with histogram and form layout. */
15
73
  SelectHistogram: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, histogramSlider, ...otherProps }: import("./types").FormSelectHistogramProps) => JSX.Element;
74
+ /** Single-value range slider with form layout. */
16
75
  Slider: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormSliderProps) => JSX.Element;
17
- RangeSlider: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormRangeSliderProps) => JSX.Element;
18
- RangeSelect: <T, V>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, enableSearch, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormInputRangeSelectProps<T, V>) => JSX.Element;
76
+ /** Multi-line text area with form layout. */
19
77
  Textarea: (props: import("./types").FormTextareaProps & import("react").RefAttributes<HTMLTextAreaElement>) => React.ReactElement | null;
78
+ /** Time picker with form layout. */
20
79
  Timepicker: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormTimepickerProps) => JSX.Element;
80
+ /** Time range picker with form layout. */
21
81
  TimeRangePicker: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormTimeRangePickerProps) => JSX.Element;
22
- CustomField: ({ id, "data-error-testid": errorTestId, "data-testid": testId, children, ...otherProps }: import("./types").FormCustomFieldProps) => JSX.Element;
82
+ /** Structured unit number input with form layout. */
23
83
  UnitNumberInput: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormUnitNumberInputProps) => JSX.Element;
24
- PhoneNumberInput: ({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormPhoneNumberInputProps) => JSX.Element;
25
- PredictiveTextInput: <T, V>({ label, errorMessage, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("./types").FormPredictiveTextInputProps<T, V>) => JSX.Element;
26
- OtpVerification: ({ label, id, "data-error-testid": errorTestId, "data-testid": testId, layoutType, xxsCols, xsCols, smCols, mdCols, lgCols, xlCols, xxlCols, ...otherProps }: import("../otp-verification").FormOtpVerificationProps) => JSX.Element;
27
84
  };
package/form/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{FormCustomField as r}from"./form-custom-field.js";import{FormDateInput as t}from"./form-date-input.js";import{FormDateRangeInput as m}from"./form-date-range-input.js";import{FormESignature as o}from"./form-e-signature.js";import{FormHistogramSlider as e}from"./form-histogram.js";import{FormInput as i}from"./form-input.js";import{FormInputGroup as f}from"./form-input-group.js";import{FormLabel as p}from"./form-label.js";import{FormMaskedInput as s}from"./form-masked-input.js";import{FormMultiSelect as n}from"./form-multi-select.js";import{FormNestedMultiSelect as u}from"./form-nested-multi-select.js";import{FormNestedSelect as a}from"./form-nested-select.js";import{FormOtpVerification as l}from"./form-otp-verification.js";import{FormPhoneNumberInput as j}from"./form-phone-number-input.js";import{FormPredictiveTextInput as c}from"./form-predictive-text-input.js";import{FormRangeSelect as d}from"./form-range-select.js";import{FormRangeSlider as g}from"./form-range-slider.js";import{FormSelect as S}from"./form-select.js";import{FormSelectHistogram as I}from"./form-select-histogram.js";import{FormSlider as b}from"./form-slider.js";import{FormTextarea as k}from"./form-textarea.js";import{FormTimeRangePicker as x}from"./form-time-range-picker.js";import{FormTimepicker as h}from"./form-timepicker.js";import{FormUnitNumberInput as N}from"./form-unit-number-input.js";const R={DateInput:t,DateRangeInput:m,ESignature:o,HistogramSlider:e,Input:i,InputGroup:f,MaskedInput:s,Label:p,MultiSelect:n,NestedSelect:a,NestedMultiSelect:u,Select:S,SelectHistogram:I,Slider:b,RangeSlider:g,RangeSelect:d,Textarea:k,Timepicker:h,TimeRangePicker:x,CustomField:r,UnitNumberInput:N,PhoneNumberInput:j,PredictiveTextInput:c,OtpVerification:l};export{R as Form};
1
+ import{FormCustomField as r}from"./form-custom-field.js";import{FormDateInput as t}from"./form-date-input.js";import{FormDateRangeInput as m}from"./form-date-range-input.js";import{FormESignature as o}from"./form-e-signature.js";import{FormHistogramSlider as e}from"./form-histogram.js";import{FormInput as i}from"./form-input.js";import{FormInputGroup as f}from"./form-input-group.js";import{FormLabel as p}from"./form-label.js";import{FormMaskedInput as s}from"./form-masked-input.js";import{FormMultiSelect as n}from"./form-multi-select.js";import{FormNestedMultiSelect as u}from"./form-nested-multi-select.js";import{FormNestedSelect as a}from"./form-nested-select.js";import{FormOtpVerification as l}from"./form-otp-verification.js";import{FormPhoneNumberInput as j}from"./form-phone-number-input.js";import{FormPredictiveTextInput as c}from"./form-predictive-text-input.js";import{FormRangeSelect as d}from"./form-range-select.js";import{FormRangeSlider as g}from"./form-range-slider.js";import{FormSelect as S}from"./form-select.js";import{FormSelectHistogram as I}from"./form-select-histogram.js";import{FormSlider as b}from"./form-slider.js";import{FormTextarea as k}from"./form-textarea.js";import{FormTimeRangePicker as x}from"./form-time-range-picker.js";import{FormTimepicker as h}from"./form-timepicker.js";import{FormUnitNumberInput as N}from"./form-unit-number-input.js";const R={CustomField:r,DateInput:t,DateRangeInput:m,ESignature:o,HistogramSlider:e,Input:i,InputGroup:f,Label:p,MaskedInput:s,MultiSelect:n,NestedMultiSelect:u,NestedSelect:a,OtpVerification:l,PhoneNumberInput:j,PredictiveTextInput:c,RangeSelect:d,RangeSlider:g,Select:S,SelectHistogram:I,Slider:b,Textarea:k,Timepicker:h,TimeRangePicker:x,UnitNumberInput:N};export{R as Form};
2
2
  //# sourceMappingURL=index.js.map
package/form/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/form/index.ts"],"sourcesContent":["import { FormCustomField } from \"./form-custom-field\";\nimport { FormDateInput } from \"./form-date-input\";\nimport { FormDateRangeInput } from \"./form-date-range-input\";\nimport { FormESignature } from \"./form-e-signature\";\nimport { FormHistogramSlider } from \"./form-histogram\";\nimport { FormInput } from \"./form-input\";\nimport { FormInputGroup } from \"./form-input-group\";\nimport { FormLabel } from \"./form-label\";\nimport { FormMaskedInput } from \"./form-masked-input\";\nimport { FormMultiSelect } from \"./form-multi-select\";\nimport { FormNestedMultiSelect } from \"./form-nested-multi-select\";\nimport { FormNestedSelect } from \"./form-nested-select\";\nimport { FormOtpVerification } from \"./form-otp-verification\";\nimport { FormPhoneNumberInput } from \"./form-phone-number-input\";\nimport { FormPredictiveTextInput } from \"./form-predictive-text-input\";\nimport { FormRangeSelect } from \"./form-range-select\";\nimport { FormRangeSlider } from \"./form-range-slider\";\nimport { FormSelect } from \"./form-select\";\nimport { FormSelectHistogram } from \"./form-select-histogram\";\nimport { FormSlider } from \"./form-slider\";\nimport { FormTextarea } from \"./form-textarea\";\nimport { FormTimeRangePicker } from \"./form-time-range-picker\";\nimport { FormTimepicker } from \"./form-timepicker\";\nimport { FormUnitNumberInput } from \"./form-unit-number-input\";\n\nexport * from \"./types\";\n\nexport const Form = {\n DateInput: FormDateInput,\n DateRangeInput: FormDateRangeInput,\n ESignature: FormESignature,\n HistogramSlider: FormHistogramSlider,\n Input: FormInput,\n InputGroup: FormInputGroup,\n MaskedInput: FormMaskedInput,\n Label: FormLabel,\n MultiSelect: FormMultiSelect,\n NestedSelect: FormNestedSelect,\n NestedMultiSelect: FormNestedMultiSelect,\n Select: FormSelect,\n SelectHistogram: FormSelectHistogram,\n Slider: FormSlider,\n RangeSlider: FormRangeSlider,\n RangeSelect: FormRangeSelect,\n Textarea: FormTextarea,\n Timepicker: FormTimepicker,\n TimeRangePicker: FormTimeRangePicker,\n CustomField: FormCustomField,\n UnitNumberInput: FormUnitNumberInput,\n PhoneNumberInput: FormPhoneNumberInput,\n PredictiveTextInput: FormPredictiveTextInput,\n OtpVerification: FormOtpVerification,\n};\n"],"names":["Form","DateInput","FormDateInput","DateRangeInput","FormDateRangeInput","ESignature","FormESignature","HistogramSlider","FormHistogramSlider","Input","FormInput","InputGroup","FormInputGroup","MaskedInput","FormMaskedInput","Label","FormLabel","MultiSelect","FormMultiSelect","NestedSelect","FormNestedSelect","NestedMultiSelect","FormNestedMultiSelect","Select","FormSelect","SelectHistogram","FormSelectHistogram","Slider","FormSlider","RangeSlider","FormRangeSlider","RangeSelect","FormRangeSelect","Textarea","FormTextarea","Timepicker","FormTimepicker","TimeRangePicker","FormTimeRangePicker","CustomField","FormCustomField","UnitNumberInput","FormUnitNumberInput","PhoneNumberInput","FormPhoneNumberInput","PredictiveTextInput","FormPredictiveTextInput","OtpVerification","FormOtpVerification"],"mappings":"22CA2BO,MAAMA,EAAO,CAChBC,UAAWC,EACXC,eAAgBC,EAChBC,WAAYC,EACZC,gBAAiBC,EACjBC,MAAOC,EACPC,WAAYC,EACZC,YAAaC,EACbC,MAAOC,EACPC,YAAaC,EACbC,aAAcC,EACdC,kBAAmBC,EACnBC,OAAQC,EACRC,gBAAiBC,EACjBC,OAAQC,EACRC,YAAaC,EACbC,YAAaC,EACbC,SAAUC,EACVC,WAAYC,EACZC,gBAAiBC,EACjBC,YAAaC,EACbC,gBAAiBC,EACjBC,iBAAkBC,EAClBC,oBAAqBC,EACrBC,gBAAiBC"}
1
+ {"version":3,"file":"index.js","sources":["../../src/form/index.ts"],"sourcesContent":["import { FormCustomField } from \"./form-custom-field\";\nimport { FormDateInput } from \"./form-date-input\";\nimport { FormDateRangeInput } from \"./form-date-range-input\";\nimport { FormESignature } from \"./form-e-signature\";\nimport { FormHistogramSlider } from \"./form-histogram\";\nimport { FormInput } from \"./form-input\";\nimport { FormInputGroup } from \"./form-input-group\";\nimport { FormLabel } from \"./form-label\";\nimport { FormMaskedInput } from \"./form-masked-input\";\nimport { FormMultiSelect } from \"./form-multi-select\";\nimport { FormNestedMultiSelect } from \"./form-nested-multi-select\";\nimport { FormNestedSelect } from \"./form-nested-select\";\nimport { FormOtpVerification } from \"./form-otp-verification\";\nimport { FormPhoneNumberInput } from \"./form-phone-number-input\";\nimport { FormPredictiveTextInput } from \"./form-predictive-text-input\";\nimport { FormRangeSelect } from \"./form-range-select\";\nimport { FormRangeSlider } from \"./form-range-slider\";\nimport { FormSelect } from \"./form-select\";\nimport { FormSelectHistogram } from \"./form-select-histogram\";\nimport { FormSlider } from \"./form-slider\";\nimport { FormTextarea } from \"./form-textarea\";\nimport { FormTimeRangePicker } from \"./form-time-range-picker\";\nimport { FormTimepicker } from \"./form-timepicker\";\nimport { FormUnitNumberInput } from \"./form-unit-number-input\";\n\nexport * from \"./types\";\n\n/**\n * A collection of form field components that each combine a label, input\n * control, and inline error message with consistent ARIA wiring.\n *\n * Use `Form.*` sub-components to build accessible forms. Use `Form.CustomField` to wrap any\n * bespoke input element in the same layout.\n *\n * Sub-components:\n * - `Form.CustomField` — layout shell for wrapping custom input elements.\n * - `Form.DateInput` — single date picker.\n * - `Form.DateRangeInput` — date range picker.\n * - `Form.ESignature` — e-signature capture field.\n * - `Form.HistogramSlider` — range slider with histogram overlay.\n * - `Form.Input` — single-line text input field.\n * - `Form.InputGroup` — grouped inputs with shared label and error state.\n * - `Form.Label` — standalone label for use outside a `Form.*` field.\n * - `Form.MaskedInput` — text input with a character-level input mask.\n * - `Form.MultiSelect` — multi-value dropdown select.\n * - `Form.NestedMultiSelect` — hierarchical multi-value select.\n * - `Form.NestedSelect` — hierarchical single-value select.\n * - `Form.OtpVerification` — OTP send-and-verify flow.\n * - `Form.PhoneNumberInput` — phone number input with country code selection.\n * - `Form.PredictiveTextInput` — text input with predictive suggestions.\n * - `Form.RangeSelect` — dual-value range dropdown select.\n * - `Form.RangeSlider` — dual-handle range slider.\n * - `Form.Select` — single-value dropdown select.\n * - `Form.SelectHistogram` — select control with histogram.\n * - `Form.Slider` — single-value range slider.\n * - `Form.Textarea` — multi-line text area.\n * - `Form.Timepicker` — time picker.\n * - `Form.TimeRangePicker` — time range picker.\n * - `Form.UnitNumberInput` — structured unit number input.\n */\nexport const Form = {\n /** Layout shell that wraps any custom input element with label, subtitle, and error message. */\n CustomField: FormCustomField,\n\n /** Single date picker with form layout. */\n DateInput: FormDateInput,\n\n /** Date range picker with form layout. */\n DateRangeInput: FormDateRangeInput,\n\n /** E-signature capture field with form layout. */\n ESignature: FormESignature,\n\n /** Range slider with histogram overlay and form layout. */\n HistogramSlider: FormHistogramSlider,\n\n /** Single-line text input field with form layout. */\n Input: FormInput,\n\n /** Grouped inputs with shared label, error state, and form layout. */\n InputGroup: FormInputGroup,\n\n /** Standalone label element for use outside a `Form.*` field with optional subtitle and addon icon. */\n Label: FormLabel,\n\n /** Text input with a character-level input mask and form layout. */\n MaskedInput: FormMaskedInput,\n\n /** Multi-value dropdown select with form layout. */\n MultiSelect: FormMultiSelect,\n\n /** Hierarchical multi-value select with form layout. */\n NestedMultiSelect: FormNestedMultiSelect,\n\n /** Hierarchical single-value select with form layout. */\n NestedSelect: FormNestedSelect,\n\n /** OTP send-and-verify flow with form layout. */\n OtpVerification: FormOtpVerification,\n\n /** Phone number input with country code selection and form layout. */\n PhoneNumberInput: FormPhoneNumberInput,\n\n /** Text input with predictive suggestions and form layout. */\n PredictiveTextInput: FormPredictiveTextInput,\n\n /** Dual-value range dropdown select with form layout. */\n RangeSelect: FormRangeSelect,\n\n /** Dual-handle range slider with form layout. */\n RangeSlider: FormRangeSlider,\n\n /** Single-value dropdown select with form layout. */\n Select: FormSelect,\n\n /** Select control with histogram and form layout. */\n SelectHistogram: FormSelectHistogram,\n\n /** Single-value range slider with form layout. */\n Slider: FormSlider,\n\n /** Multi-line text area with form layout. */\n Textarea: FormTextarea,\n\n /** Time picker with form layout. */\n Timepicker: FormTimepicker,\n\n /** Time range picker with form layout. */\n TimeRangePicker: FormTimeRangePicker,\n\n /** Structured unit number input with form layout. */\n UnitNumberInput: FormUnitNumberInput,\n};\n"],"names":["Form","CustomField","FormCustomField","DateInput","FormDateInput","DateRangeInput","FormDateRangeInput","ESignature","FormESignature","HistogramSlider","FormHistogramSlider","Input","FormInput","InputGroup","FormInputGroup","Label","FormLabel","MaskedInput","FormMaskedInput","MultiSelect","FormMultiSelect","NestedMultiSelect","FormNestedMultiSelect","NestedSelect","FormNestedSelect","OtpVerification","FormOtpVerification","PhoneNumberInput","FormPhoneNumberInput","PredictiveTextInput","FormPredictiveTextInput","RangeSelect","FormRangeSelect","RangeSlider","FormRangeSlider","Select","FormSelect","SelectHistogram","FormSelectHistogram","Slider","FormSlider","Textarea","FormTextarea","Timepicker","FormTimepicker","TimeRangePicker","FormTimeRangePicker","UnitNumberInput","FormUnitNumberInput"],"mappings":"22CA4DO,MAAMA,EAAO,CAEhBC,YAAaC,EAGbC,UAAWC,EAGXC,eAAgBC,EAGhBC,WAAYC,EAGZC,gBAAiBC,EAGjBC,MAAOC,EAGPC,WAAYC,EAGZC,MAAOC,EAGPC,YAAaC,EAGbC,YAAaC,EAGbC,kBAAmBC,EAGnBC,aAAcC,EAGdC,gBAAiBC,EAGjBC,iBAAkBC,EAGlBC,oBAAqBC,EAGrBC,YAAaC,EAGbC,YAAaC,EAGbC,OAAQC,EAGRC,gBAAiBC,EAGjBC,OAAQC,EAGRC,SAAUC,EAGVC,WAAYC,EAGZC,gBAAiBC,EAGjBC,gBAAiBC"}
package/form/types.d.ts CHANGED
@@ -20,79 +20,228 @@ import type { SelectHistogramProps } from "../select-histogram";
20
20
  import type { TimeRangePickerProps } from "../time-range-picker/types";
21
21
  import type { TimepickerProps } from "../timepicker/types";
22
22
  import type { UnitNumberInputProps } from "../unit-number/types";
23
+ /**
24
+ * Display mechanism for the form label addon.
25
+ *
26
+ * - `"popover"` renders an icon that triggers a popover.
27
+ * - `"tooltip"` is currently unsupported.
28
+ */
23
29
  export type FormLabelAddonType = "tooltip" | "popover";
24
- export interface FormLabelAddonTriggerProps {
25
- addonType?: FormLabelAddonType | undefined;
26
- icon?: JSX.Element | undefined;
27
- "data-testid"?: string | undefined;
28
- }
30
+ /**
31
+ * Configuration for an informational icon rendered inline with a form label.
32
+ */
29
33
  export interface FormLabelAddonProps {
34
+ /** Text or element displayed inside the popover overlay. */
30
35
  content: string | JSX.Element;
36
+ /**
37
+ * Display mechanism for the addon.
38
+ * Omit to render no addon icon.
39
+ */
31
40
  type?: FormLabelAddonType | undefined;
41
+ /**
42
+ * Custom icon element.
43
+ *
44
+ * @default <ICircleFillIcon />
45
+ */
32
46
  icon?: JSX.Element | undefined;
33
47
  id?: string | undefined;
48
+ /** Stacking order of the popover overlay. */
34
49
  zIndex?: number | undefined;
35
50
  "data-testid"?: string | undefined;
36
51
  }
52
+ /**
53
+ * Props for a form field label or `Form.Label` component.
54
+ */
37
55
  export interface FormLabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {
56
+ /** Informational icon and popover rendered inline with the label text. */
38
57
  addon?: FormLabelAddonProps | undefined;
58
+ /** Supporting description rendered below the label. */
39
59
  subtitle?: string | JSX.Element | undefined;
40
60
  "data-testid"?: string | undefined;
41
61
  }
62
+ /**
63
+ * Controls how a form field's outer container is rendered.
64
+ *
65
+ * - `"flex"` — plain `div` with no column constraints.
66
+ * - `"grid"` — `ColDiv` that accepts responsive column span props from `ColProps`.
67
+ */
42
68
  export type FormElementLayoutType = "flex" | "grid";
69
+ /**
70
+ * Common props shared by all `Form.*` field components.
71
+ */
43
72
  export interface BaseFormElementProps extends ColProps {
73
+ /**
74
+ * Label rendered above the input. Accepts a plain string or a
75
+ * `FormLabelProps` object to provide additional configuration.
76
+ */
44
77
  label?: FormLabelProps | string | undefined;
78
+ /**
79
+ * Inline error text rendered below the input.
80
+ */
45
81
  errorMessage?: string | React.ReactNode | undefined;
46
82
  "data-testid"?: string | undefined;
47
83
  "data-error-testid"?: string | undefined;
48
- /** The layout type. Values: "flex" | "grid" */
84
+ /**
85
+ * Controls whether the container uses flex layout or a responsive column grid.
86
+ */
49
87
  layoutType?: FormElementLayoutType | undefined;
50
88
  }
89
+ /**
90
+ * Props for the `FormWrapper` layout container.
91
+ */
51
92
  export interface FormWrapperProps extends BaseFormElementProps {
52
93
  children: JSX.Element | JSX.Element[];
94
+ /**
95
+ * Base ID used to derive ARIA label, subtitle, and error-message element
96
+ * IDs. A generated ID is used when omitted.
97
+ */
53
98
  id?: string | undefined;
54
99
  }
100
+ /**
101
+ * Props for `Form.Input`, combining text input props with the shared form
102
+ * field layout.
103
+ */
55
104
  export interface FormInputProps extends InputPartialProps, BaseFormElementProps {
56
105
  }
106
+ /**
107
+ * Props for `Form.InputGroup`, combining input group props with the shared
108
+ * form field layout.
109
+ *
110
+ * `T` is the option item type. `V` is the selected value type.
111
+ */
57
112
  export interface FormInputGroupProps<T, V> extends InputGroupPartialProps<T, V>, BaseFormElementProps {
58
113
  }
114
+ /**
115
+ * Props for `Form.MaskedInput`, combining masked input props with the shared
116
+ * form field layout.
117
+ */
59
118
  export interface FormMaskedInputProps extends MaskedInputPartialProps, BaseFormElementProps {
60
119
  }
120
+ /**
121
+ * Props for `Form.Textarea`, combining textarea props with the shared form
122
+ * field layout.
123
+ */
61
124
  export interface FormTextareaProps extends TextareaPartialProps, BaseFormElementProps {
62
125
  }
126
+ /**
127
+ * Props for `Form.CustomField`, which wraps any custom input element with a
128
+ * shared label, subtitle, and inline error message layout.
129
+ */
63
130
  export interface FormCustomFieldProps extends FormWrapperProps, BaseFormElementProps {
64
131
  }
132
+ /**
133
+ * Props for `Form.Select`, combining single-select input props with the shared
134
+ * form field layout.
135
+ *
136
+ * `T` is the option item type. `V` is the selected value type.
137
+ */
65
138
  export interface FormInputSelectProps<T, V> extends InputSelectPartialProps<T, V>, BaseFormElementProps {
66
139
  }
140
+ /**
141
+ * Props for `Form.RangeSelect`, combining range-select input props with the
142
+ * shared form field layout.
143
+ *
144
+ * `T` is the option item type. `V` is the selected value type.
145
+ */
67
146
  export interface FormInputRangeSelectProps<T, V> extends InputRangeSelectPartialProps<T, V>, BaseFormElementProps {
68
147
  }
148
+ /**
149
+ * Props for `Form.MultiSelect`, combining multi-select input props with the
150
+ * shared form field layout.
151
+ *
152
+ * `T` is the option item type. `V` is the selected value type.
153
+ */
69
154
  export interface FormMultiSelectProps<T, V> extends InputMultiSelectPartialProps<T, V>, BaseFormElementProps {
70
155
  }
156
+ /**
157
+ * Props for `Form.NestedSelect`, combining nested single-select input props
158
+ * with the shared form field layout.
159
+ *
160
+ * `V1`, `V2`, and `V3` are the value types for the first, second, and third
161
+ * nesting levels respectively.
162
+ */
71
163
  export interface FormNestedSelectProps<V1, V2, V3> extends InputNestedSelectPartialProps<V1, V2, V3>, BaseFormElementProps {
72
164
  }
165
+ /**
166
+ * Props for `Form.NestedMultiSelect`, combining nested multi-select input
167
+ * props with the shared form field layout.
168
+ *
169
+ * `V1`, `V2`, and `V3` are the value types for the first, second, and third
170
+ * nesting levels respectively.
171
+ */
73
172
  export interface FormNestedMultiSelectProps<V1, V2, V3> extends InputNestedMultiSelectPartialProps<V1, V2, V3>, BaseFormElementProps {
74
173
  }
174
+ /**
175
+ * Props for `Form.DateInput`, combining date input props with the shared form
176
+ * field layout.
177
+ */
75
178
  export interface FormDateInputProps extends DateInputProps, BaseFormElementProps {
76
179
  }
180
+ /**
181
+ * Props for `Form.DateRangeInput`, combining date-range input props with the
182
+ * shared form field layout.
183
+ */
77
184
  export interface FormDateRangeInputProps extends DateRangeInputProps, BaseFormElementProps {
78
185
  }
186
+ /**
187
+ * Props for `Form.Timepicker`, combining time picker props with the shared
188
+ * form field layout.
189
+ */
79
190
  export interface FormTimepickerProps extends TimepickerProps, BaseFormElementProps {
80
191
  }
192
+ /**
193
+ * Props for `Form.UnitNumberInput`, combining unit-number input props with the
194
+ * shared form field layout.
195
+ */
81
196
  export interface FormUnitNumberInputProps extends UnitNumberInputProps, BaseFormElementProps {
82
197
  }
198
+ /**
199
+ * Props for `Form.PhoneNumberInput`, combining phone-number input props with
200
+ * the shared form field layout.
201
+ */
83
202
  export interface FormPhoneNumberInputProps extends PhoneNumberInputProps, BaseFormElementProps {
84
203
  }
204
+ /**
205
+ * Props for `Form.TimeRangePicker`, combining time-range picker props with the
206
+ * shared form field layout.
207
+ */
85
208
  export interface FormTimeRangePickerProps extends TimeRangePickerProps, BaseFormElementProps {
86
209
  }
210
+ /**
211
+ * Props for `Form.PredictiveTextInput`, combining predictive text input props
212
+ * with the shared form field layout.
213
+ *
214
+ * `T` is the suggestion item type. `V` is the selected value type.
215
+ */
87
216
  export interface FormPredictiveTextInputProps<T, V> extends PredictiveTextInputProps<T, V>, BaseFormElementProps {
88
217
  }
218
+ /**
219
+ * Props for `Form.Slider`, combining single-value slider props with the shared
220
+ * form field layout.
221
+ */
89
222
  export interface FormSliderProps extends InputSliderProps, BaseFormElementProps {
90
223
  }
224
+ /**
225
+ * Props for `Form.RangeSlider`, combining range slider props with the shared
226
+ * form field layout.
227
+ */
91
228
  export interface FormRangeSliderProps extends InputRangeSliderProps, BaseFormElementProps {
92
229
  }
230
+ /**
231
+ * Props for `Form.HistogramSlider`, combining histogram slider props with the
232
+ * shared form field layout.
233
+ */
93
234
  export interface FormHistogramSliderProps extends HistogramSliderProps, BaseFormElementProps {
94
235
  }
236
+ /**
237
+ * Props for `Form.ESignature`, combining e-signature props with the shared
238
+ * form field layout.
239
+ */
95
240
  export interface FormESignatureProps extends EsignatureProps, BaseFormElementProps {
96
241
  }
242
+ /**
243
+ * Props for `Form.SelectHistogram`, combining select-histogram props with the
244
+ * shared form field layout.
245
+ */
97
246
  export interface FormSelectHistogramProps extends SelectHistogramProps, BaseFormElementProps {
98
247
  }
@@ -1,3 +1,10 @@
1
1
  import type { FullscreenImageCarouselProps, FullscreenImageCarouselRef } from "./types";
2
2
  export declare const Component: ({ items, initialActiveItemIndex, hideThumbnail, hideNavigation, hideCounter, hideMagnifier, onDelete, onClose, insets, show, ...otherProps }: FullscreenImageCarouselProps, ref: React.Ref<FullscreenImageCarouselRef>) => import("react/jsx-runtime").JSX.Element;
3
+ /**
4
+ * A fullscreen modal carousel for browsing images and custom media items.
5
+ *
6
+ * Use to present a collection of images or custom content in an overlay with
7
+ * navigation controls, zoom support, and an optional thumbnail strip.
8
+ * The top info bar is rendered only when at least one item provides some file metadata.
9
+ */
3
10
  export declare const FullscreenImageCarousel: (props: FullscreenImageCarouselProps & import("react").RefAttributes<FullscreenImageCarouselRef>) => React.ReactElement | null;
@@ -1,2 +1,2 @@
1
- import{__rest as e}from"../_virtual/_tslib.js";import{jsx as i,jsxs as t,Fragment as l}from"react/jsx-runtime";import{ChevronLeftIcon as r,ChevronRightIcon as o,MagnifierPlusIcon as n,MagnifierMinusIcon as a,CrossIcon as s}from"@lifesg/react-icons";import{BinIcon as d}from"@lifesg/react-icons/bin";import{clearAnnouncer as c,announce as m}from"@react-aria/live-announcer";import u from"clsx";import{forwardRef as h,useState as v,useRef as p,useMemo as f,useCallback as g,useImperativeHandle as b,useEffect as N}from"react";import{TransformWrapper as j,TransformComponent as x}from"react-zoom-pan-pinch";import{ModalV2 as k}from"../modal-v2/index.js";import{ClickableIcon as y}from"../shared/clickable-icon/clickable-icon.js";import{useStateCallback as w}from"../shared/hooks/use-state-callback.js";import{ImagePlaceholder as C}from"../shared/image-placeholder/image-placeholder.js";import"../theme/theme-provider/index.js";import{formatUnitValue as I}from"../theme/utils/css-variable.js";import"../theme/theme-provider/context.js";import"../theme/tokens/border.js";import"../theme/tokens/colour.js";import"../theme/tokens/font.js";import"../theme/tokens/media-query.js";import{useApplyStyle as T}from"../theme/utils/use-apply-styles.js";import"../theme/utils/use-media-query.js";import{Typography as $}from"../typography/index.js";import"../util/calendar-helper.js";import"../external/dayjs/dayjs.min.js";import"../util/simple-id-generator.js";import"../util/string-helper.js";import{useEventListener as B}from"../util/use-event-listener.js";import{tokens as S,carouselModalContent as A,imageGalleryContainer as L,imageGalleryWrapper as D,imageGallerySwipe as M,iconButton as z,arrowButton as X,arrowButtonLeft as Z,arrowButtonRight as O,boxChip as R,chip as W,topActionButtons as q,iconButtonError as E,imageGallerySlides as P,imageGallerySlide as V,focusableImageRegion as _,slidePlaceholderImage as F,slideImage as H,thumbnailContainer as G,thumbnailWrapper as J,thumbnailItemContainer as K,thumbnailItem as Q,thumbnailImage as U,fileInfoFileName as Y,fileInfoFileSize as ee,fileInfoTextWrapper as ie,fileInfoTextWrapperCentered as te}from"./fullscreen-image-carousel.styles.js";import{StatefulImage as le}from"./stateful-image.js";const re=e=>!!e&&"custom"===e.type,oe=(h,oe)=>{var ne,{items:ae,initialActiveItemIndex:se,hideThumbnail:de=!1,hideNavigation:ce=!1,hideCounter:me=!1,hideMagnifier:ue=!1,onDelete:he,onClose:ve,insets:pe,show:fe}=h,ge=e(h,["items","initialActiveItemIndex","hideThumbnail","hideNavigation","hideCounter","hideMagnifier","onDelete","onClose","insets","show"]);const[be,Ne]=w(null!=se?se:0),[je,xe]=v({}),[ke,ye]=v(1),[we,Ce]=v(),[Ie,Te]=v(),$e=p(null),Be=p([]),Se=p([]),Ae=p(null),Le=p(null),De=p(null),Me=p(null),ze=p(null),Xe=we&&Ie?we-Ie:0,Ze=ae[be],Oe=ae.some((e=>{var i;return re(e)&&!!(null===(i=e.itemLabel)||void 0===i?void 0:i.trim())})),Re=Oe?"item":"image",We=f((()=>ae.some((e=>{var i,t;return(null===(i=e.fileName)||void 0===i?void 0:i.trim())||(null===(t=e.fileSize)||void 0===t?void 0:t.trim())}))),[ae]);T(Le,{[S.topActionButtons.insetTop]:I(null==pe?void 0:pe.top,"px"),[S.topActionButtons.insetLeft]:I(null==pe?void 0:pe.left,"px"),[S.topActionButtons.insetRight]:I(null==pe?void 0:pe.right,"px")}),T(De,{[S.arrowButton.insetLeft]:I(null==pe?void 0:pe.left,"px")}),T(Me,{[S.arrowButton.insetRight]:I(null==pe?void 0:pe.right,"px")}),T(ze,{[S.thumbnailContainer.insetBottom]:I(null==pe?void 0:pe.bottom,"px")});const qe=g((e=>{var i,t;const l=ae[e],r=Oe?"Item":"Image",o=re(l)?(null===(i=l.itemLabel)||void 0===i?void 0:i.trim())||"":(null===(t=l.alt)||void 0===t?void 0:t.trim())||"",n=`${r} ${e+1} of ${ae.length}.`;return o?`${o}. ${n}`:n}),[ae,Oe]);b(oe,(()=>({currentItemIndex:be,setCurrentItem:He,goToPrevItem:_e,goToNextItem:Fe}))),B("keydown",(function(e){"ArrowRight"===e.key?Fe():"ArrowLeft"===e.key?_e():"Escape"===e.key&&(null==ve||ve())}),"document"),N((()=>{var e;fe&&(null===(e=Ae.current)||void 0===e||e.focus())}),[fe]),N((()=>{0!==ae.length?be>ae.length-1&&Ne(ae.length-1):Ne(0)}),[be,ae.length,Ne]),N((()=>{var e,i;null===(i=null===(e=Be.current)||void 0===e?void 0:e[be])||void 0===i||i.scrollIntoView({behavior:"smooth",inline:"center"}),ye(1)}),[be]);const Ee=e=>{ye(e.state.scale)};const Pe=({src:e,height:i,width:t})=>{xe((l=>Object.assign(Object.assign({},l),{[e]:{height:i,width:t}})))},Ve=()=>{if(!Ze||re(Ze))return;const e=je[Ze.src];if($e.current&&e){const{clientHeight:i,clientWidth:t}=$e.current,{width:l,height:r}=e,o=r/l<i/t;return l<t&&r<i?o?t/l:i/r:o?i/(r/(l/t)):t/(l/(r/i))}},_e=()=>{var e,i;null===(i=null===(e=Se.current)||void 0===e?void 0:e[be])||void 0===i||i.resetTransform(),Ne((e=>0===e?ae.length-1:e-1),(e=>{c("polite"),m(qe(e),"polite")}))},Fe=()=>{var e,i;null===(i=null===(e=Se.current)||void 0===e?void 0:e[be])||void 0===i||i.resetTransform(),Ne((e=>e===ae.length-1?0:e+1),(e=>{c("polite"),m(qe(e),"polite")}))},He=e=>{var i,t;null===(t=null===(i=Se.current)||void 0===i?void 0:i[be])||void 0===t||t.resetTransform(),Ne(e)};return i(k,Object.assign({},ge,{"data-testid":"image-carousel-modal","aria-label":Oe?"Carousel":"Image carousel",show:fe,disableInitialFocus:!0,children:t("div",{className:A,children:[t("div",{className:L,children:[t("div",{className:D,children:[i("div",{className:M,ref:$e,onTouchStart:e=>{ke<=1&&Ce(e.touches[0].clientX)},onTouchMove:e=>{!we||ke>1||Te(e.touches[0].clientX)},onTouchEnd:()=>{$e.current&&(Math.abs(Xe)>$e.current.offsetWidth/3&&(Xe>0?Fe():_e()),Ce(void 0),Te(void 0))},children:i("div",{className:P,style:{transform:`translateX(calc(${100*-be}% - ${Xe}px))`},children:ae.map(((e,t)=>{const l=t===be,r=Math.abs(t-be)<=1||0===be&&t===ae.length-1||be===ae.length-1&&0===t;return i("div",{className:V,"data-testid":"slide-item",children:i("div",{className:_,ref:l?Ae:null,tabIndex:l?0:-1,children:re(e)?r?e.renderContent():i(C,{className:F}):i(j,{ref:e=>Se.current[t]=e,panning:{disabled:ke<=1},initialScale:1,onZoom:Ee,onZoomStop:Ee,onWheel:Ee,children:i(x,{children:i(le,{className:H,src:e.src,alt:qe(t),placeholder:i(C,{className:F}),fit:"scale-down",retrieveImageDimension:!0,setDimension:Pe})})})})},t)}))})}),!ce&&t(l,{children:[i(y,{className:u(z,X,Z),ref:De,"aria-label":`Previous ${Re}`,"data-testid":"prev-btn",onClick:_e,children:i(r,{"aria-hidden":!0})}),i(y,{className:u(z,X,O),ref:Me,"aria-label":`Next ${Re}`,"data-testid":"forward-btn",onClick:Fe,children:i(o,{"aria-hidden":!0})})]}),!me&&i("div",{className:R,"aria-hidden":"true",children:i($.BodyXS,{className:W,weight:"semibold","data-testid":"carousel-counter",children:`${be+1}/${ae.length}`})})]}),!de&&i("div",{className:G,ref:ze,"aria-hidden":"true","data-testid":"thumbnail-container",children:i("div",{className:J,children:ae.map(((e,t)=>{var l;const r=re(e)?e.thumbnailSrc:null!==(l=e.thumbnailSrc)&&void 0!==l?l:e.src;return i("div",{className:K,children:i("div",{className:Q,"data-active":t===be,"data-testid":"thumbnail-item",onClick:()=>He(t),ref:e=>Be.current[t]=e,children:r?i(le,{className:U,src:r,alt:`Thumbnail ${t+1}`,fit:"cover"}):i(C,{className:F})})},t)}))})})]}),t("div",{className:q,ref:Le,"data-has-file-info":We,children:[We&&(()=>{const{fileName:e,fileSize:l}=null!=Ze?Ze:{},r=null==e?void 0:e.trim(),o=null==l?void 0:l.trim();return t("div",{className:u(ie,!o&&te),"aria-live":"polite","aria-atomic":"true","data-testid":"file-info-bar",children:[r&&i($.BodyBL,{className:Y,weight:"semibold","data-testid":"file-info-name",children:r}),o&&i($.BodyMD,{className:ee,"data-testid":"file-info-size",children:o})]})})(),!ue&&!re(Ze)&&i(y,{className:z,"aria-label":1===ke?"Zoom in":"Zoom out",onClick:()=>{var e,i,t,l;if(1===ke){const t=Ve();null===(i=null===(e=Se.current)||void 0===e?void 0:e[be])||void 0===i||i.centerView(t),ye(null!=t?t:1)}else ye(1),null===(l=null===(t=Se.current)||void 0===t?void 0:t[be])||void 0===l||l.resetTransform()},children:i(1===ke?n:a,{"aria-hidden":!0})}),he&&i(y,{className:u(z,E),"aria-label":`Delete ${re(Ze)&&(null===(ne=Ze.itemLabel)||void 0===ne?void 0:ne.trim())||"image"}`,"data-testid":"delete-btn",onClick:()=>{Ze&&he&&he(Ze,be)},children:i(d,{"aria-hidden":!0})}),i(y,{className:z,"aria-label":Oe?"Close carousel":"Close image carousel",onClick:ve,children:i(s,{"aria-hidden":!0})})]})]})}))},ne=h(oe);export{oe as Component,ne as FullscreenImageCarousel};
1
+ import{__rest as e}from"../_virtual/_tslib.js";import{jsx as i,jsxs as t,Fragment as l}from"react/jsx-runtime";import{ChevronLeftIcon as r,ChevronRightIcon as o,MagnifierPlusIcon as a,MagnifierMinusIcon as n,CrossIcon as s}from"@lifesg/react-icons";import{BinIcon as d}from"@lifesg/react-icons/bin";import{clearAnnouncer as c,announce as m}from"@react-aria/live-announcer";import u from"clsx";import{forwardRef as h,useState as v,useRef as p,useMemo as f,useCallback as g,useImperativeHandle as b,useEffect as N}from"react";import{TransformWrapper as j,TransformComponent as x}from"react-zoom-pan-pinch";import{ModalV2 as k}from"../modal-v2/modal-v2.js";import{ClickableIcon as y}from"../shared/clickable-icon/clickable-icon.js";import{useStateCallback as w}from"../shared/hooks/use-state-callback.js";import{ImagePlaceholder as C}from"../shared/image-placeholder/image-placeholder.js";import"../theme/theme-provider/index.js";import{formatUnitValue as I}from"../theme/utils/css-variable.js";import"../theme/theme-provider/context.js";import"../theme/tokens/border.js";import"../theme/tokens/colour.js";import"../theme/tokens/font.js";import"../theme/tokens/media-query.js";import{useApplyStyle as T}from"../theme/utils/use-apply-styles.js";import"../theme/utils/use-media-query.js";import{Typography as $}from"../typography/index.js";import"../util/calendar-helper.js";import"../external/dayjs/dayjs.min.js";import"../util/simple-id-generator.js";import"../util/string-helper.js";import{useEventListener as B}from"../util/use-event-listener.js";import{tokens as S,carouselModalContent as A,imageGalleryContainer as L,imageGalleryWrapper as D,imageGallerySwipe as M,iconButton as z,arrowButton as X,arrowButtonLeft as Z,arrowButtonRight as O,boxChip as R,chip as W,topActionButtons as q,iconButtonError as E,imageGallerySlides as P,imageGallerySlide as V,focusableImageRegion as _,slidePlaceholderImage as F,slideImage as H,thumbnailContainer as G,thumbnailWrapper as J,thumbnailItemContainer as K,thumbnailItem as Q,thumbnailImage as U,fileInfoFileName as Y,fileInfoFileSize as ee,fileInfoTextWrapper as ie,fileInfoTextWrapperCentered as te}from"./fullscreen-image-carousel.styles.js";import{StatefulImage as le}from"./stateful-image.js";const re=e=>!!e&&"custom"===e.type,oe=(h,oe)=>{var ae,{items:ne,initialActiveItemIndex:se,hideThumbnail:de=!1,hideNavigation:ce=!1,hideCounter:me=!1,hideMagnifier:ue=!1,onDelete:he,onClose:ve,insets:pe,show:fe}=h,ge=e(h,["items","initialActiveItemIndex","hideThumbnail","hideNavigation","hideCounter","hideMagnifier","onDelete","onClose","insets","show"]);const[be,Ne]=w(null!=se?se:0),[je,xe]=v({}),[ke,ye]=v(1),[we,Ce]=v(),[Ie,Te]=v(),$e=p(null),Be=p([]),Se=p([]),Ae=p(null),Le=p(null),De=p(null),Me=p(null),ze=p(null),Xe=we&&Ie?we-Ie:0,Ze=ne[be],Oe=ne.some((e=>{var i;return re(e)&&!!(null===(i=e.itemLabel)||void 0===i?void 0:i.trim())})),Re=Oe?"item":"image",We=f((()=>ne.some((e=>{var i,t;return(null===(i=e.fileName)||void 0===i?void 0:i.trim())||(null===(t=e.fileSize)||void 0===t?void 0:t.trim())}))),[ne]);T(Le,{[S.topActionButtons.insetTop]:I(null==pe?void 0:pe.top,"px"),[S.topActionButtons.insetLeft]:I(null==pe?void 0:pe.left,"px"),[S.topActionButtons.insetRight]:I(null==pe?void 0:pe.right,"px")}),T(De,{[S.arrowButton.insetLeft]:I(null==pe?void 0:pe.left,"px")}),T(Me,{[S.arrowButton.insetRight]:I(null==pe?void 0:pe.right,"px")}),T(ze,{[S.thumbnailContainer.insetBottom]:I(null==pe?void 0:pe.bottom,"px")});const qe=g((e=>{var i,t;const l=ne[e],r=Oe?"Item":"Image",o=re(l)?(null===(i=l.itemLabel)||void 0===i?void 0:i.trim())||"":(null===(t=l.alt)||void 0===t?void 0:t.trim())||"",a=`${r} ${e+1} of ${ne.length}.`;return o?`${o}. ${a}`:a}),[ne,Oe]);b(oe,(()=>({currentItemIndex:be,setCurrentItem:He,goToPrevItem:_e,goToNextItem:Fe}))),B("keydown",(function(e){"ArrowRight"===e.key?Fe():"ArrowLeft"===e.key?_e():"Escape"===e.key&&(null==ve||ve())}),"document"),N((()=>{var e;fe&&(null===(e=Ae.current)||void 0===e||e.focus())}),[fe]),N((()=>{0!==ne.length?be>ne.length-1&&Ne(ne.length-1):Ne(0)}),[be,ne.length,Ne]),N((()=>{var e,i;null===(i=null===(e=Be.current)||void 0===e?void 0:e[be])||void 0===i||i.scrollIntoView({behavior:"smooth",inline:"center"}),ye(1)}),[be]);const Ee=e=>{ye(e.state.scale)};const Pe=({src:e,height:i,width:t})=>{xe((l=>Object.assign(Object.assign({},l),{[e]:{height:i,width:t}})))},Ve=()=>{if(!Ze||re(Ze))return;const e=je[Ze.src];if($e.current&&e){const{clientHeight:i,clientWidth:t}=$e.current,{width:l,height:r}=e,o=r/l<i/t;return l<t&&r<i?o?t/l:i/r:o?i/(r/(l/t)):t/(l/(r/i))}},_e=()=>{var e,i;null===(i=null===(e=Se.current)||void 0===e?void 0:e[be])||void 0===i||i.resetTransform(),Ne((e=>0===e?ne.length-1:e-1),(e=>{c("polite"),m(qe(e),"polite")}))},Fe=()=>{var e,i;null===(i=null===(e=Se.current)||void 0===e?void 0:e[be])||void 0===i||i.resetTransform(),Ne((e=>e===ne.length-1?0:e+1),(e=>{c("polite"),m(qe(e),"polite")}))},He=e=>{var i,t;null===(t=null===(i=Se.current)||void 0===i?void 0:i[be])||void 0===t||t.resetTransform(),Ne(e)};return i(k,Object.assign({},ge,{"data-testid":"image-carousel-modal","aria-label":Oe?"Carousel":"Image carousel",show:fe,disableInitialFocus:!0,children:t("div",{className:A,children:[t("div",{className:L,children:[t("div",{className:D,children:[i("div",{className:M,ref:$e,onTouchStart:e=>{ke<=1&&Ce(e.touches[0].clientX)},onTouchMove:e=>{!we||ke>1||Te(e.touches[0].clientX)},onTouchEnd:()=>{$e.current&&(Math.abs(Xe)>$e.current.offsetWidth/3&&(Xe>0?Fe():_e()),Ce(void 0),Te(void 0))},children:i("div",{className:P,style:{transform:`translateX(calc(${100*-be}% - ${Xe}px))`},children:ne.map(((e,t)=>{const l=t===be,r=Math.abs(t-be)<=1||0===be&&t===ne.length-1||be===ne.length-1&&0===t;return i("div",{className:V,"data-testid":"slide-item",children:i("div",{className:_,ref:l?Ae:null,tabIndex:l?0:-1,children:re(e)?r?e.renderContent():i(C,{className:F}):i(j,{ref:e=>Se.current[t]=e,panning:{disabled:ke<=1},initialScale:1,onZoom:Ee,onZoomStop:Ee,onWheel:Ee,children:i(x,{children:i(le,{className:H,src:e.src,alt:qe(t),placeholder:i(C,{className:F}),fit:"scale-down",retrieveImageDimension:!0,setDimension:Pe})})})})},t)}))})}),!ce&&t(l,{children:[i(y,{className:u(z,X,Z),ref:De,"aria-label":`Previous ${Re}`,"data-testid":"prev-btn",onClick:_e,children:i(r,{"aria-hidden":!0})}),i(y,{className:u(z,X,O),ref:Me,"aria-label":`Next ${Re}`,"data-testid":"forward-btn",onClick:Fe,children:i(o,{"aria-hidden":!0})})]}),!me&&i("div",{className:R,"aria-hidden":"true",children:i($.BodyXS,{className:W,weight:"semibold","data-testid":"carousel-counter",children:`${be+1}/${ne.length}`})})]}),!de&&i("div",{className:G,ref:ze,"aria-hidden":"true","data-testid":"thumbnail-container",children:i("div",{className:J,children:ne.map(((e,t)=>{var l;const r=re(e)?e.thumbnailSrc:null!==(l=e.thumbnailSrc)&&void 0!==l?l:e.src;return i("div",{className:K,children:i("div",{className:Q,"data-active":t===be,"data-testid":"thumbnail-item",onClick:()=>He(t),ref:e=>Be.current[t]=e,children:r?i(le,{className:U,src:r,alt:`Thumbnail ${t+1}`,fit:"cover"}):i(C,{className:F})})},t)}))})})]}),t("div",{className:q,ref:Le,"data-has-file-info":We,children:[We&&(()=>{const{fileName:e,fileSize:l}=null!=Ze?Ze:{},r=null==e?void 0:e.trim(),o=null==l?void 0:l.trim();return t("div",{className:u(ie,!o&&te),"aria-live":"polite","aria-atomic":"true","data-testid":"file-info-bar",children:[r&&i($.BodyBL,{className:Y,weight:"semibold","data-testid":"file-info-name",children:r}),o&&i($.BodyMD,{className:ee,"data-testid":"file-info-size",children:o})]})})(),!ue&&!re(Ze)&&i(y,{className:z,"aria-label":1===ke?"Zoom in":"Zoom out",onClick:()=>{var e,i,t,l;if(1===ke){const t=Ve();null===(i=null===(e=Se.current)||void 0===e?void 0:e[be])||void 0===i||i.centerView(t),ye(null!=t?t:1)}else ye(1),null===(l=null===(t=Se.current)||void 0===t?void 0:t[be])||void 0===l||l.resetTransform()},children:i(1===ke?a:n,{"aria-hidden":!0})}),he&&i(y,{className:u(z,E),"aria-label":`Delete ${re(Ze)&&(null===(ae=Ze.itemLabel)||void 0===ae?void 0:ae.trim())||"image"}`,"data-testid":"delete-btn",onClick:()=>{Ze&&he&&he(Ze,be)},children:i(d,{"aria-hidden":!0})}),i(y,{className:z,"aria-label":Oe?"Close carousel":"Close image carousel",onClick:ve,children:i(s,{"aria-hidden":!0})})]})]})}))},ae=h(oe);export{oe as Component,ae as FullscreenImageCarousel};
2
2
  //# sourceMappingURL=fullscreen-image-carousel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fullscreen-image-carousel.js","sources":["../../src/fullscreen-image-carousel/fullscreen-image-carousel.tsx"],"sourcesContent":["import {\n ChevronLeftIcon,\n ChevronRightIcon,\n CrossIcon,\n MagnifierMinusIcon,\n MagnifierPlusIcon,\n} from \"@lifesg/react-icons\";\nimport { BinIcon } from \"@lifesg/react-icons/bin\";\nimport { announce, clearAnnouncer } from \"@react-aria/live-announcer\";\nimport clsx from \"clsx\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ReactZoomPanPinchContentRef,\n ReactZoomPanPinchRef,\n} from \"react-zoom-pan-pinch\";\nimport { TransformComponent, TransformWrapper } from \"react-zoom-pan-pinch\";\n\nimport { ModalV2 } from \"../modal-v2\";\nimport { ClickableIcon } from \"../shared/clickable-icon\";\nimport { useStateCallback } from \"../shared/hooks\";\nimport { ImagePlaceholder } from \"../shared/image-placeholder\";\nimport { formatUnitValue, useApplyStyle } from \"../theme\";\nimport { Typography } from \"../typography\";\nimport { useEventListener } from \"../util\";\nimport * as styles from \"./fullscreen-image-carousel.styles\";\nimport { StatefulImage } from \"./stateful-image\";\nimport type {\n FullscreenImageCarouselCustomItemProps,\n FullscreenImageCarouselItemProps,\n FullscreenImageCarouselProps,\n FullscreenImageCarouselRef,\n ImageDimension,\n} from \"./types\";\n\nconst isCustomItem = (\n item: FullscreenImageCarouselItemProps | undefined\n): item is FullscreenImageCarouselCustomItemProps =>\n !!item && item.type === \"custom\";\n\nexport const Component = (\n {\n items,\n initialActiveItemIndex,\n hideThumbnail = false,\n hideNavigation = false,\n hideCounter = false,\n hideMagnifier = false,\n onDelete,\n onClose,\n insets,\n show,\n ...otherProps\n }: FullscreenImageCarouselProps,\n ref: React.Ref<FullscreenImageCarouselRef>\n) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [currentSlide, setCurrentSlide] = useStateCallback(\n initialActiveItemIndex ?? 0\n );\n const [imagesDimension, setImageDimension] = useState<\n Record<string, ImageDimension>\n >({});\n const [zoom, setZoom] = useState(1);\n const [startX, setStartX] = useState<number | undefined>();\n const [endX, setEndX] = useState<number | undefined>();\n const containerRef = useRef<HTMLDivElement>(null);\n const thumbnailRefs = useRef<(HTMLDivElement | null)[]>([]);\n const zoomRefs = useRef<(ReactZoomPanPinchContentRef | null)[]>([]);\n const imageRef = useRef<HTMLDivElement>(null);\n const topActionButtonsRef = useRef<HTMLDivElement>(null);\n const prevArrowButtonRef = useRef<HTMLButtonElement>(null);\n const nextArrowButtonRef = useRef<HTMLButtonElement>(null);\n const thumbnailContainerRef = useRef<HTMLDivElement>(null);\n const diff = startX && endX ? startX - endX : 0;\n const currentItem = items[currentSlide];\n const hasAnyItemLabel = items.some(\n (item) => isCustomItem(item) && !!item.itemLabel?.trim()\n );\n const carouselItemNoun = hasAnyItemLabel ? \"item\" : \"image\";\n const hasFileInfo = useMemo(\n () =>\n items.some(\n (item) => item.fileName?.trim() || item.fileSize?.trim()\n ),\n [items]\n );\n\n useApplyStyle(topActionButtonsRef, {\n [styles.tokens.topActionButtons.insetTop]: formatUnitValue(\n insets?.top,\n \"px\"\n ),\n [styles.tokens.topActionButtons.insetLeft]: formatUnitValue(\n insets?.left,\n \"px\"\n ),\n [styles.tokens.topActionButtons.insetRight]: formatUnitValue(\n insets?.right,\n \"px\"\n ),\n });\n\n useApplyStyle(prevArrowButtonRef, {\n [styles.tokens.arrowButton.insetLeft]: formatUnitValue(\n insets?.left,\n \"px\"\n ),\n });\n\n useApplyStyle(nextArrowButtonRef, {\n [styles.tokens.arrowButton.insetRight]: formatUnitValue(\n insets?.right,\n \"px\"\n ),\n });\n\n useApplyStyle(thumbnailContainerRef, {\n [styles.tokens.thumbnailContainer.insetBottom]: formatUnitValue(\n insets?.bottom,\n \"px\"\n ),\n });\n\n const getItemAriaLabel = useCallback(\n (index: number) => {\n const item = items[index];\n const itemTypeLabel = hasAnyItemLabel ? \"Item\" : \"Image\";\n const prefix = isCustomItem(item)\n ? item.itemLabel?.trim() || \"\"\n : item.alt?.trim() || \"\";\n const positionLabel = `${itemTypeLabel} ${index + 1} of ${\n items.length\n }.`;\n\n return prefix ? `${prefix}. ${positionLabel}` : positionLabel;\n },\n [items, hasAnyItemLabel]\n );\n\n useImperativeHandle<FullscreenImageCarouselRef, FullscreenImageCarouselRef>(\n ref,\n () => ({\n currentItemIndex: currentSlide,\n setCurrentItem: goToSlide,\n goToPrevItem: goToPrevSlide,\n goToNextItem: goToNextSlide,\n })\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEventListener(\"keydown\", handleKeyDown, \"document\");\n\n useEffect(() => {\n if (show) {\n imageRef.current?.focus();\n }\n }, [show]);\n\n useEffect(() => {\n if (items.length === 0) {\n setCurrentSlide(0);\n return;\n }\n\n if (currentSlide > items.length - 1) {\n setCurrentSlide(items.length - 1);\n }\n }, [currentSlide, items.length, setCurrentSlide]);\n\n useEffect(() => {\n thumbnailRefs.current?.[currentSlide]?.scrollIntoView({\n behavior: \"smooth\",\n inline: \"center\",\n });\n setZoom(1);\n }, [currentSlide]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleTouchStart = (e: React.TouchEvent) => {\n if (zoom <= 1) setStartX(e.touches[0].clientX);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!startX || zoom > 1) return;\n setEndX(e.touches[0].clientX);\n };\n\n const handleTouchEnd = () => {\n if (!containerRef.current) return;\n if (Math.abs(diff) > containerRef.current.offsetWidth / 3) {\n if (diff > 0) {\n goToNextSlide();\n } else {\n goToPrevSlide();\n }\n }\n setStartX(undefined);\n setEndX(undefined);\n };\n\n const handleZoom = (e: ReactZoomPanPinchRef) => {\n setZoom(e.state.scale);\n };\n\n const handleDelete = () => {\n if (currentItem && onDelete) {\n onDelete(currentItem, currentSlide);\n }\n };\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"ArrowRight\") {\n goToNextSlide();\n } else if (e.key === \"ArrowLeft\") {\n goToPrevSlide();\n } else if (e.key === \"Escape\") {\n onClose?.();\n }\n }\n\n const handleMagnifier = () => {\n if (zoom === 1) {\n const zoomRatio = getZoomRatio();\n zoomRefs.current?.[currentSlide]?.centerView(zoomRatio);\n setZoom(zoomRatio ?? 1);\n } else {\n setZoom(1);\n zoomRefs.current?.[currentSlide]?.resetTransform();\n }\n };\n\n const setDimension = ({\n src,\n height,\n width,\n }: {\n src: string;\n height: number;\n width: number;\n }) => {\n setImageDimension((oldState) => {\n return { ...oldState, [src]: { height, width } };\n });\n };\n\n const getZoomRatio = () => {\n if (!currentItem || isCustomItem(currentItem)) {\n return;\n }\n\n const imageDimension = imagesDimension[currentItem.src];\n\n if (containerRef.current && !!imageDimension) {\n const { clientHeight, clientWidth } = containerRef.current;\n const { width, height } = imageDimension;\n const isSmallImg = width < clientWidth && height < clientHeight;\n\n const isImgLandscapeRelativeToDevice =\n height / width < clientHeight / clientWidth;\n\n if (isSmallImg) {\n return isImgLandscapeRelativeToDevice\n ? clientWidth / width\n : clientHeight / height;\n }\n\n return isImgLandscapeRelativeToDevice\n ? clientHeight / (height / (width / clientWidth))\n : clientWidth / (width / (height / clientHeight));\n }\n };\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const goToPrevSlide = () => {\n zoomRefs.current?.[currentSlide]?.resetTransform();\n setCurrentSlide(\n (prev) => (prev === 0 ? items.length - 1 : prev - 1),\n (slide) => {\n clearAnnouncer(\"polite\");\n announce(getItemAriaLabel(slide), \"polite\");\n }\n );\n };\n\n const goToNextSlide = () => {\n zoomRefs.current?.[currentSlide]?.resetTransform();\n setCurrentSlide(\n (prev) => (prev === items.length - 1 ? 0 : prev + 1),\n (slide) => {\n clearAnnouncer(\"polite\");\n announce(getItemAriaLabel(slide), \"polite\");\n }\n );\n };\n\n const goToSlide = (index: number) => {\n zoomRefs.current?.[currentSlide]?.resetTransform();\n setCurrentSlide(index);\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderSlides = () => {\n return (\n <div\n className={styles.imageGallerySlides}\n style={{\n transform: `translateX(calc(${\n -currentSlide * 100\n }% - ${diff}px))`,\n }}\n >\n {items.map((item, index) => {\n const isActive = index === currentSlide;\n const isActiveOrAdjacent =\n Math.abs(index - currentSlide) <= 1 ||\n (currentSlide === 0 && index === items.length - 1) ||\n (currentSlide === items.length - 1 && index === 0);\n\n return (\n <div\n className={styles.imageGallerySlide}\n key={index}\n data-testid=\"slide-item\"\n >\n <div\n className={styles.focusableImageRegion}\n ref={isActive ? imageRef : null}\n tabIndex={isActive ? 0 : -1}\n >\n {isCustomItem(item) ? (\n isActiveOrAdjacent ? (\n item.renderContent()\n ) : (\n <ImagePlaceholder\n className={\n styles.slidePlaceholderImage\n }\n />\n )\n ) : (\n <TransformWrapper\n ref={(el) =>\n (zoomRefs.current[index] = el)\n }\n panning={{\n disabled: zoom <= 1,\n }}\n initialScale={1}\n onZoom={handleZoom}\n onZoomStop={handleZoom}\n onWheel={handleZoom}\n >\n <TransformComponent>\n <StatefulImage\n className={styles.slideImage}\n src={item.src}\n alt={getItemAriaLabel(index)}\n placeholder={\n <ImagePlaceholder\n className={\n styles.slidePlaceholderImage\n }\n />\n }\n fit=\"scale-down\"\n retrieveImageDimension\n setDimension={setDimension}\n />\n </TransformComponent>\n </TransformWrapper>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n };\n\n const renderFileInfo = () => {\n const { fileName, fileSize } = currentItem ?? {};\n const trimmedName = fileName?.trim();\n const trimmedSize = fileSize?.trim();\n\n return (\n <div\n className={clsx(\n styles.fileInfoTextWrapper,\n !trimmedSize && styles.fileInfoTextWrapperCentered\n )}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-testid=\"file-info-bar\"\n >\n {trimmedName && (\n <Typography.BodyBL\n className={styles.fileInfoFileName}\n weight=\"semibold\"\n data-testid=\"file-info-name\"\n >\n {trimmedName}\n </Typography.BodyBL>\n )}\n {trimmedSize && (\n <Typography.BodyMD\n className={styles.fileInfoFileSize}\n data-testid=\"file-info-size\"\n >\n {trimmedSize}\n </Typography.BodyMD>\n )}\n </div>\n );\n };\n\n const renderThumbnails = () => {\n return (\n <div\n className={styles.thumbnailContainer}\n ref={thumbnailContainerRef}\n aria-hidden=\"true\"\n data-testid=\"thumbnail-container\"\n >\n <div className={styles.thumbnailWrapper}>\n {items.map((item, index) => {\n const src = isCustomItem(item)\n ? item.thumbnailSrc\n : item.thumbnailSrc ?? item.src;\n return (\n <div\n className={styles.thumbnailItemContainer}\n key={index}\n >\n <div\n className={styles.thumbnailItem}\n data-active={index === currentSlide}\n data-testid=\"thumbnail-item\"\n onClick={() => goToSlide(index)}\n ref={(el) =>\n (thumbnailRefs.current[index] = el)\n }\n >\n {src ? (\n <StatefulImage\n className={styles.thumbnailImage}\n src={src}\n alt={`Thumbnail ${index + 1}`}\n fit=\"cover\"\n />\n ) : (\n <ImagePlaceholder\n className={\n styles.slidePlaceholderImage\n }\n />\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n return (\n <ModalV2\n {...otherProps}\n data-testid=\"image-carousel-modal\"\n aria-label={hasAnyItemLabel ? \"Carousel\" : \"Image carousel\"}\n show={show}\n disableInitialFocus\n >\n <div className={styles.carouselModalContent}>\n <div className={styles.imageGalleryContainer}>\n <div className={styles.imageGalleryWrapper}>\n <div\n className={styles.imageGallerySwipe}\n ref={containerRef}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {renderSlides()}\n </div>\n\n {!hideNavigation && (\n <>\n <ClickableIcon\n className={clsx(\n styles.iconButton,\n styles.arrowButton,\n styles.arrowButtonLeft\n )}\n ref={prevArrowButtonRef}\n aria-label={`Previous ${carouselItemNoun}`}\n data-testid=\"prev-btn\"\n onClick={goToPrevSlide}\n >\n <ChevronLeftIcon aria-hidden />\n </ClickableIcon>\n <ClickableIcon\n className={clsx(\n styles.iconButton,\n styles.arrowButton,\n styles.arrowButtonRight\n )}\n ref={nextArrowButtonRef}\n aria-label={`Next ${carouselItemNoun}`}\n data-testid=\"forward-btn\"\n onClick={goToNextSlide}\n >\n <ChevronRightIcon aria-hidden />\n </ClickableIcon>\n </>\n )}\n\n {!hideCounter && (\n <div className={styles.boxChip} aria-hidden=\"true\">\n <Typography.BodyXS\n className={styles.chip}\n weight=\"semibold\"\n data-testid=\"carousel-counter\"\n >{`${currentSlide + 1}/${\n items.length\n }`}</Typography.BodyXS>\n </div>\n )}\n </div>\n\n {!hideThumbnail && renderThumbnails()}\n </div>\n <div\n className={styles.topActionButtons}\n ref={topActionButtonsRef}\n data-has-file-info={hasFileInfo}\n >\n {hasFileInfo && renderFileInfo()}\n {!hideMagnifier && !isCustomItem(currentItem) && (\n <ClickableIcon\n className={styles.iconButton}\n aria-label={zoom === 1 ? \"Zoom in\" : \"Zoom out\"}\n onClick={handleMagnifier}\n >\n {zoom === 1 ? (\n <MagnifierPlusIcon aria-hidden />\n ) : (\n <MagnifierMinusIcon aria-hidden />\n )}\n </ClickableIcon>\n )}\n\n {onDelete && (\n <ClickableIcon\n className={clsx(\n styles.iconButton,\n styles.iconButtonError\n )}\n aria-label={`Delete ${\n (isCustomItem(currentItem) &&\n currentItem.itemLabel?.trim()) ||\n \"image\"\n }`}\n data-testid=\"delete-btn\"\n onClick={handleDelete}\n >\n <BinIcon aria-hidden />\n </ClickableIcon>\n )}\n\n <ClickableIcon\n className={styles.iconButton}\n aria-label={\n hasAnyItemLabel\n ? \"Close carousel\"\n : \"Close image carousel\"\n }\n onClick={onClose}\n >\n <CrossIcon aria-hidden />\n </ClickableIcon>\n </div>\n </div>\n </ModalV2>\n );\n};\n\nexport const FullscreenImageCarousel = forwardRef<\n FullscreenImageCarouselRef,\n FullscreenImageCarouselProps\n>(Component);\n"],"names":["isCustomItem","item","type","Component","_a","ref","items","initialActiveItemIndex","hideThumbnail","hideNavigation","hideCounter","hideMagnifier","onDelete","onClose","insets","show","otherProps","__rest","currentSlide","setCurrentSlide","useStateCallback","imagesDimension","setImageDimension","useState","zoom","setZoom","startX","setStartX","endX","setEndX","containerRef","useRef","thumbnailRefs","zoomRefs","imageRef","topActionButtonsRef","prevArrowButtonRef","nextArrowButtonRef","thumbnailContainerRef","diff","currentItem","hasAnyItemLabel","some","itemLabel","trim","carouselItemNoun","hasFileInfo","useMemo","fileName","fileSize","_b","useApplyStyle","styles.tokens","topActionButtons","insetTop","formatUnitValue","top","insetLeft","left","insetRight","right","arrowButton","thumbnailContainer","insetBottom","bottom","getItemAriaLabel","useCallback","index","itemTypeLabel","prefix","alt","positionLabel","length","useImperativeHandle","currentItemIndex","setCurrentItem","goToSlide","goToPrevItem","goToPrevSlide","goToNextItem","goToNextSlide","useEventListener","e","key","useEffect","current","focus","scrollIntoView","behavior","inline","handleZoom","state","scale","setDimension","src","height","width","oldState","Object","assign","getZoomRatio","imageDimension","clientHeight","clientWidth","isImgLandscapeRelativeToDevice","resetTransform","prev","slide","clearAnnouncer","announce","_jsx","ModalV2","disableInitialFocus","_jsxs","className","styles.carouselModalContent","children","styles.imageGalleryContainer","styles.imageGalleryWrapper","styles.imageGallerySwipe","onTouchStart","touches","clientX","onTouchMove","onTouchEnd","Math","abs","offsetWidth","undefined","styles.imageGallerySlides","style","transform","map","isActive","isActiveOrAdjacent","styles.imageGallerySlide","styles.focusableImageRegion","tabIndex","renderContent","ImagePlaceholder","styles.slidePlaceholderImage","TransformWrapper","el","panning","disabled","initialScale","onZoom","onZoomStop","onWheel","TransformComponent","StatefulImage","styles.slideImage","placeholder","fit","retrieveImageDimension","_Fragment","ClickableIcon","clsx","styles.iconButton","styles.arrowButton","styles.arrowButtonLeft","onClick","ChevronLeftIcon","styles.arrowButtonRight","ChevronRightIcon","styles.boxChip","Typography","BodyXS","styles.chip","weight","styles.thumbnailContainer","styles.thumbnailWrapper","thumbnailSrc","styles.thumbnailItemContainer","styles.thumbnailItem","styles.thumbnailImage","styles.topActionButtons","trimmedName","trimmedSize","styles.fileInfoTextWrapper","styles.fileInfoTextWrapperCentered","BodyBL","styles.fileInfoFileName","BodyMD","styles.fileInfoFileSize","renderFileInfo","zoomRatio","centerView","_d","_c","MagnifierPlusIcon","MagnifierMinusIcon","styles.iconButtonError","BinIcon","CrossIcon","FullscreenImageCarousel","forwardRef"],"mappings":"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"}
1
+ {"version":3,"file":"fullscreen-image-carousel.js","sources":["../../src/fullscreen-image-carousel/fullscreen-image-carousel.tsx"],"sourcesContent":["import {\n ChevronLeftIcon,\n ChevronRightIcon,\n CrossIcon,\n MagnifierMinusIcon,\n MagnifierPlusIcon,\n} from \"@lifesg/react-icons\";\nimport { BinIcon } from \"@lifesg/react-icons/bin\";\nimport { announce, clearAnnouncer } from \"@react-aria/live-announcer\";\nimport clsx from \"clsx\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n ReactZoomPanPinchContentRef,\n ReactZoomPanPinchRef,\n} from \"react-zoom-pan-pinch\";\nimport { TransformComponent, TransformWrapper } from \"react-zoom-pan-pinch\";\n\nimport { ModalV2 } from \"../modal-v2\";\nimport { ClickableIcon } from \"../shared/clickable-icon\";\nimport { useStateCallback } from \"../shared/hooks\";\nimport { ImagePlaceholder } from \"../shared/image-placeholder\";\nimport { formatUnitValue, useApplyStyle } from \"../theme\";\nimport { Typography } from \"../typography\";\nimport { useEventListener } from \"../util\";\nimport * as styles from \"./fullscreen-image-carousel.styles\";\nimport { StatefulImage } from \"./stateful-image\";\nimport type {\n FullscreenImageCarouselCustomItemProps,\n FullscreenImageCarouselItemProps,\n FullscreenImageCarouselProps,\n FullscreenImageCarouselRef,\n ImageDimension,\n} from \"./types\";\n\nconst isCustomItem = (\n item: FullscreenImageCarouselItemProps | undefined\n): item is FullscreenImageCarouselCustomItemProps =>\n !!item && item.type === \"custom\";\n\nexport const Component = (\n {\n items,\n initialActiveItemIndex,\n hideThumbnail = false,\n hideNavigation = false,\n hideCounter = false,\n hideMagnifier = false,\n onDelete,\n onClose,\n insets,\n show,\n ...otherProps\n }: FullscreenImageCarouselProps,\n ref: React.Ref<FullscreenImageCarouselRef>\n) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [currentSlide, setCurrentSlide] = useStateCallback(\n initialActiveItemIndex ?? 0\n );\n const [imagesDimension, setImageDimension] = useState<\n Record<string, ImageDimension>\n >({});\n const [zoom, setZoom] = useState(1);\n const [startX, setStartX] = useState<number | undefined>();\n const [endX, setEndX] = useState<number | undefined>();\n const containerRef = useRef<HTMLDivElement>(null);\n const thumbnailRefs = useRef<(HTMLDivElement | null)[]>([]);\n const zoomRefs = useRef<(ReactZoomPanPinchContentRef | null)[]>([]);\n const imageRef = useRef<HTMLDivElement>(null);\n const topActionButtonsRef = useRef<HTMLDivElement>(null);\n const prevArrowButtonRef = useRef<HTMLButtonElement>(null);\n const nextArrowButtonRef = useRef<HTMLButtonElement>(null);\n const thumbnailContainerRef = useRef<HTMLDivElement>(null);\n const diff = startX && endX ? startX - endX : 0;\n const currentItem = items[currentSlide];\n const hasAnyItemLabel = items.some(\n (item) => isCustomItem(item) && !!item.itemLabel?.trim()\n );\n const carouselItemNoun = hasAnyItemLabel ? \"item\" : \"image\";\n const hasFileInfo = useMemo(\n () =>\n items.some(\n (item) => item.fileName?.trim() || item.fileSize?.trim()\n ),\n [items]\n );\n\n useApplyStyle(topActionButtonsRef, {\n [styles.tokens.topActionButtons.insetTop]: formatUnitValue(\n insets?.top,\n \"px\"\n ),\n [styles.tokens.topActionButtons.insetLeft]: formatUnitValue(\n insets?.left,\n \"px\"\n ),\n [styles.tokens.topActionButtons.insetRight]: formatUnitValue(\n insets?.right,\n \"px\"\n ),\n });\n\n useApplyStyle(prevArrowButtonRef, {\n [styles.tokens.arrowButton.insetLeft]: formatUnitValue(\n insets?.left,\n \"px\"\n ),\n });\n\n useApplyStyle(nextArrowButtonRef, {\n [styles.tokens.arrowButton.insetRight]: formatUnitValue(\n insets?.right,\n \"px\"\n ),\n });\n\n useApplyStyle(thumbnailContainerRef, {\n [styles.tokens.thumbnailContainer.insetBottom]: formatUnitValue(\n insets?.bottom,\n \"px\"\n ),\n });\n\n const getItemAriaLabel = useCallback(\n (index: number) => {\n const item = items[index];\n const itemTypeLabel = hasAnyItemLabel ? \"Item\" : \"Image\";\n const prefix = isCustomItem(item)\n ? item.itemLabel?.trim() || \"\"\n : item.alt?.trim() || \"\";\n const positionLabel = `${itemTypeLabel} ${index + 1} of ${\n items.length\n }.`;\n\n return prefix ? `${prefix}. ${positionLabel}` : positionLabel;\n },\n [items, hasAnyItemLabel]\n );\n\n useImperativeHandle<FullscreenImageCarouselRef, FullscreenImageCarouselRef>(\n ref,\n () => ({\n currentItemIndex: currentSlide,\n setCurrentItem: goToSlide,\n goToPrevItem: goToPrevSlide,\n goToNextItem: goToNextSlide,\n })\n );\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEventListener(\"keydown\", handleKeyDown, \"document\");\n\n useEffect(() => {\n if (show) {\n imageRef.current?.focus();\n }\n }, [show]);\n\n useEffect(() => {\n if (items.length === 0) {\n setCurrentSlide(0);\n return;\n }\n\n if (currentSlide > items.length - 1) {\n setCurrentSlide(items.length - 1);\n }\n }, [currentSlide, items.length, setCurrentSlide]);\n\n useEffect(() => {\n thumbnailRefs.current?.[currentSlide]?.scrollIntoView({\n behavior: \"smooth\",\n inline: \"center\",\n });\n setZoom(1);\n }, [currentSlide]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleTouchStart = (e: React.TouchEvent) => {\n if (zoom <= 1) setStartX(e.touches[0].clientX);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!startX || zoom > 1) return;\n setEndX(e.touches[0].clientX);\n };\n\n const handleTouchEnd = () => {\n if (!containerRef.current) return;\n if (Math.abs(diff) > containerRef.current.offsetWidth / 3) {\n if (diff > 0) {\n goToNextSlide();\n } else {\n goToPrevSlide();\n }\n }\n setStartX(undefined);\n setEndX(undefined);\n };\n\n const handleZoom = (e: ReactZoomPanPinchRef) => {\n setZoom(e.state.scale);\n };\n\n const handleDelete = () => {\n if (currentItem && onDelete) {\n onDelete(currentItem, currentSlide);\n }\n };\n\n function handleKeyDown(e: KeyboardEvent) {\n if (e.key === \"ArrowRight\") {\n goToNextSlide();\n } else if (e.key === \"ArrowLeft\") {\n goToPrevSlide();\n } else if (e.key === \"Escape\") {\n onClose?.();\n }\n }\n\n const handleMagnifier = () => {\n if (zoom === 1) {\n const zoomRatio = getZoomRatio();\n zoomRefs.current?.[currentSlide]?.centerView(zoomRatio);\n setZoom(zoomRatio ?? 1);\n } else {\n setZoom(1);\n zoomRefs.current?.[currentSlide]?.resetTransform();\n }\n };\n\n const setDimension = ({\n src,\n height,\n width,\n }: {\n src: string;\n height: number;\n width: number;\n }) => {\n setImageDimension((oldState) => {\n return { ...oldState, [src]: { height, width } };\n });\n };\n\n const getZoomRatio = () => {\n if (!currentItem || isCustomItem(currentItem)) {\n return;\n }\n\n const imageDimension = imagesDimension[currentItem.src];\n\n if (containerRef.current && !!imageDimension) {\n const { clientHeight, clientWidth } = containerRef.current;\n const { width, height } = imageDimension;\n const isSmallImg = width < clientWidth && height < clientHeight;\n\n const isImgLandscapeRelativeToDevice =\n height / width < clientHeight / clientWidth;\n\n if (isSmallImg) {\n return isImgLandscapeRelativeToDevice\n ? clientWidth / width\n : clientHeight / height;\n }\n\n return isImgLandscapeRelativeToDevice\n ? clientHeight / (height / (width / clientWidth))\n : clientWidth / (width / (height / clientHeight));\n }\n };\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const goToPrevSlide = () => {\n zoomRefs.current?.[currentSlide]?.resetTransform();\n setCurrentSlide(\n (prev) => (prev === 0 ? items.length - 1 : prev - 1),\n (slide) => {\n clearAnnouncer(\"polite\");\n announce(getItemAriaLabel(slide), \"polite\");\n }\n );\n };\n\n const goToNextSlide = () => {\n zoomRefs.current?.[currentSlide]?.resetTransform();\n setCurrentSlide(\n (prev) => (prev === items.length - 1 ? 0 : prev + 1),\n (slide) => {\n clearAnnouncer(\"polite\");\n announce(getItemAriaLabel(slide), \"polite\");\n }\n );\n };\n\n const goToSlide = (index: number) => {\n zoomRefs.current?.[currentSlide]?.resetTransform();\n setCurrentSlide(index);\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderSlides = () => {\n return (\n <div\n className={styles.imageGallerySlides}\n style={{\n transform: `translateX(calc(${\n -currentSlide * 100\n }% - ${diff}px))`,\n }}\n >\n {items.map((item, index) => {\n const isActive = index === currentSlide;\n const isActiveOrAdjacent =\n Math.abs(index - currentSlide) <= 1 ||\n (currentSlide === 0 && index === items.length - 1) ||\n (currentSlide === items.length - 1 && index === 0);\n\n return (\n <div\n className={styles.imageGallerySlide}\n key={index}\n data-testid=\"slide-item\"\n >\n <div\n className={styles.focusableImageRegion}\n ref={isActive ? imageRef : null}\n tabIndex={isActive ? 0 : -1}\n >\n {isCustomItem(item) ? (\n isActiveOrAdjacent ? (\n item.renderContent()\n ) : (\n <ImagePlaceholder\n className={\n styles.slidePlaceholderImage\n }\n />\n )\n ) : (\n <TransformWrapper\n ref={(el) =>\n (zoomRefs.current[index] = el)\n }\n panning={{\n disabled: zoom <= 1,\n }}\n initialScale={1}\n onZoom={handleZoom}\n onZoomStop={handleZoom}\n onWheel={handleZoom}\n >\n <TransformComponent>\n <StatefulImage\n className={styles.slideImage}\n src={item.src}\n alt={getItemAriaLabel(index)}\n placeholder={\n <ImagePlaceholder\n className={\n styles.slidePlaceholderImage\n }\n />\n }\n fit=\"scale-down\"\n retrieveImageDimension\n setDimension={setDimension}\n />\n </TransformComponent>\n </TransformWrapper>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n };\n\n const renderFileInfo = () => {\n const { fileName, fileSize } = currentItem ?? {};\n const trimmedName = fileName?.trim();\n const trimmedSize = fileSize?.trim();\n\n return (\n <div\n className={clsx(\n styles.fileInfoTextWrapper,\n !trimmedSize && styles.fileInfoTextWrapperCentered\n )}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-testid=\"file-info-bar\"\n >\n {trimmedName && (\n <Typography.BodyBL\n className={styles.fileInfoFileName}\n weight=\"semibold\"\n data-testid=\"file-info-name\"\n >\n {trimmedName}\n </Typography.BodyBL>\n )}\n {trimmedSize && (\n <Typography.BodyMD\n className={styles.fileInfoFileSize}\n data-testid=\"file-info-size\"\n >\n {trimmedSize}\n </Typography.BodyMD>\n )}\n </div>\n );\n };\n\n const renderThumbnails = () => {\n return (\n <div\n className={styles.thumbnailContainer}\n ref={thumbnailContainerRef}\n aria-hidden=\"true\"\n data-testid=\"thumbnail-container\"\n >\n <div className={styles.thumbnailWrapper}>\n {items.map((item, index) => {\n const src = isCustomItem(item)\n ? item.thumbnailSrc\n : item.thumbnailSrc ?? item.src;\n return (\n <div\n className={styles.thumbnailItemContainer}\n key={index}\n >\n <div\n className={styles.thumbnailItem}\n data-active={index === currentSlide}\n data-testid=\"thumbnail-item\"\n onClick={() => goToSlide(index)}\n ref={(el) =>\n (thumbnailRefs.current[index] = el)\n }\n >\n {src ? (\n <StatefulImage\n className={styles.thumbnailImage}\n src={src}\n alt={`Thumbnail ${index + 1}`}\n fit=\"cover\"\n />\n ) : (\n <ImagePlaceholder\n className={\n styles.slidePlaceholderImage\n }\n />\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n );\n };\n\n return (\n <ModalV2\n {...otherProps}\n data-testid=\"image-carousel-modal\"\n aria-label={hasAnyItemLabel ? \"Carousel\" : \"Image carousel\"}\n show={show}\n disableInitialFocus\n >\n <div className={styles.carouselModalContent}>\n <div className={styles.imageGalleryContainer}>\n <div className={styles.imageGalleryWrapper}>\n <div\n className={styles.imageGallerySwipe}\n ref={containerRef}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {renderSlides()}\n </div>\n\n {!hideNavigation && (\n <>\n <ClickableIcon\n className={clsx(\n styles.iconButton,\n styles.arrowButton,\n styles.arrowButtonLeft\n )}\n ref={prevArrowButtonRef}\n aria-label={`Previous ${carouselItemNoun}`}\n data-testid=\"prev-btn\"\n onClick={goToPrevSlide}\n >\n <ChevronLeftIcon aria-hidden />\n </ClickableIcon>\n <ClickableIcon\n className={clsx(\n styles.iconButton,\n styles.arrowButton,\n styles.arrowButtonRight\n )}\n ref={nextArrowButtonRef}\n aria-label={`Next ${carouselItemNoun}`}\n data-testid=\"forward-btn\"\n onClick={goToNextSlide}\n >\n <ChevronRightIcon aria-hidden />\n </ClickableIcon>\n </>\n )}\n\n {!hideCounter && (\n <div className={styles.boxChip} aria-hidden=\"true\">\n <Typography.BodyXS\n className={styles.chip}\n weight=\"semibold\"\n data-testid=\"carousel-counter\"\n >{`${currentSlide + 1}/${\n items.length\n }`}</Typography.BodyXS>\n </div>\n )}\n </div>\n\n {!hideThumbnail && renderThumbnails()}\n </div>\n <div\n className={styles.topActionButtons}\n ref={topActionButtonsRef}\n data-has-file-info={hasFileInfo}\n >\n {hasFileInfo && renderFileInfo()}\n {!hideMagnifier && !isCustomItem(currentItem) && (\n <ClickableIcon\n className={styles.iconButton}\n aria-label={zoom === 1 ? \"Zoom in\" : \"Zoom out\"}\n onClick={handleMagnifier}\n >\n {zoom === 1 ? (\n <MagnifierPlusIcon aria-hidden />\n ) : (\n <MagnifierMinusIcon aria-hidden />\n )}\n </ClickableIcon>\n )}\n\n {onDelete && (\n <ClickableIcon\n className={clsx(\n styles.iconButton,\n styles.iconButtonError\n )}\n aria-label={`Delete ${\n (isCustomItem(currentItem) &&\n currentItem.itemLabel?.trim()) ||\n \"image\"\n }`}\n data-testid=\"delete-btn\"\n onClick={handleDelete}\n >\n <BinIcon aria-hidden />\n </ClickableIcon>\n )}\n\n <ClickableIcon\n className={styles.iconButton}\n aria-label={\n hasAnyItemLabel\n ? \"Close carousel\"\n : \"Close image carousel\"\n }\n onClick={onClose}\n >\n <CrossIcon aria-hidden />\n </ClickableIcon>\n </div>\n </div>\n </ModalV2>\n );\n};\n\n/**\n * A fullscreen modal carousel for browsing images and custom media items.\n *\n * Use to present a collection of images or custom content in an overlay with\n * navigation controls, zoom support, and an optional thumbnail strip.\n * The top info bar is rendered only when at least one item provides some file metadata.\n */\nexport const FullscreenImageCarousel = forwardRef<\n FullscreenImageCarouselRef,\n FullscreenImageCarouselProps\n>(Component);\n"],"names":["isCustomItem","item","type","Component","_a","ref","items","initialActiveItemIndex","hideThumbnail","hideNavigation","hideCounter","hideMagnifier","onDelete","onClose","insets","show","otherProps","__rest","currentSlide","setCurrentSlide","useStateCallback","imagesDimension","setImageDimension","useState","zoom","setZoom","startX","setStartX","endX","setEndX","containerRef","useRef","thumbnailRefs","zoomRefs","imageRef","topActionButtonsRef","prevArrowButtonRef","nextArrowButtonRef","thumbnailContainerRef","diff","currentItem","hasAnyItemLabel","some","itemLabel","trim","carouselItemNoun","hasFileInfo","useMemo","fileName","fileSize","_b","useApplyStyle","styles.tokens","topActionButtons","insetTop","formatUnitValue","top","insetLeft","left","insetRight","right","arrowButton","thumbnailContainer","insetBottom","bottom","getItemAriaLabel","useCallback","index","itemTypeLabel","prefix","alt","positionLabel","length","useImperativeHandle","currentItemIndex","setCurrentItem","goToSlide","goToPrevItem","goToPrevSlide","goToNextItem","goToNextSlide","useEventListener","e","key","useEffect","current","focus","scrollIntoView","behavior","inline","handleZoom","state","scale","setDimension","src","height","width","oldState","Object","assign","getZoomRatio","imageDimension","clientHeight","clientWidth","isImgLandscapeRelativeToDevice","resetTransform","prev","slide","clearAnnouncer","announce","_jsx","ModalV2","disableInitialFocus","_jsxs","className","styles.carouselModalContent","children","styles.imageGalleryContainer","styles.imageGalleryWrapper","styles.imageGallerySwipe","onTouchStart","touches","clientX","onTouchMove","onTouchEnd","Math","abs","offsetWidth","undefined","styles.imageGallerySlides","style","transform","map","isActive","isActiveOrAdjacent","styles.imageGallerySlide","styles.focusableImageRegion","tabIndex","renderContent","ImagePlaceholder","styles.slidePlaceholderImage","TransformWrapper","el","panning","disabled","initialScale","onZoom","onZoomStop","onWheel","TransformComponent","StatefulImage","styles.slideImage","placeholder","fit","retrieveImageDimension","_Fragment","ClickableIcon","clsx","styles.iconButton","styles.arrowButton","styles.arrowButtonLeft","onClick","ChevronLeftIcon","styles.arrowButtonRight","ChevronRightIcon","styles.boxChip","Typography","BodyXS","styles.chip","weight","styles.thumbnailContainer","styles.thumbnailWrapper","thumbnailSrc","styles.thumbnailItemContainer","styles.thumbnailItem","styles.thumbnailImage","styles.topActionButtons","trimmedName","trimmedSize","styles.fileInfoTextWrapper","styles.fileInfoTextWrapperCentered","BodyBL","styles.fileInfoFileName","BodyMD","styles.fileInfoFileSize","renderFileInfo","zoomRatio","centerView","_d","_c","MagnifierPlusIcon","MagnifierMinusIcon","styles.iconButtonError","BinIcon","CrossIcon","FullscreenImageCarousel","forwardRef"],"mappings":"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"}