themelia-react-ui 2.0.1 → 2.0.2
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/CHANGELOG.md +307 -131
- package/README.md +28 -8
- package/THIRD_PARTY_NOTICES.md +13 -0
- package/dist/{accordion-B6a3vVgA.js → accordion-Cjb6sx0G.js} +14 -13
- package/dist/accordion-Cjb6sx0G.js.map +1 -0
- package/dist/action-menu-CllU52Mm.js +280 -0
- package/dist/action-menu-CllU52Mm.js.map +1 -0
- package/dist/affordance-geometry.generated-tF36bREk.js +140 -0
- package/dist/affordance-geometry.generated-tF36bREk.js.map +1 -0
- package/dist/ai-artifact-DvTwDVyL.js +1148 -0
- package/dist/ai-artifact-DvTwDVyL.js.map +1 -0
- package/dist/{app-shell-ZK5RWdo6.js → app-shell-C4FhvCqF.js} +5 -5
- package/dist/{app-shell-ZK5RWdo6.js.map → app-shell-C4FhvCqF.js.map} +1 -1
- package/dist/attachment-BxDfL2mw.js +246 -0
- package/dist/attachment-BxDfL2mw.js.map +1 -0
- package/dist/{auth-CYxKfo69.js → auth-ax2BqjrI.js} +58 -54
- package/dist/auth-ax2BqjrI.js.map +1 -0
- package/dist/{avatar-BBnEJIx8.js → avatar-DAPlDvhJ.js} +7 -7
- package/dist/avatar-DAPlDvhJ.js.map +1 -0
- package/dist/{badge-MrKVNzW9.js → badge-HpFqoqSY.js} +40 -40
- package/dist/badge-HpFqoqSY.js.map +1 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +40 -36
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +92 -92
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +2 -2
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +6 -6
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +14 -14
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +6 -6
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +171 -176
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +6 -6
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +79 -2
- package/dist/base/spinner.js.map +1 -0
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +46 -45
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-BZGDG-Si.js → batch-action-bar-DnUJ21NQ.js} +6 -5
- package/dist/batch-action-bar-DnUJ21NQ.js.map +1 -0
- package/dist/blocks/admin.js +42 -42
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +260 -240
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +620 -585
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +1152 -1109
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +48 -39
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +13 -12
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-D5t7I023.js → breadcrumbs-C-oqs1sQ.js} +5 -5
- package/dist/breadcrumbs-C-oqs1sQ.js.map +1 -0
- package/dist/{button-QYwiyhD2.js → button-DVzspB_G.js} +2 -2
- package/dist/{button-QYwiyhD2.js.map → button-DVzspB_G.js.map} +1 -1
- package/dist/{buttons-SbIcm1HJ.js → buttons-DPZekJFu.js} +20 -15
- package/dist/buttons-DPZekJFu.js.map +1 -0
- package/dist/cards-BaBZR-AU.js +68 -0
- package/dist/cards-BaBZR-AU.js.map +1 -0
- package/dist/{chart-QfrARkXl.js → chart-ZOYyK2xG.js} +58 -55
- package/dist/chart-ZOYyK2xG.js.map +1 -0
- package/dist/{checkbox-DhB6K0bK.js → checkbox-AWIhNhmo.js} +2 -2
- package/dist/{checkbox-DhB6K0bK.js.map → checkbox-AWIhNhmo.js.map} +1 -1
- package/dist/{choice-inputs-t6w3ATNz.js → choice-inputs-CNHvARCJ.js} +49 -45
- package/dist/choice-inputs-CNHvARCJ.js.map +1 -0
- package/dist/{code-block-Dgbu-CU3.js → code-block-DeneBJR_.js} +8 -8
- package/dist/code-block-DeneBJR_.js.map +1 -0
- package/dist/{collapsible-D8AEGU1-.js → collapsible-C-_l4hpy.js} +3 -3
- package/dist/{collapsible-D8AEGU1-.js.map → collapsible-C-_l4hpy.js.map} +1 -1
- package/dist/{collection-content-uK16Grv0.js → collection-content-By56pLog.js} +3 -3
- package/dist/{collection-content-uK16Grv0.js.map → collection-content-By56pLog.js.map} +1 -1
- package/dist/combobox-C0EQW6dr.js +875 -0
- package/dist/combobox-C0EQW6dr.js.map +1 -0
- package/dist/combobox-xCQ2RMNE.js +309 -0
- package/dist/combobox-xCQ2RMNE.js.map +1 -0
- package/dist/{command-kNR20o7x.js → command-C25VMRII.js} +7 -7
- package/dist/{command-kNR20o7x.js.map → command-C25VMRII.js.map} +1 -1
- package/dist/{comments-BpDuCUUu.js → comments-BYYlTA8E.js} +114 -105
- package/dist/comments-BYYlTA8E.js.map +1 -0
- package/dist/components/base/badge/badge.recipes.d.ts +1 -1
- package/dist/components/base/buttons/loader-button.d.ts +2 -1
- package/dist/components/base/cards/card.recipes.d.ts +2 -3
- package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +3 -13
- package/dist/components/base/cards/smart-card.types.d.ts +11 -4
- package/dist/components/base/chart/chart.d.ts +2 -5
- package/dist/components/base/combobox/combobox.strings.d.ts +7 -0
- package/dist/components/base/combobox/index.d.ts +30 -4
- package/dist/components/base/forms/form-sizing.d.ts +11 -3
- package/dist/components/base/navigation/pagination.d.ts +5 -2
- package/dist/components/base/popover/popover.recipes.d.ts +15 -1
- package/dist/components/base/table/index.d.ts +9 -2
- package/dist/components/base/text-inputs/input-group.d.ts +2 -2
- package/dist/components/blocks/ai/ai-shimmer/ai-shimmer.d.ts +1 -1
- package/dist/components/blocks/ai/ai-shimmer/types.d.ts +3 -0
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +3 -1
- package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +16 -8
- package/dist/components/features/activities/partials/activity-marker.d.ts +6 -3
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +5 -0
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +220 -0
- package/dist/components/features/appointment-calendar/appointment-calendar.utils.d.ts +41 -0
- package/dist/components/features/appointment-calendar/index.d.ts +3 -0
- package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +32 -0
- package/dist/components/features/appointment-calendar/partials/appointment-month.d.ts +13 -0
- package/dist/components/features/combobox/combobox.strings.d.ts +15 -1
- package/dist/components/features/combobox/types.d.ts +4 -0
- package/dist/components/features/media-library/media-library.strings.d.ts +2 -0
- package/dist/components/features/rich-text-editor/index.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +6 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +9 -1
- package/dist/components/features/table/table-header.d.ts +1 -1
- package/dist/components/features/table/table.strings.d.ts +55 -1
- package/dist/components/features/table/table.types.d.ts +17 -4
- package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +5 -0
- package/dist/components/primitives/number.d.ts +4 -2
- package/dist/components/primitives/value.d.ts +3 -1
- package/dist/components/typography/text-link.d.ts +4 -0
- package/dist/components/ui/combobox.d.ts +6 -2
- package/dist/components/ui/item.d.ts +8 -8
- package/dist/components/ui/tabs.d.ts +1 -1
- package/dist/{containers-DmWiJa2I.js → containers-Mu1LMGV1.js} +2 -2
- package/dist/{containers-DmWiJa2I.js.map → containers-Mu1LMGV1.js.map} +1 -1
- package/dist/{copyable-B3Gwgdqc.js → copyable-ClBuk_UK.js} +4 -4
- package/dist/{copyable-B3Gwgdqc.js.map → copyable-ClBuk_UK.js.map} +1 -1
- package/dist/{data-display-DafIvCl5.js → data-display-DT_khPl_.js} +98 -87
- package/dist/data-display-DT_khPl_.js.map +1 -0
- package/dist/{date-BgK3bTdo.js → date-DCrsDTZc.js} +5 -5
- package/dist/{date-BgK3bTdo.js.map → date-DCrsDTZc.js.map} +1 -1
- package/dist/{date-picker-CF-DtUpF.js → date-picker-ay0Pha_a.js} +594 -593
- package/dist/date-picker-ay0Pha_a.js.map +1 -0
- package/dist/date-pickers-Ccw8DL2b.js +175 -0
- package/dist/date-pickers-Ccw8DL2b.js.map +1 -0
- package/dist/{display-DsQTVzMz.js → display-hAc1HjpI.js} +49 -49
- package/dist/display-hAc1HjpI.js.map +1 -0
- package/dist/dropdown-menu-Cl4X7L5S.js +193 -0
- package/dist/dropdown-menu-Cl4X7L5S.js.map +1 -0
- package/dist/editable-text-recipe-Cn61kEcv.js +10 -0
- package/dist/editable-text-recipe-Cn61kEcv.js.map +1 -0
- package/dist/features/activities.js +398 -375
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +188 -179
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +683 -0
- package/dist/features/appointment-calendar.js.map +1 -0
- package/dist/features/async-preview.js +109 -107
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +137 -137
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer.js +255 -255
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +254 -248
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +35 -32
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +118 -117
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +233 -231
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +789 -775
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +922 -902
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +28 -24
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +18 -15
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +12 -12
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +15 -13
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +11 -5
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +493 -489
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-BYIhtitP.js +239 -0
- package/dist/feedback-BYIhtitP.js.map +1 -0
- package/dist/{field-affordance-recipes-qQeIf4lG.js → field-affordance-recipes-DZhnIL_Y.js} +11 -18
- package/dist/field-affordance-recipes-DZhnIL_Y.js.map +1 -0
- package/dist/{filters-BkHH53uv.js → filters-BGfvjP4d.js} +589 -580
- package/dist/filters-BGfvjP4d.js.map +1 -0
- package/dist/{form-field-DUt4UxSV.js → form-field-CwH9y77i.js} +6 -5
- package/dist/form-field-CwH9y77i.js.map +1 -0
- package/dist/{form-sizing-By94KzXE.js → form-sizing-BdP_Mf5p.js} +39 -44
- package/dist/form-sizing-BdP_Mf5p.js.map +1 -0
- package/dist/{forms-Bzha-Y3B.js → forms-B9G_xwzi.js} +8 -8
- package/dist/{forms-Bzha-Y3B.js.map → forms-B9G_xwzi.js.map} +1 -1
- package/dist/{forms-numeric-C0bvjRPZ.js → forms-numeric-B_jraJaQ.js} +309 -309
- package/dist/forms-numeric-B_jraJaQ.js.map +1 -0
- package/dist/{header-BOefOKd1.js → header-CGXuhcRm.js} +160 -153
- package/dist/header-CGXuhcRm.js.map +1 -0
- package/dist/{hooks-9k_TtmKh.js → hooks-Dkz0K2WT.js} +2 -2
- package/dist/{hooks-9k_TtmKh.js.map → hooks-Dkz0K2WT.js.map} +1 -1
- package/dist/{icon-badge-CAuKupo9.js → icon-badge-DYKIwvOV.js} +4 -4
- package/dist/{icon-badge-CAuKupo9.js.map → icon-badge-DYKIwvOV.js.map} +1 -1
- package/dist/index.js +3 -3
- package/dist/input-CZw8iU99.js +21 -0
- package/dist/input-CZw8iU99.js.map +1 -0
- package/dist/input-DQdEd0YD.js +263 -0
- package/dist/input-DQdEd0YD.js.map +1 -0
- package/dist/{interaction-recipes-CHr0dJUs.js → interaction-recipes-XR9ZpVYL.js} +2 -1
- package/dist/interaction-recipes-XR9ZpVYL.js.map +1 -0
- package/dist/item-K5_ghvze.js +275 -0
- package/dist/item-K5_ghvze.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +71 -0
- package/dist/lib/editable-text-recipe.d.ts +4 -4
- package/dist/lib/field-affordance-recipes.d.ts +2 -2
- package/dist/lib/interaction-recipes.d.ts +5 -0
- package/dist/lib/theme-mode-css.d.ts +7 -0
- package/dist/lib/tone-recipes.d.ts +8 -0
- package/dist/lib/ui-provider/types.d.ts +2 -2
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-DcTtAaeC.js → media-gallery-3zIVLMWH.js} +8 -8
- package/dist/media-gallery-3zIVLMWH.js.map +1 -0
- package/dist/{mentions-D-uyCh01.js → mentions-utuUvH1K.js} +144 -142
- package/dist/mentions-utuUvH1K.js.map +1 -0
- package/dist/{message-CdHgIWKf.js → message-DZ_ruyUV.js} +6 -5
- package/dist/message-DZ_ruyUV.js.map +1 -0
- package/dist/{metadata-list-X5rYAKSB.js → metadata-list-8N16ZMW_.js} +130 -119
- package/dist/metadata-list-8N16ZMW_.js.map +1 -0
- package/dist/{navigation-D3KwXmaq.js → navigation-Bnotn4AQ.js} +19 -19
- package/dist/navigation-Bnotn4AQ.js.map +1 -0
- package/dist/{navigation-HJf5zxlH.js → navigation-BzhHI3lo.js} +36 -35
- package/dist/navigation-BzhHI3lo.js.map +1 -0
- package/dist/{navigation-row-recipes-BVowojQw.js → navigation-row-recipes-BFLCk_Aq.js} +2 -2
- package/dist/{navigation-row-recipes-BVowojQw.js.map → navigation-row-recipes-BFLCk_Aq.js.map} +1 -1
- package/dist/{number-DMhe-Vsk.js → number-DbV1Dija.js} +36 -34
- package/dist/{number-DMhe-Vsk.js.map → number-DbV1Dija.js.map} +1 -1
- package/dist/{overflow-tab-bar-sQHXLlwQ.js → overflow-tab-bar-CWY7Nogn.js} +105 -103
- package/dist/overflow-tab-bar-CWY7Nogn.js.map +1 -0
- package/dist/{overlays-I0axtYA6.js → overlays-DNWmZrJ4.js} +14 -12
- package/dist/overlays-DNWmZrJ4.js.map +1 -0
- package/dist/{page-B5dTH9gE.js → page-Bgl1F560.js} +8 -8
- package/dist/{page-B5dTH9gE.js.map → page-Bgl1F560.js.map} +1 -1
- package/dist/{page-header-commands-DjzFEq3E.js → page-header-commands-DOb6WsfD.js} +5 -5
- package/dist/{page-header-commands-DjzFEq3E.js.map → page-header-commands-DOb6WsfD.js.map} +1 -1
- package/dist/pagination-BL25hu2s.js +158 -0
- package/dist/pagination-BL25hu2s.js.map +1 -0
- package/dist/{popover-Di55PyAI.js → popover-7_m66eYW.js} +8 -7
- package/dist/{popover-Di55PyAI.js.map → popover-7_m66eYW.js.map} +1 -1
- package/dist/popover-menu-B9WWygpa.js +100 -0
- package/dist/popover-menu-B9WWygpa.js.map +1 -0
- package/dist/{popover.recipes-Bdyhj2db.js → popover.recipes-D3j8R8Yp.js} +17 -10
- package/dist/popover.recipes-D3j8R8Yp.js.map +1 -0
- package/dist/{primitives-B-CkiEMU.js → primitives-BFK08r9M.js} +45 -44
- package/dist/primitives-BFK08r9M.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-rnS8-uAW.js → progress-B1VnCT0K.js} +5 -5
- package/dist/{progress-rnS8-uAW.js.map → progress-B1VnCT0K.js.map} +1 -1
- package/dist/{receipt-D0oswZ0p.js → receipt-BVSOH3Xo.js} +9 -6
- package/dist/{receipt-D0oswZ0p.js.map → receipt-BVSOH3Xo.js.map} +1 -1
- package/dist/{rich-text-DvGulsNJ.js → rich-text-GOUyKQ-s.js} +3 -3
- package/dist/{rich-text-DvGulsNJ.js.map → rich-text-GOUyKQ-s.js.map} +1 -1
- package/dist/{rich-text-editor-sMU_Scqm.js → rich-text-editor-cRLC-eBK.js} +418 -426
- package/dist/rich-text-editor-cRLC-eBK.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DfXg0-VC.js +94 -0
- package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +1 -0
- package/dist/{scroll-area-Bt_vXY2b.js → scroll-area-DcI-M1UT.js} +2 -2
- package/dist/{scroll-area-Bt_vXY2b.js.map → scroll-area-DcI-M1UT.js.map} +1 -1
- package/dist/{separator-C8DlRGwF.js → separator-BDV-Y648.js} +3 -3
- package/dist/{separator-C8DlRGwF.js.map → separator-BDV-Y648.js.map} +1 -1
- package/dist/{separator-CYHnjsAb.js → separator-Bom7NsGO.js} +2 -2
- package/dist/{separator-CYHnjsAb.js.map → separator-Bom7NsGO.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-CQW3b-Cu.js → settings-ybnjVwbd.js} +20 -19
- package/dist/settings-ybnjVwbd.js.map +1 -0
- package/dist/{sheet-4SEvVYzA.js → sheet-CGpB3omz.js} +8 -7
- package/dist/{sheet-4SEvVYzA.js.map → sheet-CGpB3omz.js.map} +1 -1
- package/dist/{sidebar-d7Dg80ln.js → sidebar-A0ElHINE.js} +14 -13
- package/dist/{sidebar-d7Dg80ln.js.map → sidebar-A0ElHINE.js.map} +1 -1
- package/dist/{sidebar-C7WWR29L.js → sidebar-CPx_7YBa.js} +183 -182
- package/dist/sidebar-CPx_7YBa.js.map +1 -0
- package/dist/{skeleton-Cz890JZF.js → skeleton-Byjnt7qr.js} +3 -3
- package/dist/{skeleton-Cz890JZF.js.map → skeleton-Byjnt7qr.js.map} +1 -1
- package/dist/smart-card-DiC5aac3.js +604 -0
- package/dist/smart-card-DiC5aac3.js.map +1 -0
- package/dist/{structure-DC2dygdA.js → structure-BmisBK-3.js} +2 -2
- package/dist/{structure-DC2dygdA.js.map → structure-BmisBK-3.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/table-BweFy_P9.js +1530 -0
- package/dist/table-BweFy_P9.js.map +1 -0
- package/dist/{table-CIKyLUsy.js → table-DsfzoUia.js} +75 -63
- package/dist/table-DsfzoUia.js.map +1 -0
- package/dist/{tabs-DwBJfjxX.js → tabs-CDocW5D1.js} +14 -13
- package/dist/tabs-CDocW5D1.js.map +1 -0
- package/dist/text-inputs-f9Ia-aCi.js +353 -0
- package/dist/text-inputs-f9Ia-aCi.js.map +1 -0
- package/dist/theme-mode-css-BB-_RYab.js +14 -0
- package/dist/theme-mode-css-BB-_RYab.js.map +1 -0
- package/dist/theme-scope-BJ6eE2xt.js +50 -0
- package/dist/theme-scope-BJ6eE2xt.js.map +1 -0
- package/dist/theme.css +285 -228
- package/dist/themes/green.css +16 -12
- package/dist/timelines-CwM_9IhD.js +457 -0
- package/dist/timelines-CwM_9IhD.js.map +1 -0
- package/dist/{tone-recipes-CPoExcTE.js → tone-recipes-BPsRAvhu.js} +5 -2
- package/dist/tone-recipes-BPsRAvhu.js.map +1 -0
- package/dist/{tooltip-CsfgrfS7.js → tooltip-yiRJUFjp.js} +4 -4
- package/dist/{tooltip-CsfgrfS7.js.map → tooltip-yiRJUFjp.js.map} +1 -1
- package/dist/{tree-BiKhg8AY.js → tree-WnKQzwbq.js} +9 -9
- package/dist/{tree-BiKhg8AY.js.map → tree-WnKQzwbq.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-DTRkE9zL.js → typography-UTnveOEy.js} +6 -6
- package/dist/typography-UTnveOEy.js.map +1 -0
- package/dist/typography.js +2 -2
- package/dist/{ui-provider-1D_NSYzO.js → ui-provider-C_U0Xma4.js} +3 -3
- package/dist/ui-provider-C_U0Xma4.js.map +1 -0
- package/dist/ui-provider.js +2 -2
- package/dist/{upload-BO8-CLN6.js → upload-CXyxmQBP.js} +13 -12
- package/dist/upload-CXyxmQBP.js.map +1 -0
- package/dist/{upload-queue-EOC8g1gf.js → upload-queue-Boscubn9.js} +11 -9
- package/dist/upload-queue-Boscubn9.js.map +1 -0
- package/dist/{usage-card-obRaBskq.js → usage-card-BhO5eqkX.js} +53 -37
- package/dist/usage-card-BhO5eqkX.js.map +1 -0
- package/dist/{utils-l5LpDw2z.js → utils-BRhFDwuU.js} +59 -44
- package/dist/utils-BRhFDwuU.js.map +1 -0
- package/dist/{value-inputs-TAYMX111.js → value-inputs-DXPDjvBU.js} +268 -252
- package/dist/value-inputs-DXPDjvBU.js.map +1 -0
- package/dist/{value-typography-b8wpz1eX.js → value-typography-BP8OG6h5.js} +2 -2
- package/dist/{value-typography-b8wpz1eX.js.map → value-typography-BP8OG6h5.js.map} +1 -1
- package/dist/{workspace-DH0v0KcB.js → workspace-Cdrg7k9f.js} +34 -33
- package/dist/workspace-Cdrg7k9f.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +2 -2
- package/docs/consumer-skill/references/agents-md.md +1 -1
- package/docs/consumer-skill/references/composition.md +8 -6
- package/docs/consumer-skill/references/integration.md +4 -3
- package/docs/consumer-skill/references/public-api.json +105 -2
- package/docs/consumer-skill/references/review.md +7 -0
- package/docs/consumer-skill/references/theming.md +71 -6
- package/docs/consumer-skill/references/tokens.json +1 -1
- package/docs/consumer-skill/references/workflows.md +25 -0
- package/docs/consumer-skill/scripts/composition-policy.mjs +3 -2
- package/docs/consumer-skill/scripts/surface-policy.mjs +11 -0
- package/package.json +8 -4
- package/dist/accordion-B6a3vVgA.js.map +0 -1
- package/dist/action-menu-TzCoSlwL.js +0 -280
- package/dist/action-menu-TzCoSlwL.js.map +0 -1
- package/dist/affordance-geometry.generated-B5iu-Mkr.js +0 -69
- package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +0 -1
- package/dist/ai-artifact-BMJdv-6q.js +0 -1115
- package/dist/ai-artifact-BMJdv-6q.js.map +0 -1
- package/dist/attachment-BtfhGm8i.js +0 -245
- package/dist/attachment-BtfhGm8i.js.map +0 -1
- package/dist/auth-CYxKfo69.js.map +0 -1
- package/dist/avatar-BBnEJIx8.js.map +0 -1
- package/dist/badge-MrKVNzW9.js.map +0 -1
- package/dist/batch-action-bar-BZGDG-Si.js.map +0 -1
- package/dist/breadcrumbs-D5t7I023.js.map +0 -1
- package/dist/buttons-SbIcm1HJ.js.map +0 -1
- package/dist/cards-CiiHpKYd.js +0 -66
- package/dist/cards-CiiHpKYd.js.map +0 -1
- package/dist/chart-QfrARkXl.js.map +0 -1
- package/dist/choice-inputs-t6w3ATNz.js.map +0 -1
- package/dist/code-block-Dgbu-CU3.js.map +0 -1
- package/dist/combobox-2Ic8N9bL.js +0 -278
- package/dist/combobox-2Ic8N9bL.js.map +0 -1
- package/dist/combobox-DLl0bfiq.js +0 -867
- package/dist/combobox-DLl0bfiq.js.map +0 -1
- package/dist/comments-BpDuCUUu.js.map +0 -1
- package/dist/data-display-DafIvCl5.js.map +0 -1
- package/dist/date-picker-CF-DtUpF.js.map +0 -1
- package/dist/date-pickers-BmzxJl5l.js +0 -174
- package/dist/date-pickers-BmzxJl5l.js.map +0 -1
- package/dist/display-DsQTVzMz.js.map +0 -1
- package/dist/dropdown-menu-E2qmdC7o.js +0 -193
- package/dist/dropdown-menu-E2qmdC7o.js.map +0 -1
- package/dist/editable-text-recipe-Bkm6wKHp.js +0 -10
- package/dist/editable-text-recipe-Bkm6wKHp.js.map +0 -1
- package/dist/feedback-qNuMBtRH.js +0 -233
- package/dist/feedback-qNuMBtRH.js.map +0 -1
- package/dist/field-affordance-recipes-qQeIf4lG.js.map +0 -1
- package/dist/filters-BkHH53uv.js.map +0 -1
- package/dist/form-field-DUt4UxSV.js.map +0 -1
- package/dist/form-sizing-By94KzXE.js.map +0 -1
- package/dist/forms-numeric-C0bvjRPZ.js.map +0 -1
- package/dist/header-BOefOKd1.js.map +0 -1
- package/dist/input-DWhBBBww.js +0 -262
- package/dist/input-DWhBBBww.js.map +0 -1
- package/dist/input-Ddi_LSYv.js +0 -20
- package/dist/input-Ddi_LSYv.js.map +0 -1
- package/dist/interaction-recipes-CHr0dJUs.js.map +0 -1
- package/dist/item-DEmDiTlD.js +0 -265
- package/dist/item-DEmDiTlD.js.map +0 -1
- package/dist/media-gallery-DcTtAaeC.js.map +0 -1
- package/dist/mentions-D-uyCh01.js.map +0 -1
- package/dist/message-CdHgIWKf.js.map +0 -1
- package/dist/metadata-list-X5rYAKSB.js.map +0 -1
- package/dist/navigation-D3KwXmaq.js.map +0 -1
- package/dist/navigation-HJf5zxlH.js.map +0 -1
- package/dist/overflow-tab-bar-sQHXLlwQ.js.map +0 -1
- package/dist/overlays-I0axtYA6.js.map +0 -1
- package/dist/pagination-3bPA_a6K.js +0 -149
- package/dist/pagination-3bPA_a6K.js.map +0 -1
- package/dist/popover-menu-B71Tn2Qz.js +0 -99
- package/dist/popover-menu-B71Tn2Qz.js.map +0 -1
- package/dist/popover.recipes-Bdyhj2db.js.map +0 -1
- package/dist/primitives-B-CkiEMU.js.map +0 -1
- package/dist/rich-text-editor-sMU_Scqm.js.map +0 -1
- package/dist/rich-text-editor.recipes-CadiF_Uu.js +0 -88
- package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +0 -1
- package/dist/settings-CQW3b-Cu.js.map +0 -1
- package/dist/sidebar-C7WWR29L.js.map +0 -1
- package/dist/smart-card-lFKxn5Hu.js +0 -595
- package/dist/smart-card-lFKxn5Hu.js.map +0 -1
- package/dist/spinner-fa3h1Aif.js +0 -80
- package/dist/spinner-fa3h1Aif.js.map +0 -1
- package/dist/table-CIKyLUsy.js.map +0 -1
- package/dist/table-CrcLN9Io.js +0 -1458
- package/dist/table-CrcLN9Io.js.map +0 -1
- package/dist/tabs-DwBJfjxX.js.map +0 -1
- package/dist/text-inputs-aaK9wcDT.js +0 -326
- package/dist/text-inputs-aaK9wcDT.js.map +0 -1
- package/dist/theme-scope-kStaAer0.js +0 -39
- package/dist/theme-scope-kStaAer0.js.map +0 -1
- package/dist/timelines-C_SBwHNP.js +0 -442
- package/dist/timelines-C_SBwHNP.js.map +0 -1
- package/dist/tone-recipes-CPoExcTE.js.map +0 -1
- package/dist/typography-DTRkE9zL.js.map +0 -1
- package/dist/ui-provider-1D_NSYzO.js.map +0 -1
- package/dist/upload-BO8-CLN6.js.map +0 -1
- package/dist/upload-queue-EOC8g1gf.js.map +0 -1
- package/dist/usage-card-obRaBskq.js.map +0 -1
- package/dist/utils-l5LpDw2z.js.map +0 -1
- package/dist/value-inputs-TAYMX111.js.map +0 -1
- package/dist/workspace-DH0v0KcB.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"data-display-DafIvCl5.js","names":["_Fragment","_Fragment","useDensityConfig","cn","DisplayLabel","Heading","Text","Grid","Stack","EmptyContent","EmptyHeader","Empty","EmptyMedia","Value","MonoValue","Badge","Separator","ContentBlock","ItemMedia","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","Fragment$1","ScaleBar","max","i","value","label","KVRow","badge","badgeTone","DenseInfoDashboard","statusBadges","b","className","rows","row","scale","secondaryRows","footerBadges","footerText","InlineStat","ValuePrimitive","mono","labelContent","jsx","labelClassName","layout","valueClassName","defaultDenseInfoStrings","DenseInfoClassification","stringsProp","strings","useStrings","stats","stat","items","item","totalValue","totalLabel","DenseInfoFinancial","headerBadges","lineItems","totalAmount","DenseInfoProjectCard","percentage","totalTasks","completedTasks","circumference","dashOffset","title","statusTone","statusLabel","description","metaPairs","idx","pair","date","priority","DenseInfoScoreCard","barColor","scoreLevel","score","scoreTotal","scoreFilled","defaultEmptyStateStrings","PADDING_CLASS","MEDIA_VARIANT_TO_PRIMITIVE","MEDIA_EXTRA_CLASS","EmptyState","forwardRef","resolvedPadding","padding","defaultScale","resolvedTitle","resolvedDescription","mediaNode","renderMedia","media","showMedia","ariaLabel","border","mediaVariant","actions","footer","DocumentStackIllustration","InboxCleanIllustration","trayClip","useId","SearchGlassIllustration","Search","StackedCardsIllustration","fadeId","UsersCircleIllustration","renderTitleBadge","RelationshipCardFrame","props","hasBody","alertSlot","metadataSlot","primaryActionSlot","selectorSlot","detailsSlot","headerClassName","icon","titleBadge","overflowActionSlot","bodyClassName"],"sources":["../src/components/blocks/data-display/dense-info-card/helpers.tsx","../src/components/blocks/data-display/dense-info-card/partials/dense-info-dashboard.tsx","../src/components/blocks/data-display/inline-stat/inline-stat.tsx","../src/components/blocks/data-display/dense-info-card/dense-info.strings.ts","../src/components/blocks/data-display/dense-info-card/partials/dense-info-classification.tsx","../src/components/blocks/data-display/dense-info-card/partials/dense-info-financial.tsx","../src/components/blocks/data-display/dense-info-card/partials/dense-info-project.tsx","../src/components/blocks/data-display/dense-info-card/partials/dense-info-score.tsx","../src/components/blocks/data-display/empty-state/empty-state.strings.ts","../src/components/blocks/data-display/empty-state/empty-state.tsx","../src/components/blocks/data-display/empty-state/partials/illustrations/document-stack.tsx","../src/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.tsx","../src/components/blocks/data-display/empty-state/partials/illustrations/search-glass.tsx","../src/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.tsx","../src/components/blocks/data-display/empty-state/partials/illustrations/users-circle.tsx","../src/components/blocks/data-display/relationship-card-frame.tsx"],"sourcesContent":["import { Badge } from '../../../base/badge';\nimport { Text } from '../../../typography/text';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\nimport { type DenseInfoBadgeTone } from './types';\n\n/* ─── Shared: Complexity / Scale Bar ─────────────────────────────────────── */\n\nexport function ScaleBar({\n\tvalue,\n\tmax = 5,\n\tlabel,\n}: {\n\t/** Current amount, used to fill the bar. */\n\tvalue: number;\n\t/** Value representing a full bar. Default: `5`. */\n\tmax?: number;\n\t/** Caption shown beside the bar. */\n\tlabel?: string;\n}) {\n\treturn (\n\t\t<div className={cn('helpers--component', 'flex items-center gap-space-md')}>\n\t\t\t<div className=\"flex items-center gap-space-xs\">\n\t\t\t{Array.from({ length: max }, (_, i) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={i}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'h-1.5 w-3 rounded-full',\n\t\t\t\t\t\ti < value ? 'bg-muted-foreground' : 'bg-muted',\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t))}\n\t\t\t</div>\n\t\t\t{!!label && (\n\t\t\t\t<Text\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n/* ─── Shared: Key-Value Row ──────────────────────────────────────────────── */\n\nexport function KVRow({\n\tlabel,\n\tvalue,\n\tbadge,\n\tbadgeTone,\n}: {\n\t/** Row label. */\n\tlabel: string;\n\t/** Row value. */\n\tvalue?: string;\n\t/** Chip shown after the value. */\n\tbadge?: string;\n\t/** Badge tone for the chip. */\n\tbadgeTone?: DenseInfoBadgeTone;\n}) {\n\treturn (\n\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"md\">\n\t\t\t<Text\n\t\t\t\tsize=\"xs\"\n\t\t\t\tclassName=\"shrink-0 text-muted-foreground\"\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t\t{!!badge && (\n\t\t\t\t<Badge\n\t\t\t\t\ttone={badgeTone ?? 'secondary'}\n\t\t\t\t>\n\t\t\t\t\t{badge}\n\t\t\t\t</Badge>\n\t\t\t)}\n\t\t\t{!!value && !badge && (\n\t\t\t\t<Text\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\tclassName=\"text-right tabular-nums\"\n\t\t\t\t>\n\t\t\t\t\t{value}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import { ContentBlock } from '../../../../base/display';\nimport { Badge } from '../../../../base/badge';\nimport { Text } from '../../../../typography/text';\nimport { Stack } from '../../../../base/structure';\nimport { type DenseInfoDashboardProps } from '../types';\nimport { KVRow, ScaleBar } from '../helpers';\nimport { cn } from '../../../../../lib/utils';\n\nexport function DenseInfoDashboard({\n\ttitle,\n\tdescription,\n\tstatusBadges,\n\trows,\n\tsecondaryRows,\n\tscale,\n\tfooterBadges,\n\tfooterText,\n\tactions,\n\tclassName,\n}: DenseInfoDashboardProps) {\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\ttitleSuffix={statusBadges.length > 0 ? (\n\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t{statusBadges.map((b) => (\n\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\tkey={b.label}\n\t\t\t\t\t\t\ttone={b.tone}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{b.label}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t) : undefined}\n\t\t\tactions={actions}\n\t\t\tclassName={cn('dense-info-dashboard--component', className)}\n\t\t>\n\t\t\t{/* Status badges sit with the title; groups below are separated by the\n\t\t\t section gap alone, so no rules divide the card. */}\n\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t{rows.map((row) => (\n\t\t\t\t\t\t<KVRow\n\t\t\t\t\t\t\tkey={row.label}\n\t\t\t\t\t\t\t{...row}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\n\t\t\t\t\t{!!scale && (\n\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{scale.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<ScaleBar\n\t\t\t\t\t\t\t\tvalue={scale.value}\n\t\t\t\t\t\t\t\tmax={scale.max}\n\t\t\t\t\t\t\t\tlabel={`${String(scale.value)}/${String(scale.max ?? 5)}`}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{!!secondaryRows && secondaryRows.length > 0 && (\n\t\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t{secondaryRows.map((row) => (\n\t\t\t\t\t\t\t<KVRow\n\t\t\t\t\t\t\t\tkey={row.label}\n\t\t\t\t\t\t\t\t{...row}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t{(!!footerBadges || !!footerText) && (\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{!!footerBadges &&\n\t\t\t\t\t\t\tfooterBadges.map((b) => (\n\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\tkey={b.label}\n\t\t\t\t\t\t\t\t\ttone={b.tone}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{b.label}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{!!footerText && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{footerText}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nDenseInfoDashboard.displayName = 'DenseInfoDashboard';\n","/**\n * InlineStat — label + value pair, the workhorse of detail panels and card\n * footers. Three layouts:\n *\n * - `between` (default): label and value pushed to opposite ends of the row.\n * - `inline`: label sits immediately before the value, separator-style.\n * - `stacked`: label above (xs secondary), value below (md).\n *\n * `mono` switches the value to the monospace identifier role (references,\n * codes, keys). Amounts, counts, percentages and dates stay in the sans UI\n * font: pass `valueClassName=\"tabular-nums\"` (or a value primitive such as\n * `Money` / `Percent`, which are already tabular) when figures should align.\n * Use `valueClassName` for one-off colour/weight overrides; the surrounding\n * row is intentionally plain so consumers can stack many of these without\n * visual clutter.\n */\nimport type { ReactNode } from 'react';\n\nimport { Stack } from '../../../base/structure';\nimport { MonoValue, Value } from '../../../primitives';\nimport { DisplayLabel } from '../../../typography';\nimport { cn } from '../../../../lib/utils';\n\nexport type InlineStatLayout = 'between' | 'inline' | 'stacked';\n\nexport interface InlineStatProps {\n\t/** Display label. Scalar labels use DisplayLabel; rich content owns its typography. */\n\tlabel: ReactNode;\n\t/** The figure to show. */\n\tvalue: ReactNode;\n\t/** Whether the label sits above the value or beside it. */\n\tlayout?: InlineStatLayout;\n\t/** Renders the value in tabular monospace figures. */\n\tmono?: boolean;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Merged onto the label. */\n\tlabelClassName?: string;\n\t/** Merged onto the value. */\n\tvalueClassName?: string;\n}\n\nexport function InlineStat({\n\tlabel,\n\tvalue,\n\tlayout = 'between',\n\tmono = false,\n\tclassName,\n\tlabelClassName,\n\tvalueClassName,\n}: InlineStatProps) {\n\tconst ValuePrimitive = mono ? MonoValue : Value;\n\tconst labelContent = typeof label === 'string' || typeof label === 'number'\n\t\t? <DisplayLabel className={labelClassName}>{label}</DisplayLabel>\n\t\t: <span className={labelClassName}>{label}</span>;\n\n\tif (layout === 'stacked') {\n\t\treturn (\n\t\t\t<Stack gap=\"2xs\" className={cn('inline-stat--component', className)}>\n\t\t\t\t{labelContent}\n\t\t\t\t<ValuePrimitive\n\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\tclassName={cn('text-sm leading-snug', mono && 'tabular-nums', valueClassName)}\n\t\t\t\t>\n\t\t\t\t\t{value}\n\t\t\t\t</ValuePrimitive>\n\t\t\t</Stack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Stack\n\t\t\tdirection=\"horizontal\"\n\t\t\tgap=\"md\"\n\t\t\tjustify={layout === 'between' ? 'between' : 'start'}\n\t\t\twrap={false}\n\t\t\tclassName={cn('inline-stat--component', className)}\n\t\t>\n\t\t\t{labelContent}\n\t\t\t<ValuePrimitive\n\t\t\t\tsize=\"inherit\"\n\t\t\t\tclassName={cn('text-sm leading-snug', mono && 'tabular-nums', valueClassName)}\n\t\t\t>\n\t\t\t\t{value}\n\t\t\t</ValuePrimitive>\n\t\t</Stack>\n\t);\n}\n\nInlineStat.displayName = 'InlineStat';\n","export interface DenseInfoStrings {\n\t/** Total number of records across all pages. */\n\ttotal: string;\n\t/** Word after the task count (\"12/20 tasks\"). */\n\ttasks: string;\n\t/** Word after the priority value (\"High priority\"). Additive, so optional for existing dictionaries. */\n\tpriority?: string;\n}\n\nexport const defaultDenseInfoStrings: Required<DenseInfoStrings> = {\n\ttotal: 'Total',\n\ttasks: 'tasks',\n\tpriority: 'priority',\n};\n","import { ContentBlock } from '../../../../base/display';\nimport { Badge } from '../../../../base/badge';\nimport { Grid, Stack } from '../../../../base/structure';\nimport { Value } from '../../../../primitives';\nimport { Text } from '../../../../typography/text';\nimport { Heading } from '../../../../typography/heading';\nimport { InlineStat } from '../../inline-stat/inline-stat';\nimport { Separator } from '../../../../base/display/separator';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../../base/item';\nimport { cn } from '../../../../../lib/utils';\nimport { useStrings } from '../../../../../lib/strings';\nimport { defaultDenseInfoStrings } from '../dense-info.strings';\nimport { type DenseInfoClassificationProps } from '../types';\n\nexport function DenseInfoClassification({\n\ttitle,\n\tdescription,\n\tstats,\n\titems,\n\ttotalLabel,\n\ttotalValue,\n\tfooterBadges,\n\tfooterText,\n\tactions,\n\tclassName,\n\tstrings: stringsProp,\n}: DenseInfoClassificationProps) {\n\tconst strings = useStrings(defaultDenseInfoStrings, stringsProp);\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tactions={actions}\n\t\t\tclassName={cn('dense-info-classification--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t{/* Plain figures, no tile per stat: the grid gap separates them and the\n\t\t\t\t larger section gap separates the stats from the breakdown. */}\n\t\t\t\t<Grid columns={{ base: 2, sm: 3 }} gap=\"xl\">\n\t\t\t\t\t{stats.map((stat) => (\n\t\t\t\t\t\t<Stack gap=\"dense\" key={stat.label} className=\"min-w-0 items-start\">\n\t\t\t\t\t\t\t<Heading tag=\"h4\" className=\"border-none pb-0 text-base font-semibold tabular-nums\">\n\t\t\t\t\t\t\t\t{stat.value}\n\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" weight=\"medium\">\n\t\t\t\t\t\t\t\t{stat.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!!stat.trendBadge && (\n\t\t\t\t\t\t\t\t<Badge tone={stat.trendTone ?? 'secondary'} className=\"self-start\">\n\t\t\t\t\t\t\t\t\t{stat.trendBadge}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t))}\n\t\t\t\t</Grid>\n\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t<Item key={item.label} size=\"sm\" role=\"listitem\">\n\t\t\t\t\t\t\t\t<ItemMedia>\n\t\t\t\t\t\t\t\t\t<span className={cn('h-2 w-2 shrink-0 rounded-full', item.dotColor)} />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t\t<ItemTitle bold={false} className=\"gap-space-md\">\n\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t{!!item.badge && (\n\t\t\t\t\t\t\t\t\t\t\t<Badge tone={item.badgeTone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</ItemTitle>\n\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t\t<Value weight=\"semibold\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{item.value}\n\t\t\t\t\t\t\t\t\t</Value>\n\t\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ItemGroup>\n\n\t\t\t\t\t{/* One rule above the grand total; the Stack gap sits on both sides of it. */}\n\t\t\t\t\t{!!totalValue && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t<InlineStat\n\t\t\t\t\t\t\t\tlabel={<Text tag=\"span\" weight=\"bold\" lineHeight=\"tight\">{totalLabel ?? strings.total}</Text>}\n\t\t\t\t\t\t\t\tvalue={totalValue}\n\t\t\t\t\t\t\t\tvalueClassName=\"text-sm font-bold tabular-nums\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{(!!footerBadges || !!footerText) && (\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{!!footerBadges && footerBadges.map((b) => (\n\t\t\t\t\t\t\t<Badge key={b.label} tone={b.tone}>\n\t\t\t\t\t\t\t\t{b.label}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t\t{!!footerText && (\n\t\t\t\t\t\t\t<Text size=\"xs\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t{footerText}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nDenseInfoClassification.displayName = 'DenseInfoClassification';\n","import { ContentBlock } from '../../../../base/display';\nimport { Stack } from '../../../../base/structure';\nimport { Badge } from '../../../../base/badge';\nimport { Value } from '../../../../primitives';\nimport { Text } from '../../../../typography/text';\nimport { InlineStat } from '../../inline-stat/inline-stat';\nimport { Separator } from '../../../../base/display/separator';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemGroup,\n\tItemTitle,\n} from '../../../../base/item';\nimport { type DenseInfoFinancialProps } from '../types';\nimport { cn } from '../../../../../lib/utils';\nimport { useStrings } from '../../../../../lib/strings';\nimport { defaultDenseInfoStrings } from '../dense-info.strings';\n\nexport function DenseInfoFinancial({\n\ttitle,\n\tdescription,\n\theaderBadges,\n\tlineItems,\n\ttotalLabel,\n\ttotalAmount,\n\tfooterBadges,\n\tfooterText,\n\tactions,\n\tclassName,\n\tstrings: stringsProp,\n}: DenseInfoFinancialProps) {\n\tconst strings = useStrings(defaultDenseInfoStrings, stringsProp);\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\ttitleSuffix={headerBadges.length > 0 ? (\n\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t{headerBadges.map((b) => (\n\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\tkey={b.label}\n\t\t\t\t\t\t\ttone={b.tone}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{b.label}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t) : undefined}\n\t\t\tactions={actions}\n\t\t\tclassName={cn('dense-info-financial--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t{/* Line items touch (their density padding is the row rhythm); a single\n\t\t\t\t rule sits above the grand total with the Stack gap on both sides. */}\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t<ItemGroup>\n\t\t\t\t\t\t{lineItems.map((item) => (\n\t\t\t\t\t\t\t<Item key={item.label} size=\"sm\" role=\"listitem\">\n\t\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t\t<ItemTitle className=\"gap-space-md\">\n\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t{!!item.badge && (\n\t\t\t\t\t\t\t\t\t\t\t<Badge tone={item.badgeTone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</ItemTitle>\n\t\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t\t<Value weight=\"semibold\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{item.amount}\n\t\t\t\t\t\t\t\t\t</Value>\n\t\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t\t</Item>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ItemGroup>\n\n\t\t\t\t\t{!!totalAmount && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t<InlineStat\n\t\t\t\t\t\t\t\tlabel={<Text tag=\"span\" weight=\"semibold\" lineHeight=\"tight\">{totalLabel ?? strings.total}</Text>}\n\t\t\t\t\t\t\t\tvalue={totalAmount}\n\t\t\t\t\t\t\t\tvalueClassName=\"text-sm font-semibold tabular-nums\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{(!!footerBadges || !!footerText) && (\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{!!footerBadges &&\n\t\t\t\t\t\t\tfooterBadges.map((b) => (\n\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\tkey={b.label}\n\t\t\t\t\t\t\t\t\ttone={b.tone}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{b.label}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{!!footerText && (\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{footerText}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nDenseInfoFinancial.displayName = 'DenseInfoFinancial';\n","import { ContentBlock } from '../../../../base/display';\nimport { Badge } from '../../../../base/badge';\nimport { Text } from '../../../../typography/text';\nimport { Heading } from '../../../../typography/heading';\nimport { Stack } from '../../../../base/structure';\nimport { type DenseInfoProjectCardProps } from '../types';\nimport { cn } from '../../../../../lib/utils';\nimport { useStrings } from '../../../../../lib/strings';\nimport { defaultDenseInfoStrings } from '../dense-info.strings';\n\nexport function DenseInfoProjectCard({\n\ttitle,\n\tdescription,\n\tstatusLabel,\n\tstatusTone,\n\tmetaPairs,\n\tdate,\n\tpriority,\n\tcompletedTasks,\n\ttotalTasks,\n\tactions,\n\tclassName,\n\tstrings: stringsProp,\n}: DenseInfoProjectCardProps) {\n\tconst strings = useStrings(defaultDenseInfoStrings, stringsProp);\n\tconst percentage = totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0;\n\tconst circumference = 2 * Math.PI * 7;\n\tconst dashOffset = circumference - (percentage / 100) * circumference;\n\n\treturn (\n\t\t<ContentBlock\n\t\t\tpadding=\"md\"\n\t\t\tactions={actions}\n\t\t\tclassName={cn('dense-info-project-card--component', className)}\n\t\t>\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t{/* The status reads with the title (no decorative folder glyph, no\n\t\t\t\t badge floating where actions go); date and priority are plain\n\t\t\t\t secondary text, and the task count needs no rule above it. */}\n\t\t\t\t<Stack gap=\"normal\">\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t\t<Heading tag=\"h5\" className=\"font-bold border-none pb-0\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t<Badge tone={statusTone} dot>\n\t\t\t\t\t\t\t{statusLabel}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t<Text type=\"secondary\" className=\"line-clamp-2\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\n\t\t\t\t{!!metaPairs && metaPairs.length > 0 && (\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t\t{metaPairs.map((pair, idx) => (\n\t\t\t\t\t\t\t<span key={pair.label} className=\"flex items-center gap-space-xs\">\n\t\t\t\t\t\t\t\t{idx > 0 && (\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"discrete\">•</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{!!pair.icon && (\n\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">{pair.icon}</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{pair.label}</Text>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t{(!!date || !!priority) && (\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"md\">\n\t\t\t\t\t\t{!!date && <Text size=\"xs\" type=\"secondary\">{date}</Text>}\n\t\t\t\t\t\t{!!priority && <Text size=\"xs\" type=\"secondary\">{priority} {strings.priority}</Text>}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t<div className=\"flex items-center gap-space-md\">\n\t\t\t\t\t<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" className=\"shrink-0\" aria-hidden=\"true\">\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"10\"\n\t\t\t\t\t\t\tcy=\"10\"\n\t\t\t\t\t\t\tr=\"7\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tclassName=\"stroke-border\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tcx=\"10\"\n\t\t\t\t\t\t\tcy=\"10\"\n\t\t\t\t\t\t\tr=\"7\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeDasharray={circumference}\n\t\t\t\t\t\t\tstrokeDashoffset={dashOffset}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tclassName=\"text-primary-accent\"\n\t\t\t\t\t\t\ttransform=\"rotate(-90 10 10)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\t<Text size=\"xs\" weight=\"medium\">\n\t\t\t\t\t\t{completedTasks}/{totalTasks} {strings.tasks}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nDenseInfoProjectCard.displayName = 'DenseInfoProjectCard';\n","import { ContentBlock } from '../../../../base/display';\nimport { Badge } from '../../../../base/badge';\nimport { Heading, Text } from '../../../../typography';\nimport { InlineStat } from '../../inline-stat/inline-stat';\nimport { Stack } from '../../../../base/structure';\nimport { cn } from '../../../../../lib/utils';\nimport { type DenseInfoScoreCardProps } from '../types';\n\nexport function DenseInfoScoreCard({\n\ttitle,\n\tdescription,\n\tstatusBadges,\n\tscore,\n\tscoreLevel,\n\tscoreFilled,\n\tscoreTotal = 10,\n\trows,\n\tfooterBadges,\n\tactions,\n\tclassName,\n}: DenseInfoScoreCardProps) {\n\tconst barColor =\n\t\tscoreLevel === 'good'\n\t\t\t? 'bg-success'\n\t\t\t: scoreLevel === 'medium'\n\t\t\t\t? 'bg-warning'\n\t\t\t\t: 'bg-destructive';\n\n\treturn (\n\t\t<ContentBlock\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\ttitleSuffix={statusBadges.length > 0 ? (\n\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"sm\">\n\t\t\t\t\t{statusBadges.map((b) => (\n\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\tkey={b.label}\n\t\t\t\t\t\t\ttone={b.tone}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{b.label}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t) : undefined}\n\t\t\tactions={actions}\n\t\t\tclassName={cn('dense-info-score-card--component', className)}\n\t\t>\n\t\t\t{/* The score, its factors and the footer are separated by the section gap\n\t\t\t alone; the segmented bar keeps its status colour. */}\n\t\t\t<Stack gap=\"2xl\">\n\t\t\t\t<Stack gap=\"md\" align=\"center\">\n\t\t\t\t\t<Heading\n\t\t\t\t\t\ttag=\"h2\"\n\t\t\t\t\t\tclassName=\"text-base font-bold tabular-nums border-none pb-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{String(score)}\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"center\" gap=\"xs\">\n\t\t\t\t\t\t{Array.from({ length: scoreTotal }, (_, i) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'h-5 w-2 rounded-radius-sm',\n\t\t\t\t\t\t\t\t\ti < scoreFilled ? barColor : 'bg-muted',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t{rows.map((row) => (\n\t\t\t\t\t\t<InlineStat\n\t\t\t\t\t\t\tkey={row.label}\n\t\t\t\t\t\t\tlabel={<Text tag=\"span\" size=\"xs\" type=\"secondary\" weight=\"medium\" lineHeight=\"tight\">{row.label}</Text>}\n\t\t\t\t\t\t\tvalue={row.value}\n\t\t\t\t\t\t\tvalueClassName=\"text-sm font-semibold text-right tabular-nums\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\n\t\t\t\t{!!footerBadges && footerBadges.length > 0 && (\n\t\t\t\t\t<Stack direction=\"horizontal\" wrap align=\"center\" gap=\"md\">\n\t\t\t\t\t\t{footerBadges.map((b) => (\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tkey={b.label}\n\t\t\t\t\t\t\t\ttone={b.tone}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{b.label}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</ContentBlock>\n\t);\n}\n\nDenseInfoScoreCard.displayName = 'DenseInfoScoreCard';\n","/**\n * Strings for `<EmptyState>`. English defaults — every piece of copy is\n * deep-merge-overridable per rule 8.\n *\n * `title`/`description` here are the *fallback* defaults the component\n * renders when neither the prop nor a per-illustration preset supplies\n * its own copy. In practice, the consumer usually passes an explicit\n * `title` / `description` per resource (\"No products\", \"No invoices yet\")\n * — these defaults exist so a bare `<EmptyState />` still renders\n * sensibly during scaffolding.\n */\nexport interface EmptyStateStrings {\n\t/** Surface title. */\n\ttitle: string;\n\t/** Supporting copy shown under the label. */\n\tdescription: string;\n\tariaLabel: string;\n}\n\nexport const defaultEmptyStateStrings: EmptyStateStrings = {\n\ttitle: 'Nothing here yet',\n\tdescription: 'Once data lands, it will show up in this view.',\n\tariaLabel: 'Empty state',\n};\n","/**\n * EmptyState — the canonical zero-data surface for any list, table, or\n * collection in the library. Wraps the shadcn `ui/empty` primitive\n * (rule 1, rule 12) and applies our typography, density, and tokens:\n *\n * - Headline through `<Heading tag=\"h3\">` (admin scale, no marketing inflation)\n * - Description through provider-sized secondary Typography so a whole-state\n * explanation remains readable; compact footer metadata stays `xs`\n * - Padding driven by the package scale and CSS variables, not arbitrary literals\n * - Optional dashed-border affordance for \"this slot is a drop zone\"\n *\n * Composability:\n * - Slots: `media`, `actions`, `footer`\n * - Render-prop: `renderMedia(ctx)` for fully custom illustrations\n * - Strings: every piece of copy is overridable via `strings`\n *\n * The library ships a small illustration set under\n * `./partials/illustrations/*` — import explicitly per resource:\n *\n * import { StackedCardsIllustration } from\n * './partials/illustrations';\n *\n * Adaptive shape per resource: pass a different `media` per surface.\n * Don't fork the component.\n */\nimport { forwardRef } from 'react';\n\nimport { Heading, Text } from '../../../typography';\nimport {\n\tEmpty,\n\tEmptyContent,\n\tEmptyHeader,\n\tEmptyMedia,\n} from '../../../base/feedback';\nimport { Stack } from '../../../base/structure';\nimport { useStrings } from '../../../../lib/strings';\nimport { useDensityConfig } from '../../../../lib/ui-provider';\nimport { cn } from '../../../../lib/utils';\n\nimport { defaultEmptyStateStrings } from './empty-state.strings';\nimport type {\n\tEmptyStateMediaVariant,\n\tEmptyStatePadding,\n\tEmptyStateProps,\n} from './empty-state.types';\n\nconst PADDING_CLASS: Record<EmptyStatePadding, string> = {\n\tsm: '!p-surface-xs',\n\tmd: '!p-surface',\n\tlg: '!p-surface-lg',\n};\n\nconst MEDIA_VARIANT_TO_PRIMITIVE: Record<EmptyStateMediaVariant, 'default' | 'icon'> = {\n\tnone: 'default',\n\ticon: 'icon',\n\t'icon-soft': 'icon',\n\tillustration: 'default',\n};\n\nconst MEDIA_EXTRA_CLASS: Record<EmptyStateMediaVariant, string | undefined> = {\n\tnone: undefined,\n\ticon: undefined,\n\t'icon-soft': 'bg-muted/50 text-muted-foreground',\n\tillustration: 'mb-space-xl',\n};\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState({\n\ttitle,\n\tdescription,\n\tmedia,\n\tmediaVariant = 'none',\n\trenderMedia,\n\tactions,\n\tfooter,\n\tpadding,\n\tborder = false,\n\tclassName,\n\tstrings: stringsProp,\n\tariaLabel,\n}, ref) {\n\tconst strings = useStrings(defaultEmptyStateStrings, stringsProp);\n\tconst { defaultScale } = useDensityConfig();\n\tconst resolvedPadding = padding ?? defaultScale ?? 'md';\n\n\tconst resolvedTitle = title ?? strings.title;\n\tconst resolvedDescription =\n\t\tdescription === false ? null : description ?? strings.description;\n\tconst mediaNode = renderMedia ? renderMedia({ mediaVariant }) : media;\n\tconst showMedia = !!mediaNode;\n\n\treturn (\n\t\t<Empty\n\t\t\tref={ref}\n\t\t\trole=\"status\"\n\t\t\taria-label={ariaLabel ?? strings.ariaLabel}\n\t\t\tclassName={cn('empty-state--component', \n\t\t\t\tPADDING_CLASS[resolvedPadding],\n\t\t\t\tborder ? 'border-border border border-dashed' : 'border-border border-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<EmptyHeader className=\"empty-state--header\">\n\t\t\t\t{!!showMedia && (\n\t\t\t\t\t<EmptyMedia\n\t\t\t\t\t\tvariant={MEDIA_VARIANT_TO_PRIMITIVE[mediaVariant]}\n\t\t\t\t\t\tclassName={cn('empty-state--media', MEDIA_EXTRA_CLASS[mediaVariant])}\n\t\t\t\t\t>\n\t\t\t\t\t\t{mediaNode}\n\t\t\t\t\t</EmptyMedia>\n\t\t\t\t)}\n\t\t\t\t<Heading\n\t\t\t\t\ttag=\"h3\"\n\t\t\t\t\talign=\"center\"\n\t\t\t\t\tclassName=\"empty-state--title border-0 pb-0\"\n\t\t\t\t\tdata-slot=\"empty-title\"\n\t\t\t\t>\n\t\t\t\t\t{resolvedTitle}\n\t\t\t\t</Heading>\n\t\t\t\t{!!resolvedDescription && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tclassName=\"empty-state--description leading-relaxed [&>a]:text-primary-accent [&>a]:underline [&>a]:underline-offset-4 hover:[&>a]:no-underline\"\n\t\t\t\t\t\tdata-slot=\"empty-description\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolvedDescription}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</EmptyHeader>\n\t\t\t{(!!actions || !!footer) && (\n\t\t\t\t<EmptyContent className=\"empty-state--content\">\n\t\t\t\t\t{!!actions && (\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" justify=\"center\" className=\"empty-state--actions\">\n\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t)}\n\t\t\t\t\t{!!footer && (\n\t\t\t\t\t\t<Text tag=\"div\" size=\"xs\" type=\"secondary\" align=\"center\" className=\"empty-state--footer\">\n\t\t\t\t\t\t\t{footer}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</EmptyContent>\n\t\t\t)}\n\t\t</Empty>\n\t);\n});\n\nEmptyState.displayName = 'EmptyState';\n","import { cn } from '../../../../../../lib/utils';\nimport type { EmptyStateIllustrationProps } from './types';\n\n/** Two staggered document silhouettes; all coordinates belong to the drawing. */\nexport function DocumentStackIllustration({ className }: EmptyStateIllustrationProps) {\n\treturn (\n\t\t<div className={cn('document-stack-illustration--component relative h-24 w-32', className)} aria-hidden=\"true\">\n\t\t\t<svg viewBox=\"0 0 128 96\" className=\"h-full w-full overflow-visible\" focusable=\"false\">\n\t\t\t\t<g transform=\"rotate(-6 44 44)\">\n\t\t\t\t\t<rect x={4.5} y={4.5} width={79} height={79} style={{ rx: 'var(--radius-md)' }} className=\"fill-muted/70 dark:fill-muted/40 stroke-border/50 drop-shadow-xs\" />\n\t\t\t\t\t<rect x={13} y={13} width={48} height={8} rx={4} className=\"fill-muted\" />\n\t\t\t\t\t<rect x={13} y={27} width={40} height={6} rx={3} className=\"fill-muted/60\" />\n\t\t\t\t\t<rect x={13} y={39} width={36} height={6} rx={3} className=\"fill-muted/60\" />\n\t\t\t\t</g>\n\t\t\t\t<g transform=\"rotate(3 84 48)\">\n\t\t\t\t\t<rect x={44.5} y={8.5} width={79} height={79} style={{ rx: 'var(--radius-md)' }} className=\"fill-background stroke-border drop-shadow-xs\" />\n\t\t\t\t\t<rect x={53} y={17} width={48} height={8} rx={4} className=\"fill-muted\" />\n\t\t\t\t\t<rect x={53} y={31} width={40} height={6} rx={3} className=\"fill-muted/60\" />\n\t\t\t\t\t<rect x={53} y={43} width={36} height={6} rx={3} className=\"fill-muted/60\" />\n\t\t\t\t\t<circle cx={56} cy={76} r={3} className=\"fill-success\" />\n\t\t\t\t\t<rect x={63} y={73} width={32} height={6} rx={3} className=\"fill-muted/60\" />\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</div>\n\t);\n}\n\nDocumentStackIllustration.displayName = 'DocumentStackIllustration';\n","import { useId } from 'react';\n\nimport { cn } from '../../../../../../lib/utils';\nimport type { EmptyStateIllustrationProps } from './types';\n\n/** Open inbox tray with a check; the scene has one intrinsic coordinate system. */\nexport function InboxCleanIllustration({ className }: EmptyStateIllustrationProps) {\n\tconst trayClip = useId();\n\treturn (\n\t\t<div className={cn('inbox-clean-illustration--component relative h-24 w-32', className)} aria-hidden=\"true\">\n\t\t\t<svg viewBox=\"0 0 128 96\" className=\"h-full w-full overflow-visible\" focusable=\"false\">\n\t\t\t\t<defs>\n\t\t\t\t\t<clipPath id={trayClip}>\n\t\t\t\t\t\t<rect x={0.5} y={40.5} width={127} height={55} style={{ rx: 'var(--radius)' }} />\n\t\t\t\t\t</clipPath>\n\t\t\t\t</defs>\n\t\t\t\t<circle cx={64} cy={16} r={15.5} className=\"fill-success/12 stroke-success/30\" />\n\t\t\t\t<path d=\"M59 16l3 3 7-7\" fill=\"none\" className=\"stroke-success\" strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n\t\t\t\t<rect x={0.5} y={40.5} width={127} height={55} style={{ rx: 'var(--radius)' }} className=\"fill-background drop-shadow-xs\" />\n\t\t\t\t<g clipPath={`url(#${trayClip})`}>\n\t\t\t\t\t<rect x={1} y={41} width={126} height={12} className=\"fill-muted/30\" />\n\t\t\t\t\t<rect x={13} y={66} width={48} height={6} rx={3} className=\"fill-muted/60\" />\n\t\t\t\t\t<rect x={13} y={76} width={32} height={6} rx={3} className=\"fill-muted/40\" />\n\t\t\t\t\t<circle cx={109} cy={74} r={6} className=\"fill-muted/40\" />\n\t\t\t\t</g>\n\t\t\t\t<rect x={0.5} y={40.5} width={127} height={55} style={{ rx: 'var(--radius)' }} fill=\"none\" className=\"stroke-border\" />\n\t\t\t</svg>\n\t\t</div>\n\t);\n}\n\nInboxCleanIllustration.displayName = 'InboxCleanIllustration';\n","import { Search } from 'lucide-react';\n\nimport { cn } from '../../../../../../lib/utils';\nimport type { EmptyStateIllustrationProps } from './types';\n\n/**\n * Magnifying-glass illustration centered on a soft tinted disk — for\n * \"no search results\", \"nothing matches your filters\" surfaces.\n */\nexport function SearchGlassIllustration({ className }: EmptyStateIllustrationProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'search-glass-illustration--component',\n\t\t\t\t'flex size-20 items-center justify-center rounded-full bg-muted/50 ring-8 ring-muted/30',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<Search className=\"size-8 text-muted-foreground\" />\n\t\t</div>\n\t);\n}\n\nSearchGlassIllustration.displayName = 'SearchGlassIllustration';\n","import { useId } from 'react';\n\nimport { cn } from '../../../../../../lib/utils';\nimport type { EmptyStateIllustrationProps } from './types';\n\n/** Three card silhouettes with a theme-backed fade; coordinates are drawing geometry. */\nexport function StackedCardsIllustration({ className }: EmptyStateIllustrationProps) {\n\tconst fadeId = useId();\n\treturn (\n\t\t<div className={cn('stacked-cards-illustration--component relative h-24 w-52', className)} aria-hidden=\"true\">\n\t\t\t<svg viewBox=\"0 0 208 96\" className=\"h-full w-full overflow-visible\" focusable=\"false\">\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient id={fadeId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t<stop stopColor=\"var(--background)\" stopOpacity={0} />\n\t\t\t\t\t\t<stop offset=\"0.5\" stopColor=\"var(--background)\" stopOpacity={0.6} />\n\t\t\t\t\t\t<stop offset=\"1\" stopColor=\"var(--background)\" />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t</defs>\n\t\t\t\t<rect x={24.5} y={0.5} width={159} height={23} style={{ rx: 'var(--radius)' }} className=\"fill-muted/60 dark:fill-muted/30 stroke-border/50\" />\n\t\t\t\t<rect x={12.5} y={12.5} width={183} height={23} style={{ rx: 'var(--radius)' }} className=\"fill-muted/80 dark:fill-muted/50 stroke-border/60\" />\n\t\t\t\t<rect x={0.5} y={24.5} width={207} height={63} style={{ rx: 'var(--radius)' }} className=\"fill-background stroke-border drop-shadow-xs\" />\n\t\t\t\t<rect x={17} y={40} width={32} height={32} rx={4} className=\"fill-muted\" />\n\t\t\t\t<rect x={61} y={44} width={97.5} height={10} rx={4} className=\"fill-muted\" />\n\t\t\t\t<rect x={61} y={60} width={65} height={8} rx={4} className=\"fill-muted/60\" />\n\t\t\t\t<rect y={64} width={208} height={32} fill={`url(#${fadeId})`} />\n\t\t\t</svg>\n\t\t</div>\n\t);\n}\n\nStackedCardsIllustration.displayName = 'StackedCardsIllustration';\n","import { cn } from '../../../../../../lib/utils';\nimport type { EmptyStateIllustrationProps } from './types';\n\n/**\n * Three overlapping avatar circles — for \"no team members\", \"no\n * customers\", \"no contributors\" surfaces.\n */\nexport function UsersCircleIllustration({ className }: EmptyStateIllustrationProps) {\n\treturn (\n\t\t<div className={cn('users-circle-illustration--component relative flex h-24 w-32 items-center justify-center', className)} aria-hidden=\"true\">\n\t\t\t<div className=\"bg-muted/50 border-border absolute left-2 size-12 rounded-full border-2\" />\n\t\t\t<div className=\"bg-muted border-border z-10 size-14 rounded-full border-2 shadow-sm\" />\n\t\t\t<div className=\"bg-muted/50 border-border absolute right-2 size-10 rounded-full border-2\" />\n\t\t</div>\n\t);\n}\n\nUsersCircleIllustration.displayName = 'UsersCircleIllustration';\n","/**\n * RelationshipCardFrame — card-free scaffold for app-owned resource cards.\n *\n * The package owns the visual grammar; the app owns the domain data,\n * selectors, mutations, and routing. Frame it with Card at the page,\n * drawer, or preview call site when card chrome is needed.\n */\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { Badge, type BadgeProps } from '../../base/badge';\nimport { Stack } from '../../base/structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nexport interface RelationshipCardFrameProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n\t/** Leading glyph. */\n\ticon?: ReactNode;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Chip beside the title. Pass a node, or an object to use the built-in badge. */\n\ttitleBadge?: ReactNode | { label: ReactNode; tone?: BadgeProps['tone']; size?: BadgeProps['size'] };\n\t/** Notice between the header and the body. */\n\talertSlot?: ReactNode;\n\t/** Label/value facts under the title. */\n\tmetadataSlot?: ReactNode;\n\t/** Main control in the header. */\n\tprimaryActionSlot?: ReactNode;\n\t/** Overflow menu at the end of the header. */\n\toverflowActionSlot?: ReactNode;\n\t/** Control that changes which relationship is shown. */\n\tselectorSlot?: ReactNode;\n\t/** Expanded detail region below the body. */\n\tdetailsSlot?: ReactNode;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Merged onto the header. */\n\theaderClassName?: string;\n\t/** Merged onto the body. */\n\tbodyClassName?: string;\n}\n\nfunction renderTitleBadge(badge: RelationshipCardFrameProps['titleBadge']) {\n\tif (!badge) return null;\n\tif (typeof badge === 'object' && !Array.isArray(badge) && 'label' in badge) {\n\t\treturn (\n\t\t\t<Badge inline tone={badge.tone ?? 'secondary'} size={badge.size}>\n\t\t\t\t{badge.label}\n\t\t\t</Badge>\n\t\t);\n\t}\n\treturn badge;\n}\n\nexport const RelationshipCardFrame = forwardRef<HTMLDivElement, RelationshipCardFrameProps>(function RelationshipCardFrame({\n\ticon,\n\ttitle,\n\ttitleBadge,\n\talertSlot,\n\tmetadataSlot,\n\tprimaryActionSlot,\n\toverflowActionSlot,\n\tselectorSlot,\n\tdetailsSlot,\n\tclassName,\n\theaderClassName,\n\tbodyClassName,\n\t...props\n}, ref) {\n\tconst hasBody =\n\t\t!!alertSlot ||\n\t\t!!metadataSlot ||\n\t\t!!primaryActionSlot ||\n\t\t!!selectorSlot ||\n\t\t!!detailsSlot;\n\n\treturn (\n\t\t<Stack\n\t\t\tref={ref}\n\t\t\tclassName={cn('relationship-card-frame--component', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Stack direction=\"horizontal\" gap=\"md\" align=\"start\" justify=\"between\" wrap={false} className={cn('relationship-card-frame--header', headerClassName)}>\n\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" align=\"start\" wrap={false} className=\"relationship-card-frame--header-start\">\n\t\t\t\t\t{!!icon && (\n\t\t\t\t\t\t<div className=\"relationship-card-frame--icon mt-space-2xs inline-flex shrink-0 items-center text-muted-foreground\">\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"min-w-0\">\n\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" className=\"relationship-card-frame--title-row\">\n\t\t\t\t\t\t\t<Text tag=\"div\" weight=\"medium\" className=\"relationship-card-frame--title truncate\">\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{!!titleBadge && (\n\t\t\t\t\t\t\t\t<span className=\"relationship-card-frame--title-badge inline-flex\">\n\t\t\t\t\t\t\t\t\t{renderTitleBadge(titleBadge)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</div>\n\t\t\t\t</Stack>\n\t\t\t\t{!!overflowActionSlot && (\n\t\t\t\t\t<div className=\"relationship-card-frame--overflow shrink-0\">\n\t\t\t\t\t\t{overflowActionSlot}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Stack>\n\n\t\t\t{!!hasBody && (\n\t\t\t\t<Stack className={cn('relationship-card-frame--body', bodyClassName)}>\n\t\t\t\t\t{!!alertSlot && <div className=\"relationship-card-frame--alert\">{alertSlot}</div>}\n\t\t\t\t\t{!!selectorSlot && <div className=\"relationship-card-frame--selector\">{selectorSlot}</div>}\n\t\t\t\t\t{!!metadataSlot && <div className=\"relationship-card-frame--metadata\">{metadataSlot}</div>}\n\t\t\t\t\t{!!primaryActionSlot && <div className=\"relationship-card-frame--primary-action\">{primaryActionSlot}</div>}\n\t\t\t\t\t{!!detailsSlot && <div className=\"relationship-card-frame--details\">{detailsSlot}</div>}\n\t\t\t\t</Stack>\n\t\t\t)}\n\t\t</Stack>\n\t);\n});\n\nRelationshipCardFrame.displayName = 'RelationshipCardFrame';\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker-CF-DtUpF.js","names":["Calendar","React","Button","React","_Fragment","React","ToggleGroup","ToggleGroupPrimitive","TogglePrimitive","React","ToggleGroup","React","CalendarIcon","Calendar","_Fragment","React","CalendarIcon","Calendar","_Fragment","React","CalendarIcon","Calendar","_Fragment","React","useDatesConfig","useDensityConfig","cn","Button","Label","focusRecipes","buttonVariants","Button$1","Grid","Stack","formatDateRange","Separator","fieldStateRecipes","selectToggleRecipes","resolveFormControlSize","formFieldTriggerClasses","formControlIconClasses","formControlSizeClasses","Input","PopoverTrigger","Popover","PopoverContent","FormField","useIsMobile","React$1","Fragment$1","padTimeSegment","value","clamp","min","max","alignSecondsToStep","step","totalSeconds","lastOfDay","aligned","parseTimeString","timeString","parts","hRaw","mRaw","sRaw","hours","minutes","seconds","normalizedTimeToString","secondsPart","includeSeconds","time","createDefaultNormalizedTime","source","date","alignedSeconds","alignedHours","alignedMinutes","alignedSecondsRemainder","normalizedTimeToDisplaySegments","format","period","displayHour","displaySegmentsToNormalizedTime","parseSegment","numeric","segments","isPM","alignNormalizedTimeToStep","formatNormalizedTimeForDisplay","periodLabel","labels","QUOTED_TEXT_REGEX","TIME_TOKEN_REGEX","readableFormatIncludesTime","sanitized","getDayPickerYearBounds","yearSelection","createDateOutput","options","locale","dateFormat","readableFormat","createMultipleDatesOutput","dates","d","createDateRangeOutput","range","applyTimeToDate","normalized","newDate","calculateDaysDifference","to","from","validateDateRange","daysDiff","getRangeValidationMessage","translations","getMultipleDatesValidationMessage","required","formatDateButtonText","text","placeholder","defaultPlaceholder","formatMultipleDatesButtonText","formatRangeButtonText","resolvePickerButtonProps","tone","buttonStyle","isSingleMode","props","isMultipleMode","isRangeMode","getDefaultPresets","t","startOfWeek","endOfWeek","startOfMonth","endOfMonth","addDays","Calendar$1","defaultClassNames","getDefaultClassNames","DayPicker","className","formatters","buttonVariant","captionLayout","classNames","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","components","ref","modifiers","day","DatePickerField","hasError","error","showHint","hint","label","triggerId","Text","children","describedById","DatePickerFooter","config","visibleActions","actions","action","customText","output","displayText","showSummary","autoSummary","showOnlyWhenSelected","hasSelection","isDisabled","DatePickerHeader","Icon","align","Heading","title","description","usePickerTriggerSize","sizeProp","defaultScale","iconOnlyWidth","pickerTriggerClasses","size","iconOnly","defaultDatePickerStrings","days","count","toggleVariants","cva","ToggleGroupContext","ToggleGroup$1","ToggleGroup","variant","spacing","ToggleGroupItem","context","Toggle","defaultTimePickerStrings","SEGMENT_ORDER","DEFAULT_24H","DEFAULT_12H","BLANK","periodItemClasses","segmentWidthClasses","sanitizeNumeric","ensureTwoDigits","getNextKey","activeOrder","idx","key","getPreviousKey","hoursToDisplay","determinePeriodFromHours","segmentsWithDefaults","blankSegments","fillBlanks","fallbackHours","segmentsFromValue","parsed","TimePicker","stringsProp","useStrings","precision","open","setOpen","setSegments","segmentsRef","isLocalEditRef","digitEntryRef","updateSegments","next","inputRefs","toTimeString","emitAligned","segs","onValueChange","commitSegments","focusSegment","applyDigitInput","current","inProgress","typed","segmentKey","digit","candidate","nextPeriod","updated","handleNumericChange","rawValue","v","handlePeriodChange","handleBlur","handleFocus","event","handleKeyDown","target","periodToggleValue","segmentLabels","editor","mode","node","id","index","values","isBlank","triggerText","invalid","Clock","SingleDatePicker","baseProps","generatedTriggerId","describedBy","isInvalid","ariaDescribedBy","timeFormat","withTime","timeStep","readableHasTime","showTimeInButton","setDate","defaultValue","setTime","initial","previousValueRef","defaultInitializedRef","lastValueDefinedRef","createOutput","finalDate","selectedDate","effectiveTime","overrideTime","applied","dateFnsLocale","isTimeEnabled","wasValueDefined","isValueDefined","applyState","baseDate","emitChange","prevTime","valueTime","handleSelect","seededTime","closeOnSelect","handleTimeChange","nextTime","timeDisplay","buttonText","footerSummary","resolved","triggerProps","Calendar","disabledDates","yearBounds","calendarProps","MultipleDatePicker","setDates","selectedDates","newDates","validationMessage","RangeDatePicker","presetsProp","isMobile","resolvedNumberOfMonths","presets","weekStartsOn","showTimeInSummary","initialRange","setRange","startTime","setStartTime","endTime","setEndTime","hasValidationMessage","validationText","prev","nextFrom","nextTo","alignOrKeep","finalRange","currentRange","handleStartTimeChange","handleEndTimeChange","resolveNextRange","triggerDate","dayPickerRange","nextRange","withConfirm","isComplete","isValid","handlePresetSelect","preset","handleConfirm","startTimeDisplay","endTimeDisplay","fromBase","fromText","toBase","showTime","showConfirm","DatePicker","enUS","componentClassName"],"sources":["../src/components/base/date-pickers/date-picker-helpers.ts","../src/components/base/date-pickers/date-picker-internals.ts","../src/components/ui/calendar.tsx","../src/components/base/date-pickers/date-picker-field.tsx","../src/components/base/date-pickers/date-picker-footer.tsx","../src/components/base/date-pickers/date-picker-header.tsx","../src/components/base/date-pickers/date-picker.recipes.ts","../src/components/base/date-pickers/date-pickers.strings.ts","../src/components/ui/toggle.tsx","../src/components/ui/toggle-group.tsx","../src/components/base/date-pickers/time-picker.tsx","../src/components/base/date-pickers/date-picker-single.tsx","../src/components/base/date-pickers/date-picker-multiple.tsx","../src/components/base/date-pickers/date-picker-range.tsx","../src/components/base/date-pickers/date-picker.tsx"],"sourcesContent":["import { format } from 'date-fns';\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport type { DateRange } from 'react-day-picker';\nimport { formatDateRange } from '../../primitives/date';\nimport type {\n\tDateOutput,\n\tMultipleDatesOutput,\n\tDateRangeOutput,\n\tDatePickerStrings,\n\tYearSelectionConfig\n} from './datepicker.types';\n\nexport type TimePeriod = 'AM' | 'PM';\n\nexport interface NormalizedTime {\n\thours: number;\n\tminutes: number;\n\tseconds: number;\n}\n\nexport interface DisplayTimeSegments {\n\thours: string;\n\tminutes: string;\n\tseconds?: string;\n\tperiod?: TimePeriod;\n}\n\nexport interface TimeDisplayLabels {\n\tam?: string;\n\tpm?: string;\n}\n\nexport const HOURS_24_MAX = 23;\nexport const HOURS_12_MAX = 12;\nexport const MINUTES_MAX = 59;\nexport const SECONDS_MAX = 59;\n\nexport function padTimeSegment(value: number): string {\n\treturn value.toString().padStart(2, '0');\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n\treturn Math.min(Math.max(value, min), max);\n}\n\n/**\n * Snaps a time to the nearest legal `step`, rather than the one below it:\n * with a 15-minute step, 10:38 belongs at 10:45 and 10:37 at 10:30. Ties\n * round up. The result is always itself a legal step, so the last one\n * before midnight is used instead of overflowing into the next day.\n */\nfunction alignSecondsToStep(totalSeconds: number, step: number): number {\n\tif (step <= 0) {\n\t\treturn totalSeconds;\n\t}\n\tconst lastOfDay = Math.floor((24 * 60 * 60 - 1) / step) * step;\n\tconst aligned = Math.round(totalSeconds / step) * step;\n\treturn Math.max(0, Math.min(aligned, lastOfDay));\n}\n\nexport function parseTimeString(timeString: string | undefined): NormalizedTime | null {\n\tif (!timeString) {\n\t\treturn null;\n\t}\n\tconst parts = timeString.split(':');\n\tif (parts.length < 2 || parts.length > 3) {\n\t\treturn null;\n\t}\n\tconst [hRaw, mRaw, sRaw] = parts;\n\tconst hours = clamp(Number.parseInt(hRaw, 10), 0, HOURS_24_MAX);\n\tconst minutes = clamp(Number.parseInt(mRaw, 10), 0, MINUTES_MAX);\n\tconst seconds = clamp(Number.parseInt(sRaw ?? '0', 10), 0, SECONDS_MAX);\n\tif (Number.isNaN(hours) || Number.isNaN(minutes) || Number.isNaN(seconds)) {\n\t\treturn null;\n\t}\n\treturn { hours, minutes, seconds };\n}\n\nexport function normalizedTimeToString(time: NormalizedTime, includeSeconds: boolean): string {\n\tconst secondsPart = includeSeconds ? `:${padTimeSegment(time.seconds)}` : '';\n\treturn `${padTimeSegment(time.hours)}:${padTimeSegment(time.minutes)}${secondsPart}`;\n}\n\nexport function createDefaultNormalizedTime(\n\tdate: Date | undefined,\n\tincludeSeconds: boolean,\n\tstep: number\n): NormalizedTime {\n\tconst source = Number.isFinite(date?.getTime?.()) ? (date as Date) : new Date();\n\tconst hours = source.getHours();\n\tconst minutes = source.getMinutes();\n\tconst seconds = includeSeconds ? source.getSeconds() : 0;\n\tconst totalSeconds = hours * 3600 + minutes * 60 + seconds;\n\tconst alignedSeconds = alignSecondsToStep(totalSeconds, step);\n\tconst alignedHours = Math.floor(alignedSeconds / 3600);\n\tconst alignedMinutes = Math.floor((alignedSeconds % 3600) / 60);\n\tconst alignedSecondsRemainder = alignedSeconds % 60;\n\treturn {\n\t\thours: alignedHours,\n\t\tminutes: alignedMinutes,\n\t\tseconds: includeSeconds ? alignedSecondsRemainder : 0,\n\t};\n}\n\nexport function normalizedTimeToDisplaySegments(\n\ttime: NormalizedTime,\n\tformat: '12' | '24',\n\tincludeSeconds: boolean\n): DisplayTimeSegments {\n\tif (format === '12') {\n\t\tconst period: TimePeriod = time.hours >= 12 ? 'PM' : 'AM';\n\t\tlet displayHour = time.hours % 12;\n\t\tif (displayHour === 0) {\n\t\t\tdisplayHour = 12;\n\t\t}\n\t\treturn {\n\t\t\thours: padTimeSegment(displayHour),\n\t\t\tminutes: padTimeSegment(time.minutes),\n\t\t\tseconds: includeSeconds ? padTimeSegment(time.seconds) : undefined,\n\t\t\tperiod,\n\t\t};\n\t}\n\treturn {\n\t\thours: padTimeSegment(time.hours),\n\t\tminutes: padTimeSegment(time.minutes),\n\t\tseconds: includeSeconds ? padTimeSegment(time.seconds) : undefined,\n\t};\n}\n\nexport function displaySegmentsToNormalizedTime(\n\tsegments: DisplayTimeSegments,\n\tformat: '12' | '24',\n\tincludeSeconds: boolean\n): NormalizedTime {\n\tconst parseSegment = (value: string | undefined): number => {\n\t\tconst numeric = Number.parseInt(value ?? '0', 10);\n\t\treturn Number.isNaN(numeric) ? 0 : numeric;\n\t};\n\tlet hours = parseSegment(segments.hours);\n\tconst minutes = clamp(parseSegment(segments.minutes), 0, MINUTES_MAX);\n\tconst seconds = includeSeconds ? clamp(parseSegment(segments.seconds), 0, SECONDS_MAX) : 0;\n\tif (format === '12') {\n\t\thours = clamp(hours, 1, HOURS_12_MAX);\n\t\tconst period = segments.period ?? 'AM';\n\t\tconst isPM = period === 'PM';\n\t\thours = hours % 12;\n\t\tif (isPM) {\n\t\t\thours += 12;\n\t\t}\n\t} else {\n\t\thours = clamp(hours, 0, HOURS_24_MAX);\n\t}\n\treturn { hours, minutes, seconds };\n}\n\nexport function alignNormalizedTimeToStep(\n\ttime: NormalizedTime,\n\tstep: number,\n\tincludeSeconds: boolean\n): NormalizedTime {\n\tconst totalSeconds = time.hours * 3600 + time.minutes * 60 + time.seconds;\n\tconst alignedSeconds = alignSecondsToStep(totalSeconds, step);\n\tconst hours = Math.floor(alignedSeconds / 3600);\n\tconst minutes = Math.floor((alignedSeconds % 3600) / 60);\n\tconst seconds = includeSeconds ? alignedSeconds % 60 : 0;\n\treturn { hours, minutes, seconds };\n}\n\nexport function formatNormalizedTimeForDisplay(\n\ttime: NormalizedTime,\n\tincludeSeconds: boolean,\n\tformat: '12' | '24',\n\tlabels?: TimeDisplayLabels\n): string {\n\tconst minutes = padTimeSegment(time.minutes);\n\tconst secondsPart = includeSeconds ? `:${padTimeSegment(time.seconds)}` : '';\n\tif (format === '24') {\n\t\treturn `${padTimeSegment(time.hours)}:${minutes}${secondsPart}`;\n\t}\n\tconst period: TimePeriod = time.hours >= 12 ? 'PM' : 'AM';\n\tlet displayHour = time.hours % 12;\n\tif (displayHour === 0) {\n\t\tdisplayHour = 12;\n\t}\n\tconst periodLabel = period === 'AM' ? labels?.am ?? 'AM' : labels?.pm ?? 'PM';\n\treturn `${padTimeSegment(displayHour)}:${minutes}${secondsPart} ${periodLabel}`;\n}\n\nconst QUOTED_TEXT_REGEX = /'[^']*'/g;\nconst TIME_TOKEN_REGEX = /[HKhk]|\\bp\\b|\\bt\\b|\\ba\\b/;\n\nexport function readableFormatIncludesTime(format: string | undefined): boolean {\n\tif (!format) {\n\t\treturn false;\n\t}\n\tconst sanitized = format.replace(QUOTED_TEXT_REGEX, '');\n\treturn TIME_TOKEN_REGEX.test(sanitized);\n}\n\nexport function getDayPickerYearBounds(\n\tyearSelection: YearSelectionConfig | undefined\n): { startMonth?: Date; endMonth?: Date } {\n\treturn {\n\t\tstartMonth: typeof yearSelection?.fromYear === 'number' ? new Date(yearSelection.fromYear, 0) : undefined,\n\t\tendMonth: typeof yearSelection?.toYear === 'number' ? new Date(yearSelection.toYear, 11) : undefined,\n\t};\n}\n\n/**\n * Create date output object with formatted strings\n */\nexport function createDateOutput(\n\tdate: Date | undefined,\n\tdateFormat: string,\n\treadableFormat: string,\n\tlocale?: DateFnsLocale\n): DateOutput {\n\tconst options = locale ? { locale } : undefined;\n\treturn {\n\t\tdate,\n\t\tformatted: date ? format(date, dateFormat, options) : undefined,\n\t\treadable: date ? format(date, readableFormat, options) : undefined,\n\t};\n}\n\n/**\n * Create multiple dates output object with formatted strings\n */\nexport function createMultipleDatesOutput(\n\tdates: Date[],\n\tdateFormat: string,\n\treadableFormat: string,\n\tlocale?: DateFnsLocale\n): MultipleDatesOutput {\n\tconst options = locale ? { locale } : undefined;\n\treturn {\n\t\tdates,\n\t\tformatted: dates.map(d => format(d, dateFormat, options)),\n\t\treadable: dates.map(d => format(d, readableFormat, options)),\n\t};\n}\n\n/**\n * Create date range output object with formatted strings\n */\nexport function createDateRangeOutput(\n\trange: DateRange | undefined,\n\tdateFormat: string,\n\treadableFormat: string,\n\tlocale?: DateFnsLocale\n): DateRangeOutput {\n\tconst options = locale ? { locale } : undefined;\n\treturn {\n\t\trange,\n\t\tformatted: {\n\t\t\tfrom: range?.from ? format(range.from, dateFormat, options) : undefined,\n\t\t\tto: range?.to ? format(range.to, dateFormat, options) : undefined,\n\t\t},\n\t\treadable: {\n\t\t\tfrom: range?.from ? format(range.from, readableFormat, options) : undefined,\n\t\t\tto: range?.to ? format(range.to, readableFormat, options) : undefined,\n\t\t},\n\t};\n}\n\n/**\n * Apply time to a date\n */\nexport function applyTimeToDate(date: Date, time: string | NormalizedTime): Date {\n\tconst normalized = typeof time === 'string' ? parseTimeString(time) : time;\n\tconst newDate = new Date(date);\n\tif (!Number.isFinite(newDate.getTime()) || !normalized) {\n\t\treturn new Date(NaN);\n\t}\n\tnewDate.setHours(normalized.hours, normalized.minutes, normalized.seconds, 0);\n\treturn newDate;\n}\n\n/**\n * Apply time to date range\n */\nexport function applyTimeToRange(\n\trange: DateRange,\n\tstartTime: string | NormalizedTime,\n\tendTime: string | NormalizedTime\n): DateRange {\n\tlet finalRange = range;\n\n\tif (range.from) {\n\t\tfinalRange = { ...finalRange, from: applyTimeToDate(range.from, startTime) };\n\t}\n\n\tif (range.to && finalRange) {\n\t\tfinalRange = { ...finalRange, to: applyTimeToDate(range.to, endTime) };\n\t}\n\n\treturn finalRange;\n}\n\n/**\n * Calculate days difference between two dates\n */\nexport function calculateDaysDifference(from: Date, to: Date): number {\n\treturn Math.ceil((to.getTime() - from.getTime()) / (1000 * 60 * 60 * 24)) + 1;\n}\n\n/**\n * Validate date range constraints\n */\nexport function validateDateRange(\n\trange: DateRange | undefined,\n\tmin?: number,\n\tmax?: number\n): { isValid: boolean; daysDiff?: number } {\n\tif (!range?.from || !range?.to) {\n\t\treturn { isValid: true };\n\t}\n\n\tconst daysDiff = calculateDaysDifference(range.from, range.to);\n\n\tif (min && daysDiff < min) {\n\t\treturn { isValid: false, daysDiff };\n\t}\n\n\tif (max && daysDiff > max) {\n\t\treturn { isValid: false, daysDiff };\n\t}\n\n\treturn { isValid: true, daysDiff };\n}\n\n/**\n * Get validation message for date range\n */\nexport function getRangeValidationMessage(\n\trange: DateRange | undefined,\n\tmin: number | undefined,\n\tmax: number | undefined,\n\ttranslations: DatePickerStrings\n): string | null {\n\tif (!range?.from || !range?.to) return null;\n\n\tconst daysDiff = calculateDaysDifference(range.from, range.to);\n\n\tif (min && daysDiff < min) {\n\t\treturn translations.minimumDays(min);\n\t}\n\n\tif (max && daysDiff > max) {\n\t\treturn translations.maximumDays(max);\n\t}\n\n\treturn null;\n}\n\n/**\n * Get validation message for multiple dates\n */\nexport function getMultipleDatesValidationMessage(\n\tdates: Date[],\n\tmin: number | undefined,\n\tmax: number | undefined,\n\trequired: boolean | undefined,\n\ttranslations: DatePickerStrings\n): string | null {\n\tif (required && dates.length === 0) {\n\t\treturn translations.datesRequired;\n\t}\n\n\tif (min && dates.length < min) {\n\t\treturn translations.minimumDates(min);\n\t}\n\n\t// The maximum reads as a warning, so it waits until there is a\n\t// selection to warn about instead of greeting an empty calendar.\n\tif (max && dates.length > 0) {\n\t\treturn translations.maximumDates(max);\n\t}\n\n\treturn null;\n}\n\n/**\n * Format button text for single date\n */\nexport function formatDateButtonText(\n\tdate: Date | undefined,\n\treadableFormat: string,\n\tplaceholder: string | undefined,\n\tdefaultPlaceholder: string,\n\ttime?: string,\n\tlocale?: DateFnsLocale\n): string {\n\tif (date) {\n\t\tconst options = locale ? { locale } : undefined;\n\t\tlet text = format(date, readableFormat, options);\n\t\tif (time) {\n\t\t\ttext += ` ${time}`;\n\t\t}\n\t\treturn text;\n\t}\n\treturn placeholder ?? defaultPlaceholder;\n}\n\n/**\n * Format button text for multiple dates\n */\nexport function formatMultipleDatesButtonText(\n\tdates: Date[],\n\treadableFormat: string,\n\tplaceholder: string | undefined,\n\tdefaultPlaceholder: string,\n\ttranslations: DatePickerStrings,\n\tlocale?: DateFnsLocale\n): string {\n\tif (dates.length > 0) {\n\t\tif (dates.length === 1) {\n\t\t\tconst options = locale ? { locale } : undefined;\n\t\t\treturn format(dates[0], readableFormat, options);\n\t\t}\n\t\treturn translations.datesSelected(dates.length);\n\t}\n\treturn placeholder ?? defaultPlaceholder;\n}\n\n/**\n * Format button text for date range\n */\nexport function formatRangeButtonText(\n\trange: DateRange | undefined,\n\treadableFormat: string,\n\tplaceholder: string | undefined,\n\tdefaultPlaceholder: string,\n\tlocale?: DateFnsLocale\n): string {\n\tif (range?.from) {\n\t\treturn formatDateRange(range, {\n\t\t\tformat: readableFormat,\n\t\t\tlocale,\n\t\t}) ?? placeholder ?? defaultPlaceholder;\n\t}\n\treturn placeholder ?? defaultPlaceholder;\n}\n","/**\n * Internal wiring shared by the three <DatePicker> mode components.\n *\n * Split out of date-picker.tsx unchanged: the props-union type guards the\n * dispatcher narrows with, the trigger presentation mapping, and the default\n * range presets. Nothing here is part of the package's\n * public API — date-pickers/index.ts does not re-export it.\n */\nimport { addDays, startOfWeek, endOfWeek, startOfMonth, endOfMonth } from 'date-fns';\n\nimport { type ButtonTone, type ButtonStyle } from '../buttons';\n\nimport type {\n\tDatePickerProps,\n\tSingleDatePickerProps,\n\tMultipleDatePickerProps,\n\tRangeDatePickerProps,\n\tDatePickerStrings,\n\tPresetDateRange\n} from './datepicker.types';\n\nexport function resolvePickerButtonProps(\n\ttone?: ButtonTone,\n\tbuttonStyle?: ButtonStyle,\n): { tone: ButtonTone; buttonStyle: ButtonStyle } {\n\treturn {\n\t\ttone: tone ?? 'secondary',\n\t\tbuttonStyle: buttonStyle ?? 'outline',\n\t};\n}\n\n// Type guards\nexport function isSingleMode(props: DatePickerProps): props is SingleDatePickerProps {\n\treturn !props.mode || props.mode === 'single';\n}\n\nexport function isMultipleMode(props: DatePickerProps): props is MultipleDatePickerProps {\n\treturn props.mode === 'multiple';\n}\n\nexport function isRangeMode(props: DatePickerProps): props is RangeDatePickerProps {\n\treturn props.mode === 'range';\n}\n\n// Default preset ranges — labels resolved from DatePickerStrings.\n// `weekStartsOn` is the resolved value from the resolution chain\n// (`prop ?? useDatesConfig().weekStartsOn ?? 1`); passed in by the\n// caller so this stays a pure function.\nexport function getDefaultPresets(\n\tt: DatePickerStrings,\n\tweekStartsOn: 0 | 1 | 2 | 3 | 4 | 5 | 6,\n): PresetDateRange[] {\n\treturn [\n\t\t{\n\t\t\tlabel: t.today,\n\t\t\tgetValue: () => ({ from: new Date(), to: new Date() }),\n\t\t},\n\t\t{\n\t\t\tlabel: t.thisWeek,\n\t\t\tgetValue: () => ({\n\t\t\t\tfrom: startOfWeek(new Date(), { weekStartsOn }),\n\t\t\t\tto: endOfWeek(new Date(), { weekStartsOn })\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\tlabel: t.thisMonth,\n\t\t\tgetValue: () => ({\n\t\t\t\tfrom: startOfMonth(new Date()),\n\t\t\t\tto: endOfMonth(new Date())\n\t\t\t}),\n\t\t},\n\t\t{\n\t\t\tlabel: t.last30Days,\n\t\t\tgetValue: () => ({\n\t\t\t\tfrom: addDays(new Date(), -30),\n\t\t\t\tto: new Date()\n\t\t\t}),\n\t\t},\n\t];\n}\n","\"use client\"\n\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronDownIcon } from \"lucide-react\"\nimport * as React from \"react\"\nimport {\n DayPicker,\n getDefaultClassNames,\n type DayButton,\n type Locale,\n} from \"react-day-picker\"\n\nimport { Button, buttonVariants } from \"./button\"\nimport { cn } from \"../../lib/utils\"\nimport { selectToggleRecipes } from \"../../lib/field-affordance-recipes\"\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n locale,\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"]\n}) {\n const defaultClassNames = getDefaultClassNames()\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n // Day cells are controls: the small action height and the bounded inner\n // radius, written from the root tokens so a scoped density applies.\n \"p-space-lg [--cell-radius:min(calc(var(--radius)*0.75),calc(min(var(--height-action),var(--height-control))*var(--density-scale)/4))] [--cell-size:calc(var(--height-action)*8/9*var(--density-scale))] bg-background group/calendar [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n locale={locale}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(locale?.code, { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\n \"flex gap-space-xl flex-col md:flex-row relative\",\n defaultClassNames.months\n ),\n month: cn(\"flex flex-col w-full gap-space-xl\", defaultClassNames.month),\n nav: cn(\n \"flex items-center gap-space-xs w-full absolute top-0 inset-x-0 justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-space-sm\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"relative rounded-(--cell-radius)\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"absolute bg-popover inset-0 opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"select-none font-medium\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"rounded-(--cell-radius) flex items-center gap-space-xs text-sm [&>svg]:text-muted-foreground [&>svg]:size-icon-md\",\n defaultClassNames.caption_label\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"text-muted-foreground rounded-(--cell-radius) flex-1 font-normal text-xs select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"flex w-full mt-space-md\", defaultClassNames.week),\n week_number_header: cn(\n \"select-none w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"text-xs select-none text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"relative w-full rounded-(--cell-radius) h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius) group/day aspect-square select-none\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)\",\n defaultClassNames.day\n ),\n range_start: cn(\n \"rounded-l-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:right-0 z-0 isolate\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\n \"rounded-r-(--cell-radius) bg-muted relative after:bg-muted after:absolute after:inset-y-0 after:w-4 after:left-0 z-0 isolate\",\n defaultClassNames.range_end\n ),\n today: cn(\n \"bg-muted text-foreground rounded-(--cell-radius) data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"text-muted-foreground opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n )\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"size-icon\", className)} {...props} />\n )\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon className={cn(\"size-icon\", className)} {...props} />\n )\n }\n\n return (\n <ChevronDownIcon className={cn(selectToggleRecipes.icon.md, className)} {...props} />\n )\n },\n DayButton: ({ ...props }) => (\n <CalendarDayButton locale={locale} {...props} />\n ),\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n )\n },\n ...components,\n }}\n {...props}\n />\n )\n}\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n locale,\n ...props\n}: React.ComponentProps<typeof DayButton> & { locale?: Partial<Locale> }) {\n const defaultClassNames = getDefaultClassNames()\n\n const ref = React.useRef<HTMLButtonElement>(null)\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus()\n }, [modifiers.focused])\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString(locale?.code)}\n data-selected-single={\n !!modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:inset-ring group-data-[focused=true]/day:inset-ring-ring group-data-[focused=true]/day:ring-ring/50 relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-space-xs border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-3 data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Calendar, CalendarDayButton }\n","/**\n * Private label / hint / error chrome shared by the DatePicker modes and\n * MonthYearPicker. It keeps FormField's rhythm and roles: the same label recipe,\n * the same gap to the trigger and to the supporting line, and a polite alert for\n * the validation message. Validation marks the trigger, not the label.\n *\n * The hint keeps its documented place beside the label and is suppressed while\n * an error shows. Not part of the public API.\n */\nimport type { ReactNode, Ref } from 'react';\n\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\n\nexport interface DatePickerFieldProps {\n\trootRef?: Ref<HTMLDivElement>;\n\tclassName?: string;\n\tlabel?: string;\n\thint?: string;\n\terror?: string;\n\t/** Id of the trigger the label names. */\n\ttriggerId: string;\n\t/** Id of the validation message the trigger references. */\n\tdescribedById: string;\n\tchildren: ReactNode;\n}\n\nexport function DatePickerField({\n\trootRef,\n\tclassName,\n\tlabel,\n\thint,\n\terror,\n\ttriggerId,\n\tdescribedById,\n\tchildren,\n}: DatePickerFieldProps) {\n\tconst hasError = typeof error === 'string' && error !== '';\n\tconst showHint = !hasError && typeof hint === 'string' && hint !== '';\n\n\treturn (\n\t\t<Stack ref={rootRef} gap=\"xs\" className={className}>\n\t\t\t{!!(label || showHint) && (\n\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"xs\">\n\t\t\t\t\t{!!label && (\n\t\t\t\t\t\t<Label htmlFor={triggerId} className=\"date-picker--label leading-6\">\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t)}\n\t\t\t\t\t{showHint && (\n\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"date-picker--hint\">\n\t\t\t\t\t\t\t{hint}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t\t)}\n\n\t\t\t{children}\n\n\t\t\t{hasError && (\n\t\t\t\t<Text\n\t\t\t\t\tid={describedById}\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t\trole=\"alert\"\n\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\tclassName=\"date-picker--error\"\n\t\t\t\t\tcontent={error}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</Stack>\n\t);\n}\n","import * as React from 'react';\nimport { Button } from '../buttons';\nimport { Separator } from '../display/separator';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport type {\n\tDatePickerFooterConfig,\n\tDateOutput,\n\tDateRangeOutput,\n\tMultipleDatesOutput\n} from './datepicker.types';\n\nexport interface DatePickerFooterProps {\n\t/** Configuration for this surface. */\n\tconfig: DatePickerFooterConfig;\n\toutput: DateOutput | DateRangeOutput | MultipleDatesOutput;\n\thasSelection: boolean;\n\tautoSummary?: string;\n\tclassName?: string;\n}\n\nexport function DatePickerFooter({\n\tconfig,\n\toutput,\n\thasSelection,\n\tautoSummary,\n\tclassName\n}: DatePickerFooterProps) {\n\tconst { text, actions, showOnlyWhenSelected = false, showSummary = false } = config;\n\tconst visibleActions = actions?.filter((action) => action.visible !== false) ?? [];\n\n\t// Resolve custom text\n\tconst customText = React.useMemo(() => {\n\t\tif (!text) return undefined;\n\t\treturn typeof text === 'function' ? text(output) : text;\n\t}, [text, output]);\n\n\t// Determine what text to show\n\tconst displayText = customText || (showSummary ? autoSummary : undefined);\n\n\t// Don't render if showOnlyWhenSelected is true and no selection\n\tif (showOnlyWhenSelected && !hasSelection) {\n\t\treturn null;\n\t}\n\n\t// Don't render if no text and no actions\n\tif (!displayText && visibleActions.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Separator />\n\t\t\t<div className={cn('date-picker-footer--component p-surface', className)}>\n\t\t\t<Stack gap=\"lg\">\n\t\t\t\t{!!displayText && (\n\t\t\t\t\t<Stack gap=\"xs\" className=\"date-picker-footer--summary\">\n\t\t\t\t\t\t{!!showSummary && !!customText && !!autoSummary && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<Text type=\"secondary\">{autoSummary}</Text>\n\t\t\t\t\t\t\t\t<Text weight=\"medium\">{customText}</Text>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!showSummary && !!customText && <Text weight=\"medium\">{customText}</Text>}\n\t\t\t\t\t\t{!!showSummary && !customText && !!autoSummary && <Text type=\"secondary\">{autoSummary}</Text>}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\n\t\t\t\t{visibleActions.length > 0 && (\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\talign=\"center\"\n\t\t\t\t\t\tclassName=\"date-picker-footer--actions\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{visibleActions.map((action) => {\n\t\t\t\t\t\t\tconst isDisabled =\n\t\t\t\t\t\t\t\ttypeof action.disabled === 'function'\n\t\t\t\t\t\t\t\t\t? action.disabled(output)\n\t\t\t\t\t\t\t\t\t: action.disabled;\n\t\t\t\t\t\t\tconst buttonStyle = action.buttonStyle === 'link'\n\t\t\t\t\t\t\t\t? 'ghost'\n\t\t\t\t\t\t\t\t: action.buttonStyle ?? 'solid';\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tkey={action.label}\n\t\t\t\t\t\t\t\t\ttone={action.tone ?? 'primary'}\n\t\t\t\t\t\t\t\t\tbuttonStyle={buttonStyle}\n\t\t\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\t\t\tloading={action.loading}\n\t\t\t\t\t\t\t\t\tonClick={() => action.onClick(output)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex-1',\n\t\t\t\t\t\t\t\t\t\taction.buttonStyle === 'link' && 'underline underline-offset-4',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</Stack>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t</div>\n\t\t</>\n\t);\n}\n\nDatePickerFooter.displayName = 'DatePickerFooter';\n","import { Heading, Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport type { DatePickerHeaderConfig } from './datepicker.types';\n\nexport interface DatePickerHeaderProps {\n\t/** Configuration for this surface. */\n\tconfig: DatePickerHeaderConfig;\n\tclassName?: string;\n}\n\nexport function DatePickerHeader({ config, className }: DatePickerHeaderProps) {\n\tconst { title, description, icon: Icon, align = 'left' } = config;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('date-picker-header--component', \n\t\t\t\t'border-b border-border p-surface',\n\t\t\t\talign === 'center' ? 'text-center' : 'text-left',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t<Stack direction=\"horizontal\" gap=\"md\" wrap={false}>\n\t\t\t\t{/* Optional and neutral: colour stays for meaning. */}\n\t\t\t\t{!!Icon && (\n\t\t\t\t\t<div className=\"shrink-0\">\n\t\t\t\t\t\t<Icon aria-hidden=\"true\" className=\"size-icon text-muted-foreground\" />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<Stack gap=\"dense\" className={cn('flex-1', align === 'center' && !Icon && 'text-center')}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\ttag=\"h3\"\n\t\t\t\t\t\talign={align === 'center' ? 'center' : 'left'}\n\t\t\t\t\t\tcontainerClassName=\"space-y-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Heading>\n\t\t\t\t\t{!!description && <Text type=\"secondary\">{description}</Text>}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</div>\n\t);\n}\n\nDatePickerHeader.displayName = 'DatePickerHeader';\n","import { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\n\n/** Picker triggers resolve the same explicit/provider/default scale as fields. */\nexport function usePickerTriggerSize(sizeProp: FormControlSize | undefined): FormControlSize {\n const { defaultScale } = useDensityConfig();\n return resolveFormControlSize(sizeProp, defaultScale);\n}\n\nconst iconOnlyWidth: Record<FormControlSize, string> = {\n sm: 'w-control-sm', md: 'w-control', lg: 'w-control-lg',\n};\n\n/** Button composition contributes behavior; the shared field owner supplies chrome. */\nexport function pickerTriggerClasses(size: FormControlSize, iconOnly = false): string {\n return cn(formFieldTriggerClasses(size), 'justify-start', iconOnly && [iconOnlyWidth[size], 'shrink-0 justify-center px-0']);\n}\n","/**\n * Default user-facing strings for the date-picker family\n * (`<DatePicker>`, `<DateRangePicker>`, `<MonthYearPicker>`).\n *\n * Library is locale-agnostic — consumers wire backend i18n via the\n * `strings` prop and pass a `Locale` object from `date-fns/locale` (or\n * any equivalent) via the `locale` prop:\n *\n * import { bg } from 'date-fns/locale';\n * <DatePicker locale={bg} strings={{ today: t('date.today') }} />\n */\nimport type { DatePickerStrings } from './datepicker.types';\n\nexport const defaultDatePickerStrings: DatePickerStrings = {\n\tselectDate: 'Select a date',\n\tselectDates: 'Select dates',\n\tselectDateRange: 'Select date range',\n\tfrom: 'From',\n\tto: 'To',\n\tconfirm: 'Confirm',\n\tclear: 'Clear',\n\ttoday: 'Today',\n\tstartDate: 'Start date',\n\tendDate: 'End date',\n\tstartTime: 'Start time',\n\tendTime: 'End time',\n\thours: 'Hours',\n\tminutes: 'Minutes',\n\tseconds: 'Seconds',\n\tam: 'AM',\n\tpm: 'PM',\n\tminimumDays: (days: number) => `A minimum of ${days} days is required`,\n\tmaximumDays: (days: number) => `A maximum of ${days} days is allowed`,\n\tminimumDates: (min: number) => `Select at least ${min} dates`,\n\tmaximumDates: (max: number) => `Select up to ${max} dates`,\n\tdatesRequired: 'At least one date must be selected',\n\tdatesSelected: (count: number) => `${count} dates selected`,\n\tlastWeek: 'Last week',\n\tlastMonth: 'Last month',\n\tlastYear: 'Last year',\n\tnextWeek: 'Next week',\n\tnextMonth: 'Next month',\n\tnextYear: 'Next year',\n\tthisWeek: 'This Week',\n\tthisMonth: 'This Month',\n\tlast30Days: 'Last 30 Days',\n\tselectMonthYear: 'Select month and year',\n\tmonth: 'Month',\n\tyear: 'Year',\n};\n\nexport type { DatePickerStrings };\n","import { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../lib/utils\"\nimport { focusRecipes } from \"../../lib/focus-recipes\"\nimport { fieldStateRecipes } from \"../../lib/field-state-recipes\"\n\nconst toggleVariants = cva(\n `box-border border border-transparent py-0 font-sans text-foreground hover:text-foreground aria-pressed:bg-accent aria-pressed:text-accent-foreground ${focusRecipes.frame} ${fieldStateRecipes.invalid} gap-space-xs rounded-inner text-sm font-medium transition-[color,background-color,box-shadow] [&_svg:not([class*='size-'])]:size-icon group/toggle hover:bg-muted inline-flex items-center justify-center whitespace-nowrap outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0`,\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n outline: \"border-input hover:bg-muted border bg-transparent shadow-none\",\n },\n size: {\n default: \"h-control min-w-9 px-control\",\n sm: \"h-control-sm min-w-8 px-control-sm\",\n lg: \"h-control-lg min-w-10 px-control\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction Toggle({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Toggle, toggleVariants }\n","\"use client\"\n\nimport { Toggle as TogglePrimitive } from \"@base-ui/react/toggle\"\nimport { ToggleGroup as ToggleGroupPrimitive } from \"@base-ui/react/toggle-group\"\nimport { type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { toggleVariants } from \"./toggle\"\nimport { cn } from \"../../lib/utils\"\n\nconst ToggleGroupContext = React.createContext<\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n>({\n size: \"default\",\n variant: \"default\",\n spacing: 0,\n orientation: \"horizontal\",\n})\n\nexport type ToggleGroupProps = ToggleGroupPrimitive.Props &\n VariantProps<typeof toggleVariants> & {\n spacing?: number\n orientation?: \"horizontal\" | \"vertical\"\n }\n\nfunction ToggleGroup({\n className,\n variant,\n size,\n spacing = 0,\n orientation = \"horizontal\",\n children,\n ...props\n}: ToggleGroupProps) {\n return (\n <ToggleGroupPrimitive\n data-slot=\"toggle-group\"\n data-variant={variant}\n data-size={size}\n data-spacing={spacing}\n data-orientation={orientation}\n style={{ \"--gap\": spacing } as React.CSSProperties}\n className={cn(\n \"rounded-inner group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-[orientation=vertical]:flex-col data-[orientation=vertical]:items-stretch\",\n className\n )}\n {...props}\n >\n <ToggleGroupContext.Provider\n value={{ variant, size, spacing, orientation }}\n >\n {children}\n </ToggleGroupContext.Provider>\n </ToggleGroupPrimitive>\n )\n}\n\nfunction ToggleGroupItem({\n className,\n children,\n variant = \"default\",\n size = \"default\",\n ...props\n}: TogglePrimitive.Props & VariantProps<typeof toggleVariants>) {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <TogglePrimitive\n data-slot=\"toggle-group-item\"\n data-variant={context.variant || variant}\n data-size={context.size || size}\n data-spacing={context.spacing}\n className={cn(\n \"border-border group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-control-sm group-data-[spacing=0]/toggle-group:shadow-none group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:first:rounded-l-inner group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:first:rounded-t-inner group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:last:rounded-r-inner group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:last:rounded-b-inner shrink-0 focus:z-10 focus-visible:z-10 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-[orientation=horizontal]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-[orientation=vertical]/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t\",\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </TogglePrimitive>\n )\n}\n\nexport { ToggleGroup, ToggleGroupItem }\n","/**\n * TimePicker — the package's one time-of-day control.\n *\n * Merged from the former `base/forms/fields/time-picker.tsx` (a trigger\n * over a now/done confirm dialog) and `base/date-pickers/segmented-time-input.tsx`\n * (an inline hh:mm:ss segment editor). The segment editor is the engine;\n * `mode=\"popover\"` wraps it in an anchored surface behind a field-shaped\n * trigger. `SegmentedTimeInput` no longer exists as a public symbol.\n *\n * Import discipline: this module deep-imports\n * `@/components/base/forms/fields/input` rather than the `fields` barrel.\n * The barrel re-exports `DateTimeInput`, which imports `DatePicker` from\n * this very family — going through the barrel closed a genuine cycle\n * across two separately-bundled entrypoints. `input.tsx` reaches only\n * typography, `lib/`, `../form-sizing` and its own `./hooks`, so it cannot\n * loop back.\n */\nimport { Clock } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Input } from '../text-inputs';\nimport {\n\tformControlSizeClasses,\n\tformFieldTriggerClasses,\n\tresolveFormControlSize,\n} from '../forms/form-sizing';\nimport { Popover, PopoverContent, PopoverTrigger } from '../popover';\nimport { Text } from '../../typography';\nimport { ToggleGroup, ToggleGroupItem } from '../../ui/toggle-group';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport type { DisplayTimeSegments, NormalizedTime, TimePeriod } from './date-picker-helpers';\nimport {\n\talignNormalizedTimeToStep,\n\tdisplaySegmentsToNormalizedTime,\n\tformatNormalizedTimeForDisplay,\n\tHOURS_12_MAX,\n\tHOURS_24_MAX,\n\tMINUTES_MAX,\n\tnormalizedTimeToDisplaySegments,\n\tnormalizedTimeToString,\n\tparseTimeString,\n\tSECONDS_MAX,\n} from './date-picker-helpers';\n\nexport interface TimePickerStrings {\n\t/** Trigger text in `mode=\"popover\"` when there is no value. */\n\tplaceholder: string;\n\t/** Accessible name for the hours segment. */\n\thours: string;\n\t/** Accessible name for the minutes segment. */\n\tminutes: string;\n\t/** Accessible name for the seconds segment. Only rendered when `precision` is `'seconds'`. */\n\tseconds: string;\n\t/** Copy for the ante-meridiem half of the day. Only rendered when `format` is `'12'`. */\n\tam: string;\n\t/** Copy for the post-meridiem half of the day. Only rendered when `format` is `'12'`. */\n\tpm: string;\n}\n\nexport const defaultTimePickerStrings: TimePickerStrings = {\n\tplaceholder: 'Select time',\n\thours: 'Hours',\n\tminutes: 'Minutes',\n\tseconds: 'Seconds',\n\tam: 'AM',\n\tpm: 'PM',\n};\n\nexport interface TimePickerProps {\n\t/**\n\t * Selected time as `'HH:mm'` or `'HH:mm:ss'`, always on a 24-hour clock\n\t * regardless of `format`. Controlled. `null` or omitted leaves every\n\t * segment blank.\n\t */\n\tvalue?: string | null;\n\t/**\n\t * Fired with the next time in the same shape as `value` — `'HH:mm'` when\n\t * `precision` is `'minutes'`, `'HH:mm:ss'` when it is `'seconds'`. Fires\n\t * while typing and again on blur, always with a time aligned to `step`,\n\t * so a listener never sees a value `step` forbids. The segments keep\n\t * showing exactly what was typed until blur snaps them to that value.\n\t */\n\tonValueChange?: (value: string | null) => void;\n\n\t/**\n\t * `'inline'` renders the segments directly; `'popover'` puts them behind a\n\t * field-shaped trigger showing the formatted time. Default: `'inline'`.\n\t */\n\tmode?: 'inline' | 'popover';\n\t/** Clock convention. `'12'` adds the AM/PM segment. Default: `'24'`. */\n\tformat?: '12' | '24';\n\t/** Finest segment offered. Default: `'minutes'`. */\n\tprecision?: 'minutes' | 'seconds';\n\t/**\n\t * Alignment granularity, **in seconds**. Emitted times are snapped to the\n\t * nearest legal step; the display snaps on blur. Default: `60`.\n\t */\n\tstep?: number;\n\n\t/** Control-height preset. Falls back to `UIProvider.density.defaultScale`. */\n\tsize?: FormControlSize;\n\t/** Disables every segment, and the trigger in `mode=\"popover\"`. */\n\tdisabled?: boolean;\n\t/** Applies invalid control styling. Validation copy remains owned by `FormField`. */\n\tinvalid?: boolean;\n\t/** Trigger text in `mode=\"popover\"` when there is no value. Wins over `strings.placeholder`. */\n\tplaceholder?: string;\n\t/** String overrides merged over defaults. */\n\tstrings?: StringsProp<TimePickerStrings>;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/**\n\t * Lands on the popover trigger, or on the hours segment when inline, so\n\t * `<FormField label>` — which clones its child with a generated `id` —\n\t * gets a real `htmlFor` target.\n\t */\n\tid?: string;\n}\n\ntype TimeSegmentKey = 'hours' | 'minutes' | 'seconds';\n\nconst SEGMENT_ORDER: TimeSegmentKey[] = ['hours', 'minutes', 'seconds'];\nconst DEFAULT_24H = '00';\nconst DEFAULT_12H = '12';\n/** Shown for a segment with no value yet. Parsed back to the segment default. */\nconst BLANK = '--';\n\n/** Selected period: the same primary fill as a selected PillRadioGroup pill. */\nconst periodItemClasses = 'aria-pressed:bg-primary aria-pressed:text-primary-foreground';\n\nconst segmentWidthClasses: Record<FormControlSize, string> = {\n\tsm: 'w-12',\n\tmd: 'w-14',\n\tlg: 'w-16',\n};\n\nfunction sanitizeNumeric(value: string): string {\n\treturn value.replace(/\\D/g, '').slice(-2);\n}\n\nfunction ensureTwoDigits(value: string): string {\n\tif (value.length === 0) return '00';\n\tif (value.length === 1) return `0${value}`;\n\treturn value;\n}\n\nfunction getNextKey(key: TimeSegmentKey, includeSeconds: boolean): TimeSegmentKey | null {\n\tconst activeOrder = includeSeconds ? SEGMENT_ORDER : SEGMENT_ORDER.slice(0, 2);\n\tconst idx = activeOrder.indexOf(key);\n\treturn idx > -1 && idx < activeOrder.length - 1 ? activeOrder[idx + 1] : null;\n}\n\nfunction getPreviousKey(key: TimeSegmentKey, includeSeconds: boolean): TimeSegmentKey | null {\n\tconst activeOrder = includeSeconds ? SEGMENT_ORDER : SEGMENT_ORDER.slice(0, 2);\n\tconst idx = activeOrder.indexOf(key);\n\treturn idx > 0 ? activeOrder[idx - 1] : null;\n}\n\nfunction hoursToDisplay(hours: number, format: '12' | '24'): number {\n\tif (format === '24') {\n\t\treturn hours;\n\t}\n\treturn hours % 12 || 12;\n}\n\nfunction determinePeriodFromHours(hours: number): TimePeriod {\n\treturn hours >= 12 ? 'PM' : 'AM';\n}\n\nfunction segmentsWithDefaults(\n\tsegments: DisplayTimeSegments,\n\tformat: '12' | '24'\n): DisplayTimeSegments {\n\tif (format === '12') {\n\t\treturn { ...segments, period: segments.period ?? 'AM' };\n\t}\n\treturn { ...segments, period: undefined };\n}\n\n/** Blank segments for a `null` value — nothing selected, nothing implied. */\nfunction blankSegments(includeSeconds: boolean): DisplayTimeSegments {\n\treturn {\n\t\thours: BLANK,\n\t\tminutes: BLANK,\n\t\tseconds: includeSeconds ? BLANK : undefined,\n\t};\n}\n\n/**\n * Substitutes the segment defaults for anything still blank, so a partially\n * typed time converts to a real `NormalizedTime` instead of parsing `'--'`\n * as NaN.\n */\nfunction fillBlanks(segments: DisplayTimeSegments, format: '12' | '24'): DisplayTimeSegments {\n\tconst fallbackHours = format === '12' ? DEFAULT_12H : DEFAULT_24H;\n\treturn {\n\t\thours: segments.hours === BLANK ? fallbackHours : segments.hours,\n\t\tminutes: segments.minutes === BLANK ? DEFAULT_24H : segments.minutes,\n\t\tseconds: segments.seconds === BLANK ? DEFAULT_24H : segments.seconds,\n\t\tperiod: segments.period,\n\t};\n}\n\nfunction segmentsFromValue(\n\tvalue: string | null | undefined,\n\tformat: '12' | '24',\n\tincludeSeconds: boolean\n): DisplayTimeSegments {\n\tconst parsed = parseTimeString(value ?? undefined);\n\tif (!parsed) {\n\t\treturn blankSegments(includeSeconds);\n\t}\n\treturn segmentsWithDefaults(\n\t\tnormalizedTimeToDisplaySegments(parsed, format, includeSeconds),\n\t\tformat\n\t);\n}\n\n/**\n * TimePicker — segmented time-of-day input, inline or behind a popover trigger.\n */\nexport const TimePicker = React.forwardRef<HTMLElement, TimePickerProps>(function TimePicker({\n\tvalue,\n\tonValueChange,\n\tmode = 'inline',\n\tformat = '24',\n\tprecision = 'minutes',\n\tstep = 60,\n\tsize: sizeProp,\n\tdisabled,\n\tinvalid,\n\tplaceholder,\n\tstrings: stringsProp,\n\tclassName,\n\tid,\n}: TimePickerProps, ref) {\n\tconst t = useStrings(defaultTimePickerStrings, stringsProp);\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\tconst includeSeconds = precision === 'seconds';\n\n\tconst [open, setOpen] = React.useState(false);\n\n\tconst activeOrder = React.useMemo(\n\t\t() => (includeSeconds ? SEGMENT_ORDER : SEGMENT_ORDER.slice(0, 2)),\n\t\t[includeSeconds]\n\t);\n\n\tconst [segments, setSegments] = React.useState<DisplayTimeSegments>(() =>\n\t\tsegmentsFromValue(value, format, includeSeconds)\n\t);\n\n\t// Ref always holds the latest segments so rapid keystrokes read fresh values.\n\tconst segmentsRef = React.useRef(segments);\n\t// Flag to skip the value-sync useEffect when we emit the value ourselves.\n\tconst isLocalEditRef = React.useRef(false);\n\t// Two-digit entry in progress: which segment, and what has been typed\n\t// into it so far. Cleared whenever focus moves or the value is replaced.\n\tconst digitEntryRef = React.useRef<{ key: TimeSegmentKey; typed: string } | null>(null);\n\tconst updateSegments = React.useCallback((next: DisplayTimeSegments) => {\n\t\tsegmentsRef.current = next;\n\t\tsetSegments(next);\n\t}, []);\n\n\tconst inputRefs = React.useRef<Record<TimeSegmentKey, HTMLInputElement | null>>({\n\t\thours: null,\n\t\tminutes: null,\n\t\tseconds: null,\n\t});\n\n\t// Sync from the `value` prop (e.g. external reset or date selection).\n\t// Skip when the change originated from our own emitAligned call, to avoid\n\t// snapping the display to the aligned value mid-typing.\n\tReact.useEffect(() => {\n\t\tif (isLocalEditRef.current) {\n\t\t\tisLocalEditRef.current = false;\n\t\t\treturn;\n\t\t}\n\t\tdigitEntryRef.current = null;\n\t\tupdateSegments(segmentsFromValue(value, format, includeSeconds));\n\t}, [value, format, includeSeconds, updateSegments]);\n\n\tconst toTimeString = React.useCallback(\n\t\t(time: NormalizedTime) => normalizedTimeToString(time, includeSeconds),\n\t\t[includeSeconds]\n\t);\n\n\t// Emit to the parent while typing so the form value stays current before\n\t// blur — but always step-aligned, so a listener never sees a time `step`\n\t// forbids. The display keeps the raw keystrokes (\"03\" on the way to\n\t// \"30\"); only blur snaps it to what was emitted.\n\tconst emitAligned = React.useCallback(\n\t\t(segs: DisplayTimeSegments) => {\n\t\t\tisLocalEditRef.current = true;\n\t\t\tconst normalized = displaySegmentsToNormalizedTime(\n\t\t\t\tfillBlanks(segs, format),\n\t\t\t\tformat,\n\t\t\t\tincludeSeconds\n\t\t\t);\n\t\t\tonValueChange?.(toTimeString(alignNormalizedTimeToStep(normalized, step, includeSeconds)));\n\t\t},\n\t\t[format, includeSeconds, onValueChange, step, toTimeString]\n\t);\n\n\t// Commit: align to step, notify parent, and snap the display.\n\t// Called on blur so the user sees the rounded value when done typing.\n\tconst commitSegments = React.useCallback(\n\t\t(segs: DisplayTimeSegments) => {\n\t\t\tconst normalized = displaySegmentsToNormalizedTime(\n\t\t\t\tfillBlanks(segs, format),\n\t\t\t\tformat,\n\t\t\t\tincludeSeconds\n\t\t\t);\n\t\t\tconst aligned = alignNormalizedTimeToStep(normalized, step, includeSeconds);\n\t\t\tonValueChange?.(toTimeString(aligned));\n\t\t\tupdateSegments(\n\t\t\t\tsegmentsWithDefaults(\n\t\t\t\t\tnormalizedTimeToDisplaySegments(aligned, format, includeSeconds),\n\t\t\t\t\tformat\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t\t[format, includeSeconds, onValueChange, step, toTimeString, updateSegments]\n\t);\n\n\tconst focusSegment = React.useCallback((key: TimeSegmentKey | null) => {\n\t\tif (!key) return;\n\t\tconst ref = inputRefs.current[key];\n\t\tif (ref) {\n\t\t\tref.focus();\n\t\t\tref.select();\n\t\t}\n\t}, []);\n\n\t// Conventional two-digit entry: the first keystroke in a segment starts a\n\t// fresh value, the second appends to it, and a third starts over. (It\n\t// used to compute `ones digit of the display * 10 + digit`, so the\n\t// second digit of an entry usually saturated the segment instead of\n\t// completing it.)\n\tconst applyDigitInput = React.useCallback(\n\t\t(segmentKey: TimeSegmentKey, digit: number) => {\n\t\t\tconst current = fillBlanks(segmentsRef.current, format);\n\t\t\tconst inProgress = digitEntryRef.current;\n\t\t\tconst typed =\n\t\t\t\tinProgress && inProgress.key === segmentKey && inProgress.typed.length === 1\n\t\t\t\t\t? `${inProgress.typed}${digit}`\n\t\t\t\t\t: String(digit);\n\t\t\tdigitEntryRef.current = { key: segmentKey, typed };\n\t\t\tconst candidate = Number.parseInt(typed, 10);\n\t\t\tconst next: DisplayTimeSegments = { ...current };\n\t\t\tlet nextPeriod = next.period ?? 'AM';\n\n\t\t\tif (segmentKey === 'hours') {\n\t\t\t\tif (format === '24') {\n\t\t\t\t\tconst clamped = Math.min(Math.max(candidate, 0), HOURS_24_MAX);\n\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t} else {\n\t\t\t\t\tif (candidate === 0) {\n\t\t\t\t\t\tnextPeriod = 'AM';\n\t\t\t\t\t\tnext.hours = DEFAULT_12H;\n\t\t\t\t\t} else if (candidate > 12) {\n\t\t\t\t\t\tnextPeriod = determinePeriodFromHours(candidate);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(hoursToDisplay(candidate, '12').toString());\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst clamped = Math.min(Math.max(candidate, 1), HOURS_12_MAX);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t\t\tnextPeriod = current.period ?? determinePeriodFromHours(candidate);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (segmentKey === 'minutes') {\n\t\t\t\tnext.minutes = ensureTwoDigits(Math.min(Math.max(candidate, 0), MINUTES_MAX).toString());\n\t\t\t} else if (segmentKey === 'seconds') {\n\t\t\t\tnext.seconds = ensureTwoDigits(Math.min(Math.max(candidate, 0), SECONDS_MAX).toString());\n\t\t\t}\n\n\t\t\tconst updated = { ...next, period: format === '12' ? nextPeriod : undefined };\n\t\t\tupdateSegments(updated);\n\t\t\temitAligned(updated);\n\t\t},\n\t\t[format, updateSegments, emitAligned]\n\t);\n\n\t// Fallback for paste / IME: parses the raw input string.\n\tconst handleNumericChange = React.useCallback(\n\t\t(key: TimeSegmentKey, rawValue: string) => {\n\t\t\tdigitEntryRef.current = null;\n\t\t\tconst sanitized = sanitizeNumeric(rawValue);\n\t\t\tconst next: DisplayTimeSegments = { ...fillBlanks(segmentsRef.current, format) };\n\t\t\tlet nextPeriod = next.period ?? 'AM';\n\n\t\t\tif (key === 'hours') {\n\t\t\t\tif (format === '24') {\n\t\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\t\tconst clamped = Number.isNaN(v) ? 0 : Math.min(Math.max(v, 0), HOURS_24_MAX);\n\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t} else {\n\t\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\t\tif (Number.isNaN(v)) {\n\t\t\t\t\t\tnext.hours = DEFAULT_12H;\n\t\t\t\t\t\tnextPeriod = next.period ?? 'AM';\n\t\t\t\t\t} else if (sanitized.length === 2 && v > 12) {\n\t\t\t\t\t\tnextPeriod = determinePeriodFromHours(v);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(hoursToDisplay(v, '12').toString());\n\t\t\t\t\t} else if (v === 0) {\n\t\t\t\t\t\tnextPeriod = 'AM';\n\t\t\t\t\t\tnext.hours = DEFAULT_12H;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst clamped = Math.min(Math.max(v, 1), HOURS_12_MAX);\n\t\t\t\t\t\tnext.hours = ensureTwoDigits(clamped.toString());\n\t\t\t\t\t\tif (sanitized.length === 2) {\n\t\t\t\t\t\t\tnextPeriod = next.period ?? determinePeriodFromHours(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key === 'minutes') {\n\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\tconst clamped = Number.isNaN(v) ? 0 : Math.min(Math.max(v, 0), MINUTES_MAX);\n\t\t\t\tnext.minutes = ensureTwoDigits(clamped.toString());\n\t\t\t} else if (key === 'seconds') {\n\t\t\t\tconst v = Number.parseInt(sanitized || '0', 10);\n\t\t\t\tconst clamped = Number.isNaN(v) ? 0 : Math.min(Math.max(v, 0), SECONDS_MAX);\n\t\t\t\tnext.seconds = ensureTwoDigits(clamped.toString());\n\t\t\t}\n\n\t\t\tconst updated = { ...next, period: format === '12' ? nextPeriod : undefined };\n\t\t\tupdateSegments(updated);\n\t\t\temitAligned(updated);\n\t\t},\n\t\t[format, updateSegments, emitAligned]\n\t);\n\n\tconst handlePeriodChange = React.useCallback(\n\t\t(period: TimePeriod) => {\n\t\t\tif (format !== '12') return;\n\t\t\tdigitEntryRef.current = null;\n\t\t\tcommitSegments({ ...fillBlanks(segmentsRef.current, format), period });\n\t\t},\n\t\t[commitSegments, format]\n\t);\n\n\t// On blur: commit the current segments (align to step + notify parent),\n\t// and end any two-digit entry that was in progress.\n\tconst handleBlur = React.useCallback(() => {\n\t\tdigitEntryRef.current = null;\n\t\tcommitSegments(segmentsRef.current);\n\t}, [commitSegments]);\n\n\t// Entering a segment starts a new two-digit entry.\n\tconst handleFocus = React.useCallback((event: React.FocusEvent<HTMLInputElement>) => {\n\t\tdigitEntryRef.current = null;\n\t\tevent.target.select();\n\t}, []);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(event: React.KeyboardEvent<HTMLInputElement>, key: TimeSegmentKey) => {\n\t\t\tconst isDigitKey = event.key.length === 1 && /\\d/.test(event.key);\n\t\t\tif (isDigitKey && !event.metaKey && !event.ctrlKey && !event.altKey) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tapplyDigitInput(key, Number.parseInt(event.key, 10));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === 'ArrowRight') {\n\t\t\t\tfocusSegment(getNextKey(key, includeSeconds));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === 'ArrowLeft') {\n\t\t\t\tfocusSegment(getPreviousKey(key, includeSeconds));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (event.key === 'Backspace') {\n\t\t\t\tconst target = event.currentTarget;\n\t\t\t\tif (target.selectionStart === 0 && target.selectionEnd === 0) {\n\t\t\t\t\tfocusSegment(getPreviousKey(key, includeSeconds));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[applyDigitInput, focusSegment, includeSeconds]\n\t);\n\n\tconst periodToggleValue = React.useMemo<TimePeriod[] | undefined>(() => {\n\t\tif (format !== '12') return undefined;\n\t\treturn segments.period ? [segments.period] : undefined;\n\t}, [format, segments.period]);\n\n\tconst segmentLabels: Record<TimeSegmentKey, string> = {\n\t\thours: t.hours,\n\t\tminutes: t.minutes,\n\t\tseconds: t.seconds,\n\t};\n\n\tconst editor = (\n\t\t<div\n\t\t\tref={mode === 'inline' ? (ref as React.Ref<HTMLDivElement>) : undefined}\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center gap-space-md [&>.input--component]:w-auto [&>.input--component]:shrink-0',\n\t\t\t\tmode === 'inline' && ['time-picker--component', className]\n\t\t\t)}\n\t\t>\n\t\t\t{activeOrder.map((segmentKey, index) => (\n\t\t\t\t<React.Fragment key={segmentKey}>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\tinputRefs.current[segmentKey] = node;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tid={segmentKey === 'hours' && mode === 'inline' ? id : undefined}\n\t\t\t\t\t\tvalue={segments[segmentKey] ?? BLANK}\n\t\t\t\t\t\tonChange={(event) => handleNumericChange(segmentKey, event.target.value)}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tonKeyDown={(event) => handleKeyDown(event, segmentKey)}\n\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\tpattern=\"\\d*\"\n\t\t\t\t\t\tmaxLength={2}\n\t\t\t\t\t\tshowCharacterCount={false}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\taria-label={segmentLabels[segmentKey]}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tclassName={cn('time-picker--segment text-center', segmentWidthClasses[size])}\n\t\t\t\t\t/>\n\t\t\t\t\t{index < activeOrder.length - 1 && (\n\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">:</Text>\n\t\t\t\t\t)}\n\t\t\t\t</React.Fragment>\n\t\t\t))}\n\n\t\t\t{format === '12' && (\n\t\t\t\t// A joined outline group with the same frame as the segments beside it;\n\t\t\t\t// the chosen half of the day reads like a selected PillRadioGroup pill.\n\t\t\t\t<ToggleGroup\n\t\t\t\t\tvalue={periodToggleValue}\n\t\t\t\t\tonValueChange={(values) => {\n\t\t\t\t\t\tconst period = values[0];\n\t\t\t\t\t\tif (!period) return;\n\t\t\t\t\t\thandlePeriodChange(period as TimePeriod);\n\t\t\t\t\t}}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize={size === 'sm' ? 'sm' : 'default'}\n\t\t\t\t\tclassName=\"time-picker--period\"\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroupItem value=\"AM\" aria-label={t.am} className={cn(formControlSizeClasses[size], periodItemClasses)}>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t{t.am}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t\t<ToggleGroupItem value=\"PM\" aria-label={t.pm} className={cn(formControlSizeClasses[size], periodItemClasses)}>\n\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t{t.pm}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</ToggleGroupItem>\n\t\t\t\t</ToggleGroup>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tif (mode === 'inline') {\n\t\treturn editor;\n\t}\n\n\t// Read the trigger off the local segments rather than `value`, so an\n\t// uncontrolled call site still sees what it typed.\n\tconst isBlank = segments.hours === BLANK && segments.minutes === BLANK;\n\tconst triggerText = isBlank\n\t\t? (placeholder ?? t.placeholder)\n\t\t: formatNormalizedTimeForDisplay(\n\t\t\tdisplaySegmentsToNormalizedTime(fillBlanks(segments, format), format, includeSeconds),\n\t\t\tincludeSeconds,\n\t\t\tformat,\n\t\t\t{ am: t.am, pm: t.pm }\n\t\t);\n\n\treturn (\n\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t<PopoverTrigger\n\t\t\t\tref={ref as React.Ref<HTMLButtonElement>}\n\t\t\t\tid={id}\n\t\t\t\taria-expanded={open}\n\t\t\t\taria-invalid={invalid}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'time-picker--component',\n\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t'justify-start',\n\t\t\t\t\tisBlank && 'text-muted-foreground',\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Clock className=\"size-icon shrink-0\" />\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t{triggerText}\n\t\t\t\t</Text>\n\t\t\t</PopoverTrigger>\n\t\t\t<PopoverContent className=\"time-picker--panel w-auto\" align=\"start\">\n\t\t\t\t{editor}\n\t\t\t</PopoverContent>\n\t\t</Popover>\n\t);\n});\n\nTimePicker.displayName = 'TimePicker';\n","/**\n * Single-date variant of <DatePicker>, moved out of date-picker.tsx\n * unchanged. Internal: date-picker.tsx is the only importer, and\n * date-pickers/index.ts does not re-export it.\n */\nimport { format } from 'date-fns';\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '../buttons';\nimport { Calendar } from '../../ui/calendar';\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger\n} from '../popover';\nimport { Separator } from '../display/separator';\nimport { FormField } from '../forms/form-field';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { DatePickerField } from './date-picker-field';\nimport { DatePickerFooter } from './date-picker-footer';\nimport { DatePickerHeader } from './date-picker-header';\nimport {\n\tcreateDateOutput,\n\tapplyTimeToDate,\n\tformatDateButtonText,\n\tcreateDefaultNormalizedTime,\n\tformatNormalizedTimeForDisplay,\n\tnormalizedTimeToString,\n\tparseTimeString,\n\treadableFormatIncludesTime,\n\talignNormalizedTimeToStep,\n\tgetDayPickerYearBounds\n} from './date-picker-helpers';\nimport type { NormalizedTime } from './date-picker-helpers';\nimport { pickerTriggerClasses, usePickerTriggerSize } from './date-picker.recipes';\nimport { formControlIconClasses } from '../forms/form-sizing';\nimport { resolvePickerButtonProps } from './date-picker-internals';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport type {\n\tSingleDatePickerProps,\n\tDateOutput\n} from './datepicker.types';\nimport { TimePicker } from './time-picker';\n\n// Single Date Picker Component\nexport function SingleDatePicker({\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tformat: dateFormat = 'yyyy-MM-dd',\n\treadableFormat = 'PPP',\n\tplaceholder,\n\tcloseOnSelect = true,\n\twithTime,\n\tdisabledDates,\n\tcalendarProps,\n\topen,\n\tsetOpen,\n\tt,\n\tdateFnsLocale,\n\tcaptionLayout,\n\tyearBounds,\n\trootRef,\n\t...baseProps\n}: SingleDatePickerProps & {\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\tt: typeof defaultDatePickerStrings;\n\tdateFnsLocale: DateFnsLocale;\n\tcaptionLayout: 'label' | 'dropdown';\n\tyearBounds: ReturnType<typeof getDayPickerYearBounds>;\n\t/** Forwarded from `DatePicker`, landing on this mode's root element. */\n\trootRef?: React.Ref<HTMLDivElement>;\n}) {\n\tconst size = usePickerTriggerSize(baseProps.size);\n\tconst generatedTriggerId = React.useId();\n\tconst triggerId = baseProps.id ?? generatedTriggerId;\n\tconst describedBy = `${triggerId}-description`;\n\tconst hasError = baseProps.error !== undefined && baseProps.error !== null && baseProps.error !== '';\n\tconst isInvalid = hasError || Boolean(baseProps.invalid);\n\tconst ariaDescribedBy = hasError ? describedBy : undefined;\n\tconst timeFormat = withTime?.format ?? '24';\n\tconst timeStep = withTime?.step ?? 60;\n\tconst includeSeconds = withTime?.showSeconds ?? false;\n\tconst readableHasTime = readableFormatIncludesTime(readableFormat);\n\tconst showTimeInButton = withTime?.showTimeInButton ?? !readableHasTime;\n\tconst [date, setDate] = React.useState<Date | undefined>(() => {\n\t\treturn value ?? defaultValue;\n\t});\n\n\t// `null` until a date exists to take a time from. A control with nothing\n\t// selected must not display a time, and seeding from the wall clock made\n\t// the popover open on \"now\" as though it had been chosen.\n\tconst [time, setTime] = React.useState<NormalizedTime | null>(() => {\n\t\tconst initial = value ?? defaultValue;\n\t\treturn initial ? createDefaultNormalizedTime(initial, includeSeconds, timeStep) : null;\n\t});\n\tconst previousValueRef = React.useRef<Date | undefined>(value ?? defaultValue ?? undefined);\n\tconst defaultInitializedRef = React.useRef(false);\n\tconst lastValueDefinedRef = React.useRef(value !== undefined);\n\n\t// Create output helper\n\tconst createOutput = React.useCallback(\n\t\t(selectedDate: Date | undefined, overrideTime?: NormalizedTime): DateOutput => {\n\t\t\tlet finalDate = selectedDate;\n\t\t\tconst effectiveTime = overrideTime ?? time;\n\t\t\tif (selectedDate && withTime?.enabled && effectiveTime) {\n\t\t\t\tconst applied = applyTimeToDate(selectedDate, effectiveTime);\n\t\t\t\tfinalDate = Number.isFinite(applied.getTime()) ? applied : undefined;\n\t\t\t}\n\t\t\treturn createDateOutput(finalDate, dateFormat, readableFormat, dateFnsLocale);\n\t\t},\n\t\t[dateFormat, readableFormat, dateFnsLocale, withTime, time]\n\t);\n\n\tReact.useEffect(() => {\n\t\tconst isTimeEnabled = Boolean(withTime?.enabled);\n\t\tconst wasValueDefined = lastValueDefinedRef.current;\n\t\tconst isValueDefined = value !== undefined;\n\n\t\tconst applyState = (baseDate: Date, emitChange: boolean) => {\n\t\t\tconst normalized = alignNormalizedTimeToStep(\n\t\t\t\tcreateDefaultNormalizedTime(baseDate, includeSeconds, timeStep),\n\t\t\t\ttimeStep,\n\t\t\t\tincludeSeconds\n\t\t\t);\n\t\t\tsetDate((current) => {\n\t\t\t\tconst currentTime = current?.getTime?.();\n\t\t\t\tconst nextTime = baseDate.getTime();\n\t\t\t\treturn currentTime !== nextTime ? baseDate : current;\n\t\t\t});\n\t\t\tsetTime((current) => {\n\t\t\t\tif (\n\t\t\t\t\tcurrent\n\t\t\t\t\t&& current.hours === normalized.hours\n\t\t\t\t\t&& current.minutes === normalized.minutes\n\t\t\t\t\t&& current.seconds === normalized.seconds\n\t\t\t\t) {\n\t\t\t\t\treturn current;\n\t\t\t\t}\n\t\t\t\treturn normalized;\n\t\t\t});\n\t\t\tpreviousValueRef.current = baseDate;\n\t\t\tdefaultInitializedRef.current = true;\n\t\t\tif (emitChange && isTimeEnabled) {\n\t\t\t\tconst applied = applyTimeToDate(baseDate, normalized);\n\t\t\t\tonValueChange?.(createDateOutput(applied, dateFormat, readableFormat, dateFnsLocale));\n\t\t\t}\n\t\t};\n\n\t\tif (!isTimeEnabled) {\n\t\t\tdefaultInitializedRef.current = false;\n\t\t\tpreviousValueRef.current = value ?? defaultValue ?? undefined;\n\t\t\tsetDate(value ?? defaultValue);\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tconst prev = previousValueRef.current;\n\t\tconst prevTime = prev?.getTime?.();\n\t\tconst valueTime = value?.getTime?.();\n\n\t\tif (!isValueDefined && wasValueDefined && defaultValue === undefined) {\n\t\t\tdefaultInitializedRef.current = false;\n\t\t\tpreviousValueRef.current = undefined;\n\t\t}\n\n\t\tif (value !== undefined && valueTime !== prevTime) {\n\t\t\tapplyState(value, false);\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (value === undefined && defaultValue !== undefined) {\n\t\t\tconst defaultMillis = defaultValue.getTime();\n\t\t\tif (prevTime !== defaultMillis || !defaultInitializedRef.current) {\n\t\t\t\tapplyState(defaultValue, false);\n\t\t\t}\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tif (value === undefined && defaultValue === undefined && !defaultInitializedRef.current) {\n\t\t\tdefaultInitializedRef.current = true;\n\t\t\tlastValueDefinedRef.current = isValueDefined;\n\t\t\treturn;\n\t\t}\n\n\t\tlastValueDefinedRef.current = isValueDefined;\n\t}, [\n\t\twithTime?.enabled,\n\t\tvalue,\n\t\tdefaultValue,\n\t\tincludeSeconds,\n\t\ttimeStep,\n\t\tonValueChange,\n\t\tdateFormat,\n\t\treadableFormat,\n\t\tdateFnsLocale,\n\t]);\n\n\tReact.useEffect(() => {\n\t\tif (!withTime?.enabled) {\n\t\t\treturn;\n\t\t}\n\t\tsetTime((current) => {\n\t\t\tif (!current) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\tconst aligned = alignNormalizedTimeToStep(current, timeStep, includeSeconds);\n\t\t\tif (\n\t\t\t\tcurrent.hours === aligned.hours &&\n\t\t\t\tcurrent.minutes === aligned.minutes &&\n\t\t\t\tcurrent.seconds === aligned.seconds\n\t\t\t) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn aligned;\n\t\t});\n\t}, [withTime?.enabled, timeStep, includeSeconds]);\n\n\t// Handle selection\n\tconst handleSelect = React.useCallback(\n\t\t(newDate: Date | undefined) => {\n\t\t\tsetDate(newDate);\n\t\t\tlet seededTime: NormalizedTime | undefined;\n\t\t\tif (withTime?.enabled && newDate) {\n\t\t\t\tdefaultInitializedRef.current = true;\n\t\t\t\tpreviousValueRef.current = newDate;\n\t\t\t\t// First date of an empty control: the time starts from that\n\t\t\t\t// date's own midnight rather than staying blank.\n\t\t\t\tif (!time) {\n\t\t\t\t\tseededTime = createDefaultNormalizedTime(newDate, includeSeconds, timeStep);\n\t\t\t\t\tsetTime(seededTime);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tonValueChange?.(createOutput(newDate, seededTime));\n\t\t\tif (closeOnSelect && newDate) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[onValueChange, createOutput, closeOnSelect, setOpen, withTime, time, includeSeconds, timeStep]\n\t);\n\n\t// Handle time change. <TimePicker> speaks 'HH:mm[:ss]' strings; this\n\t// variant keeps a NormalizedTime, so the two convert at the seam.\n\tconst handleTimeChange = React.useCallback(\n\t\t(next: string | null) => {\n\t\t\tconst nextTime = parseTimeString(next ?? undefined);\n\t\t\tif (!nextTime) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetTime(nextTime);\n\t\t\tif (date) {\n\t\t\t\tonValueChange?.(createOutput(date, nextTime));\n\t\t\t}\n\t\t},\n\t\t[date, onValueChange, createOutput]\n\t);\n\n\tconst timeDisplay = React.useMemo(() => {\n\t\tif (!withTime?.enabled || !time) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn formatNormalizedTimeForDisplay(time, includeSeconds, timeFormat, {\n\t\t\tam: t.am,\n\t\t\tpm: t.pm,\n\t\t});\n\t}, [withTime?.enabled, time, includeSeconds, timeFormat, t]);\n\n\t// Button text\n\tconst buttonText = React.useMemo(\n\t\t() => formatDateButtonText(\n\t\t\tdate,\n\t\t\treadableFormat,\n\t\t\tplaceholder,\n\t\t\tt.selectDate,\n\t\t\tshowTimeInButton ? timeDisplay : undefined,\n\t\t\tdateFnsLocale\n\t\t),\n\t\t[date, readableFormat, placeholder, t, timeDisplay, showTimeInButton, dateFnsLocale]\n\t);\n\n\tconst footerSummary = React.useMemo(\n\t\t() => (date ? format(date, readableFormat, { locale: dateFnsLocale }) : undefined),\n\t\t[date, readableFormat, dateFnsLocale]\n\t);\n\n\treturn (\n\t\t<DatePickerField\n\t\t\trootRef={rootRef}\n\t\t\tclassName={baseProps.className}\n\t\t\tlabel={baseProps.label}\n\t\t\thint={baseProps.hint}\n\t\t\terror={baseProps.error}\n\t\t\ttriggerId={triggerId}\n\t\t\tdescribedById={describedBy}\n\t\t>\n\t\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={(triggerProps) => {\n\t\t\t\t\t\t\tconst resolved = resolvePickerButtonProps(baseProps.buttonTone, baseProps.buttonStyle);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tid={triggerId}\n\t\t\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\taria-invalid={isInvalid}\n\t\t\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tpickerTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t!date && 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CalendarIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t{buttonText}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t<PopoverContent\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"w-auto gap-0\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t{!!baseProps.header && <DatePickerHeader config={baseProps.header} />}\n\n\t\t\t\t\t{/* Calendar */}\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\tmode=\"single\"\n\t\t\t\t\t\tselected={date}\n\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\tdefaultMonth={date}\n\t\t\t\t\t\tnumberOfMonths={baseProps.numberOfMonths}\n\t\t\t\t\t\tshowOutsideDays={baseProps.showOutsideDays}\n\t\t\t\t\t\tdisabled={disabledDates ?? baseProps.disabled}\n\t\t\t\t\t\tlocale={dateFnsLocale}\n\t\t\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\t\t\tstartMonth={yearBounds.startMonth}\n\t\t\t\t\t\tendMonth={yearBounds.endMonth}\n\t\t\t\t\t\t{...calendarProps}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* Time Selection: an ordinary labelled field row, no decorative glyph. */}\n\t\t\t\t\t{!!withTime?.enabled && <>\n\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t<div className=\"date-picker--time p-surface\">\n\t\t\t\t\t\t\t\t<FormField label={t.startTime}>\n\t\t\t\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t\t\t\tvalue={time ? normalizedTimeToString(time, includeSeconds) : null}\n\t\t\t\t\t\t\t\t\t\tonValueChange={handleTimeChange}\n\t\t\t\t\t\t\t\t\t\tformat={timeFormat}\n\t\t\t\t\t\t\t\t\t\tprecision={includeSeconds ? 'seconds' : 'minutes'}\n\t\t\t\t\t\t\t\t\t\tstep={timeStep}\n\t\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t\t\t// Pinned: the popover's time row is deliberately\n\t\t\t\t\t\t\t\t\t\t// compact and must not grow with a consumer's\n\t\t\t\t\t\t\t\t\t\t// default control size.\n\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\t\thours: t.hours,\n\t\t\t\t\t\t\t\t\t\t\tminutes: t.minutes,\n\t\t\t\t\t\t\t\t\t\t\tseconds: t.seconds,\n\t\t\t\t\t\t\t\t\t\t\tam: t.am,\n\t\t\t\t\t\t\t\t\t\t\tpm: t.pm,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>}\n\n\t\t\t\t\t{/* Footer */}\n\t\t\t\t\t{!!baseProps.footer && (\n\t\t\t<DatePickerFooter\n\t\t\t\t\t\t\tconfig={baseProps.footer}\n\t\t\t\t\t\t\toutput={createOutput(date)}\n\t\t\t\t\t\t\thasSelection={!!date}\n\t\t\t\t\t\t\tautoSummary={footerSummary}\n\t\t\t\t\t\t/>\n\t\t)}\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\t\t</DatePickerField>\n\t);\n}\n","/**\n * Multiple-dates variant of <DatePicker>, moved out of date-picker.tsx\n * unchanged. Internal: date-picker.tsx is the only importer, and\n * date-pickers/index.ts does not re-export it.\n */\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '../buttons';\nimport { Calendar } from '../../ui/calendar';\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger\n} from '../popover';\nimport { Separator } from '../display/separator';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { DatePickerField } from './date-picker-field';\nimport { DatePickerFooter } from './date-picker-footer';\nimport { DatePickerHeader } from './date-picker-header';\nimport {\n\tcreateMultipleDatesOutput,\n\tgetMultipleDatesValidationMessage,\n\tformatMultipleDatesButtonText,\n\tgetDayPickerYearBounds\n} from './date-picker-helpers';\nimport { pickerTriggerClasses, usePickerTriggerSize } from './date-picker.recipes';\nimport { formControlIconClasses } from '../forms/form-sizing';\nimport { resolvePickerButtonProps } from './date-picker-internals';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport type {\n\tMultipleDatePickerProps,\n\tMultipleDatesOutput\n} from './datepicker.types';\n\n// Multiple Date Picker Component\nexport function MultipleDatePicker({\n\tvalue,\n\tdefaultValue,\n\t\tonValueChange,\n\t\tformat: dateFormat = 'yyyy-MM-dd',\n\t\treadableFormat = 'PPP',\n\t\tplaceholder,\n\t\tmin,\n\tmax,\n\trequired,\n\tcloseOnSelect = false,\n\tdisabledDates,\n\tcalendarProps,\n\topen,\n\tsetOpen,\n\tt,\n\tdateFnsLocale,\n\tcaptionLayout,\n\tyearBounds,\n\trootRef,\n\t...baseProps\n}: MultipleDatePickerProps & {\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\tt: typeof defaultDatePickerStrings;\n\tdateFnsLocale: DateFnsLocale;\n\tcaptionLayout: 'label' | 'dropdown';\n\tyearBounds: ReturnType<typeof getDayPickerYearBounds>;\n\t/** Forwarded from `DatePicker`, landing on this mode's root element. */\n\trootRef?: React.Ref<HTMLDivElement>;\n}) {\n\tconst size = usePickerTriggerSize(baseProps.size);\n\tconst generatedTriggerId = React.useId();\n\tconst triggerId = baseProps.id ?? generatedTriggerId;\n\tconst describedBy = `${triggerId}-description`;\n\tconst hasError = baseProps.error !== undefined && baseProps.error !== null && baseProps.error !== '';\n\tconst isInvalid = hasError || Boolean(baseProps.invalid);\n\tconst ariaDescribedBy = hasError ? describedBy : undefined;\n\tconst [dates, setDates] = React.useState<Date[]>(value ?? defaultValue ?? []);\n\n\t// Sync with controlled value\n\tReact.useEffect(() => {\n\t\tif (value !== undefined) {\n\t\t\tsetDates(value);\n\t\t}\n\t}, [value]);\n\n\t// Create output helper\n\tconst createOutput = React.useCallback(\n\t\t(dates: Date[]): MultipleDatesOutput =>\n\t\t\tcreateMultipleDatesOutput(dates, dateFormat, readableFormat, dateFnsLocale),\n\t\t[dateFormat, readableFormat, dateFnsLocale]\n\t);\n\n\t// Handle selection. `max` is enforced by the calendar, which is handed\n\t// the same `max` prop — the component is never given more dates than it\n\t// allows, so a guard here would be dead code.\n\tconst handleSelect = React.useCallback(\n\t\t(newDates?: Date[] | Date) => {\n\t\t\tconst selectedDates = Array.isArray(newDates) ? newDates : newDates ? [newDates] : [];\n\n\t\t\tsetDates(selectedDates);\n\t\t\tonValueChange?.(createOutput(selectedDates));\n\n\t\t\tif (closeOnSelect && selectedDates.length > 0) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[onValueChange, createOutput, closeOnSelect, setOpen]\n\t);\n\n\t// Button text\n\tconst buttonText = React.useMemo(() =>\n\t\tformatMultipleDatesButtonText(dates, readableFormat, placeholder, t.selectDates, t, dateFnsLocale),\n\t\t[dates, readableFormat, placeholder, t, dateFnsLocale]\n\t);\n\n\t// Validation message\n\tconst validationMessage = React.useMemo(() =>\n\t\tgetMultipleDatesValidationMessage(dates, min, max, required, t),\n\t\t[dates, min, max, required, t]\n\t);\n\n\tconst footerSummary = React.useMemo(\n\t\t() => (dates.length > 0 ? t.datesSelected(dates.length) : undefined),\n\t\t[dates.length, t]\n\t);\n\n\treturn (\n\t\t<DatePickerField\n\t\t\trootRef={rootRef}\n\t\t\tclassName={baseProps.className}\n\t\t\tlabel={baseProps.label}\n\t\t\thint={baseProps.hint}\n\t\t\terror={baseProps.error}\n\t\t\ttriggerId={triggerId}\n\t\t\tdescribedById={describedBy}\n\t\t>\n\t\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={(triggerProps) => {\n\t\t\t\t\t\t\tconst resolved = resolvePickerButtonProps(baseProps.buttonTone, baseProps.buttonStyle);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tid={triggerId}\n\t\t\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\taria-invalid={isInvalid}\n\t\t\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tpickerTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\tdates.length === 0 && 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CalendarIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t{buttonText}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t<PopoverContent\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"w-auto gap-0\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t{!!baseProps.header && <DatePickerHeader config={baseProps.header} />}\n\n\t\t\t\t\t{/* Calendar */}\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\tmode=\"multiple\"\n\t\t\t\t\t\tselected={dates}\n\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\tdefaultMonth={dates[0]}\n\t\t\t\t\t\tnumberOfMonths={baseProps.numberOfMonths}\n\t\t\t\t\t\tshowOutsideDays={baseProps.showOutsideDays}\n\t\t\t\t\t\tdisabled={disabledDates ?? baseProps.disabled}\n\t\t\t\t\t\tlocale={dateFnsLocale}\n\t\t\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\t\t\tstartMonth={yearBounds.startMonth}\n\t\t\t\t\t\tendMonth={yearBounds.endMonth}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t{...calendarProps}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* Validation Message */}\n\t\t\t\t\t{!!validationMessage && <>\n\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t<div className=\"p-surface\">\n\t\t\t\t\t\t\t\t<Text type=\"secondary\">{validationMessage}</Text>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>}\n\n\t\t\t\t\t{/* Footer */}\n\t\t\t\t\t{!!baseProps.footer && (\n\t\t\t<DatePickerFooter\n\t\t\t\t\t\t\tconfig={baseProps.footer}\n\t\t\t\t\t\t\toutput={createOutput(dates)}\n\t\t\t\t\t\t\thasSelection={dates.length > 0}\n\t\t\t\t\t\t\tautoSummary={footerSummary}\n\t\t\t\t\t\t/>\n\t\t)}\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\n\t\t</DatePickerField>\n\t);\n}\n","/**\n * Date-range variant of <DatePicker>, moved out of date-picker.tsx\n * unchanged. Internal: date-picker.tsx is the only importer, and\n * date-pickers/index.ts does not re-export it.\n */\nimport { format } from 'date-fns';\nimport type { Locale as DateFnsLocale } from 'date-fns/locale';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport * as React from 'react';\nimport type { DateRange } from 'react-day-picker';\n\nimport { Button } from '../buttons';\nimport { Calendar } from '../../ui/calendar';\nimport { useDatesConfig } from '../../../lib/ui-provider';\nimport { useIsMobile } from '../../../hooks/use-mobile';\nimport {\n\tPopover,\n\tPopoverContent,\n\tPopoverTrigger\n} from '../popover';\nimport { Separator } from '../display/separator';\nimport { FormField } from '../forms/form-field';\nimport { Grid, Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nimport { DatePickerField } from './date-picker-field';\nimport { DatePickerFooter } from './date-picker-footer';\nimport { DatePickerHeader } from './date-picker-header';\nimport {\n\tcreateDateRangeOutput,\n\tapplyTimeToDate,\n\tvalidateDateRange,\n\tgetRangeValidationMessage,\n\tformatRangeButtonText,\n\tcreateDefaultNormalizedTime,\n\tformatNormalizedTimeForDisplay,\n\tnormalizedTimeToString,\n\tparseTimeString,\n\treadableFormatIncludesTime,\n\talignNormalizedTimeToStep,\n\tgetDayPickerYearBounds\n} from './date-picker-helpers';\nimport type { NormalizedTime } from './date-picker-helpers';\nimport { pickerTriggerClasses, usePickerTriggerSize } from './date-picker.recipes';\nimport { formControlIconClasses } from '../forms/form-sizing';\nimport {\n\tresolvePickerButtonProps,\n\tgetDefaultPresets\n} from './date-picker-internals';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport type {\n\tRangeDatePickerProps,\n\tDateRangeOutput,\n\tPresetDateRange\n} from './datepicker.types';\nimport { TimePicker } from './time-picker';\n\n// Range Date Picker Component\nexport function RangeDatePicker({\n\tvalue,\n\tdefaultValue,\n\tonValueChange,\n\tformat: dateFormat = 'yyyy-MM-dd',\n\treadableFormat = 'PPP',\n\tplaceholder,\n\twithConfirm = false,\n\tmin,\n\tmax,\n\tcloseOnSelect = true,\n\twithTime,\n\tpresets: presetsProp,\n\tdisabledDates,\n\tcalendarProps,\n\topen,\n\tsetOpen,\n\tt,\n\tdateFnsLocale,\n\tcaptionLayout,\n\tyearBounds,\n\trootRef,\n\t...baseProps\n}: RangeDatePickerProps & {\n\topen: boolean;\n\tsetOpen: (open: boolean) => void;\n\tt: typeof defaultDatePickerStrings;\n\tdateFnsLocale: DateFnsLocale;\n\tcaptionLayout: 'label' | 'dropdown';\n\tyearBounds: ReturnType<typeof getDayPickerYearBounds>;\n\t/** Forwarded from `DatePicker`, landing on this mode's root element. */\n\trootRef?: React.Ref<HTMLDivElement>;\n}) {\n\tconst isMobile = useIsMobile();\n\tconst resolvedNumberOfMonths = baseProps.numberOfMonths ?? (isMobile ? 1 : 2);\n\t// Resolve the start-of-week so the \"This week\" preset honors the\n\t// consumer's <UIProvider config={{ dates: { weekStartsOn: 0 } }}> setting.\n\t// Library default is 1 (Monday).\n\tconst { weekStartsOn = 1 } = useDatesConfig();\n\tconst presets = presetsProp ?? getDefaultPresets(t, weekStartsOn);\n\tconst size = usePickerTriggerSize(baseProps.size);\n\tconst generatedTriggerId = React.useId();\n\tconst triggerId = baseProps.id ?? generatedTriggerId;\n\tconst describedBy = `${triggerId}-description`;\n\tconst hasError = baseProps.error !== undefined && baseProps.error !== null && baseProps.error !== '';\n\tconst isInvalid = hasError || Boolean(baseProps.invalid);\n\tconst ariaDescribedBy = hasError ? describedBy : undefined;\n\tconst timeFormat = withTime?.format ?? '24';\n\tconst timeStep = withTime?.step ?? 60;\n\tconst includeSeconds = withTime?.showSeconds ?? false;\n\tconst readableHasTime = readableFormatIncludesTime(readableFormat);\n\tconst showTimeInButton = withTime?.showTimeInButton ?? !readableHasTime;\n\tconst showTimeInSummary = withTime?.showTimeInSummary ?? !readableHasTime;\n\tconst initialRange = value ?? defaultValue;\n\tconst [range, setRange] = React.useState<DateRange | undefined>(initialRange);\n\t// `null` until each end has a date to take a time from — an end with\n\t// nothing selected must not show the wall clock as though it had been\n\t// chosen. See the matching note in date-picker-single.tsx.\n\tconst [startTime, setStartTime] = React.useState<NormalizedTime | null>(() =>\n\t\tinitialRange?.from\n\t\t\t? createDefaultNormalizedTime(initialRange.from, includeSeconds, timeStep)\n\t\t\t: null\n\t);\n\tconst [endTime, setEndTime] = React.useState<NormalizedTime | null>(() =>\n\t\tinitialRange?.to\n\t\t\t? createDefaultNormalizedTime(initialRange.to, includeSeconds, timeStep)\n\t\t\t: null\n\t);\n\tconst previousValueRef = React.useRef<DateRange | undefined>(value);\n\n\t// Validation message\n\tconst validationMessage = React.useMemo(() =>\n\t\tgetRangeValidationMessage(range, min, max, t),\n\t\t[range, min, max, t]\n\t);\n\n\tconst hasValidationMessage = validationMessage !== undefined && validationMessage !== null && validationMessage !== '';\n\tconst validationText = typeof validationMessage === 'string' ? validationMessage : '';\n\n\t// Sync with controlled value\n\tReact.useEffect(() => {\n\t\tif (value !== undefined) {\n\t\t\tsetRange(value);\n\t\t}\n\t}, [value]);\n\n\t// Sync time segments when external range changes\n\tReact.useEffect(() => {\n\t\tif (!withTime?.enabled) {\n\t\t\tpreviousValueRef.current = value;\n\t\t\treturn;\n\t\t}\n\n\t\tconst prev = previousValueRef.current;\n\t\tconst nextFrom = value?.from;\n\t\tconst nextTo = value?.to;\n\n\t\tif (nextFrom) {\n\t\t\tsetStartTime(createDefaultNormalizedTime(nextFrom, includeSeconds, timeStep));\n\t\t} else if (prev?.from) {\n\t\t\tsetStartTime(null);\n\t\t}\n\n\t\tif (nextTo) {\n\t\t\tsetEndTime(createDefaultNormalizedTime(nextTo, includeSeconds, timeStep));\n\t\t} else if (prev?.to) {\n\t\t\tsetEndTime(null);\n\t\t}\n\n\t\tpreviousValueRef.current = value;\n\t}, [value, withTime?.enabled, includeSeconds, timeStep]);\n\n\tReact.useEffect(() => {\n\t\tif (!withTime?.enabled) {\n\t\t\treturn;\n\t\t}\n\t\tconst alignOrKeep = (current: NormalizedTime | null): NormalizedTime | null => {\n\t\t\tif (!current) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\tconst aligned = alignNormalizedTimeToStep(current, timeStep, includeSeconds);\n\t\t\tif (\n\t\t\t\tcurrent.hours === aligned.hours &&\n\t\t\t\tcurrent.minutes === aligned.minutes &&\n\t\t\t\tcurrent.seconds === aligned.seconds\n\t\t\t) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn aligned;\n\t\t};\n\t\tsetStartTime(alignOrKeep);\n\t\tsetEndTime(alignOrKeep);\n\t}, [withTime?.enabled, timeStep, includeSeconds]);\n\n\t// Create output helper\n\tconst createOutput = React.useCallback(\n\t\t(currentRange: DateRange | undefined): DateRangeOutput => {\n\t\t\tlet finalRange = currentRange;\n\t\t\tif (currentRange && withTime?.enabled) {\n\t\t\t\t// An end with no time of its own keeps the time the date\n\t\t\t\t// already carries, rather than borrowing the wall clock.\n\t\t\t\tfinalRange = {\n\t\t\t\t\t...currentRange,\n\t\t\t\t\tfrom: currentRange.from && startTime\n\t\t\t\t\t\t? applyTimeToDate(currentRange.from, startTime)\n\t\t\t\t\t\t: currentRange.from,\n\t\t\t\t\tto: currentRange.to && endTime\n\t\t\t\t\t\t? applyTimeToDate(currentRange.to, endTime)\n\t\t\t\t\t\t: currentRange.to,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn createDateRangeOutput(finalRange, dateFormat, readableFormat, dateFnsLocale);\n\t\t},\n\t\t[dateFormat, readableFormat, dateFnsLocale, withTime, startTime, endTime]\n\t);\n\n\t// <TimePicker> speaks 'HH:mm[:ss]' strings; this variant keeps a\n\t// NormalizedTime for each end, so the two convert at the seam.\n\tconst handleStartTimeChange = React.useCallback((next: string | null) => {\n\t\tconst parsed = parseTimeString(next ?? undefined);\n\t\tif (parsed) {\n\t\t\tsetStartTime(parsed);\n\t\t}\n\t}, []);\n\n\tconst handleEndTimeChange = React.useCallback((next: string | null) => {\n\t\tconst parsed = parseTimeString(next ?? undefined);\n\t\tif (parsed) {\n\t\t\tsetEndTime(parsed);\n\t\t}\n\t}, []);\n\n\t/**\n\t * react-day-picker completes a range on the *first* click, handing back\n\t * `{ from, to }` with both ends on the day just clicked. Taken at face\n\t * value that is a finished one-day range, which used to close the\n\t * popover before an end date could be chosen.\n\t *\n\t * So the two-click selection is driven from the clicked day instead:\n\t * the first click opens an incomplete range, the second closes it, and\n\t * a click on a finished range starts a new one. `triggerDate` is\n\t * undefined when a preset supplies a whole range, which is taken as-is.\n\t */\n\tconst resolveNextRange = React.useCallback(\n\t\t(\n\t\t\tdayPickerRange: DateRange | undefined,\n\t\t\ttriggerDate: Date | undefined,\n\t\t\tcurrent: DateRange | undefined\n\t\t): DateRange | undefined => {\n\t\t\tif (!triggerDate) {\n\t\t\t\treturn dayPickerRange;\n\t\t\t}\n\t\t\tif (!current?.from || current.to) {\n\t\t\t\treturn { from: triggerDate, to: undefined };\n\t\t\t}\n\t\t\treturn triggerDate < current.from\n\t\t\t\t? { from: triggerDate, to: current.from }\n\t\t\t\t: { from: current.from, to: triggerDate };\n\t\t},\n\t\t[]\n\t);\n\n\t// Handle selection\n\tconst handleSelect = React.useCallback(\n\t\t(dayPickerRange: DateRange | undefined, triggerDate?: Date) => {\n\t\t\tconst nextRange = resolveNextRange(dayPickerRange, triggerDate, range);\n\n\t\t\tsetRange(nextRange);\n\n\t\t\tif (withConfirm || withTime?.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// A range that breaks `min`/`max` is still reported and still\n\t\t\t// shown — with its validation message — rather than silently\n\t\t\t// discarded. Only a valid, complete range closes the popover.\n\t\t\tonValueChange?.(createOutput(nextRange));\n\n\t\t\tconst isComplete = Boolean(nextRange?.from && nextRange?.to);\n\t\t\tconst isValid = validateDateRange(nextRange, min, max).isValid;\n\t\t\tif (closeOnSelect && isComplete && isValid) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[range, resolveNextRange, withConfirm, withTime, onValueChange, createOutput, min, max, closeOnSelect, setOpen]\n\t);\n\n\t// Handle preset selection\n\tconst handlePresetSelect = React.useCallback(\n\t\t(preset: PresetDateRange) => {\n\t\t\tconst range = preset.getValue();\n\t\t\thandleSelect(range);\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\t// Handle confirm\n\tconst handleConfirm = React.useCallback(() => {\n\t\tonValueChange?.(createOutput(range));\n\t\tsetOpen(false);\n\t}, [range, onValueChange, createOutput, setOpen]);\n\n\tconst startTimeDisplay = React.useMemo(() => {\n\t\tif (!withTime?.enabled || !startTime) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn formatNormalizedTimeForDisplay(startTime, includeSeconds, timeFormat, {\n\t\t\tam: t.am,\n\t\t\tpm: t.pm,\n\t\t});\n\t}, [withTime?.enabled, startTime, includeSeconds, timeFormat, t]);\n\n\tconst endTimeDisplay = React.useMemo(() => {\n\t\tif (!withTime?.enabled || !endTime) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn formatNormalizedTimeForDisplay(endTime, includeSeconds, timeFormat, {\n\t\t\tam: t.am,\n\t\t\tpm: t.pm,\n\t\t});\n\t}, [withTime?.enabled, endTime, includeSeconds, timeFormat, t]);\n\n\t// Button text\n\tconst buttonText = React.useMemo(() => {\n\t\tif (withTime?.enabled && range?.from) {\n\t\t\tconst fromBase = format(range.from, readableFormat, { locale: dateFnsLocale });\n\t\t\tconst fromText = showTimeInButton && startTimeDisplay ? `${fromBase} ${startTimeDisplay}` : fromBase;\n\t\t\tif (range.to) {\n\t\t\t\tconst toBase = format(range.to, readableFormat, { locale: dateFnsLocale });\n\t\t\t\tconst toText = showTimeInButton && endTimeDisplay ? `${toBase} ${endTimeDisplay}` : toBase;\n\t\t\t\treturn `${fromText} - ${toText}`;\n\t\t\t}\n\t\t\treturn fromText;\n\t\t}\n\t\treturn formatRangeButtonText(range, readableFormat, placeholder, t.selectDateRange, dateFnsLocale);\n\t}, [withTime?.enabled, range, readableFormat, showTimeInButton, startTimeDisplay, endTimeDisplay, placeholder, t, dateFnsLocale]);\n\n\tconst footerSummary = React.useMemo(() => {\n\t\tif (!range?.from || !range?.to) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst fromBase = format(range.from, readableFormat, { locale: dateFnsLocale });\n\t\tconst toBase = format(range.to, readableFormat, { locale: dateFnsLocale });\n\t\tconst fromText = showTimeInSummary && startTimeDisplay ? `${fromBase} ${startTimeDisplay}` : fromBase;\n\t\tconst toText = showTimeInSummary && endTimeDisplay ? `${toBase} ${endTimeDisplay}` : toBase;\n\n\t\treturn `${fromText} - ${toText}`;\n\t}, [range, readableFormat, dateFnsLocale, showTimeInSummary, startTimeDisplay, endTimeDisplay]);\n\n\treturn (\n\t\t<DatePickerField\n\t\t\trootRef={rootRef}\n\t\t\tclassName={baseProps.className}\n\t\t\tlabel={baseProps.label}\n\t\t\thint={baseProps.hint}\n\t\t\terror={baseProps.error}\n\t\t\ttriggerId={triggerId}\n\t\t\tdescribedById={describedBy}\n\t\t>\n\t\t\t\t<Popover open={open} onOpenChange={setOpen}>\n\t\t\t\t\t<PopoverTrigger\n\t\t\t\t\t\trender={(triggerProps) => {\n\t\t\t\t\t\t\tconst resolved = resolvePickerButtonProps(baseProps.buttonTone, baseProps.buttonStyle);\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\tid={triggerId}\n\t\t\t\t\t\t\t\t\ttone={resolved.tone}\n\t\t\t\t\t\t\t\t\tbuttonStyle={resolved.buttonStyle}\n\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\taria-invalid={isInvalid}\n\t\t\t\t\t\t\t\t\taria-describedby={ariaDescribedBy}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\tpickerTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t!range && 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CalendarIcon className={cn(formControlIconClasses[size], 'shrink-0')} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"min-w-0 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t{buttonText}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\n\t\t\t\t<PopoverContent\n\t\t\t\t\tinset=\"flush\"\n\t\t\t\t\tclassName=\"w-auto gap-0\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t>\n\t\t\t\t\t{/* Header */}\n\t\t\t\t\t{!!baseProps.header && <DatePickerHeader config={baseProps.header} />}\n\n\t\t\t\t\t<div className=\"flex flex-col sm:flex-row\">\n\t\t\t\t\t\t{/* Preset grid on narrow surfaces; sidebar once horizontal space is available. */}\n\t\t\t\t\t\t{presets.length > 0 && (\n\t\t\t\t\t\t\t<div className=\"grid grid-cols-2 gap-space-2xs border-b border-border p-surface-xs sm:flex sm:min-w-30 sm:flex-col sm:border-r sm:border-b-0\">\n\t\t\t\t\t\t\t\t{presets.map((preset) => (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tkey={preset.label}\n\t\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tonClick={() => handlePresetSelect(preset)}\n\t\t\t\t\t\t\t\t\t\tclassName=\"justify-start text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{preset.label}\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Calendar */}\n\t\t\t\t\t\t<div className=\"flex flex-col\">\n\t\t\t\t\t\t\t<Calendar\n\t\t\t\t\t\t\t\tmode=\"range\"\n\t\t\t\t\t\t\t\tselected={range}\n\t\t\t\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\t\t\t\tdefaultMonth={range?.from}\n\t\t\t\t\t\t\t\tnumberOfMonths={resolvedNumberOfMonths}\n\t\t\t\t\t\t\t\tshowOutsideDays={baseProps.showOutsideDays}\n\t\t\t\t\t\t\t\tdisabled={disabledDates ?? baseProps.disabled}\n\t\t\t\t\t\t\t\tlocale={dateFnsLocale}\n\t\t\t\t\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\t\t\t\t\tstartMonth={yearBounds.startMonth}\n\t\t\t\t\t\t\t\tendMonth={yearBounds.endMonth}\n\t\t\t\t\t\t\t\t{...calendarProps}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'[--cell-size:1.875rem] sm:[--cell-size:calc(var(--height-action)*8/9*var(--density-scale))]',\n\t\t\t\t\t\t\t\t\tcalendarProps?.className,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t{/* Summary, time and confirmation. Rendered only when one of them has\n\t\t\t\t\t\t\t something to show, so a footer-only picker gets no empty padded band. */}\n\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\tconst showSummary = !!range?.from && !baseProps.footer;\n\t\t\t\t\t\t\t\tconst showTime = !!withTime?.enabled && !!range?.from;\n\t\t\t\t\t\t\t\tconst showConfirm = !!(withConfirm || withTime?.enabled) && !baseProps.footer;\n\t\t\t\t\t\t\t\tif (!showSummary && !showTime && !hasValidationMessage && !showConfirm) return null;\n\t\t\t\t\t\t\t\treturn <>\n\t\t\t\t\t\t\t\t\t<Separator />\n\t\t\t\t\t\t\t\t\t<div className=\"date-picker--range-footer p-surface\">\n\t\t\t\t\t\t\t\t\t<Stack gap=\"lg\">\n\t\t\t\t\t\t\t\t\t\t{showSummary && !!range?.from && (\n\t\t\t\t\t <Stack direction=\"horizontal\" align=\"center\" justify=\"between\" gap=\"xl\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">{t.from}:</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{format(range.from, readableFormat, { locale: dateFnsLocale })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{showTimeInSummary && startTimeDisplay ? ` ${startTimeDisplay}` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!range.to && (\n\t\t\t\t\t\t <Stack direction=\"horizontal\" align=\"center\" gap=\"md\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">{t.to}:</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{format(range.to, readableFormat, { locale: dateFnsLocale })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{showTimeInSummary && endTimeDisplay ? ` ${endTimeDisplay}` : ''}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t )}\n\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t )}\n\n\t\t\t\t\t\t\t\t\t\t{/* Time inputs: ordinary labelled field rows, no decorative glyph. */}\n\t\t\t\t\t\t\t\t\t\t{showTime && !!range?.from && (\n\t\t\t\t\t\t\t\t\t\t\t<Grid columns={{ base: 1, sm: 2 }} gap=\"lg\">\n\t\t\t\t\t\t\t\t\t\t\t\t<FormField label={t.startTime}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={startTime ? normalizedTimeToString(startTime, includeSeconds) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={handleStartTimeChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tformat={timeFormat}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tprecision={includeSeconds ? 'seconds' : 'minutes'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep={timeStep}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Pinned: the time row is deliberately compact and\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// must not grow with a consumer's control size.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thours: t.hours,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tminutes: t.minutes,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tseconds: t.seconds,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tam: t.am,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm: t.pm,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t\t\t\t\t{!!range.to && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<FormField label={t.endTime}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<TimePicker\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={endTime ? normalizedTimeToString(endTime, includeSeconds) : null}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={handleEndTimeChange}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tformat={timeFormat}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tprecision={includeSeconds ? 'seconds' : 'minutes'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstep={timeStep}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={baseProps.disabled}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Pinned: the time row is deliberately compact and\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// must not grow with a consumer's control size.\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrings={{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thours: t.hours,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tminutes: t.minutes,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tseconds: t.seconds,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tam: t.am,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpm: t.pm,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</FormField>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</Grid>\n\t\t\t\t )}\n\n\t\t\t\t\t\t\t\t\t\t{/* Validation */}\n\t\t\t\t\t\t\t\t\t\t<Text type=\"error\" content={validationText} hidden={!hasValidationMessage} />\n\n\t\t\t\t\t\t\t\t\t\t{/* Confirm button (only if no custom footer) */}\n\t\t\t\t\t\t\t\t\t\t{showConfirm && (\n\t\t\t\t\t <Button tone=\"primary\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={handleConfirm}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={!range?.from || !range?.to || !!validationMessage}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{t.confirm}\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t )}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</>;\n\t\t\t\t\t\t\t})()}\n\n\t\t\t\t\t\t\t{/* Custom footer: it brings its own divider and surface inset, so it\n\t\t\t\t\t\t\t sits directly in the popover column like the other modes' footers. */}\n\t\t\t\t\t\t\t{!!baseProps.footer && (\n\t\t\t\t\t\t\t\t<DatePickerFooter\n\t\t\t\t\t\t\t\t\tconfig={baseProps.footer}\n\t\t\t\t\t\t\t\t\toutput={createOutput(range)}\n\t\t\t\t\t\t\t\t\thasSelection={!!(range?.from && range?.to)}\n\t\t\t\t\t\t\t\t\tautoSummary={footerSummary}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</PopoverContent>\n\t\t\t</Popover>\n\n\t\t</DatePickerField>\n\t);\n}\n","import * as React from 'react';\n\nimport { useDatesConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport { getDayPickerYearBounds } from './date-picker-helpers';\nimport {\n\tisSingleMode,\n\tisMultipleMode,\n\tisRangeMode\n} from './date-picker-internals';\n// Ordered single → multiple → range, matching the dispatcher's branches.\nimport { SingleDatePicker } from './date-picker-single';\nimport { MultipleDatePicker } from './date-picker-multiple';\nimport { RangeDatePicker } from './date-picker-range';\nimport { useStrings } from '../../../lib/strings';\nimport { defaultDatePickerStrings } from './date-pickers.strings';\nimport { enUS } from 'date-fns/locale';\nimport type { DatePickerProps } from './datepicker.types';\n\nexport const DatePicker = React.forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(props, ref) {\n\tconst [open, setOpen] = React.useState(false);\n\tconst dates = useDatesConfig();\n\n\t// Resolve locale (date-fns Locale object). Defaults to enUS when the\n\t// consumer doesn't pass one.\n\tconst dateFnsLocale = props.locale ?? dates.locale ?? enUS;\n\n\tconst t = useStrings(defaultDatePickerStrings, props.strings);\n\n\t// Resolve year selection config\n\tconst captionLayout = React.useMemo(() => {\n\t\tif (props.enableYearDropdown || props.yearSelection?.enabled) {\n\t\t\treturn 'dropdown' as const;\n\t\t}\n\t\treturn 'label' as const;\n\t}, [props.enableYearDropdown, props.yearSelection]);\n\tconst yearBounds = React.useMemo(\n\t\t() => getDayPickerYearBounds(props.yearSelection),\n\t\t[props.yearSelection]\n\t);\n\n\t// Rule 24: the family's BEM hook is merged with the consumer's own\n\t// `className` and applied *after* the props spread, so a call-site\n\t// class composes with the hook instead of replacing it — and every\n\t// mode carries it, not just single.\n\tconst componentClassName = cn('date-picker--component', props.className);\n\n\t// Render based on mode\n\tif (isSingleMode(props)) {\n\t\treturn (\n\t\t\t<SingleDatePicker\n\t\t\t\t{...props}\n\t\t\t\trootRef={ref}\n\t\t\t\tclassName={componentClassName}\n\t\t\t\topen={open}\n\t\t\t\tsetOpen={setOpen}\n\t\t\t\tt={t}\n\t\t\t\tdateFnsLocale={dateFnsLocale}\n\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\tyearBounds={yearBounds}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (isMultipleMode(props)) {\n\t\treturn (\n\t\t\t<MultipleDatePicker\n\t\t\t\t{...props}\n\t\t\t\trootRef={ref}\n\t\t\t\tclassName={componentClassName}\n\t\t\t\topen={open}\n\t\t\t\tsetOpen={setOpen}\n\t\t\t\tt={t}\n\t\t\t\tdateFnsLocale={dateFnsLocale}\n\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\tyearBounds={yearBounds}\n\t\t\t/>\n\t\t);\n\t}\n\n\tif (isRangeMode(props)) {\n\t\treturn (\n\t\t\t<RangeDatePicker\n\t\t\t\t{...props}\n\t\t\t\trootRef={ref}\n\t\t\t\tclassName={componentClassName}\n\t\t\t\topen={open}\n\t\t\t\tsetOpen={setOpen}\n\t\t\t\tt={t}\n\t\t\t\tdateFnsLocale={dateFnsLocale}\n\t\t\t\tcaptionLayout={captionLayout}\n\t\t\t\tyearBounds={yearBounds}\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n});\n\nDatePicker.displayName = 'DatePicker';\n"],"mappings":"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"}
|