@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.
- package/accordion/accordion-item.styles_1j4eb32.css +2 -2
- package/accordion/accordion.d.ts +19 -0
- package/accordion/accordion.js.map +1 -1
- package/accordion/accordion.styles_bzrfrs.css +2 -2
- package/accordion/types.d.ts +42 -2
- package/alert/alert.d.ts +8 -0
- package/alert/alert.js.map +1 -1
- package/alert/alert.styles_patwo2.css +2 -2
- package/alert/types.d.ts +26 -2
- package/animations/loading-dots/loading-dots.styles_1rgrrmw.css +2 -2
- package/animations/loading-dots/lottie-animation.styles_1m15v69.css +1 -1
- package/animations/loading-dots-spinner/loading-dots-spinner.styles_1hcqkhs.css +2 -2
- package/animations/loading-dots-spinner/lottie-animation.styles_13d1unb.css +1 -1
- package/animations/loading-spinner/loading-spinner.styles_n6xoft.css +2 -2
- package/animations/loading-spinner/lottie-animation.styles_bnn4qt.css +1 -1
- package/avatar/avatar.d.ts +7 -0
- package/avatar/avatar.js.map +1 -1
- package/avatar/avatar.styles_16efw4.css +2 -2
- package/avatar/types.d.ts +11 -0
- package/badge/badge.d.ts +7 -0
- package/badge/badge.js.map +1 -1
- package/badge/badge.styles_1c3c6wj.css +2 -2
- package/badge/types.d.ts +20 -0
- package/box-container/box-container.d.ts +8 -0
- package/box-container/box-container.js.map +1 -1
- package/box-container/box-container.styles_5t2j9k.css +2 -2
- package/box-container/types.d.ts +24 -0
- package/breadcrumb/breadcrumb.d.ts +7 -0
- package/breadcrumb/breadcrumb.js.map +1 -1
- package/breadcrumb/breadcrumb.styles_1nl4aua.css +2 -2
- package/breadcrumb/types.d.ts +31 -0
- package/button/button.d.ts +1 -0
- package/button/button.js.map +1 -1
- package/button/button.styles_1pxy0co.css +2 -2
- package/button/types.d.ts +42 -9
- package/calendar/calendar.d.ts +3 -0
- package/calendar/calendar.js.map +1 -1
- package/calendar/calendar.styles_11ho5x8.css +2 -2
- package/calendar/types.d.ts +43 -7
- package/card/card.d.ts +1 -0
- package/card/card.js.map +1 -1
- package/card/card.styles_1gh9gs3.css +2 -2
- package/card/types.d.ts +1 -0
- package/checkbox/checkbox.d.ts +3 -0
- package/checkbox/checkbox.js.map +1 -1
- package/checkbox/checkbox.styles_gm5bu1.css +2 -2
- package/checkbox/types.d.ts +19 -3
- package/cjs/accordion/accordion-item.styles_1j4eb32.css +2 -2
- package/cjs/accordion/accordion.js.map +1 -1
- package/cjs/accordion/accordion.styles_bzrfrs.css +2 -2
- package/cjs/alert/alert.js.map +1 -1
- package/cjs/alert/alert.styles_patwo2.css +2 -2
- package/cjs/animations/loading-dots/loading-dots.styles_1rgrrmw.css +2 -2
- package/cjs/animations/loading-dots/lottie-animation.styles_1m15v69.css +1 -1
- package/cjs/animations/loading-dots-spinner/loading-dots-spinner.styles_1hcqkhs.css +2 -2
- package/cjs/animations/loading-dots-spinner/lottie-animation.styles_13d1unb.css +1 -1
- package/cjs/animations/loading-spinner/loading-spinner.styles_n6xoft.css +2 -2
- package/cjs/animations/loading-spinner/lottie-animation.styles_bnn4qt.css +1 -1
- package/cjs/avatar/avatar.js.map +1 -1
- package/cjs/avatar/avatar.styles_16efw4.css +2 -2
- package/cjs/badge/badge.js.map +1 -1
- package/cjs/badge/badge.styles_1c3c6wj.css +2 -2
- package/cjs/box-container/box-container.js.map +1 -1
- package/cjs/box-container/box-container.styles_5t2j9k.css +2 -2
- package/cjs/breadcrumb/breadcrumb.js.map +1 -1
- package/cjs/breadcrumb/breadcrumb.styles_1nl4aua.css +2 -2
- package/cjs/button/button.js.map +1 -1
- package/cjs/button/button.styles_1pxy0co.css +2 -2
- package/cjs/calendar/calendar.js.map +1 -1
- package/cjs/calendar/calendar.styles_11ho5x8.css +2 -2
- package/cjs/card/card.js.map +1 -1
- package/cjs/card/card.styles_1gh9gs3.css +2 -2
- package/cjs/checkbox/checkbox.js.map +1 -1
- package/cjs/checkbox/checkbox.styles_gm5bu1.css +2 -2
- package/cjs/countdown-timer/countdown-timer.js.map +1 -1
- package/cjs/countdown-timer/countdown-timer.styles_ipn1b0.css +2 -2
- package/cjs/dashed-border/dashed-border.js.map +1 -1
- package/cjs/dashed-border/dashed-border.styles_zszoox.css +2 -2
- package/cjs/data-table/data-table.js +1 -1
- package/cjs/data-table/data-table.js.map +1 -1
- package/cjs/data-table/data-table.styles.js +1 -1
- package/cjs/data-table/data-table.styles.js.map +1 -1
- package/cjs/data-table/data-table.styles_rxganh.css +27 -0
- package/cjs/date-input/date-input.js.map +1 -1
- package/cjs/date-input/date-input.styles_1r5kcc7.css +1 -1
- package/cjs/date-navigator/date-navigator.js.map +1 -1
- package/cjs/date-navigator/date-navigator.styles_wokh56.css +2 -2
- package/cjs/date-range-input/date-range-input.js.map +1 -1
- package/cjs/date-range-input/date-range-input.styles_1s7ojnj.css +2 -2
- package/cjs/divider/divider.js.map +1 -1
- package/cjs/divider/divider.styles_1xpzh8p.css +2 -2
- package/cjs/drawer/drawer.js.map +1 -1
- package/cjs/drawer/drawer.styles_94hx3y.css +2 -2
- package/cjs/e-signature/e-signature-canvas.js +1 -1
- package/cjs/e-signature/e-signature-canvas.js.map +1 -1
- package/cjs/e-signature/e-signature.js.map +1 -1
- package/cjs/e-signature/e-signature.styles_lukd9f.css +2 -2
- package/cjs/error-display/error-display.js.map +1 -1
- package/cjs/error-display/error-display.styles_d3tql1.css +2 -2
- package/cjs/external/dompurify/dist/purify.es.js +3 -3
- package/cjs/external/dompurify/dist/purify.es.js.map +1 -1
- package/cjs/external/lodash/_setCacheHas.js.map +1 -1
- package/cjs/external/lodash/lodash.js +1 -1
- package/cjs/external/lodash/lodash.js.map +1 -1
- package/cjs/feedback-rating/feedback-rating-stars-container.styles_dmi8z9.css +2 -2
- package/cjs/feedback-rating/feedback-rating.js.map +1 -1
- package/cjs/feedback-rating/feedback-rating.styles_1kdklb6.css +2 -2
- package/cjs/file-download/file-download.js.map +1 -1
- package/cjs/file-download/file-download.styles_iggk8q.css +2 -2
- package/cjs/file-download/file-list-card/file-list-card.styles.js +1 -1
- package/cjs/file-download/file-list-card/file-list-card.styles.js.map +1 -1
- 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
- package/cjs/file-upload/dropzone.styles_1pllsau.css +2 -2
- package/cjs/file-upload/file-item-edit.js +1 -1
- package/cjs/file-upload/file-item-edit.js.map +1 -1
- package/cjs/file-upload/file-item-edit.styles.js +1 -1
- package/cjs/file-upload/file-item-edit.styles.js.map +1 -1
- package/cjs/file-upload/{file-item-edit.styles_1qbpbxj.css → file-item-edit.styles_19bvztn.css} +6 -5
- package/cjs/file-upload/file-list/file-list.js +1 -1
- package/cjs/file-upload/file-list/file-list.js.map +1 -1
- package/cjs/file-upload/file-list/file-list.styles.js +1 -1
- package/cjs/file-upload/file-list/file-list.styles.js.map +1 -1
- package/cjs/file-upload/file-list/file-list.styles_1w7so98.css +3 -0
- package/cjs/file-upload/file-list-item/file-list-item-thumbnail.styles_1y4si19.css +2 -2
- package/cjs/file-upload/file-list-item/file-list-item.js +1 -1
- package/cjs/file-upload/file-list-item/file-list-item.js.map +1 -1
- package/cjs/file-upload/file-list-item/file-list-item.styles.js +1 -1
- package/cjs/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
- package/cjs/file-upload/file-list-item/file-list-item.styles_o8000f.css +17 -0
- package/cjs/file-upload/file-upload.js +1 -1
- package/cjs/file-upload/file-upload.js.map +1 -1
- package/cjs/file-upload/file-upload.styles_9ffwcd.css +2 -2
- package/cjs/filter/addons/filter-item-checkbox.styles_7degw7.css +2 -2
- package/cjs/filter/filter-item-page.styles_17ewfrz.css +1 -1
- package/cjs/filter/filter-item.js.map +1 -1
- package/cjs/filter/filter-item.styles_cphjnj.css +2 -2
- package/cjs/filter/filter-modal.styles_qw3xlg.css +2 -2
- package/cjs/filter/filter-sidebar.styles_1otwpjl.css +2 -2
- package/cjs/filter/filter.js.map +1 -1
- package/cjs/filter/filter.styles_1ykijwm.css +2 -2
- package/cjs/footer/footer-download-app.styles_1v1j2us.css +2 -2
- package/cjs/footer/footer-resource-addon.styles_1jepb1d.css +2 -2
- package/cjs/footer/footer.js +1 -1
- package/cjs/footer/footer.js.map +1 -1
- package/cjs/footer/footer.styles_1msorhc.css +2 -2
- package/cjs/form/form-label-addon.js +1 -1
- package/cjs/form/form-label-addon.js.map +1 -1
- package/cjs/form/form-label-addon.styles_b00z8p.css +1 -1
- package/cjs/form/form-label.styles.js +1 -1
- package/cjs/form/form-label.styles.js.map +1 -1
- package/cjs/form/{form-label.styles_11r0652.css → form-label.styles_1nbe0bm.css} +2 -2
- package/cjs/form/form-textarea.styles_3p9qoy.css +2 -2
- package/cjs/form/form-wrapper.styles_199rslu.css +1 -1
- package/cjs/form/index.js +1 -1
- package/cjs/form/index.js.map +1 -1
- package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
- package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
- package/cjs/fullscreen-image-carousel/fullscreen-image-carousel.styles_vc6y5c.css +2 -2
- package/cjs/fullscreen-image-carousel/stateful-image.styles_1xe8ypm.css +2 -2
- package/cjs/histogram-slider/histogram-slider.js.map +1 -1
- package/cjs/histogram-slider/histogram-slider.styles_wvd4w.css +2 -2
- package/cjs/image-button/image-button.js.map +1 -1
- package/cjs/image-button/image-button.styles_6n1qsr.css +2 -2
- package/cjs/index.js +1 -1
- package/cjs/input/input.js.map +1 -1
- package/cjs/input/input.styles_1cblor0.css +2 -2
- package/cjs/input-group/input-group-list-addon.styles_17iuqtw.css +2 -2
- package/cjs/input-group/input-group.js.map +1 -1
- package/cjs/input-group/input-group.styles_bqye6f.css +2 -2
- package/cjs/input-multi-select/input-multi-select.js.map +1 -1
- package/cjs/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
- package/cjs/input-nested-select/input-nested-select.js.map +1 -1
- package/cjs/input-range-select/input-range-select.js.map +1 -1
- package/cjs/input-range-select/input-range-select.styles_adbrbm.css +2 -2
- package/cjs/input-range-slider/input-range-slider.js.map +1 -1
- package/cjs/input-range-slider/input-range-slider.styles_aljl2v.css +2 -2
- package/cjs/input-select/input-select.js.map +1 -1
- package/cjs/input-slider/input-slider.js.map +1 -1
- package/cjs/input-textarea/textarea-counter.styles_1n3wsnv.css +1 -1
- package/cjs/input-textarea/textarea.js.map +1 -1
- package/cjs/input-textarea/textarea.styles_22z4n3.css +2 -2
- package/cjs/language-switcher/dropdown-panel.styles_1qsjf8d.css +2 -2
- package/cjs/language-switcher/dropdown-variant.styles_1vrdfky.css +2 -2
- package/cjs/language-switcher/language-switcher.js.map +1 -1
- package/cjs/language-switcher/link-container-variant.styles_1iw6zux.css +2 -2
- package/cjs/layout/col-div.styles_16o6mwx.css +1 -1
- package/cjs/layout/container.styles_v70ec6.css +2 -2
- package/cjs/layout/index.js +1 -1
- package/cjs/layout/index.js.map +1 -1
- package/cjs/layout/section.styles_hstcaf.css +1 -1
- package/cjs/link-list/link-list.js.map +1 -1
- package/cjs/link-list/link-list.styles_m57vks.css +2 -2
- package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
- package/cjs/local-nav/local-nav-dropdown/local-nav-dropdown.styles_uhd4xl.css +2 -2
- package/cjs/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
- package/cjs/local-nav/local-nav-menu/local-nav-menu.styles_pq19dh.css +2 -2
- package/cjs/markup/markup.js.map +1 -1
- package/cjs/markup/markup.style_1iu40x9.css +2 -2
- package/cjs/masked-input/masked-input.js.map +1 -1
- package/cjs/masked-input/masked-input.styles_1cm388a.css +2 -2
- package/cjs/masthead/masthead.js.map +1 -1
- package/cjs/masthead/masthead.styles_1huzon9.css +2 -2
- package/cjs/menu/menu-content.styles_p7ijll.css +2 -2
- package/cjs/menu/menu-item.styles_liyed8.css +2 -2
- package/cjs/menu/menu-link.styles_hfxoez.css +2 -2
- package/cjs/menu/menu-section.styles_g7my4d.css +2 -2
- package/cjs/menu/menu.js +1 -1
- package/cjs/menu/menu.js.map +1 -1
- package/cjs/modal/index.js.map +1 -1
- package/cjs/modal/modal-box.js +1 -1
- package/cjs/modal/modal-box.js.map +1 -1
- package/cjs/modal/modal-box.styles_y52cts.css +2 -2
- package/cjs/modal/modal.styles_1lbblx6.css +2 -2
- package/cjs/modal-v2/index.js +1 -1
- package/cjs/modal-v2/index.js.map +1 -1
- package/cjs/modal-v2/modal-v2.js +1 -1
- package/cjs/modal-v2/modal-v2.js.map +1 -1
- package/cjs/modal-v2/modal-v2.styles_a8gv5i.css +2 -2
- package/cjs/modal-v2/slots/card.js +1 -1
- package/cjs/modal-v2/slots/card.js.map +1 -1
- package/cjs/modal-v2/slots/slot-styles_13sd376.css +2 -2
- package/cjs/navbar/brand.styles_zcgddp.css +1 -1
- package/cjs/navbar/drawer.js +1 -1
- package/cjs/navbar/drawer.js.map +1 -1
- package/cjs/navbar/drawer.styles_7hnxp5.css +2 -2
- package/cjs/navbar/menu.styles_gdpqc.css +2 -2
- package/cjs/navbar/navbar-action-buttons.styles_1vpm0nk.css +2 -2
- package/cjs/navbar/navbar-items.styles_1i3ltot.css +2 -2
- package/cjs/navbar/navbar.js +1 -1
- package/cjs/navbar/navbar.js.map +1 -1
- package/cjs/navbar/navbar.styles_koy0c7.css +2 -2
- package/cjs/notification-banner/notification-banner-hoc.js.map +1 -1
- package/cjs/notification-banner/notification-banner.js.map +1 -1
- package/cjs/notification-banner/notification-banner.styles_uxlysy.css +2 -2
- package/cjs/otp-input/otp-input.js.map +1 -1
- package/cjs/otp-input/otp-input.styles_5sbutl.css +2 -2
- package/cjs/otp-verification/contact-input-section.styles_odrjvt.css +2 -2
- package/cjs/otp-verification/otp-verification.js.map +1 -1
- package/cjs/otp-verification/otp-verification.styles_dg9bm8.css +1 -1
- package/cjs/otp-verification/thumbnail/thumbnail.styles_shqylh.css +2 -2
- package/cjs/otp-verification/verification-section.styles_x8jj.css +2 -2
- package/cjs/overlay/overlay.js +1 -1
- package/cjs/overlay/overlay.js.map +1 -1
- package/cjs/overlay/overlay.styles_12wym18.css +2 -2
- package/cjs/pagination/pagination.js.map +1 -1
- package/cjs/pagination/pagination.styles_6bcgva.css +2 -2
- package/cjs/phone-number-input/phone-number-input.js.map +1 -1
- package/cjs/pill/pill.js.map +1 -1
- package/cjs/pill/pill.styles_xwrniu.css +2 -2
- package/cjs/popover/popover-inline/popover-inline.js.map +1 -1
- package/cjs/popover/popover-inline/popover-inline.styles_bkopnt.css +2 -2
- package/cjs/popover/popover-trigger.js.map +1 -1
- package/cjs/popover/popover-trigger.styles_8zokig.css +1 -1
- package/cjs/popover/popover.js +1 -1
- package/cjs/popover/popover.js.map +1 -1
- package/cjs/popover/popover.styles_ujnf0h.css +2 -2
- package/cjs/predictive-text-input/predictive-text-input.js.map +1 -1
- package/cjs/progress-indicator/progress-indicator.js.map +1 -1
- package/cjs/progress-indicator/progress-indicator.styles_1c038s4.css +2 -2
- package/cjs/radio-button/radio-button.js.map +1 -1
- package/cjs/radio-button/radio-button.styles_1c4v6v.css +2 -2
- package/cjs/schedule/schedule-day-view/schedule-day-view.styles_8ti149.css +2 -2
- package/cjs/schedule/schedule-header/schedule-header.js +1 -1
- package/cjs/schedule/schedule-header/schedule-header.js.map +1 -1
- package/cjs/schedule/schedule-header/schedule-header.styles_1n2u5vj.css +2 -2
- package/cjs/schedule/schedule-week-view/schedule-week-view.styles_x7x50m.css +2 -2
- package/cjs/schedule/schedule-week-view/time-cell.styles_1sorjz8.css +2 -2
- package/cjs/schedule/schedule.js.map +1 -1
- package/cjs/schedule/schedule.styles_fdy5a1.css +2 -2
- package/cjs/schedule/shared/with-optional-popover.js +1 -1
- package/cjs/schedule/shared/with-optional-popover.js.map +1 -1
- package/cjs/schedule/shared/with-optional-popover.styles_7mv3p2.css +1 -1
- package/cjs/schedule/time-indicator/time-indicator.styles_1eaxyes.css +2 -2
- package/cjs/select-histogram/select-histogram.js.map +1 -1
- package/cjs/select-histogram/select-histogram.styles_n260dy.css +2 -2
- package/cjs/shared/accessibility/index_13g9vp.css +1 -1
- package/cjs/shared/clickable-icon/clickable-icon.styles_1v2imml.css +2 -2
- package/cjs/shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css +2 -2
- package/cjs/shared/dropdown-list/dropdown-label.styles_mloii0.css +2 -2
- package/cjs/shared/dropdown-list/dropdown-list.styles_konwm.css +2 -2
- package/cjs/shared/dropdown-list/dropdown-search.styles_1hc1gkh.css +2 -2
- package/cjs/shared/dropdown-list/expandable-element.styles_rkkvqr.css +2 -2
- package/cjs/shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css +2 -2
- package/cjs/shared/dropdown-wrapper/dropdown-wrapper.styles_15hwwoj.css +2 -2
- package/cjs/shared/fade-wrapper/fade-wrapper.styles_16iug7l.css +2 -2
- package/cjs/shared/image-placeholder/image-placeholder.styles_44nwil.css +1 -1
- package/cjs/shared/input-wrapper/input-wrapper.styles_je6maw.css +2 -2
- package/cjs/shared/internal-calendar/calendar-dropdown.styles_wybjai.css +1 -1
- package/cjs/shared/internal-calendar/calendar-manager.js +1 -1
- package/cjs/shared/internal-calendar/calendar-manager.js.map +1 -1
- package/cjs/shared/internal-calendar/calendar-manager.styles.js +1 -1
- package/cjs/shared/internal-calendar/calendar-manager.styles.js.map +1 -1
- package/cjs/shared/internal-calendar/{calendar-manager.styles_1iuq5zw.css → calendar-manager.styles_1njwkj2.css} +3 -3
- package/cjs/shared/internal-calendar/day-cell/day-cell.styles_1t5oqc1.css +2 -2
- package/cjs/shared/internal-calendar/internal-calendar-month.styles_14oh57f.css +2 -2
- package/cjs/shared/internal-calendar/internal-calendar-year.styles_therlc.css +2 -2
- package/cjs/shared/internal-calendar/internal-calendar.styles_gnc3eq.css +1 -1
- package/cjs/shared/internal-calendar/standard/standard-calendar-day-view.styles_1bw26au.css +2 -2
- package/cjs/shared/progress-bar/progress-bar.styles_125ri7a.css +1 -1
- package/cjs/shared/range-input-inner-container/range-input-inner-container.styles_1v61utg.css +2 -2
- package/cjs/shared/standalone-date-input/standalone-date-input.styles_157qo89.css +2 -2
- package/cjs/shared/time-slot/time-slot.styles_18s0to7.css +2 -2
- package/cjs/shared/timepicker-dropdown/timepicker-dropdown.styles_119l6k6.css +2 -2
- package/cjs/sidenav/sidenav-drawer-item.styles_1ljnyx2.css +2 -2
- package/cjs/sidenav/sidenav-drawer-subitem.styles_2y58kf.css +1 -1
- package/cjs/sidenav/sidenav-group.styles_1x604sw.css +2 -2
- package/cjs/sidenav/sidenav-item.styles_lqw3kh.css +2 -2
- package/cjs/sidenav/sidenav.js.map +1 -1
- package/cjs/sidenav/sidenav.styles_1vxezie.css +2 -2
- package/cjs/singpass-button/singpass-button.js.map +1 -1
- package/cjs/singpass-button/singpass-button.styles_1miyex3.css +2 -2
- package/cjs/smart-app-banner/smart-app-banner.js.map +1 -1
- package/cjs/smart-app-banner/smart-app-banner.styles_15u6yv4.css +2 -2
- package/cjs/tab/tab-link-chain.styles_49got4.css +2 -2
- package/cjs/tab/tab.js.map +1 -1
- package/cjs/tab/tab.styles_1najffw.css +1 -1
- package/cjs/table/table.js.map +1 -1
- package/cjs/table/table.styles.js +1 -1
- package/cjs/table/table.styles.js.map +1 -1
- package/cjs/table/{table.styles_1af5ipv.css → table.styles_1vjx31g.css} +2 -2
- package/cjs/tag/tag.js.map +1 -1
- package/cjs/tag/tag.style_d98c53.css +2 -2
- package/cjs/text-list/index.js.map +1 -1
- package/cjs/text-list/text-list.styles_w3fvyt.css +2 -2
- package/cjs/theme/theme-provider/breakpoint.js +1 -1
- package/cjs/theme/theme-provider/breakpoint.js.map +1 -1
- package/cjs/theme/theme-provider/hooks.js.map +1 -1
- package/cjs/theme/theme-provider/index.js.map +1 -1
- package/cjs/theme/tokens/border.js.map +1 -1
- package/cjs/theme/tokens/breakpoint.js.map +1 -1
- package/cjs/theme/tokens/colour.js.map +1 -1
- package/cjs/theme/tokens/component.js.map +1 -1
- package/cjs/theme/tokens/font.js.map +1 -1
- package/cjs/theme/tokens/media-query.js.map +1 -1
- package/cjs/theme/tokens/motion.js.map +1 -1
- package/cjs/theme/tokens/radius.js.map +1 -1
- package/cjs/theme/tokens/shadow.js.map +1 -1
- package/cjs/theme/tokens/spacing.js.map +1 -1
- package/cjs/theme/types.js +1 -1
- package/cjs/theme/types.js.map +1 -1
- package/cjs/theme/utils/css-variable.js.map +1 -1
- package/cjs/theme/utils/font.js.map +1 -1
- package/cjs/theme/utils/use-apply-styles.js +1 -1
- package/cjs/theme/utils/use-apply-styles.js.map +1 -1
- package/cjs/theme/utils/use-design-token-override.js +2 -0
- package/cjs/theme/utils/use-design-token-override.js.map +1 -0
- package/cjs/theme/utils/use-design-token.js.map +1 -1
- package/cjs/theme/utils/use-media-query.js.map +1 -1
- package/cjs/time-range-picker/combobox-picker/combobox-picker.js +1 -1
- package/cjs/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
- package/cjs/time-range-picker/combobox-picker/combobox-picker.styles_7i9vso.css +1 -1
- package/cjs/time-range-picker/common.styles.js +1 -1
- package/cjs/time-range-picker/common.styles.js.map +1 -1
- package/cjs/time-range-picker/{common.styles_1qwp4xa.css → common.styles_cnkkax.css} +2 -1
- package/cjs/time-range-picker/dial-picker/dial-picker.js +1 -1
- package/cjs/time-range-picker/dial-picker/dial-picker.js.map +1 -1
- package/cjs/time-range-picker/time-range-picker.js.map +1 -1
- package/cjs/time-slot-bar/time-slot-bar.js.map +1 -1
- package/cjs/time-slot-bar/time-slot-bar.styles_wigbyd.css +2 -2
- package/cjs/time-slot-bar-week/time-slot-bar-week-days.styles_evdvs9.css +2 -2
- package/cjs/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
- package/cjs/time-slot-bar-week/time-slot-bar-week.styles_11ybf42.css +1 -1
- package/cjs/time-slot-week-view/time-slot-week-days.styles_1h21vyw.css +2 -2
- package/cjs/time-slot-week-view/time-slot-week-view.js.map +1 -1
- package/cjs/time-slot-week-view/time-slot-week-view.styles_gqgsw2.css +1 -1
- package/cjs/timeline/timeline.js.map +1 -1
- package/cjs/timeline/timeline.styles_1jxzik4.css +2 -2
- package/cjs/timepicker/timepicker.js +1 -1
- package/cjs/timepicker/timepicker.js.map +1 -1
- package/cjs/timepicker/timepicker.styles.js +1 -1
- package/cjs/timepicker/timepicker.styles.js.map +1 -1
- package/cjs/timepicker/timepicker.styles_lyizvq.css +2 -0
- package/cjs/timetable/timetable-header/timetable-header.styles_11gl1h4.css +2 -2
- package/cjs/timetable/timetable-row/row-bar.styles_1x0vrsz.css +1 -1
- package/cjs/timetable/timetable-row/row-cell.styles_y1dl5j.css +2 -2
- package/cjs/timetable/timetable-row/with-optional-popover.js +1 -1
- package/cjs/timetable/timetable-row/with-optional-popover.js.map +1 -1
- package/cjs/timetable/timetable.js +1 -1
- package/cjs/timetable/timetable.js.map +1 -1
- package/cjs/timetable/timetable.styles_7rp8kz.css +2 -2
- package/cjs/toast/toast.js.map +1 -1
- package/cjs/toast/toast.styles_1e0l60w.css +2 -2
- package/cjs/toggle/toggle-icon.styles_ba71y.css +2 -2
- package/cjs/toggle/toggle.js.map +1 -1
- package/cjs/toggle/toggle.styles_1t5qrye.css +2 -2
- package/cjs/typography/index.js.map +1 -1
- package/cjs/typography/typography-text.styles_1734x2k.css +2 -2
- package/cjs/typography/typography.styles.js +1 -1
- package/cjs/typography/typography.styles.js.map +1 -1
- package/cjs/typography/{typography.styles_1155j4c.css → typography.styles_1wd82dn.css} +2 -2
- package/cjs/uneditable-section/index.js.map +1 -1
- package/cjs/uneditable-section/section-item.styles_mwx8ht.css +2 -2
- package/cjs/uneditable-section/uneditable-section.js +1 -1
- package/cjs/uneditable-section/uneditable-section.js.map +1 -1
- package/cjs/uneditable-section/uneditable-section.styles_aj9zun.css +2 -2
- package/cjs/unit-number/unit-number-input.js.map +1 -1
- package/cjs/unit-number/unit-number-input.styles_8yizj.css +2 -2
- package/cjs/util/merge-refs.js.map +1 -1
- package/cjs/util/use-throttle.js +2 -0
- package/cjs/util/use-throttle.js.map +1 -0
- package/countdown-timer/countdown-timer.d.ts +6 -0
- package/countdown-timer/countdown-timer.js.map +1 -1
- package/countdown-timer/countdown-timer.styles_ipn1b0.css +2 -2
- package/countdown-timer/types.d.ts +55 -11
- package/dashed-border/dashed-border.d.ts +6 -0
- package/dashed-border/dashed-border.js.map +1 -1
- package/dashed-border/dashed-border.styles_zszoox.css +2 -2
- package/dashed-border/types.d.ts +27 -5
- package/data-table/data-table.d.ts +8 -0
- package/data-table/data-table.js +1 -1
- package/data-table/data-table.js.map +1 -1
- package/data-table/data-table.styles.d.ts +2 -1
- package/data-table/data-table.styles.js +1 -1
- package/data-table/data-table.styles.js.map +1 -1
- package/data-table/data-table.styles_rxganh.css +27 -0
- package/data-table/types.d.ts +58 -12
- package/date-input/date-input.d.ts +5 -0
- package/date-input/date-input.js.map +1 -1
- package/date-input/date-input.styles_1r5kcc7.css +1 -1
- package/date-input/types.d.ts +32 -16
- package/date-navigator/date-navigator.d.ts +6 -0
- package/date-navigator/date-navigator.js.map +1 -1
- package/date-navigator/date-navigator.styles_wokh56.css +2 -2
- package/date-navigator/types.d.ts +44 -7
- package/date-range-input/date-range-input.d.ts +4 -0
- package/date-range-input/date-range-input.js.map +1 -1
- package/date-range-input/date-range-input.styles_1s7ojnj.css +2 -2
- package/date-range-input/types.d.ts +50 -14
- package/divider/divider.d.ts +6 -0
- package/divider/divider.js.map +1 -1
- package/divider/divider.styles_1xpzh8p.css +2 -2
- package/divider/types.d.ts +27 -4
- package/drawer/drawer.d.ts +7 -0
- package/drawer/drawer.js.map +1 -1
- package/drawer/drawer.styles_94hx3y.css +2 -2
- package/drawer/types.d.ts +16 -4
- package/e-signature/e-signature-canvas.js +1 -1
- package/e-signature/e-signature-canvas.js.map +1 -1
- package/e-signature/e-signature.d.ts +5 -0
- package/e-signature/e-signature.js.map +1 -1
- package/e-signature/e-signature.styles_lukd9f.css +2 -2
- package/e-signature/types.d.ts +23 -1
- package/error-display/error-display.d.ts +7 -0
- package/error-display/error-display.js.map +1 -1
- package/error-display/error-display.styles_d3tql1.css +2 -2
- package/error-display/types.d.ts +36 -6
- package/external/dompurify/dist/purify.es.js +2 -2
- package/external/dompurify/dist/purify.es.js.map +1 -1
- package/external/lodash/_setCacheHas.js.map +1 -1
- package/external/lodash/lodash.js +1 -1
- package/external/lodash/lodash.js.map +1 -1
- package/feedback-rating/feedback-rating-stars-container.styles_dmi8z9.css +2 -2
- package/feedback-rating/feedback-rating.d.ts +6 -0
- package/feedback-rating/feedback-rating.js.map +1 -1
- package/feedback-rating/feedback-rating.styles_1kdklb6.css +2 -2
- package/feedback-rating/types.d.ts +29 -0
- package/file-download/file-download.d.ts +6 -0
- package/file-download/file-download.js.map +1 -1
- package/file-download/file-download.styles_iggk8q.css +2 -2
- package/file-download/file-list-card/file-list-card.styles.js +1 -1
- package/file-download/file-list-card/file-list-card.styles.js.map +1 -1
- 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
- package/file-download/types.d.ts +44 -11
- package/file-upload/dropzone.styles_1pllsau.css +2 -2
- package/file-upload/file-item-edit.d.ts +4 -1
- package/file-upload/file-item-edit.js +1 -1
- package/file-upload/file-item-edit.js.map +1 -1
- package/file-upload/file-item-edit.styles.d.ts +1 -0
- package/file-upload/file-item-edit.styles.js +1 -1
- package/file-upload/file-item-edit.styles.js.map +1 -1
- package/file-upload/{file-item-edit.styles_1qbpbxj.css → file-item-edit.styles_19bvztn.css} +6 -5
- package/file-upload/file-list/file-list.d.ts +3 -0
- package/file-upload/file-list/file-list.js +1 -1
- package/file-upload/file-list/file-list.js.map +1 -1
- package/file-upload/file-list/file-list.styles.js +1 -1
- package/file-upload/file-list/file-list.styles.js.map +1 -1
- package/file-upload/file-list/file-list.styles_1w7so98.css +3 -0
- package/file-upload/file-list-item/file-list-item-thumbnail.styles_1y4si19.css +2 -2
- package/file-upload/file-list-item/file-list-item.d.ts +3 -1
- package/file-upload/file-list-item/file-list-item.js +1 -1
- package/file-upload/file-list-item/file-list-item.js.map +1 -1
- package/file-upload/file-list-item/file-list-item.styles.d.ts +3 -0
- package/file-upload/file-list-item/file-list-item.styles.js +1 -1
- package/file-upload/file-list-item/file-list-item.styles.js.map +1 -1
- package/file-upload/file-list-item/file-list-item.styles_o8000f.css +17 -0
- package/file-upload/file-upload.d.ts +2 -1
- package/file-upload/file-upload.js +1 -1
- package/file-upload/file-upload.js.map +1 -1
- package/file-upload/file-upload.styles_9ffwcd.css +2 -2
- package/file-upload/types.d.ts +124 -20
- package/filter/addons/filter-item-checkbox.styles_7degw7.css +2 -2
- package/filter/filter-item-page.styles_17ewfrz.css +1 -1
- package/filter/filter-item.js.map +1 -1
- package/filter/filter-item.styles_cphjnj.css +2 -2
- package/filter/filter-modal.styles_qw3xlg.css +2 -2
- package/filter/filter-sidebar.styles_1otwpjl.css +2 -2
- package/filter/filter.d.ts +21 -0
- package/filter/filter.js.map +1 -1
- package/filter/filter.styles_1ykijwm.css +2 -2
- package/filter/types.d.ts +157 -21
- package/footer/footer-download-app.styles_1v1j2us.css +2 -2
- package/footer/footer-resource-addon.styles_1jepb1d.css +2 -2
- package/footer/footer.d.ts +8 -1
- package/footer/footer.js +1 -1
- package/footer/footer.js.map +1 -1
- package/footer/footer.styles_1msorhc.css +2 -2
- package/footer/types.d.ts +55 -4
- package/form/form-label-addon.js +1 -1
- package/form/form-label-addon.js.map +1 -1
- package/form/form-label-addon.styles_b00z8p.css +1 -1
- package/form/form-label.styles.js +1 -1
- package/form/form-label.styles.js.map +1 -1
- package/form/{form-label.styles_11r0652.css → form-label.styles_1nbe0bm.css} +2 -2
- package/form/form-textarea.styles_3p9qoy.css +2 -2
- package/form/form-wrapper.styles_199rslu.css +1 -1
- package/form/index.d.ts +65 -8
- package/form/index.js +1 -1
- package/form/index.js.map +1 -1
- package/form/types.d.ts +155 -6
- package/fullscreen-image-carousel/fullscreen-image-carousel.d.ts +7 -0
- package/fullscreen-image-carousel/fullscreen-image-carousel.js +1 -1
- package/fullscreen-image-carousel/fullscreen-image-carousel.js.map +1 -1
- package/fullscreen-image-carousel/fullscreen-image-carousel.styles_vc6y5c.css +2 -2
- package/fullscreen-image-carousel/stateful-image.styles_1xe8ypm.css +2 -2
- package/fullscreen-image-carousel/types.d.ts +91 -3
- package/histogram-slider/histogram-slider.d.ts +6 -0
- package/histogram-slider/histogram-slider.js.map +1 -1
- package/histogram-slider/histogram-slider.styles_wvd4w.css +2 -2
- package/histogram-slider/types.d.ts +63 -3
- package/image-button/image-button.d.ts +6 -0
- package/image-button/image-button.js.map +1 -1
- package/image-button/image-button.styles_6n1qsr.css +2 -2
- package/image-button/types.d.ts +11 -1
- package/index.d.ts +0 -1
- package/index.js +1 -1
- package/input/input.d.ts +6 -0
- package/input/input.js.map +1 -1
- package/input/input.styles_1cblor0.css +2 -2
- package/input/types.d.ts +38 -2
- package/input-group/input-group-list-addon.styles_17iuqtw.css +2 -2
- package/input-group/input-group.d.ts +7 -0
- package/input-group/input-group.js.map +1 -1
- package/input-group/input-group.styles_bqye6f.css +2 -2
- package/input-group/types.d.ts +84 -8
- package/input-multi-select/input-multi-select.d.ts +6 -0
- package/input-multi-select/input-multi-select.js.map +1 -1
- package/input-multi-select/types.d.ts +46 -5
- package/input-nested-multi-select/input-nested-multi-select.d.ts +8 -0
- package/input-nested-multi-select/input-nested-multi-select.js.map +1 -1
- package/input-nested-multi-select/types.d.ts +35 -5
- package/input-nested-select/input-nested-select.d.ts +9 -2
- package/input-nested-select/input-nested-select.js.map +1 -1
- package/input-nested-select/types.d.ts +77 -8
- package/input-range-select/input-range-select.d.ts +6 -0
- package/input-range-select/input-range-select.js.map +1 -1
- package/input-range-select/input-range-select.styles_adbrbm.css +2 -2
- package/input-range-select/types.d.ts +68 -1
- package/input-range-slider/input-range-slider.d.ts +7 -0
- package/input-range-slider/input-range-slider.js.map +1 -1
- package/input-range-slider/input-range-slider.styles_aljl2v.css +2 -2
- package/input-range-slider/types.d.ts +91 -6
- package/input-select/input-select.d.ts +5 -0
- package/input-select/input-select.js.map +1 -1
- package/input-select/types.d.ts +70 -14
- package/input-slider/input-slider.d.ts +6 -0
- package/input-slider/input-slider.js.map +1 -1
- package/input-slider/types.d.ts +21 -2
- package/input-textarea/textarea-counter.styles_1n3wsnv.css +1 -1
- package/input-textarea/textarea.d.ts +3 -0
- package/input-textarea/textarea.js.map +1 -1
- package/input-textarea/textarea.styles_22z4n3.css +2 -2
- package/input-textarea/types.d.ts +24 -1
- package/language-switcher/dropdown-panel.styles_1qsjf8d.css +2 -2
- package/language-switcher/dropdown-variant.styles_1vrdfky.css +2 -2
- package/language-switcher/language-switcher.d.ts +6 -0
- package/language-switcher/language-switcher.js.map +1 -1
- package/language-switcher/link-container-variant.styles_1iw6zux.css +2 -2
- package/language-switcher/types.d.ts +23 -0
- package/layout/col-div.styles_16o6mwx.css +1 -1
- package/layout/container.styles_v70ec6.css +2 -2
- package/layout/index.d.ts +16 -2
- package/layout/index.js +1 -1
- package/layout/index.js.map +1 -1
- package/layout/section.styles_hstcaf.css +1 -1
- package/layout/types.d.ts +61 -3
- package/link-list/internal-types.d.ts +57 -3
- package/link-list/link-list.d.ts +6 -0
- package/link-list/link-list.js.map +1 -1
- package/link-list/link-list.styles_m57vks.css +2 -2
- package/link-list/types.d.ts +3 -0
- package/local-nav/local-nav-dropdown/local-nav-dropdown.d.ts +11 -0
- package/local-nav/local-nav-dropdown/local-nav-dropdown.js.map +1 -1
- package/local-nav/local-nav-dropdown/local-nav-dropdown.styles_uhd4xl.css +2 -2
- package/local-nav/local-nav-menu/local-nav-menu.d.ts +6 -0
- package/local-nav/local-nav-menu/local-nav-menu.js.map +1 -1
- package/local-nav/local-nav-menu/local-nav-menu.styles_pq19dh.css +2 -2
- package/local-nav/types.d.ts +51 -0
- package/markup/markup.d.ts +6 -0
- package/markup/markup.js.map +1 -1
- package/markup/markup.style_1iu40x9.css +2 -2
- package/markup/types.d.ts +6 -2
- package/masked-input/masked-input.d.ts +6 -0
- package/masked-input/masked-input.js.map +1 -1
- package/masked-input/masked-input.styles_1cm388a.css +2 -2
- package/masked-input/types.d.ts +83 -8
- package/masthead/masthead.d.ts +6 -0
- package/masthead/masthead.js.map +1 -1
- package/masthead/masthead.styles_1huzon9.css +2 -2
- package/masthead/types.d.ts +9 -0
- package/menu/menu-content.styles_p7ijll.css +2 -2
- package/menu/menu-item.styles_liyed8.css +2 -2
- package/menu/menu-link.styles_hfxoez.css +2 -2
- package/menu/menu-section.styles_g7my4d.css +2 -2
- package/menu/menu.d.ts +27 -4
- package/menu/menu.js +1 -1
- package/menu/menu.js.map +1 -1
- package/menu/types.d.ts +32 -0
- package/modal/index.d.ts +13 -0
- package/modal/index.js.map +1 -1
- package/modal/modal-box.js +1 -1
- package/modal/modal-box.js.map +1 -1
- package/modal/modal-box.styles_y52cts.css +2 -2
- package/modal/modal.styles_1lbblx6.css +2 -2
- package/modal/types.d.ts +54 -7
- package/modal-v2/index.d.ts +1 -15
- package/modal-v2/index.js +1 -1
- package/modal-v2/index.js.map +1 -1
- package/modal-v2/modal-v2.d.ts +32 -1
- package/modal-v2/modal-v2.js +1 -1
- package/modal-v2/modal-v2.js.map +1 -1
- package/modal-v2/modal-v2.styles_a8gv5i.css +2 -2
- package/modal-v2/slots/card.js +1 -1
- package/modal-v2/slots/card.js.map +1 -1
- package/modal-v2/slots/slot-styles_13sd376.css +2 -2
- package/modal-v2/types.d.ts +75 -8
- package/navbar/brand.styles_zcgddp.css +1 -1
- package/navbar/drawer.js +1 -1
- package/navbar/drawer.js.map +1 -1
- package/navbar/drawer.styles_7hnxp5.css +2 -2
- package/navbar/menu.styles_gdpqc.css +2 -2
- package/navbar/navbar-action-buttons.styles_1vpm0nk.css +2 -2
- package/navbar/navbar-items.styles_1i3ltot.css +2 -2
- package/navbar/navbar.d.ts +7 -0
- package/navbar/navbar.js +1 -1
- package/navbar/navbar.js.map +1 -1
- package/navbar/navbar.styles_koy0c7.css +2 -2
- package/navbar/types.d.ts +200 -13
- package/notification-banner/notification-banner-hoc.d.ts +6 -0
- package/notification-banner/notification-banner-hoc.js.map +1 -1
- package/notification-banner/notification-banner.d.ts +7 -0
- package/notification-banner/notification-banner.js.map +1 -1
- package/notification-banner/notification-banner.styles_uxlysy.css +2 -2
- package/notification-banner/types.d.ts +57 -2
- package/otp-input/otp-input.d.ts +7 -0
- package/otp-input/otp-input.js.map +1 -1
- package/otp-input/otp-input.styles_5sbutl.css +2 -2
- package/otp-input/types.d.ts +54 -11
- package/otp-verification/contact-input-section.styles_odrjvt.css +2 -2
- package/otp-verification/internal-types.d.ts +22 -5
- package/otp-verification/otp-verification.d.ts +6 -0
- package/otp-verification/otp-verification.js.map +1 -1
- package/otp-verification/otp-verification.styles_dg9bm8.css +1 -1
- package/otp-verification/thumbnail/thumbnail.styles_shqylh.css +2 -2
- package/otp-verification/types.d.ts +125 -6
- package/otp-verification/verification-section.styles_x8jj.css +2 -2
- package/overlay/overlay.d.ts +7 -0
- package/overlay/overlay.js +1 -1
- package/overlay/overlay.js.map +1 -1
- package/overlay/overlay.styles_12wym18.css +2 -2
- package/overlay/types.d.ts +57 -15
- package/package.json +1 -7
- package/pagination/pagination.d.ts +5 -0
- package/pagination/pagination.js.map +1 -1
- package/pagination/pagination.styles_6bcgva.css +2 -2
- package/pagination/types.d.ts +48 -0
- package/phone-number-input/phone-number-input.d.ts +7 -0
- package/phone-number-input/phone-number-input.js.map +1 -1
- package/phone-number-input/types.d.ts +78 -13
- package/pill/pill.d.ts +6 -0
- package/pill/pill.js.map +1 -1
- package/pill/pill.styles_xwrniu.css +2 -2
- package/pill/types.d.ts +19 -0
- package/popover/popover-inline/popover-inline.d.ts +5 -0
- package/popover/popover-inline/popover-inline.js.map +1 -1
- package/popover/popover-inline/popover-inline.styles_bkopnt.css +2 -2
- package/popover/popover-trigger.d.ts +6 -0
- package/popover/popover-trigger.js.map +1 -1
- package/popover/popover-trigger.styles_8zokig.css +1 -1
- package/popover/popover.d.ts +6 -0
- package/popover/popover.js +1 -1
- package/popover/popover.js.map +1 -1
- package/popover/popover.styles_ujnf0h.css +2 -2
- package/popover/types.d.ts +150 -3
- package/predictive-text-input/predictive-text-input.d.ts +6 -0
- package/predictive-text-input/predictive-text-input.js.map +1 -1
- package/predictive-text-input/types.d.ts +65 -11
- package/progress-indicator/progress-indicator.d.ts +7 -0
- package/progress-indicator/progress-indicator.js.map +1 -1
- package/progress-indicator/progress-indicator.styles_1c038s4.css +2 -2
- package/progress-indicator/types.d.ts +18 -0
- package/radio-button/radio-button.d.ts +5 -0
- package/radio-button/radio-button.js.map +1 -1
- package/radio-button/radio-button.styles_1c4v6v.css +2 -2
- package/radio-button/types.d.ts +11 -0
- package/schedule/internal-types.d.ts +18 -0
- package/schedule/schedule-day-view/schedule-day-view.styles_8ti149.css +2 -2
- package/schedule/schedule-day-view/types.d.ts +2 -1
- package/schedule/schedule-header/schedule-header.js +1 -1
- package/schedule/schedule-header/schedule-header.js.map +1 -1
- package/schedule/schedule-header/schedule-header.styles_1n2u5vj.css +2 -2
- package/schedule/schedule-week-view/schedule-week-view.styles_x7x50m.css +2 -2
- package/schedule/schedule-week-view/time-cell.styles_1sorjz8.css +2 -2
- package/schedule/schedule-week-view/types.d.ts +2 -1
- package/schedule/schedule.d.ts +3 -0
- package/schedule/schedule.js.map +1 -1
- package/schedule/schedule.styles_fdy5a1.css +2 -2
- package/schedule/shared/with-optional-popover.js +1 -1
- package/schedule/shared/with-optional-popover.js.map +1 -1
- package/schedule/shared/with-optional-popover.styles_7mv3p2.css +1 -1
- package/schedule/time-indicator/time-indicator.styles_1eaxyes.css +2 -2
- package/schedule/types.d.ts +129 -10
- package/select-histogram/select-histogram.d.ts +5 -0
- package/select-histogram/select-histogram.js.map +1 -1
- package/select-histogram/select-histogram.styles_n260dy.css +2 -2
- package/select-histogram/types.d.ts +57 -4
- package/shared/accessibility/index_13g9vp.css +1 -1
- package/shared/clickable-icon/clickable-icon.styles_1v2imml.css +2 -2
- package/shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css +2 -2
- package/shared/dropdown-list/dropdown-label.styles_mloii0.css +2 -2
- package/shared/dropdown-list/dropdown-list.styles_konwm.css +2 -2
- package/shared/dropdown-list/dropdown-search.styles_1hc1gkh.css +2 -2
- package/shared/dropdown-list/expandable-element.styles_rkkvqr.css +2 -2
- package/shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css +2 -2
- package/shared/dropdown-list/types.d.ts +52 -19
- package/shared/dropdown-wrapper/dropdown-wrapper.styles_15hwwoj.css +2 -2
- package/shared/dropdown-wrapper/types.d.ts +6 -0
- package/shared/fade-wrapper/fade-wrapper.styles_16iug7l.css +2 -2
- package/shared/image-placeholder/image-placeholder.styles_44nwil.css +1 -1
- package/shared/input-wrapper/input-wrapper.styles_je6maw.css +2 -2
- package/shared/internal-calendar/calendar-dropdown.styles_wybjai.css +1 -1
- package/shared/internal-calendar/calendar-manager.js +1 -1
- package/shared/internal-calendar/calendar-manager.js.map +1 -1
- package/shared/internal-calendar/calendar-manager.styles.js +1 -1
- package/shared/internal-calendar/calendar-manager.styles.js.map +1 -1
- package/shared/internal-calendar/{calendar-manager.styles_1iuq5zw.css → calendar-manager.styles_1njwkj2.css} +3 -3
- package/shared/internal-calendar/day-cell/day-cell.styles_1t5oqc1.css +2 -2
- package/shared/internal-calendar/internal-calendar-month.styles_14oh57f.css +2 -2
- package/shared/internal-calendar/internal-calendar-year.styles_therlc.css +2 -2
- package/shared/internal-calendar/internal-calendar.styles_gnc3eq.css +1 -1
- package/shared/internal-calendar/standard/standard-calendar-day-view.styles_1bw26au.css +2 -2
- package/shared/progress-bar/progress-bar.styles_125ri7a.css +1 -1
- package/shared/range-input-inner-container/range-input-inner-container.styles_1v61utg.css +2 -2
- package/shared/standalone-date-input/standalone-date-input.styles_157qo89.css +2 -2
- package/shared/time-slot/time-slot.styles_18s0to7.css +2 -2
- package/shared/timepicker-dropdown/timepicker-dropdown.styles_119l6k6.css +2 -2
- package/sidenav/sidenav-drawer-item.styles_1ljnyx2.css +2 -2
- package/sidenav/sidenav-drawer-subitem.styles_2y58kf.css +1 -1
- package/sidenav/sidenav-group.styles_1x604sw.css +2 -2
- package/sidenav/sidenav-item.styles_lqw3kh.css +2 -2
- package/sidenav/sidenav.d.ts +10 -0
- package/sidenav/sidenav.js.map +1 -1
- package/sidenav/sidenav.styles_1vxezie.css +2 -2
- package/sidenav/types.d.ts +70 -21
- package/singpass-button/singpass-button.d.ts +6 -0
- package/singpass-button/singpass-button.js.map +1 -1
- package/singpass-button/singpass-button.styles_1miyex3.css +2 -2
- package/singpass-button/types.d.ts +29 -2
- package/smart-app-banner/smart-app-banner.d.ts +5 -0
- package/smart-app-banner/smart-app-banner.js.map +1 -1
- package/smart-app-banner/smart-app-banner.styles_15u6yv4.css +2 -2
- package/smart-app-banner/types.d.ts +54 -0
- package/tab/tab-link-chain.styles_49got4.css +2 -2
- package/tab/tab.d.ts +7 -0
- package/tab/tab.js.map +1 -1
- package/tab/tab.styles_1najffw.css +1 -1
- package/tab/types.d.ts +55 -6
- package/table/table.d.ts +21 -0
- package/table/table.js.map +1 -1
- package/table/table.styles.js +1 -1
- package/table/table.styles.js.map +1 -1
- package/table/{table.styles_1af5ipv.css → table.styles_1vjx31g.css} +2 -2
- package/tag/tag.d.ts +5 -0
- package/tag/tag.js.map +1 -1
- package/tag/tag.style_d98c53.css +2 -2
- package/tag/types.d.ts +24 -0
- package/text-list/index.d.ts +17 -0
- package/text-list/index.js.map +1 -1
- package/text-list/text-list.styles_w3fvyt.css +2 -2
- package/text-list/types.d.ts +33 -4
- package/theme/styles/a11y-playground.css +3 -0
- package/theme/styles/bookingsg.css +7 -4
- package/theme/styles/careercompass.css +4 -1
- package/theme/styles/ccube.css +3 -0
- package/theme/styles/default.css +9 -5
- package/theme/styles/imda.css +3 -0
- package/theme/styles/lifesg.css +3 -0
- package/theme/styles/mylegacy.css +7 -4
- package/theme/styles/oneservice.css +52 -0
- package/theme/styles/pa.css +3 -0
- package/theme/styles/rbs.css +3 -0
- package/theme/styles/sgw-digital-lobby.css +5 -2
- package/theme/styles/smgs.css +3 -0
- package/theme/styles/spf.css +3 -0
- package/theme/styles/supportgowhere.css +3 -0
- package/theme/theme-provider/breakpoint.d.ts +0 -1
- package/theme/theme-provider/breakpoint.js +1 -1
- package/theme/theme-provider/breakpoint.js.map +1 -1
- package/theme/theme-provider/hooks.d.ts +16 -0
- package/theme/theme-provider/hooks.js.map +1 -1
- package/theme/theme-provider/index.d.ts +7 -0
- package/theme/theme-provider/index.js.map +1 -1
- package/theme/theme-provider/types.d.ts +14 -0
- package/theme/tokens/border.d.ts +3 -0
- package/theme/tokens/border.js.map +1 -1
- package/theme/tokens/breakpoint.d.ts +3 -0
- package/theme/tokens/breakpoint.js.map +1 -1
- package/theme/tokens/colour.d.ts +3 -0
- package/theme/tokens/colour.js.map +1 -1
- package/theme/tokens/component.d.ts +1 -0
- package/theme/tokens/component.js.map +1 -1
- package/theme/tokens/font.d.ts +2 -0
- package/theme/tokens/font.js.map +1 -1
- package/theme/tokens/media-query.d.ts +1 -0
- package/theme/tokens/media-query.js.map +1 -1
- package/theme/tokens/motion.d.ts +1 -0
- package/theme/tokens/motion.js.map +1 -1
- package/theme/tokens/radius.d.ts +1 -0
- package/theme/tokens/radius.js.map +1 -1
- package/theme/tokens/shadow.d.ts +1 -0
- package/theme/tokens/shadow.js.map +1 -1
- package/theme/tokens/spacing.d.ts +1 -0
- package/theme/tokens/spacing.js.map +1 -1
- package/theme/types.d.ts +24 -4
- package/theme/types.js +1 -1
- package/theme/types.js.map +1 -1
- package/theme/utils/css-variable.d.ts +10 -2
- package/theme/utils/css-variable.js.map +1 -1
- package/theme/utils/font.d.ts +2 -1
- package/theme/utils/font.js.map +1 -1
- package/theme/utils/index.d.ts +1 -0
- package/theme/utils/use-apply-styles.d.ts +8 -2
- package/theme/utils/use-apply-styles.js +1 -1
- package/theme/utils/use-apply-styles.js.map +1 -1
- package/theme/utils/use-design-token-override.d.ts +19 -0
- package/theme/utils/use-design-token-override.js +2 -0
- package/theme/utils/use-design-token-override.js.map +1 -0
- package/theme/utils/use-design-token.d.ts +9 -0
- package/theme/utils/use-design-token.js.map +1 -1
- package/theme/utils/use-media-query.d.ts +41 -3
- package/theme/utils/use-media-query.js.map +1 -1
- package/time-range-picker/combobox-picker/combobox-picker.js +1 -1
- package/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
- package/time-range-picker/combobox-picker/combobox-picker.styles_7i9vso.css +1 -1
- package/time-range-picker/common.styles.d.ts +1 -0
- package/time-range-picker/common.styles.js +1 -1
- package/time-range-picker/common.styles.js.map +1 -1
- package/time-range-picker/{common.styles_1qwp4xa.css → common.styles_cnkkax.css} +2 -1
- package/time-range-picker/dial-picker/dial-picker.js +1 -1
- package/time-range-picker/dial-picker/dial-picker.js.map +1 -1
- package/time-range-picker/time-range-picker.d.ts +5 -0
- package/time-range-picker/time-range-picker.js.map +1 -1
- package/time-range-picker/types.d.ts +85 -25
- package/time-slot-bar/internal-types.d.ts +1 -0
- package/time-slot-bar/time-slot-bar.d.ts +7 -0
- package/time-slot-bar/time-slot-bar.js.map +1 -1
- package/time-slot-bar/time-slot-bar.styles_wigbyd.css +2 -2
- package/time-slot-bar/types.d.ts +112 -20
- package/time-slot-bar-week/time-slot-bar-week-days.styles_evdvs9.css +2 -2
- package/time-slot-bar-week/time-slot-bar-week.d.ts +8 -0
- package/time-slot-bar-week/time-slot-bar-week.js.map +1 -1
- package/time-slot-bar-week/time-slot-bar-week.styles_11ybf42.css +1 -1
- package/time-slot-bar-week/types.d.ts +74 -13
- package/time-slot-week-view/time-slot-week-days.styles_1h21vyw.css +2 -2
- package/time-slot-week-view/time-slot-week-view.d.ts +7 -0
- package/time-slot-week-view/time-slot-week-view.js.map +1 -1
- package/time-slot-week-view/time-slot-week-view.styles_gqgsw2.css +1 -1
- package/time-slot-week-view/types.d.ts +53 -10
- package/timeline/timeline.d.ts +6 -0
- package/timeline/timeline.js.map +1 -1
- package/timeline/timeline.styles_1jxzik4.css +2 -2
- package/timeline/types.d.ts +58 -4
- package/timepicker/timepicker.d.ts +5 -0
- package/timepicker/timepicker.js +1 -1
- package/timepicker/timepicker.js.map +1 -1
- package/timepicker/timepicker.styles.d.ts +1 -0
- package/timepicker/timepicker.styles.js +1 -1
- package/timepicker/timepicker.styles.js.map +1 -1
- package/timepicker/timepicker.styles_lyizvq.css +2 -0
- package/timepicker/types.d.ts +49 -14
- package/timetable/timetable-header/timetable-header.styles_11gl1h4.css +2 -2
- package/timetable/timetable-row/row-bar.styles_1x0vrsz.css +1 -1
- package/timetable/timetable-row/row-cell.styles_y1dl5j.css +2 -2
- package/timetable/timetable-row/with-optional-popover.js +1 -1
- package/timetable/timetable-row/with-optional-popover.js.map +1 -1
- package/timetable/timetable.d.ts +6 -0
- package/timetable/timetable.js +1 -1
- package/timetable/timetable.js.map +1 -1
- package/timetable/timetable.styles_7rp8kz.css +2 -2
- package/timetable/types.d.ts +175 -50
- package/toast/toast.d.ts +6 -0
- package/toast/toast.js.map +1 -1
- package/toast/toast.styles_1e0l60w.css +2 -2
- package/toast/types.d.ts +42 -8
- package/toggle/toggle-icon.styles_ba71y.css +2 -2
- package/toggle/toggle.d.ts +6 -0
- package/toggle/toggle.js.map +1 -1
- package/toggle/toggle.styles_1t5qrye.css +2 -2
- package/toggle/types.d.ts +95 -17
- package/typography/index.d.ts +29 -0
- package/typography/index.js.map +1 -1
- package/typography/types.d.ts +51 -8
- package/typography/typography-text.styles_1734x2k.css +2 -2
- package/typography/typography.styles.js +1 -1
- package/typography/typography.styles.js.map +1 -1
- package/typography/{typography.styles_1155j4c.css → typography.styles_1wd82dn.css} +2 -2
- package/uneditable-section/index.d.ts +16 -1
- package/uneditable-section/index.js.map +1 -1
- package/uneditable-section/section-item.styles_mwx8ht.css +2 -2
- package/uneditable-section/types.d.ts +66 -23
- package/uneditable-section/uneditable-section.d.ts +2 -1
- package/uneditable-section/uneditable-section.js +1 -1
- package/uneditable-section/uneditable-section.js.map +1 -1
- package/uneditable-section/uneditable-section.styles_aj9zun.css +2 -2
- package/unit-number/types.d.ts +30 -4
- package/unit-number/unit-number-input.d.ts +6 -0
- package/unit-number/unit-number-input.js.map +1 -1
- package/unit-number/unit-number-input.styles_8yizj.css +2 -2
- package/util/index.d.ts +1 -0
- package/util/merge-refs.d.ts +1 -1
- package/util/merge-refs.js.map +1 -1
- package/util/use-throttle.d.ts +1 -0
- package/util/use-throttle.js +2 -0
- package/util/use-throttle.js.map +1 -0
- package/cjs/data-table/data-table.styles_1iqq1g7.css +0 -26
- package/cjs/example/example.js +0 -2
- package/cjs/example/example.js.map +0 -1
- package/cjs/example/example_r47nvz.css +0 -1
- package/cjs/example/index.js +0 -2
- package/cjs/example/index.js.map +0 -1
- package/cjs/file-upload/file-list/file-list.styles_1ea12kj.css +0 -3
- package/cjs/file-upload/file-list-item/file-list-item.styles_y7my2m.css +0 -14
- package/cjs/timepicker/timepicker.styles_1jm33yw.css +0 -1
- package/data-table/data-table.styles_1iqq1g7.css +0 -26
- package/example/example.d.ts +0 -2
- package/example/example.js +0 -2
- package/example/example.js.map +0 -1
- package/example/example_r47nvz.css +0 -1
- package/example/index.d.ts +0 -1
- package/example/index.js +0 -2
- package/example/index.js.map +0 -1
- package/example/types.d.ts +0 -3
- package/file-upload/file-list/file-list.styles_1ea12kj.css +0 -3
- package/file-upload/file-list-item/file-list-item.styles_y7my2m.css +0 -14
- package/timepicker/timepicker.styles_1jm33yw.css +0 -1
package/theme/utils/font.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"font.js","sources":["../../../src/theme/utils/font.ts"],"sourcesContent":["import type { FontSize, FontWeight } from \"../types\";\n\
|
|
1
|
+
{"version":3,"file":"font.js","sources":["../../../src/theme/utils/font.ts"],"sourcesContent":["import type { FontSize, FontWeight } from \"../types\";\n\ninterface FontDeclarationProperties {\n \"font-family\": string;\n \"font-variant\": string;\n \"font-size\": string;\n \"font-weight\": string;\n \"line-height\": string;\n \"letter-spacing\": string;\n}\n\nconst sizeVarMap: Record<\n FontSize,\n { fontFamily: string; size: string; lh: string; ls: string }\n> = {\n \"heading-xxl\": {\n fontFamily: \"var(--fds-font-family-heading)\",\n size: \"var(--fds-font-heading-size-xxl)\",\n lh: \"var(--fds-font-heading-lh-xxl)\",\n ls: \"var(--fds-font-heading-ls-xxl)\",\n },\n \"heading-xl\": {\n fontFamily: \"var(--fds-font-family-heading)\",\n size: \"var(--fds-font-heading-size-xl)\",\n lh: \"var(--fds-font-heading-lh-xl)\",\n ls: \"var(--fds-font-heading-ls-xl)\",\n },\n \"heading-lg\": {\n fontFamily: \"var(--fds-font-family-heading)\",\n size: \"var(--fds-font-heading-size-lg)\",\n lh: \"var(--fds-font-heading-lh-lg)\",\n ls: \"var(--fds-font-heading-ls-lg)\",\n },\n \"heading-md\": {\n fontFamily: \"var(--fds-font-family-heading)\",\n size: \"var(--fds-font-heading-size-md)\",\n lh: \"var(--fds-font-heading-lh-md)\",\n ls: \"var(--fds-font-heading-ls-md)\",\n },\n \"heading-sm\": {\n fontFamily: \"var(--fds-font-family-heading)\",\n size: \"var(--fds-font-heading-size-sm)\",\n lh: \"var(--fds-font-heading-lh-sm)\",\n ls: \"var(--fds-font-heading-ls-sm)\",\n },\n \"heading-xs\": {\n fontFamily: \"var(--fds-font-family-heading)\",\n size: \"var(--fds-font-heading-size-xs)\",\n lh: \"var(--fds-font-heading-lh-xs)\",\n ls: \"var(--fds-font-heading-ls-xs)\",\n },\n \"body-baseline\": {\n fontFamily: \"var(--fds-font-family-body)\",\n size: \"var(--fds-font-body-size-baseline)\",\n lh: \"var(--fds-font-body-lh-baseline)\",\n ls: \"var(--fds-font-body-ls-baseline)\",\n },\n \"body-md\": {\n fontFamily: \"var(--fds-font-family-body)\",\n size: \"var(--fds-font-body-size-md)\",\n lh: \"var(--fds-font-body-lh-md)\",\n ls: \"var(--fds-font-body-ls-md)\",\n },\n \"body-sm\": {\n fontFamily: \"var(--fds-font-family-body)\",\n size: \"var(--fds-font-body-size-sm)\",\n lh: \"var(--fds-font-body-lh-sm)\",\n ls: \"var(--fds-font-body-ls-sm)\",\n },\n \"body-xs\": {\n fontFamily: \"var(--fds-font-family-body)\",\n size: \"var(--fds-font-body-size-xs)\",\n lh: \"var(--fds-font-body-lh-xs)\",\n ls: \"var(--fds-font-body-ls-xs)\",\n },\n \"form-label\": {\n fontFamily: \"var(--fds-font-family-body)\",\n size: \"var(--fds-font-form-label-size)\",\n lh: \"var(--fds-font-form-label-lh)\",\n ls: \"var(--fds-font-form-label-ls)\",\n },\n \"form-description\": {\n fontFamily: \"var(--fds-font-family-body)\",\n size: \"var(--fds-font-form-description-size)\",\n lh: \"var(--fds-font-form-description-lh)\",\n ls: \"var(--fds-font-form-description-ls)\",\n },\n};\n\nconst weightVarMap: Record<FontWeight, string> = {\n light: \"var(--fds-font-weight-light)\",\n regular: \"var(--fds-font-weight-regular)\",\n semibold: \"var(--fds-font-weight-semibold)\",\n bold: \"var(--fds-font-weight-bold)\",\n};\n\n/**\n * Generates a CSS font declaration map using FDS CSS variables.\n *\n * @example\n * generateFontProperties(\"heading-xxl\", \"light\")\n * // => { \"font-family\": \"var(--fds-font-family-heading)\", ... }\n */\nexport const generateFontProperties = (\n size: FontSize,\n weight: FontWeight,\n options?: { noCommonLigatures?: boolean; fontVariant?: string }\n): FontDeclarationProperties => {\n const { fontFamily, size: s, lh, ls } = sizeVarMap[size];\n const w = weightVarMap[weight];\n\n const extraVariant = [\n options?.fontVariant,\n options?.noCommonLigatures ? \"no-common-ligatures\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n const fontVariant = `var(--fds-font-variant)${\n extraVariant ? ` ${extraVariant}` : \"\"\n }`;\n\n return {\n \"font-family\": fontFamily,\n \"font-variant\": fontVariant,\n \"font-size\": s,\n \"font-weight\": w,\n \"line-height\": lh,\n \"letter-spacing\": ls,\n };\n};\n\n/**\n * Generates a CSS declaration string using FDS CSS variables.\n *\n * @example\n * generateFont(\"heading-xxl\", \"light\")\n * // => \"font-family: var(--fds-font-family-heading); font-variant: var(--fds-font-variant); ...\"\n */\nexport const generateFont = (\n size: FontSize,\n weight: FontWeight,\n options?: { noCommonLigatures?: boolean; fontVariant?: string }\n): string => {\n const declarations = generateFontProperties(size, weight, options);\n\n return Object.entries(declarations)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\" \");\n};\n"],"names":["sizeVarMap","fontFamily","size","lh","ls","weightVarMap","light","regular","semibold","bold","generateFontProperties","weight","options","s","w","extraVariant","filter","Boolean","join","generateFont","declarations","Object","entries","map","key","value"],"mappings":"AAWA,MAAMA,EAGF,CACA,cAAe,CACXC,WAAY,iCACZC,KAAM,mCACNC,GAAI,iCACJC,GAAI,kCAER,aAAc,CACVH,WAAY,iCACZC,KAAM,kCACNC,GAAI,gCACJC,GAAI,iCAER,aAAc,CACVH,WAAY,iCACZC,KAAM,kCACNC,GAAI,gCACJC,GAAI,iCAER,aAAc,CACVH,WAAY,iCACZC,KAAM,kCACNC,GAAI,gCACJC,GAAI,iCAER,aAAc,CACVH,WAAY,iCACZC,KAAM,kCACNC,GAAI,gCACJC,GAAI,iCAER,aAAc,CACVH,WAAY,iCACZC,KAAM,kCACNC,GAAI,gCACJC,GAAI,iCAER,gBAAiB,CACbH,WAAY,8BACZC,KAAM,qCACNC,GAAI,mCACJC,GAAI,oCAER,UAAW,CACPH,WAAY,8BACZC,KAAM,+BACNC,GAAI,6BACJC,GAAI,8BAER,UAAW,CACPH,WAAY,8BACZC,KAAM,+BACNC,GAAI,6BACJC,GAAI,8BAER,UAAW,CACPH,WAAY,8BACZC,KAAM,+BACNC,GAAI,6BACJC,GAAI,8BAER,aAAc,CACVH,WAAY,8BACZC,KAAM,kCACNC,GAAI,gCACJC,GAAI,iCAER,mBAAoB,CAChBH,WAAY,8BACZC,KAAM,wCACNC,GAAI,sCACJC,GAAI,wCAINC,EAA2C,CAC7CC,MAAO,+BACPC,QAAS,iCACTC,SAAU,kCACVC,KAAM,+BAUGC,EAAyB,CAClCR,EACAS,EACAC,KAEA,MAAMX,WAAEA,EAAYC,KAAMW,EAACV,GAAEA,EAAEC,GAAEA,GAAOJ,EAAWE,GAC7CY,EAAIT,EAAaM,GAEjBI,EAAe,MACV,EAC8C,IAEpDC,OAAOC,SACPC,KAAK,KAMV,MAAO,CACH,cAAejB,EACf,eANgB,2BAChBc,EAAe,IAAIA,IAAiB,IAMpC,YAAaF,EACb,cAAeC,EACf,cAAeX,EACf,iBAAkBC,EACrB,EAUQe,EAAe,CACxBjB,EACAS,EACAC,KAEA,MAAMQ,EAAeV,EAAuBR,EAAMS,GAElD,OAAOU,OAAOC,QAAQF,GACjBG,KAAI,EAAEC,EAAKC,KAAW,GAAGD,MAAQC,OACjCP,KAAK,IAAI"}
|
package/theme/utils/index.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import type { CSSProperties, RefObject } from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { CSSVariableString } from "../types";
|
|
3
3
|
type StyleValue = string | number | null | undefined;
|
|
4
|
+
type ExtractCleanCSSVariableName<T extends string> = T extends `var(${infer Name})` ? Name : never;
|
|
5
|
+
type CSSVariableKey = ExtractCleanCSSVariableName<CSSVariableString>;
|
|
6
|
+
/**
|
|
7
|
+
* Style map accepted by `useApplyStyle`. Supports camelCase CSS properties,
|
|
8
|
+
* theme CSS variable keys, and arbitrary `--custom-property` names.
|
|
9
|
+
*/
|
|
4
10
|
export type ApplyStyleMap = ({
|
|
5
11
|
[K in keyof CSSStyleDeclaration]?: StyleValue;
|
|
6
12
|
} & {
|
|
@@ -10,7 +16,7 @@ export type ApplyStyleMap = ({
|
|
|
10
16
|
}) | CSSProperties;
|
|
11
17
|
/**
|
|
12
18
|
* Hook to apply styles to a HTML DOM element. Use when you need to apply inline
|
|
13
|
-
* styles but cannot use the inline React `style` prop due to strict CSP rules
|
|
19
|
+
* styles but cannot use the inline React `style` prop due to strict CSP rules.
|
|
14
20
|
*
|
|
15
21
|
* @param ref The HTML element to receive the styles
|
|
16
22
|
* @param styles The styles to apply, in the same format as the React `style`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import"react";import"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import{useIsomorphicLayoutEffect as t}from"../../util/use-isomorphic-layout-effect.js";const r=["width","height","top","left","right","bottom","margin","marginTop","marginLeft","marginRight","marginBottom","padding","paddingTop","paddingLeft","paddingRight","paddingBottom"];function e(e,i){t((()=>{const t=null==e?void 0:e.current;t&&i&&Object.entries(i).forEach((([e,i])=>{const o=function(t){if(t.startsWith("--"))return t;const r=t.replace(/([A-Z])/g,"-$1").toLowerCase();return/^(o|moz|ms|webkit)-/.test(r)?`-${r}`:r}(e);if(null==i)return void t.style.removeProperty(o);const n=function(t,e){return"number"==typeof e&&r.
|
|
1
|
+
import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import"react";import"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import{useIsomorphicLayoutEffect as t}from"../../util/use-isomorphic-layout-effect.js";const r=new Set(["width","height","top","left","right","bottom","margin","marginTop","marginLeft","marginRight","marginBottom","padding","paddingTop","paddingLeft","paddingRight","paddingBottom"]);function e(e,i){t((()=>{const t=null==e?void 0:e.current;t&&i&&Object.entries(i).forEach((([e,i])=>{const o=function(t){if(t.startsWith("--"))return t;const r=t.replace(/([A-Z])/g,"-$1").toLowerCase();return/^(o|moz|ms|webkit)-/.test(r)?`-${r}`:r}(e);if(null==i)return void t.style.removeProperty(o);const n=function(t,e){return"number"==typeof e&&r.has(t)?`${e}px`:String(e)}(e,i);t.style.setProperty(o,n)}))}),[e,i])}export{e as useApplyStyle};
|
|
2
2
|
//# sourceMappingURL=use-apply-styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-apply-styles.js","sources":["../../../src/theme/utils/use-apply-styles.ts"],"sourcesContent":["import type { CSSProperties, RefObject } from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"../../util\";\nimport type {
|
|
1
|
+
{"version":3,"file":"use-apply-styles.js","sources":["../../../src/theme/utils/use-apply-styles.ts"],"sourcesContent":["import type { CSSProperties, RefObject } from \"react\";\n\nimport { useIsomorphicLayoutEffect } from \"../../util\";\nimport type { CSSVariableString } from \"../types\";\n\ntype StyleValue = string | number | null | undefined;\n\ntype ExtractCleanCSSVariableName<T extends string> =\n T extends `var(${infer Name})` ? Name : never;\ntype CSSVariableKey = ExtractCleanCSSVariableName<CSSVariableString>;\n\n/**\n * Style map accepted by `useApplyStyle`. Supports camelCase CSS properties,\n * theme CSS variable keys, and arbitrary `--custom-property` names.\n */\nexport type ApplyStyleMap =\n | ({\n [K in keyof CSSStyleDeclaration]?: StyleValue;\n } & {\n [K in CSSVariableKey]?: StyleValue;\n } & {\n [K in `--${string}`]?: StyleValue;\n })\n | CSSProperties;\n\n/**\n * List of properties that expect units but can be provided as\n * numbers through React style prop\n */\nconst numericCssStyleProperties: Set<keyof CSSStyleDeclaration> = new Set([\n \"width\",\n \"height\",\n \"top\",\n \"left\",\n \"right\",\n \"bottom\",\n \"margin\",\n \"marginTop\",\n \"marginLeft\",\n \"marginRight\",\n \"marginBottom\",\n \"padding\",\n \"paddingTop\",\n \"paddingLeft\",\n \"paddingRight\",\n \"paddingBottom\",\n]);\n\n/**\n * Normalises standard CSS property names from camelCase to kebab-case\n * - `backgroundColor` → `background-color`\n * - `WebkitLineClamp` → `-webkit-line-clamp`\n * - `--custom-variable` → `--custom-variable`\n *\n * Ref\n * https://github.com/facebook/react/blob/ad5dfc82b7107728da1430dd142f75b97b684dac/packages/react-dom-bindings/src/shared/hyphenateStyleName.js#L26\n */\nfunction normaliseCssProperty(key: string): string {\n if (key.startsWith(\"--\")) return key;\n\n const kebabCased = key.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n\n if (/^(o|moz|ms|webkit)-/.test(kebabCased)) {\n return `-${kebabCased}`;\n }\n\n return kebabCased;\n}\n\nfunction normaliseCssValue(key: string, value: string | number): string {\n if (\n typeof value === \"number\" &&\n numericCssStyleProperties.has(key as keyof CSSStyleDeclaration)\n ) {\n return `${value}px`;\n }\n\n return String(value);\n}\n\n/**\n * Hook to apply styles to a HTML DOM element. Use when you need to apply inline\n * styles but cannot use the inline React `style` prop due to strict CSP rules.\n *\n * @param ref The HTML element to receive the styles\n * @param styles The styles to apply, in the same format as the React `style`\n * prop, or CSS variables. Values will be normalised to strings and numeric\n * values will have \"px\" appended for properties that typically require units.\n */\nexport function useApplyStyle<TElement extends HTMLElement>(\n ref: RefObject<TElement | null>,\n styles: ApplyStyleMap | undefined\n) {\n useIsomorphicLayoutEffect(() => {\n const element = ref?.current;\n if (!element || !styles) return;\n\n Object.entries(styles).forEach(([key, value]: [string, StyleValue]) => {\n const normalisedKey = normaliseCssProperty(key);\n\n if (value == null) {\n element.style.removeProperty(normalisedKey);\n return;\n }\n\n const normalisedValue = normaliseCssValue(key, value);\n element.style.setProperty(normalisedKey, normalisedValue);\n });\n }, [ref, styles]);\n}\n"],"names":["numericCssStyleProperties","Set","useApplyStyle","ref","styles","useIsomorphicLayoutEffect","element","current","Object","entries","forEach","key","value","normalisedKey","startsWith","kebabCased","replace","toLowerCase","test","normaliseCssProperty","style","removeProperty","normalisedValue","has","String","normaliseCssValue","setProperty"],"mappings":"sSA6BA,MAAMA,EAA4D,IAAIC,IAAI,CACtE,QACA,SACA,MACA,OACA,QACA,SACA,SACA,YACA,aACA,cACA,eACA,UACA,aACA,cACA,eACA,kBA4CE,SAAUC,EACZC,EACAC,GAEAC,GAA0B,KACtB,MAAMC,EAAUH,aAAG,EAAHA,EAAKI,QAChBD,GAAYF,GAEjBI,OAAOC,QAAQL,GAAQM,SAAQ,EAAEC,EAAKC,MAClC,MAAMC,EAzClB,SAA8BF,GAC1B,GAAIA,EAAIG,WAAW,MAAO,OAAOH,EAEjC,MAAMI,EAAaJ,EAAIK,QAAQ,WAAY,OAAOC,cAElD,MAAI,sBAAsBC,KAAKH,GACpB,IAAIA,IAGRA,CACX,CA+BkCI,CAAqBR,GAE3C,GAAa,MAATC,EAEA,YADAN,EAAQc,MAAMC,eAAeR,GAIjC,MAAMS,EApClB,SAA2BX,EAAaC,GACpC,MACqB,iBAAVA,GACPZ,EAA0BuB,IAAIZ,GAEvB,GAAGC,MAGPY,OAAOZ,EAClB,CA2BoCa,CAAkBd,EAAKC,GAC/CN,EAAQc,MAAMM,YAAYb,EAAeS,EAAgB,GAC3D,GACH,CAACnB,EAAKC,GACb"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CSSVariableString, ResolvedThemeMode } from "../types";
|
|
2
|
+
interface UseDesignTokenOverrideOptions {
|
|
3
|
+
token: CSSVariableString;
|
|
4
|
+
mode?: ResolvedThemeMode;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Resolves a design token's value in a specific theme mode,
|
|
8
|
+
* regardless of the current active mode.
|
|
9
|
+
*
|
|
10
|
+
* @param options.token The CSS variable token to resolve.
|
|
11
|
+
* @param options.mode The mode to resolve in.
|
|
12
|
+
*
|
|
13
|
+
* @returns The computed CSS value, or `undefined` when the theme element has
|
|
14
|
+
* not yet mounted.
|
|
15
|
+
*
|
|
16
|
+
* @default options.mode "light"
|
|
17
|
+
*/
|
|
18
|
+
export declare const useDesignTokenOverride: ({ token, mode, }: UseDesignTokenOverrideOptions) => string | undefined;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{useState as e,useEffect as t}from"react";import{useTheme as o}from"../theme-provider/hooks.js";import{parseCSSVariableValue as r}from"./css-variable.js";const m=({token:m,mode:s="light"})=>{const{theme:d,themeElement:n}=o(),[i,a]=e();return t((()=>{if(!n)return;const e=document.createElement("div");e.dataset.fdsTheme=d,e.dataset.fdsThemeMode=s,e.style.display="none",n.appendChild(e);const t=r(m,e);a(t||void 0),e.remove()}),[d,n,m,s]),i};export{m as useDesignTokenOverride};
|
|
2
|
+
//# sourceMappingURL=use-design-token-override.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-design-token-override.js","sources":["../../../src/theme/utils/use-design-token-override.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport { useTheme } from \"../theme-provider/hooks\";\nimport type { CSSVariableString, ResolvedThemeMode } from \"../types\";\nimport { parseCSSVariableValue } from \"./css-variable\";\n\ninterface UseDesignTokenOverrideOptions {\n token: CSSVariableString;\n mode?: ResolvedThemeMode;\n}\n\n/**\n * Resolves a design token's value in a specific theme mode,\n * regardless of the current active mode.\n *\n * @param options.token The CSS variable token to resolve.\n * @param options.mode The mode to resolve in.\n *\n * @returns The computed CSS value, or `undefined` when the theme element has\n * not yet mounted.\n *\n * @default options.mode \"light\"\n */\nexport const useDesignTokenOverride = ({\n token,\n mode = \"light\",\n}: UseDesignTokenOverrideOptions): string | undefined => {\n const { theme, themeElement } = useTheme();\n const [value, setValue] = useState<string | undefined>();\n\n useEffect(() => {\n if (!themeElement) return;\n\n const tempEl = document.createElement(\"div\");\n tempEl.dataset.fdsTheme = theme;\n tempEl.dataset.fdsThemeMode = mode;\n tempEl.style.display = \"none\";\n themeElement.appendChild(tempEl);\n\n const resolved = parseCSSVariableValue(token, tempEl);\n setValue(resolved || undefined);\n\n tempEl.remove();\n }, [theme, themeElement, token, mode]);\n\n return value;\n};\n"],"names":["useDesignTokenOverride","token","mode","theme","themeElement","useTheme","value","setValue","useState","useEffect","tempEl","document","createElement","dataset","fdsTheme","fdsThemeMode","style","display","appendChild","resolved","parseCSSVariableValue","undefined","remove"],"mappings":"gKAuBO,MAAMA,EAAyB,EAClCC,QACAC,OAAO,YAEP,MAAMC,MAAEA,EAAKC,aAAEA,GAAiBC,KACzBC,EAAOC,GAAYC,IAiB1B,OAfAC,GAAU,KACN,IAAKL,EAAc,OAEnB,MAAMM,EAASC,SAASC,cAAc,OACtCF,EAAOG,QAAQC,SAAWX,EAC1BO,EAAOG,QAAQE,aAAeb,EAC9BQ,EAAOM,MAAMC,QAAU,OACvBb,EAAac,YAAYR,GAEzB,MAAMS,EAAWC,EAAsBnB,EAAOS,GAC9CH,EAASY,QAAYE,GAErBX,EAAOY,QAAQ,GAChB,CAACnB,EAAOC,EAAcH,EAAOC,IAEzBI,CAAK"}
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import type { CSSVariableString } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a design-token CSS variable to its computed string value within the
|
|
4
|
+
* nearest `ThemeProvider` scope.
|
|
5
|
+
*
|
|
6
|
+
* @param tokenName A `CSSVariableString` token (e.g. `Colour["text"]`), or
|
|
7
|
+
* `undefined` to skip resolution.
|
|
8
|
+
* @returns The computed CSS value, or `undefined` when the provider has not yet
|
|
9
|
+
* mounted or `tokenName` is `undefined`.
|
|
10
|
+
*/
|
|
2
11
|
export declare const useDesignToken: (tokenName: CSSVariableString | undefined) => string | undefined;
|
|
3
12
|
export interface UseResolvedTokenValueOptions<TToken extends CSSVariableString, TCustom> {
|
|
4
13
|
/** Value used when `value` is empty. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-design-token.js","sources":["../../../src/theme/utils/use-design-token.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport { useTheme } from \"../theme-provider/hooks\";\nimport type { CSSVariableString } from \"../types\";\nimport { parseCSSVariableValue } from \"./css-variable\";\n\nconst isEmptyValue = (value: unknown) => {\n return value == null || value === \"\";\n};\n\nexport const useDesignToken = (\n tokenName: CSSVariableString | undefined\n): string | undefined => {\n const { theme, mode, themeElement } = useTheme();\n const [value, setValue] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!themeElement) return;\n\n setValue(parseCSSVariableValue(tokenName, themeElement));\n }, [theme, mode, themeElement, tokenName]);\n\n return value;\n};\n\nexport interface UseResolvedTokenValueOptions<\n TToken extends CSSVariableString,\n TCustom\n> {\n /** Value used when `value` is empty. */\n fallback: TToken | TCustom;\n /** Type guard to identify token values. */\n isToken: (value: unknown) => value is TToken;\n /** Normalizer for non-token values. */\n normalizeCustom: (value: TCustom) => string;\n /** Candidate token or custom value. */\n value: TToken | TCustom | null | undefined;\n}\n\n/**\n * Resolves token-aware values with consistent fallback behavior.\n * - Empty values (`null`, `undefined`, `\"\"`) use `fallback`.\n * - Token values are resolved through `useDesignToken`.\n * - Non-token values are returned via `normalizeCustom`.\n * @param options Resolution options for token/custom values.\n * @returns Resolved token value or normalized custom/fallback value.\n */\nexport const useResolvedTokenValue = <\n TToken extends CSSVariableString,\n TCustom\n>(\n options: UseResolvedTokenValueOptions<TToken, TCustom>\n) => {\n const { value, fallback, isToken: checkToken, normalizeCustom } = options;\n const isToken = checkToken(value);\n const tokenName = isToken ? value : undefined;\n const resolvedToken = useDesignToken(tokenName);\n const isFallbackToken = checkToken(fallback);\n const fallbackTokenName = isFallbackToken ? fallback : undefined;\n const resolvedFallback = useDesignToken(fallbackTokenName);\n\n if (isToken && !isEmptyValue(resolvedToken)) {\n return resolvedToken;\n }\n\n if (!isToken && !isEmptyValue(value)) {\n return normalizeCustom(value);\n }\n\n if (isFallbackToken && !isEmptyValue(resolvedFallback)) {\n return resolvedFallback;\n }\n\n return normalizeCustom(fallback as TCustom);\n};\n"],"names":["isEmptyValue","value","useDesignToken","tokenName","theme","mode","themeElement","useTheme","setValue","useState","undefined","useEffect","parseCSSVariableValue","useResolvedTokenValue","options","fallback","isToken","checkToken","normalizeCustom","resolvedToken","isFallbackToken","resolvedFallback"],"mappings":"gKAMA,MAAMA,EAAgBC,GACF,MAATA,GAA2B,KAAVA,
|
|
1
|
+
{"version":3,"file":"use-design-token.js","sources":["../../../src/theme/utils/use-design-token.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport { useTheme } from \"../theme-provider/hooks\";\nimport type { CSSVariableString } from \"../types\";\nimport { parseCSSVariableValue } from \"./css-variable\";\n\nconst isEmptyValue = (value: unknown) => {\n return value == null || value === \"\";\n};\n\n/**\n * Resolves a design-token CSS variable to its computed string value within the\n * nearest `ThemeProvider` scope.\n *\n * @param tokenName A `CSSVariableString` token (e.g. `Colour[\"text\"]`), or\n * `undefined` to skip resolution.\n * @returns The computed CSS value, or `undefined` when the provider has not yet\n * mounted or `tokenName` is `undefined`.\n */\nexport const useDesignToken = (\n tokenName: CSSVariableString | undefined\n): string | undefined => {\n const { theme, mode, themeElement } = useTheme();\n const [value, setValue] = useState<string | undefined>(undefined);\n\n useEffect(() => {\n if (!themeElement) return;\n\n setValue(parseCSSVariableValue(tokenName, themeElement));\n }, [theme, mode, themeElement, tokenName]);\n\n return value;\n};\n\nexport interface UseResolvedTokenValueOptions<\n TToken extends CSSVariableString,\n TCustom\n> {\n /** Value used when `value` is empty. */\n fallback: TToken | TCustom;\n /** Type guard to identify token values. */\n isToken: (value: unknown) => value is TToken;\n /** Normalizer for non-token values. */\n normalizeCustom: (value: TCustom) => string;\n /** Candidate token or custom value. */\n value: TToken | TCustom | null | undefined;\n}\n\n/**\n * Resolves token-aware values with consistent fallback behavior.\n * - Empty values (`null`, `undefined`, `\"\"`) use `fallback`.\n * - Token values are resolved through `useDesignToken`.\n * - Non-token values are returned via `normalizeCustom`.\n * @param options Resolution options for token/custom values.\n * @returns Resolved token value or normalized custom/fallback value.\n */\nexport const useResolvedTokenValue = <\n TToken extends CSSVariableString,\n TCustom\n>(\n options: UseResolvedTokenValueOptions<TToken, TCustom>\n) => {\n const { value, fallback, isToken: checkToken, normalizeCustom } = options;\n const isToken = checkToken(value);\n const tokenName = isToken ? value : undefined;\n const resolvedToken = useDesignToken(tokenName);\n const isFallbackToken = checkToken(fallback);\n const fallbackTokenName = isFallbackToken ? fallback : undefined;\n const resolvedFallback = useDesignToken(fallbackTokenName);\n\n if (isToken && !isEmptyValue(resolvedToken)) {\n return resolvedToken;\n }\n\n if (!isToken && !isEmptyValue(value)) {\n return normalizeCustom(value);\n }\n\n if (isFallbackToken && !isEmptyValue(resolvedFallback)) {\n return resolvedFallback;\n }\n\n return normalizeCustom(fallback as TCustom);\n};\n"],"names":["isEmptyValue","value","useDesignToken","tokenName","theme","mode","themeElement","useTheme","setValue","useState","undefined","useEffect","parseCSSVariableValue","useResolvedTokenValue","options","fallback","isToken","checkToken","normalizeCustom","resolvedToken","isFallbackToken","resolvedFallback"],"mappings":"gKAMA,MAAMA,EAAgBC,GACF,MAATA,GAA2B,KAAVA,EAYfC,EACTC,IAEA,MAAMC,MAAEA,EAAKC,KAAEA,EAAIC,aAAEA,GAAiBC,KAC/BN,EAAOO,GAAYC,OAA6BC,GAQvD,OANAC,GAAU,KACDL,GAELE,EAASI,EAAsBT,EAAWG,GAAc,GACzD,CAACF,EAAOC,EAAMC,EAAcH,IAExBF,CAAK,EAyBHY,EAITC,IAEA,MAAMb,MAAEA,EAAKc,SAAEA,EAAUC,QAASC,EAAUC,gBAAEA,GAAoBJ,EAC5DE,EAAUC,EAAWhB,GAErBkB,EAAgBjB,EADJc,EAAUf,OAAQS,GAE9BU,EAAkBH,EAAWF,GAE7BM,EAAmBnB,EADCkB,EAAkBL,OAAWL,GAGvD,OAAIM,IAAYhB,EAAamB,GAClBA,EAGNH,GAAYhB,EAAaC,GAI1BmB,IAAoBpB,EAAaqB,GAC1BA,EAGJH,EAAgBH,GAPZG,EAAgBjB,EAOgB"}
|
|
@@ -1,23 +1,61 @@
|
|
|
1
1
|
import { Breakpoint } from "../tokens/breakpoint";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
/** Named width breakpoint identifier used for responsive width comparisons. */
|
|
3
|
+
type BreakpointName = "xxs" | "xs" | "sm" | "md" | "lg" | "xl" | "xxl";
|
|
4
|
+
type MaxWidthBreakpointName = Exclude<BreakpointName, "xxl">;
|
|
4
5
|
type MinWidthBreakpointTokenKey = `${BreakpointName}-min`;
|
|
5
6
|
type MaxWidthBreakpointTokenKey = `${MaxWidthBreakpointName}-max`;
|
|
6
7
|
type WidthBreakpointTokenKey = MinWidthBreakpointTokenKey | MaxWidthBreakpointTokenKey;
|
|
7
8
|
type WidthBreakpointCSSVariableString = (typeof Breakpoint)[WidthBreakpointTokenKey];
|
|
8
9
|
type MediaQueryFeature = "aspect-ratio" | "color-index" | "color" | "device-aspect-ratio" | "device-height" | "device-width" | "grid" | "height" | "max-height" | "min-height" | "hover" | "monochrome" | "orientation" | "pointer" | "prefers-color-scheme" | "resolution" | "scan" | "width";
|
|
9
|
-
|
|
10
|
+
type MediaQueryClauseValue = string | number | boolean;
|
|
11
|
+
/** A single media-query feature condition. */
|
|
10
12
|
export interface MediaQueryClause {
|
|
11
13
|
feature: MediaQueryFeature;
|
|
14
|
+
/**
|
|
15
|
+
* Value for the media-query feature.
|
|
16
|
+
*
|
|
17
|
+
* - A string or number emits `(feature: value)`.
|
|
18
|
+
* - `true` emits a bare feature clause (e.g. `(hover)`).
|
|
19
|
+
* - `false` or `undefined` omits the clause entirely.
|
|
20
|
+
*/
|
|
12
21
|
value: MediaQueryClauseValue | undefined;
|
|
13
22
|
}
|
|
23
|
+
/** Options for `useMediaQuery`. */
|
|
14
24
|
export interface MediaQueryOptions {
|
|
25
|
+
/** Lower-bound breakpoint token. Viewport must be >= this width. */
|
|
15
26
|
minWidth?: WidthBreakpointCSSVariableString;
|
|
27
|
+
/** Upper-bound breakpoint token. Viewport must be <= this width. */
|
|
16
28
|
maxWidth?: WidthBreakpointCSSVariableString;
|
|
29
|
+
/** Extra feature conditions (e.g. `hover`, `orientation`) combined with `and`. */
|
|
17
30
|
clauses?: MediaQueryClause[];
|
|
18
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns `true` when the viewport width is at or above the named breakpoint.
|
|
34
|
+
*
|
|
35
|
+
* @param breakpoint Named breakpoint to compare against.
|
|
36
|
+
*/
|
|
19
37
|
export declare const useMinWidthMediaQuery: (breakpoint: BreakpointName) => boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Returns `true` when the viewport width is at or below the named breakpoint.
|
|
40
|
+
*
|
|
41
|
+
* @param breakpoint Named breakpoint to compare against.
|
|
42
|
+
*/
|
|
20
43
|
export declare const useMaxWidthMediaQuery: (breakpoint: MaxWidthBreakpointName) => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Resolves a width breakpoint CSS variable token to its computed pixel string.
|
|
46
|
+
*
|
|
47
|
+
* @returns The resolved pixel value, falling back to default LifeSG breakpoint
|
|
48
|
+
* values when the theme element is not yet mounted, or `""` for unrecognised
|
|
49
|
+
* tokens.
|
|
50
|
+
*/
|
|
21
51
|
export declare const useResolvedBreakpointToken: (breakpointToken: WidthBreakpointCSSVariableString | undefined) => string;
|
|
52
|
+
/**
|
|
53
|
+
* Reactive boolean hook that evaluates a media query built from width
|
|
54
|
+
* breakpoint tokens and optional custom feature clauses.
|
|
55
|
+
*
|
|
56
|
+
* @returns `true` when the query matches. When `window.matchMedia` is
|
|
57
|
+
* unavailable (SSR), defaults to `true` for min-width-only queries and
|
|
58
|
+
* `false` for max-width-only.
|
|
59
|
+
*/
|
|
22
60
|
export declare const useMediaQuery: (options: MediaQueryOptions) => boolean;
|
|
23
61
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-media-query.js","sources":["../../../src/theme/utils/use-media-query.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport { Breakpoint } from \"../tokens/breakpoint\";\nimport { isTokenFromSet } from \"./token-resolver\";\nimport { useResolvedTokenValue } from \"./use-design-token\";\n\nexport type BreakpointName = \"xxs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\nexport type MaxWidthBreakpointName = Exclude<BreakpointName, \"xxl\">;\ntype MinWidthBreakpointTokenKey = `${BreakpointName}-min`;\ntype MaxWidthBreakpointTokenKey = `${MaxWidthBreakpointName}-max`;\ntype WidthBreakpointTokenKey =\n | MinWidthBreakpointTokenKey\n | MaxWidthBreakpointTokenKey;\ntype WidthBreakpointCSSVariableString =\n (typeof Breakpoint)[WidthBreakpointTokenKey];\n\ntype MediaQueryFeature =\n | \"aspect-ratio\"\n | \"color-index\"\n | \"color\"\n | \"device-aspect-ratio\"\n | \"device-height\"\n | \"device-width\"\n | \"grid\"\n | \"height\"\n | \"max-height\"\n | \"min-height\"\n | \"hover\"\n | \"monochrome\"\n | \"orientation\"\n | \"pointer\"\n | \"prefers-color-scheme\"\n | \"resolution\"\n | \"scan\"\n | \"width\";\n\nexport type MediaQueryClauseValue = string | number | boolean;\n\nexport interface MediaQueryClause {\n feature: MediaQueryFeature;\n value: MediaQueryClauseValue | undefined;\n}\n\nexport interface MediaQueryOptions {\n minWidth?: WidthBreakpointCSSVariableString;\n maxWidth?: WidthBreakpointCSSVariableString;\n clauses?: MediaQueryClause[];\n}\n\n/**\n * Default LifeSG breakpoint values for width-based tokens.\n * Extracted from src/theme/styles/default.css.\n */\nconst WIDTH_BREAKPOINT_DEFAULTS: Record<\n WidthBreakpointCSSVariableString,\n string\n> = {\n [Breakpoint[\"xxs-min\"]]: \"0\",\n [Breakpoint[\"xs-min\"]]: \"321px\",\n [Breakpoint[\"sm-min\"]]: \"376px\",\n [Breakpoint[\"md-min\"]]: \"481px\",\n [Breakpoint[\"lg-min\"]]: \"769px\",\n [Breakpoint[\"xl-min\"]]: \"1201px\",\n [Breakpoint[\"xxl-min\"]]: \"1441px\",\n [Breakpoint[\"xxs-max\"]]: \"320px\",\n [Breakpoint[\"xs-max\"]]: \"375px\",\n [Breakpoint[\"sm-max\"]]: \"480px\",\n [Breakpoint[\"md-max\"]]: \"768px\",\n [Breakpoint[\"lg-max\"]]: \"1200px\",\n [Breakpoint[\"xl-max\"]]: \"1440px\",\n};\n\nconst WIDTH_BREAKPOINT_TOKEN_SET = new Set<WidthBreakpointCSSVariableString>([\n Breakpoint[\"xxs-min\"],\n Breakpoint[\"xs-min\"],\n Breakpoint[\"sm-min\"],\n Breakpoint[\"md-min\"],\n Breakpoint[\"lg-min\"],\n Breakpoint[\"xl-min\"],\n Breakpoint[\"xxl-min\"],\n Breakpoint[\"xxs-max\"],\n Breakpoint[\"xs-max\"],\n Breakpoint[\"sm-max\"],\n Breakpoint[\"md-max\"],\n Breakpoint[\"lg-max\"],\n Breakpoint[\"xl-max\"],\n]);\n\nconst isBreakpointToken = (\n value: unknown\n): value is WidthBreakpointCSSVariableString => {\n return isTokenFromSet<WidthBreakpointCSSVariableString>(\n value,\n WIDTH_BREAKPOINT_TOKEN_SET\n );\n};\n\nconst getMinWidthBreakpointToken = (breakpoint: BreakpointName) => {\n return Breakpoint[`${breakpoint}-min`];\n};\n\nconst getMaxWidthBreakpointToken = (breakpoint: MaxWidthBreakpointName) => {\n return Breakpoint[`${breakpoint}-max`];\n};\n\nexport const useMinWidthMediaQuery = (breakpoint: BreakpointName) =>\n useMediaQuery({\n minWidth: getMinWidthBreakpointToken(breakpoint),\n });\n\nexport const useMaxWidthMediaQuery = (breakpoint: MaxWidthBreakpointName) =>\n useMediaQuery({\n maxWidth: getMaxWidthBreakpointToken(breakpoint),\n });\n\nconst getMediaQueryClause = (\n feature: \"min-width\" | \"max-width\",\n value: string | undefined\n) => {\n if (!value) {\n return undefined;\n }\n\n return `(${feature}: ${value})`;\n};\n\nconst getCustomMediaQueryClause = (\n clause: MediaQueryClause | null | undefined\n) => {\n if (clause?.value === undefined) {\n return undefined;\n }\n\n if (clause.value === true) {\n return `(${clause.feature})`;\n }\n\n if (clause.value === false) {\n return undefined;\n }\n\n const value = `${clause.value}`.trim();\n\n if (!value) {\n return undefined;\n }\n\n return `(${clause.feature}: ${value})`;\n};\n\nconst getDefaultMatch = (hasMinWidth: boolean, hasMaxWidth: boolean) => {\n if (hasMaxWidth) {\n return false;\n }\n\n if (hasMinWidth) {\n return true;\n }\n\n return false;\n};\n\nconst getCurrentMatch = (queryString: string, defaultMatch: boolean) => {\n if (!queryString) {\n return defaultMatch;\n }\n\n if (!globalThis.window?.matchMedia) {\n return defaultMatch;\n }\n\n return globalThis.window.matchMedia(queryString).matches;\n};\n\nexport const useResolvedBreakpointToken = (\n breakpointToken: WidthBreakpointCSSVariableString | undefined\n): string => {\n const effectiveFallback =\n isBreakpointToken(breakpointToken) &&\n WIDTH_BREAKPOINT_DEFAULTS[breakpointToken]\n ? WIDTH_BREAKPOINT_DEFAULTS[breakpointToken]\n : \"\";\n\n return useResolvedTokenValue<WidthBreakpointCSSVariableString, string>({\n value: breakpointToken,\n fallback: effectiveFallback,\n isToken: isBreakpointToken,\n normalizeCustom: (value) => value,\n });\n};\n\nconst useMatchMediaQuery = (\n queryString: string,\n defaultMatch: boolean\n): boolean => {\n const [matches, setMatches] = useState(() =>\n getCurrentMatch(queryString, defaultMatch)\n );\n\n useEffect(() => {\n if (!queryString || !globalThis.window?.matchMedia) {\n setMatches(defaultMatch);\n return;\n }\n\n const mediaQueryList = globalThis.window.matchMedia(queryString);\n const handleChange = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n setMatches(mediaQueryList.matches);\n mediaQueryList.addEventListener(\"change\", handleChange);\n\n return () => {\n mediaQueryList.removeEventListener(\"change\", handleChange);\n };\n }, [defaultMatch, queryString]);\n\n return matches;\n};\n\nexport const useMediaQuery = (options: MediaQueryOptions): boolean => {\n const { minWidth, maxWidth, clauses = [] } = options;\n const normalizedMinWidth = useResolvedBreakpointToken(minWidth);\n const normalizedMaxWidth = useResolvedBreakpointToken(maxWidth);\n const widthClauses = [\n getMediaQueryClause(\"min-width\", normalizedMinWidth),\n getMediaQueryClause(\"max-width\", normalizedMaxWidth),\n ].filter((value): value is string => !!value);\n const customClauses = clauses\n .map(getCustomMediaQueryClause)\n .filter((value): value is string => !!value);\n const queryString = [...widthClauses, ...customClauses].join(\" and \");\n const hasMinWidth = !!normalizedMinWidth;\n const hasMaxWidth = !!normalizedMaxWidth;\n const defaultMatch = getDefaultMatch(hasMinWidth, hasMaxWidth);\n\n return useMatchMediaQuery(queryString, defaultMatch);\n};\n"],"names":["WIDTH_BREAKPOINT_DEFAULTS","Breakpoint","WIDTH_BREAKPOINT_TOKEN_SET","Set","isBreakpointToken","value","isTokenFromSet","getMinWidthBreakpointToken","breakpoint","getMaxWidthBreakpointToken","useMinWidthMediaQuery","useMediaQuery","minWidth","useMaxWidthMediaQuery","maxWidth","getMediaQueryClause","feature","getCustomMediaQueryClause","clause","undefined","trim","useResolvedBreakpointToken","breakpointToken","effectiveFallback","useResolvedTokenValue","fallback","isToken","normalizeCustom","useMatchMediaQuery","queryString","defaultMatch","matches","setMatches","useState","_a","globalThis","window","matchMedia","getCurrentMatch","useEffect","mediaQueryList","handleChange","event","addEventListener","removeEventListener","options","clauses","normalizedMinWidth","normalizedMaxWidth","filter","map","join","hasMinWidth","hasMaxWidth","getDefaultMatch"],"mappings":"wNAqDA,MAAMA,EAGF,CACA,CAACC,EAAW,YAAa,IACzB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,SACxB,CAACA,EAAW,YAAa,SACzB,CAACA,EAAW,YAAa,QACzB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,SACxB,CAACA,EAAW,WAAY,UAGtBC,EAA6B,IAAIC,IAAsC,CACzEF,EAAW,WACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,WACXA,EAAW,WACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,YAGTG,EACFC,GAEOC,EACHD,EACAH,GAIFK,EAA8BC,GACzBP,EAAW,GAAGO,SAGnBC,EAA8BD,GACzBP,EAAW,GAAGO,SAGZE,EAAyBF,GAClCG,EAAc,CACVC,SAAUL,EAA2BC,KAGhCK,EAAyBL,GAClCG,EAAc,CACVG,SAAUL,EAA2BD,KAGvCO,EAAsB,CACxBC,EACAX,KAEA,GAAKA,EAIL,MAAO,IAAIW,MAAYX,IAAQ,EAG7BY,EACFC,IAEA,QAAsBC,KAAlBD,aAAM,EAANA,EAAQb,OACR,OAGJ,IAAqB,IAAjBa,EAAOb,MACP,MAAO,IAAIa,EAAOF,WAGtB,IAAqB,IAAjBE,EAAOb,MACP,OAGJ,MAAMA,EAAQ,GAAGa,EAAOb,QAAQe,OAEhC,OAAKf,EAIE,IAAIa,EAAOF,YAAYX,UAJ9B,CAIsC,EA2B7BgB,EACTC,IAEA,MAAMC,EACFnB,EAAkBkB,IAClBtB,EAA0BsB,GACpBtB,EAA0BsB,GAC1B,GAEV,OAAOE,EAAgE,CACnEnB,MAAOiB,EACPG,SAAUF,EACVG,QAAStB,EACTuB,gBAAkBtB,GAAUA,GAC9B,EAGAuB,EAAqB,CACvBC,EACAC,KAEA,MAAOC,EAASC,GAAcC,GAAS,IAjCnB,EAACJ,EAAqBC,WAC1C,OAAKD,IAIiB,QAAjBK,EAAAC,WAAWC,cAAM,IAAAF,OAAA,EAAAA,EAAEG,YAIjBF,WAAWC,OAAOC,WAAWR,GAAaE,QAPtCD,CAO6C,EAyBpDQ,CAAgBT,EAAaC,KAsBjC,OAnBAS,GAAU,WACN,IAAKV,KAAiC,QAAjBK,EAAAC,WAAWC,cAAM,IAAAF,OAAA,EAAAA,EAAEG,YAEpC,YADAL,EAAWF,GAIf,MAAMU,EAAiBL,WAAWC,OAAOC,WAAWR,GAC9CY,EAAgBC,IAClBV,EAAWU,EAAMX,QAAQ,EAM7B,OAHAC,EAAWQ,EAAeT,SAC1BS,EAAeG,iBAAiB,SAAUF,GAEnC,KACHD,EAAeI,oBAAoB,SAAUH,EAAa,CAC7D,GACF,CAACX,EAAcD,IAEXE,CAAO,EAGLpB,EAAiBkC,IAC1B,MAAMjC,SAAEA,EAAQE,SAAEA,EAAQgC,QAAEA,EAAU,IAAOD,EACvCE,EAAqB1B,EAA2BT,GAChDoC,EAAqB3B,EAA2BP,GAQhDe,EAAc,IAPC,CACjBd,EAAoB,YAAagC,GACjChC,EAAoB,YAAaiC,IACnCC,QAAQ5C,KAA6BA,OACjByC,EACjBI,IAAIjC,GACJgC,QAAQ5C,KAA6BA,KACc8C,KAAK,SAGvDrB,EArFc,EAACsB,EAAsBC,KACvCA,KAIAD,EAgFiBE,GAFCP,IACAC,GAGtB,OAAOpB,EAAmBC,EAAaC,EAAa"}
|
|
1
|
+
{"version":3,"file":"use-media-query.js","sources":["../../../src/theme/utils/use-media-query.ts"],"sourcesContent":["import { useEffect, useState } from \"react\";\n\nimport { Breakpoint } from \"../tokens/breakpoint\";\nimport { isTokenFromSet } from \"./token-resolver\";\nimport { useResolvedTokenValue } from \"./use-design-token\";\n\n/** Named width breakpoint identifier used for responsive width comparisons. */\ntype BreakpointName = \"xxs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\ntype MaxWidthBreakpointName = Exclude<BreakpointName, \"xxl\">;\ntype MinWidthBreakpointTokenKey = `${BreakpointName}-min`;\ntype MaxWidthBreakpointTokenKey = `${MaxWidthBreakpointName}-max`;\ntype WidthBreakpointTokenKey =\n | MinWidthBreakpointTokenKey\n | MaxWidthBreakpointTokenKey;\ntype WidthBreakpointCSSVariableString =\n (typeof Breakpoint)[WidthBreakpointTokenKey];\n\ntype MediaQueryFeature =\n | \"aspect-ratio\"\n | \"color-index\"\n | \"color\"\n | \"device-aspect-ratio\"\n | \"device-height\"\n | \"device-width\"\n | \"grid\"\n | \"height\"\n | \"max-height\"\n | \"min-height\"\n | \"hover\"\n | \"monochrome\"\n | \"orientation\"\n | \"pointer\"\n | \"prefers-color-scheme\"\n | \"resolution\"\n | \"scan\"\n | \"width\";\n\ntype MediaQueryClauseValue = string | number | boolean;\n\n/** A single media-query feature condition. */\nexport interface MediaQueryClause {\n feature: MediaQueryFeature;\n /**\n * Value for the media-query feature.\n *\n * - A string or number emits `(feature: value)`.\n * - `true` emits a bare feature clause (e.g. `(hover)`).\n * - `false` or `undefined` omits the clause entirely.\n */\n value: MediaQueryClauseValue | undefined;\n}\n\n/** Options for `useMediaQuery`. */\nexport interface MediaQueryOptions {\n /** Lower-bound breakpoint token. Viewport must be >= this width. */\n minWidth?: WidthBreakpointCSSVariableString;\n /** Upper-bound breakpoint token. Viewport must be <= this width. */\n maxWidth?: WidthBreakpointCSSVariableString;\n /** Extra feature conditions (e.g. `hover`, `orientation`) combined with `and`. */\n clauses?: MediaQueryClause[];\n}\n\n/**\n * Default LifeSG breakpoint values for width-based tokens.\n * Extracted from src/theme/styles/default.css.\n */\nconst WIDTH_BREAKPOINT_DEFAULTS: Record<\n WidthBreakpointCSSVariableString,\n string\n> = {\n [Breakpoint[\"xxs-min\"]]: \"0\",\n [Breakpoint[\"xs-min\"]]: \"321px\",\n [Breakpoint[\"sm-min\"]]: \"376px\",\n [Breakpoint[\"md-min\"]]: \"481px\",\n [Breakpoint[\"lg-min\"]]: \"769px\",\n [Breakpoint[\"xl-min\"]]: \"1201px\",\n [Breakpoint[\"xxl-min\"]]: \"1441px\",\n [Breakpoint[\"xxs-max\"]]: \"320px\",\n [Breakpoint[\"xs-max\"]]: \"375px\",\n [Breakpoint[\"sm-max\"]]: \"480px\",\n [Breakpoint[\"md-max\"]]: \"768px\",\n [Breakpoint[\"lg-max\"]]: \"1200px\",\n [Breakpoint[\"xl-max\"]]: \"1440px\",\n};\n\nconst WIDTH_BREAKPOINT_TOKEN_SET = new Set<WidthBreakpointCSSVariableString>([\n Breakpoint[\"xxs-min\"],\n Breakpoint[\"xs-min\"],\n Breakpoint[\"sm-min\"],\n Breakpoint[\"md-min\"],\n Breakpoint[\"lg-min\"],\n Breakpoint[\"xl-min\"],\n Breakpoint[\"xxl-min\"],\n Breakpoint[\"xxs-max\"],\n Breakpoint[\"xs-max\"],\n Breakpoint[\"sm-max\"],\n Breakpoint[\"md-max\"],\n Breakpoint[\"lg-max\"],\n Breakpoint[\"xl-max\"],\n]);\n\nconst isBreakpointToken = (\n value: unknown\n): value is WidthBreakpointCSSVariableString => {\n return isTokenFromSet<WidthBreakpointCSSVariableString>(\n value,\n WIDTH_BREAKPOINT_TOKEN_SET\n );\n};\n\nconst getMinWidthBreakpointToken = (breakpoint: BreakpointName) => {\n return Breakpoint[`${breakpoint}-min`];\n};\n\nconst getMaxWidthBreakpointToken = (breakpoint: MaxWidthBreakpointName) => {\n return Breakpoint[`${breakpoint}-max`];\n};\n\n/**\n * Returns `true` when the viewport width is at or above the named breakpoint.\n *\n * @param breakpoint Named breakpoint to compare against.\n */\nexport const useMinWidthMediaQuery = (breakpoint: BreakpointName) =>\n useMediaQuery({\n minWidth: getMinWidthBreakpointToken(breakpoint),\n });\n\n/**\n * Returns `true` when the viewport width is at or below the named breakpoint.\n *\n * @param breakpoint Named breakpoint to compare against.\n */\nexport const useMaxWidthMediaQuery = (breakpoint: MaxWidthBreakpointName) =>\n useMediaQuery({\n maxWidth: getMaxWidthBreakpointToken(breakpoint),\n });\n\nconst getMediaQueryClause = (\n feature: \"min-width\" | \"max-width\",\n value: string | undefined\n) => {\n if (!value) {\n return undefined;\n }\n\n return `(${feature}: ${value})`;\n};\n\nconst getCustomMediaQueryClause = (\n clause: MediaQueryClause | null | undefined\n) => {\n if (clause?.value === undefined) {\n return undefined;\n }\n\n if (clause.value === true) {\n return `(${clause.feature})`;\n }\n\n if (clause.value === false) {\n return undefined;\n }\n\n const value = `${clause.value}`.trim();\n\n if (!value) {\n return undefined;\n }\n\n return `(${clause.feature}: ${value})`;\n};\n\nconst getDefaultMatch = (hasMinWidth: boolean, hasMaxWidth: boolean) => {\n if (hasMaxWidth) {\n return false;\n }\n\n if (hasMinWidth) {\n return true;\n }\n\n return false;\n};\n\nconst getCurrentMatch = (queryString: string, defaultMatch: boolean) => {\n if (!queryString) {\n return defaultMatch;\n }\n\n if (!globalThis.window?.matchMedia) {\n return defaultMatch;\n }\n\n return globalThis.window.matchMedia(queryString).matches;\n};\n\n/**\n * Resolves a width breakpoint CSS variable token to its computed pixel string.\n *\n * @returns The resolved pixel value, falling back to default LifeSG breakpoint\n * values when the theme element is not yet mounted, or `\"\"` for unrecognised\n * tokens.\n */\nexport const useResolvedBreakpointToken = (\n breakpointToken: WidthBreakpointCSSVariableString | undefined\n): string => {\n const effectiveFallback =\n isBreakpointToken(breakpointToken) &&\n WIDTH_BREAKPOINT_DEFAULTS[breakpointToken]\n ? WIDTH_BREAKPOINT_DEFAULTS[breakpointToken]\n : \"\";\n\n return useResolvedTokenValue<WidthBreakpointCSSVariableString, string>({\n value: breakpointToken,\n fallback: effectiveFallback,\n isToken: isBreakpointToken,\n normalizeCustom: (value) => value,\n });\n};\n\nconst useMatchMediaQuery = (\n queryString: string,\n defaultMatch: boolean\n): boolean => {\n const [matches, setMatches] = useState(() =>\n getCurrentMatch(queryString, defaultMatch)\n );\n\n useEffect(() => {\n if (!queryString || !globalThis.window?.matchMedia) {\n setMatches(defaultMatch);\n return;\n }\n\n const mediaQueryList = globalThis.window.matchMedia(queryString);\n const handleChange = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n setMatches(mediaQueryList.matches);\n mediaQueryList.addEventListener(\"change\", handleChange);\n\n return () => {\n mediaQueryList.removeEventListener(\"change\", handleChange);\n };\n }, [defaultMatch, queryString]);\n\n return matches;\n};\n\n/**\n * Reactive boolean hook that evaluates a media query built from width\n * breakpoint tokens and optional custom feature clauses.\n *\n * @returns `true` when the query matches. When `window.matchMedia` is\n * unavailable (SSR), defaults to `true` for min-width-only queries and\n * `false` for max-width-only.\n */\nexport const useMediaQuery = (options: MediaQueryOptions): boolean => {\n const { minWidth, maxWidth, clauses = [] } = options;\n const normalizedMinWidth = useResolvedBreakpointToken(minWidth);\n const normalizedMaxWidth = useResolvedBreakpointToken(maxWidth);\n const widthClauses = [\n getMediaQueryClause(\"min-width\", normalizedMinWidth),\n getMediaQueryClause(\"max-width\", normalizedMaxWidth),\n ].filter((value): value is string => !!value);\n const customClauses = clauses\n .map(getCustomMediaQueryClause)\n .filter((value): value is string => !!value);\n const queryString = [...widthClauses, ...customClauses].join(\" and \");\n const hasMinWidth = !!normalizedMinWidth;\n const hasMaxWidth = !!normalizedMaxWidth;\n const defaultMatch = getDefaultMatch(hasMinWidth, hasMaxWidth);\n\n return useMatchMediaQuery(queryString, defaultMatch);\n};\n"],"names":["WIDTH_BREAKPOINT_DEFAULTS","Breakpoint","WIDTH_BREAKPOINT_TOKEN_SET","Set","isBreakpointToken","value","isTokenFromSet","getMinWidthBreakpointToken","breakpoint","getMaxWidthBreakpointToken","useMinWidthMediaQuery","useMediaQuery","minWidth","useMaxWidthMediaQuery","maxWidth","getMediaQueryClause","feature","getCustomMediaQueryClause","clause","undefined","trim","useResolvedBreakpointToken","breakpointToken","effectiveFallback","useResolvedTokenValue","fallback","isToken","normalizeCustom","useMatchMediaQuery","queryString","defaultMatch","matches","setMatches","useState","_a","globalThis","window","matchMedia","getCurrentMatch","useEffect","mediaQueryList","handleChange","event","addEventListener","removeEventListener","options","clauses","normalizedMinWidth","normalizedMaxWidth","filter","map","join","hasMinWidth","hasMaxWidth","getDefaultMatch"],"mappings":"wNAkEA,MAAMA,EAGF,CACA,CAACC,EAAW,YAAa,IACzB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,SACxB,CAACA,EAAW,YAAa,SACzB,CAACA,EAAW,YAAa,QACzB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,QACxB,CAACA,EAAW,WAAY,SACxB,CAACA,EAAW,WAAY,UAGtBC,EAA6B,IAAIC,IAAsC,CACzEF,EAAW,WACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,WACXA,EAAW,WACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,UACXA,EAAW,YAGTG,EACFC,GAEOC,EACHD,EACAH,GAIFK,EAA8BC,GACzBP,EAAW,GAAGO,SAGnBC,EAA8BD,GACzBP,EAAW,GAAGO,SAQZE,EAAyBF,GAClCG,EAAc,CACVC,SAAUL,EAA2BC,KAQhCK,EAAyBL,GAClCG,EAAc,CACVG,SAAUL,EAA2BD,KAGvCO,EAAsB,CACxBC,EACAX,KAEA,GAAKA,EAIL,MAAO,IAAIW,MAAYX,IAAQ,EAG7BY,EACFC,IAEA,QAAsBC,KAAlBD,aAAM,EAANA,EAAQb,OACR,OAGJ,IAAqB,IAAjBa,EAAOb,MACP,MAAO,IAAIa,EAAOF,WAGtB,IAAqB,IAAjBE,EAAOb,MACP,OAGJ,MAAMA,EAAQ,GAAGa,EAAOb,QAAQe,OAEhC,OAAKf,EAIE,IAAIa,EAAOF,YAAYX,UAJ9B,CAIsC,EAkC7BgB,EACTC,IAEA,MAAMC,EACFnB,EAAkBkB,IAClBtB,EAA0BsB,GACpBtB,EAA0BsB,GAC1B,GAEV,OAAOE,EAAgE,CACnEnB,MAAOiB,EACPG,SAAUF,EACVG,QAAStB,EACTuB,gBAAkBtB,GAAUA,GAC9B,EAGAuB,EAAqB,CACvBC,EACAC,KAEA,MAAOC,EAASC,GAAcC,GAAS,IAxCnB,EAACJ,EAAqBC,WAC1C,OAAKD,IAIiB,QAAjBK,EAAAC,WAAWC,cAAM,IAAAF,OAAA,EAAAA,EAAEG,YAIjBF,WAAWC,OAAOC,WAAWR,GAAaE,QAPtCD,CAO6C,EAgCpDQ,CAAgBT,EAAaC,KAsBjC,OAnBAS,GAAU,WACN,IAAKV,KAAiC,QAAjBK,EAAAC,WAAWC,cAAM,IAAAF,OAAA,EAAAA,EAAEG,YAEpC,YADAL,EAAWF,GAIf,MAAMU,EAAiBL,WAAWC,OAAOC,WAAWR,GAC9CY,EAAgBC,IAClBV,EAAWU,EAAMX,QAAQ,EAM7B,OAHAC,EAAWQ,EAAeT,SAC1BS,EAAeG,iBAAiB,SAAUF,GAEnC,KACHD,EAAeI,oBAAoB,SAAUH,EAAa,CAC7D,GACF,CAACX,EAAcD,IAEXE,CAAO,EAWLpB,EAAiBkC,IAC1B,MAAMjC,SAAEA,EAAQE,SAAEA,EAAQgC,QAAEA,EAAU,IAAOD,EACvCE,EAAqB1B,EAA2BT,GAChDoC,EAAqB3B,EAA2BP,GAQhDe,EAAc,IAPC,CACjBd,EAAoB,YAAagC,GACjChC,EAAoB,YAAaiC,IACnCC,QAAQ5C,KAA6BA,OACjByC,EACjBI,IAAIjC,GACJgC,QAAQ5C,KAA6BA,KACc8C,KAAK,SAGvDrB,EApGc,EAACsB,EAAsBC,KACvCA,KAIAD,EA+FiBE,GAFCP,IACAC,GAGtB,OAAOpB,EAAmBC,EAAaC,EAAa"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e}from"../../_virtual/_tslib.js";import{jsxs as t,jsx as r}from"react/jsx-runtime";import i from"clsx";import{useState as o,useRef as a,useMemo as l,useCallback as n,useEffect as s}from"react";import{FormErrorMessage as d}from"../../form/form-label.js";import{VisuallyHidden as m,concatIds as c}from"../../shared/accessibility/index.js";import"../../theme/theme-provider/index.js";import"../../theme/theme-provider/context.js";import"../../theme/tokens/border.js";import"../../theme/tokens/colour.js";import"../../theme/tokens/font.js";import"../../theme/tokens/media-query.js";import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import{useId as p}from"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import"../../theme/utils/use-media-query.js";import"../../shared/dropdown-list/dropdown-label.styles_mloii0.css";import{DropdownList as u}from"../../shared/dropdown-list/dropdown-list.js";import{DropdownListState as h}from"../../shared/dropdown-list/dropdown-list-state.js";import"../../shared/dropdown-list/expandable-element.js";import"@lifesg/react-icons/caret-right";import"@lifesg/react-icons/exclamation-circle-fill";import"@lifesg/react-icons/minus-square-fill";import"@lifesg/react-icons/square";import"@lifesg/react-icons/square-tick-fill";import"@lifesg/react-icons/tick";import"react-virtuoso";import"../../markup/markup.js";import"../../shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css";import{ElementWithDropdown as f}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import{InputWrapper as v,BasicInput as b,ClearButton as g}from"../../shared/input-wrapper/input-wrapper.js";import"../../shared/dropdown-list/dropdown-list.styles_konwm.css";import"../../shared/dropdown-list/dropdown-search.js";import"../../shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css";import"immer";import"../../external/lodash/_getTag.js";import"../../external/lodash/isArguments.js";import"../../external/lodash/_baseGetTag.js";import"../../external/lodash/isBuffer.js";import"../../external/lodash/isTypedArray.js";import"../../external/lodash/_Stack.js";import"../../external/lodash/_SetCache.js";import"../../external/lodash/_equalByTag.js";import"../../shared/dropdown-list/virtuoso-components.js";import{clearButtonContainer as j}from"../../shared/input-wrapper/input-wrapper.styles.js";import{RangeInputInnerContainer as x}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimeHelper as y}from"../../util/time-helper.js";import{wrapper as w,selectorInput as I}from"../common.styles.js";import{timeFieldContainer as
|
|
1
|
+
import{__rest as e}from"../../_virtual/_tslib.js";import{jsxs as t,jsx as r}from"react/jsx-runtime";import i from"clsx";import{useState as o,useRef as a,useMemo as l,useCallback as n,useEffect as s}from"react";import{FormErrorMessage as d}from"../../form/form-label.js";import{VisuallyHidden as m,concatIds as c}from"../../shared/accessibility/index.js";import"../../theme/theme-provider/index.js";import"../../theme/theme-provider/context.js";import"../../theme/tokens/border.js";import"../../theme/tokens/colour.js";import"../../theme/tokens/font.js";import"../../theme/tokens/media-query.js";import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import{useId as p}from"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import"../../theme/utils/use-media-query.js";import"../../shared/dropdown-list/dropdown-label.styles_mloii0.css";import{DropdownList as u}from"../../shared/dropdown-list/dropdown-list.js";import{DropdownListState as h}from"../../shared/dropdown-list/dropdown-list-state.js";import"../../shared/dropdown-list/expandable-element.js";import"@lifesg/react-icons/caret-right";import"@lifesg/react-icons/exclamation-circle-fill";import"@lifesg/react-icons/minus-square-fill";import"@lifesg/react-icons/square";import"@lifesg/react-icons/square-tick-fill";import"@lifesg/react-icons/tick";import"react-virtuoso";import"../../markup/markup.js";import"../../shared/component-loading-spinner/component-loading-spinner.styles_15eq02i.css";import{ElementWithDropdown as f}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import{InputWrapper as v,BasicInput as b,ClearButton as g}from"../../shared/input-wrapper/input-wrapper.js";import"../../shared/dropdown-list/dropdown-list.styles_konwm.css";import"../../shared/dropdown-list/dropdown-search.js";import"../../shared/dropdown-list/nested-dropdown-list.styles_wdhxoe.css";import"immer";import"../../external/lodash/_getTag.js";import"../../external/lodash/isArguments.js";import"../../external/lodash/_baseGetTag.js";import"../../external/lodash/isBuffer.js";import"../../external/lodash/isTypedArray.js";import"../../external/lodash/_Stack.js";import"../../external/lodash/_SetCache.js";import"../../external/lodash/_equalByTag.js";import"../../shared/dropdown-list/virtuoso-components.js";import{clearButtonContainer as j}from"../../shared/input-wrapper/input-wrapper.styles.js";import{RangeInputInnerContainer as x}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimeHelper as y}from"../../util/time-helper.js";import{wrapper as w,selectorInput as I,selectorInputDisabled as _}from"../common.styles.js";import{timeFieldContainer as T}from"./combobox-picker.styles.js";const k=k=>{var{id:C,disabled:S=!1,error:A,value:O,format:E="12hr",readOnly:N,onChange:F,onFocus:B,onBlur:q,alignment:H="left",dropdownZIndex:$,startLimit:L,endLimit:G,initialScrollStartTime:P,initialScrollEndTime:D,interval:M=15,dropdownRootNode:Z,"aria-labelledby":K,"aria-describedby":R,"aria-invalid":W}=k,z=e(k,["id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","startLimit","endLimit","initialScrollStartTime","initialScrollEndTime","interval","dropdownRootNode","aria-labelledby","aria-describedby","aria-invalid"]);const J=p(),[Q,U]=o(null),[V,X]=o(!1),[Y,ee]=o(""),[te,re]=o(""),[ie,oe]=o(""),[ae,le]=o(""),[ne,se]=o(""),de=a(null),me=a(null),ce=a(null),pe=`${J}-listbox`,ue=`${J}-start-label`,he=`${J}-end-label`,fe=`${J}-error-message`,ve=l((()=>y.generateTimings(M,E,L,G)),[M,E,L,G]),be=l((()=>{if(""===ae)return ve;const e=y.findClosestFlooredTime(ae,ve);return e?ve.slice(ve.indexOf(e)):[]}),[ve,ae]),ge=n((e=>y.parseInput(e,E)),[E]),je=l((()=>{var e;return null!==(e=ge(P))&&void 0!==e?e:""}),[P,ge]),xe=l((()=>{var e;return null!==(e=ge(D))&&void 0!==e?e:""}),[D,ge]);s((()=>{var e,t;if(O){const r=null!==(e=ge(O.start))&&void 0!==e?e:"",i=null!==(t=ge(O.end))&&void 0!==t?t:"";re(r),oe(i),le(r),se(i)}}),[O,ge]),s((()=>{if(A)return void X(!1);const e=ge(te),t=ge(ie);if(void 0===e)ee("Invalid start time");else if(void 0===t)ee("Invalid end time");else{if(!(""!==e&&""!==t&&y.to24Hour(t)<y.to24Hour(e)))return ee(""),void(document.activeElement!==me.current&&document.activeElement!==ce.current||X(!0));ee("End time must be after start time")}X(!1)}),[te,ie,ge,A]);const ye=()=>"start"===Q?"Selecting for: Start time":"end"===Q?"Selecting for: End time":void 0,we=e=>c(K,"start"===e?ue:he),Ie=()=>c(R,!A&&Y?fe:void 0),_e=e=>{S||N||(Q||V||null==B||B(),U(e),X(!0))},Te=e=>{var t;S||N||(U(e),X(!0),null===(t=("start"===e?me:ce).current)||void 0===t||t.select())};function ke(e){var t;switch(e.code){case"Enter":"start"===Q?Ce(te):"end"===Q&&(V&&Se(ie),null===(t=ce.current)||void 0===t||t.blur());break;case"Tab":Ae(te,ie,{})}}const Ce=e=>{Ae(e,ie,{goToNextInput:!0})},Se=e=>{Ae(te,e,{triggerOnBlur:!0})},Ae=(e,t,{goToNextInput:r,triggerOnBlur:i})=>{var o,a,l;const n=null!==(o=ge(e))&&void 0!==o?o:ae,s=null!==(a=ge(t))&&void 0!==a?a:ne;re(n),oe(s);n===ae&&s===ne||null==F||F({start:n,end:s}),r&&void 0!==ge(e)&&(U("end"),null===(l=ce.current)||void 0===l||l.select()),i&&(U(null),X(!1),null==q||q()),le(n),se(s)},Oe=e=>{e.stopPropagation(),re(""),oe(""),le(""),se("");null==F||F({start:"",end:""}),U(null),X(!1)},Ee=e=>{var t,r;const i=e.relatedTarget,o=(null===(t=null==i?void 0:i.matches)||void 0===t?void 0:t.call(i,"[data-floating-ui-focusable]"))||(null===(r=null==i?void 0:i.matches)||void 0===r?void 0:r.call(i,"[data-floating-ui-focus-guard]")),a=de.current&&de.current.contains(i);Q&&!V&&!a&&!o&&Ae(te,ie,{triggerOnBlur:!0})},Ne=()=>{if(!N&&!S&&((null==te?void 0:te.length)>0||(null==ie?void 0:ie.length)>0))return r("div",{className:j,children:r(g,{onClick:Oe,type:"button","aria-label":"Clear"})})};return t("div",Object.assign({id:C},z,{className:i(w,z.className),children:[r(h,{children:r(f,{enabled:!N&&!S,isOpen:V,renderElement:()=>t(v,{ref:de,disabled:S,error:A||!!Y,readOnly:N,onBlur:Ee,role:"group","data-testid":"timepicker-container",className:T,children:[r(m,{id:ue,children:"Start time"}),r(m,{id:he,children:"End time"}),t(x,{error:A||!!Y,currentActive:null===Q?"none":Q,children:[r(b,{ref:me,onFocus:()=>_e("start"),placeholder:"start"===Q?"hh:mm":"From",onChange:e=>re(e.target.value),value:te,readOnly:N||S,"data-testid":z["data-testid"]?`${z["data-testid"]}-timepicker-selector-start`:"timepicker-selector-start",onClick:()=>Te("start"),onKeyDown:ke,autoComplete:"off",type:"text",role:"combobox","aria-labelledby":we("start"),"aria-describedby":Ie(),"aria-expanded":V&&"start"===Q,"aria-controls":pe,"aria-autocomplete":"list","aria-invalid":A||W||!!Y,"aria-disabled":S,"aria-readonly":N,className:i(I,S&&_)}),r(b,{ref:ce,onFocus:()=>_e("end"),placeholder:"end"===Q?"hh:mm":"To",onChange:e=>oe(e.target.value),value:ie,readOnly:N||S,"data-testid":z["data-testid"]?`${z["data-testid"]}-timepicker-selector-end`:"timepicker-selector-end",onClick:()=>Te("end"),onKeyDown:ke,autoComplete:"off",type:"text",role:"combobox","aria-labelledby":we("end"),"aria-describedby":Ie(),"aria-expanded":V&&"end"===Q,"aria-controls":pe,"aria-autocomplete":"list","aria-invalid":A||W||!!Y||void 0,"aria-disabled":S||void 0,"aria-readonly":N||void 0,className:i(I,S&&_)})]}),Ne()]}),renderDropdown:()=>{if("start"===Q){const e=ge(te)||je;return r(u,{listItems:ve,onSelectItem:Ce,selectedItems:[te],topScrollItem:y.findClosestFlooredTime(e,ve),listboxId:pe,ariaLabel:ye(),disableItemFocus:!0,matchElementWidth:!0})}{const e=ge(ie)||xe;return r(u,{listItems:be,onSelectItem:Se,selectedItems:[ie],topScrollItem:y.findClosestFlooredTime(e,be),listboxId:pe,ariaLabel:ye(),disableItemFocus:!0,matchElementWidth:!0})}},onClose:e=>{"outside-press"===e?(U(null),X(!1),null==q||q()):Ae(te,ie,{triggerOnBlur:!0})},onDismiss:()=>{var e;null===(e=("start"===Q?me:ce).current)||void 0===e||e.focus(),X(!1)},offset:8,alignment:H,fitAvailableHeight:!0,customZIndex:$,rootNode:Z})}),!A&&Y&&r(d,{id:fe,tabIndex:0,"data-testid":C?`${C}-error-message`:"error-message",children:Y})]}))};export{k as ComboboxPicker};
|
|
2
2
|
//# sourceMappingURL=combobox-picker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox-picker.js","sources":["../../../src/time-range-picker/combobox-picker/combobox-picker.tsx"],"sourcesContent":["import type { OpenChangeReason } from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { FormErrorMessage } from \"../../form/form-label\";\nimport { concatIds, VisuallyHidden } from \"../../shared/accessibility\";\nimport { DropdownListState } from \"../../shared/dropdown-list\";\nimport { DropdownList } from \"../../shared/dropdown-list/dropdown-list\";\nimport { ElementWithDropdown } from \"../../shared/dropdown-wrapper\";\nimport {\n BasicInput,\n ClearButton,\n InputWrapper,\n} from \"../../shared/input-wrapper\";\nimport * as inputWrapperStyles from \"../../shared/input-wrapper/input-wrapper.styles\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport * as commonStyles from \"../common.styles\";\nimport type { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\nimport * as styles from \"./combobox-picker.styles\";\n\ntype TimeRangeInputType = \"start\" | \"end\";\ninterface TimeChangeOptions {\n goToNextInput?: boolean | undefined;\n triggerOnBlur?: boolean | undefined;\n}\n\nexport const ComboboxPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"12hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n startLimit,\n endLimit,\n initialScrollStartTime,\n initialScrollEndTime,\n interval = 15,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const internalId = useId();\n const [activeTimeSelector, setActiveTimeSelector] =\n useState<TimeRangeInputType | null>(null);\n const [dropdownOpen, setDropdownOpen] = useState<boolean>(false);\n const [validationError, setValidationError] = useState<string>(\"\");\n\n const [startTimeVal, setStartTimeVal] = useState<string>(\"\");\n const [endTimeVal, setEndTimeVal] = useState<string>(\"\");\n const [initialStartTimeVal, setInitialStartTimeVal] = useState<string>(\"\");\n const [initialEndTimeVal, setInitialEndTimeVal] = useState<string>(\"\");\n\n const nodeRef = useRef<HTMLDivElement>(null);\n const startInputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n\n const listboxId = `${internalId}-listbox`;\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n const errorId = `${internalId}-error-message`;\n\n const startOptions = useMemo(\n () =>\n TimeHelper.generateTimings(interval, format, startLimit, endLimit),\n [interval, format, startLimit, endLimit]\n );\n const endOptions = useMemo(() => {\n if (initialStartTimeVal === \"\") return startOptions;\n\n const flooredStartVal = TimeHelper.findClosestFlooredTime(\n initialStartTimeVal,\n startOptions\n );\n return flooredStartVal\n ? startOptions.slice(startOptions.indexOf(flooredStartVal))\n : [];\n }, [startOptions, initialStartTimeVal]);\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n const parseInput = useCallback(\n (input: string | undefined): string | undefined => {\n return TimeHelper.parseInput(input, format);\n },\n [format]\n );\n\n const parsedInitialStartScrollTime = useMemo(\n () => parseInput(initialScrollStartTime) ?? \"\",\n [initialScrollStartTime, parseInput]\n );\n\n const parsedInitialEndScrollTime = useMemo(\n () => parseInput(initialScrollEndTime) ?? \"\",\n [initialScrollEndTime, parseInput]\n );\n\n useEffect(() => {\n if (value) {\n const start = parseInput(value.start) ?? \"\";\n const end = parseInput(value.end) ?? \"\";\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n }\n }, [value, parseInput]);\n\n // Validation for keyboard input\n useEffect(() => {\n if (error) {\n setDropdownOpen(false);\n return;\n }\n\n const start = parseInput(startTimeVal);\n const end = parseInput(endTimeVal);\n\n if (start === undefined) {\n setValidationError(\"Invalid start time\");\n } else if (end === undefined) {\n setValidationError(\"Invalid end time\");\n } else if (\n start !== \"\" &&\n end !== \"\" &&\n TimeHelper.to24Hour(end) < TimeHelper.to24Hour(start)\n ) {\n setValidationError(\"End time must be after start time\");\n } else {\n setValidationError(\"\");\n // Re-open dropdown if error was corrected\n if (\n document.activeElement === startInputRef.current ||\n document.activeElement === endInputRef.current\n ) {\n setDropdownOpen(true);\n }\n return;\n }\n\n // Hide dropdown so error message is visible\n setDropdownOpen(false);\n }, [startTimeVal, endTimeVal, parseInput, error]);\n\n // =============================================================================\n // HELPERS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (activeTimeSelector === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (activeTimeSelector === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: TimeRangeInputType) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(\n ariaDescribedBy,\n !error && validationError ? errorId : undefined\n );\n };\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleInputFocus = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n // Only run onFocus if not already focused\n if (!activeTimeSelector && !dropdownOpen) onFocus?.();\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n };\n\n const handleInputClick = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n (selector === \"start\" ? startInputRef : endInputRef).current?.select();\n };\n\n function handleKeyDownEvent(event: React.KeyboardEvent<HTMLInputElement>) {\n switch (event.code) {\n case \"Enter\":\n if (activeTimeSelector === \"start\") {\n handleStartTime(startTimeVal);\n } else if (activeTimeSelector === \"end\") {\n // Let handleBlur call handleTimeChange instead\n if (dropdownOpen) handleEndTime(endTimeVal);\n endInputRef.current?.blur();\n }\n break;\n case \"Tab\":\n handleTimeChange(startTimeVal, endTimeVal, {});\n break;\n default:\n break;\n }\n }\n\n const handleStartTime = (input: string) => {\n handleTimeChange(input, endTimeVal, { goToNextInput: true });\n };\n\n const handleEndTime = (input: string) => {\n handleTimeChange(startTimeVal, input, { triggerOnBlur: true });\n };\n\n const handleTimeChange = (\n startInput: string,\n endInput: string,\n {\n goToNextInput, // Used by handleStart to move to end input automatically\n triggerOnBlur, // Used by handleEnd/handleClear to trigger onBlur\n }: TimeChangeOptions\n ) => {\n const start = parseInput(startInput) ?? initialStartTimeVal;\n const end = parseInput(endInput) ?? initialEndTimeVal;\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n\n const timeValue: TimeRangePickerValue = { start, end };\n\n // Trigger onChange if values have changed\n if (start !== initialStartTimeVal || end !== initialEndTimeVal) {\n onChange?.(timeValue);\n }\n\n // Go to end input only if start is a valid time\n if (goToNextInput && parseInput(startInput) !== undefined) {\n setActiveTimeSelector(\"end\");\n endInputRef.current?.select();\n }\n\n if (triggerOnBlur) {\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n }\n\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n };\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation();\n setStartTimeVal(\"\");\n setEndTimeVal(\"\");\n setInitialStartTimeVal(\"\");\n setInitialEndTimeVal(\"\");\n\n const timeValue: TimeRangePickerValue = {\n start: \"\",\n end: \"\",\n };\n\n onChange?.(timeValue);\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n };\n\n const handleDismiss = () => {\n (activeTimeSelector === \"start\"\n ? startInputRef\n : endInputRef\n ).current?.focus();\n setDropdownOpen(false);\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLDivElement, Element>) => {\n const target = event.relatedTarget as HTMLElement;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode =\n nodeRef.current && nodeRef.current.contains(target);\n\n // Condition when the calendar is closed and focus moved outside the component\n const shouldBlurWhenClosed =\n activeTimeSelector &&\n !dropdownOpen &&\n !isInsideNode &&\n !isFloatingElement;\n\n if (shouldBlurWhenClosed) {\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // NOTE: Dropdown dismissal (esc) does not trigger onClose\n const handleClose = (reason: OpenChangeReason | undefined) => {\n if (reason === \"outside-press\") {\n // No handleTimeChange to avoid duplicate call from handleBlur\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n } else {\n // Dropdown closed via exiting component (eg. tab)\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderClearButton = () => {\n if (\n !readOnly &&\n !disabled &&\n (startTimeVal?.length > 0 || endTimeVal?.length > 0)\n ) {\n return (\n <div className={inputWrapperStyles.clearButtonContainer}>\n <ClearButton\n onClick={handleClear}\n type=\"button\"\n aria-label=\"Clear\"\n />\n </div>\n );\n }\n };\n\n const renderDropdown = () => {\n if (activeTimeSelector === \"start\") {\n // Prioritise start time value. If non existent, use initial scroll time\n // If both are non existent, DropdownList will default to first option\n const startScrollTime =\n parseInput(startTimeVal) || parsedInitialStartScrollTime;\n\n return (\n <DropdownList\n listItems={startOptions}\n onSelectItem={handleStartTime}\n selectedItems={[startTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n startScrollTime,\n startOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n } else {\n const endScrollTime =\n parseInput(endTimeVal) || parsedInitialEndScrollTime;\n\n return (\n <DropdownList\n listItems={endOptions}\n onSelectItem={handleEndTime}\n selectedItems={[endTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n endScrollTime,\n endOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n }\n };\n\n const renderElement = () => (\n <InputWrapper\n ref={nodeRef}\n disabled={disabled}\n error={error || !!validationError}\n readOnly={readOnly}\n onBlur={handleBlur}\n role=\"group\"\n data-testid=\"timepicker-container\"\n className={styles.timeFieldContainer}\n >\n <VisuallyHidden id={startLabelId}>Start time</VisuallyHidden>\n <VisuallyHidden id={endLabelId}>End time</VisuallyHidden>\n\n <RangeInputInnerContainer\n error={error || !!validationError}\n currentActive={\n activeTimeSelector === null ? \"none\" : activeTimeSelector\n }\n >\n {/* From */}\n <BasicInput\n ref={startInputRef}\n onFocus={() => handleInputFocus(\"start\")}\n placeholder={\n activeTimeSelector === \"start\" ? \"hh:mm\" : \"From\"\n }\n onChange={(e) => setStartTimeVal(e.target.value)}\n value={startTimeVal}\n readOnly={readOnly}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-start`\n : \"timepicker-selector-start\"\n }\n onClick={() => handleInputClick(\"start\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={\n dropdownOpen && activeTimeSelector === \"start\"\n }\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={error || ariaInvalid || !!validationError}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n className={commonStyles.selectorInput}\n />\n {/* To */}\n <BasicInput\n ref={endInputRef}\n onFocus={() => handleInputFocus(\"end\")}\n placeholder={activeTimeSelector === \"end\" ? \"hh:mm\" : \"To\"}\n onChange={(e) => setEndTimeVal(e.target.value)}\n value={endTimeVal}\n readOnly={readOnly}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-end`\n : \"timepicker-selector-end\"\n }\n onClick={() => handleInputClick(\"end\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={dropdownOpen && activeTimeSelector === \"end\"}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={\n error || ariaInvalid || !!validationError || undefined\n }\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n className={commonStyles.selectorInput}\n />\n </RangeInputInnerContainer>\n {renderClearButton()}\n </InputWrapper>\n );\n\n const renderError = () =>\n // Only display internal error message if user does not provide one\n !error &&\n validationError && (\n <FormErrorMessage\n id={errorId}\n tabIndex={0}\n data-testid={id ? `${id}-error-message` : \"error-message\"}\n >\n {validationError}\n </FormErrorMessage>\n );\n\n return (\n <div\n id={id}\n {...otherProps}\n className={clsx(commonStyles.wrapper, otherProps.className)}\n >\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={dropdownOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={handleClose}\n onDismiss={handleDismiss}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n {renderError()}\n </div>\n );\n};\n"],"names":["ComboboxPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","startLimit","endLimit","initialScrollStartTime","initialScrollEndTime","interval","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","internalId","useId","activeTimeSelector","setActiveTimeSelector","useState","dropdownOpen","setDropdownOpen","validationError","setValidationError","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","initialStartTimeVal","setInitialStartTimeVal","initialEndTimeVal","setInitialEndTimeVal","nodeRef","useRef","startInputRef","endInputRef","listboxId","startLabelId","endLabelId","errorId","startOptions","useMemo","TimeHelper","generateTimings","endOptions","flooredStartVal","findClosestFlooredTime","slice","indexOf","parseInput","useCallback","input","parsedInitialStartScrollTime","parsedInitialEndScrollTime","useEffect","start","end","_b","undefined","to24Hour","document","activeElement","current","getDropdownAriaLabel","getInputLabelledBy","type","concatIds","getInputDescribedBy","handleInputFocus","selector","handleInputClick","select","handleKeyDownEvent","event","code","handleStartTime","handleEndTime","blur","handleTimeChange","goToNextInput","triggerOnBlur","startInput","endInput","_c","handleClear","stopPropagation","handleBlur","target","relatedTarget","isFloatingElement","matches","call","isInsideNode","contains","renderClearButton","length","_jsx","className","inputWrapperStyles.clearButtonContainer","children","ClearButton","onClick","_jsxs","Object","assign","clsx","commonStyles.wrapper","DropdownListState","ElementWithDropdown","enabled","isOpen","renderElement","InputWrapper","ref","role","styles.timeFieldContainer","VisuallyHidden","RangeInputInnerContainer","currentActive","BasicInput","placeholder","e","onKeyDown","autoComplete","commonStyles.selectorInput","renderDropdown","startScrollTime","DropdownList","listItems","onSelectItem","selectedItems","topScrollItem","ariaLabel","disableItemFocus","matchElementWidth","endScrollTime","onClose","reason","onDismiss","focus","offset","fitAvailableHeight","customZIndex","rootNode","FormErrorMessage","tabIndex"],"mappings":"4tFA4BO,MAAMA,EAAkBC,QAAAC,GAC3BA,EAAEC,SACFA,GAAW,EAAKC,MAChBA,EAAKC,MACLA,EAAKC,OACLA,EAAS,OAAMC,SACfA,EAAQC,SACRA,EAAQC,QACRA,EAAOC,OACPA,EAAMC,UACNA,EAAY,OAAMC,eAClBA,EAAcC,WACdA,EAAUC,SACVA,EAAQC,uBACRA,EAAsBC,qBACtBA,EAAoBC,SACpBA,EAAW,GAAEC,iBACbA,EACA,kBAAmBC,EACnB,mBAAoBC,EACpB,eAAgBC,GAAWpB,EACxBqB,EAAUC,EAAAtB,EArBc,CAAA,KAAA,WAAA,QAAA,QAAA,SAAA,WAAA,WAAA,UAAA,SAAA,YAAA,iBAAA,aAAA,WAAA,yBAAA,uBAAA,WAAA,mBAAA,kBAAA,mBAAA,iBA0B3B,MAAMuB,EAAaC,KACZC,EAAoBC,GACvBC,EAAoC,OACjCC,EAAcC,GAAmBF,GAAkB,IACnDG,EAAiBC,GAAsBJ,EAAiB,KAExDK,GAAcC,IAAmBN,EAAiB,KAClDO,GAAYC,IAAiBR,EAAiB,KAC9CS,GAAqBC,IAA0BV,EAAiB,KAChEW,GAAmBC,IAAwBZ,EAAiB,IAE7Da,GAAUC,EAAuB,MACjCC,GAAgBD,EAAyB,MACzCE,GAAcF,EAAyB,MAEvCG,GAAY,GAAGrB,YACfsB,GAAe,GAAGtB,gBAClBuB,GAAa,GAAGvB,cAChBwB,GAAU,GAAGxB,kBAEbyB,GAAeC,GACjB,IACIC,EAAWC,gBAAgBnC,EAAUX,EAAQO,EAAYC,IAC7D,CAACG,EAAUX,EAAQO,EAAYC,IAE7BuC,GAAaH,GAAQ,KACvB,GAA4B,KAAxBb,GAA4B,OAAOY,GAEvC,MAAMK,EAAkBH,EAAWI,uBAC/BlB,GACAY,IAEJ,OAAOK,EACDL,GAAaO,MAAMP,GAAaQ,QAAQH,IACxC,EAAE,GACT,CAACL,GAAcZ,KAKZqB,GAAaC,GACdC,GACUT,EAAWO,WAAWE,EAAOtD,IAExC,CAACA,IAGCuD,GAA+BX,GACjC,KAAK,IAAAjD,EAAC,OAAkC,QAAlCA,EAAAyD,GAAW3C,UAAuB,IAAAd,EAAAA,EAAI,EAAE,GAC9C,CAACc,EAAwB2C,KAGvBI,GAA6BZ,GAC/B,KAAK,IAAAjD,EAAC,OAAgC,QAAhCA,EAAAyD,GAAW1C,UAAqB,IAAAf,EAAAA,EAAI,EAAE,GAC5C,CAACe,EAAsB0C,KAG3BK,GAAU,aACN,GAAI1D,EAAO,CACP,MAAM2D,EAA+B,QAAvB/D,EAAAyD,GAAWrD,EAAM2D,cAAM,IAAA/D,EAAAA,EAAI,GACnCgE,EAA2B,QAArBC,EAAAR,GAAWrD,EAAM4D,YAAI,IAAAC,EAAAA,EAAI,GAErChC,GAAgB8B,GAChB5B,GAAc6B,GACd3B,GAAuB0B,GACvBxB,GAAqByB,EACzB,IACD,CAAC5D,EAAOqD,KAGXK,GAAU,KACN,GAAI3D,EAEA,YADA0B,GAAgB,GAIpB,MAAMkC,EAAQN,GAAWzB,IACnBgC,EAAMP,GAAWvB,IAEvB,QAAcgC,IAAVH,EACAhC,EAAmB,2BAChB,QAAYmC,IAARF,EACPjC,EAAmB,wBAChB,MACO,KAAVgC,GACQ,KAARC,GACAd,EAAWiB,SAASH,GAAOd,EAAWiB,SAASJ,IAY/C,OARAhC,EAAmB,SAGfqC,SAASC,gBAAkB3B,GAAc4B,SACzCF,SAASC,gBAAkB1B,GAAY2B,SAEvCzC,GAAgB,IARpBE,EAAmB,oCAWvB,CAGAF,GAAgB,EAAM,GACvB,CAACG,GAAcE,GAAYuB,GAAYtD,IAK1C,MAAMoE,GAAuB,IACE,UAAvB9C,EACO,4BAGgB,QAAvBA,EACO,+BADX,EAOE+C,GAAsBC,GACjBC,EACHxD,EACS,UAATuD,EAAmB5B,GAAeC,IAIpC6B,GAAsB,IACjBD,EACHvD,GACChB,GAAS2B,EAAkBiB,QAAUmB,GAOxCU,GAAoBC,IAClB3E,GAAYI,IAGXmB,GAAuBG,GAAcpB,SAAAA,IAE1CkB,EAAsBmD,GACtBhD,GAAgB,GAAK,EAGnBiD,GAAoBD,UAClB3E,GAAYI,IAEhBoB,EAAsBmD,GACtBhD,GAAgB,GAC4C,QAA5D7B,GAAc,UAAb6E,EAAuBnC,GAAgBC,IAAa2B,eAAO,IAAAtE,GAAAA,EAAE+E,SAAQ,EAG1E,SAASC,GAAmBC,SACxB,OAAQA,EAAMC,MACV,IAAK,QAC0B,UAAvBzD,EACA0D,GAAgBnD,IACc,QAAvBP,IAEHG,GAAcwD,GAAclD,IACb,QAAnBlC,EAAA2C,GAAY2B,eAAO,IAAAtE,GAAAA,EAAEqF,QAEzB,MACJ,IAAK,MACDC,GAAiBtD,GAAcE,GAAY,IAKvD,CAEA,MAAMiD,GAAmBxB,IACrB2B,GAAiB3B,EAAOzB,GAAY,CAAEqD,eAAe,GAAO,EAG1DH,GAAiBzB,IACnB2B,GAAiBtD,GAAc2B,EAAO,CAAE6B,eAAe,GAAO,EAG5DF,GAAmB,CACrBG,EACAC,GAEIH,gBACAC,8BAGJ,MAAMzB,EAA8B,QAAtB/D,EAAAyD,GAAWgC,UAAW,IAAAzF,EAAAA,EAAIoC,GAClC4B,EAA0B,QAApBC,EAAAR,GAAWiC,UAAS,IAAAzB,EAAAA,EAAI3B,GAEpCL,GAAgB8B,GAChB5B,GAAc6B,GAKVD,IAAU3B,IAAuB4B,IAAQ1B,IACzC/B,SAAAA,EAJoC,CAAEwD,QAAOC,QAQ7CuB,QAA4CrB,IAA3BT,GAAWgC,KAC5B/D,EAAsB,OACH,QAAnBiE,EAAAhD,GAAY2B,eAAO,IAAAqB,GAAAA,EAAEZ,UAGrBS,IACA9D,EAAsB,MACtBG,GAAgB,GAChBpB,SAAAA,KAGJ4B,GAAuB0B,GACvBxB,GAAqByB,EAAI,EAGvB4B,GAAeX,IACjBA,EAAMY,kBACN5D,GAAgB,IAChBE,GAAc,IACdE,GAAuB,IACvBE,GAAqB,IAOrBhC,SAAAA,EALwC,CACpCwD,MAAO,GACPC,IAAK,KAITtC,EAAsB,MACtBG,GAAgB,EAAM,EAWpBiE,GAAcb,YAChB,MAAMc,EAASd,EAAMe,cAEfC,GACa,QAAfjG,EAAA+F,aAAM,EAANA,EAAQG,eAAO,IAAAlG,OAAA,EAAAA,EAAAmG,KAAAJ,EAAG,mCACH,QAAf9B,EAAA8B,aAAM,EAANA,EAAQG,eAAO,IAAAjC,OAAA,EAAAA,EAAAkC,KAAAJ,EAAG,mCAChBK,EACF5D,GAAQ8B,SAAW9B,GAAQ8B,QAAQ+B,SAASN,GAI5CtE,IACCG,IACAwE,IACAH,GAGDX,GAAiBtD,GAAcE,GAAY,CAAEsD,eAAe,GAChE,EAmBEc,GAAoB,KACtB,IACKhG,IACAJ,KACA8B,gBAAAA,GAAcuE,QAAS,IAAKrE,cAAU,EAAVA,GAAYqE,QAAS,GAElD,OACIC,SAAKC,UAAWC,EAAuCC,SACnDH,EAACI,EAAW,CACRC,QAASjB,GACTnB,KAAK,sBACM,WAI3B,EAmJJ,OACIqC,EAAA,MAAAC,OAAAC,OAAA,CACI/G,GAAIA,GACAoB,EAAU,CACdoF,UAAWQ,EAAKC,EAAsB7F,EAAWoF,qBAEjDD,EAACW,EAAiB,CAAAR,SACdH,EAACY,EAAmB,CAChBC,SAAU/G,IAAaJ,EACvBoH,OAAQ1F,EACR2F,cA9GM,IAClBT,EAACU,EAAY,CACTC,IAAKjF,GACLtC,SAAUA,EACVC,MAAOA,KAAW2B,EAClBxB,SAAUA,EACVG,OAAQqF,GACR4B,KAAK,QAAO,cACA,uBACZjB,UAAWkB,EAAyBhB,SAAA,CAEpCH,EAACoB,EAAc,CAAC3H,GAAI4C,GAAY8D,SAAA,eAChCH,EAACoB,EAAc,CAAC3H,GAAI6C,yBAEpBgE,EAACe,EAAwB,CACrB1H,MAAOA,KAAW2B,EAClBgG,cAC2B,OAAvBrG,EAA8B,OAASA,EAAkBkF,SAAA,CAI7DH,EAACuB,EAAU,CACPN,IAAK/E,GACLlC,QAAS,IAAMoE,GAAiB,SAChCoD,YAC2B,UAAvBvG,EAAiC,QAAU,OAE/ClB,SAAW0H,GAAMhG,GAAgBgG,EAAElC,OAAO3F,OAC1CA,MAAO4B,GACP1B,SAAUA,EAAQ,cAEde,EAAW,eACL,GAAGA,EAAW,2CACd,4BAEVwF,QAAS,IAAM/B,GAAiB,SAChCoD,UAAWlD,GACXmD,aAAa,MACb1D,KAAK,OACLiD,KAAK,WAAU,kBACElD,GAAmB,SAAQ,mBAC1BG,KAAqB,gBAEnC/C,GAAuC,UAAvBH,EAA8B,gBAEnCmB,GAAS,oBACN,OAAM,eACVzC,GAASiB,KAAiBU,EAAe,gBACxC5B,EAAQ,gBACRI,EACfmG,UAAW2B,IAGf5B,EAACuB,EAAU,CACPN,IAAK9E,GACLnC,QAAS,IAAMoE,GAAiB,OAChCoD,YAAoC,QAAvBvG,EAA+B,QAAU,KACtDlB,SAAW0H,GAAM9F,GAAc8F,EAAElC,OAAO3F,OACxCA,MAAO8B,GACP5B,SAAUA,EAAQ,cAEde,EAAW,eACL,GAAGA,EAAW,yCACd,0BAEVwF,QAAS,IAAM/B,GAAiB,OAChCoD,UAAWlD,GACXmD,aAAa,MACb1D,KAAK,OACLiD,KAAK,WAAU,kBACElD,GAAmB,OAAM,mBACxBG,KAAqB,gBACxB/C,GAAuC,QAAvBH,EAA4B,gBAC5CmB,GAAS,oBACN,OAAM,eAEpBzC,GAASiB,KAAiBU,QAAmBoC,EAAS,gBAE3ChE,QAAYgE,kBACZ5D,QAAY4D,EAC3BuC,UAAW2B,OAGlB9B,QA4BO+B,eA3JO,KACnB,GAA2B,UAAvB5G,EAAgC,CAGhC,MAAM6G,EACF7E,GAAWzB,KAAiB4B,GAEhC,OACI4C,EAAC+B,GACGC,UAAWxF,GACXyF,aAActD,GACduD,cAAe,CAAC1G,IAChB2G,cAAezF,EAAWI,uBACtBgF,EACAtF,IAEJJ,UAAWA,GACXgG,UAAWrE,KACXsE,oBACAC,mBAAiB,GAG7B,CAAO,CACH,MAAMC,EACFtF,GAAWvB,KAAe2B,GAE9B,OACI2C,EAAC+B,GACGC,UAAWpF,GACXqF,aAAcrD,GACdsD,cAAe,CAACxG,IAChByG,cAAezF,EAAWI,uBACtByF,EACA3F,IAEJR,UAAWA,GACXgG,UAAWrE,KACXsE,oBACAC,mBAAiB,GAG7B,GAmHYE,QA7LKC,IACF,kBAAXA,GAEAvH,EAAsB,MACtBG,GAAgB,GAChBpB,SAAAA,KAGA6E,GAAiBtD,GAAcE,GAAY,CAAEsD,eAAe,GAChE,EAqLY0D,UA5NM,WAIT,QAHTlJ,GAAwB,UAAvByB,EACKiB,GACAC,IACJ2B,eAAO,IAAAtE,GAAAA,EAAEmJ,QACXtH,GAAgB,EAAM,EAwNVuH,OAAQ,EACR1I,UAAWA,EACX2I,oBAAkB,EAClBC,aAAc3I,EACd4I,SAAUtI,OA7BrBd,GACD2B,GACI0E,EAACgD,EAAgB,CACbvJ,GAAI8C,GACJ0G,SAAU,EAAC,cACExJ,EAAK,GAAGA,kBAAqB,gBAAe0G,SAExD7E,OA0BH"}
|
|
1
|
+
{"version":3,"file":"combobox-picker.js","sources":["../../../src/time-range-picker/combobox-picker/combobox-picker.tsx"],"sourcesContent":["import type { OpenChangeReason } from \"@floating-ui/react\";\nimport clsx from \"clsx\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { FormErrorMessage } from \"../../form/form-label\";\nimport { concatIds, VisuallyHidden } from \"../../shared/accessibility\";\nimport { DropdownListState } from \"../../shared/dropdown-list\";\nimport { DropdownList } from \"../../shared/dropdown-list/dropdown-list\";\nimport { ElementWithDropdown } from \"../../shared/dropdown-wrapper\";\nimport {\n BasicInput,\n ClearButton,\n InputWrapper,\n} from \"../../shared/input-wrapper\";\nimport * as inputWrapperStyles from \"../../shared/input-wrapper/input-wrapper.styles\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport * as commonStyles from \"../common.styles\";\nimport type { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\nimport * as styles from \"./combobox-picker.styles\";\n\ntype TimeRangeInputType = \"start\" | \"end\";\ninterface TimeChangeOptions {\n goToNextInput?: boolean | undefined;\n triggerOnBlur?: boolean | undefined;\n}\n\nexport const ComboboxPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"12hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n startLimit,\n endLimit,\n initialScrollStartTime,\n initialScrollEndTime,\n interval = 15,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const internalId = useId();\n const [activeTimeSelector, setActiveTimeSelector] =\n useState<TimeRangeInputType | null>(null);\n const [dropdownOpen, setDropdownOpen] = useState<boolean>(false);\n const [validationError, setValidationError] = useState<string>(\"\");\n\n const [startTimeVal, setStartTimeVal] = useState<string>(\"\");\n const [endTimeVal, setEndTimeVal] = useState<string>(\"\");\n const [initialStartTimeVal, setInitialStartTimeVal] = useState<string>(\"\");\n const [initialEndTimeVal, setInitialEndTimeVal] = useState<string>(\"\");\n\n const nodeRef = useRef<HTMLDivElement>(null);\n const startInputRef = useRef<HTMLInputElement>(null);\n const endInputRef = useRef<HTMLInputElement>(null);\n\n const listboxId = `${internalId}-listbox`;\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n const errorId = `${internalId}-error-message`;\n\n const startOptions = useMemo(\n () =>\n TimeHelper.generateTimings(interval, format, startLimit, endLimit),\n [interval, format, startLimit, endLimit]\n );\n const endOptions = useMemo(() => {\n if (initialStartTimeVal === \"\") return startOptions;\n\n const flooredStartVal = TimeHelper.findClosestFlooredTime(\n initialStartTimeVal,\n startOptions\n );\n return flooredStartVal\n ? startOptions.slice(startOptions.indexOf(flooredStartVal))\n : [];\n }, [startOptions, initialStartTimeVal]);\n\n // =========================================================================\n // EFFECTS\n // =========================================================================\n const parseInput = useCallback(\n (input: string | undefined): string | undefined => {\n return TimeHelper.parseInput(input, format);\n },\n [format]\n );\n\n const parsedInitialStartScrollTime = useMemo(\n () => parseInput(initialScrollStartTime) ?? \"\",\n [initialScrollStartTime, parseInput]\n );\n\n const parsedInitialEndScrollTime = useMemo(\n () => parseInput(initialScrollEndTime) ?? \"\",\n [initialScrollEndTime, parseInput]\n );\n\n useEffect(() => {\n if (value) {\n const start = parseInput(value.start) ?? \"\";\n const end = parseInput(value.end) ?? \"\";\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n }\n }, [value, parseInput]);\n\n // Validation for keyboard input\n useEffect(() => {\n if (error) {\n setDropdownOpen(false);\n return;\n }\n\n const start = parseInput(startTimeVal);\n const end = parseInput(endTimeVal);\n\n if (start === undefined) {\n setValidationError(\"Invalid start time\");\n } else if (end === undefined) {\n setValidationError(\"Invalid end time\");\n } else if (\n start !== \"\" &&\n end !== \"\" &&\n TimeHelper.to24Hour(end) < TimeHelper.to24Hour(start)\n ) {\n setValidationError(\"End time must be after start time\");\n } else {\n setValidationError(\"\");\n // Re-open dropdown if error was corrected\n if (\n document.activeElement === startInputRef.current ||\n document.activeElement === endInputRef.current\n ) {\n setDropdownOpen(true);\n }\n return;\n }\n\n // Hide dropdown so error message is visible\n setDropdownOpen(false);\n }, [startTimeVal, endTimeVal, parseInput, error]);\n\n // =============================================================================\n // HELPERS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (activeTimeSelector === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (activeTimeSelector === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: TimeRangeInputType) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(\n ariaDescribedBy,\n !error && validationError ? errorId : undefined\n );\n };\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleInputFocus = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n // Only run onFocus if not already focused\n if (!activeTimeSelector && !dropdownOpen) onFocus?.();\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n };\n\n const handleInputClick = (selector: TimeRangeInputType) => {\n if (disabled || readOnly) return;\n\n setActiveTimeSelector(selector);\n setDropdownOpen(true);\n (selector === \"start\" ? startInputRef : endInputRef).current?.select();\n };\n\n function handleKeyDownEvent(event: React.KeyboardEvent<HTMLInputElement>) {\n switch (event.code) {\n case \"Enter\":\n if (activeTimeSelector === \"start\") {\n handleStartTime(startTimeVal);\n } else if (activeTimeSelector === \"end\") {\n // Let handleBlur call handleTimeChange instead\n if (dropdownOpen) handleEndTime(endTimeVal);\n endInputRef.current?.blur();\n }\n break;\n case \"Tab\":\n handleTimeChange(startTimeVal, endTimeVal, {});\n break;\n default:\n break;\n }\n }\n\n const handleStartTime = (input: string) => {\n handleTimeChange(input, endTimeVal, { goToNextInput: true });\n };\n\n const handleEndTime = (input: string) => {\n handleTimeChange(startTimeVal, input, { triggerOnBlur: true });\n };\n\n const handleTimeChange = (\n startInput: string,\n endInput: string,\n {\n goToNextInput, // Used by handleStart to move to end input automatically\n triggerOnBlur, // Used by handleEnd/handleClear to trigger onBlur\n }: TimeChangeOptions\n ) => {\n const start = parseInput(startInput) ?? initialStartTimeVal;\n const end = parseInput(endInput) ?? initialEndTimeVal;\n\n setStartTimeVal(start);\n setEndTimeVal(end);\n\n const timeValue: TimeRangePickerValue = { start, end };\n\n // Trigger onChange if values have changed\n if (start !== initialStartTimeVal || end !== initialEndTimeVal) {\n onChange?.(timeValue);\n }\n\n // Go to end input only if start is a valid time\n if (goToNextInput && parseInput(startInput) !== undefined) {\n setActiveTimeSelector(\"end\");\n endInputRef.current?.select();\n }\n\n if (triggerOnBlur) {\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n }\n\n setInitialStartTimeVal(start);\n setInitialEndTimeVal(end);\n };\n\n const handleClear = (event: React.MouseEvent) => {\n event.stopPropagation();\n setStartTimeVal(\"\");\n setEndTimeVal(\"\");\n setInitialStartTimeVal(\"\");\n setInitialEndTimeVal(\"\");\n\n const timeValue: TimeRangePickerValue = {\n start: \"\",\n end: \"\",\n };\n\n onChange?.(timeValue);\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n };\n\n const handleDismiss = () => {\n (activeTimeSelector === \"start\"\n ? startInputRef\n : endInputRef\n ).current?.focus();\n setDropdownOpen(false);\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLDivElement, Element>) => {\n const target = event.relatedTarget as HTMLElement;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode =\n nodeRef.current && nodeRef.current.contains(target);\n\n // Condition when the calendar is closed and focus moved outside the component\n const shouldBlurWhenClosed =\n activeTimeSelector &&\n !dropdownOpen &&\n !isInsideNode &&\n !isFloatingElement;\n\n if (shouldBlurWhenClosed) {\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // NOTE: Dropdown dismissal (esc) does not trigger onClose\n const handleClose = (reason: OpenChangeReason | undefined) => {\n if (reason === \"outside-press\") {\n // No handleTimeChange to avoid duplicate call from handleBlur\n setActiveTimeSelector(null);\n setDropdownOpen(false);\n onBlur?.();\n } else {\n // Dropdown closed via exiting component (eg. tab)\n handleTimeChange(startTimeVal, endTimeVal, { triggerOnBlur: true });\n }\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderClearButton = () => {\n if (\n !readOnly &&\n !disabled &&\n (startTimeVal?.length > 0 || endTimeVal?.length > 0)\n ) {\n return (\n <div className={inputWrapperStyles.clearButtonContainer}>\n <ClearButton\n onClick={handleClear}\n type=\"button\"\n aria-label=\"Clear\"\n />\n </div>\n );\n }\n };\n\n const renderDropdown = () => {\n if (activeTimeSelector === \"start\") {\n // Prioritise start time value. If non existent, use initial scroll time\n // If both are non existent, DropdownList will default to first option\n const startScrollTime =\n parseInput(startTimeVal) || parsedInitialStartScrollTime;\n\n return (\n <DropdownList\n listItems={startOptions}\n onSelectItem={handleStartTime}\n selectedItems={[startTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n startScrollTime,\n startOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n } else {\n const endScrollTime =\n parseInput(endTimeVal) || parsedInitialEndScrollTime;\n\n return (\n <DropdownList\n listItems={endOptions}\n onSelectItem={handleEndTime}\n selectedItems={[endTimeVal]}\n topScrollItem={TimeHelper.findClosestFlooredTime(\n endScrollTime,\n endOptions\n )}\n listboxId={listboxId}\n ariaLabel={getDropdownAriaLabel()}\n disableItemFocus\n matchElementWidth\n />\n );\n }\n };\n\n const renderElement = () => (\n <InputWrapper\n ref={nodeRef}\n disabled={disabled}\n error={error || !!validationError}\n readOnly={readOnly}\n onBlur={handleBlur}\n role=\"group\"\n data-testid=\"timepicker-container\"\n className={styles.timeFieldContainer}\n >\n <VisuallyHidden id={startLabelId}>Start time</VisuallyHidden>\n <VisuallyHidden id={endLabelId}>End time</VisuallyHidden>\n\n <RangeInputInnerContainer\n error={error || !!validationError}\n currentActive={\n activeTimeSelector === null ? \"none\" : activeTimeSelector\n }\n >\n {/* From */}\n <BasicInput\n ref={startInputRef}\n onFocus={() => handleInputFocus(\"start\")}\n placeholder={\n activeTimeSelector === \"start\" ? \"hh:mm\" : \"From\"\n }\n onChange={(e) => setStartTimeVal(e.target.value)}\n value={startTimeVal}\n readOnly={readOnly || disabled}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-start`\n : \"timepicker-selector-start\"\n }\n onClick={() => handleInputClick(\"start\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={\n dropdownOpen && activeTimeSelector === \"start\"\n }\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={error || ariaInvalid || !!validationError}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n className={clsx(\n commonStyles.selectorInput,\n disabled && commonStyles.selectorInputDisabled\n )}\n />\n {/* To */}\n <BasicInput\n ref={endInputRef}\n onFocus={() => handleInputFocus(\"end\")}\n placeholder={activeTimeSelector === \"end\" ? \"hh:mm\" : \"To\"}\n onChange={(e) => setEndTimeVal(e.target.value)}\n value={endTimeVal}\n readOnly={readOnly || disabled}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-end`\n : \"timepicker-selector-end\"\n }\n onClick={() => handleInputClick(\"end\")}\n onKeyDown={handleKeyDownEvent}\n autoComplete=\"off\"\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n aria-expanded={dropdownOpen && activeTimeSelector === \"end\"}\n aria-controls={listboxId}\n aria-autocomplete=\"list\"\n aria-invalid={\n error || ariaInvalid || !!validationError || undefined\n }\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n className={clsx(\n commonStyles.selectorInput,\n disabled && commonStyles.selectorInputDisabled\n )}\n />\n </RangeInputInnerContainer>\n {renderClearButton()}\n </InputWrapper>\n );\n\n const renderError = () =>\n // Only display internal error message if user does not provide one\n !error &&\n validationError && (\n <FormErrorMessage\n id={errorId}\n tabIndex={0}\n data-testid={id ? `${id}-error-message` : \"error-message\"}\n >\n {validationError}\n </FormErrorMessage>\n );\n\n return (\n <div\n id={id}\n {...otherProps}\n className={clsx(commonStyles.wrapper, otherProps.className)}\n >\n <DropdownListState>\n <ElementWithDropdown\n enabled={!readOnly && !disabled}\n isOpen={dropdownOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={handleClose}\n onDismiss={handleDismiss}\n offset={8}\n alignment={alignment}\n fitAvailableHeight\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </DropdownListState>\n {renderError()}\n </div>\n );\n};\n"],"names":["ComboboxPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","startLimit","endLimit","initialScrollStartTime","initialScrollEndTime","interval","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","internalId","useId","activeTimeSelector","setActiveTimeSelector","useState","dropdownOpen","setDropdownOpen","validationError","setValidationError","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","initialStartTimeVal","setInitialStartTimeVal","initialEndTimeVal","setInitialEndTimeVal","nodeRef","useRef","startInputRef","endInputRef","listboxId","startLabelId","endLabelId","errorId","startOptions","useMemo","TimeHelper","generateTimings","endOptions","flooredStartVal","findClosestFlooredTime","slice","indexOf","parseInput","useCallback","input","parsedInitialStartScrollTime","parsedInitialEndScrollTime","useEffect","start","end","_b","undefined","to24Hour","document","activeElement","current","getDropdownAriaLabel","getInputLabelledBy","type","concatIds","getInputDescribedBy","handleInputFocus","selector","handleInputClick","select","handleKeyDownEvent","event","code","handleStartTime","handleEndTime","blur","handleTimeChange","goToNextInput","triggerOnBlur","startInput","endInput","_c","handleClear","stopPropagation","handleBlur","target","relatedTarget","isFloatingElement","matches","call","isInsideNode","contains","renderClearButton","length","_jsx","className","inputWrapperStyles.clearButtonContainer","children","ClearButton","onClick","_jsxs","Object","assign","clsx","commonStyles.wrapper","DropdownListState","ElementWithDropdown","enabled","isOpen","renderElement","InputWrapper","ref","role","styles.timeFieldContainer","VisuallyHidden","RangeInputInnerContainer","currentActive","BasicInput","placeholder","e","onKeyDown","autoComplete","commonStyles.selectorInput","commonStyles.selectorInputDisabled","renderDropdown","startScrollTime","DropdownList","listItems","onSelectItem","selectedItems","topScrollItem","ariaLabel","disableItemFocus","matchElementWidth","endScrollTime","onClose","reason","onDismiss","focus","offset","fitAvailableHeight","customZIndex","rootNode","FormErrorMessage","tabIndex"],"mappings":"uvFA4BO,MAAMA,EAAkBC,QAAAC,GAC3BA,EAAEC,SACFA,GAAW,EAAKC,MAChBA,EAAKC,MACLA,EAAKC,OACLA,EAAS,OAAMC,SACfA,EAAQC,SACRA,EAAQC,QACRA,EAAOC,OACPA,EAAMC,UACNA,EAAY,OAAMC,eAClBA,EAAcC,WACdA,EAAUC,SACVA,EAAQC,uBACRA,EAAsBC,qBACtBA,EAAoBC,SACpBA,EAAW,GAAEC,iBACbA,EACA,kBAAmBC,EACnB,mBAAoBC,EACpB,eAAgBC,GAAWpB,EACxBqB,EAAUC,EAAAtB,EArBc,CAAA,KAAA,WAAA,QAAA,QAAA,SAAA,WAAA,WAAA,UAAA,SAAA,YAAA,iBAAA,aAAA,WAAA,yBAAA,uBAAA,WAAA,mBAAA,kBAAA,mBAAA,iBA0B3B,MAAMuB,EAAaC,KACZC,EAAoBC,GACvBC,EAAoC,OACjCC,EAAcC,GAAmBF,GAAkB,IACnDG,EAAiBC,IAAsBJ,EAAiB,KAExDK,GAAcC,IAAmBN,EAAiB,KAClDO,GAAYC,IAAiBR,EAAiB,KAC9CS,GAAqBC,IAA0BV,EAAiB,KAChEW,GAAmBC,IAAwBZ,EAAiB,IAE7Da,GAAUC,EAAuB,MACjCC,GAAgBD,EAAyB,MACzCE,GAAcF,EAAyB,MAEvCG,GAAY,GAAGrB,YACfsB,GAAe,GAAGtB,gBAClBuB,GAAa,GAAGvB,cAChBwB,GAAU,GAAGxB,kBAEbyB,GAAeC,GACjB,IACIC,EAAWC,gBAAgBnC,EAAUX,EAAQO,EAAYC,IAC7D,CAACG,EAAUX,EAAQO,EAAYC,IAE7BuC,GAAaH,GAAQ,KACvB,GAA4B,KAAxBb,GAA4B,OAAOY,GAEvC,MAAMK,EAAkBH,EAAWI,uBAC/BlB,GACAY,IAEJ,OAAOK,EACDL,GAAaO,MAAMP,GAAaQ,QAAQH,IACxC,EAAE,GACT,CAACL,GAAcZ,KAKZqB,GAAaC,GACdC,GACUT,EAAWO,WAAWE,EAAOtD,IAExC,CAACA,IAGCuD,GAA+BX,GACjC,KAAK,IAAAjD,EAAC,OAAkC,QAAlCA,EAAAyD,GAAW3C,UAAuB,IAAAd,EAAAA,EAAI,EAAE,GAC9C,CAACc,EAAwB2C,KAGvBI,GAA6BZ,GAC/B,KAAK,IAAAjD,EAAC,OAAgC,QAAhCA,EAAAyD,GAAW1C,UAAqB,IAAAf,EAAAA,EAAI,EAAE,GAC5C,CAACe,EAAsB0C,KAG3BK,GAAU,aACN,GAAI1D,EAAO,CACP,MAAM2D,EAA+B,QAAvB/D,EAAAyD,GAAWrD,EAAM2D,cAAM,IAAA/D,EAAAA,EAAI,GACnCgE,EAA2B,QAArBC,EAAAR,GAAWrD,EAAM4D,YAAI,IAAAC,EAAAA,EAAI,GAErChC,GAAgB8B,GAChB5B,GAAc6B,GACd3B,GAAuB0B,GACvBxB,GAAqByB,EACzB,IACD,CAAC5D,EAAOqD,KAGXK,GAAU,KACN,GAAI3D,EAEA,YADA0B,GAAgB,GAIpB,MAAMkC,EAAQN,GAAWzB,IACnBgC,EAAMP,GAAWvB,IAEvB,QAAcgC,IAAVH,EACAhC,GAAmB,2BAChB,QAAYmC,IAARF,EACPjC,GAAmB,wBAChB,MACO,KAAVgC,GACQ,KAARC,GACAd,EAAWiB,SAASH,GAAOd,EAAWiB,SAASJ,IAY/C,OARAhC,GAAmB,SAGfqC,SAASC,gBAAkB3B,GAAc4B,SACzCF,SAASC,gBAAkB1B,GAAY2B,SAEvCzC,GAAgB,IARpBE,GAAmB,oCAWvB,CAGAF,GAAgB,EAAM,GACvB,CAACG,GAAcE,GAAYuB,GAAYtD,IAK1C,MAAMoE,GAAuB,IACE,UAAvB9C,EACO,4BAGgB,QAAvBA,EACO,+BADX,EAOE+C,GAAsBC,GACjBC,EACHxD,EACS,UAATuD,EAAmB5B,GAAeC,IAIpC6B,GAAsB,IACjBD,EACHvD,GACChB,GAAS2B,EAAkBiB,QAAUmB,GAOxCU,GAAoBC,IAClB3E,GAAYI,IAGXmB,GAAuBG,GAAcpB,SAAAA,IAE1CkB,EAAsBmD,GACtBhD,GAAgB,GAAK,EAGnBiD,GAAoBD,UAClB3E,GAAYI,IAEhBoB,EAAsBmD,GACtBhD,GAAgB,GAC4C,QAA5D7B,GAAc,UAAb6E,EAAuBnC,GAAgBC,IAAa2B,eAAO,IAAAtE,GAAAA,EAAE+E,SAAQ,EAG1E,SAASC,GAAmBC,SACxB,OAAQA,EAAMC,MACV,IAAK,QAC0B,UAAvBzD,EACA0D,GAAgBnD,IACc,QAAvBP,IAEHG,GAAcwD,GAAclD,IACb,QAAnBlC,EAAA2C,GAAY2B,eAAO,IAAAtE,GAAAA,EAAEqF,QAEzB,MACJ,IAAK,MACDC,GAAiBtD,GAAcE,GAAY,IAKvD,CAEA,MAAMiD,GAAmBxB,IACrB2B,GAAiB3B,EAAOzB,GAAY,CAAEqD,eAAe,GAAO,EAG1DH,GAAiBzB,IACnB2B,GAAiBtD,GAAc2B,EAAO,CAAE6B,eAAe,GAAO,EAG5DF,GAAmB,CACrBG,EACAC,GAEIH,gBACAC,8BAGJ,MAAMzB,EAA8B,QAAtB/D,EAAAyD,GAAWgC,UAAW,IAAAzF,EAAAA,EAAIoC,GAClC4B,EAA0B,QAApBC,EAAAR,GAAWiC,UAAS,IAAAzB,EAAAA,EAAI3B,GAEpCL,GAAgB8B,GAChB5B,GAAc6B,GAKVD,IAAU3B,IAAuB4B,IAAQ1B,IACzC/B,SAAAA,EAJoC,CAAEwD,QAAOC,QAQ7CuB,QAA4CrB,IAA3BT,GAAWgC,KAC5B/D,EAAsB,OACH,QAAnBiE,EAAAhD,GAAY2B,eAAO,IAAAqB,GAAAA,EAAEZ,UAGrBS,IACA9D,EAAsB,MACtBG,GAAgB,GAChBpB,SAAAA,KAGJ4B,GAAuB0B,GACvBxB,GAAqByB,EAAI,EAGvB4B,GAAeX,IACjBA,EAAMY,kBACN5D,GAAgB,IAChBE,GAAc,IACdE,GAAuB,IACvBE,GAAqB,IAOrBhC,SAAAA,EALwC,CACpCwD,MAAO,GACPC,IAAK,KAITtC,EAAsB,MACtBG,GAAgB,EAAM,EAWpBiE,GAAcb,YAChB,MAAMc,EAASd,EAAMe,cAEfC,GACa,QAAfjG,EAAA+F,aAAM,EAANA,EAAQG,eAAO,IAAAlG,OAAA,EAAAA,EAAAmG,KAAAJ,EAAG,mCACH,QAAf9B,EAAA8B,aAAM,EAANA,EAAQG,eAAO,IAAAjC,OAAA,EAAAA,EAAAkC,KAAAJ,EAAG,mCAChBK,EACF5D,GAAQ8B,SAAW9B,GAAQ8B,QAAQ+B,SAASN,GAI5CtE,IACCG,IACAwE,IACAH,GAGDX,GAAiBtD,GAAcE,GAAY,CAAEsD,eAAe,GAChE,EAmBEc,GAAoB,KACtB,IACKhG,IACAJ,KACA8B,gBAAAA,GAAcuE,QAAS,IAAKrE,cAAU,EAAVA,GAAYqE,QAAS,GAElD,OACIC,SAAKC,UAAWC,EAAuCC,SACnDH,EAACI,EAAW,CACRC,QAASjB,GACTnB,KAAK,sBACM,WAI3B,EAyJJ,OACIqC,EAAA,MAAAC,OAAAC,OAAA,CACI/G,GAAIA,GACAoB,EAAU,CACdoF,UAAWQ,EAAKC,EAAsB7F,EAAWoF,qBAEjDD,EAACW,EAAiB,CAAAR,SACdH,EAACY,EAAmB,CAChBC,SAAU/G,IAAaJ,EACvBoH,OAAQ1F,EACR2F,cApHM,IAClBT,EAACU,EAAY,CACTC,IAAKjF,GACLtC,SAAUA,EACVC,MAAOA,KAAW2B,EAClBxB,SAAUA,EACVG,OAAQqF,GACR4B,KAAK,QAAO,cACA,uBACZjB,UAAWkB,EAAyBhB,SAAA,CAEpCH,EAACoB,EAAc,CAAC3H,GAAI4C,2BACpB2D,EAACoB,EAAc,CAAC3H,GAAI6C,GAAU6D,SAAA,aAE9BG,EAACe,EAAwB,CACrB1H,MAAOA,KAAW2B,EAClBgG,cAC2B,OAAvBrG,EAA8B,OAASA,EAAkBkF,SAAA,CAI7DH,EAACuB,GACGN,IAAK/E,GACLlC,QAAS,IAAMoE,GAAiB,SAChCoD,YAC2B,UAAvBvG,EAAiC,QAAU,OAE/ClB,SAAW0H,GAAMhG,GAAgBgG,EAAElC,OAAO3F,OAC1CA,MAAO4B,GACP1B,SAAUA,GAAYJ,EAAQ,cAE1BmB,EAAW,eACL,GAAGA,EAAW,2CACd,4BAEVwF,QAAS,IAAM/B,GAAiB,SAChCoD,UAAWlD,GACXmD,aAAa,MACb1D,KAAK,OACLiD,KAAK,WAAU,kBACElD,GAAmB,SAAQ,mBAC1BG,KAAqB,gBAEnC/C,GAAuC,UAAvBH,EAA8B,gBAEnCmB,GAAS,oBACN,sBACJzC,GAASiB,KAAiBU,EAAe,gBACxC5B,EAAQ,gBACRI,EACfmG,UAAWQ,EACPmB,EACAlI,GAAYmI,KAIpB7B,EAACuB,EAAU,CACPN,IAAK9E,GACLnC,QAAS,IAAMoE,GAAiB,OAChCoD,YAAoC,QAAvBvG,EAA+B,QAAU,KACtDlB,SAAW0H,GAAM9F,GAAc8F,EAAElC,OAAO3F,OACxCA,MAAO8B,GACP5B,SAAUA,GAAYJ,EAAQ,cAE1BmB,EAAW,eACL,GAAGA,EAAW,yCACd,0BAEVwF,QAAS,IAAM/B,GAAiB,OAChCoD,UAAWlD,GACXmD,aAAa,MACb1D,KAAK,OACLiD,KAAK,6BACYlD,GAAmB,OAAM,mBACxBG,KAAqB,gBACxB/C,GAAuC,QAAvBH,EAA4B,gBAC5CmB,GAAS,oBACN,OAAM,eAEpBzC,GAASiB,KAAiBU,QAAmBoC,kBAElChE,QAAYgE,EAAS,gBACrB5D,QAAY4D,EAC3BuC,UAAWQ,EACPmB,EACAlI,GAAYmI,QAIvB/B,QA4BOgC,eAjKO,KACnB,GAA2B,UAAvB7G,EAAgC,CAGhC,MAAM8G,EACF9E,GAAWzB,KAAiB4B,GAEhC,OACI4C,EAACgC,GACGC,UAAWzF,GACX0F,aAAcvD,GACdwD,cAAe,CAAC3G,IAChB4G,cAAe1F,EAAWI,uBACtBiF,EACAvF,IAEJJ,UAAWA,GACXiG,UAAWtE,KACXuE,oBACAC,mBAAiB,GAG7B,CAAO,CACH,MAAMC,EACFvF,GAAWvB,KAAe2B,GAE9B,OACI2C,EAACgC,GACGC,UAAWrF,GACXsF,aAActD,GACduD,cAAe,CAACzG,IAChB0G,cAAe1F,EAAWI,uBACtB0F,EACA5F,IAEJR,UAAWA,GACXiG,UAAWtE,KACXuE,oBACAC,mBAAiB,GAG7B,GAyHYE,QAnMKC,IACF,kBAAXA,GAEAxH,EAAsB,MACtBG,GAAgB,GAChBpB,SAAAA,KAGA6E,GAAiBtD,GAAcE,GAAY,CAAEsD,eAAe,GAChE,EA2LY2D,UAlOM,WAIT,QAHTnJ,GAAwB,UAAvByB,EACKiB,GACAC,IACJ2B,eAAO,IAAAtE,GAAAA,EAAEoJ,QACXvH,GAAgB,EAAM,EA8NVwH,OAAQ,EACR3I,UAAWA,EACX4I,oBAAkB,EAClBC,aAAc5I,EACd6I,SAAUvI,OA7BrBd,GACD2B,GACI0E,EAACiD,EAAgB,CACbxJ,GAAI8C,GACJ2G,SAAU,EAAC,cACEzJ,EAAK,GAAGA,kBAAqB,gBAAe0G,SAExD7E,OA0BH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.t1wpl53s{height:3rem;gap:var(--fds-spacing-8);padding-right:calc(1.25rem + var(--fds-spacing-20));}
|
|
1
|
+
@layer fds{.t1wpl53s{height:3rem;gap:var(--fds-spacing-8);padding-right:calc(1.25rem + var(--fds-spacing-20));}}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare const wrapper: import("@linaria/core").LinariaClassName;
|
|
2
2
|
export declare const timeContainer: import("@linaria/core").LinariaClassName;
|
|
3
3
|
export declare const selectorInput: import("@linaria/core").LinariaClassName;
|
|
4
|
+
export declare const selectorInputDisabled: import("@linaria/core").LinariaClassName;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./common.
|
|
1
|
+
import"./common.styles_cnkkax.css";const s="wfddsjt",t="t102z5ub",c="svbkfs2",e="s1201xt4";export{c as selectorInput,e as selectorInputDisabled,t as timeContainer,s as wrapper};
|
|
2
2
|
//# sourceMappingURL=common.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.styles.js","sources":["../../src/time-range-picker/common.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Spacing } from \"../theme\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const wrapper = css`\n position: relative;\n`;\n\nexport const timeContainer = css`\n height: 3rem;\n gap: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const selectorInput = css`\n display: block;\n width: 100%;\n flex: 1;\n`;\n"],"names":["wrapper","timeContainer","selectorInput"],"mappings":"
|
|
1
|
+
{"version":3,"file":"common.styles.js","sources":["../../src/time-range-picker/common.styles.ts"],"sourcesContent":["import { css } from \"@linaria/core\";\n\nimport { Colour, Spacing } from \"../theme\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const wrapper = css`\n position: relative;\n`;\n\nexport const timeContainer = css`\n height: 3rem;\n gap: ${Spacing[\"spacing-8\"]};\n`;\n\nexport const selectorInput = css`\n display: block;\n width: 100%;\n flex: 1;\n`;\n\nexport const selectorInputDisabled = css`\n color: ${Colour[\"text-subtler\"]};\n cursor: not-allowed;\n`;\n"],"names":["wrapper","timeContainer","selectorInput","selectorInputDisabled"],"mappings":"oEAOO,MAAMA,EAAO,UAIPC,EAAa,WAKbC,EAAa,UAMbC,EAAqB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e}from"../../_virtual/_tslib.js";import{jsx as r,jsxs as a}from"react/jsx-runtime";import o from"clsx";import{useState as i,useRef as t,useEffect as l}from"react";import{concatIds as n}from"../../shared/accessibility/index.js";import{ElementWithDropdown as d}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import{InputWrapper as s,BasicInput as c}from"../../shared/input-wrapper/input-wrapper.js";import{RangeInputInnerContainer as m}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimepickerDropdown as p}from"../../shared/timepicker-dropdown/timepicker-dropdown.js";import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import{useId as u}from"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import{TimeHelper as v}from"../../util/time-helper.js";import{wrapper as b,timeContainer as f,selectorInput as g}from"../common.styles.js";const
|
|
1
|
+
import{__rest as e}from"../../_virtual/_tslib.js";import{jsx as r,jsxs as a}from"react/jsx-runtime";import o from"clsx";import{useState as i,useRef as t,useEffect as l}from"react";import{concatIds as n}from"../../shared/accessibility/index.js";import{ElementWithDropdown as d}from"../../shared/dropdown-wrapper/element-with-dropdown.js";import{InputWrapper as s,BasicInput as c}from"../../shared/input-wrapper/input-wrapper.js";import{RangeInputInnerContainer as m}from"../../shared/range-input-inner-container/range-input-inner-container.js";import{TimepickerDropdown as p}from"../../shared/timepicker-dropdown/timepicker-dropdown.js";import"../../util/calendar-helper.js";import"../../external/dayjs/dayjs.min.js";import{useId as u}from"../../util/simple-id-generator.js";import"../../util/string-helper.js";import"@react-aria/live-announcer";import{TimeHelper as v}from"../../util/time-helper.js";import{wrapper as b,timeContainer as f,selectorInput as g,selectorInputDisabled as h}from"../common.styles.js";const y=y=>{var{id:j,disabled:k=!1,error:w,value:x,format:F="24hr",readOnly:C,onChange:N,onFocus:O,onBlur:$,alignment:B="left",dropdownZIndex:D,dropdownRootNode:I,"aria-labelledby":T,"aria-describedby":R,"aria-invalid":S}=y,Z=e(y,["id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","dropdownRootNode","aria-labelledby","aria-describedby","aria-invalid"]);const[E,V]=i(!1),[_,A]=i("none"),[P,q]=i(""),[z,G]=i(""),[H,J]=i(!1),K=!C&&!k,L=t(null),M=u(),Q=`${M}-start-label`,U=`${M}-end-label`,W=e=>n(T,"start"===e?Q:U),X=()=>n(R);l((()=>{x&&(q(x.start),G(x.end))}),[x]);const Y=e=>{K&&(H||E||null==O||O(),J(!0),A(e),V(!0))},ee=e=>{var r,a;const o=!!(null==e?void 0:e.keepFocus),i=null!==(r=null==e?void 0:e.triggerBlur)&&void 0!==r?r:!o;V(!1),A("none"),J(o),i&&(null==$||$()),o&&(null===(a=L.current)||void 0===a||a.focus())},re=e=>{var r,a,o;if(!H||E)return;const i=e.relatedTarget,t=(null===(r=null==i?void 0:i.matches)||void 0===r?void 0:r.call(i,"[data-floating-ui-focusable]"))||(null===(a=null==i?void 0:i.matches)||void 0===a?void 0:a.call(i,"[data-floating-ui-focus-guard]"));!(!i||!(null===(o=L.current)||void 0===o?void 0:o.contains(i)))||t||(J(!1),null==$||$())},ae=e=>{q(e),null==N||N({start:e,end:z}),A("end"),V(!0),J(!0)},oe=e=>{G(e),null==N||N({start:P,end:e}),""===P?(A("start"),V(!0),J(!0)):ee({keepFocus:!0})};return r("div",Object.assign({id:j},Z,{className:o(b,Z.className),children:r(d,{enabled:K,isOpen:E,renderElement:()=>r(s,{ref:L,tabIndex:-1,onBlur:re,"data-testid":"timepicker-container",role:"group",disabled:k,error:w,readOnly:C,focused:H,className:f,children:a(m,{error:w,currentActive:_,children:[r(c,{onFocus:()=>Y("start"),onClick:()=>Y("start"),readOnly:!0,placeholder:"From",value:v.formatDisplayValue(P,F),"data-testid":Z["data-testid"]?`${Z["data-testid"]}-timepicker-selector-from`:"timepicker-selector-from",role:"combobox","aria-expanded":!k&&!C&&E,"aria-invalid":w||S,"aria-disabled":k,"aria-readonly":C,"aria-labelledby":W("start"),"aria-describedby":X(),className:o(g,k&&h)}),r(c,{onClick:()=>Y("end"),readOnly:!0,placeholder:"To",value:v.formatDisplayValue(z,F),"data-testid":Z["data-testid"]?`${Z["data-testid"]}-timepicker-selector-to`:"timepicker-selector-to",role:"combobox","aria-expanded":!k&&!C&&E,"aria-invalid":w||S||void 0,"aria-disabled":k||void 0,"aria-readonly":C||void 0,"aria-labelledby":W("end"),"aria-describedby":X(),className:o(g,k&&h)})]})}),renderDropdown:({styles:e,setFloatingRef:o,getFloatingProps:i})=>E?a("div",Object.assign({ref:o,style:e,role:"dialog","aria-label":"start"===_?"Selecting for: Start time":"end"===_?"Selecting for: End time":void 0},i(),{children:["start"===_&&r(p,{id:j?`${j}-start`:void 0,show:!0,value:P,format:F,onCancel:()=>ee({keepFocus:!0}),onChange:ae}),"end"===_&&r(p,{id:j?`${j}-end`:void 0,show:!0,value:z,format:F,onCancel:()=>ee({keepFocus:!1}),onChange:oe})]}),_):null,onClose:()=>ee({keepFocus:!1}),onDismiss:()=>ee({keepFocus:!0}),clickToToggle:!1,offset:8,alignment:B,customZIndex:D,rootNode:I})}))};export{y as DialPicker};
|
|
2
2
|
//# sourceMappingURL=dial-picker.js.map
|