themelia-react-ui 1.0.0 → 1.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 +190 -1
- package/README.md +92 -13
- package/dist/{accordion-BRWh3BM1.js → accordion-BRTcsp8J.js} +8 -8
- package/dist/accordion-BRTcsp8J.js.map +1 -0
- package/dist/{action-menu-Cx3SdfbN.js → action-menu-Drxw_vJk.js} +36 -36
- package/dist/action-menu-Drxw_vJk.js.map +1 -0
- package/dist/affordance-geometry.generated-CL84ZN9A.js +63 -0
- package/dist/affordance-geometry.generated-CL84ZN9A.js.map +1 -0
- package/dist/{ai-artifact-DkOArd3-.js → ai-artifact-DLVdK0Py.js} +151 -155
- package/dist/ai-artifact-DLVdK0Py.js.map +1 -0
- package/dist/{app-shell-BH_bGcE2.js → app-shell-C_fKpljx.js} +11 -10
- package/dist/app-shell-C_fKpljx.js.map +1 -0
- package/dist/{attachment-DsLgNHXt.js → attachment-DbjUWsP0.js} +12 -12
- package/dist/{attachment-DsLgNHXt.js.map → attachment-DbjUWsP0.js.map} +1 -1
- package/dist/auth-CAQcasMV.js +723 -0
- package/dist/auth-CAQcasMV.js.map +1 -0
- package/dist/{avatar-CsnWaYmt.js → avatar-Bu2HhitA.js} +76 -71
- package/dist/avatar-Bu2HhitA.js.map +1 -0
- package/dist/{badge-BZXZT9wd.js → badge-CzId1Wlm.js} +4 -4
- package/dist/{badge-BZXZT9wd.js.map → badge-CzId1Wlm.js.map} +1 -1
- 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/buttons.js +3 -2
- package/dist/base/cards.js +3 -3
- package/dist/base/carousel.js +25 -27
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +150 -148
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +3 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +3 -3
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +4 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +233 -0
- package/dist/base/inline-edit.js.map +1 -0
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.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 +33 -33
- 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 +83 -81
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- 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 +6 -6
- 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/blocks/admin.js +134 -134
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +120 -117
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +3 -0
- package/dist/blocks/analytics.js +530 -491
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +2 -2
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +395 -383
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +1 -1
- package/dist/blocks/onboarding.js +6 -6
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +311 -0
- package/dist/blocks/planning.js.map +1 -0
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-DdQ_I5ra.js → breadcrumbs-BuYz5SDU.js} +9 -8
- package/dist/breadcrumbs-BuYz5SDU.js.map +1 -0
- package/dist/button-BZDasD04.js +651 -0
- package/dist/button-BZDasD04.js.map +1 -0
- package/dist/{button-BS6l5JUw.js → button-BZyfTvwm.js} +3 -3
- package/dist/button-BZyfTvwm.js.map +1 -0
- package/dist/buttons-D_6KJvEE.js +99 -0
- package/dist/buttons-D_6KJvEE.js.map +1 -0
- package/dist/{cards-BMB0laLG.js → cards-qGSErLw_.js} +12 -12
- package/dist/{cards-BMB0laLG.js.map → cards-qGSErLw_.js.map} +1 -1
- package/dist/chart-Bsc5BICK.js +150 -0
- package/dist/chart-Bsc5BICK.js.map +1 -0
- package/dist/checkbox-BQNDjUCh.js +34 -0
- package/dist/checkbox-BQNDjUCh.js.map +1 -0
- package/dist/choice-inputs-Mk3iWbhr.js +725 -0
- package/dist/choice-inputs-Mk3iWbhr.js.map +1 -0
- package/dist/{code-block-DIlqzoiD.js → code-block-DzHKRybS.js} +23 -23
- package/dist/code-block-DzHKRybS.js.map +1 -0
- package/dist/{collapsible-DsnktFNv.js → collapsible-ClvC7Bj3.js} +3 -3
- package/dist/{collapsible-DsnktFNv.js.map → collapsible-ClvC7Bj3.js.map} +1 -1
- package/dist/{collection-content-C4fthJV_.js → collection-content-D6S8cv_n.js} +3 -3
- package/dist/{collection-content-C4fthJV_.js.map → collection-content-D6S8cv_n.js.map} +1 -1
- package/dist/{combobox-HDftpzxt.js → combobox-BFnbJJp3.js} +18 -18
- package/dist/combobox-BFnbJJp3.js.map +1 -0
- package/dist/{combobox-CHD750do.js → combobox-hozNwUcc.js} +313 -316
- package/dist/combobox-hozNwUcc.js.map +1 -0
- package/dist/{command-D0kWBZfd.js → command-BnmSchli.js} +9 -9
- package/dist/command-BnmSchli.js.map +1 -0
- package/dist/comments-u5L0OGip.js +1156 -0
- package/dist/comments-u5L0OGip.js.map +1 -0
- package/dist/components/base/buttons/button-group.recipes.d.ts +1 -1
- package/dist/components/base/buttons/button.recipes.d.ts +10 -19
- package/dist/components/base/buttons/use-pending-button-focus.d.ts +3 -0
- package/dist/components/base/cards/card.recipes.d.ts +13 -5
- package/dist/components/base/cards/partials/card-primitives.d.ts +9 -4
- package/dist/components/base/cards/smart-card.types.d.ts +3 -1
- package/dist/components/base/date-pickers/date-picker.recipes.d.ts +5 -18
- package/dist/components/base/date-pickers/datepicker.types.d.ts +3 -0
- package/dist/components/base/forms/form-field.d.ts +1 -0
- package/dist/components/base/forms/form-sizing.d.ts +3 -3
- package/dist/components/base/inline-edit/index.d.ts +2 -0
- package/dist/components/base/inline-edit/inline-edit.d.ts +81 -0
- package/dist/components/base/inline-edit/inline-edit.recipes.d.ts +6 -0
- package/dist/components/base/navigation/tabs.d.ts +3 -5
- package/dist/components/base/popover/popover.recipes.d.ts +3 -3
- package/dist/components/base/structure/structure.recipes.d.ts +6 -0
- package/dist/components/base/table/index.d.ts +1 -1
- package/dist/components/base/text-inputs/clear-native-field.d.ts +2 -0
- package/dist/components/base/text-inputs/input-trailing-action.d.ts +3 -0
- package/dist/components/blocks/analytics/index.d.ts +1 -0
- package/dist/components/blocks/analytics/types.d.ts +1 -1
- package/dist/components/blocks/analytics/usage-card/index.d.ts +3 -0
- package/dist/components/blocks/analytics/usage-card/types.d.ts +52 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.d.ts +6 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.data.d.ts +19 -0
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +22 -0
- package/dist/components/blocks/collaboration/message/message.recipes.d.ts +12 -0
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/document-stack.d.ts +1 -4
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/inbox-clean.d.ts +1 -4
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/index.d.ts +3 -3
- package/dist/components/blocks/data-display/empty-state/partials/illustrations/stacked-cards.d.ts +1 -6
- package/dist/components/blocks/planning/index.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.d.ts +3 -0
- package/dist/components/blocks/planning/task-card.strings.d.ts +15 -0
- package/dist/components/blocks/planning/task-card.types.d.ts +66 -0
- package/dist/components/features/combobox/components/error-message.d.ts +1 -1
- package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -0
- package/dist/components/features/filters/facets/search-facet.d.ts +0 -12
- package/dist/components/features/filters/facets/tags-facet.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.types.d.ts +9 -1
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/overlays/hooks/use-pending-overlay-focus.d.ts +2 -0
- package/dist/components/features/overlays/overlays.types.d.ts +5 -4
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +2 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/table.types.d.ts +1 -1
- package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +3 -1
- package/dist/components/layout/auth/auth.types.d.ts +1 -0
- package/dist/components/layout/page/page.d.ts +0 -1
- package/dist/components/layout/page/page.types.d.ts +9 -3
- package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar.types.d.ts +4 -0
- package/dist/components/layout/workspace/workspace.types.d.ts +3 -0
- package/dist/components/typography/heading.d.ts +5 -2
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/text.styles.d.ts +10 -0
- package/dist/components/ui/popover.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts +1 -1
- package/dist/components/ui/table.d.ts +2 -1
- package/dist/container.recipes-D9t8MHR3.js +27 -0
- package/dist/container.recipes-D9t8MHR3.js.map +1 -0
- package/dist/{containers-CPNyNo1_.js → containers-DqB-bSYE.js} +34 -56
- package/dist/containers-DqB-bSYE.js.map +1 -0
- package/dist/control-group-recipes-DBXmfh2E.js +21 -0
- package/dist/control-group-recipes-DBXmfh2E.js.map +1 -0
- package/dist/{copyable-B7SBXJMr.js → copyable-BTSByfmq.js} +6 -6
- package/dist/{copyable-B7SBXJMr.js.map → copyable-BTSByfmq.js.map} +1 -1
- package/dist/{data-display-b3d1TfL4.js → data-display-Bihs9Ven.js} +542 -329
- package/dist/data-display-Bihs9Ven.js.map +1 -0
- package/dist/{date-BFNMnrS5.js → date-DOKhJPu7.js} +4 -4
- package/dist/{date-BFNMnrS5.js.map → date-DOKhJPu7.js.map} +1 -1
- package/dist/{date-picker-DI6kPNof.js → date-picker-DzP5HQq7.js} +492 -472
- package/dist/date-picker-DzP5HQq7.js.map +1 -0
- package/dist/date-pickers-BpgGz7S-.js +196 -0
- package/dist/date-pickers-BpgGz7S-.js.map +1 -0
- package/dist/{display-ByI5tkqy.js → display-CS6Hbk18.js} +8 -8
- package/dist/{display-ByI5tkqy.js.map → display-CS6Hbk18.js.map} +1 -1
- package/dist/{dropdown-menu-BlnyHr-9.js → dropdown-menu-D-boNgGO.js} +7 -7
- package/dist/{dropdown-menu-BlnyHr-9.js.map → dropdown-menu-D-boNgGO.js.map} +1 -1
- package/dist/features/activities.js +152 -141
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +182 -179
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/async-preview.js +9 -9
- 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 +25 -23
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +103 -104
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +375 -373
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +222 -224
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +29 -29
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +59 -58
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +856 -855
- 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 +1210 -1209
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +133 -132
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +29 -31
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +13 -13
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +82 -82
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +4 -4
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +456 -450
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-CJkUAapr.js +233 -0
- package/dist/feedback-CJkUAapr.js.map +1 -0
- package/dist/field-affordance-recipes-uKY4MsZ_.js +25 -0
- package/dist/field-affordance-recipes-uKY4MsZ_.js.map +1 -0
- package/dist/{field-state-recipes-CBTRt9Bt.js → field-state-recipes-DQQpiLWC.js} +3 -3
- package/dist/field-state-recipes-DQQpiLWC.js.map +1 -0
- package/dist/{filters-qtrcv1hf.js → filters-D6FF8L6s.js} +715 -720
- package/dist/filters-D6FF8L6s.js.map +1 -0
- package/dist/{form-field-C6W-y2hR.js → form-field-CZwrkP7m.js} +17 -9
- package/dist/form-field-CZwrkP7m.js.map +1 -0
- package/dist/{form-sizing-39NohSqn.js → form-sizing-QP8aIRaW.js} +10 -6
- package/dist/form-sizing-QP8aIRaW.js.map +1 -0
- package/dist/{forms-BF-HSbff.js → forms-B5NCbkSC.js} +35 -35
- package/dist/{forms-BF-HSbff.js.map → forms-B5NCbkSC.js.map} +1 -1
- package/dist/forms-numeric-Crrm80Lm.js +867 -0
- package/dist/forms-numeric-Crrm80Lm.js.map +1 -0
- package/dist/{header-B8ex54cY.js → header-kxruN3RM.js} +53 -49
- package/dist/header-kxruN3RM.js.map +1 -0
- package/dist/{hooks-D6UBVzf2.js → hooks-BrlnCwQd.js} +2 -2
- package/dist/{hooks-D6UBVzf2.js.map → hooks-BrlnCwQd.js.map} +1 -1
- package/dist/{http-CLTVJc5I.js → http-CdEIHyQf.js} +2 -2
- package/dist/http-CdEIHyQf.js.map +1 -0
- package/dist/{icon-badge-Dv0RYQwj.js → icon-badge-Btc6pQrp.js} +4 -4
- package/dist/{icon-badge-Dv0RYQwj.js.map → icon-badge-Btc6pQrp.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/input-SX9V0AL3.js +255 -0
- package/dist/input-SX9V0AL3.js.map +1 -0
- package/dist/input-vxcaNCYC.js +20 -0
- package/dist/input-vxcaNCYC.js.map +1 -0
- package/dist/{item-pJ0GsOiJ.js → item-DE4YnuJx.js} +18 -17
- package/dist/item-DE4YnuJx.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 +44 -4
- package/dist/lib/control-group-recipes.d.ts +22 -0
- package/dist/lib/field-affordance-recipes.d.ts +35 -2
- package/dist/lib/field-state-recipes.d.ts +2 -2
- package/dist/lib/navigation-row-recipes.d.ts +3 -2
- package/dist/lib/overlay-anatomy-recipes.d.ts +1 -1
- package/dist/lib/surface-recipes.d.ts +5 -2
- package/dist/lib/token-merge.generated.d.ts +144 -2
- package/dist/lib/ui-provider/types.d.ts +4 -2
- package/dist/lib/use-prefers-reduced-motion.d.ts +2 -0
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-Ca4YmvBi.js → media-gallery-DLp3HAz0.js} +75 -74
- package/dist/media-gallery-DLp3HAz0.js.map +1 -0
- package/dist/{mentions-CRio8mTm.js → mentions-Cl0Kt_Pd.js} +52 -50
- package/dist/{mentions-CRio8mTm.js.map → mentions-Cl0Kt_Pd.js.map} +1 -1
- package/dist/message-SZUNB1eX.js +127 -0
- package/dist/message-SZUNB1eX.js.map +1 -0
- package/dist/{navigation-BTrEb5u4.js → navigation-DnQSNMT0.js} +64 -55
- package/dist/navigation-DnQSNMT0.js.map +1 -0
- package/dist/{navigation-DqEITuD2.js → navigation-DyytsLRB.js} +37 -37
- package/dist/navigation-DyytsLRB.js.map +1 -0
- package/dist/{navigation-row-recipes-BFpvGPGE.js → navigation-row-recipes-DQEXQcqY.js} +3 -3
- package/dist/navigation-row-recipes-DQEXQcqY.js.map +1 -0
- package/dist/{number-BNT_BIzJ.js → number-DasMFWEG.js} +4 -4
- package/dist/{number-BNT_BIzJ.js.map → number-DasMFWEG.js.map} +1 -1
- package/dist/overlays-DUbs1KEi.js +1011 -0
- package/dist/overlays-DUbs1KEi.js.map +1 -0
- package/dist/{page-BMBGjJY8.js → page-hGmT4nWK.js} +75 -64
- package/dist/page-hGmT4nWK.js.map +1 -0
- package/dist/{page-header-BH41wCyY.js → page-header-D8nERkn5.js} +9 -9
- package/dist/page-header-D8nERkn5.js.map +1 -0
- package/dist/{pagination-C29vvt3I.js → pagination-NLGqRirf.js} +20 -20
- package/dist/pagination-NLGqRirf.js.map +1 -0
- package/dist/{popover-TInGXsjg.js → popover-CghIYdQf.js} +23 -22
- package/dist/popover-CghIYdQf.js.map +1 -0
- package/dist/{popover-menu-BzqXqE72.js → popover-menu-B4PoWhRl.js} +6 -6
- package/dist/{popover-menu-BzqXqE72.js.map → popover-menu-B4PoWhRl.js.map} +1 -1
- package/dist/{popover.recipes-zgBhMlUu.js → popover.recipes-QlD4JenO.js} +5 -5
- package/dist/popover.recipes-QlD4JenO.js.map +1 -0
- package/dist/{primitives-DKPOGVpj.js → primitives-C7ff0QaI.js} +120 -113
- package/dist/primitives-C7ff0QaI.js.map +1 -0
- package/dist/primitives.js +3 -3
- package/dist/progress-BroqrAyV.js +169 -0
- package/dist/progress-BroqrAyV.js.map +1 -0
- package/dist/{receipt-DYWTQGEc.js → receipt-BuJynLgf.js} +8 -8
- package/dist/{receipt-DYWTQGEc.js.map → receipt-BuJynLgf.js.map} +1 -1
- package/dist/{rich-text-B7sBAdDG.js → rich-text-DlxDOtf4.js} +4 -4
- package/dist/{rich-text-B7sBAdDG.js.map → rich-text-DlxDOtf4.js.map} +1 -1
- package/dist/rich-text-editor-BKyG7rWz.js +574 -0
- package/dist/rich-text-editor-BKyG7rWz.js.map +1 -0
- package/dist/{rich-text-editor.recipes-DxvOE0Lp.js → rich-text-editor.recipes-B72Nfuze.js} +35 -26
- package/dist/rich-text-editor.recipes-B72Nfuze.js.map +1 -0
- package/dist/{scroll-area-BheMQ270.js → scroll-area-D-pIhEKl.js} +3 -3
- package/dist/scroll-area-D-pIhEKl.js.map +1 -0
- package/dist/{separator-Gk_WXH-l.js → separator-BNIgG3au.js} +3 -3
- package/dist/{separator-Gk_WXH-l.js.map → separator-BNIgG3au.js.map} +1 -1
- package/dist/{separator-DO0EbCEm.js → separator-BhtFyo4x.js} +2 -2
- package/dist/{separator-DO0EbCEm.js.map → separator-BhtFyo4x.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-D9f_wdIC.js → settings-DOTOzeZ2.js} +10 -9
- package/dist/{settings-D9f_wdIC.js.map → settings-DOTOzeZ2.js.map} +1 -1
- package/dist/{sheet-vOUloJ4O.js → sheet-BFhrNehm.js} +11 -11
- package/dist/sheet-BFhrNehm.js.map +1 -0
- package/dist/{sidebar-CNBKFDRW.js → sidebar-CyR4XKwR.js} +219 -200
- package/dist/sidebar-CyR4XKwR.js.map +1 -0
- package/dist/{sidebar-C3UKkbC5.js → sidebar-SvGJ0Zwi.js} +63 -58
- package/dist/sidebar-SvGJ0Zwi.js.map +1 -0
- package/dist/{skeleton-BvRhK8y-.js → skeleton-3F0uhYn3.js} +4 -4
- package/dist/{skeleton-BvRhK8y-.js.map → skeleton-3F0uhYn3.js.map} +1 -1
- package/dist/{smart-card-B5FcKODh.js → smart-card-DjGVV2xr.js} +206 -199
- package/dist/smart-card-DjGVV2xr.js.map +1 -0
- package/dist/{spinner-JtlFJ7Nc.js → spinner-Cpf7oRkF.js} +5 -5
- package/dist/{spinner-JtlFJ7Nc.js.map → spinner-Cpf7oRkF.js.map} +1 -1
- package/dist/{structure-BvW4vG4H.js → structure-CRdqVawd.js} +14 -14
- package/dist/{structure-BvW4vG4H.js.map → structure-CRdqVawd.js.map} +1 -1
- package/dist/{structure.recipes-DjqnBpwz.js → structure.recipes-Bqhf9oIh.js} +2 -2
- package/dist/structure.recipes-Bqhf9oIh.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-CQfRr-VL.js → surface-recipes-Dd__PD-w.js} +4 -3
- package/dist/surface-recipes-Dd__PD-w.js.map +1 -0
- package/dist/{table-DnlAJ-xR.js → table-CLtJTxoR.js} +17 -16
- package/dist/table-CLtJTxoR.js.map +1 -0
- package/dist/table-CcRDZiLP.js +1444 -0
- package/dist/table-CcRDZiLP.js.map +1 -0
- package/dist/tabs-BNgu7g0u.js +188 -0
- package/dist/tabs-BNgu7g0u.js.map +1 -0
- package/dist/text-inputs-DsR56TR-.js +330 -0
- package/dist/text-inputs-DsR56TR-.js.map +1 -0
- package/dist/{text.styles-BwB7vAF2.js → text.styles-Q4sGAIgA.js} +18 -10
- package/dist/text.styles-Q4sGAIgA.js.map +1 -0
- package/dist/theme.css +77 -115
- package/dist/{timelines-CnZ2S_Gr.js → timelines-D1pkt3se.js} +84 -78
- package/dist/timelines-D1pkt3se.js.map +1 -0
- package/dist/{tree-COD9BGdU.js → tree-BtmYyMZV.js} +8 -8
- package/dist/{tree-COD9BGdU.js.map → tree-BtmYyMZV.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-BxQgiZyw.js +96 -0
- package/dist/typography-BxQgiZyw.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-CftIB6TY.js → ui-provider-DRPn3qNl.js} +3 -2
- package/dist/ui-provider-DRPn3qNl.js.map +1 -0
- package/dist/ui-provider.js +1 -1
- package/dist/{upload-DIzw1dx1.js → upload-CDbYw1WN.js} +326 -323
- package/dist/upload-CDbYw1WN.js.map +1 -0
- package/dist/{upload-queue-xRJ3qDmd.js → upload-queue-CNd_hH_a.js} +25 -25
- package/dist/upload-queue-CNd_hH_a.js.map +1 -0
- package/dist/usage-card-VyJLUwRr.js +457 -0
- package/dist/usage-card-VyJLUwRr.js.map +1 -0
- package/dist/utils-BvH9PSmq.js +4275 -0
- package/dist/utils-BvH9PSmq.js.map +1 -0
- package/dist/value-inputs-D0KCrfVC.js +840 -0
- package/dist/value-inputs-D0KCrfVC.js.map +1 -0
- package/dist/{workspace-Cbqz4FzN.js → workspace-CcR8r-Nt.js} +115 -122
- package/dist/workspace-CcR8r-Nt.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +112 -18
- package/docs/consumer-skill/examples/analytics.tsx +34 -0
- package/docs/consumer-skill/examples/app-layout.tsx +42 -12
- package/docs/consumer-skill/examples/detail.tsx +24 -9
- package/docs/consumer-skill/examples/manifest.json +27 -1
- package/docs/consumer-skill/examples/planning-usage-edit.tsx +29 -0
- package/docs/consumer-skill/examples/scoped-directory.tsx +77 -0
- package/docs/consumer-skill/examples/website.tsx +56 -0
- package/docs/consumer-skill/references/analytics.md +70 -0
- package/docs/consumer-skill/references/composition.md +219 -2
- package/docs/consumer-skill/references/design-contract.md +37 -10
- package/docs/consumer-skill/references/discovery.md +93 -5
- package/docs/consumer-skill/references/installation.md +20 -3
- package/docs/consumer-skill/references/integration.md +26 -0
- package/docs/consumer-skill/references/public-api.json +2416 -388
- package/docs/consumer-skill/references/review.md +126 -0
- package/docs/consumer-skill/references/theming.md +52 -7
- package/docs/consumer-skill/references/tokens.json +177 -9
- package/docs/consumer-skill/references/workflows.md +129 -1
- package/docs/consumer-skill/scripts/check-composition.mjs +31 -0
- package/docs/consumer-skill/scripts/composition-policy.mjs +317 -0
- package/docs/consumer-skill/scripts/discovery.mjs +65 -8
- package/docs/consumer-skill/scripts/surface-policy.mjs +66 -0
- package/package.json +30 -6
- package/dist/accordion-BRWh3BM1.js.map +0 -1
- package/dist/action-menu-Cx3SdfbN.js.map +0 -1
- package/dist/affordance-geometry.generated-DXl-Zb3Z.js +0 -23
- package/dist/affordance-geometry.generated-DXl-Zb3Z.js.map +0 -1
- package/dist/ai-artifact-DkOArd3-.js.map +0 -1
- package/dist/app-shell-BH_bGcE2.js.map +0 -1
- package/dist/auth-BDB1V_2q.js +0 -704
- package/dist/auth-BDB1V_2q.js.map +0 -1
- package/dist/avatar-CsnWaYmt.js.map +0 -1
- package/dist/breadcrumbs-DdQ_I5ra.js.map +0 -1
- package/dist/button-BS6l5JUw.js.map +0 -1
- package/dist/buttons-Co6GavvM.js +0 -674
- package/dist/buttons-Co6GavvM.js.map +0 -1
- package/dist/chart-DVfcwQu6.js +0 -149
- package/dist/chart-DVfcwQu6.js.map +0 -1
- package/dist/choice-inputs-CavA-SGV.js +0 -644
- package/dist/choice-inputs-CavA-SGV.js.map +0 -1
- package/dist/code-block-DIlqzoiD.js.map +0 -1
- package/dist/combobox-CHD750do.js.map +0 -1
- package/dist/combobox-HDftpzxt.js.map +0 -1
- package/dist/command-D0kWBZfd.js.map +0 -1
- package/dist/comments-CvYeglMS.js +0 -1132
- package/dist/comments-CvYeglMS.js.map +0 -1
- package/dist/containers-CPNyNo1_.js.map +0 -1
- package/dist/data-display-b3d1TfL4.js.map +0 -1
- package/dist/date-picker-DI6kPNof.js.map +0 -1
- package/dist/date-pickers-ByP6Cv2z.js +0 -224
- package/dist/date-pickers-ByP6Cv2z.js.map +0 -1
- package/dist/feedback-a9j9J-9A.js +0 -391
- package/dist/feedback-a9j9J-9A.js.map +0 -1
- package/dist/field-affordance-recipes-CHdUtn2Z.js +0 -17
- package/dist/field-affordance-recipes-CHdUtn2Z.js.map +0 -1
- package/dist/field-state-recipes-CBTRt9Bt.js.map +0 -1
- package/dist/filters-qtrcv1hf.js.map +0 -1
- package/dist/form-field-C6W-y2hR.js.map +0 -1
- package/dist/form-sizing-39NohSqn.js.map +0 -1
- package/dist/forms-numeric-Y15Bg5Nr.js +0 -867
- package/dist/forms-numeric-Y15Bg5Nr.js.map +0 -1
- package/dist/header-B8ex54cY.js.map +0 -1
- package/dist/http-CLTVJc5I.js.map +0 -1
- package/dist/input-DMorJiTI.js +0 -202
- package/dist/input-DMorJiTI.js.map +0 -1
- package/dist/input-ci9fIgFH.js +0 -20
- package/dist/input-ci9fIgFH.js.map +0 -1
- package/dist/item-pJ0GsOiJ.js.map +0 -1
- package/dist/media-gallery-Ca4YmvBi.js.map +0 -1
- package/dist/message-B5-6LeYl.js +0 -108
- package/dist/message-B5-6LeYl.js.map +0 -1
- package/dist/navigation-BTrEb5u4.js.map +0 -1
- package/dist/navigation-DqEITuD2.js.map +0 -1
- package/dist/navigation-row-recipes-BFpvGPGE.js.map +0 -1
- package/dist/overlays-DBqV0J_V.js +0 -982
- package/dist/overlays-DBqV0J_V.js.map +0 -1
- package/dist/page-BMBGjJY8.js.map +0 -1
- package/dist/page-header-BH41wCyY.js.map +0 -1
- package/dist/pagination-C29vvt3I.js.map +0 -1
- package/dist/popover-TInGXsjg.js.map +0 -1
- package/dist/popover.recipes-zgBhMlUu.js.map +0 -1
- package/dist/primitives-DKPOGVpj.js.map +0 -1
- package/dist/rich-text-editor-BZSJchAF.js +0 -575
- package/dist/rich-text-editor-BZSJchAF.js.map +0 -1
- package/dist/rich-text-editor.recipes-DxvOE0Lp.js.map +0 -1
- package/dist/scroll-area-BheMQ270.js.map +0 -1
- package/dist/select-B2mb-qN2.js +0 -108
- package/dist/select-B2mb-qN2.js.map +0 -1
- package/dist/sheet-vOUloJ4O.js.map +0 -1
- package/dist/sidebar-C3UKkbC5.js.map +0 -1
- package/dist/sidebar-CNBKFDRW.js.map +0 -1
- package/dist/smart-card-B5FcKODh.js.map +0 -1
- package/dist/structure.recipes-DjqnBpwz.js.map +0 -1
- package/dist/surface-recipes-CQfRr-VL.js.map +0 -1
- package/dist/table-DnlAJ-xR.js.map +0 -1
- package/dist/table-ghtAQ-JJ.js +0 -1424
- package/dist/table-ghtAQ-JJ.js.map +0 -1
- package/dist/tabs-DY09eoZg.js +0 -187
- package/dist/tabs-DY09eoZg.js.map +0 -1
- package/dist/text-inputs-BhOcedTo.js +0 -331
- package/dist/text-inputs-BhOcedTo.js.map +0 -1
- package/dist/text.styles-BwB7vAF2.js.map +0 -1
- package/dist/timelines-CnZ2S_Gr.js.map +0 -1
- package/dist/typography-Cv8MT-82.js +0 -96
- package/dist/typography-Cv8MT-82.js.map +0 -1
- package/dist/ui-provider-CftIB6TY.js.map +0 -1
- package/dist/upload-DIzw1dx1.js.map +0 -1
- package/dist/upload-queue-xRJ3qDmd.js.map +0 -1
- package/dist/utils-C2EKeIw3.js +0 -72
- package/dist/utils-C2EKeIw3.js.map +0 -1
- package/dist/value-inputs-Co1fu-xv.js +0 -824
- package/dist/value-inputs-Co1fu-xv.js.map +0 -1
- package/dist/workspace-Cbqz4FzN.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-numeric-Crrm80Lm.js","names":["React","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","Select","UNIT_OPTIONS","React","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","React","baseui.Select","baseui.SelectTrigger","baseui.SelectValue","React","useDensityConfig","useMoneyConfig","cn","Text","Label","TextLink","Grid","Stack","AlertDescription","Alert","resolveFormControlSize","formControlSizeClasses","Input","SelectValue","Select$1","SelectPopupGroup","SelectPopupItem","SelectTrigger","Select","SelectPopupContent","FormField","React$1","defaultDecimalInputStrings","formatDecimalValue","value","formatted","allowNegative","hasLeadingMinus","parts","decimalPlaces","isWithinBounds","numValue","min","max","applyRounding","factor","decimals","shifted","mode","floor","diff","clamp","next","n","snapToStep","anchor","stepsFromAnchor","current","step","stepped","delta","fireChange","nativeSetter","target","onChange","STEPPER_SIZE_CLASS","DecimalInputImpl","controlledValue","sizeProp","stringsProp","props","size","defaultScale","strings","useStrings","validDecimalPlaces","inputRef","editingUnavailable","disabled","handleChange","useCallback","newValue","allowEmpty","modifiedEvent","handleBlur","onBlur","normalizeOnBlur","raw","num","roundingMode","adjust","showSteppers","placeholderResolved","placeholder","Minus","node","forwardedRef","className","Plus","DecimalInput","PercentageInput","forwardRef","defaultCurrencyInputStrings","CURRENCY_SYMBOLS","normalizeCurrencies","currencies","currency","CurrencyInputImpl","controlledCurrency","decimalInputProps","normalizedCurrencies","useMemo","internalCurrency","setInternalCurrency","useState","defaultCurrency","isCurrencyControlled","selectedCurrency","details","disableCurrencySelector","onConfigError","handleCurrencyChange","newCurrency","onCurrencyChange","triggerClassName","formFieldTriggerClasses","currencyWidth","currencySelector","currencyLabel","invalid","currencyPlaceholder","curr","currencyPosition","CurrencyInput","memo","defaultMoneyInputStrings","interpolateMoneyInputString","values","key","output","template","FALLBACK_CURRENCIES","parseAmount","parsed","resolveFormatted","currencyOptionValue","option","MoneyInput","recordCurrencyProp","moneyConfig","resolvedDefaultCurrency","activeCurrency","useRef","availableCurrencies","source","unique","optionValue","options","recordCurrency","money","originalFormatted","showOriginalHint","willMigrate","isInvalid","error","assignRef","handleAmountChange","event","onChangeData","nextCurrency","defaultValue","input","required","controlStrings","controlClassName","hasFieldChrome","label","hint","helperText","Info","showMigrationWarning","AlertTriangle","migrationWarningMessage","ORDERED_MODES","RoundingModeSelect","controlled","allProps","labels","onValueChange","defaultDimensionsInputStrings","UNIT_OPTIONS$1","parseDimensionValue","format","p","formatDimensionValue","width","height","depth","DimensionsInput","controlledUnit","resolvedWidthLabel","widthLabel","resolvedHeightLabel","heightLabel","resolvedDepthLabel","depthLabel","resolvedUnitPlaceholder","unitPlaceholder","resolvedWidthPlaceholder","widthPlaceholder","resolvedHeightPlaceholder","heightPlaceholder","resolvedDepthPlaceholder","depthPlaceholder","shouldShowInlineLabels","layout","shouldShowVerticalLabels","shouldShowUnitSelector","showUnitSelector","hasUnitLabel","unitLabel","widthFieldLabel","heightFieldLabel","depthFieldLabel","isValueControlled","isUnitControlled","initialParsed","internalWidth","setInternalWidth","internalHeight","setInternalHeight","internalDepth","setInternalDepth","internalUnit","setInternalUnit","defaultUnit","parsedValue","widthValue","heightValue","depthValue","unitValue","handleDimensionChange","updatedWidth","updatedHeight","updatedDepth","dimension","formattedValue","handleUnitChange","newUnit","typedUnit","onUnitChange","unitSelector","disableUnitSelector","unit","defaultWeightInputStrings","UNIT_OPTIONS","WeightInput","internalValue","setInternalValue","handleValueChange","nextUnit","weightUnit","unitOptions","unitWidth","defaultCoordinatesInputStrings","parseValue","lat","lng","part","formatValue","isFiniteNumberInRange","CoordinatesInput","isControlled","internalLat","setInternalLat","internalLng","setInternalLng","parsedControlled","update","nextLat","nextLng","mapUrl","hasValidLat","hasValidLng","showPreviewLink"],"sources":["../src/components/base/forms-numeric/decimal-input.tsx","../src/components/base/forms-numeric/percentage-input.tsx","../src/components/base/forms-numeric/currency-input.tsx","../src/components/base/forms-numeric/money-input.strings.ts","../src/components/base/forms-numeric/money-input.tsx","../src/components/base/forms-numeric/rounding-mode-select.tsx","../src/components/base/forms-numeric/dimensions-input.tsx","../src/components/base/forms-numeric/weight-input.tsx","../src/components/base/forms-numeric/coordinates-input.tsx"],"sourcesContent":["/**\n * DecimalInput — text-based numeric input with decimal-place enforcement,\n * locale-friendly comma → dot normalisation, optional min/max clamping,\n * rounding mode (`round` / `floor` / `ceil` / `half-even`), and optional\n * stepper buttons when `step` is set.\n *\n * Wraps the base `Input` so all add-on / icon / clear / loading features\n * still work. Extra features layered on top:\n *\n * - `step` — when set, renders − / + stepper buttons that snap the value\n * to a multiple of `step` (anchored at `min` if provided, else 0).\n * - `roundingMode` — controls how stepper / blur normalisation rounds\n * half values; default `'round'` (round-half-up).\n * - `normalizeOnBlur` (default `true`) — pads the displayed value to the\n * full `decimalPlaces` count and clamps to `[min, max]` when the field\n * loses focus.\n *\n * The `value` prop is always a plain string (consumers parse it as needed)\n * so RHF / Inertia can treat it like any other input.\n */\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formControlSizeClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { Input, type InputProps } from '../text-inputs';\n\nexport type DecimalRoundingMode = 'round' | 'floor' | 'ceil' | 'half-even';\n\nexport interface DecimalInputStrings {\n\t/** Accessible label for the decrement stepper. */\n\tdecrement: string;\n\t/** Accessible label for the increment stepper. */\n\tincrement: string;\n}\n\nexport const defaultDecimalInputStrings: DecimalInputStrings = {\n\tdecrement: 'Decrement',\n\tincrement: 'Increment',\n};\n\nexport interface DecimalInputProps extends Omit<InputProps, 'type' | 'inputMode' | 'strings'> {\n\t/** Maximum fractional digits accepted and used during normalization. */\n\tdecimalPlaces?: number;\n\t/** Minimum accepted numeric value. */\n\tmin?: number;\n\t/** Maximum accepted numeric value. */\n\tmax?: number;\n\t/** Whether a leading negative sign is accepted. */\n\tallowNegative?: boolean;\n\t/** Whether the field may remain blank. */\n\tallowEmpty?: boolean;\n\t/** When set, renders − / + steppers and snaps the value to multiples of `step`. */\n\tstep?: number;\n\t/** How to round when normalising on blur or stepping. Default `'round'`. */\n\troundingMode?: DecimalRoundingMode;\n\t/** Pad to full decimalPlaces and clamp to [min, max] on blur. Default `true`. */\n\tnormalizeOnBlur?: boolean;\n\t/** String overrides for stepper aria-labels. */\n\tstrings?: StringsProp<DecimalInputStrings>;\n}\n\nconst formatDecimalValue = (\n\tvalue: string,\n\tdecimalPlaces: number,\n\tallowNegative: boolean,\n): string => {\n\tif (!value) return '';\n\n\tlet formatted = value;\n\tformatted = formatted.replace(/,/g, '.');\n\n\tif (allowNegative) {\n\t\tformatted = formatted.replace(/[^\\d.-]/g, '');\n\t} else {\n\t\tformatted = formatted.replace(/[^\\d.]/g, '');\n\t}\n\n\tif (allowNegative && formatted.includes('-')) {\n\t\tconst hasLeadingMinus = formatted.startsWith('-');\n\t\tformatted = formatted.replace(/-/g, '');\n\t\tif (hasLeadingMinus) formatted = '-' + formatted;\n\t}\n\n\tconst parts = formatted.split('.');\n\tif (parts.length > 2) {\n\t\tformatted = parts[0] + '.' + parts.slice(1).join('');\n\t}\n\n\tif (parts.length === 2 && parts[1].length > decimalPlaces) {\n\t\tformatted = parts[0] + '.' + parts[1].substring(0, decimalPlaces);\n\t}\n\n\treturn formatted;\n};\n\nconst isWithinBounds = (value: string, min?: number, max?: number): boolean => {\n\tif (!value || value === '-') return true;\n\tconst numValue = parseFloat(value);\n\tif (Number.isNaN(numValue)) return true;\n\tif (min !== undefined && numValue < min) return false;\n\tif (max !== undefined && numValue > max) return false;\n\treturn true;\n};\n\nfunction applyRounding(value: number, decimals: number, mode: DecimalRoundingMode): number {\n\tconst factor = Math.pow(10, decimals);\n\tconst shifted = value * factor;\n\tswitch (mode) {\n\t\tcase 'floor':\n\t\t\treturn Math.floor(shifted) / factor;\n\t\tcase 'ceil':\n\t\t\treturn Math.ceil(shifted) / factor;\n\t\tcase 'half-even': {\n\t\t\tconst floor = Math.floor(shifted);\n\t\t\tconst diff = shifted - floor;\n\t\t\tif (diff > 0.5) return (floor + 1) / factor;\n\t\t\tif (diff < 0.5) return floor / factor;\n\t\t\treturn (floor % 2 === 0 ? floor : floor + 1) / factor;\n\t\t}\n\t\tcase 'round':\n\t\tdefault:\n\t\t\treturn Math.round(shifted) / factor;\n\t}\n}\n\nfunction clamp(n: number, min?: number, max?: number): number {\n\tlet next = n;\n\tif (min !== undefined) next = Math.max(min, next);\n\tif (max !== undefined) next = Math.min(max, next);\n\treturn next;\n}\n\nfunction snapToStep(\n\tcurrent: number,\n\tdelta: number,\n\tstep: number,\n\tmin?: number,\n\tmode: DecimalRoundingMode = 'round',\n): number {\n\tconst anchor = min ?? 0;\n\tconst stepsFromAnchor = (current - anchor) / step;\n\tconst rounded =\n\t\tmode === 'floor'\n\t\t\t? Math.floor(stepsFromAnchor)\n\t\t\t: mode === 'ceil'\n\t\t\t\t? Math.ceil(stepsFromAnchor)\n\t\t\t\t: Math.round(stepsFromAnchor);\n\tconst stepped = anchor + (rounded + delta) * step;\n\treturn Number(stepped.toFixed(12));\n}\n\nfunction fireChange(\n\ttarget: HTMLInputElement,\n\tvalue: string,\n\tonChange?: InputProps['onChange'],\n) {\n\t// Write the value to the DOM first so UNCONTROLLED inputs actually reflect\n\t// stepper clicks and blur-normalisation. (Previously this only called\n\t// onChange, so steppers were a no-op on uncontrolled fields.) Use the native\n\t// value setter so React's input value-tracker stays in sync for controlled\n\t// consumers, which then reconcile through their onChange + re-render.\n\tconst nativeSetter = Object.getOwnPropertyDescriptor(\n\t\twindow.HTMLInputElement.prototype,\n\t\t'value',\n\t)?.set;\n\tif (nativeSetter) nativeSetter.call(target, value);\n\telse target.value = value;\n\n\tif (!onChange) return;\n\tconst event = {\n\t\ttarget,\n\t\tcurrentTarget: target,\n\t\ttype: 'change',\n\t\tbubbles: false,\n\t\tcancelable: false,\n\t} as unknown as React.ChangeEvent<HTMLInputElement>;\n\tonChange(event);\n}\n\nconst STEPPER_SIZE_CLASS: Record<FormControlSize, string> = {\n\tsm: 'w-control-sm',\n\tmd: 'w-control',\n\tlg: 'w-control-lg',\n};\n\nfunction DecimalInputImpl(\n\t{\n\t\tdecimalPlaces = 2,\n\t\tmin,\n\t\tmax,\n\t\tallowNegative = true,\n\t\tallowEmpty = true,\n\t\tstep,\n\t\troundingMode = 'round',\n\t\tnormalizeOnBlur = true,\n\t\tonChange,\n\t\tonBlur,\n\t\tplaceholder,\n\t\tclassName,\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tdisabled,\n\t\tsize: sizeProp,\n\t\tstrings: stringsProp,\n\t\t...props\n\t}: DecimalInputProps,\n\tforwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size: FormControlSize = resolveFormControlSize(sizeProp, defaultScale);\n\tconst strings = useStrings(defaultDecimalInputStrings, stringsProp);\n\tconst validDecimalPlaces = Math.min(12, Math.max(0, decimalPlaces));\n\tconst inputRef = React.useRef<HTMLInputElement | null>(null);\n\tconst editingUnavailable = disabled || props.loading || props.readOnly;\n\n\tconst handleChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst newValue = e.target.value;\n\n\t\t\tif (!newValue && allowEmpty) {\n\t\t\t\tonChange?.(e);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formatted = formatDecimalValue(newValue, validDecimalPlaces, allowNegative);\n\t\t\tif (!isWithinBounds(formatted, min, max)) return;\n\n\t\t\tif (formatted !== newValue) {\n\t\t\t\tconst modifiedEvent = {\n\t\t\t\t\t...e,\n\t\t\t\t\ttarget: { ...e.target, value: formatted },\n\t\t\t\t\tcurrentTarget: { ...e.currentTarget, value: formatted },\n\t\t\t\t} as React.ChangeEvent<HTMLInputElement>;\n\t\t\t\tonChange?.(modifiedEvent);\n\t\t\t} else {\n\t\t\t\tonChange?.(e);\n\t\t\t}\n\t\t},\n\t\t[onChange, validDecimalPlaces, allowNegative, allowEmpty, min, max],\n\t);\n\n\tconst handleBlur = useCallback(\n\t\t(e: React.FocusEvent<HTMLInputElement>) => {\n\t\t\tonBlur?.(e);\n\t\t\tif (!normalizeOnBlur) return;\n\t\t\tconst raw = e.target.value;\n\t\t\tif (!raw && allowEmpty) return;\n\t\t\tconst num = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tif (!Number.isFinite(num)) return;\n\t\t\tconst clamped = clamp(num, min, max);\n\t\t\tconst rounded = applyRounding(clamped, validDecimalPlaces, roundingMode);\n\t\t\tconst next = rounded.toFixed(validDecimalPlaces);\n\t\t\tif (next !== raw && inputRef.current) {\n\t\t\t\tfireChange(inputRef.current, next, onChange);\n\t\t\t}\n\t\t},\n\t\t[onBlur, onChange, normalizeOnBlur, allowEmpty, min, max, validDecimalPlaces, roundingMode],\n\t);\n\n\tconst adjust = useCallback(\n\t\t(delta: number) => {\n\t\t\tif (editingUnavailable || step === undefined) return;\n\t\t\tconst target = inputRef.current;\n\t\t\tif (!target) return;\n\t\t\tconst raw = target.value;\n\t\t\tconst current = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tconst base = Number.isFinite(current) ? current : (min ?? 0);\n\t\t\tconst snapped = clamp(snapToStep(base, delta, step, min, roundingMode), min, max);\n\t\t\tconst next = applyRounding(snapped, validDecimalPlaces, roundingMode).toFixed(validDecimalPlaces);\n\t\t\tfireChange(target, next, onChange);\n\t\t},\n\t\t[editingUnavailable, step, min, max, roundingMode, validDecimalPlaces, onChange],\n\t);\n\n\tconst showSteppers = typeof step === 'number' && step > 0;\n\tconst placeholderResolved =\n\t\tplaceholder ?? (validDecimalPlaces > 0 ? `0.${'0'.repeat(validDecimalPlaces)}` : '0');\n\n\tif (showSteppers) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('decimal-input--component', \n\t\t\t\t\t// Stepper segmented group — input + adjacent − / + buttons\n\t\t\t\t\t// share a single border radius so the group reads as one\n\t\t\t\t\t// control instead of three loose chips.\n\t\t\t\t\t'flex items-stretch overflow-hidden rounded-inner border border-input bg-transparent [&>.input--component]:h-full',\n\t\t\t\t\tformControlSizeClasses[size],\n\t\t\t\t\t'focus-within:border-ring focus-within:ring-ring focus-within:ring-[3px]',\n\t\t\t\t\tprops['aria-invalid'] && 'border-destructive ring-destructive/20',\n\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.decrement}\n\t\t\t\t\tdisabled={editingUnavailable}\n\t\t\t\t\tonClick={() => adjust(-1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'box-border border-0 bg-transparent p-0 font-sans inline-flex shrink-0 items-center justify-center border-e border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Minus className={size === 'sm' ? 'size-icon-sm' : 'size-icon'} />\n\t\t\t\t</button>\n\t\t\t\t<Input\n\t\t\t\t\tsize={size}\n\t\t\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\t\t\tplaceholder={placeholderResolved}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tvalue={controlledValue}\n\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'!h-full min-h-0 flex-1 tabular-nums text-center border-0 shadow-none rounded-none focus-visible:ring-0 focus-visible:border-0',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.increment}\n\t\t\t\t\tdisabled={editingUnavailable}\n\t\t\t\t\tonClick={() => adjust(1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'box-border border-0 bg-transparent p-0 font-sans inline-flex shrink-0 items-center justify-center border-s border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Plus className={size === 'sm' ? 'size-icon-sm' : 'size-icon'} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Input\n\t\t\tsize={size}\n\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\ttype=\"text\"\n\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\tplaceholder={placeholderResolved}\n\t\t\tonChange={handleChange}\n\t\t\tonBlur={handleBlur}\n\t\t\tvalue={controlledValue}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn('tabular-nums text-end', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst DecimalInput = React.forwardRef<HTMLInputElement, DecimalInputProps>(DecimalInputImpl);\nDecimalInput.displayName = 'DecimalInput';\n\nexport { DecimalInput };\n","/**\n * PercentageInput — DecimalInput configured for 0..100 percent values with a\n * trailing `%` add-on. Inherits stepper / rounding / normalisation features\n * from DecimalInput.\n */\nimport { forwardRef } from 'react';\nimport { DecimalInput, type DecimalInputProps } from './decimal-input';\n\nexport type PercentageInputProps = Omit<\n\tDecimalInputProps,\n\t'min' | 'max' | 'allowNegative' | 'endAddon'\n> & {\n\t/** Minimum percentage value. Defaults to 0. */\n\tmin?: number;\n\t/** Maximum percentage value. Defaults to 100. */\n\tmax?: number;\n};\n\nexport const PercentageInput = forwardRef<HTMLInputElement, PercentageInputProps>(\n\tfunction PercentageInput({ decimalPlaces = 2, min = 0, max = 100, step, ...props }, ref) {\n\t\treturn (\n\t\t\t<DecimalInput className=\"percentage-input--component\"\n\t\t\t\tref={ref}\n\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\tallowNegative={false}\n\t\t\t\tmin={min}\n\t\t\t\tmax={max}\n\t\t\t\tstep={step}\n\t\t\t\tendAddon=\"%\"\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nPercentageInput.displayName = 'PercentageInput';\n","import { useState, useCallback, useEffect, useMemo, memo, forwardRef, type ForwardedRef } from 'react';\nimport * as baseui from '../../ui/select';\nimport { Label, Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport {\n\tDecimalInput,\n\tdefaultDecimalInputStrings,\n\ttype DecimalInputProps,\n\ttype DecimalInputStrings,\n} from './decimal-input';\nimport { SelectPopupContent, SelectPopupGroup, SelectPopupItem } from '../choice-inputs';\n\nexport interface CurrencyOption {\n\tvalue: string;\n\tlabel: string;\n}\n\nexport interface CurrencyInputStrings extends DecimalInputStrings {\n\t/** Accessible name for the currency selector. */\n\tcurrencyAriaLabel: string;\n}\n\nexport const defaultCurrencyInputStrings: CurrencyInputStrings = {\n\t...defaultDecimalInputStrings,\n\tcurrencyAriaLabel: 'Currency',\n};\n\nexport interface CurrencyInputProps extends Omit<DecimalInputProps, 'label' | 'hint' | 'helperText' | 'error' | 'strings'> {\n\t/** Current currency value */\n\tcurrency?: string;\n\n\t/** Default currency if uncontrolled */\n\tdefaultCurrency?: string;\n\n\t/** List of available currencies (simple strings or objects with value/label) */\n\tcurrencies?: (string | CurrencyOption)[];\n\n\t/** Callback when currency changes */\n\tonCurrencyChange?: (currency: string) => void;\n\n\t/** Position of currency dropdown */\n\tcurrencyPosition?: 'start' | 'end';\n\n\t/** Disable currency selection */\n\tdisableCurrencySelector?: boolean;\n\n\t/** Placeholder for currency dropdown */\n\tcurrencyPlaceholder?: string;\n\n\t/** Width of the currency dropdown */\n\tcurrencyWidth?: string;\n\n\t/** Label for currency field (sub-label) */\n\tcurrencyLabel?: string;\n\n\t/** Localizes the selector name and inherited decimal-stepper labels. */\n\tstrings?: StringsProp<CurrencyInputStrings>;\n\n\t/** Error state for styling (passed from FormField) */\n\tinvalid?: boolean;\n\n\t/** Called when the input is misconfigured (mismatched currency/defaultCurrency\n\t * while the selector is disabled, missing currency, etc.). The library\n\t * also DEV-logs the same message to the console. */\n\tonConfigError?: (\n\t\tmessage: string,\n\t\tdetails: { currency?: string; defaultCurrency?: string; disableCurrencySelector?: boolean },\n\t) => void;\n}\n\n// Common currency symbols\nconst CURRENCY_SYMBOLS: Record<string, string> = {\n\tUSD: '$',\n\tEUR: '€',\n\tGBP: '£',\n\tBGN: 'лв',\n\tJPY: '¥',\n\tCNY: '¥',\n\tCHF: 'CHF',\n\tCAD: 'C$',\n\tAUD: 'A$',\n};\n\nconst normalizeCurrencies = (currencies?: (string | CurrencyOption)[]): CurrencyOption[] => {\n\tif (!currencies || currencies.length === 0) return [];\n\n\treturn currencies.map((currency) => {\n\t\tif (typeof currency === 'string') {\n\t\t\tconst symbol = CURRENCY_SYMBOLS[currency] || currency;\n\t\t\treturn {\n\t\t\t\tvalue: currency,\n\t\t\t\tlabel: `${symbol} ${currency}`,\n\t\t\t};\n\t\t}\n\t\treturn currency;\n\t});\n};\n\nfunction CurrencyInputImpl(\n\t{\n\t\tcurrency: controlledCurrency,\n\t\tdefaultCurrency,\n\t\tcurrencies,\n\t\tonCurrencyChange,\n\t\tcurrencyPosition = 'start',\n\t\tdisableCurrencySelector = false,\n\t\tcurrencyPlaceholder,\n\t\tcurrencyWidth = 'w-28',\n\t\tcurrencyLabel,\n\t\tstrings: stringsProp,\n\t\tinvalid,\n\t\tdisabled,\n\t\tonConfigError,\n\t\tsize: sizeProp,\n\t\t...decimalInputProps\n\t}: CurrencyInputProps,\n\tforwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n\tconst { defaultScale } = useDensityConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\tconst strings = useStrings(defaultCurrencyInputStrings, stringsProp);\n\n\t// Memoize normalized currencies\n\tconst normalizedCurrencies = useMemo(() => normalizeCurrencies(currencies), [currencies]);\n\n\t// Internal state for uncontrolled currency\n\tconst [internalCurrency, setInternalCurrency] = useState(\n\t\tdefaultCurrency ?? normalizedCurrencies[0]?.value ?? ''\n\t);\n\n\t// Determine if currency is controlled\n\tconst isCurrencyControlled = controlledCurrency !== undefined;\n\tconst selectedCurrency = isCurrencyControlled ? controlledCurrency : internalCurrency;\n\n\tuseEffect(() => {\n\t\tconst details = { currency: controlledCurrency, defaultCurrency, disableCurrencySelector };\n\t\tif (\n\t\t\tdisableCurrencySelector &&\n\t\t\ttypeof controlledCurrency === 'string' &&\n\t\t\ttypeof defaultCurrency === 'string' &&\n\t\t\tcontrolledCurrency.trim() !== '' &&\n\t\t\tdefaultCurrency.trim() !== '' &&\n\t\t\tcontrolledCurrency !== defaultCurrency\n\t\t) {\n\t\t\tconst message = '[CurrencyInput] currency/defaultCurrency mismatch while selector is disabled.';\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn(message, { currency: controlledCurrency, defaultCurrency });\n\t\t\t}\n\t\t\tonConfigError?.(message, details);\n\t\t}\n\n\t\tif (\n\t\t\tdisableCurrencySelector &&\n\t\t\t(typeof selectedCurrency !== 'string' || selectedCurrency.trim().length === 0)\n\t\t) {\n\t\t\tconst message = '[CurrencyInput] disableCurrencySelector is enabled but no currency is provided.';\n\t\t\tif (import.meta.env?.DEV) {\n\t\t\t\tconsole.warn(message);\n\t\t\t}\n\t\t\tonConfigError?.(message, details);\n\t\t}\n\t}, [controlledCurrency, defaultCurrency, disableCurrencySelector, onConfigError, selectedCurrency]);\n\n\t// Handle currency change\n\tconst handleCurrencyChange = useCallback(\n\t\t(newCurrency: string | null) => {\n\t\t\tif (newCurrency === null) return;\n\t\t\tif (!isCurrencyControlled) {\n\t\t\t\tsetInternalCurrency(newCurrency);\n\t\t\t}\n\t\t\tonCurrencyChange?.(newCurrency);\n\t\t},\n\t\t[isCurrencyControlled, onCurrencyChange]\n\t);\n\n\t// Memoize trigger class names. `formFieldTriggerClasses` is the canonical\n\t// select/trigger chrome, so this selector keeps the height, padding, radius,\n\t// and focus treatment of a standalone `Select` — previously only the height\n\t// was shared, leaving shadcn's `rounded-md` and `py-2 pr-2 pl-2.5` in place\n\t// and making the unit selector visibly narrower-cornered than its siblings.\n\t// `currencyWidth` still wins over the helper's `w-full` through twMerge.\n\tconst triggerClassName = useMemo(\n\t\t() =>\n\t\t\tcn(\n\t\t\t\t'currency-input--selector-trigger',\n\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t'!shadow-none',\n\t\t\t\tcurrencyWidth,\n\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed'\n\t\t\t),\n\t\t[size, currencyWidth, disabled]\n\t);\n\n\t// Currency selector component\n\tconst currencySelector = (\n\t\t<Stack gap=\"md\" className=\"currency-input--selector\">\n\t\t\t{!!currencyLabel && <Label className=\"currency-input--selector-label leading-normal\">{currencyLabel}</Label>}\n\t\t\t<baseui.Select\n\t\t\t\tvalue={selectedCurrency}\n\t\t\t\tonValueChange={(value) => handleCurrencyChange(value)}\n\t\t\t\tdisabled={disabled || disableCurrencySelector}\n\t\t\t>\n\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\taria-label={currencyLabel || strings.currencyAriaLabel}\n\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\tclassName={triggerClassName}\n\t\t\t\t>\n\t\t\t\t\t<baseui.SelectValue\n\t\t\t\t\t\tplaceholder={currencyPlaceholder ? (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t{currencyPlaceholder}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : undefined}\n\t\t\t\t\t/>\n\t\t\t\t</baseui.SelectTrigger>\n\t\t\t\t<SelectPopupContent>\n\t\t\t\t\t<SelectPopupGroup>\n\t\t\t\t\t\t{normalizedCurrencies.map((curr) => (\n\t\t\t\t\t\t\t<SelectPopupItem key={curr.value} value={curr.value} size={size}>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t{curr.label}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</SelectPopupItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SelectPopupGroup>\n\t\t\t\t</SelectPopupContent>\n\t\t\t</baseui.Select>\n\t\t</Stack>\n\t);\n\n\treturn (\n\t\t<div className={cn('currency-input--component', 'flex items-start gap-space-md')}>\n\t\t\t{currencyPosition === 'start' && currencySelector}\n\n\t\t\t<div className=\"currency-input--amount min-w-0 flex-1\">\n\t\t\t\t<DecimalInput\n\t\t\t\t\tref={forwardedRef}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tdecimalPlaces={2}\n\t\t\t\t\tallowNegative={false}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\tstrings={{ decrement: strings.decrement, increment: strings.increment }}\n\t\t\t\t\t{...decimalInputProps}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{currencyPosition === 'end' && currencySelector}\n\t\t</div>\n\t);\n}\n\n// forwardRef + memo: forward to the underlying decimal input so consumers\n// can focus/measure programmatically.\nexport const CurrencyInput = memo(forwardRef<HTMLInputElement, CurrencyInputProps>(CurrencyInputImpl));\nCurrencyInput.displayName = 'CurrencyInput';\n","export interface MoneyInputStrings {\n\toriginalValue: string;\n\tconversionWarning: string;\n}\n\nexport const defaultMoneyInputStrings: MoneyInputStrings = {\n\toriginalValue: 'Original value: {value}',\n\tconversionWarning: 'Currency will be converted from {from} to {to}.',\n};\n\nexport function interpolateMoneyInputString(\n\ttemplate: string,\n\tvalues: Record<string, string>,\n) {\n\treturn Object.entries(values).reduce(\n\t\t(output, [key, value]) => output.replaceAll(`{${key}}`, value),\n\t\ttemplate,\n\t);\n}\n","/**\n * MoneyInput — canonical monetary editor.\n *\n * It composes CurrencyInput with optional FormField chrome, one combined\n * amount/currency callback, and opt-in original-value/conversion context.\n * Consumers import it from `themelia-react-ui/base/forms`; display-only\n * monetary values use `Money` from `themelia-react-ui/primitives`.\n */\nimport { AlertTriangle, Info } from 'lucide-react';\nimport {\n\tforwardRef,\n\tuseCallback,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n\ttype ChangeEvent,\n\ttype ReactNode,\n} from 'react';\n\nimport { Alert, AlertDescription } from '../feedback';\nimport { FormField } from '../forms/form-field';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useMoneyConfig, type CurrencyCode } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\n\nimport {\n\tCurrencyInput,\n\ttype CurrencyInputProps,\n\ttype CurrencyOption,\n} from './currency-input';\nimport {\n\tdefaultMoneyInputStrings,\n\tinterpolateMoneyInputString,\n\ttype MoneyInputStrings,\n} from './money-input.strings';\n\nexport interface MoneyInputContext {\n\t/** Original major-unit amount, when available. */\n\tamount?: number | string | null;\n\t/** Original value currency, when available. */\n\tcurrency?: string | null;\n\t/** Optional original/record currency that can trigger a conversion warning. */\n\trecordCurrency?: string | null;\n\t/** Consumer-formatted original value shown as supporting context. */\n\tpair?: { formatted?: string | null } | null;\n}\n\nexport interface MoneyInputData {\n\t/** Parsed major-unit amount. `null` means the field is empty or incomplete; it is never coerced to zero. */\n\tamount: number | null;\n\t/** Active ISO 4217 currency code. */\n\tcurrency: CurrencyCode;\n}\n\nexport interface MoneyInputProps extends Omit<\n\tCurrencyInputProps,\n\t'currency' | 'defaultCurrency' | 'currencies' | 'onCurrencyChange' | 'strings'\n> {\n\t/** Current currency value (ISO 4217 code, e.g. `USD`). */\n\tcurrency?: CurrencyCode;\n\t/** Initial currency when uncontrolled. Falls back to UIProvider money config. */\n\tdefaultCurrency?: CurrencyCode;\n\t/** Available currencies. Custom option labels are preserved. */\n\tcurrencies?: Array<CurrencyCode | CurrencyOption>;\n\t/** Currency-only callback for existing form integrations. */\n\tonCurrencyChange?: (currency: CurrencyCode) => void;\n\t/**\n\t * Combined amount/currency callback for domain-form state. The amount is\n\t * parsed while the raw `value` / `onChange` channel keeps intermediate text\n\t * such as `1.` available to the editor.\n\t */\n\tonChangeData?: (data: MoneyInputData) => void;\n\t/** Optional context used for original-value and conversion messaging. */\n\tmoney?: MoneyInputContext | null;\n\t/** Optional field label. Omit when an external FormField already owns the chrome. */\n\tlabel?: string;\n\t/** Short guidance rendered below the control when no helper text or error is present. */\n\thint?: string;\n\t/** Supporting copy rendered below the control. */\n\thelperText?: string;\n\t/** Validation message. Also marks the amount and currency controls invalid. */\n\terror?: string;\n\t/** Marks the owned label and native amount input as required. */\n\trequired?: boolean;\n\t/** Existing record currency used to detect a currency migration. */\n\trecordCurrency?: CurrencyCode;\n\t/** Whether a record-currency mismatch renders the conversion warning. */\n\tshowMigrationWarning?: boolean;\n\t/** Consumer-owned warning content for a record-currency mismatch. */\n\tmigrationWarningMessage?: ReactNode;\n\t/** Whether to render `money.pair.formatted` as original-value context. */\n\tshowOriginalHint?: boolean;\n\t/** String overrides forwarded to the underlying DecimalInput steppers. */\n\tcontrolStrings?: CurrencyInputProps['strings'];\n\t/** Class name for the inner amount input. `className` styles the complete MoneyInput surface. */\n\tcontrolClassName?: string;\n\t/** Copy overrides for original-value and conversion-warning messages. */\n\tstrings?: StringsProp<MoneyInputStrings>;\n}\n\nconst FALLBACK_CURRENCIES: CurrencyCode[] = ['USD', 'EUR'];\n\nfunction parseAmount(value: unknown) {\n\tconst raw = String(value ?? '').trim();\n\tif (!raw) return null;\n\tconst parsed = Number.parseFloat(raw.replace(',', '.'));\n\treturn Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction resolveFormatted(value: unknown) {\n\treturn typeof value === 'string' ? value.trim() : '';\n}\n\nfunction currencyOptionValue(option: CurrencyCode | CurrencyOption) {\n\treturn typeof option === 'string' ? option : option.value;\n}\n\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n\t{\n\t\tcurrency: controlledCurrency,\n\t\tdefaultCurrency,\n\t\tcurrencies,\n\t\tonCurrencyChange,\n\t\tonChangeData,\n\t\tmoney,\n\t\tlabel,\n\t\thint,\n\t\thelperText,\n\t\terror,\n\t\trequired,\n\t\tinvalid,\n\t\trecordCurrency: recordCurrencyProp,\n\t\tshowMigrationWarning = true,\n\t\tmigrationWarningMessage,\n\t\tshowOriginalHint = true,\n\t\tcontrolStrings,\n\t\tcontrolClassName,\n\t\tstrings: stringsProp,\n\t\tclassName,\n\t\tonChange,\n\t\tvalue,\n\t\tdefaultValue,\n\t\t...props\n\t},\n\tforwardedRef,\n) {\n\tconst moneyConfig = useMoneyConfig();\n\tconst strings = useStrings(defaultMoneyInputStrings, stringsProp);\n\tconst resolvedDefaultCurrency = defaultCurrency\n\t\t?? moneyConfig.defaultCurrency\n\t\t?? 'USD';\n\tconst [internalCurrency, setInternalCurrency] = useState(resolvedDefaultCurrency);\n\tconst activeCurrency = controlledCurrency ?? internalCurrency;\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\n\tconst availableCurrencies = useMemo(() => {\n\t\tconst source = currencies?.length\n\t\t\t? currencies\n\t\t\t: [resolvedDefaultCurrency, ...FALLBACK_CURRENCIES];\n\t\tconst unique = new Map<string, CurrencyCode | CurrencyOption>();\n\t\tfor (const option of source) {\n\t\t\tconst optionValue = currencyOptionValue(option);\n\t\t\tif (!unique.has(optionValue)) unique.set(optionValue, option);\n\t\t}\n\t\tconst options = Array.from(unique.values());\n\t\treturn unique.has(activeCurrency) ? options : [activeCurrency, ...options];\n\t}, [activeCurrency, currencies, resolvedDefaultCurrency]);\n\tconst recordCurrency = recordCurrencyProp ?? money?.recordCurrency ?? undefined;\n\tconst originalFormatted = showOriginalHint\n\t\t? resolveFormatted(money?.pair?.formatted)\n\t\t: '';\n\tconst willMigrate = Boolean(\n\t\trecordCurrency\n\t\t&& activeCurrency\n\t\t&& recordCurrency !== activeCurrency,\n\t);\n\tconst isInvalid = invalid ?? Boolean(error);\n\n\tconst assignRef = useCallback((node: HTMLInputElement | null) => {\n\t\tinputRef.current = node;\n\t\tif (typeof forwardedRef === 'function') forwardedRef(node);\n\t\telse if (forwardedRef) forwardedRef.current = node;\n\t}, [forwardedRef]);\n\n\tconst handleAmountChange = useCallback((event: ChangeEvent<HTMLInputElement>) => {\n\t\tonChange?.(event);\n\t\tonChangeData?.({\n\t\t\tamount: parseAmount(event.target.value),\n\t\t\tcurrency: activeCurrency,\n\t\t});\n\t}, [activeCurrency, onChange, onChangeData]);\n\n\tconst handleCurrencyChange = useCallback((nextCurrency: CurrencyCode) => {\n\t\tif (controlledCurrency === undefined) setInternalCurrency(nextCurrency);\n\t\tonCurrencyChange?.(nextCurrency);\n\t\tonChangeData?.({\n\t\t\tamount: parseAmount(inputRef.current?.value ?? value ?? defaultValue),\n\t\t\tcurrency: nextCurrency,\n\t\t});\n\t}, [controlledCurrency, defaultValue, onChangeData, onCurrencyChange, value]);\n\n\tconst input = (\n\t\t<CurrencyInput\n\t\t\t{...props}\n\t\t\tref={assignRef}\n\t\t\tvalue={value}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tcurrency={activeCurrency}\n\t\t\tcurrencies={availableCurrencies}\n\t\t\tonChange={handleAmountChange}\n\t\t\tonCurrencyChange={handleCurrencyChange}\n\t\t\tinvalid={isInvalid}\n\t\t\trequired={required}\n\t\t\taria-required={required ? true : props['aria-required']}\n\t\t\tstrings={controlStrings}\n\t\t\tclassName={controlClassName}\n\t\t/>\n\t);\n\tconst hasFieldChrome = Boolean(label || hint || helperText || error || required);\n\n\treturn (\n\t\t<Stack gap=\"sm\" className={cn('money-input--component', className)}>\n\t\t\t{hasFieldChrome ? (\n\t\t\t\t<FormField\n\t\t\t\t\tlabel={label}\n\t\t\t\t\thint={hint}\n\t\t\t\t\thelperText={helperText}\n\t\t\t\t\terror={error}\n\t\t\t\t\trequired={required}\n\t\t\t\t>\n\t\t\t\t\t{input}\n\t\t\t\t</FormField>\n\t\t\t) : input}\n\n\t\t\t{!!originalFormatted && !error && (\n\t\t\t\t<div className=\"money-input--original flex items-center gap-space-sm text-muted-foreground\">\n\t\t\t\t\t<Info className=\"size-icon-sm shrink-0\" aria-hidden=\"true\" />\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{interpolateMoneyInputString(strings.originalValue, { value: originalFormatted })}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!willMigrate && showMigrationWarning && (\n\t\t\t\t<Alert tone=\"warning\" className=\"money-input--warning\">\n\t\t\t\t\t<AlertTriangle aria-hidden=\"true\" />\n\t\t\t\t\t<AlertDescription>\n\t\t\t\t\t\t{migrationWarningMessage ?? interpolateMoneyInputString(\n\t\t\t\t\t\t\tstrings.conversionWarning,\n\t\t\t\t\t\t\t{ from: recordCurrency ?? '', to: activeCurrency },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AlertDescription>\n\t\t\t\t</Alert>\n\t\t\t)}\n\t\t</Stack>\n\t);\n});\n\nMoneyInput.displayName = 'MoneyInput';\n\nexport {\n\tdefaultMoneyInputStrings,\n\ttype MoneyInputStrings,\n} from './money-input.strings';\n","import { forwardRef, useMemo, useCallback } from 'react';\nimport { Select, type SelectProps } from '../choice-inputs';\nimport { cn } from '../../../lib/utils';\n\ntype RoundingMode = string;\n\nexport interface RoundingModeSelectProps extends Omit<SelectProps, 'options' | 'value' | 'onValueChange'> {\n\t/** Current rounding mode value */\n\tvalue?: RoundingMode;\n\n\t/** Canonical change handler. */\n\tonValueChange?: (value: RoundingMode | undefined) => void;\n\n\t/** Custom labels for rounding modes */\n\tlabels?: Partial<Record<RoundingMode, string>>;\n}\n\nconst ORDERED_MODES: RoundingMode[] = ['floor', 'half_up', 'ceil'];\n\nexport const RoundingModeSelect = forwardRef<HTMLButtonElement, RoundingModeSelectProps>(function RoundingModeSelect(allProps, ref) {\n\tconst controlled = Object.prototype.hasOwnProperty.call(allProps, 'value');\n\tconst { value, onValueChange, labels, placeholder, className, ...props } = allProps;\n\tconst options = useMemo(\n\t\t() =>\n\t\t\tORDERED_MODES.map((mode) => ({\n\t\t\t\tvalue: mode,\n\t\t\t\tlabel: labels?.[mode] ?? mode,\n\t\t\t})),\n\t\t[labels]\n\t);\n\n\tconst handleChange = useCallback(\n\t\t(next: string | undefined) => {\n\t\t\tonValueChange?.(next as RoundingMode | undefined);\n\t\t},\n\t\t[onValueChange]\n\t);\n\n\treturn <Select ref={ref} className={cn('rounding-mode-select--component', className)} options={options} {...(controlled ? { value } : {})} onValueChange={handleChange} placeholder={placeholder} {...props} />;\n});\n\nRoundingModeSelect.displayName = 'RoundingModeSelect';\n","import * as React from 'react';\nimport { useState, useEffect, useCallback } from 'react';\nimport * as baseui from '../../ui/select';\nimport { Label, Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { DecimalInput } from './decimal-input';\nimport { SelectPopupContent, SelectPopupGroup, SelectPopupItem } from '../choice-inputs';\n\nexport interface DimensionObject {\n\t\twidth?: string;\n\t\theight?: string;\n\t\tdepth?: string;\n}\n\nexport type DimensionValue = string | DimensionObject;\nexport type DimensionUnit = 'mm' | 'cm' | 'm' | 'in' | 'ft' | 'px';\n\nexport interface DimensionsInputStrings {\n\t\twidth: string;\n\t\theight: string;\n\t\tdepth: string;\n\t\tunit: string;\n\t\twidthPlaceholder: string;\n\t\theightPlaceholder: string;\n\t\tdepthPlaceholder: string;\n}\n\nexport const defaultDimensionsInputStrings: DimensionsInputStrings = {\n\t\twidth: 'Width',\n\t\theight: 'Height',\n\t\tdepth: 'Depth',\n\t\tunit: 'Unit',\n\t\twidthPlaceholder: '0.00',\n\t\theightPlaceholder: '0.00',\n\t\tdepthPlaceholder: '0.00',\n};\n\nexport interface DimensionsInputProps {\n\t\t/** Current value (string \"WxHxD\" or object { width, height, depth }) */\n\t\tvalue?: DimensionValue;\n\n\t\t/** Default value for uncontrolled mode */\n\t\tdefaultValue?: DimensionValue;\n\n\t\t/** Format type: 'string' for \"WxHxD\" or 'object' for { width, height, depth } */\n\t\tformat?: 'string' | 'object';\n\n\t/** Current length unit value. */\n\tunit?: DimensionUnit;\n\n\t/** Default length unit for uncontrolled mode. */\n\tdefaultUnit?: DimensionUnit;\n\n\t\t/** Label for width input (sub-label) */\n\t\twidthLabel?: string;\n\n\t\t/** Label for height input (sub-label) */\n\t\theightLabel?: string;\n\n\t\t/** Label for depth/length input (sub-label) */\n\t\tdepthLabel?: string;\n\n\t\t/** Label for unit selector (sub-label) */\n\t\tunitLabel?: string;\n\n\t\t/** Placeholder for the unit select */\n\t\tunitPlaceholder?: string;\n\n\t\t/** Placeholder for width */\n\t\twidthPlaceholder?: string;\n\n\t\t/** Placeholder for height */\n\t\theightPlaceholder?: string;\n\n\t\t/** Placeholder for depth */\n\t\tdepthPlaceholder?: string;\n\n\t\t/** Form control size — flows through `useDensityConfig().defaultScale`. */\n\t\tsize?: FormControlSize;\n\n\t\t/** Callback when value changes */\n\t\tonChange?: (e: { target: { value: DimensionValue } }) => void;\n\n\t\t/** Callback when unit changes */\n\tonUnitChange?: (unit: DimensionUnit) => void;\n\n\t\t/** Number of decimal places. Defaults to 2 */\n\t\tdecimalPlaces?: number;\n\n\t\t/** Minimum value for all dimensions */\n\t\tmin?: number;\n\n\t\t/** Maximum value for all dimensions */\n\t\tmax?: number;\n\n\t\t/** Show unit selector. Defaults to true */\n\t\tshowUnitSelector?: boolean;\n\n\t\t/** Disable unit selector */\n\t\tdisableUnitSelector?: boolean;\n\n\t\t/** Layout orientation. Defaults to 'horizontal' */\n\t\tlayout?: 'horizontal' | 'vertical';\n\n\t\t/** Error state for styling (passed from FormField) */\n\t\tinvalid?: boolean;\n\n\t\t/** Disabled state */\n\t\tdisabled?: boolean;\n\n\t\t/** Additional CSS classes */\n\t\tclassName?: string;\n\n\t\t/** String overrides merged over defaults. Direct props (e.g. `widthLabel`) win over `strings` keys. */\n\t\tstrings?: StringsProp<DimensionsInputStrings>;\n}\n\n// Unit options\nconst UNIT_OPTIONS = [\n\t{ value: 'mm', label: 'mm' },\n\t{ value: 'cm', label: 'cm' },\n\t{ value: 'm', label: 'm' },\n\t{ value: 'in', label: 'in' },\n\t{ value: 'ft', label: 'ft' },\n\t{ value: 'px', label: 'px' },\n] as const;\n\nconst parseDimensionValue = (\n\t\tvalue: DimensionValue | undefined,\n\t\tformat: 'string' | 'object'\n): { width: string; height: string; depth: string } => {\n\t\tif (!value) {\n\t\t\t\treturn { width: '', height: '', depth: '' };\n\t\t}\n\n\t\tif (format === 'string' && typeof value === 'string') {\n\t\t\t\tconst parts = value.split('x').map((p) => p.trim());\n\t\t\t\treturn {\n\t\t\t\t\t\twidth: parts[0] || '',\n\t\t\t\t\t\theight: parts[1] || '',\n\t\t\t\t\t\tdepth: parts[2] || '',\n\t\t\t\t};\n\t\t}\n\n\t\tif (format === 'object' && typeof value === 'object') {\n\t\t\t\treturn {\n\t\t\t\t\t\twidth: value.width || '',\n\t\t\t\t\t\theight: value.height || '',\n\t\t\t\t\t\tdepth: value.depth || '',\n\t\t\t\t};\n\t\t}\n\n\t\treturn { width: '', height: '', depth: '' };\n};\n\nconst formatDimensionValue = (\n\t\twidth: string,\n\t\theight: string,\n\t\tdepth: string,\n\t\tformat: 'string' | 'object'\n): DimensionValue => {\n\t\tif (format === 'string') {\n\t\t\t\treturn `${width}x${height}x${depth}`;\n\t\t}\n\t\treturn { width, height, depth };\n};\n\nexport const DimensionsInput = React.forwardRef<HTMLDivElement, DimensionsInputProps>(function DimensionsInput({\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tformat = 'string',\n\t\tunit: controlledUnit,\n\tdefaultUnit = 'cm',\n\t\twidthLabel,\n\t\theightLabel,\n\t\tdepthLabel,\n\t\tunitLabel,\n\t\tunitPlaceholder,\n\t\twidthPlaceholder,\n\t\theightPlaceholder,\n\t\tdepthPlaceholder,\n\t\tonChange,\n\t\tonUnitChange,\n\t\tdecimalPlaces = 2,\n\t\tmin = 0,\n\t\tmax,\n\t\tshowUnitSelector = true,\n\t\tdisableUnitSelector = false,\n\t\tlayout = 'horizontal',\n\t\tinvalid,\n\t\tdisabled = false,\n\t\tclassName,\n\t\tsize: sizeProp,\n\t\tstrings: stringsProp,\n}: DimensionsInputProps, ref) {\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t\tconst strings = useStrings(defaultDimensionsInputStrings, stringsProp);\n\t\tconst resolvedWidthLabel = widthLabel ?? strings.width;\n\t\tconst resolvedHeightLabel = heightLabel ?? strings.height;\n\t\tconst resolvedDepthLabel = depthLabel ?? strings.depth;\n\t\tconst resolvedUnitPlaceholder = unitPlaceholder ?? strings.unit;\n\t\tconst resolvedWidthPlaceholder = widthPlaceholder ?? strings.widthPlaceholder;\n\t\tconst resolvedHeightPlaceholder = heightPlaceholder ?? strings.heightPlaceholder;\n\t\tconst resolvedDepthPlaceholder = depthPlaceholder ?? strings.depthPlaceholder;\n\t\tconst shouldShowInlineLabels = layout === 'horizontal';\n\t\tconst shouldShowVerticalLabels = layout === 'vertical';\n\t\tconst shouldShowUnitSelector = showUnitSelector === true;\n\t\tconst hasUnitLabel = (unitLabel ?? '').length > 0;\n\t\tconst widthFieldLabel = shouldShowVerticalLabels ? resolvedWidthLabel : '';\n\t\tconst heightFieldLabel = shouldShowVerticalLabels ? resolvedHeightLabel : '';\n\t\tconst depthFieldLabel = shouldShowVerticalLabels ? resolvedDepthLabel : '';\n\n\t\t// Determine if value is controlled\n\t\tconst isValueControlled = controlledValue !== undefined;\n\t\tconst isUnitControlled = controlledUnit !== undefined;\n\n\t\t// Parse initial value\n\t\tconst initialParsed = parseDimensionValue(\n\t\t\t\tisValueControlled ? controlledValue : defaultValue,\n\t\t\t\tformat\n\t\t);\n\n\t\t// Internal state for uncontrolled mode\n\t\tconst [internalWidth, setInternalWidth] = useState(initialParsed.width);\n\t\tconst [internalHeight, setInternalHeight] = useState(initialParsed.height);\n\t\tconst [internalDepth, setInternalDepth] = useState(initialParsed.depth);\n\t\tconst [internalUnit, setInternalUnit] = useState(controlledUnit || defaultUnit);\n\n\t\t// Get current values\n\t\tconst parsedValue = parseDimensionValue(controlledValue, format);\n\t\tconst widthValue = isValueControlled ? parsedValue.width : internalWidth;\n\t\tconst heightValue = isValueControlled ? parsedValue.height : internalHeight;\n\t\tconst depthValue = isValueControlled ? parsedValue.depth : internalDepth;\n\t\tconst unitValue = isUnitControlled ? controlledUnit : internalUnit;\n\n\t\t// Sync internal state when controlled value changes\n\t\tuseEffect(() => {\n\t\t\t\tif (isValueControlled) {\n\t\t\t\t\t\tconst parsed = parseDimensionValue(controlledValue, format);\n\t\t\t\t\t\tsetInternalWidth(parsed.width);\n\t\t\t\t\t\tsetInternalHeight(parsed.height);\n\t\t\t\t\t\tsetInternalDepth(parsed.depth);\n\t\t\t\t}\n\t\t}, [controlledValue, format, isValueControlled]);\n\n\t\t// Handle dimension changes\n\t\tconst handleDimensionChange = useCallback(\n\t\t\t\t(dimension: 'width' | 'height' | 'depth', newValue: string) => {\n\t\t\t\t\t\tlet updatedWidth = widthValue;\n\t\t\t\t\t\tlet updatedHeight = heightValue;\n\t\t\t\t\t\tlet updatedDepth = depthValue;\n\n\t\t\t\t\t\tif (dimension === 'width') updatedWidth = newValue;\n\t\t\t\t\t\tif (dimension === 'height') updatedHeight = newValue;\n\t\t\t\t\t\tif (dimension === 'depth') updatedDepth = newValue;\n\n\t\t\t\t\t\tif (!isValueControlled) {\n\t\t\t\t\t\t\t\tsetInternalWidth(updatedWidth);\n\t\t\t\t\t\t\t\tsetInternalHeight(updatedHeight);\n\t\t\t\t\t\t\t\tsetInternalDepth(updatedDepth);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst formattedValue = formatDimensionValue(updatedWidth, updatedHeight, updatedDepth, format);\n\t\t\t\t\t\tonChange?.({ target: { value: formattedValue } });\n\t\t\t\t},\n\t\t\t\t[widthValue, heightValue, depthValue, isValueControlled, format, onChange]\n\t\t);\n\n\t\tconst handleUnitChange = useCallback(\n\t\t\t\t(newUnit: string | null) => {\n\t\t\t\t\t\tif (newUnit === null) return;\n\t\t\tconst typedUnit = newUnit as DimensionUnit;\n\t\t\t\t\t\tif (!isUnitControlled) {\n\t\t\t\t\t\t\t\tsetInternalUnit(typedUnit);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonUnitChange?.(typedUnit);\n\t\t\t\t},\n\t\t\t\t[isUnitControlled, onUnitChange]\n\t\t);\n\n\tconst unitSelector = (\n\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t{!!hasUnitLabel && <Label className=\"leading-6\">{unitLabel}</Label>}\n\t\t\t\t\t\t<baseui.Select\n\t\t\t\t\t\t\t\tvalue={unitValue}\n\t\t\t\t\t\t\t\tonValueChange={(value) => handleUnitChange(value)}\n\t\t\t\t\t\t\t\tdisabled={disabled || disableUnitSelector}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\t\t\t\t\t\taria-label={unitLabel ?? strings.unit}\n\t\t\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t\t\t'!shadow-none',\n\t\t\t\t\t\t\t\t\t\t\t\tlayout === 'vertical'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'w-full'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'w-full @md/dimensions-input:w-32',\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed'\n\t\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\t<baseui.SelectValue\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedUnitPlaceholder}\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)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</baseui.SelectTrigger>\n\t\t\t\t\t\t\t\t<SelectPopupContent>\n\t\t\t\t\t\t\t\t\t\t<SelectPopupGroup>\n\t\t\t\t\t\t\t\t\t\t\t\t{UNIT_OPTIONS.map((unit) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupItem key={unit.value} value={unit.value} size={size}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{unit.label}\n\t\t\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\t</SelectPopupItem>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</SelectPopupGroup>\n\t\t\t\t\t\t\t\t</SelectPopupContent>\n\t\t\t\t\t\t</baseui.Select>\n\t\t</Stack>\n\t\t);\n\n\t\treturn (\n\t\t<Stack ref={ref} gap=\"md\" className={cn('dimensions-input--component @container/dimensions-input', className)}>\n\t\t\t\t\t\t{/* Dimensions Inputs */}\n\t\t\t<Stack\n\t\t\t\tdirection={layout === 'vertical' ? 'vertical' : 'horizontal'}\n\t\t\t\tgap=\"md\"\n\t\t\t\talign={layout === 'vertical' ? 'stretch' : 'start'}\n\t\t\t\tclassName=\"dimensions-input--fields\"\n\t\t\t>\n\t\t\t\t\t\t\t\t{/* Width */}\n\t\t\t\t<Stack gap=\"xs\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowVerticalLabels && !!widthFieldLabel && <Label>{widthFieldLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={widthValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDimensionChange('width', e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={resolvedWidthPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={resolvedWidthLabel}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedWidthLabel}\n\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)}\n\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t{/* Separator */}\n\t\t\t\t\t\t\t\t{layout === 'horizontal' && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center pt-space-md\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">×</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* Height */}\n\t\t\t\t<Stack gap=\"xs\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowVerticalLabels && !!heightFieldLabel && <Label>{heightFieldLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={heightValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDimensionChange('height', e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={resolvedHeightPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={resolvedHeightLabel}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedHeightLabel}\n\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)}\n\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t{/* Separator */}\n\t\t\t\t\t\t\t\t{layout === 'horizontal' && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center pt-space-md\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\">×</Text>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* Depth */}\n\t\t\t\t<Stack gap=\"xs\" className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowVerticalLabels && !!depthFieldLabel && <Label>{depthFieldLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={depthValue}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => handleDimensionChange('depth', e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={resolvedDepthPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\taria-label={resolvedDepthLabel}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && (\n\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedDepthLabel}\n\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)}\n\t\t\t\t</Stack>\n\n\t\t\t\t\t\t\t\t{/* Unit Selector */}\n\t\t\t\t\t\t\t\t{!!shouldShowUnitSelector && (\n\t\t\t\t\t\t\t\t\t\t<Stack gap=\"dense\"\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'dimensions-input--unit',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlayout === 'vertical'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'w-full'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'w-full basis-full pt-0 @md/dimensions-input:w-32 @md/dimensions-input:basis-32 @md/dimensions-input:shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{unitSelector}\n\t\t\t\t\t\t\t\t\t\t\t\t{!!shouldShowInlineLabels && !hasUnitLabel && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resolvedUnitPlaceholder}\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)}\n\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t</Stack>\n\t\t</Stack>\n\t\t);\n});\n\nDimensionsInput.displayName = 'DimensionsInput';\n","import * as React from 'react';\nimport { useState, useMemo, useCallback } from 'react';\nimport * as baseui from '../../ui/select';\nimport { Stack } from '../structure';\nimport { Label, Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { cn } from '../../../lib/utils';\nimport { formFieldTriggerClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { DecimalInput } from './decimal-input';\nimport { SelectPopupContent, SelectPopupGroup, SelectPopupItem } from '../choice-inputs';\n\nexport type WeightUnit = 'g' | 'kg' | 'lb' | 'oz';\n\nexport interface WeightInputStrings {\n\t\t/** Above-field label for the unit selector. Empty string hides it. */\n\t\tunitLabel: string;\n\t\t/** Accessible name for the unit selector. */\n\t\tunitAriaLabel: string;\n\t\t/** Placeholder shown in the unit selector. */\n\t\tunitPlaceholder: string;\n}\n\nexport const defaultWeightInputStrings: WeightInputStrings = {\n\t\tunitLabel: '',\n\t\tunitAriaLabel: 'Unit',\n\t\tunitPlaceholder: '',\n};\n\nexport interface WeightInputProps {\n\t\t/** Controlled value */\n\t\tvalue?: string;\n\n\t\t/** Default value for uncontrolled mode */\n\t\tdefaultValue?: string;\n\n\t\t/** Current unit */\n\t\tunit?: WeightUnit;\n\n\t\t/** Default unit for uncontrolled mode */\n\t\tdefaultUnit?: WeightUnit;\n\n\t\t/** Value change handler */\n\t\tonChange?: (e: { target: { value: string } }) => void;\n\n\t\t/** Unit change handler */\n\t\tonUnitChange?: (unit: WeightUnit) => void;\n\n\t\t/** Number of decimal places */\n\t\tdecimalPlaces?: number;\n\n\t\t/** Minimum value */\n\t\tmin?: number;\n\n\t\t/** Maximum value */\n\t\tmax?: number;\n\n\t\t/** Show unit selector */\n\t\tshowUnitSelector?: boolean;\n\n\t\t/** Disable unit selector */\n\t\tdisableUnitSelector?: boolean;\n\n\t\t/** Override default strings (unit selector label + placeholder). */\n\t\tstrings?: StringsProp<WeightInputStrings>;\n\n\t\t/** Width of unit selector */\n\t\tunitWidth?: string;\n\n\t\t/** Error state for styling (passed from FormField) */\n\t\tinvalid?: boolean;\n\n\t\t/** Disabled state */\n\t\tdisabled?: boolean;\n\n\t\t/** Form control size — flows through `useDensityConfig().defaultScale`. */\n\t\tsize?: FormControlSize;\n\n\t\t/** Additional class names */\n\t\tclassName?: string;\n}\n\nconst UNIT_OPTIONS: Array<{ value: WeightUnit; label: string }> = [\n\t\t{ value: 'g', label: 'g' },\n\t\t{ value: 'kg', label: 'kg' },\n\t\t{ value: 'lb', label: 'lb' },\n\t\t{ value: 'oz', label: 'oz' },\n];\n\nexport const WeightInput = React.forwardRef<HTMLDivElement, WeightInputProps>(function WeightInput({\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tunit: controlledUnit,\n\t\tdefaultUnit = 'g',\n\t\tonChange,\n\t\tonUnitChange,\n\t\tdecimalPlaces = 2,\n\t\tmin = 0,\n\t\tmax,\n\t\tshowUnitSelector = true,\n\t\tdisableUnitSelector = false,\n\t\tunitWidth = 'w-24',\n\t\tstrings: stringsProp,\n\t\tinvalid,\n\t\tdisabled = false,\n\t\tsize: sizeProp,\n\t\tclassName,\n}: WeightInputProps, ref) {\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\t\tconst strings = useStrings(defaultWeightInputStrings, stringsProp);\n\t\tconst isValueControlled = controlledValue !== undefined;\n\t\tconst isUnitControlled = controlledUnit !== undefined;\n\n\t\tconst [internalValue, setInternalValue] = useState(defaultValue ?? '');\n\t\tconst [internalUnit, setInternalUnit] = useState<WeightUnit>(controlledUnit ?? defaultUnit);\n\n\t\tconst value = isValueControlled ? controlledValue ?? '' : internalValue;\n\t\tconst unit = isUnitControlled ? controlledUnit ?? defaultUnit : internalUnit;\n\n\t\tconst handleValueChange = useCallback(\n\t\t\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\t\t\tif (!isValueControlled) {\n\t\t\t\t\t\t\t\tsetInternalValue(e.target.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonChange?.({ target: { value: e.target.value } });\n\t\t\t\t},\n\t\t\t\t[isValueControlled, onChange]\n\t\t);\n\n\t\tconst handleUnitChange = useCallback(\n\t\t\t\t(nextUnit: string | null) => {\n\t\t\t\t\t\tif (nextUnit === null) return;\n\t\t\t\t\t\tconst weightUnit = nextUnit as WeightUnit;\n\t\t\t\t\t\tif (!isUnitControlled) {\n\t\t\t\t\t\t\t\tsetInternalUnit(weightUnit);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonUnitChange?.(weightUnit);\n\t\t\t\t},\n\t\t\t\t[isUnitControlled, onUnitChange]\n\t\t);\n\n\t\tconst unitOptions = useMemo(() => UNIT_OPTIONS, []);\n\t\tconst hasUnitLabel = strings.unitLabel !== '';\n\n\t\treturn (\n\t\t\t\t<div ref={ref} className={cn('weight-input--component', 'flex items-start gap-space-md', className)}>\n\t\t\t\t\t\t<div className=\"flex-1\">\n\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\t\t\t\tonChange={handleValueChange}\n\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\tallowNegative={false}\n\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!showUnitSelector && (\n\t\t\t\t<Stack gap=\"md\">\n\t\t\t\t\t\t\t\t\t\t{!!hasUnitLabel && <Label className=\"leading-6\">{strings.unitLabel}</Label>}\n\t\t\t\t\t\t\t\t\t\t<baseui.Select value={unit} onValueChange={(value) => handleUnitChange(value)} disabled={disabled || disableUnitSelector}>\n\t\t\t\t\t\t\t\t<baseui.SelectTrigger\n\t\t\t\t\t\t\t\t\t\taria-label={strings.unitLabel || strings.unitAriaLabel}\n\t\t\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tformFieldTriggerClasses(size),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'!shadow-none',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(disabled || disableUnitSelector) && 'opacity-50 cursor-not-allowed',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tunitWidth\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>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<baseui.SelectValue\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={strings.unitPlaceholder ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{strings.unitPlaceholder}\n\t\t\t\t\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\t\t\t) : undefined}\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</baseui.SelectTrigger>\n\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupContent>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupGroup>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{unitOptions.map((option) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<SelectPopupItem key={option.value} value={option.value} size={size}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\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\t\t\t\t\t</SelectPopupItem>\n\t\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</SelectPopupGroup>\n\t\t\t\t\t\t\t\t\t\t\t\t</SelectPopupContent>\n\t\t\t\t\t\t\t\t\t\t</baseui.Select>\n\t\t\t\t</Stack>\n\t\t\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t);\n});\n\nWeightInput.displayName = 'WeightInput';\n","import * as React from 'react';\nimport { useEffect, useMemo, useState, useCallback } from 'react';\nimport { FormField } from '../forms/form-field';\nimport { Grid, Stack } from '../structure';\nimport { TextLink } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { DecimalInput } from './decimal-input';\n\nexport interface CoordinatesObjectValue {\n\t\tlat?: string;\n\t\tlng?: string;\n}\n\nexport type CoordinatesValue = string | CoordinatesObjectValue;\n\nexport interface CoordinatesInputStrings {\n\t\t/** Above-field label for the latitude input. Empty string hides it. */\n\t\tlatLabel: string;\n\t\t/** Above-field label for the longitude input. Empty string hides it. */\n\t\tlngLabel: string;\n\t\t/** Placeholder shown in the latitude input. */\n\t\tlatPlaceholder: string;\n\t\t/** Placeholder shown in the longitude input. */\n\t\tlngPlaceholder: string;\n\t\t/** Anchor text for the Google Maps preview link. Empty string hides it. */\n\t\tpreviewLinkLabel: string;\n}\n\nexport const defaultCoordinatesInputStrings: CoordinatesInputStrings = {\n\t\tlatLabel: '',\n\t\tlngLabel: '',\n\t\tlatPlaceholder: '',\n\t\tlngPlaceholder: '',\n\t\tpreviewLinkLabel: '',\n};\n\nexport interface CoordinatesInputProps {\n\t\t/** Controlled value */\n\t\tvalue?: CoordinatesValue;\n\n\t\t/** Default value for uncontrolled mode */\n\t\tdefaultValue?: CoordinatesValue;\n\n\t\t/** Output format */\n\t\tformat?: 'string' | 'object';\n\n\t\t/** Change handler */\n\t\tonChange?: (e: { target: { value: CoordinatesValue } }) => void;\n\n\t\t/** Number of decimal places */\n\t\tdecimalPlaces?: number;\n\n\t\t/** Show preview link to Google Maps */\n\t\tshowPreviewLink?: boolean;\n\n\t\t/** Override default strings (labels + placeholders + preview link). */\n\t\tstrings?: StringsProp<CoordinatesInputStrings>;\n\n\t\t/** Error state for styling (passed from FormField) */\n\t\tinvalid?: boolean;\n\n\t\t/** Additional class names */\n\t\tclassName?: string;\n\n\t\t/** Disabled state */\n\t\tdisabled?: boolean;\n}\n\nconst parseValue = (\n\t\tvalue: CoordinatesValue | undefined,\n\t\tformat: 'string' | 'object'\n): { lat: string; lng: string } => {\n\t\tif (!value) {\n\t\t\t\treturn { lat: '', lng: '' };\n\t\t}\n\n\t\tif (format === 'string' && typeof value === 'string') {\n\t\t\t\tconst [lat, lng] = value.split(',').map((part) => part.trim());\n\t\t\t\treturn { lat: lat ?? '', lng: lng ?? '' };\n\t\t}\n\n\t\tif (format === 'object' && typeof value === 'object') {\n\t\t\t\treturn { lat: value.lat ?? '', lng: value.lng ?? '' };\n\t\t}\n\n\t\treturn { lat: '', lng: '' };\n};\n\nconst formatValue = (lat: string, lng: string, format: 'string' | 'object'): CoordinatesValue => {\n\t\tif (format === 'string') {\n\t\t\t\treturn `${lat},${lng}`;\n\t\t}\n\t\treturn { lat, lng };\n};\n\nconst isFiniteNumberInRange = (value: string, min: number, max: number): boolean => {\n\t\tif (!value) return false;\n\t\tconst num = Number(value);\n\t\treturn Number.isFinite(num) && num >= min && num <= max;\n};\n\nexport const CoordinatesInput = React.forwardRef<HTMLDivElement, CoordinatesInputProps>(function CoordinatesInput({\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tformat = 'object',\n\t\tonChange,\n\t\tdecimalPlaces = 6,\n\t\tshowPreviewLink = true,\n\t\tstrings: stringsProp,\n\t\tinvalid,\n\t\tclassName,\n\t\tdisabled,\n}: CoordinatesInputProps, ref) {\n\t\tconst strings = useStrings(defaultCoordinatesInputStrings, stringsProp);\n\t\tconst isControlled = controlledValue !== undefined;\n\n\t\tconst initialParsed = parseValue(isControlled ? controlledValue : defaultValue, format);\n\t\tconst [internalLat, setInternalLat] = useState(initialParsed.lat);\n\t\tconst [internalLng, setInternalLng] = useState(initialParsed.lng);\n\n\t\tconst parsedControlled = parseValue(controlledValue, format);\n\t\tconst lat = isControlled ? parsedControlled.lat : internalLat;\n\t\tconst lng = isControlled ? parsedControlled.lng : internalLng;\n\n\t\tuseEffect(() => {\n\t\t\t\tif (isControlled) {\n\t\t\t\t\t\tsetInternalLat(parsedControlled.lat);\n\t\t\t\t\t\tsetInternalLng(parsedControlled.lng);\n\t\t\t\t}\n\t\t}, [isControlled, parsedControlled.lat, parsedControlled.lng]);\n\n\t\tconst update = useCallback(\n\t\t\t\t(nextLat: string, nextLng: string) => {\n\t\t\t\t\t\tif (!isControlled) {\n\t\t\t\t\t\t\t\tsetInternalLat(nextLat);\n\t\t\t\t\t\t\t\tsetInternalLng(nextLng);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonChange?.({ target: { value: formatValue(nextLat, nextLng, format) } });\n\t\t\t\t},\n\t\t\t\t[isControlled, onChange, format]\n\t\t);\n\n\t\tconst mapUrl = useMemo(() => {\n\t\t\t\tconst hasValidLat = isFiniteNumberInRange(lat, -90, 90);\n\t\t\t\tconst hasValidLng = isFiniteNumberInRange(lng, -180, 180);\n\t\t\t\tif (!hasValidLat || !hasValidLng) return null;\n\t\t\t\treturn `https://www.google.com/maps?q=${encodeURIComponent(`${lat},${lng}`)}`;\n\t\t}, [lat, lng]);\n\n\t\treturn (\n\t\t\t\t<Stack ref={ref} gap=\"lg\" className={cn('coordinates-input--component', className)}>\n\t\t\t\t\t\t<Grid columns={{ base: 1, md: 2 }} gap=\"lg\">\n\t\t\t\t\t\t\t\t<FormField label={strings.latLabel || undefined}>\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={strings.latPlaceholder || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={lat}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => update(e.target.value, lng)}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tallowNegative\n\t\t\t\t\t\t\t\t\t\t\t\tmin={-90}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={90}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\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\t<FormField label={strings.lngLabel || undefined}>\n\t\t\t\t\t\t\t\t\t\t<DecimalInput\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder={strings.lngPlaceholder || undefined}\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={lng}\n\t\t\t\t\t\t\t\t\t\t\t\tonChange={(e) => update(lat, e.target.value)}\n\t\t\t\t\t\t\t\t\t\t\t\tdecimalPlaces={decimalPlaces}\n\t\t\t\t\t\t\t\t\t\t\t\tallowNegative\n\t\t\t\t\t\t\t\t\t\t\t\tmin={-180}\n\t\t\t\t\t\t\t\t\t\t\t\tmax={180}\n\t\t\t\t\t\t\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\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</Grid>\n\n\t\t\t\t\t\t{!!showPreviewLink && !!mapUrl && !!strings.previewLinkLabel && (\n\t\t\t\t\t\t\t\t<TextLink href={mapUrl} type=\"secondary\" underline={false}>\n\t\t\t\t\t\t\t\t\t\t{strings.previewLinkLabel}\n\t\t\t\t\t\t\t\t</TextLink>\n\t\t\t\t\t\t\t)}\n\t\t\t\t</Stack>\n\t\t);\n});\n\nCoordinatesInput.displayName = 'CoordinatesInput';\n"],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "./lib/strings.js";
|
|
3
|
-
import { t } from "./utils-
|
|
4
|
-
import { n } from "./
|
|
5
|
-
import {
|
|
6
|
-
import { t as a } from "./structure-
|
|
7
|
-
import { a as o, d as s, g as c, i as l, o as u, r as d, s as f, t as p } from "./dropdown-menu-
|
|
8
|
-
import { n as m } from "./action-menu-
|
|
3
|
+
import { t } from "./utils-BvH9PSmq.js";
|
|
4
|
+
import { a as n, r } from "./typography-BxQgiZyw.js";
|
|
5
|
+
import { t as i } from "./button-BZDasD04.js";
|
|
6
|
+
import { t as a } from "./structure-CRdqVawd.js";
|
|
7
|
+
import { a as o, d as s, g as c, i as l, o as u, r as d, s as f, t as p } from "./dropdown-menu-D-boNgGO.js";
|
|
8
|
+
import { n as m } from "./action-menu-Drxw_vJk.js";
|
|
9
9
|
import { t as h } from "./initials-format-CDoQEOd_.js";
|
|
10
|
-
import { i as g, n as _, s as v } from "./avatar-
|
|
11
|
-
import { t as y } from "./badge-
|
|
12
|
-
import { t as b } from "./separator-
|
|
13
|
-
import { c as x, o as S, t as C } from "./popover-
|
|
14
|
-
import { t as w } from "./breadcrumbs-
|
|
15
|
-
import { C as T } from "./sidebar-
|
|
16
|
-
import { d as E, t as D } from "./hooks-
|
|
10
|
+
import { i as g, n as _, s as v } from "./avatar-Bu2HhitA.js";
|
|
11
|
+
import { t as y } from "./badge-CzId1Wlm.js";
|
|
12
|
+
import { t as b } from "./separator-BNIgG3au.js";
|
|
13
|
+
import { c as x, o as S, t as C } from "./popover-CghIYdQf.js";
|
|
14
|
+
import { t as w } from "./breadcrumbs-BuYz5SDU.js";
|
|
15
|
+
import { C as T } from "./sidebar-CyR4XKwR.js";
|
|
16
|
+
import { d as E, t as D } from "./hooks-BrlnCwQd.js";
|
|
17
17
|
import * as O from "react";
|
|
18
18
|
import { forwardRef as k, useEffect as A, useState as j } from "react";
|
|
19
19
|
import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
|
|
@@ -113,7 +113,7 @@ function K() {
|
|
|
113
113
|
let e = navigator.userAgentData;
|
|
114
114
|
return e?.platform ? e.platform === "macOS" : /Mac|iPhone|iPad/.test(navigator.platform);
|
|
115
115
|
}
|
|
116
|
-
function q({ onOpen:
|
|
116
|
+
function q({ onOpen: r, shortcutModifier: a, enableShortcut: o = !0, strings: s, className: c, iconClassName: l, shortcutSlot: u }) {
|
|
117
117
|
let d = e(W, s), [f, p] = j(!1);
|
|
118
118
|
A(() => {
|
|
119
119
|
a === void 0 && p(K());
|
|
@@ -122,26 +122,26 @@ function q({ onOpen: i, shortcutModifier: a, enableShortcut: o = !0, strings: s,
|
|
|
122
122
|
D({
|
|
123
123
|
key: "k",
|
|
124
124
|
enabled: o,
|
|
125
|
-
onTrigger:
|
|
125
|
+
onTrigger: r
|
|
126
126
|
});
|
|
127
127
|
let h = m ? d.shortcutMac : d.shortcutPc, g = u ?? /* @__PURE__ */ N("kbd", {
|
|
128
|
-
className: "header-search--shortcut hidden h-5 shrink-0 items-center gap-space-sm rounded-
|
|
129
|
-
children: /* @__PURE__ */ N(
|
|
128
|
+
className: "header-search--shortcut hidden h-5 shrink-0 items-center gap-space-sm rounded-inner border border-border/70 bg-background/60 px-space-sm font-mono text-xs text-muted-foreground lg:inline-flex",
|
|
129
|
+
children: /* @__PURE__ */ N(n, {
|
|
130
130
|
tag: "span",
|
|
131
131
|
size: "xs",
|
|
132
132
|
type: "secondary",
|
|
133
133
|
children: m ? d.shortcutMac : d.shortcutPc
|
|
134
134
|
})
|
|
135
135
|
});
|
|
136
|
-
return /* @__PURE__ */ P(
|
|
136
|
+
return /* @__PURE__ */ P(i, {
|
|
137
137
|
"data-component": "header-search",
|
|
138
138
|
"data-slot": "header-search-trigger",
|
|
139
139
|
type: "button",
|
|
140
140
|
"aria-label": d.placeholder,
|
|
141
141
|
tone: "secondary",
|
|
142
142
|
buttonStyle: "outline",
|
|
143
|
-
onClick:
|
|
144
|
-
className: t("header-search--component header-search--trigger h-action-sm w-full min-w-
|
|
143
|
+
onClick: r,
|
|
144
|
+
className: t("header-search--component header-search--trigger h-action-sm w-full min-w-0 justify-start gap-space-md rounded-inner border-border/80 bg-muted/40 px-control-sm text-foreground shadow-none transition-[background-color,border-color,color,box-shadow] hover:border-border hover:bg-muted/60 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background dark:border-border/80 dark:bg-muted dark:hover:bg-muted/60 dark:hover:text-foreground", c),
|
|
145
145
|
title: h,
|
|
146
146
|
children: [
|
|
147
147
|
/* @__PURE__ */ N(R, {
|
|
@@ -149,12 +149,12 @@ function q({ onOpen: i, shortcutModifier: a, enableShortcut: o = !0, strings: s,
|
|
|
149
149
|
className: t("header-search--icon size-icon shrink-0 text-muted-foreground", l),
|
|
150
150
|
"aria-hidden": "true"
|
|
151
151
|
}),
|
|
152
|
-
/* @__PURE__ */ N(
|
|
152
|
+
/* @__PURE__ */ N(n, {
|
|
153
153
|
tag: "span",
|
|
154
154
|
size: "inherit",
|
|
155
155
|
type: "secondary",
|
|
156
156
|
"data-slot": "header-search-placeholder",
|
|
157
|
-
className: "header-search--placeholder flex-1 text-left",
|
|
157
|
+
className: "header-search--placeholder min-w-0 flex-1 truncate text-left",
|
|
158
158
|
children: d.placeholder
|
|
159
159
|
}),
|
|
160
160
|
g
|
|
@@ -173,7 +173,7 @@ function J({ onOpen: e, onOpenChange: t, ...n }) {
|
|
|
173
173
|
}
|
|
174
174
|
//#endregion
|
|
175
175
|
//#region src/components/layout/header/partials/header-tool-button.tsx
|
|
176
|
-
var Y = O.forwardRef(({ label: e, icon:
|
|
176
|
+
var Y = O.forwardRef(({ label: e, icon: r, active: a = !1, disabled: o = !1, badge: s, onClick: c, className: l, iconClassName: u }, d) => /* @__PURE__ */ P(i, {
|
|
177
177
|
ref: d,
|
|
178
178
|
"data-component": "header-tool-button",
|
|
179
179
|
"data-slot": "header-tool-button",
|
|
@@ -187,14 +187,14 @@ var Y = O.forwardRef(({ label: e, icon: i, active: a = !1, disabled: o = !1, bad
|
|
|
187
187
|
title: e,
|
|
188
188
|
disabled: o,
|
|
189
189
|
onClick: c,
|
|
190
|
-
className: t("header-tool-button--component header-tool-button--trigger relative size-action-sm rounded-
|
|
190
|
+
className: t("header-tool-button--component header-tool-button--trigger relative size-action-sm rounded-inner text-foreground transition-[background-color,color,box-shadow] hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background", a && "bg-accent text-accent-foreground", l),
|
|
191
191
|
children: [
|
|
192
|
-
/* @__PURE__ */ N(
|
|
192
|
+
/* @__PURE__ */ N(r, {
|
|
193
193
|
"data-slot": "header-tool-icon",
|
|
194
194
|
className: t("header-tool-button--icon size-icon", u),
|
|
195
195
|
"aria-hidden": "true"
|
|
196
196
|
}),
|
|
197
|
-
!!s && /* @__PURE__ */ N(
|
|
197
|
+
!!s && /* @__PURE__ */ N(n, {
|
|
198
198
|
tag: "span",
|
|
199
199
|
size: "xs",
|
|
200
200
|
weight: "medium",
|
|
@@ -203,7 +203,7 @@ var Y = O.forwardRef(({ label: e, icon: i, active: a = !1, disabled: o = !1, bad
|
|
|
203
203
|
className: "header-tool-button--badge absolute right-space-xs top-space-xs flex min-h-space-lg min-w-space-lg items-center justify-center rounded-full bg-destructive px-space-2xs text-destructive-foreground",
|
|
204
204
|
children: s
|
|
205
205
|
}),
|
|
206
|
-
/* @__PURE__ */ N(
|
|
206
|
+
/* @__PURE__ */ N(n, {
|
|
207
207
|
tag: "span",
|
|
208
208
|
size: "inherit",
|
|
209
209
|
className: "sr-only",
|
|
@@ -242,8 +242,8 @@ function X({ label: e, icon: n, open: r, defaultOpen: i, onOpenChange: a, active
|
|
|
242
242
|
}
|
|
243
243
|
//#endregion
|
|
244
244
|
//#region src/components/layout/header/partials/header-user-menu.tsx
|
|
245
|
-
function Z({ user:
|
|
246
|
-
let w = e(G, b), T = h(
|
|
245
|
+
function Z({ user: r, showEmail: a = !0, customContent: o, onProfile: s, onSettings: l, onLogout: u, align: f = "end", side: y = "bottom", strings: b, triggerClassName: x, contentClassName: S, renderTrigger: C }) {
|
|
246
|
+
let w = e(G, b), T = h(r.name, { strategy: "first-words" }), E = [
|
|
247
247
|
...s ? [{
|
|
248
248
|
id: "profile",
|
|
249
249
|
label: w.profile,
|
|
@@ -263,37 +263,41 @@ function Z({ user: i, showEmail: a = !0, customContent: o, onProfile: s, onSetti
|
|
|
263
263
|
onClick: u,
|
|
264
264
|
...s || l ? { group: !0 } : null
|
|
265
265
|
}] : []
|
|
266
|
-
], D = C?.(
|
|
266
|
+
], D = C?.(r) ?? /* @__PURE__ */ P(i, {
|
|
267
267
|
"data-component": "header-user-menu",
|
|
268
268
|
"data-slot": "header-user-menu-trigger",
|
|
269
269
|
type: "button",
|
|
270
|
+
"aria-label": r.name,
|
|
270
271
|
tone: "secondary",
|
|
271
272
|
buttonStyle: "ghost",
|
|
272
|
-
|
|
273
|
+
size: "lg",
|
|
274
|
+
className: t("header-user-menu--component header-user-menu--trigger group min-w-0 max-w-56 justify-start gap-space-md text-foreground shadow-none hover:bg-accent hover:text-accent-foreground data-[state=open]:bg-accent max-sm:size-action-lg max-sm:justify-center max-sm:p-0 max-sm:[&_.header-user-menu--identity]:hidden max-sm:[&_.header-user-menu--chevron]:hidden", x),
|
|
273
275
|
children: [
|
|
274
276
|
/* @__PURE__ */ P(_, {
|
|
275
277
|
"data-slot": "header-user-avatar",
|
|
276
278
|
className: "header-user-menu--avatar size-avatar-sm overflow-hidden rounded-full ring-1 ring-border",
|
|
277
|
-
children: [!!
|
|
278
|
-
src:
|
|
279
|
-
alt:
|
|
279
|
+
children: [!!r.avatar && /* @__PURE__ */ N(v, {
|
|
280
|
+
src: r.avatar,
|
|
281
|
+
alt: r.name
|
|
280
282
|
}), /* @__PURE__ */ N(g, {
|
|
281
|
-
className: "rounded-
|
|
283
|
+
className: "rounded-full bg-muted text-xs font-semibold text-muted-foreground",
|
|
282
284
|
children: T
|
|
283
285
|
})]
|
|
284
286
|
}),
|
|
285
287
|
/* @__PURE__ */ P("div", {
|
|
286
288
|
"data-slot": "header-user-identity",
|
|
287
289
|
className: "header-user-menu--identity grid min-w-0 flex-1 gap-dense text-start leading-none",
|
|
288
|
-
children: [/* @__PURE__ */ N(
|
|
290
|
+
children: [/* @__PURE__ */ N(n, {
|
|
289
291
|
weight: "medium",
|
|
292
|
+
lineHeight: "tight",
|
|
290
293
|
className: "truncate",
|
|
291
|
-
children:
|
|
292
|
-
}), !!a && !!
|
|
294
|
+
children: r.name
|
|
295
|
+
}), !!a && !!r.email && /* @__PURE__ */ N(n, {
|
|
293
296
|
size: "xs",
|
|
294
297
|
type: "secondary",
|
|
298
|
+
lineHeight: "tight",
|
|
295
299
|
className: "truncate",
|
|
296
|
-
children:
|
|
300
|
+
children: r.email
|
|
297
301
|
})]
|
|
298
302
|
}),
|
|
299
303
|
/* @__PURE__ */ N(I, {
|
|
@@ -329,7 +333,7 @@ var Q = {
|
|
|
329
333
|
};
|
|
330
334
|
function $({ notifications: m = [], unreadCount: h = 0, onNotificationClick: g, onMarkAllRead: _, onViewAll: v, viewAllHref: b, renderLink: x, align: S = "end", side: C = "bottom", strings: w, className: T, contentClassName: D, renderNotification: O }) {
|
|
331
335
|
let k = e(U, w), A = E({ renderLink: x }), j = h > 99 ? "99+" : String(h);
|
|
332
|
-
return /* @__PURE__ */ P(p, { children: [/* @__PURE__ */ N(c, { render: /* @__PURE__ */ P(
|
|
336
|
+
return /* @__PURE__ */ P(p, { children: [/* @__PURE__ */ N(c, { render: /* @__PURE__ */ P(i, {
|
|
333
337
|
"data-component": "header-notifications",
|
|
334
338
|
"data-slot": "header-notifications-trigger",
|
|
335
339
|
tone: "secondary",
|
|
@@ -356,7 +360,7 @@ function $({ notifications: m = [], unreadCount: h = 0, onNotificationClick: g,
|
|
|
356
360
|
/* @__PURE__ */ P(u, {
|
|
357
361
|
"aria-hidden": !1,
|
|
358
362
|
className: "header-notifications--label flex items-center justify-between gap-space-lg",
|
|
359
|
-
children: [/* @__PURE__ */ N(
|
|
363
|
+
children: [/* @__PURE__ */ N(r, { children: k.heading }), h > 0 && !!_ && /* @__PURE__ */ N(i, {
|
|
360
364
|
type: "button",
|
|
361
365
|
tone: "secondary",
|
|
362
366
|
buttonStyle: "ghost",
|
|
@@ -369,7 +373,7 @@ function $({ notifications: m = [], unreadCount: h = 0, onNotificationClick: g,
|
|
|
369
373
|
/* @__PURE__ */ N(s, {}),
|
|
370
374
|
m.length === 0 ? /* @__PURE__ */ N("div", {
|
|
371
375
|
className: "header-notifications--empty p-surface text-center",
|
|
372
|
-
children: /* @__PURE__ */ N(
|
|
376
|
+
children: /* @__PURE__ */ N(n, {
|
|
373
377
|
type: "secondary",
|
|
374
378
|
children: k.empty
|
|
375
379
|
})
|
|
@@ -397,7 +401,7 @@ function $({ notifications: m = [], unreadCount: h = 0, onNotificationClick: g,
|
|
|
397
401
|
})] })]
|
|
398
402
|
})] });
|
|
399
403
|
}
|
|
400
|
-
function ee({ notification: e, onClick:
|
|
404
|
+
function ee({ notification: e, onClick: r, renderLink: i, renderNotification: s }) {
|
|
401
405
|
if (s) return s(e);
|
|
402
406
|
let c = /* @__PURE__ */ P(a, {
|
|
403
407
|
direction: "horizontal",
|
|
@@ -413,16 +417,16 @@ function ee({ notification: e, onClick: n, renderLink: i, renderNotification: s
|
|
|
413
417
|
gap: "dense",
|
|
414
418
|
className: "min-w-0",
|
|
415
419
|
children: [
|
|
416
|
-
/* @__PURE__ */ N(
|
|
420
|
+
/* @__PURE__ */ N(n, {
|
|
417
421
|
weight: "medium",
|
|
418
422
|
children: e.title
|
|
419
423
|
}),
|
|
420
|
-
!!e.description && /* @__PURE__ */ N(
|
|
424
|
+
!!e.description && /* @__PURE__ */ N(n, {
|
|
421
425
|
size: "xs",
|
|
422
426
|
type: "secondary",
|
|
423
427
|
children: e.description
|
|
424
428
|
}),
|
|
425
|
-
!!e.time && /* @__PURE__ */ N(
|
|
429
|
+
!!e.time && /* @__PURE__ */ N(n, {
|
|
426
430
|
size: "xs",
|
|
427
431
|
type: "secondary",
|
|
428
432
|
children: e.time
|
|
@@ -433,7 +437,7 @@ function ee({ notification: e, onClick: n, renderLink: i, renderNotification: s
|
|
|
433
437
|
return e.href ? /* @__PURE__ */ N(f, {
|
|
434
438
|
href: e.href,
|
|
435
439
|
className: l,
|
|
436
|
-
onClick: () =>
|
|
440
|
+
onClick: () => r?.(e),
|
|
437
441
|
render: (t) => i({
|
|
438
442
|
...t,
|
|
439
443
|
href: e.href,
|
|
@@ -441,7 +445,7 @@ function ee({ notification: e, onClick: n, renderLink: i, renderNotification: s
|
|
|
441
445
|
}),
|
|
442
446
|
children: c
|
|
443
447
|
}) : /* @__PURE__ */ N(o, {
|
|
444
|
-
onClick: () =>
|
|
448
|
+
onClick: () => r?.(e),
|
|
445
449
|
className: l,
|
|
446
450
|
children: c
|
|
447
451
|
});
|
|
@@ -449,4 +453,4 @@ function ee({ notification: e, onClick: n, renderLink: i, renderNotification: s
|
|
|
449
453
|
//#endregion
|
|
450
454
|
export { J as a, W as c, V as d, Y as i, G as l, Z as n, q as o, X as r, U as s, $ as t, H as u };
|
|
451
455
|
|
|
452
|
-
//# sourceMappingURL=header-
|
|
456
|
+
//# sourceMappingURL=header-kxruN3RM.js.map
|