themelia-react-ui 2.0.6 → 3.0.0
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 +250 -0
- package/MIGRATION.md +746 -7
- package/README.md +27 -23
- package/dist/{accordion-0tQUZ20r.js → accordion-DNVqwEIC.js} +36 -36
- package/dist/accordion-DNVqwEIC.js.map +1 -0
- package/dist/action-menu-D5343RwT.js +286 -0
- package/dist/action-menu-D5343RwT.js.map +1 -0
- package/dist/ai-artifact-otrz9ZwS.js +1214 -0
- package/dist/ai-artifact-otrz9ZwS.js.map +1 -0
- package/dist/anchored-positioning-1U_eBFNx.js +9 -0
- package/dist/anchored-positioning-1U_eBFNx.js.map +1 -0
- package/dist/app-shell-CPN30Nb1.js +372 -0
- package/dist/app-shell-CPN30Nb1.js.map +1 -0
- package/dist/{attachment-BCpA4e7i.js → attachment-D2-fpfmv.js} +15 -15
- package/dist/{attachment-BCpA4e7i.js.map → attachment-D2-fpfmv.js.map} +1 -1
- package/dist/{auth-B0girIk_.js → auth-g_oUTDDC.js} +234 -241
- package/dist/auth-g_oUTDDC.js.map +1 -0
- package/dist/{avatar-B9Jnp-T-.js → avatar-Ca3Ihrq4.js} +4 -4
- package/dist/{avatar-B9Jnp-T-.js.map → avatar-Ca3Ihrq4.js.map} +1 -1
- package/dist/{badge-wWauMgAt.js → badge-oGiXblW7.js} +8 -9
- package/dist/badge-oGiXblW7.js.map +1 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +2 -2
- package/dist/base/cards.js +3 -3
- package/dist/base/carousel.js +11 -11
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +7 -7
- package/dist/base/feedback.js +4 -4
- package/dist/base/forms-numeric.js +2 -2
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +13 -13
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +203 -2
- package/dist/base/media-gallery.js.map +1 -0
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +32 -22
- package/dist/base/qr-code.js.map +1 -1
- package/dist/base/repeaters.js +91 -88
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +14 -14
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +6 -12
- package/dist/base/spinner.js.map +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +3 -3
- package/dist/base/toaster.js +2 -2
- package/dist/base/tree.js +2 -2
- package/dist/base/upload-queue.js +303 -2
- package/dist/base/upload-queue.js.map +1 -0
- package/dist/base/upload.js +3 -4
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-BoqWIIpV.js → batch-action-bar-D6MZQNnC.js} +10 -10
- package/dist/{batch-action-bar-BoqWIIpV.js.map → batch-action-bar-D6MZQNnC.js.map} +1 -1
- package/dist/blocks/admin.js +242 -228
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +395 -357
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/charts.js +1022 -0
- package/dist/blocks/analytics/charts.js.map +1 -0
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +171 -1365
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +1487 -1358
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -3
- package/dist/blocks/onboarding.js +91 -82
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +25 -25
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +2 -2
- package/dist/{breadcrumbs-Bp9Ke7kd.js → breadcrumbs-CQ9JSlez.js} +52 -45
- package/dist/breadcrumbs-CQ9JSlez.js.map +1 -0
- package/dist/{button-ChBovTx0.js → button-rd6FiHfQ.js} +12 -8
- package/dist/button-rd6FiHfQ.js.map +1 -0
- package/dist/{buttons-DeW0bQeK.js → buttons-pZVgPTZn.js} +230 -246
- package/dist/buttons-pZVgPTZn.js.map +1 -0
- package/dist/{cards-CNXnmvV5.js → cards-CgWyqvgZ.js} +25 -22
- package/dist/{cards-CNXnmvV5.js.map → cards-CgWyqvgZ.js.map} +1 -1
- package/dist/cascader-Cf05pwaq.js +444 -0
- package/dist/cascader-Cf05pwaq.js.map +1 -0
- package/dist/{chart-I7ROnsl8.js → chart-CygRCyIZ.js} +5 -5
- package/dist/{chart-I7ROnsl8.js.map → chart-CygRCyIZ.js.map} +1 -1
- package/dist/{checkbox-MoyHIAPs.js → checkbox-Dy5_XBMZ.js} +4 -4
- package/dist/{checkbox-MoyHIAPs.js.map → checkbox-Dy5_XBMZ.js.map} +1 -1
- package/dist/{choice-inputs-DHGtx0QV.js → choice-inputs-oJEsrb5Y.js} +113 -114
- package/dist/choice-inputs-oJEsrb5Y.js.map +1 -0
- package/dist/{code-block-BSJyq9e-.js → code-block-BrLD7mCi.js} +44 -60
- package/dist/code-block-BrLD7mCi.js.map +1 -0
- package/dist/collapsible-CRCCg_bO.js +80 -0
- package/dist/collapsible-CRCCg_bO.js.map +1 -0
- package/dist/{collection-content-CSnwtOTH.js → collection-content-D7SoDlYd.js} +3 -3
- package/dist/{collection-content-CSnwtOTH.js.map → collection-content-D7SoDlYd.js.map} +1 -1
- package/dist/combobox-Dl6f6kHz.js +362 -0
- package/dist/combobox-Dl6f6kHz.js.map +1 -0
- package/dist/combobox-DrDXtSSt.js +929 -0
- package/dist/combobox-DrDXtSSt.js.map +1 -0
- package/dist/command-CjZ2VzKC.js +432 -0
- package/dist/command-CjZ2VzKC.js.map +1 -0
- package/dist/comments-C2MZyRmh.js +1214 -0
- package/dist/comments-C2MZyRmh.js.map +1 -0
- package/dist/components/base/accordion/accordion.d.ts +11 -3
- package/dist/components/base/action-menu/action-menu.d.ts +11 -3
- package/dist/components/base/buttons/button.d.ts +2 -2
- package/dist/components/base/buttons/index.d.ts +1 -1
- package/dist/components/base/buttons/loader-button.d.ts +6 -15
- package/dist/components/base/cards/index.d.ts +1 -1
- package/dist/components/base/cards/partials/card-body-context.d.ts +6 -0
- package/dist/components/base/cards/smart-card.d.ts +0 -2
- package/dist/components/base/cards/smart-card.types.d.ts +12 -10
- package/dist/components/base/cascader/cascader.d.ts +8 -2
- package/dist/components/base/cascader/cascader.types.d.ts +24 -2
- package/dist/components/base/cascader/index.d.ts +1 -1
- package/dist/components/base/choice-inputs/switch.d.ts +1 -1
- package/dist/components/base/code-block/use-code-copy.d.ts +2 -6
- package/dist/components/base/command/command.d.ts +1 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +1 -3
- package/dist/components/base/display/dialog.d.ts +3 -9
- package/dist/components/base/display/index.d.ts +2 -3
- package/dist/components/base/display/separator.d.ts +1 -1
- package/dist/components/base/feedback/alert.d.ts +2 -1
- package/dist/components/base/feedback/empty.d.ts +10 -2
- package/dist/components/base/forms/workflow.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +9 -17
- package/dist/components/base/forms-numeric/index.d.ts +3 -3
- package/dist/components/base/item/item.types.d.ts +6 -2
- package/dist/components/base/metadata-list/index.d.ts +1 -3
- package/dist/components/base/metadata-list/metadata-list.d.ts +4 -1
- package/dist/components/base/navigation/index.d.ts +2 -2
- package/dist/components/base/navigation/language-switcher.d.ts +7 -6
- package/dist/components/base/navigation/navigation-tabs.d.ts +8 -1
- package/dist/components/base/navigation/page-header/index.d.ts +1 -1
- package/dist/components/base/navigation/page-header/page-header.d.ts +13 -17
- package/dist/components/base/navigation/pagination.d.ts +5 -5
- package/dist/components/base/popover/popover.recipes.d.ts +0 -1
- package/dist/components/base/qr-code/qr-code.d.ts +4 -0
- package/dist/components/base/repeaters/index.d.ts +1 -1
- package/dist/components/base/repeaters/key-value-editor.d.ts +4 -0
- package/dist/components/base/sheet/sheet.d.ts +6 -15
- package/dist/components/base/sidebar/index.d.ts +1 -6
- package/dist/components/base/sidebar/sidebar.d.ts +38 -10
- package/dist/components/base/skeleton/skeleton.d.ts +1 -1
- package/dist/components/base/structure/structure.types.d.ts +11 -2
- package/dist/components/base/text-inputs/index.d.ts +1 -1
- package/dist/components/base/tree/index.d.ts +1 -0
- package/dist/components/base/tree/tree.d.ts +2 -2
- package/dist/components/base/tree/tree.types.d.ts +7 -1
- package/dist/components/base/upload/file-upload.validation.d.ts +37 -1
- package/dist/components/base/upload/image-upload.d.ts +2 -0
- package/dist/components/base/upload/index.d.ts +3 -9
- package/dist/components/base/value-inputs/date-time-input.d.ts +4 -0
- package/dist/components/base/value-inputs/slider.d.ts +5 -2
- package/dist/components/blocks/admin/action-surfaces/index.d.ts +17 -4
- package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +9 -3
- package/dist/components/blocks/admin/index.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/ai-artifact.d.ts +1 -1
- package/dist/components/blocks/ai/ai-artifact/types.d.ts +9 -4
- package/dist/components/blocks/ai/ai-chain-of-thought/ai-chain-of-thought.d.ts +1 -1
- package/dist/components/blocks/ai/ai-chain-of-thought/types.d.ts +11 -1
- package/dist/components/blocks/ai/ai-citation/ai-citation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-citation/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai-confirmation/ai-confirmation.d.ts +1 -1
- package/dist/components/blocks/ai/ai-confirmation/types.d.ts +21 -5
- package/dist/components/blocks/ai/ai-feedback/types.d.ts +7 -2
- package/dist/components/blocks/ai/ai-inline-citation/types.d.ts +9 -3
- package/dist/components/blocks/ai/ai-package-info/ai-package-info.d.ts +1 -1
- package/dist/components/blocks/ai/ai-package-info/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai-sources/ai-sources.d.ts +1 -1
- package/dist/components/blocks/ai/ai-sources/types.d.ts +8 -2
- package/dist/components/blocks/ai/ai-task/ai-task.d.ts +1 -1
- package/dist/components/blocks/ai/ai-task/types.d.ts +10 -1
- package/dist/components/blocks/ai/ai-tool-call/ai-tool-call.d.ts +1 -1
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +6 -0
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/activity-heatmap/types.d.ts +1 -1
- package/dist/components/blocks/analytics/analytics.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/atoms/metric-trend-chip.d.ts +11 -1
- package/dist/components/blocks/analytics/chart-card/chart-card.d.ts +7 -5
- package/dist/components/blocks/analytics/charts/index.d.ts +27 -0
- package/dist/components/blocks/analytics/index.d.ts +17 -24
- package/dist/components/blocks/analytics/metric/metric.d.ts +5 -5
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +2 -2
- package/dist/components/blocks/analytics/types.d.ts +12 -3
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +5 -16
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +2 -2
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +6 -4
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +0 -2
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +9 -11
- package/dist/components/blocks/commerce/coupon-input/coupon-input.d.ts +1 -1
- package/dist/components/blocks/commerce/coupon-input/types.d.ts +7 -3
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +0 -2
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +4 -6
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +2 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-balance.d.ts +18 -0
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-compact.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-copy-button.d.ts +0 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-dark.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-full.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-illustrated.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/partials/giftcard-minimal.d.ts +1 -1
- package/dist/components/blocks/commerce/giftcard-card/types.d.ts +16 -5
- package/dist/components/blocks/commerce/index.d.ts +8 -8
- package/dist/components/blocks/commerce/inventory-level/inventory-level.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/inventory-level/types.d.ts +1 -1
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +0 -5
- package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +6 -3
- package/dist/components/blocks/commerce/loyalty-points/loyalty-points.d.ts +1 -1
- package/dist/components/blocks/commerce/loyalty-points/types.d.ts +11 -5
- package/dist/components/blocks/commerce/order-status/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/order-status/types.d.ts +8 -8
- package/dist/components/blocks/commerce/order-timeline/order-timeline.d.ts +1 -1
- package/dist/components/blocks/commerce/order-timeline/types.d.ts +3 -1
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +0 -8
- package/dist/components/blocks/commerce/payment-method/types.d.ts +0 -2
- package/dist/components/blocks/commerce/receipt/index.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/receipt-items.d.ts +1 -1
- package/dist/components/blocks/commerce/receipt/types.d.ts +10 -0
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +0 -2
- package/dist/components/blocks/commerce/refund-status/types.d.ts +0 -2
- package/dist/components/blocks/commerce/seo-listing/types.d.ts +7 -0
- package/dist/components/blocks/commerce/shared/code-entry.d.ts +39 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/subscription-summary.d.ts +1 -1
- package/dist/components/blocks/commerce/subscription-summary/types.d.ts +10 -1
- package/dist/components/blocks/commerce/upcoming-booking/index.d.ts +2 -1
- package/dist/components/blocks/commerce/upcoming-booking/types.d.ts +8 -0
- package/dist/components/blocks/commerce/upcoming-booking/upcoming-booking.d.ts +2 -2
- package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -5
- package/dist/components/blocks/commerce/voucher-entry/types.d.ts +6 -3
- package/dist/components/blocks/commerce/voucher-entry/voucher-entry.d.ts +1 -1
- package/dist/components/blocks/content-block-hooks.d.ts +22 -0
- package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +5 -1
- package/dist/components/blocks/data-display/dense-info-card/helpers.d.ts +3 -1
- package/dist/components/blocks/data-display/dense-info-card/index.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-classification.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-dashboard.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-financial.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-project.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/partials/dense-info-score.d.ts +1 -1
- package/dist/components/blocks/data-display/dense-info-card/types.d.ts +12 -5
- package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +6 -0
- package/dist/components/blocks/data-display/index.d.ts +0 -1
- package/dist/components/blocks/data-display/relationship-card-frame.d.ts +1 -1
- package/dist/components/blocks/onboarding/checklist/checklist.types.d.ts +5 -3
- package/dist/components/blocks/planning/task-card.types.d.ts +7 -3
- package/dist/components/blocks/timelines/changelog/types.d.ts +2 -2
- package/dist/components/blocks/timelines/index.d.ts +2 -2
- package/dist/components/blocks/timelines/milestones/types.d.ts +2 -2
- package/dist/components/blocks/timelines/shared/timeline.d.ts +6 -0
- package/dist/components/blocks/timelines/steps-card/index.d.ts +2 -1
- package/dist/components/blocks/timelines/steps-card/steps-card.d.ts +2 -2
- package/dist/components/blocks/timelines/steps-card/types.d.ts +13 -1
- package/dist/components/features/activities/activities.strings.d.ts +5 -3
- package/dist/components/features/activities/activities.types.d.ts +28 -11
- package/dist/components/features/activities/hooks/use-activity-feed.d.ts +6 -0
- package/dist/components/features/activities/index.d.ts +1 -1
- package/dist/components/features/activities/partials/activity-headline.d.ts +5 -0
- package/dist/components/features/activities/partials/activity-row.d.ts +12 -13
- package/dist/components/features/activities/partials/row-layers.d.ts +7 -0
- package/dist/components/features/activities/relative-time.d.ts +18 -0
- package/dist/components/features/ai-chat/ai-chat.d.ts +6 -2
- package/dist/components/features/ai-chat/ai-chat.strings.d.ts +41 -2
- package/dist/components/features/ai-chat/ai-chat.types.d.ts +6 -0
- package/dist/components/features/ai-chat/partials/ai-chat-attachments-strip.d.ts +5 -1
- package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts +2 -2
- package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts +3 -1
- package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts +6 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +19 -5
- package/dist/components/features/appointment-calendar/index.d.ts +1 -1
- package/dist/components/features/appointment-calendar/partials/appointment-agenda.d.ts +18 -10
- package/dist/components/features/async-preview/async-preview.d.ts +2 -2
- package/dist/components/features/async-preview/async-preview.types.d.ts +30 -1
- package/dist/components/features/async-preview/preview-trigger-cell.d.ts +7 -2
- package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
- package/dist/components/features/combobox/combobox.d.ts +12 -3
- package/dist/components/features/combobox/components/error-message.d.ts +3 -1
- package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -2
- package/dist/components/features/combobox/index.d.ts +1 -1
- package/dist/components/features/combobox/types.d.ts +47 -45
- package/dist/components/features/comments/comments.strings.d.ts +6 -5
- package/dist/components/features/comments/comments.types.d.ts +40 -26
- package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +5 -1
- package/dist/components/features/comments/hooks/use-comments.d.ts +8 -1
- package/dist/components/features/data-view/data-view.strings.d.ts +9 -2
- package/dist/components/features/data-view/data-view.types.d.ts +15 -2
- package/dist/components/features/email-composer/email-html.d.ts +5 -0
- package/dist/components/features/email-composer/http.d.ts +2 -0
- package/dist/components/features/email-composer/strings.d.ts +17 -2
- package/dist/components/features/email-composer/types.d.ts +17 -2
- package/dist/components/features/email-composer/use-composer.d.ts +2 -78
- package/dist/components/features/event-calendar/event-calendar-day-cell.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-event-badge.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-header.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar-legend.d.ts +2 -2
- package/dist/components/features/event-calendar/event-calendar.d.ts +1 -1
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +126 -21
- package/dist/components/features/filters/facets/range-facet.d.ts +13 -8
- package/dist/components/features/filters/filter-context.d.ts +9 -0
- package/dist/components/features/filters/filters.strings.d.ts +36 -3
- package/dist/components/features/filters/filters.types.d.ts +72 -5
- package/dist/components/features/filters/hooks/use-filter-draft.d.ts +1 -0
- package/dist/components/features/filters/index.d.ts +2 -2
- package/dist/components/features/filters/operator-options.d.ts +25 -2
- package/dist/components/features/filters/partials/active-filter-item.d.ts +0 -13
- package/dist/components/features/filters/partials/async-options-status.d.ts +32 -0
- package/dist/components/features/filters/partials/filter-draft-footer.d.ts +11 -0
- package/dist/components/features/filters/partials/filter-operator-select.d.ts +4 -2
- package/dist/components/features/filters/partials/filter-pill.d.ts +5 -1
- package/dist/components/features/filters/partials/filter-tabs.d.ts +2 -1
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +1 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +29 -4
- package/dist/components/features/global-search/global-search-dialog.d.ts +7 -1
- package/dist/components/features/global-search/global-search.d.ts +7 -1
- package/dist/components/features/global-search/global-search.strings.d.ts +19 -3
- package/dist/components/features/global-search/global-search.types.d.ts +30 -6
- package/dist/components/features/global-search/index.d.ts +1 -1
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +6 -1
- package/dist/components/features/global-search/partials/global-search-input.d.ts +2 -0
- package/dist/components/features/kanban/index.d.ts +2 -2
- package/dist/components/features/kanban/kanban-context.d.ts +4 -0
- package/dist/components/features/kanban/kanban-keyboard.d.ts +7 -2
- package/dist/components/features/kanban/kanban.d.ts +10 -1
- package/dist/components/features/kanban/kanban.strings.d.ts +11 -2
- package/dist/components/features/kanban/kanban.types.d.ts +26 -0
- package/dist/components/features/map/map.d.ts +4 -0
- package/dist/components/features/map/place-autocomplete.d.ts +10 -1
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +3 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +33 -3
- package/dist/components/features/media-library/media-library.types.d.ts +47 -2
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- package/dist/components/features/mentions/hooks/use-mentions-search.d.ts +7 -0
- package/dist/components/features/mentions/index.d.ts +1 -1
- package/dist/components/features/mentions/mentions.strings.d.ts +10 -2
- package/dist/components/features/mentions/partials/mention-chip.d.ts +1 -0
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +8 -1
- package/dist/components/features/mentions/partials/mention-picker.d.ts +8 -1
- package/dist/components/features/mentions/partials/mention-search-error.d.ts +6 -0
- package/dist/components/features/mentions/utils/index.d.ts +0 -1
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/index.d.ts +2 -2
- package/dist/components/features/overlays/overlays.strings.d.ts +2 -1
- package/dist/components/features/overlays/overlays.types.d.ts +27 -10
- package/dist/components/features/products/components/index.d.ts +0 -10
- package/dist/components/features/products/components/product-contract-overview.d.ts +1 -1
- package/dist/components/features/products/components/product-details-card.d.ts +1 -1
- package/dist/components/features/products/components/product-operations-card.d.ts +1 -1
- package/dist/components/features/products/components/product-option-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-options-summary.d.ts +1 -1
- package/dist/components/features/products/components/product-policies-card.d.ts +1 -1
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +1 -1
- package/dist/components/features/products/components/product-readiness-card.d.ts +1 -1
- package/dist/components/features/products/components/product-structure-card.d.ts +1 -1
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-table.d.ts +1 -1
- package/dist/components/features/products/partials/product-surface.d.ts +15 -0
- package/dist/components/features/products/products.strings.d.ts +8 -0
- package/dist/components/features/products/products.types.d.ts +25 -7
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +6 -4
- package/dist/components/features/resource/index.d.ts +2 -3
- package/dist/components/features/resource/resource.d.ts +2 -10
- package/dist/components/features/resource/resource.types.d.ts +7 -149
- package/dist/components/features/resource-assignment/partials/assignment-surface.d.ts +15 -0
- package/dist/components/features/resource-assignment/resource-assignment.strings.d.ts +6 -1
- package/dist/components/features/resource-assignment/resource-assignment.types.d.ts +6 -0
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +5 -7
- package/dist/components/features/rich-text-editor/partials/html-helpers.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +6 -2
- package/dist/components/features/rich-text-editor/partials/index.d.ts +2 -3
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-tiptap.d.ts +0 -1
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +2 -3
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +13 -1
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -0
- package/dist/components/features/schema-form/schema-form.d.ts +1 -1
- package/dist/components/features/schema-form/schema-form.types.d.ts +13 -5
- package/dist/components/features/suggestions/suggestions.strings.d.ts +14 -0
- package/dist/components/features/suggestions/suggestions.types.d.ts +12 -4
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/filter-bar.d.ts +1 -1
- package/dist/components/features/table/pagination.d.ts +1 -1
- package/dist/components/features/table/partials/cell-value.d.ts +1 -1
- package/dist/components/features/table/table-body.d.ts +1 -1
- package/dist/components/features/table/table-header.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +31 -9
- package/dist/components/features/table/table-region.recipes.d.ts +11 -0
- package/dist/components/features/table/table-toolbar.d.ts +1 -1
- package/dist/components/features/table/table.strings.d.ts +1 -0
- package/dist/components/features/table/table.types.d.ts +74 -48
- package/dist/components/features/theme-tweaker/theme-provider-settings.d.ts +4 -0
- package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +10 -7
- package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +17 -0
- package/dist/components/layout/app-shell/app-shell.types.d.ts +46 -49
- package/dist/components/layout/app-shell/index.d.ts +2 -2
- package/dist/components/layout/app-shell/shell-regions.d.ts +9 -0
- package/dist/components/layout/app-shell/shell-skip-link.d.ts +9 -0
- package/dist/components/layout/app-shell/sidebar-inset-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/stacked-layout.d.ts +1 -1
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
- package/dist/components/layout/auth/auth-shell.d.ts +1 -1
- package/dist/components/layout/auth/auth.types.d.ts +0 -5
- package/dist/components/layout/containers/inline-gutter-context.d.ts +7 -0
- package/dist/components/layout/containers/main-landmark-context.d.ts +6 -0
- package/dist/components/layout/header/header.types.d.ts +16 -6
- package/dist/components/layout/header/partials/header-global-search-trigger.d.ts +1 -1
- package/dist/components/layout/header/partials/header-notifications.d.ts +1 -1
- package/dist/components/layout/header/partials/header-search.d.ts +1 -1
- package/dist/components/layout/hooks/use-command-shortcut.d.ts +10 -1
- package/dist/components/layout/layout.types.d.ts +2 -2
- package/dist/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.d.ts +1 -1
- package/dist/components/layout/navigation/breadcrumb-progress/types.d.ts +9 -0
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +8 -1
- package/dist/components/layout/page/index.d.ts +2 -3
- package/dist/components/layout/page/page.strings.d.ts +12 -0
- package/dist/components/layout/page/page.types.d.ts +7 -110
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/index.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +3 -5
- package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation-footer.d.ts +1 -1
- package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +1 -1
- package/dist/components/layout/sidebar/index.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +15 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +10 -12
- package/dist/components/layout/sidebar/sidebar.utils.d.ts +4 -0
- package/dist/components/layout/workspace/workspace.strings.d.ts +2 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +13 -7
- package/dist/components/primitives/date.d.ts +22 -3
- package/dist/components/primitives/file-size.d.ts +8 -2
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/initials.d.ts +3 -1
- package/dist/components/primitives/link.d.ts +8 -1
- package/dist/components/primitives/money.d.ts +1 -1
- package/dist/components/primitives/number.d.ts +2 -1
- package/dist/components/typography/heading.d.ts +9 -3
- package/dist/components/typography/index.d.ts +1 -1
- package/dist/components/typography/text-link.d.ts +10 -3
- package/dist/components/ui/badge.d.ts +2 -4
- package/dist/components/ui/breadcrumb.d.ts +2 -3
- package/dist/components/ui/button.d.ts +8 -2
- package/dist/components/ui/collapsible.d.ts +1 -4
- package/dist/components/ui/command.d.ts +20 -18
- package/dist/components/ui/dialog.d.ts +3 -9
- package/dist/components/ui/empty.d.ts +2 -2
- package/dist/components/ui/input-group.d.ts +3 -3
- package/dist/components/ui/item.d.ts +3 -3
- package/dist/components/ui/popover.d.ts +3 -7
- package/dist/components/ui/sheet.d.ts +4 -12
- package/dist/components/ui/sidebar-state.d.ts +6 -1
- package/dist/components/ui/sidebar.d.ts +7 -4
- package/dist/components/ui/tabs.d.ts +2 -2
- package/dist/components/ui/toggle-group.d.ts +3 -3
- package/dist/components/ui/toggle.d.ts +2 -2
- package/dist/components/ui/tooltip.d.ts +1 -3
- package/dist/{containers-CSdc32h9.js → containers-BdfLTP4w.js} +37 -32
- package/dist/containers-BdfLTP4w.js.map +1 -0
- package/dist/content-block-hooks-Z3iKjqd1.js +17 -0
- package/dist/content-block-hooks-Z3iKjqd1.js.map +1 -0
- package/dist/{copyable-3fdHfMR3.js → copyable-Bmr14W0d.js} +6 -6
- package/dist/{copyable-3fdHfMR3.js.map → copyable-Bmr14W0d.js.map} +1 -1
- package/dist/{data-display-Cmj-xZYl.js → data-display-CWe9SOYh.js} +264 -251
- package/dist/data-display-CWe9SOYh.js.map +1 -0
- package/dist/date-3qsCE1ID.js +209 -0
- package/dist/date-3qsCE1ID.js.map +1 -0
- package/dist/{date-picker-CyQlFYsP.js → date-picker-D1keJQIG.js} +129 -129
- package/dist/date-picker-D1keJQIG.js.map +1 -0
- package/dist/date-pickers-D8aJoeHc.js +185 -0
- package/dist/date-pickers-D8aJoeHc.js.map +1 -0
- package/dist/disclosure-panel-B0HFNZ9x.js.map +1 -1
- package/dist/{display-CT_N2a3w.js → display-VlmP1I0i.js} +23 -46
- package/dist/display-VlmP1I0i.js.map +1 -0
- package/dist/{dropdown-menu-C08iIugv.js → dropdown-menu-B8hjvbkS.js} +9 -9
- package/dist/{dropdown-menu-C08iIugv.js.map → dropdown-menu-B8hjvbkS.js.map} +1 -1
- package/dist/dropzone-CHBNK3de.js +116 -0
- package/dist/dropzone-CHBNK3de.js.map +1 -0
- package/dist/features/activities.js +682 -628
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +258 -226
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +436 -340
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +351 -265
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +2 -2
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +212 -151
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +344 -315
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +504 -355
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +250 -206
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +269 -189
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +385 -371
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1571 -1199
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +2 -2
- package/dist/features/overlays.js +2 -2
- package/dist/features/products.js +1780 -1691
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +165 -152
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +223 -191
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +55 -220
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +3 -3
- package/dist/features/schema-form.js +280 -228
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +48 -39
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/table.js +2 -2
- package/dist/features/theme-tweaker.js +723 -633
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-DmqmXKLn.js +254 -0
- package/dist/feedback-DmqmXKLn.js.map +1 -0
- package/dist/{field-affordance-recipes-D6H7tVJi.js → field-affordance-recipes-DfbMadot.js} +13 -9
- package/dist/field-affordance-recipes-DfbMadot.js.map +1 -0
- package/dist/{field-state-recipes-7sza8QbC.js → field-state-recipes-EtCxpEy3.js} +6 -2
- package/dist/field-state-recipes-EtCxpEy3.js.map +1 -0
- package/dist/filters-BviMRMLS.js +2692 -0
- package/dist/filters-BviMRMLS.js.map +1 -0
- package/dist/{focus-recipes-B653VaLq.js → focus-recipes-DSkiUvUp.js} +3 -3
- package/dist/focus-recipes-DSkiUvUp.js.map +1 -0
- package/dist/{form-field-CAPdwdnZ.js → form-field-BdfCwSoQ.js} +5 -5
- package/dist/{form-field-CAPdwdnZ.js.map → form-field-BdfCwSoQ.js.map} +1 -1
- package/dist/{form-sizing-CgcrUbLU.js → form-sizing-DE_dZw32.js} +3 -3
- package/dist/{form-sizing-CgcrUbLU.js.map → form-sizing-DE_dZw32.js.map} +1 -1
- package/dist/{forms-B3W8CH7-.js → forms-B8DzJnBN.js} +35 -35
- package/dist/forms-B8DzJnBN.js.map +1 -0
- package/dist/forms-numeric-DOBswjKj.js +992 -0
- package/dist/forms-numeric-DOBswjKj.js.map +1 -0
- package/dist/{header-ZIIsRKxP.js → header-Cq3G0ZRP.js} +100 -95
- package/dist/header-Cq3G0ZRP.js.map +1 -0
- package/dist/{hooks-BitHSh-Y.js → hooks-DHfeSMAO.js} +34 -14
- package/dist/hooks-DHfeSMAO.js.map +1 -0
- package/dist/{http-D_6rOnzU.js → http-Cu-GPpss.js} +61 -35
- package/dist/http-Cu-GPpss.js.map +1 -0
- package/dist/{icon-badge-npxF1SLX.js → icon-badge-B0Kq7wom.js} +3 -3
- package/dist/{icon-badge-npxF1SLX.js.map → icon-badge-B0Kq7wom.js.map} +1 -1
- package/dist/index.js +6 -6
- package/dist/inline-gutter-context-CSqmrMFZ.js +11 -0
- package/dist/inline-gutter-context-CSqmrMFZ.js.map +1 -0
- package/dist/{input-DIREVYHs.js → input-2YrgTUrz.js} +3 -3
- package/dist/{input-DIREVYHs.js.map → input-2YrgTUrz.js.map} +1 -1
- package/dist/{input-7KAc7XQL.js → input-DfJyrjoR.js} +6 -6
- package/dist/{input-7KAc7XQL.js.map → input-DfJyrjoR.js.map} +1 -1
- package/dist/{interaction-recipes-4wZ2tvfb.js → interaction-recipes-DmuS1ase.js} +2 -2
- package/dist/{interaction-recipes-4wZ2tvfb.js.map → interaction-recipes-DmuS1ase.js.map} +1 -1
- package/dist/item-GJ9mvCcg.js +279 -0
- package/dist/item-GJ9mvCcg.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 +2 -2
- package/dist/layout/settings.js +2 -2
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +12 -12
- package/dist/{layout.types-E_GAApzO.js → layout.types-DbtnyAtd.js} +11 -8
- package/dist/layout.types-DbtnyAtd.js.map +1 -0
- package/dist/lib/anchored-positioning.d.ts +11 -0
- package/dist/lib/field-affordance-recipes.d.ts +10 -0
- package/dist/lib/field-state-recipes.d.ts +6 -0
- package/dist/lib/focus-recipes.d.ts +7 -0
- package/dist/lib/format.d.ts +25 -0
- package/dist/lib/money-format.d.ts +6 -0
- package/dist/lib/motion-recipes.d.ts +6 -0
- package/dist/lib/surface-recipes.d.ts +32 -2
- package/dist/lib/theme-scope.d.ts +17 -1
- package/dist/lib/token-merge.generated.d.ts +13 -19
- package/dist/lib/ui-provider/index.d.ts +1 -1
- package/dist/lib/ui-provider/types.d.ts +5 -0
- package/dist/lib/use-controllable-state.d.ts +16 -0
- package/dist/lib/use-copy-feedback.d.ts +15 -0
- package/dist/lib/utils.js +1 -1
- package/dist/lib/variant-props.d.ts +9 -0
- package/dist/main-landmark-context-BAsyqp2I.js +11 -0
- package/dist/main-landmark-context-BAsyqp2I.js.map +1 -0
- package/dist/mentions-zz0ewNIq.js +670 -0
- package/dist/mentions-zz0ewNIq.js.map +1 -0
- package/dist/{message-BJHnn43M.js → message-BiiVrRrm.js} +10 -7
- package/dist/{message-BJHnn43M.js.map → message-BiiVrRrm.js.map} +1 -1
- package/dist/{metadata-list-XkqZ_UXH.js → metadata-list-G85roWjS.js} +13 -12
- package/dist/metadata-list-G85roWjS.js.map +1 -0
- package/dist/{motion-recipes-DitYv6P2.js → motion-recipes-CUc_aHuG.js} +7 -4
- package/dist/motion-recipes-CUc_aHuG.js.map +1 -0
- package/dist/navigation-C0Be5C3i.js +304 -0
- package/dist/navigation-C0Be5C3i.js.map +1 -0
- package/dist/{navigation-Bt-v7rWP.js → navigation-CmqaQR_G.js} +99 -103
- package/dist/navigation-CmqaQR_G.js.map +1 -0
- package/dist/number-NFWKIoiK.js +340 -0
- package/dist/number-NFWKIoiK.js.map +1 -0
- package/dist/{overflow-tab-bar-BQCA2Zn2.js → overflow-tab-bar-DV7HE_3t.js} +8 -8
- package/dist/{overflow-tab-bar-BQCA2Zn2.js.map → overflow-tab-bar-DV7HE_3t.js.map} +1 -1
- package/dist/overlays-D-gAIfPF.js +1018 -0
- package/dist/overlays-D-gAIfPF.js.map +1 -0
- package/dist/page-D4pQhgSq.js +216 -0
- package/dist/page-D4pQhgSq.js.map +1 -0
- package/dist/{page-header-commands-DIKspJfx.js → page-header-commands-elelNOfd.js} +29 -29
- package/dist/{page-header-commands-DIKspJfx.js.map → page-header-commands-elelNOfd.js.map} +1 -1
- package/dist/{pagination-Br8TdV9A.js → pagination-BuSWw1US.js} +22 -23
- package/dist/pagination-BuSWw1US.js.map +1 -0
- package/dist/{popover-k8TdUcAt.js → popover-BpMxbqEK.js} +73 -69
- package/dist/popover-BpMxbqEK.js.map +1 -0
- package/dist/{popover-menu-yn-o0kyA.js → popover-menu-CO-_iiuz.js} +7 -7
- package/dist/{popover-menu-yn-o0kyA.js.map → popover-menu-CO-_iiuz.js.map} +1 -1
- package/dist/{popover.recipes-DJ0AkUan.js → popover.recipes-BqkdvlZn.js} +3 -4
- package/dist/{popover.recipes-DJ0AkUan.js.map → popover.recipes-BqkdvlZn.js.map} +1 -1
- package/dist/{portal-recipes-DyUXqUtD.js → portal-recipes-BPeS4rGB.js} +2 -2
- package/dist/{portal-recipes-DyUXqUtD.js.map → portal-recipes-BPeS4rGB.js.map} +1 -1
- package/dist/primitives-BlC1lXBr.js +447 -0
- package/dist/primitives-BlC1lXBr.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-DZFXXzPs.js → progress-RARK8AjB.js} +5 -5
- package/dist/{progress-DZFXXzPs.js.map → progress-RARK8AjB.js.map} +1 -1
- package/dist/receipt-CUf2Vegp.js +114 -0
- package/dist/receipt-CUf2Vegp.js.map +1 -0
- package/dist/{rich-text-BnTzZjIo.js → rich-text-Cypm9__d.js} +7 -8
- package/dist/{rich-text-BnTzZjIo.js.map → rich-text-Cypm9__d.js.map} +1 -1
- package/dist/rich-text-editor-Z6cQepsA.js +919 -0
- package/dist/rich-text-editor-Z6cQepsA.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js +100 -0
- package/dist/rich-text-editor-toolbar-DYbRJARB.js.map +1 -0
- package/dist/rich-text-tree-DdKHIJx4.js +154 -0
- package/dist/rich-text-tree-DdKHIJx4.js.map +1 -0
- package/dist/safe-image-src-C6kQSMBZ.js +17 -0
- package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
- package/dist/{scroll-area-Bj6CRUif.js → scroll-area-B9HKbji0.js} +3 -3
- package/dist/{scroll-area-Bj6CRUif.js.map → scroll-area-B9HKbji0.js.map} +1 -1
- package/dist/{separator-DM6gs2vu.js → separator-DaDe26sf.js} +3 -3
- package/dist/separator-DaDe26sf.js.map +1 -0
- package/dist/{separator-B9ewiCGO.js → separator-KGsNXt2J.js} +2 -2
- package/dist/{separator-B9ewiCGO.js.map → separator-KGsNXt2J.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +5 -2
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +2 -2
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-D5j_RJvT.js +160 -0
- package/dist/settings-D5j_RJvT.js.map +1 -0
- package/dist/sheet-B6j_BE9O.js +241 -0
- package/dist/sheet-B6j_BE9O.js.map +1 -0
- package/dist/{sidebar-CmD6a-HK.js → sidebar-C-iQ_TJP.js} +377 -351
- package/dist/sidebar-C-iQ_TJP.js.map +1 -0
- package/dist/sidebar-D5VO2W8S.js +715 -0
- package/dist/sidebar-D5VO2W8S.js.map +1 -0
- package/dist/{skeleton-DDgdhmu9.js → skeleton-Cab_KgVo.js} +12 -12
- package/dist/skeleton-Cab_KgVo.js.map +1 -0
- package/dist/{smart-card-B6vLxqa_.js → smart-card-C59z6KFO.js} +217 -210
- package/dist/smart-card-C59z6KFO.js.map +1 -0
- package/dist/{structure-DZJ2wbAU.js → structure-DElaQwwN.js} +2 -2
- package/dist/{structure-DZJ2wbAU.js.map → structure-DElaQwwN.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-C8mNycaY.js → surface-recipes-DV6rrOFq.js} +10 -2
- package/dist/surface-recipes-DV6rrOFq.js.map +1 -0
- package/dist/{table-CXSPHH25.js → table-CSRUgpdK.js} +62 -61
- package/dist/table-CSRUgpdK.js.map +1 -0
- package/dist/table-DdXDBsR_.js +1657 -0
- package/dist/table-DdXDBsR_.js.map +1 -0
- package/dist/{tabs-C4Kr_hCr.js → tabs-WnHfV2pM.js} +27 -27
- package/dist/tabs-WnHfV2pM.js.map +1 -0
- package/dist/{text-inputs-jdkS3ReG.js → text-inputs-ljyBYaCd.js} +112 -112
- package/dist/text-inputs-ljyBYaCd.js.map +1 -0
- package/dist/theme.css +21 -5
- package/dist/timelines-mOmS9Eh3.js +479 -0
- package/dist/timelines-mOmS9Eh3.js.map +1 -0
- package/dist/tooltip-yjX-Uv-p.js +112 -0
- package/dist/tooltip-yjX-Uv-p.js.map +1 -0
- package/dist/{tree-CeYVzdFE.js → tree-YpkxUG2Z.js} +80 -72
- package/dist/tree-YpkxUG2Z.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-C7-YMW1S.js → typography-C0dELqYV.js} +46 -40
- package/dist/typography-C0dELqYV.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-C-74NVLc.js → ui-provider-Bu1S-o96.js} +4 -3
- package/dist/ui-provider-Bu1S-o96.js.map +1 -0
- package/dist/ui-provider.js +2 -2
- package/dist/{upload-Hdm5gObf.js → upload-DMuMYJFT.js} +276 -268
- package/dist/upload-DMuMYJFT.js.map +1 -0
- package/dist/{usage-card-9s8hLDfn.js → usage-card-DDPki5P1.js} +57 -54
- package/dist/usage-card-DDPki5P1.js.map +1 -0
- package/dist/use-controllable-state-BlP8SyBI.js +13 -0
- package/dist/use-controllable-state-BlP8SyBI.js.map +1 -0
- package/dist/use-copy-feedback-CzcaqlLf.js +28 -0
- package/dist/use-copy-feedback-CzcaqlLf.js.map +1 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js +251 -0
- package/dist/use-metric-format-options-Dk4rC1NO.js.map +1 -0
- package/dist/{utils-DhuoqFy4.js → utils-BVbAG2J6.js} +98 -76
- package/dist/utils-BVbAG2J6.js.map +1 -0
- package/dist/value-inputs-h5MwjGCo.js +982 -0
- package/dist/value-inputs-h5MwjGCo.js.map +1 -0
- package/dist/value-typography-D15uwfj-.js +154 -0
- package/dist/value-typography-D15uwfj-.js.map +1 -0
- package/dist/workspace-DIryPqBt.js +400 -0
- package/dist/workspace-DIryPqBt.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +7 -0
- package/docs/consumer-skill/agents/themelia-ui-designer.md +11 -2
- package/docs/consumer-skill/examples/analytics.tsx +1 -1
- package/docs/consumer-skill/examples/app-layout.tsx +3 -3
- package/docs/consumer-skill/examples/commerce-lines.tsx +7 -5
- package/docs/consumer-skill/examples/detail.tsx +3 -2
- package/docs/consumer-skill/examples/email-composer.tsx +1 -1
- package/docs/consumer-skill/examples/index-table.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +7 -6
- package/docs/consumer-skill/references/agents-md.md +20 -16
- package/docs/consumer-skill/references/analytics.md +20 -6
- package/docs/consumer-skill/references/building-views.md +213 -0
- package/docs/consumer-skill/references/catalogue.md +617 -0
- package/docs/consumer-skill/references/component-contracts.json +10202 -18084
- package/docs/consumer-skill/references/composition.md +21 -17
- package/docs/consumer-skill/references/discovery.md +8 -5
- package/docs/consumer-skill/references/installation.md +10 -4
- package/docs/consumer-skill/references/integration.md +5 -5
- package/docs/consumer-skill/references/product-composition.md +2 -2
- package/docs/consumer-skill/references/public-api.json +580 -633
- package/docs/consumer-skill/references/review.md +6 -4
- package/docs/consumer-skill/references/screen-archetypes.md +2 -2
- package/docs/consumer-skill/references/theming.md +1 -1
- package/docs/consumer-skill/references/tokens.json +4 -4
- package/docs/consumer-skill/references/workflows.md +7 -7
- package/docs/consumer-skill/scripts/composition-policy.mjs +40 -20
- package/docs/consumer-skill/scripts/composition.mjs +4 -1
- package/docs/consumer-skill/scripts/discovery.mjs +3 -1
- package/docs/consumer-skill/scripts/setup-skills.mjs +31 -4
- package/docs/consumer-skills/themelia-components/SKILL.md +8 -4
- package/docs/consumer-skills/themelia-composition/SKILL.md +7 -3
- package/docs/consumer-skills/themelia-design/SKILL.md +7 -1
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +1 -1
- package/package.json +9 -12
- package/templates/README.md +3 -2
- package/templates/admin-shell-template.tsx +49 -9
- package/templates/analytics-operations-template.tsx +20 -24
- package/templates/customers-template.tsx +12 -9
- package/templates/index.ts +2 -8
- package/templates/orders-template.tsx +28 -24
- package/templates/products-template.tsx +14 -4
- package/templates/user-permissions-template.tsx +11 -14
- package/dist/accordion-0tQUZ20r.js.map +0 -1
- package/dist/action-menu-C0gjzLyE.js +0 -284
- package/dist/action-menu-C0gjzLyE.js.map +0 -1
- package/dist/ai-artifact-CGGpQryR.js +0 -1200
- package/dist/ai-artifact-CGGpQryR.js.map +0 -1
- package/dist/anchored-positioning-DPnKTvNs.js +0 -6
- package/dist/anchored-positioning-DPnKTvNs.js.map +0 -1
- package/dist/app-shell-EHuuRDGy.js +0 -321
- package/dist/app-shell-EHuuRDGy.js.map +0 -1
- package/dist/auth-B0girIk_.js.map +0 -1
- package/dist/badge-wWauMgAt.js.map +0 -1
- package/dist/base/sheet.js +0 -3
- package/dist/breadcrumbs-Bp9Ke7kd.js.map +0 -1
- package/dist/button-ChBovTx0.js.map +0 -1
- package/dist/buttons-DeW0bQeK.js.map +0 -1
- package/dist/cascader-CrAl9zD5.js +0 -439
- package/dist/cascader-CrAl9zD5.js.map +0 -1
- package/dist/choice-inputs-DHGtx0QV.js.map +0 -1
- package/dist/code-block-BSJyq9e-.js.map +0 -1
- package/dist/collapsible-BzJ91LUG.js +0 -81
- package/dist/collapsible-BzJ91LUG.js.map +0 -1
- package/dist/combobox-Bcvu5J8O.js +0 -363
- package/dist/combobox-Bcvu5J8O.js.map +0 -1
- package/dist/combobox-C2JiSQPc.js +0 -915
- package/dist/combobox-C2JiSQPc.js.map +0 -1
- package/dist/command-9e52NPgK.js +0 -425
- package/dist/command-9e52NPgK.js.map +0 -1
- package/dist/comments-BsgErEqd.js +0 -1174
- package/dist/comments-BsgErEqd.js.map +0 -1
- package/dist/components/base/buttons/tooltip-button.d.ts +0 -7
- package/dist/components/base/display/content-block.d.ts +0 -75
- package/dist/components/base/display/content-block.strings.d.ts +0 -5
- package/dist/components/base/sheet/index.d.ts +0 -29
- package/dist/components/blocks/ai/use-copy-feedback.d.ts +0 -6
- package/dist/components/blocks/data-display/metadata/index.d.ts +0 -30
- package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +0 -10
- package/dist/components/features/resource/resource.strings.d.ts +0 -12
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-fallback.d.ts +0 -8
- package/dist/components/features/sync/index.d.ts +0 -26
- package/dist/components/features/sync/sync-range-dialog-form.d.ts +0 -5
- package/dist/components/features/sync/sync.strings.d.ts +0 -18
- package/dist/components/features/sync/sync.types.d.ts +0 -44
- package/dist/components/layout/page/partials/page-actions.d.ts +0 -3
- package/dist/components/ui/slot.d.ts +0 -6
- package/dist/containers-CSdc32h9.js.map +0 -1
- package/dist/data-display-Cmj-xZYl.js.map +0 -1
- package/dist/date-Br0FicVv.js +0 -144
- package/dist/date-Br0FicVv.js.map +0 -1
- package/dist/date-picker-CyQlFYsP.js.map +0 -1
- package/dist/date-pickers-tj2MXmXd.js +0 -185
- package/dist/date-pickers-tj2MXmXd.js.map +0 -1
- package/dist/display-CT_N2a3w.js.map +0 -1
- package/dist/features/sync.js +0 -142
- package/dist/features/sync.js.map +0 -1
- package/dist/feedback-Dzo1xtAU.js +0 -246
- package/dist/feedback-Dzo1xtAU.js.map +0 -1
- package/dist/field-affordance-recipes-D6H7tVJi.js.map +0 -1
- package/dist/field-state-recipes-7sza8QbC.js.map +0 -1
- package/dist/filters-Dl80yYtN.js +0 -2415
- package/dist/filters-Dl80yYtN.js.map +0 -1
- package/dist/focus-recipes-B653VaLq.js.map +0 -1
- package/dist/forms-B3W8CH7-.js.map +0 -1
- package/dist/forms-numeric-CwjQJe-O.js +0 -991
- package/dist/forms-numeric-CwjQJe-O.js.map +0 -1
- package/dist/header-ZIIsRKxP.js.map +0 -1
- package/dist/hooks-BitHSh-Y.js.map +0 -1
- package/dist/http-D_6rOnzU.js.map +0 -1
- package/dist/item-FfWnaYST.js +0 -278
- package/dist/item-FfWnaYST.js.map +0 -1
- package/dist/layout.types-E_GAApzO.js.map +0 -1
- package/dist/media-gallery-C81DAnKI.js +0 -203
- package/dist/media-gallery-C81DAnKI.js.map +0 -1
- package/dist/mentions-qOnedSt4.js +0 -639
- package/dist/mentions-qOnedSt4.js.map +0 -1
- package/dist/metadata-list-XkqZ_UXH.js.map +0 -1
- package/dist/motion-recipes-DitYv6P2.js.map +0 -1
- package/dist/navigation-BgtPJAhi.js +0 -288
- package/dist/navigation-BgtPJAhi.js.map +0 -1
- package/dist/navigation-Bt-v7rWP.js.map +0 -1
- package/dist/number-CYqBcrSj.js +0 -346
- package/dist/number-CYqBcrSj.js.map +0 -1
- package/dist/overlays-CC8zI3Du.js +0 -1017
- package/dist/overlays-CC8zI3Du.js.map +0 -1
- package/dist/page-BoQ1VaFJ.js +0 -331
- package/dist/page-BoQ1VaFJ.js.map +0 -1
- package/dist/pagination-Br8TdV9A.js.map +0 -1
- package/dist/popover-k8TdUcAt.js.map +0 -1
- package/dist/primitives-BkkQjYl7.js +0 -385
- package/dist/primitives-BkkQjYl7.js.map +0 -1
- package/dist/receipt-C7LhOg7Q.js +0 -116
- package/dist/receipt-C7LhOg7Q.js.map +0 -1
- package/dist/rich-text-editor-CAurDwT5.js +0 -1273
- package/dist/rich-text-editor-CAurDwT5.js.map +0 -1
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js +0 -99
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +0 -1
- package/dist/rich-text-tree-BqyQ_7-R.js +0 -66
- package/dist/rich-text-tree-BqyQ_7-R.js.map +0 -1
- package/dist/sanitize-html-BWkH4dLM.js +0 -105
- package/dist/sanitize-html-BWkH4dLM.js.map +0 -1
- package/dist/separator-DM6gs2vu.js.map +0 -1
- package/dist/settings-DZPHgpx4.js +0 -155
- package/dist/settings-DZPHgpx4.js.map +0 -1
- package/dist/sheet-C4DHsgLk.js +0 -250
- package/dist/sheet-C4DHsgLk.js.map +0 -1
- package/dist/sidebar-C8BnDwTH.js +0 -709
- package/dist/sidebar-C8BnDwTH.js.map +0 -1
- package/dist/sidebar-CmD6a-HK.js.map +0 -1
- package/dist/skeleton-DDgdhmu9.js.map +0 -1
- package/dist/slot-CLF9kLrS.js +0 -16
- package/dist/slot-CLF9kLrS.js.map +0 -1
- package/dist/smart-card-B6vLxqa_.js.map +0 -1
- package/dist/surface-recipes-C8mNycaY.js.map +0 -1
- package/dist/table-CBonSdTp.js +0 -1584
- package/dist/table-CBonSdTp.js.map +0 -1
- package/dist/table-CXSPHH25.js.map +0 -1
- package/dist/tabs-C4Kr_hCr.js.map +0 -1
- package/dist/text-inputs-jdkS3ReG.js.map +0 -1
- package/dist/timelines-CoPwdJP0.js +0 -458
- package/dist/timelines-CoPwdJP0.js.map +0 -1
- package/dist/tooltip-31NwIpTo.js +0 -113
- package/dist/tooltip-31NwIpTo.js.map +0 -1
- package/dist/tree-CeYVzdFE.js.map +0 -1
- package/dist/typography-C7-YMW1S.js.map +0 -1
- package/dist/ui-provider-C-74NVLc.js.map +0 -1
- package/dist/upload-Hdm5gObf.js.map +0 -1
- package/dist/upload-queue-D0sYPuqo.js +0 -409
- package/dist/upload-queue-D0sYPuqo.js.map +0 -1
- package/dist/usage-card-9s8hLDfn.js.map +0 -1
- package/dist/utils-DhuoqFy4.js.map +0 -1
- package/dist/value-inputs-D3aPgq9H.js +0 -980
- package/dist/value-inputs-D3aPgq9H.js.map +0 -1
- package/dist/value-typography-uSzzG9Gf.js +0 -122
- package/dist/value-typography-uSzzG9Gf.js.map +0 -1
- package/dist/workspace-CC8Vchiu.js +0 -411
- package/dist/workspace-CC8Vchiu.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-BgtPJAhi.js","names":["_Fragment","Text","DisplayLabel","focusRecipes","Stack","toneRecipes","interactionRecipes","Percent","Badge","ItemMedia","ItemDescription","ItemActions","ItemGroup","ItemContent","Item","ItemTitle","useLayoutLinkRenderer","normalizeLayoutPath","Fragment$1","defaultBreadcrumbProgressStrings","BreadcrumbProgress","stringsProp","strings","useStrings","cn","className","currentIndex","steps","isCompleted","idx","isCurrent","isClickable","onStepClick","Button","step","Check","CategoryNav","title","items","Icon","it","active","activeId","onSelect","ChevronRight","defaultSectionNavStrings","SCROLL_SETTLE_MS","SectionNav","forwardRef","ariaLabel","rootProps","setActive","useState","clickLock","useRef","settleTimer","sectionIds","scheduleSettle","useCallback","useEffect","onScroll","lock","ids","intersecting","obs","entries","entry","next","id","el","rootMargin","isActive","e","defaultSideNavStrings","isSimpleText","value","SideNav","groupsProp","linkRenderer","groups","useMemo","activeNormalized","currentPath","activePath","group","item","path","b","a","collapsed","setCollapsed","g","toggleGroup","prev","resolvedActive","activeItemClassName","isCollapsed","showLabel","shouldRenderItems","ChevronDown","Fragment","itemClassName"],"sources":["../src/components/layout/navigation/breadcrumb-progress/types.ts","../src/components/layout/navigation/breadcrumb-progress/breadcrumb-progress.tsx","../src/components/layout/navigation/category-nav/category-nav.tsx","../src/components/layout/navigation/section-nav/section-nav.tsx","../src/components/layout/navigation/side-nav.tsx"],"sourcesContent":["import type { StringsProp } from '../../../../lib/strings';\n\nexport interface BreadcrumbProgressStep {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Short guidance shown beneath the control. */\n\thint?: string;\n}\n\nexport interface BreadcrumbProgressStrings {\n\tstepLabel: string;\n\tofLabel: string;\n}\n\nexport const defaultBreadcrumbProgressStrings: BreadcrumbProgressStrings = {\n\tstepLabel: 'Step',\n\tofLabel: 'of',\n};\n\nexport interface BreadcrumbProgressProps {\n\t/** Steps in the flow, in order. */\n\tsteps: BreadcrumbProgressStep[];\n\t/** Zero-based position of the active step. */\n\tcurrentIndex: number;\n\tonStepClick?: (id: string, index: number) => void;\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<BreadcrumbProgressStrings>;\n}\n","/**\n * BreadcrumbProgress — wizard / multi-step navigation with completed,\n * current, and upcoming states. Click any completed step to jump back.\n */\nimport { Check } from 'lucide-react';\nimport { Button } from '../../../base/buttons';\nimport { Percent } from '../../../primitives';\nimport { DisplayLabel, Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tdefaultBreadcrumbProgressStrings,\n\ttype BreadcrumbProgressProps,\n} from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\n\nexport function BreadcrumbProgress({ steps, currentIndex, onStepClick, className, strings: stringsProp }: BreadcrumbProgressProps) {\n\tconst strings = useStrings(defaultBreadcrumbProgressStrings, stringsProp);\n\n\treturn (\n\t\t<div className={cn('breadcrumb-progress--component', 'w-full', className)}>\n\t\t\t<div className=\"flex items-center justify-between mb-space-md\">\n\t\t\t\t<DisplayLabel>\n\t\t\t\t\t{strings.stepLabel} {currentIndex + 1} {strings.ofLabel} {steps.length}\n\t\t\t\t</DisplayLabel>\n\t\t\t\t<Percent value={Math.round(((currentIndex + 1) / steps.length) * 100)} scaled size=\"xs\" weight=\"semibold\" />\n\t\t\t</div>\n\t\t\t<ol className=\"m-0 list-none p-0 font-sans flex items-center gap-space-md\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst isCompleted = idx < currentIndex;\n\t\t\t\t\tconst isCurrent = idx === currentIndex;\n\t\t\t\t\tconst isClickable = onStepClick && (isCompleted || isCurrent);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={step.id} className=\"flex min-w-0 flex-1 items-center gap-space-md\">\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-label={`${strings.stepLabel} ${idx + 1}: ${step.label}`}\n\t\t\t\t\t\t\t\tonClick={() => isClickable && onStepClick?.(step.id, idx)}\n\t\t\t\t\t\t\t\tdisabled={!isClickable}\n\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'min-w-0 justify-start gap-space-md text-left transition-colors',\n\t\t\t\t\t\t\t\t\tisClickable && interactionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t!isClickable && 'cursor-default',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'flex size-6 shrink-0 items-center justify-center rounded-full tabular-nums',\n\t\t\t\t\t\t\t\t\t\tisCompleted && 'bg-success text-success-foreground',\n\t\t\t\t\t\t\t\t\t\tisCurrent && `bg-primary text-primary-foreground ring-4 ${toneRecipes.primary.halo}`,\n\t\t\t\t\t\t\t\t\t\t!isCompleted && !isCurrent && 'bg-muted text-muted-foreground',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isCompleted ? <Check className=\"size-icon-md\" /> : idx + 1}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<div className=\"hidden min-w-0 lg:block\">\n\t\t\t\t\t\t\t\t\t<Text weight=\"semibold\" className={cn(!isCurrent && !isCompleted && 'text-muted-foreground')}>{step.label}</Text>\n\t\t\t\t\t\t\t\t\t{!!step.hint && <Text size=\"xs\" type=\"discrete\" className=\"truncate\">{step.hint}</Text>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{idx < steps.length - 1 && (\n\t\t\t\t\t\t\t\t<div className={cn('h-px flex-1', isCompleted ? 'bg-success' : 'bg-border')} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ol>\n\t\t</div>\n\t);\n}\n\nBreadcrumbProgress.displayName = 'BreadcrumbProgress';\n","/**\n * CategoryNav — vertical icon + label list with optional count badge per row.\n * Use as a sidebar nav for filtering or category browsing.\n */\nimport { ChevronRight } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport {\n\tItem,\n\tItemActions,\n\tItemContent,\n\tItemDescription,\n\tItemGroup,\n\tItemMedia,\n\tItemTitle,\n} from '../../../base/item';\nimport { cn } from '../../../../lib/utils';\n\nimport type { CategoryNavProps } from './types';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\n\nexport function CategoryNav({ title, items, activeId, onSelect, className }: CategoryNavProps) {\n\treturn (\n\t\t<nav\n\t\t\tdata-component=\"category-nav\"\n\t\t\tdata-slot=\"category-nav\"\n\t\t\taria-label={title}\n\t\t\tclassName={cn('category-nav--component min-w-0', className)}\n\t\t>\n\t\t\t<ItemGroup role=\"group\">\n\t\t\t\t{items.map((it) => {\n\t\t\t\t\tconst Icon = it.icon;\n\t\t\t\t\tconst active = it.id === activeId;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Item\n\t\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\t\t// Not `size=\"sm\"`. That maps to the primitive `xs` scale, which\n\t\t\t\t\t\t\t// shrinks media icons to 12px for a genuinely compact row — but\n\t\t\t\t\t\t\t// this row carries a title, a description and a badge and stands\n\t\t\t\t\t\t\t// 58px tall. The result was a 12px leading icon beside a 16px\n\t\t\t\t\t\t\t// chevron, because a `size-` class opts an icon out of that\n\t\t\t\t\t\t\t// scaling rule. The default scale matches `base/item`'s own\n\t\t\t\t\t\t\t// reference row at the same height.\n\t\t\t\t\t\t\trender={onSelect ? <button type=\"button\" /> : undefined}\n\t\t\t\t\t\t\tonClick={onSelect ? () => onSelect(it.id) : undefined}\n\t\t\t\t\t\t\taria-pressed={onSelect ? active : undefined}\n\t\t\t\t\t\t\taria-current={!onSelect && active ? true : undefined}\n\t\t\t\t\t\t\tdata-state={active ? 'active' : 'inactive'}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t// The selected tint spans the row, so the row needs horizontal\n\t\t\t\t\t\t\t\t// padding of its own or the icon sits 1px from the tint's edge.\n\t\t\t\t\t\t\t\t// `px-space-md` is what `SectionNav` uses for the same job.\n\t\t\t\t\t\t\t\t'rounded-radius px-space-md transition-colors',\n\t\t\t\t\t\t\t\tonSelect && 'cursor-pointer',\n\t\t\t\t\t\t\t\tactive ? interactionRecipes.rowCurrent : onSelect && interactionRecipes.rowHover,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t<ItemMedia variant=\"icon\" className={cn(active ? 'text-accent-foreground' : 'text-muted-foreground')}>\n\t\t\t\t\t\t\t\t\t<Icon />\n\t\t\t\t\t\t\t\t</ItemMedia>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<ItemContent>\n\t\t\t\t\t\t\t\t<ItemTitle bold={active}>{it.label}</ItemTitle>\n\t\t\t\t\t\t\t\t{!!it.hint && <ItemDescription clamp={1}>{it.hint}</ItemDescription>}\n\t\t\t\t\t\t\t</ItemContent>\n\t\t\t\t\t\t\t<ItemActions>\n\t\t\t\t\t\t\t\t{typeof it.count === 'number' && (\n\t\t\t\t\t\t\t\t\t<Badge tone=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{it.count}\n\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\t\t\t\tclassName={cn('size-icon shrink-0 text-muted-foreground', active && 'text-accent-foreground')}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</ItemActions>\n\t\t\t\t\t\t</Item>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ItemGroup>\n\t\t</nav>\n\t);\n}\n\nCategoryNav.displayName = 'CategoryNav';\n","/**\n * SectionNav — sticky in-page anchor nav. Pass a list of section ids; the active one\n * is tracked via IntersectionObserver and the matching item is highlighted. Click to\n * scroll to that section. Pure JS — no router required.\n *\n * A click owns the current state: the clicked section stays current while the smooth\n * scroll it started passes other sections, after that scroll settles (including when\n * the last sections are too short to reach the top), and until the reader scrolls\n * again. Only then does the observer resume.\n */\nimport { forwardRef, useCallback, useEffect, useRef, useState, type ComponentPropsWithoutRef } from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\nimport { interactionRecipes } from '../../../../lib/interaction-recipes';\nimport { focusRecipes } from '../../../../lib/focus-recipes';\n\nexport interface SectionNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSectionNavStrings: SectionNavStrings = {\n\tnavigationLabel: 'Section navigation',\n};\n\n/** Quiet time after the last scroll event before a click's smooth scroll counts as settled. */\nconst SCROLL_SETTLE_MS = 150;\n\nexport interface SectionNavItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n}\n\nexport interface SectionNavProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children' | 'onSelect'> {\n\t/** Entries to render, in order. */\n\titems: SectionNavItem[];\n\trootMargin?: string;\n\tonSelect?: (id: string) => void;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SectionNavStrings>;\n}\n\nexport const SectionNav = forwardRef<HTMLElement, SectionNavProps>(function SectionNav({\n\titems,\n\trootMargin = '-40% 0px -50% 0px',\n\tclassName,\n\tonSelect,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSectionNavStrings, stringsProp);\n\tconst [active, setActive] = useState<string | null>(items[0]?.id ?? null);\n\t// The section a click selected, and whether the scroll it started has settled.\n\tconst clickLock = useRef<{ id: string; settled: boolean } | null>(null);\n\tconst settleTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n\t// Observe by identity, not array instance, so a re-render keeps the observer.\n\tconst sectionIds = items.map((it) => it.id).join('\\u0000');\n\n\tconst scheduleSettle = useCallback(() => {\n\t\tclearTimeout(settleTimer.current);\n\t\tsettleTimer.current = setTimeout(() => {\n\t\t\tif (clickLock.current) clickLock.current.settled = true;\n\t\t}, SCROLL_SETTLE_MS);\n\t}, []);\n\n\tuseEffect(() => {\n\t\t// Scroll events do not bubble, so listen in the capture phase to hear every\n\t\t// scrolling ancestor that scrollIntoView moves.\n\t\tconst onScroll = () => {\n\t\t\tconst lock = clickLock.current;\n\t\t\tif (!lock) return;\n\t\t\t// A scroll after the click's own scroll settled is the reader's: release.\n\t\t\tif (lock.settled) clickLock.current = null;\n\t\t\telse scheduleSettle();\n\t\t};\n\t\tdocument.addEventListener('scroll', onScroll, { capture: true, passive: true });\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('scroll', onScroll, { capture: true });\n\t\t\tclearTimeout(settleTimer.current);\n\t\t};\n\t}, [scheduleSettle]);\n\n\tuseEffect(() => {\n\t\tconst ids = sectionIds ? sectionIds.split('\\u0000') : [];\n\t\tconst intersecting = new Map<string, boolean>();\n\t\tconst obs = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tentries.forEach((entry) => intersecting.set(entry.target.id, entry.isIntersecting));\n\t\t\t\tif (clickLock.current) return;\n\t\t\t\t// The first section in reading order inside the observed band is current.\n\t\t\t\tconst next = ids.find((id) => intersecting.get(id));\n\t\t\t\tif (next) setActive(next);\n\t\t\t},\n\t\t\t{ rootMargin, threshold: 0 },\n\t\t);\n\t\tids.forEach((id) => {\n\t\t\tconst el = document.getElementById(id);\n\t\t\tif (el) obs.observe(el);\n\t\t});\n\t\treturn () => obs.disconnect();\n\t}, [sectionIds, rootMargin]);\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\tclassName={cn('section-nav--component', className)}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"2xs\" className=\"section-nav--items\">\n\t\t\t\t{items.map((it) => {\n\t\t\t\tconst Icon = it.icon;\n\t\t\t\tconst isActive = active === it.id;\n\t\t\t\treturn (\n\t\t\t\t\t<a\n\t\t\t\t\t\tkey={it.id}\n\t\t\t\t\t\thref={`#${it.id}`}\n\t\t\t\t\t\taria-current={isActive ? 'location' : undefined}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\tclickLock.current = { id: it.id, settled: false };\n\t\t\t\t\t\t\t// Settles on its own when the target is already in place and nothing scrolls.\n\t\t\t\t\t\t\tscheduleSettle();\n\t\t\t\t\t\t\tdocument.getElementById(it.id)?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\t\t\t\t\t\tsetActive(it.id);\n\t\t\t\t\t\t\tonSelect?.(it.id);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t`flex items-center gap-space-md rounded-radius px-space-md py-row-y transition-colors outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\tisActive ? interactionRecipes.rowCurrent : `text-muted-foreground ${interactionRecipes.rowHover}`,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className=\"size-icon-md shrink-0\" />}\n\t\t\t\t\t\t<Text tag=\"span\" type=\"inherit\" weight={isActive ? 'semibold' : 'medium'}>{it.label}</Text>\n\t\t\t\t\t</a>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSectionNav.displayName = 'SectionNav';\n","/**\n * SideNav — collapsible vertical sidebar navigation. Items can be grouped\n * with a heading and optionally collapsed; each item supports an icon, badge,\n * and active-state highlight. The active item is matched by deepest path\n * prefix so nested routes still highlight their parent group.\n *\n * Pass `items` for the short flat-list default. Use `groups` only when the\n * navigation needs headings or collapsible sections.\n */\nimport { ChevronDown, type LucideIcon } from 'lucide-react';\nimport { Fragment, forwardRef, useMemo, useState, type ComponentPropsWithoutRef, type ReactNode } from 'react';\n\nimport { Badge } from '../../base/badge';\nimport { Button } from '../../base/buttons';\nimport { Stack } from '../../base/structure';\nimport { DisplayLabel, Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\nimport { useLayoutLinkRenderer } from '../hooks';\nimport type { LayoutNavigationAdapter } from '../layout.types';\nimport { normalizeLayoutPath } from '../normalize-layout-path';\n\nexport interface SideNavStrings {\n\tnavigationLabel: string;\n}\n\nexport const defaultSideNavStrings: SideNavStrings = {\n\tnavigationLabel: 'Side navigation',\n};\n\nexport interface SideNavItem {\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Destination for the entry, when it navigates. */\n\thref: string;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\t/** Chip rendered beside the label. */\n\tbadge?: ReactNode;\n\t/** Disables the control. */\n\tdisabled?: boolean;\n}\n\nexport interface SideNavGroup {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Display label. */\n\tlabel?: ReactNode;\n\t/** Entries to render, in order. */\n\titems: SideNavItem[];\n\tdefaultCollapsed?: boolean;\n\tcollapsible?: boolean;\n}\n\ninterface SideNavSharedProps extends Omit<ComponentPropsWithoutRef<'nav'>, 'children'>, LayoutNavigationAdapter {\n\t/** Path supplied by the app. Omit it to leave every entry unmarked. */\n\tcurrentPath?: string;\n\titemClassName?: string;\n\tactiveItemClassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SideNavStrings>;\n}\n\nexport type SideNavProps = SideNavSharedProps & (\n\t| {\n\t\t/** Short default for one flat navigation list. */\n\t\titems: SideNavItem[];\n\t\t/** Sections of the settings navigation. */\n\t\tgroups?: never;\n\t}\n\t| {\n\t\t/** Grouped navigation with optional headings and collapse behavior. */\n\t\tgroups: SideNavGroup[];\n\t\titems?: never;\n\t}\n);\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport const SideNav = forwardRef<HTMLElement, SideNavProps>(function SideNav({\n\titems,\n\tgroups: groupsProp,\n\tcurrentPath,\n\trenderLink,\n\tclassName,\n\titemClassName,\n\tactiveItemClassName,\n\tstrings: stringsProp,\n\t'aria-label': ariaLabel,\n\t...rootProps\n}, ref) {\n\tconst strings = useStrings(defaultSideNavStrings, stringsProp);\n\tconst linkRenderer = useLayoutLinkRenderer({ renderLink });\n\tconst groups = useMemo<SideNavGroup[]>(\n\t\t() => groupsProp ?? [\n\t\t\t{ id: 'side-nav-items', items: items ?? [], collapsible: false },\n\t\t],\n\t\t[groupsProp, items],\n\t);\n\tconst activeNormalized = useMemo(() => {\n\t\tif (currentPath === undefined) return null;\n\t\tconst activePath = normalizeLayoutPath(currentPath);\n\t\treturn groups\n\t\t\t.flatMap((group) => group.items.map((item) => normalizeLayoutPath(item.href)))\n\t\t\t.filter((path) => activePath === path || activePath.startsWith(`${path}/`))\n\t\t\t.sort((a, b) => b.length - a.length)[0] ?? null;\n\t}, [currentPath, groups]);\n\n\tconst [collapsed, setCollapsed] = useState<Record<string, boolean>>(() =>\n\t\tObject.fromEntries(groups.map((g) => [g.id, Boolean(g.defaultCollapsed)])),\n\t);\n\n\tconst toggleGroup = (id: string) =>\n\t\tsetCollapsed((prev) => ({ ...prev, [id]: !prev[id] }));\n\n\tconst resolvedActive =\n\t\tactiveItemClassName && activeItemClassName.length > 0\n\t\t\t? activeItemClassName\n\t\t\t: interactionRecipes.rowCurrent;\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel ?? strings.navigationLabel}\n\t\t\tclassName={cn('side-nav--component', className)}\n\t\t\t{...rootProps}\n\t\t>\n\t\t\t<Stack gap=\"xl\" className=\"side-nav--groups\">\n\t\t\t\t{groups.map((group) => {\n\t\t\t\tconst isCollapsed = group.collapsible !== false && collapsed[group.id];\n\t\t\t\tconst showLabel = !!group.label;\n\t\t\t\tconst shouldRenderItems = !isCollapsed;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Stack key={group.id} gap=\"2xs\" className=\"side-nav--group\">\n\t\t\t\t\t\t{!!showLabel && (\n\t\t\t\t\t\t\tgroup.collapsible !== false ? (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tonClick={() => toggleGroup(group.id)}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'h-auto min-h-action-sm justify-between px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t'hover:text-foreground transition-colors',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\taria-expanded={!isCollapsed}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{isSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"span\">\n\t\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t\t) : group.label}\n\t\t\t\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t'size-icon-md transition-transform',\n\t\t\t\t\t\t\t\t\t\t\tisCollapsed && '-rotate-90',\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tisSimpleText(group.label) ? (\n\t\t\t\t\t\t\t\t\t<DisplayLabel tag=\"div\" className=\"px-row-x py-row-y\">\n\t\t\t\t\t\t\t\t\t\t{group.label}\n\t\t\t\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t\t\t\t) : group.label\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!shouldRenderItems && (\n\t\t\t\t\t\t\t<Stack gap=\"2xs\" className=\"side-nav--items\">\n\t\t\t\t\t\t\t\t{group.items.map((item) => {\n\t\t\t\t\t\t\t\t\tconst Icon = item.icon;\n\t\t\t\t\t\t\t\t\tconst itemPath = normalizeLayoutPath(item.href);\n\t\t\t\t\t\t\t\t\tconst isActive = itemPath === activeNormalized;\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<Fragment key={item.href}>\n\t\t\t\t\t\t\t\t\t\t\t{linkRenderer({\n\t\t\t\t\t\t\t\t\t\t\t\thref: item.href,\n\t\t\t\t\t\t\t\t\t\t\t\tactive: isActive,\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled: item.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\t'aria-current': isActive ? 'page' : undefined,\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'group flex items-center gap-space-md rounded-radius px-row-x py-row-y',\n\t\t\t\t\t\t\t\t\t\t\t\t\t'text-sm transition-colors',\n\t\t\t\t\t\t\t\t\t\t\t\t\t`focus-visible:outline-none ${focusRecipes.edge}`,\n\t\t\t\t\t\t\t\t\t\t\t\t\tinteractionRecipes.rowHover,\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.disabled && 'pointer-events-none opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\t\tisActive && resolvedActive,\n\t\t\t\t\t\t\t\t\t\t\t\t\titemClassName,\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\tchildren: <>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!!Icon && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Icon className={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'size-icon shrink-0',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tisActive ? 'text-accent-foreground' : 'text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{isSimpleText(item.label) ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"min-w-0 flex-1 truncate text-inherit\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\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) : item.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{!!item.badge && <Badge tone=\"secondary\" className=\"shrink-0\">{item.badge}</Badge>}\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})}\n\t\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\t\t</nav>\n\t);\n});\n\nSideNav.displayName = 'SideNav';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgBA,IAAamB,IAA8D;CAC1E,WAAW;CACX,SAAS;AACV;;;ACDA,SAAgBC,EAAmB,EAAE,UAAO,iBAAc,gBAAa,cAAW,SAASC,KAAwC;CAClI,IAAMC,IAAUC,EAAWJ,GAAkCE,CAAW;CAExE,OACC,kBAAC,OAAD;EAAK,WAAWG,EAAG,kCAAkC,UAAUC,CAAS;EAAxE,UAAA,CACC,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACC,kBAACvB,GAAD,EAAA,UAAA;IACEoB,EAAQ;IAAU;IAAEI,IAAe;IAAE;IAAEJ,EAAQ;IAAQ;IAAEK,EAAM;GACnD,EAAA,CAAA,GACd,kBAACpB,GAAD;IAAS,OAAO,KAAK,OAAQmB,IAAe,KAAKC,EAAM,SAAU,GAAG;IAAG,QAAA;IAAO,MAAK;IAAK,QAAO;GAAY,CAAA,CACvG;EACL,CAAA,GAAA,kBAAC,MAAD;GAAI,WAAU;GACZ,UAAAA,EAAM,KAAK,GAAM,MAAQ;IACzB,IAAMC,IAAcC,IAAMH,GACpBI,IAAYD,MAAQH,GACpBK,IAAcC,MAAgBJ,KAAeE;IACnD,OACC,kBAAC,MAAD;KAAkB,WAAU;KAA5B,UAAA,CACC,kBAACG,GAAD;MACC,MAAK;MACL,cAAY,GAAGX,EAAQ,UAAU,GAAGO,IAAM,EAAE,IAAIK,EAAK;MACrD,eAAeH,KAAeC,IAAcE,EAAK,IAAIL,CAAG;MACxD,UAAU,CAACE;MACX,MAAK;MACL,aAAY;MACZ,MAAK;MACL,WAAWP,EACV,kEACAO,KAAezB,EAAmB,UAClC,CAACyB,KAAe,gBACjB;MAZD,UAAA,CAcC,kBAAC9B,GAAD;OACC,KAAI;OACJ,MAAK;OACL,QAAO;OACP,WAAWuB,EACV,8EACAI,KAAe,sCACfE,KAAa,6CAA6CzB,EAAY,QAAQ,QAC9E,CAACuB,KAAe,CAACE,KAAa,gCAC/B;OAEC,UAAAF,IAAc,kBAACO,GAAD,EAAO,WAAU,eAAgB,CAAA,IAAIN,IAAM;MACrD,CAAA,GACN,kBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACC,kBAAC5B,GAAD;QAAM,QAAO;QAAW,WAAWuB,EAAG,CAACM,KAAa,CAACF,KAAe,uBAAuB;QAAI,UAAAM,EAAK;OAAY,CAAA,GAC/G,CAAC,CAACA,EAAK,QAAQ,kBAACjC,GAAD;QAAM,MAAK;QAAK,MAAK;QAAW,WAAU;QAAY,UAAAiC,EAAK;OAAW,CAAA,CAClF;MACE,CAAA,CAAA;KACP,CAAA,GAAAL,IAAMF,EAAM,SAAS,KACrB,kBAAC,OAAD,EAAK,WAAWH,EAAG,eAAeI,IAAc,eAAe,WAAW,EAAI,CAAA,CAE5E;IApCK,GAAAM,EAAK,EAoCV;GAEN,CAAC;EACE,CAAA,CACA;;AAEP;AAEA,EAAmB,cAAc;;;AC3DjC,SAAgBE,EAAY,EAAE,UAAO,UAAO,aAAU,aAAU,gBAA+B;CAC9F,OACC,kBAAC,OAAD;EACC,kBAAe;EACf,aAAU;EACV,cAAYC;EACZ,WAAWb,EAAG,mCAAmCC,CAAS;EAE1D,UAAA,kBAACb,GAAD;GAAW,MAAK;GACd,UAAA0B,EAAM,KAAK,MAAO;IAClB,IAAMC,IAAOC,EAAG,MACVC,IAASD,EAAG,OAAOE;IACzB,OACC,kBAAC5B,GAAD;KASC,QAAQ6B,IAAW,kBAAC,UAAD,EAAQ,MAAK,SAAU,CAAA,IAAI,KAAA;KAC9C,SAASA,UAAiBA,EAASH,EAAG,EAAE,IAAI,KAAA;KAC5C,gBAAcG,IAAWF,IAAS,KAAA;KAClC,gBAAc,CAACE,KAAYF,IAAS,KAAO,KAAA;KAC3C,cAAYA,IAAS,WAAW;KAChC,WAAWjB,EAIV,gDACAmB,KAAY,kBACZF,IAASnC,EAAmB,aAAaqC,KAAYrC,EAAmB,QACzE;KArBD,UAAA;MAuBE,CAAC,CAACiC,KACF,kBAAC9B,GAAD;OAAW,SAAQ;OAAO,WAAWe,EAAGiB,IAAS,2BAA2B,uBAAuB;OAClG,UAAA,kBAACF,GAAD,CAAO,CAAA;MACG,CAAA;MAEZ,kBAAC1B,GAAD,EAAA,UAAA,CACC,kBAACE,GAAD;OAAW,MAAM0B;OAAS,UAAAD,EAAG;MAAiB,CAAA,GAC7C,CAAC,CAACA,EAAG,QAAQ,kBAAC9B,GAAD;OAAiB,OAAO;OAAI,UAAA8B,EAAG;MAAsB,CAAA,CACvD,EAAA,CAAA;MACb,kBAAC7B,GAAD,EAAA,UAAA,CACE,OAAO6B,EAAG,SAAU,YACpB,kBAAChC,GAAD;OAAO,MAAK;OAAY,WAAU;OAChC,UAAAgC,EAAG;MACE,CAAA,GAER,kBAACI,GAAD,EACC,WAAWpB,EAAG,4CAA4CiB,KAAU,wBAAwB,EAC5F,CAAA,CACW,EAAA,CAAA;KACR;IAzCA,GAAAD,EAAG,EAyCH;GAER,CAAC;EACS,CAAA;CACP,CAAA;AAEP;AAEA,EAAY,cAAc;;;AC5D1B,IAAaK,IAA8C,EAC1D,iBAAiB,qBAClB,GAGMC,IAAmB,KAoBZC,IAAaC,EAAyC,SAAoB,EACtF,UACA,gBAAa,qBACb,cACA,aACA,SAAS3B,GACT,cAAc4B,GACd,GAAGC,KACD,GAAK;CACP,IAAM5B,IAAUC,EAAWsB,GAA0BxB,CAAW,GAC1D,CAACoB,GAAQU,KAAaC,EAAwBd,EAAM,EAAE,EAAE,MAAM,IAAI,GAElEe,IAAYC,EAAgD,IAAI,GAChEC,IAAcD,EAAkD,KAAA,CAAS,GAEzEE,IAAalB,EAAM,KAAK,MAAOE,EAAG,EAAE,CAAC,CAAC,KAAK,IAAQ,GAEnDiB,IAAiBC,QAAkB;EAExC,AADA,aAAaH,EAAY,OAAO,GAChC,EAAY,UAAU,iBAAiB;GACtC,AAAIF,EAAU,YAAS,EAAU,QAAQ,UAAU;EACpD,GAAGP,CAAgB;CACpB,GAAG,CAAC,CAAC;CAuCL,OArCAa,QAAgB;EAGf,IAAMC,UAAiB;GACtB,IAAMC,IAAOR,EAAU;GACvB,AAAKQ,MAEDA,EAAK,UAAS,EAAU,UAAU,OACjCJ,EAAe;EACrB;EAEA,OADA,SAAS,iBAAiB,UAAUG,GAAU;GAAE,SAAS;GAAM,SAAS;EAAK,CAAC,SACjE;GAEZ,AADA,SAAS,oBAAoB,UAAUA,GAAU,EAAE,SAAS,GAAK,CAAC,GAClE,aAAaL,EAAY,OAAO;EACjC;CACD,GAAG,CAACE,CAAc,CAAC,GAEnBE,QAAgB;EACf,IAAMG,IAAMN,IAAaA,EAAW,MAAM,IAAQ,IAAI,CAAC,GACjDO,oBAAe,IAAI,IAAqB,GACxCC,IAAM,IAAI,sBACd,MAAY;GAEZ,IADAC,EAAQ,SAAS,MAAUF,EAAa,IAAIG,EAAM,OAAO,IAAIA,EAAM,cAAc,CAAC,GAC9Eb,EAAU,SAAS;GAEvB,IAAMc,IAAOL,EAAI,MAAM,MAAOC,EAAa,IAAIK,CAAE,CAAC;GAClD,AAAID,KAAMhB,EAAUgB,CAAI;EACzB,GACA;GAAE;GAAY,WAAW;EAAE,CAC5B;EAKA,OAJAL,EAAI,SAAS,MAAO;GACnB,IAAMO,IAAK,SAAS,eAAeD,CAAE;GACrC,AAAIC,KAAIL,EAAI,QAAQK,CAAE;EACvB,CAAC,SACYL,EAAI,WAAW;CAC7B,GAAG,CAACR,GAAYc,CAAU,CAAC,GAG1B,kBAAC,OAAD;EACM;EACL,WAAW9C,EAAG,0BAA0BC,CAAS;EACjD,cAAYwB,KAAa3B,EAAQ;EACjC,GAAI4B;EAEJ,UAAA,kBAAC9C,GAAD;GAAO,KAAI;GAAM,WAAU;GACzB,UAAAkC,EAAM,KAAK,MAAO;IACnB,IAAMC,IAAOC,EAAG,MACV+B,IAAW9B,MAAWD,EAAG;IAC/B,OACC,kBAAC,KAAD;KAEC,MAAM,IAAIA,EAAG;KACb,gBAAc+B,IAAW,aAAa,KAAA;KACtC,UAAU,MAAM;MAOf,AANAC,EAAE,eAAe,GACjB,EAAU,UAAU;OAAE,IAAIhC,EAAG;OAAI,SAAS;MAAM,GAEhDiB,EAAe,GACf,SAAS,eAAejB,EAAG,EAAE,CAAC,EAAE,eAAe;OAAE,UAAU;OAAU,OAAO;MAAQ,CAAC,GACrFW,EAAUX,EAAG,EAAE,GACfG,IAAWH,EAAG,EAAE;KACjB;KACA,WAAWhB,EACV,qGAAqGrB,EAAa,QAClHoE,IAAWjE,EAAmB,aAAa,yBAAyBA,EAAmB,UACxF;KAhBD,UAAA,CAkBE,CAAC,CAACiC,KAAQ,kBAACA,GAAD,EAAM,WAAU,wBAAyB,CAAA,GACpD,kBAACtC,GAAD;MAAM,KAAI;MAAO,MAAK;MAAU,QAAQsE,IAAW,aAAa;MAAW,UAAA/B,EAAG;KAAY,CAAA,CACxF;IAnBG,GAAAA,EAAG,EAmBN;GAEJ,CAAC;EACK,CAAA;CACH,CAAA;AAEP,CAAC;AAED,EAAW,cAAc;;;ACzHzB,IAAaiC,IAAwC,EACpD,iBAAiB,kBAClB;AAiDA,SAASC,EAAa,GAAqD;CAC1E,OAAO,OAAOC,KAAU,YAAY,OAAOA,KAAU,YAAY,OAAOA,KAAU;AACnF;AAEA,IAAaC,IAAU5B,EAAsC,SAAiB,EAC7E,UACA,QAAQ6B,GACR,gBACA,eACA,cACA,kBACA,wBACA,SAASxD,GACT,cAAc4B,GACd,GAAGC,KACD,GAAK;CACP,IAAM5B,IAAUC,EAAWkD,GAAuBpD,CAAW,GACvDyD,IAAe9D,EAAsB,EAAE,cAAW,CAAC,GACnD+D,IAASC,QACRH,KAAc,CACnB;EAAE,IAAI;EAAkB,OAAOvC,KAAS,CAAC;EAAG,aAAa;CAAM,CAChE,GACA,CAACuC,GAAYvC,CAAK,CACnB,GACM2C,IAAmBD,QAAc;EACtC,IAAIE,MAAgB,KAAA,GAAW,OAAO;EACtC,IAAMC,IAAalE,EAAoBiE,CAAW;EAClD,OAAOH,EACL,SAAS,MAAUK,EAAM,MAAM,KAAK,MAASnE,EAAoBoE,EAAK,IAAI,CAAC,CAAC,CAAC,CAC7E,QAAQ,MAASF,MAAeG,KAAQH,EAAW,WAAW,GAAGG,EAAK,EAAE,CAAC,CAAC,CAC1E,MAAM,GAAG,MAAMC,EAAE,SAASC,EAAE,MAAM,CAAC,CAAC,MAAM;CAC7C,GAAG,CAACN,GAAaH,CAAM,CAAC,GAElB,CAACU,GAAWC,KAAgBtC,QACjC,OAAO,YAAY2B,EAAO,KAAK,MAAM,CAACY,EAAE,IAAI,EAAQA,EAAE,gBAAiB,CAAC,CAAC,CAC1E,GAEMC,KAAe,MACpBF,GAAc,OAAU;EAAE,GAAGG;GAAOzB,IAAK,CAACyB,EAAKzB;CAAI,EAAE,GAEhD0B,IACLC,KAAuBA,EAAoB,SAAS,IACjDA,IACAzF,EAAmB;CAEvB,OACC,kBAAC,OAAD;EACM;EACL,cAAY2C,KAAa3B,EAAQ;EACjC,WAAWE,EAAG,uBAAuBC,CAAS;EAC9C,GAAIyB;EAEJ,UAAA,kBAAC9C,GAAD;GAAO,KAAI;GAAK,WAAU;GACxB,UAAA2E,EAAO,KAAK,MAAU;IACvB,IAAMiB,IAAcZ,EAAM,gBAAgB,MAASK,EAAUL,EAAM,KAC7Da,IAAY,CAAC,CAACb,EAAM,OACpBc,IAAoB,CAACF;IAE3B,OACC,kBAAC5F,GAAD;KAAsB,KAAI;KAAM,WAAU;KAA1C,UAAA,CACE,CAAC,CAAC6F,MACFb,EAAM,gBAAgB,KA6BrBV,EAAaU,EAAM,KAAK,IACvB,kBAAClF,GAAD;MAAc,KAAI;MAAM,WAAU;MAChC,UAAAkF,EAAM;KACM,CAAA,IACXA,EAAM,QAhCV,kBAACnD,GAAD;MACC,MAAK;MACL,MAAK;MACL,aAAY;MACZ,MAAK;MACL,WAAA;MACA,eAAe2D,EAAYR,EAAM,EAAE;MACnC,WAAW5D,EACV,4DACA,yBACA,yCACD;MACA,iBAAe,CAACwE;MAZjB,UAAA,CAcEtB,EAAaU,EAAM,KAAK,IACxB,kBAAClF,GAAD;OAAc,KAAI;OAChB,UAAAkF,EAAM;MACM,CAAA,IACXA,EAAM,OACV,kBAACe,GAAD;OACC,WAAW3E,EACV,qCACAwE,KAAe,YAChB;OACA,eAAY;MACZ,CAAA,CACM;KAER,CAAA,IAOD,CAAC,CAACE,KACF,kBAAC9F,GAAD;MAAO,KAAI;MAAM,WAAU;MACzB,UAAAgF,EAAM,MAAM,KAAK,MAAS;OAC1B,IAAM7C,IAAO8C,EAAK,MAEZd,IADWtD,EAAoBoE,EAAK,IACzB,MAAaJ;OAC9B,OACC,kBAACmB,GAAD,EAAA,UACEtB,EAAa;QACb,MAAMO,EAAK;QACX,QAAQd;QACR,UAAUc,EAAK;QACf,gBAAgBd,IAAW,SAAS,KAAA;QACpC,WAAW/C,EACV,yEACA,6BACA,8BAA8BrB,EAAa,QAC3CG,EAAmB,UACnB+E,EAAK,YAAY,kCACjBd,KAAYuB,GACZO,CACD;QACA,UAAU,kBAAArG,GAAA,EAAA,UAAA;SACR,CAAC,CAACuC,KACF,kBAACA,GAAD,EAAM,WAAWf,EAChB,sBACA+C,IAAW,2BAA2B,uBACvC,EAAI,CAAA;SAEJG,EAAaW,EAAK,KAAK,IACvB,kBAACpF,GAAD;UAAM,KAAI;UAAO,MAAK;UAAU,QAAO;UAAS,YAAW;UAAQ,WAAU;UAC3E,UAAAoF,EAAK;SACD,CAAA,IACHA,EAAK;SACR,CAAC,CAACA,EAAK,SAAS,kBAAC7E,GAAD;UAAO,MAAK;UAAY,WAAU;UAAY,UAAA6E,EAAK;SAAa,CAAA;QAChF,EAAA,CAAA;OACH,CAAC,EACQ,GA9BKA,EAAK,IA8BV;MAEZ,CAAC;KACK,CAAA,CAEF;IAhFK,GAAAD,EAAM,EAgFX;GAER,CAAC;EACK,CAAA;CACH,CAAA;AAEP,CAAC;AAED,EAAQ,cAAc"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation-Bt-v7rWP.js","names":["_Fragment","Text","DisplayLabel","Heading","headingRoleSizes","copyRoleProps","focusRecipes","Stack","interactionRecipes","Badge","Separator","TabScrollViewport","hasPageHeaderCommands","PageHeaderCommands","Fragment$1","LanguageSwitcher","onChange","onValueChange","onSelect","handleSelect","useCallback","isActive","nextValue","locales","choices","active","value","locale","label","onRenderLabel","variant","Globe","Fragment","cn","index","Button","defaultNavigationTabsStrings","normalizePath","hashRouteIndex","rawUrl","origin","NavigationTabs","forwardRef","stringsProp","strings","useStrings","activePath","currentPath","prominent","list","items","item","Icon","scrollable","className","scrollStrings","isSimpleText","PageHeading","resolvedBadges","badges","badge","hasCommands","primaryAction","secondaryActions","actionsRegion","actions","breadcrumbs","leading","contentClassName","eyebrow","eyebrowClassName","beforeTitle","titlePrefix","titleRowClassName","textGap","title","headingTag","titleSize","titleClassName","titleSuffix","description","afterDescription","descriptionClassName","actionsClassName","children","withSeparator"],"sources":["../src/components/base/navigation/language-switcher.tsx","../src/components/base/navigation/navigation-tabs.tsx","../src/components/base/navigation/page-header/page-header.tsx"],"sourcesContent":["/**\n * LanguageSwitcher — locale picker with two layouts: `buttons` (a button\n * row) and `inline` (small text buttons separated by dots, prefixed\n * with a globe icon). Defaults to `buttons`.\n *\n * The library never navigates on its own. The consumer wires routing /\n * locale switching through the value change callback.\n */\nimport { Globe } from 'lucide-react';\nimport { Fragment, useCallback } from 'react';\n\nimport { Button } from '../buttons';\nimport { Text } from '../../typography';\nimport { Stack } from '../structure';\nimport { cn } from '../../../lib/utils';\nimport type { LocaleOption } from '../../../types/locale.types';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\ntype LanguageSwitcherLocale = Omit<LocaleOption, 'active'> & { active?: boolean };\n\nexport interface LanguageSwitcherProps {\n\t/** Locales to offer, in order. Their active flags apply when value is omitted. */\n\tlocales: LanguageSwitcherLocale[];\n\t/** Controlled current locale. Takes precedence over the option flags. */\n\tvalue?: string;\n\t/** Requests another locale. Takes precedence over onSelect. */\n\tonValueChange?: (value: string) => void;\n\t/** Custom label for each locale. Defaults to `nativeLabel`. */\n\tonRenderLabel?: (options: LocaleOption) => string;\n\t/** Layout: `buttons` (default) for a row of buttons, `inline` for compact dot-separated text buttons. */\n\tvariant?: 'buttons' | 'inline';\n\t/** Called with the chosen locale's value. Not called for the current locale. */\n\tonSelect?: (value: string) => void;\n}\n\nexport function LanguageSwitcher({\n\tlocales,\n\tvalue,\n\tonValueChange,\n\tonRenderLabel,\n\tvariant = 'buttons',\n\tonSelect,\n}: LanguageSwitcherProps) {\n\tconst onChange = onValueChange ?? onSelect;\n\tconst handleSelect = useCallback((nextValue: string, isActive: boolean) => {\n\t\tif (isActive) {\n\t\t\treturn;\n\t\t}\n\n\t\tonChange?.(nextValue);\n\t}, [onChange]);\n\n\tif (locales.length === 0) {\n\t\treturn null;\n\t}\n\n\tconst choices = locales.map(locale => {\n\t\tconst active = value === undefined ? (locale.active ?? false) : locale.value === value;\n\t\t// Preserve the original label input when it already has the resolved flag.\n\t\tconst label = onRenderLabel\n\t\t\t? onRenderLabel(locale.active === active ? locale as LocaleOption : { ...locale, active })\n\t\t\t: locale.nativeLabel;\n\t\treturn { value: locale.value, active, label };\n\t});\n\n\tif (variant === 'inline') {\n\t\treturn (\n\t\t\t// Both layouts start at the parent's start edge, like other inline controls; a\n\t\t\t// parent that centres its content (a footer, say) centres the switcher too.\n\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\" wrap={false} className=\"language-switcher--component\">\n\t\t\t\t<Globe className=\"size-icon shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\" wrap className=\"min-w-0\">\n\t\t\t\t\t{choices.map((locale, index) => (\n\t\t\t\t\t\t<Fragment key={locale.value}>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-current={locale.active ? 'true' : undefined}\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\thandleSelect(locale.value, locale.active)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t`${interactionRecipes.nativeButtonReset} cursor-pointer rounded-radius text-pxs outline-none transition-colors ${focusRecipes.text}`,\n\t\t\t\t\t\t\t\t\tlocale.active\n\t\t\t\t\t\t\t\t\t\t? 'text-primary-accent font-medium'\n\t\t\t\t\t\t\t\t\t\t: 'text-muted-foreground hover:text-foreground',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"pxs\" weight={locale.active ? 'medium' : 'regular'} className=\"text-inherit\">\n\t\t\t\t\t\t\t\t\t{locale.label}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t{index < choices.length - 1 && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\tclassName=\"size-1 rounded-full bg-border\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t))}\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Stack direction=\"horizontal\" align=\"center\" wrap gap=\"md\" className=\"language-switcher--component\">\n\t\t\t{choices.map(locale => (\n\t\t\t\t<Button\n\t\t\t\t\tkey={locale.value}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\tbuttonStyle={locale.active ? 'solid' : 'ghost'}\n\t\t\t\t\taria-current={locale.active ? 'true' : undefined}\n\t\t\t\t\tonClick={() => handleSelect(locale.value, locale.active)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'min-w-18 justify-center transition-colors',\n\t\t\t\t\t\tlocale.active ? 'text-foreground' : 'text-muted-foreground',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{locale.label}\n\t\t\t\t</Button>\n\t\t\t))}\n\t\t</Stack>\n\t);\n}\n\nLanguageSwitcher.displayName = 'LanguageSwitcher';\n","/**\n * NavigationTabs — canonical route-tab navigation.\n *\n * The default compact treatment works for ordinary application navigation;\n * `variant=\"prominent\"` provides the stronger filled treatment without\n * introducing a second component or item vocabulary.\n */\nimport { forwardRef, type ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\n\nimport { Badge } from '../badge';\nimport { Button } from '../buttons';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { TabScrollViewport, type TabsScrollStrings } from './tab-scroll-viewport';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport interface NavigationTabItem {\n\ttitle: string;\n\thref: string;\n\ticon?: LucideIcon | string;\n\tbadge?: ReactNode;\n\tactive?: boolean;\n\tdisabled?: boolean;\n}\n\nexport interface NavigationTabsStrings {\n\ttabsAria: string;\n}\n\nexport const defaultNavigationTabsStrings: NavigationTabsStrings = {\n\ttabsAria: 'Tab navigation',\n};\n\nexport type NavigationTabsVariant = 'default' | 'prominent';\n\nexport interface NavigationTabsProps {\n\t/** Tabs to render, in order. */\n\titems: readonly NavigationTabItem[];\n\t/** Path of the active route, used to mark the current tab. */\n\tcurrentPath?: string;\n\t/** Visual treatment of the tab row. */\n\tvariant?: NavigationTabsVariant;\n\t/** Show previous/next controls when route tabs overflow. Defaults to true. */\n\tscrollable?: boolean;\n\t/** Accessible labels for the previous/next scroll controls. */\n\tscrollStrings?: StringsProp<TabsScrollStrings>;\n\t/** Overrides the tab row's own copy. */\n\tstrings?: StringsProp<NavigationTabsStrings>;\n\tclassName?: string;\n}\n\nfunction normalizePath(rawUrl: string): string {\n\tconst hashRouteIndex = rawUrl.indexOf('#/');\n\tif (hashRouteIndex >= 0) {\n\t\treturn rawUrl.slice(hashRouteIndex).split('?')[0]?.replace(/\\/+$/, '') || '#/';\n\t}\n\n\ttry {\n\t\tconst origin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost';\n\t\tconst parsed = new URL(rawUrl, origin);\n\t\treturn parsed.pathname.replace(/\\/+$/, '') || '/';\n\t} catch {\n\t\treturn rawUrl.split('?')[0]?.replace(/\\/+$/, '') || '/';\n\t}\n}\n\nexport const NavigationTabs = forwardRef<HTMLDivElement, NavigationTabsProps>(function NavigationTabs({\n\titems,\n\tcurrentPath,\n\tvariant = 'default',\n\tscrollable = true,\n\tscrollStrings,\n\tstrings: stringsProp,\n\tclassName,\n}: NavigationTabsProps, ref) {\n\tconst strings = useStrings(defaultNavigationTabsStrings, stringsProp);\n\tconst activePath = normalizePath(\n\t\tcurrentPath ?? (typeof window !== 'undefined' ? window.location.pathname : '/'),\n\t);\n\tconst prominent = variant === 'prominent';\n\n\tconst list = <Stack\n\t\t\t\trender={<nav aria-label={strings.tabsAria} />}\n\t\t\t\tdirection=\"horizontal\"\n\t\t\t\tgap=\"2xs\"\n\t\t\t\twrap={false}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'navigation-tabs--list w-max rounded-radius bg-muted p-space-2xs',\n\t\t\t\t\tprominent && 'rounded-radius bg-muted',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{items.map((item) => {\n\t\t\t\t\tconst isActive = item.active ?? activePath === normalizePath(item.href);\n\t\t\t\t\tconst Icon = typeof item.icon === 'string' ? undefined : item.icon;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={item.href}\n\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\ttone={isActive && prominent ? 'primary' : 'secondary'}\n\t\t\t\t\t\t\tbuttonStyle={isActive && prominent ? 'solid' : 'ghost'}\n\t\t\t\t\t\t\ticon={Icon}\n\t\t\t\t\t\t\taria-current={isActive ? 'page' : undefined}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'navigation-tabs--item shrink-0',\n\t\t\t\t\t\t\t\t'rounded-radius',\n\t\t\t\t\t\t\t\t// Shared segmented recipe (Tabs, OverflowTabBar): a lifted card-coloured\n\t\t\t\t\t\t\t\t// active tab on the muted track, in light and dark alike. The current tab\n\t\t\t\t\t\t\t\t// holds its state under hover and press; the others change colour only.\n\t\t\t\t\t\t\t\t!prominent && isActive && interactionRecipes.segmentActiveButton,\n\t\t\t\t\t\t\t\t!prominent && !isActive && interactionRecipes.segmentInactiveButton,\n\t\t\t\t\t\t\t\tprominent && isActive && interactionRecipes.currentButtonHold,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{typeof item.icon === 'string' && (\n\t\t\t\t\t\t\t\t<span className=\"navigation-tabs--icon text-inherit\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t{item.icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\t\tsize=\"inherit\"\n\t\t\t\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\t\t\t\tlineHeight=\"none\"\n\t\t\t\t\t\t\t\tclassName=\"navigation-tabs--title text-inherit\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{item.badge !== undefined && item.badge !== null && (\n\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\ttone=\"secondary\"\n\t\t\t\t\t\t\t\t\tclassName=\"navigation-tabs--badge\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.badge}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>;\n\treturn <div ref={ref} className={cn('navigation-tabs--component', 'w-full min-w-0', !scrollable && 'overflow-x-auto', className)}>\n\t\t{scrollable ? <TabScrollViewport strings={scrollStrings}>{list}</TabScrollViewport> : list}\n\t</div>;\n});\n\nNavigationTabs.displayName = 'NavigationTabs';\n","/**\n * PageHeading — reusable visual heading block for sections and resources.\n * Higher-level layout components add routing/back behavior around this base\n * visual primitive instead of reimplementing title, description, badge, and\n * action spacing. `primaryAction` and `secondaryActions` describe commands by\n * role; the heading owns their treatment and placement for every header built\n * on it.\n */\nimport type { Key, ReactNode } from 'react';\nimport { DisplayLabel, Heading, Text, type HeadingSize, type HeadingTag } from '../../../typography';\nimport {copyRoleProps, headingRoleSizes} from '../../../typography/text.styles';\nimport { Badge, type BadgeTone } from '../../badge';\nimport { Separator } from '../../display/separator';\nimport { Stack, type TextGap } from '../../structure';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\thasPageHeaderCommands,\n\tPageHeaderCommands,\n\ttype PageHeaderAction,\n\ttype PageHeaderLinkRenderer,\n} from './page-header-commands';\n\nexport interface PageHeadingBadge {\n\tlabel: ReactNode;\n\ttone?: BadgeTone;\n\tkey?: Key;\n}\n\n/**\n * Slot map, top to bottom and outside in:\n *\n * ```text\n * breadcrumbs\n * leading │ eyebrow\n * │ beforeTitle\n * │ titlePrefix │ title badges titleSuffix │ actions\n * │ │ description\n * │ │ afterDescription\n * children\n * ─────────────────────────────────────────── (withSeparator)\n * ```\n */\nexport interface PageHeadingProps {\n\t/** Small label above the title. Plain text is rendered as a `DisplayLabel`. */\n\teyebrow?: ReactNode;\n\t/** The page title. Plain text is rendered as a `Heading`; pass an element to own the markup. */\n\ttitle: ReactNode;\n\t/** Supporting sentence under the title, capped at `max-w-2xl` and aligned to the title's left edge. */\n\tdescription?: ReactNode;\n\t/** Title/description rhythm. Defaults to normal. */\n\ttextGap?: TextGap;\n\t/** Heading level for a plain-text `title`. Default: `'h2'`. Set for correct document outline. */\n\theadingTag?: HeadingTag;\n\t/** Visual title scale, independent of heading level. Defaults to the subject role (`base`). */\n\ttitleSize?: HeadingSize;\n\t/** Convenience for a single badge beside the title. Ignored when `badges` is set. */\n\tbadge?: PageHeadingBadge;\n\t/** Badges beside the title, in order. Takes precedence over `badge`. */\n\tbadges?: PageHeadingBadge[];\n\t/** Breadcrumb trail rendered above the header block. */\n\tbreadcrumbs?: ReactNode;\n\t/** Content to the left of the entire header column — an avatar or back button. Top-aligned. */\n\tleading?: ReactNode;\n\t/** Free slot between the eyebrow and the title row, for a banner or status strip. */\n\tbeforeTitle?: ReactNode;\n\t/**\n\t * Content immediately left of the title, vertically centred on the title\n\t * line alone. Unlike `leading`, the description aligns to the title's left\n\t * edge rather than to this slot, so an icon here never shifts the copy.\n\t */\n\ttitlePrefix?: ReactNode;\n\t/** Content after the title and badges, on the same line. */\n\ttitleSuffix?: ReactNode;\n\t/** Content directly beneath the description, sharing its alignment — a metadata line. */\n\tafterDescription?: ReactNode;\n\t/**\n\t * Independent actions column beside the copy; follows it on narrow widths.\n\t * Holds non-command controls such as a period select; they render before\n\t * the role-based commands.\n\t */\n\tactions?: ReactNode;\n\t/**\n\t * The header's one main command: a solid primary button after the secondary\n\t * commands, placed in the command menu below 40rem of header width.\n\t */\n\tprimaryAction?: PageHeaderAction;\n\t/**\n\t * Supporting commands in priority order. The first two render as outline\n\t * buttons before the primary command; the rest, and every destructive\n\t * command, move into the More actions menu, which always closes the row.\n\t * Below 40rem of header width, every command collapses into that menu.\n\t */\n\tsecondaryActions?: readonly PageHeaderAction[];\n\t/**\n\t * How many routine secondary commands render as outline buttons on wide\n\t * headers; later ones join the More actions menu. Use `1` or `0` when long\n\t * labels beside the primary command would crowd the header; `Infinity`\n\t * keeps every routine command inline. @default 2\n\t */\n\tmaxVisibleSecondaryActions?: number;\n\t/** Accessible name of the More actions menu trigger. Default: `'More actions'`. */\n\tmoreActionsLabel?: string;\n\t/** Renders `href` commands as framework links. Defaults to a native anchor. */\n\trenderLink?: PageHeaderLinkRenderer;\n\t/** Content below the whole header block, above the separator. */\n\tchildren?: ReactNode;\n\t/** Merged onto the `<header>` root. */\n\tclassName?: string;\n\t/** Merged onto the column holding eyebrow, title, and description. */\n\tcontentClassName?: string;\n\t/** Merged onto the eyebrow. Only applies when `eyebrow` is plain text. */\n\teyebrowClassName?: string;\n\t/** Merged onto the title. Only applies when `title` is plain text. */\n\ttitleClassName?: string;\n\t/**\n\t * Merged onto the title row's grid. A `gap-space-md` here sets the\n\t * `titlePrefix`-to-title rhythm without also opening the gap under the title.\n\t */\n\ttitleRowClassName?: string;\n\t/** Merged onto the description. Only applies when `description` is plain text. */\n\tdescriptionClassName?: string;\n\t/** Merged onto the actions cluster. */\n\tactionsClassName?: string;\n\t/**\n\t * Draws a rule beneath the header. Default: `false` — the page rhythm (gap\n\t * between header and body) separates them; opt in where a rule is the design.\n\t */\n\twithSeparator?: boolean;\n}\n\nfunction isSimpleText(value: ReactNode): value is string | number | bigint {\n\treturn typeof value === 'string' || typeof value === 'number' || typeof value === 'bigint';\n}\n\nexport function PageHeading({\n\teyebrow,\n\ttitle,\n\tdescription,\n\ttextGap = 'normal',\n\theadingTag = 'h2',\n\ttitleSize = headingRoleSizes.subject,\n\tbadge,\n\tbadges,\n\tbreadcrumbs,\n\tleading,\n\tbeforeTitle,\n\ttitlePrefix,\n\ttitleSuffix,\n\tafterDescription,\n\tactions,\n\tprimaryAction,\n\tsecondaryActions,\n\tmaxVisibleSecondaryActions,\n\tmoreActionsLabel = 'More actions',\n\trenderLink,\n\tchildren,\n\tclassName,\n\tcontentClassName,\n\teyebrowClassName,\n\ttitleClassName,\n\ttitleRowClassName,\n\tdescriptionClassName,\n\tactionsClassName,\n\twithSeparator = false,\n}: PageHeadingProps) {\n\tconst resolvedBadges = badges ?? (badge ? [badge] : []);\n\t// Custom `actions` content leads; role-based commands close the region.\n\tconst hasCommands = hasPageHeaderCommands(primaryAction, secondaryActions);\n\tconst actionsRegion = hasCommands ? (\n\t\t<>\n\t\t\t{actions}\n\t\t\t<PageHeaderCommands\n\t\t\t\tprimaryAction={primaryAction}\n\t\t\t\tsecondaryActions={secondaryActions}\n\t\t\t\tmaxVisibleSecondaryActions={maxVisibleSecondaryActions}\n\t\t\t\tmoreActionsLabel={moreActionsLabel}\n\t\t\t\trenderLink={renderLink}\n\t\t\t/>\n\t\t</>\n\t) : actions;\n\n\treturn (\n\t\t<header className={cn('page-heading--component page-header--component @container/page-header', 'w-full', className)}>\n\t\t\t{!!breadcrumbs && <div className=\"mb-space-lg\">{breadcrumbs}</div>}\n\n\t\t\t<Stack direction=\"horizontal\" gap=\"lg\" align=\"start\" wrap={false}>\n\t\t\t\t{leading}\n\t\t\t\t<Stack gap=\"dense\" className={cn('page-header--content-row flex-1', contentClassName)}>\n\t\t\t\t\t{!!eyebrow && (isSimpleText(eyebrow) ? (\n\t\t\t\t\t\t<DisplayLabel tag=\"div\" className={eyebrowClassName}>\n\t\t\t\t\t\t\t{eyebrow}\n\t\t\t\t\t\t</DisplayLabel>\n\t\t\t\t\t) : eyebrow)}\n\t\t\t\t\t{beforeTitle}\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tdirection={{ base: 'vertical', sm: 'horizontal' }}\n\t\t\t\t\t\tgap=\"lg\"\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\twrap={{ base: false, sm: true }}\n\t\t\t\t\t\tclassName=\"page-header--headline-row min-w-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* The copy owns its width independently of actions. The inner\n\t\t\t\t\t\t grid keeps the description aligned after a title prefix. */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'page-header--copy-column page-header--title-row grid min-w-0 w-full flex-1 basis-full items-center gap-x-space-md sm:w-auto sm:basis-64',\n\t\t\t\t\t\t\t\ttitlePrefix ? 'grid-cols-[auto_minmax(0,1fr)]' : 'grid-cols-[minmax(0,1fr)]',\n\t\t\t\t\t\t\t\ttitleRowClassName,\n\t\t\t\t\t\t\t\ttextGap === 'normal' ? 'gap-y-normal' : 'gap-y-dense',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!titlePrefix && (\n\t\t\t\t\t\t\t\t<span className=\"page-header--title-prefix inline-flex shrink-0 items-center self-center\">\n\t\t\t\t\t\t\t\t\t{titlePrefix}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"md\" align=\"center\" wrap className=\"page-header--title-line min-h-action-sm min-w-0\">\n\t\t\t\t\t\t\t\t{isSimpleText(title) ? (\n\t\t\t\t\t\t\t\t\t<Heading tag={headingTag} size={titleSize} className={cn('page-header--title min-w-0 [overflow-wrap:anywhere] border-0 pb-0', titleClassName)}>\n\t\t\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t\t\t</Heading>\n\t\t\t\t\t\t\t\t) : title}\n\t\t\t\t\t\t\t\t{resolvedBadges.length > 0 && (\n\t\t\t\t\t\t\t\t\t<Stack direction=\"horizontal\" gap=\"sm\" wrap className=\"page-header--badges min-w-0 max-w-full\">\n\t\t\t\t\t\t\t\t\t\t{resolvedBadges.map((item, index) => (\n\t\t\t\t\t\t\t\t\t\t\t<Badge key={item.key ?? index} tone={item.tone ?? 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{titleSuffix}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t{(!!description || !!afterDescription) && (\n\t\t\t\t\t\t\t\t<Stack gap=\"dense\" className={cn('page-header--title-block min-w-0', !!titlePrefix && 'col-start-2')}>\n\t\t\t\t\t\t\t\t\t{!!description && (isSimpleText(description) ? (\n\t\t\t\t\t\t\t\t\t\t<Text {...copyRoleProps.structuralDescription} className={cn('page-header--description max-w-2xl [overflow-wrap:anywhere]', descriptionClassName)}>\n\t\t\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t) : description)}\n\t\t\t\t\t\t\t\t\t{afterDescription}\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!actionsRegion && (\n\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\tdirection=\"horizontal\"\n\t\t\t\t\t\t\t\tgap=\"md\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'page-header--actions max-w-full shrink-0',\n\t\t\t\t\t\t\t\t\thasCommands && 'self-end justify-end sm:self-auto',\n\t\t\t\t\t\t\t\t\tactionsClassName,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{actionsRegion}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\n\t\t\t{!!children && <div className=\"mt-space-xl\">{children}</div>}\n\n\t\t\t{!!withSeparator && <Separator className=\"mt-space-xl\" />}\n\t\t</header>\n\t);\n}\n\nPageHeading.displayName = 'PageHeading';\n"],"mappings":"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"}
|
package/dist/number-CYqBcrSj.js
DELETED
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { f as e, m as t } from "./ui-provider-C-74NVLc.js";
|
|
3
|
-
import { t as n } from "./utils-DhuoqFy4.js";
|
|
4
|
-
import { c as r } from "./typography-C7-YMW1S.js";
|
|
5
|
-
import { a as i, n as a, s as o, t as s } from "./value-typography-uSzzG9Gf.js";
|
|
6
|
-
import { useCallback as c } from "react";
|
|
7
|
-
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
8
|
-
//#region src/lib/money-format.ts
|
|
9
|
-
function d(e) {
|
|
10
|
-
let t = e.trim();
|
|
11
|
-
if (!t) return "";
|
|
12
|
-
let n = t.lastIndexOf(","), r = t.lastIndexOf(".");
|
|
13
|
-
if (n >= 0 && r >= 0) {
|
|
14
|
-
let e = n > r ? "," : ".", i = e === "," ? "." : ",";
|
|
15
|
-
return t.replace(RegExp(`\\${i}`, "g"), "").replace(e, ".");
|
|
16
|
-
}
|
|
17
|
-
if (n >= 0) {
|
|
18
|
-
let [e, n = ""] = t.split(",");
|
|
19
|
-
return n.length > 0 && n.length <= 2 ? `${e.replace(/,/g, "")}.${n}` : t.replace(/,/g, "");
|
|
20
|
-
}
|
|
21
|
-
return /^[+-]?\d+(?:\.\d{3}){2,}$/.test(t) ? t.replace(/\./g, "") : t;
|
|
22
|
-
}
|
|
23
|
-
function f(e) {
|
|
24
|
-
if (e == null || e === "") return null;
|
|
25
|
-
if (typeof e == "number") return Number.isFinite(e) ? e : null;
|
|
26
|
-
let t = Number.parseFloat(d(e));
|
|
27
|
-
return Number.isFinite(t) ? t : null;
|
|
28
|
-
}
|
|
29
|
-
function p(e, t) {
|
|
30
|
-
return e === void 0 || !Number.isFinite(e) ? t : Math.min(100, Math.max(0, Math.trunc(e)));
|
|
31
|
-
}
|
|
32
|
-
function m(e, t, n = {
|
|
33
|
-
minimumFractionDigits: 2,
|
|
34
|
-
maximumFractionDigits: 2
|
|
35
|
-
}) {
|
|
36
|
-
let r = p(t, n.maximumFractionDigits), i = p(e, Math.min(n.minimumFractionDigits, r));
|
|
37
|
-
return {
|
|
38
|
-
minimumFractionDigits: i,
|
|
39
|
-
maximumFractionDigits: Math.max(i, r)
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
function h(e, t) {
|
|
43
|
-
if (!e) return {
|
|
44
|
-
minimumFractionDigits: 2,
|
|
45
|
-
maximumFractionDigits: 2
|
|
46
|
-
};
|
|
47
|
-
try {
|
|
48
|
-
let n = new Intl.NumberFormat(t, {
|
|
49
|
-
style: "currency",
|
|
50
|
-
currency: e
|
|
51
|
-
}).resolvedOptions();
|
|
52
|
-
return {
|
|
53
|
-
minimumFractionDigits: n.minimumFractionDigits ?? 2,
|
|
54
|
-
maximumFractionDigits: n.maximumFractionDigits ?? 2
|
|
55
|
-
};
|
|
56
|
-
} catch {
|
|
57
|
-
return {
|
|
58
|
-
minimumFractionDigits: 2,
|
|
59
|
-
maximumFractionDigits: 2
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function g(e, t, n) {
|
|
64
|
-
return e.formatToParts(t).map((e) => e.type === "currency" ? n : e.type === "minusSign" ? e.value.replace("-", "−") : e.value).join("");
|
|
65
|
-
}
|
|
66
|
-
function _({ amount: e, currency: t, locale: n, currencyDisplay: r = "symbol", minimumFractionDigits: i, maximumFractionDigits: a, formatMode: s, symbol: c }) {
|
|
67
|
-
let l = f(e);
|
|
68
|
-
if (l === null) return null;
|
|
69
|
-
let u = t ?? "", d = m(i, a, h(u, n));
|
|
70
|
-
if (s === "decimal" || !u) return o(new Intl.NumberFormat(n, d), l);
|
|
71
|
-
if (s === "with_code") return `${o(new Intl.NumberFormat(n, d), l)} ${u}`.trim();
|
|
72
|
-
try {
|
|
73
|
-
let e = new Intl.NumberFormat(n, {
|
|
74
|
-
...d,
|
|
75
|
-
style: "currency",
|
|
76
|
-
currency: u,
|
|
77
|
-
currencyDisplay: r
|
|
78
|
-
});
|
|
79
|
-
return c ? g(e, l, c) : o(e, l);
|
|
80
|
-
} catch {
|
|
81
|
-
let e = o(new Intl.NumberFormat(n, d), l);
|
|
82
|
-
return c ? `${c}${e}` : `${e} ${u}`.trim();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
//#endregion
|
|
86
|
-
//#region src/components/primitives/money.tsx
|
|
87
|
-
function v(e) {
|
|
88
|
-
return e === void 0 || !Number.isFinite(e) || e <= 0 ? 100 : e;
|
|
89
|
-
}
|
|
90
|
-
function y(e) {
|
|
91
|
-
let t = f(e.amount);
|
|
92
|
-
return t === null ? null : e.unit === "minor" ? t / v(e.minorUnitScale) : t;
|
|
93
|
-
}
|
|
94
|
-
function b(n = {}) {
|
|
95
|
-
let r = e(), i = t(), { currency: a, unit: o, minorUnitScale: s, symbol: l, locale: u, currencyDisplay: d, minimumFractionDigits: f, maximumFractionDigits: p, formatMode: m, emptyLabel: h } = n;
|
|
96
|
-
return c((e, t = {}) => {
|
|
97
|
-
let n = {
|
|
98
|
-
currency: a,
|
|
99
|
-
unit: o,
|
|
100
|
-
minorUnitScale: s,
|
|
101
|
-
symbol: l,
|
|
102
|
-
locale: u,
|
|
103
|
-
currencyDisplay: d,
|
|
104
|
-
minimumFractionDigits: f,
|
|
105
|
-
maximumFractionDigits: p,
|
|
106
|
-
formatMode: m,
|
|
107
|
-
emptyLabel: h,
|
|
108
|
-
...t
|
|
109
|
-
}, c = n.emptyLabel ?? "—", g = y({
|
|
110
|
-
amount: e,
|
|
111
|
-
unit: n.unit,
|
|
112
|
-
minorUnitScale: n.minorUnitScale
|
|
113
|
-
});
|
|
114
|
-
return g === null ? c : _({
|
|
115
|
-
amount: g,
|
|
116
|
-
currency: n.currency ?? i.defaultCurrency ?? "USD",
|
|
117
|
-
symbol: n.symbol,
|
|
118
|
-
locale: n.locale ?? r.locale,
|
|
119
|
-
currencyDisplay: n.currencyDisplay,
|
|
120
|
-
minimumFractionDigits: n.minimumFractionDigits,
|
|
121
|
-
maximumFractionDigits: n.maximumFractionDigits,
|
|
122
|
-
formatMode: n.formatMode ?? i.formatMode ?? "with_code"
|
|
123
|
-
}) ?? c;
|
|
124
|
-
}, [
|
|
125
|
-
a,
|
|
126
|
-
o,
|
|
127
|
-
s,
|
|
128
|
-
l,
|
|
129
|
-
u,
|
|
130
|
-
d,
|
|
131
|
-
f,
|
|
132
|
-
p,
|
|
133
|
-
m,
|
|
134
|
-
h,
|
|
135
|
-
r.locale,
|
|
136
|
-
i.defaultCurrency,
|
|
137
|
-
i.formatMode
|
|
138
|
-
]);
|
|
139
|
-
}
|
|
140
|
-
var x = {
|
|
141
|
-
type: "main",
|
|
142
|
-
weight: "medium"
|
|
143
|
-
};
|
|
144
|
-
function S(e) {
|
|
145
|
-
return e === "left" ? {
|
|
146
|
-
text: "text-start",
|
|
147
|
-
justify: "justify-start"
|
|
148
|
-
} : e === "center" ? {
|
|
149
|
-
text: "text-center",
|
|
150
|
-
justify: "justify-center"
|
|
151
|
-
} : {
|
|
152
|
-
text: "text-end",
|
|
153
|
-
justify: "justify-end"
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
function C({ amount: i, currency: o, unit: c = "major", minorUnitScale: d, symbol: f, locale: p, currencyDisplay: m, minimumFractionDigits: h, maximumFractionDigits: g, formatMode: v, emptyLabel: b = "—", size: C, align: w = "right", weight: T, type: E, tag: D = "span", lineHeight: O, numeric: k, secondary: A, displayMode: ee, layout: j, secondaryEmphasis: M = "discrete", separator: te = "·", className: N, ref: P, ...F }) {
|
|
157
|
-
let I = e(), L = t(), R = a({
|
|
158
|
-
size: C,
|
|
159
|
-
type: E,
|
|
160
|
-
weight: T,
|
|
161
|
-
lineHeight: O
|
|
162
|
-
}, x), { size: z, type: B, weight: V, lineHeight: H } = R, U = o ?? L.defaultCurrency ?? "USD", W = y({
|
|
163
|
-
amount: i,
|
|
164
|
-
unit: c,
|
|
165
|
-
minorUnitScale: d
|
|
166
|
-
}), G = W === null ? null : _({
|
|
167
|
-
amount: W,
|
|
168
|
-
currency: U,
|
|
169
|
-
symbol: f,
|
|
170
|
-
locale: p ?? I.locale,
|
|
171
|
-
currencyDisplay: m,
|
|
172
|
-
minimumFractionDigits: h,
|
|
173
|
-
maximumFractionDigits: g,
|
|
174
|
-
formatMode: v ?? L.formatMode ?? "with_code"
|
|
175
|
-
});
|
|
176
|
-
if (G === null) {
|
|
177
|
-
let e = s(R, T);
|
|
178
|
-
return /* @__PURE__ */ l(r, {
|
|
179
|
-
ref: P,
|
|
180
|
-
tag: D,
|
|
181
|
-
size: e.size,
|
|
182
|
-
align: w,
|
|
183
|
-
weight: e.weight,
|
|
184
|
-
type: e.type,
|
|
185
|
-
lineHeight: e.lineHeight,
|
|
186
|
-
numeric: k,
|
|
187
|
-
className: n("money--component inline tabular-nums", N),
|
|
188
|
-
...F,
|
|
189
|
-
children: b
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
let K = A ? y(A) : null, q = A?.currency ?? L.displayCurrency ?? U, J = ee ?? (L.dualPricingEnabled ? L.displayMode : void 0) ?? "dual";
|
|
193
|
-
if (K === null || M === "hidden" || J === "default_only" || J === "dynamic" && q === U || !A) return /* @__PURE__ */ l(r, {
|
|
194
|
-
ref: P,
|
|
195
|
-
tag: D,
|
|
196
|
-
size: z,
|
|
197
|
-
align: w,
|
|
198
|
-
weight: V,
|
|
199
|
-
type: B,
|
|
200
|
-
lineHeight: H,
|
|
201
|
-
numeric: k,
|
|
202
|
-
className: n("money--component inline whitespace-nowrap tabular-nums", N),
|
|
203
|
-
...F,
|
|
204
|
-
children: G
|
|
205
|
-
});
|
|
206
|
-
let Y = _({
|
|
207
|
-
amount: K,
|
|
208
|
-
currency: q,
|
|
209
|
-
symbol: A.symbol,
|
|
210
|
-
locale: p ?? I.locale,
|
|
211
|
-
currencyDisplay: A.currencyDisplay ?? m,
|
|
212
|
-
minimumFractionDigits: A.minimumFractionDigits ?? h,
|
|
213
|
-
maximumFractionDigits: A.maximumFractionDigits ?? g,
|
|
214
|
-
formatMode: A.formatMode ?? v ?? L.formatMode ?? "with_code"
|
|
215
|
-
}), ne = j ?? (L.dualPricingDisplay === "inline" ? "inline" : "stacked"), X = M === "match" ? z : M === "muted" ? "xs" : "xxs", Z = M === "match" ? B : M === "muted" ? "secondary" : "discrete", Q = M === "match" ? V : "regular", $ = S(w);
|
|
216
|
-
return ne === "inline" ? /* @__PURE__ */ u(r, {
|
|
217
|
-
ref: P,
|
|
218
|
-
tag: D,
|
|
219
|
-
size: z,
|
|
220
|
-
align: w,
|
|
221
|
-
type: B,
|
|
222
|
-
weight: V === "inherit" ? "inherit" : void 0,
|
|
223
|
-
lineHeight: H,
|
|
224
|
-
numeric: k,
|
|
225
|
-
className: n("money--component money--inline inline-flex items-baseline gap-space-xs whitespace-nowrap tabular-nums", $.justify, N),
|
|
226
|
-
...F,
|
|
227
|
-
children: [
|
|
228
|
-
/* @__PURE__ */ l(r, {
|
|
229
|
-
tag: "span",
|
|
230
|
-
size: z,
|
|
231
|
-
weight: V,
|
|
232
|
-
type: B,
|
|
233
|
-
lineHeight: H,
|
|
234
|
-
numeric: k,
|
|
235
|
-
className: "money--primary",
|
|
236
|
-
children: G
|
|
237
|
-
}),
|
|
238
|
-
/* @__PURE__ */ l("span", {
|
|
239
|
-
className: "money--separator inline-flex shrink-0 items-center text-muted-foreground",
|
|
240
|
-
"aria-hidden": "true",
|
|
241
|
-
children: te
|
|
242
|
-
}),
|
|
243
|
-
/* @__PURE__ */ l(r, {
|
|
244
|
-
tag: "span",
|
|
245
|
-
size: X,
|
|
246
|
-
weight: Q,
|
|
247
|
-
type: Z,
|
|
248
|
-
lineHeight: H,
|
|
249
|
-
numeric: k,
|
|
250
|
-
className: "money--secondary",
|
|
251
|
-
children: Y
|
|
252
|
-
})
|
|
253
|
-
]
|
|
254
|
-
}) : /* @__PURE__ */ u(r, {
|
|
255
|
-
ref: P,
|
|
256
|
-
tag: D,
|
|
257
|
-
size: z,
|
|
258
|
-
align: w,
|
|
259
|
-
type: B,
|
|
260
|
-
weight: V === "inherit" ? "inherit" : void 0,
|
|
261
|
-
lineHeight: "tight",
|
|
262
|
-
numeric: k,
|
|
263
|
-
className: n("money--component money--stacked inline-flex flex-col whitespace-nowrap tabular-nums", $.text, N),
|
|
264
|
-
...F,
|
|
265
|
-
children: [/* @__PURE__ */ l(r, {
|
|
266
|
-
tag: "span",
|
|
267
|
-
size: z,
|
|
268
|
-
align: w,
|
|
269
|
-
weight: V,
|
|
270
|
-
type: B,
|
|
271
|
-
lineHeight: "tight",
|
|
272
|
-
numeric: k,
|
|
273
|
-
className: "money--primary",
|
|
274
|
-
children: G
|
|
275
|
-
}), /* @__PURE__ */ l(r, {
|
|
276
|
-
tag: "span",
|
|
277
|
-
size: X,
|
|
278
|
-
align: w,
|
|
279
|
-
weight: Q,
|
|
280
|
-
type: Z,
|
|
281
|
-
lineHeight: "tight",
|
|
282
|
-
numeric: k,
|
|
283
|
-
className: "money--secondary",
|
|
284
|
-
children: Y
|
|
285
|
-
})]
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
//#endregion
|
|
289
|
-
//#region src/components/primitives/number.tsx
|
|
290
|
-
var w = {
|
|
291
|
-
type: "main",
|
|
292
|
-
weight: "regular"
|
|
293
|
-
};
|
|
294
|
-
function T(e) {
|
|
295
|
-
if (e == null || e === "") return null;
|
|
296
|
-
let t = typeof e == "number" ? e : globalThis.Number.parseFloat(e);
|
|
297
|
-
return globalThis.Number.isFinite(t) ? t : null;
|
|
298
|
-
}
|
|
299
|
-
function E(e, t, n) {
|
|
300
|
-
let r = T(e);
|
|
301
|
-
return r === null ? null : o(new Intl.NumberFormat(t, n), r);
|
|
302
|
-
}
|
|
303
|
-
function D({ value: t, locale: i, options: o, emptyLabel: c = "—", size: u, align: d = "right", weight: f, type: p, lineHeight: m, className: h, ref: g, ..._ }) {
|
|
304
|
-
let v = e(), y = a({
|
|
305
|
-
size: u,
|
|
306
|
-
type: p,
|
|
307
|
-
weight: f,
|
|
308
|
-
lineHeight: m
|
|
309
|
-
}, w), b = E(t, i ?? v.locale, o), x = b === null ? s(y, f) : y;
|
|
310
|
-
return /* @__PURE__ */ l(r, {
|
|
311
|
-
ref: g,
|
|
312
|
-
tag: "span",
|
|
313
|
-
size: x.size,
|
|
314
|
-
align: d,
|
|
315
|
-
weight: x.weight,
|
|
316
|
-
type: x.type,
|
|
317
|
-
lineHeight: x.lineHeight,
|
|
318
|
-
className: n("number--component inline tabular-nums", h),
|
|
319
|
-
..._,
|
|
320
|
-
children: b ?? c
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
function O({ value: t, locale: o, scaled: c = !1, options: u, emptyLabel: d = "—", size: f, align: p = "right", weight: m, type: h, lineHeight: g, className: _, ref: v, ...y }) {
|
|
324
|
-
let b = e(), x = a({
|
|
325
|
-
size: f,
|
|
326
|
-
type: h,
|
|
327
|
-
weight: m,
|
|
328
|
-
lineHeight: g
|
|
329
|
-
}, w), S = T(t), C = S === null ? null : i(c ? S / 100 : S, o ?? b.locale, u), E = C === null ? s(x, m) : x;
|
|
330
|
-
return /* @__PURE__ */ l(r, {
|
|
331
|
-
ref: v,
|
|
332
|
-
tag: "span",
|
|
333
|
-
size: E.size,
|
|
334
|
-
align: p,
|
|
335
|
-
weight: E.weight,
|
|
336
|
-
type: E.type,
|
|
337
|
-
lineHeight: E.lineHeight,
|
|
338
|
-
className: n("percent--component inline tabular-nums", _),
|
|
339
|
-
...y,
|
|
340
|
-
children: C ?? d
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
//#endregion
|
|
344
|
-
export { _ as a, b as i, O as n, C as r, D as t };
|
|
345
|
-
|
|
346
|
-
//# sourceMappingURL=number-CYqBcrSj.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"number-CYqBcrSj.js","names":["Number","useFormattingConfig","useMoneyConfig","cn","Text","formatPercentRatio","useValueTypography","formatWithMinusSign","emptyValueTypography","normalizeDecimalString","trimmed","value","comma","dot","decimalSeparator","groupingSeparator","head","tail","parseMoneyAmount","amount","parsed","normalizeFractionDigits","fallback","resolveFractionDigits","normalizedMaximum","maximumFractionDigits","normalizedMinimum","minimumFractionDigits","resolveCurrencyFractionDigits","currency","resolved","locale","replaceCurrencyPart","formatter","part","symbol","formatMoneyAmount","resolvedCurrency","numberOptions","formatMode","formattedNumber","normalizeMinorUnitScale","resolveMajorAmount","useMoneyFormatter","formatting","money","defaults","useCallback","options","overrides","resolvedEmptyLabel","major","unit","minorUnitScale","currencyDisplay","emptyLabel","MONEY_ROLE","getAlignmentClasses","align","Money","sizeProp","weightProp","typeProp","lineHeightProp","props","typography","primaryAmount","primaryLabel","empty","className","secondaryAmount","secondary","resolvedSecondaryCurrency","resolvedDisplayMode","displayMode","secondaryEmphasis","secondaryLabel","resolvedLayout","layout","secondarySize","size","secondaryType","type","secondaryWeight","weight","alignment","separator","NUMBER_ROLE","parseNumericValue","renderNumberLabel","Number$1","label","Percent","scaled"],"sources":["../src/lib/money-format.ts","../src/components/primitives/money.tsx","../src/components/primitives/number.tsx"],"sourcesContent":["/**\n * Shared money formatting for the Money primitive and metric surfaces.\n *\n * One formatter keeps currency labels, fraction digits and format modes\n * identical wherever an amount is shown. Components resolve locale, currency\n * and format mode from UIProvider before calling it.\n */\nimport type { MoneyFormatMode } from './ui-provider/types';\nimport { formatWithMinusSign, MINUS_SIGN } from './format';\n\n/** A numeric amount or an unformatted decimal string. */\nexport type MoneyAmountInput = number | string | null | undefined;\n\nexport interface FormatMoneyAmountOptions {\n\t/** Major-unit amount. Strings accept either decimal separator. */\n\tamount: MoneyAmountInput;\n\t/** ISO 4217 currency code; an empty value formats as a plain decimal. */\n\tcurrency?: string | null;\n\t/** BCP-47 locale for Intl formatting. */\n\tlocale?: string;\n\t/** Intl currency label style when the format mode uses currency formatting. */\n\tcurrencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n\t/** Minimum decimal digits. Defaults to the currency's Intl convention. */\n\tminimumFractionDigits?: number;\n\t/** Maximum decimal digits. Defaults to the currency's Intl convention. */\n\tmaximumFractionDigits?: number;\n\t/** Provider format policy: decimal, with_code, with_symbol or locale_aware. */\n\tformatMode?: MoneyFormatMode;\n\t/** Consumer-resolved symbol; Intl placement is preserved. */\n\tsymbol?: string | null;\n}\n\nfunction normalizeDecimalString(value: string) {\n\tconst trimmed = value.trim();\n\tif (!trimmed) return '';\n\n\tconst comma = trimmed.lastIndexOf(',');\n\tconst dot = trimmed.lastIndexOf('.');\n\n\tif (comma >= 0 && dot >= 0) {\n\t\tconst decimalSeparator = comma > dot ? ',' : '.';\n\t\tconst groupingSeparator = decimalSeparator === ',' ? '.' : ',';\n\t\treturn trimmed\n\t\t\t.replace(new RegExp(`\\\\${groupingSeparator}`, 'g'), '')\n\t\t\t.replace(decimalSeparator, '.');\n\t}\n\n\tif (comma >= 0) {\n\t\tconst [head, tail = ''] = trimmed.split(',');\n\t\tif (tail.length > 0 && tail.length <= 2) return `${head.replace(/,/g, '')}.${tail}`;\n\t\treturn trimmed.replace(/,/g, '');\n\t}\n\n\t// A single dot denotes a decimal, even with three fractional digits.\n\tif (/^[+-]?\\d+(?:\\.\\d{3}){2,}$/.test(trimmed)) return trimmed.replace(/\\./g, '');\n\n\treturn trimmed;\n}\n\nexport function parseMoneyAmount(amount: MoneyAmountInput): number | null {\n\tif (amount === null || amount === undefined || amount === '') return null;\n\tif (typeof amount === 'number') return Number.isFinite(amount) ? amount : null;\n\tconst parsed = Number.parseFloat(normalizeDecimalString(amount));\n\treturn Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction normalizeFractionDigits(value: number | undefined, fallback: number) {\n\tif (value === undefined || !Number.isFinite(value)) return fallback;\n\treturn Math.min(100, Math.max(0, Math.trunc(value)));\n}\n\nfunction resolveFractionDigits(\n\tminimumFractionDigits?: number,\n\tmaximumFractionDigits?: number,\n\tfallback = { minimumFractionDigits: 2, maximumFractionDigits: 2 },\n) {\n\tconst normalizedMaximum = normalizeFractionDigits(\n\t\tmaximumFractionDigits,\n\t\tfallback.maximumFractionDigits,\n\t);\n\tconst normalizedMinimum = normalizeFractionDigits(\n\t\tminimumFractionDigits,\n\t\tMath.min(fallback.minimumFractionDigits, normalizedMaximum),\n\t);\n\n\treturn {\n\t\tminimumFractionDigits: normalizedMinimum,\n\t\tmaximumFractionDigits: Math.max(normalizedMinimum, normalizedMaximum),\n\t};\n}\n\nfunction resolveCurrencyFractionDigits(currency: string, locale?: string) {\n\tif (!currency) return { minimumFractionDigits: 2, maximumFractionDigits: 2 };\n\ttry {\n\t\tconst resolved = new Intl.NumberFormat(locale, {\n\t\t\tstyle: 'currency',\n\t\t\tcurrency,\n\t\t}).resolvedOptions();\n\t\treturn {\n\t\t\tminimumFractionDigits: resolved.minimumFractionDigits ?? 2,\n\t\t\tmaximumFractionDigits: resolved.maximumFractionDigits ?? 2,\n\t\t};\n\t} catch {\n\t\treturn { minimumFractionDigits: 2, maximumFractionDigits: 2 };\n\t}\n}\n\nfunction replaceCurrencyPart(\n\tformatter: Intl.NumberFormat,\n\tvalue: number,\n\tsymbol: string,\n) {\n\treturn formatter\n\t\t.formatToParts(value)\n\t\t.map((part) => part.type === 'currency' ? symbol : part.type === 'minusSign' ? part.value.replace('-', MINUS_SIGN) : part.value)\n\t\t.join('');\n}\n\nexport function formatMoneyAmount({\n\tamount,\n\tcurrency,\n\tlocale,\n\tcurrencyDisplay = 'symbol',\n\tminimumFractionDigits,\n\tmaximumFractionDigits,\n\tformatMode,\n\tsymbol,\n}: FormatMoneyAmountOptions) {\n\tconst value = parseMoneyAmount(amount);\n\tif (value === null) return null;\n\n\tconst resolvedCurrency = currency ?? '';\n\tconst numberOptions: Intl.NumberFormatOptions = resolveFractionDigits(\n\t\tminimumFractionDigits,\n\t\tmaximumFractionDigits,\n\t\tresolveCurrencyFractionDigits(resolvedCurrency, locale),\n\t);\n\n\tif (formatMode === 'decimal' || !resolvedCurrency) {\n\t\treturn formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value);\n\t}\n\n\tif (formatMode === 'with_code') {\n\t\treturn `${formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value)} ${resolvedCurrency}`.trim();\n\t}\n\n\ttry {\n\t\tconst formatter = new Intl.NumberFormat(locale, {\n\t\t\t...numberOptions,\n\t\t\tstyle: 'currency',\n\t\t\tcurrency: resolvedCurrency,\n\t\t\tcurrencyDisplay,\n\t\t});\n\t\treturn symbol\n\t\t\t? replaceCurrencyPart(formatter, value, symbol)\n\t\t\t: formatWithMinusSign(formatter, value);\n\t} catch {\n\t\tconst formattedNumber = formatWithMinusSign(new Intl.NumberFormat(locale, numberOptions), value);\n\t\treturn symbol\n\t\t\t? `${symbol}${formattedNumber}`\n\t\t\t: `${formattedNumber} ${resolvedCurrency}`.trim();\n\t}\n}\n","import { useCallback, type ComponentPropsWithoutRef, type ReactNode, type Ref } from 'react';\n\nimport { Text, type TextProps } from '../typography';\nimport type { TextSize } from '../../lib/ui-provider';\nimport { EMPTY } from '../../lib/format';\nimport { formatMoneyAmount, parseMoneyAmount } from '../../lib/money-format';\nimport {\n\tuseFormattingConfig,\n\tuseMoneyConfig,\n\ttype MoneyDisplayMode,\n\ttype MoneyFormatMode,\n} from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\n\nimport { emptyValueTypography, useValueTypography, type ValueTypographyRole } from './value-typography';\n\ntype SpanProps = Omit<ComponentPropsWithoutRef<'span'>, 'children' | 'color'>;\n\nexport type MoneyUnit = 'major' | 'minor';\nexport type MoneyLayout = 'inline' | 'stacked';\nexport type MoneySecondaryEmphasis = 'discrete' | 'muted' | 'match' | 'hidden';\n\n/** A secondary monetary value rendered by the canonical `<Money>` primitive. */\nexport interface MoneyValue {\n\t/** Numeric amount or an unformatted decimal string. */\n\tamount?: number | string | null;\n\t/** ISO 4217 currency code. Falls back to `UIProvider.money.defaultCurrency`. */\n\tcurrency?: string | null;\n\t/** Unit of the incoming amount. `minor` converts cents/pence before formatting. */\n\tunit?: MoneyUnit;\n\t/** Number of minor units in one major unit. Defaults to 100. */\n\tminorUnitScale?: number;\n\t/** Optional consumer-resolved symbol. Intl placement is preserved. */\n\tsymbol?: string | null;\n\t/** Intl label style for `with_symbol`/`locale_aware`. `with_code` always appends the code; `decimal` omits it. Select the format mode explicitly to override provider policy. */\n\tcurrencyDisplay?: Intl.NumberFormatOptions['currencyDisplay'];\n\t/** Minimum decimal digits. Defaults to the currency's Intl convention. */\n\tminimumFractionDigits?: number;\n\t/** Maximum decimal digits. Defaults to the currency's Intl convention. */\n\tmaximumFractionDigits?: number;\n\t/** Per-value override for the UIProvider money format policy. */\n\tformatMode?: MoneyFormatMode;\n}\n\nexport interface MoneyProps extends SpanProps, MoneyValue {\n\t/** Ref to the semantic root selected by `tag`. */\n\tref?: Ref<HTMLElement>;\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Content rendered, with the shared empty treatment, when the amount is absent or cannot be parsed. */\n\temptyLabel?: ReactNode;\n\t/**\n\t * Typography size for the primary value (and a `match` secondary). Defaults to\n\t * the provider text size; inside running text, the surrounding size.\n\t */\n\tsize?: TextSize;\n\t/** Inline text alignment. Defaults to right alignment for numeric scanning. */\n\talign?: TextProps['align'];\n\t/** Weight of the primary value. Defaults to `medium`; inside running text, the surrounding weight. */\n\tweight?: TextProps['weight'];\n\t/** Colour role. Defaults to `main`; inside running text, the surrounding colour. */\n\ttype?: TextProps['type'];\n\t/** Semantic root element used by the typography primitive. */\n\ttag?: TextProps['tag'];\n\t/** Line-height preset applied to the root value. Defaults to `normal`; inside running text, the surrounding leading. */\n\tlineHeight?: TextProps['lineHeight'];\n\t/**\n\t * Opt-in monospace figures. Amounts already render in the sans UI font with\n\t * tabular figures; reserve this for code-like ledgers. Defaults to `false`.\n\t */\n\tnumeric?: TextProps['numeric'];\n\t/**\n\t * Optional converted/display value. Passing it is an explicit request to\n\t * render both values unless `displayMode=\"default_only\"` or\n\t * `secondaryEmphasis=\"hidden\"` is set.\n\t */\n\tsecondary?: MoneyValue | null;\n\t/**\n\t * Controls whether the secondary value is visible. `dynamic` shows it only\n\t * when the two currency codes differ. When omitted, an explicitly supplied\n\t * `secondary` renders; an enabled UIProvider money policy can narrow it.\n\t */\n\tdisplayMode?: MoneyDisplayMode;\n\t/** Pair layout. Falls back to the UIProvider `dualPricingDisplay` policy. */\n\tlayout?: MoneyLayout;\n\t/** Visual prominence of a secondary value. */\n\tsecondaryEmphasis?: MoneySecondaryEmphasis;\n\t/** Inline separator. Defaults to a quiet middle dot; pass an arrow for conversion flows. */\n\tseparator?: ReactNode;\n}\n\nfunction normalizeMinorUnitScale(value: number | undefined) {\n\tif (value === undefined || !Number.isFinite(value) || value <= 0) return 100;\n\treturn value;\n}\n\nfunction resolveMajorAmount(value: MoneyValue): number | null {\n\tconst parsed = parseMoneyAmount(value.amount);\n\tif (parsed === null) return null;\n\treturn value.unit === 'minor'\n\t\t? parsed / normalizeMinorUnitScale(value.minorUnitScale)\n\t\t: parsed;\n}\n\n/** Options for formatting money as text; they mirror the Money primitive's value props. */\nexport type MoneyFormatterOptions = Omit<MoneyValue, 'amount'> & {\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Text returned when the amount is absent or cannot be parsed. */\n\temptyLabel?: string;\n};\n\n/** Formats an amount as text; per-call options win over the hook's defaults. */\nexport type MoneyFormatter = (amount: MoneyValue['amount'], options?: MoneyFormatterOptions) => string;\n\n/**\n * Text formatting with the Money primitive's rules and UIProvider defaults, for\n * places that need a string: button labels, toasts, activity text, aria labels.\n * Pass defaults such as `{ currency: 'USD' }` once for a screen whose amounts\n * share a currency.\n */\nexport function useMoneyFormatter(defaults: MoneyFormatterOptions = {}): MoneyFormatter {\n\tconst formatting = useFormattingConfig();\n\tconst money = useMoneyConfig();\n\tconst {\n\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t} = defaults;\n\treturn useCallback<MoneyFormatter>((amount, overrides = {}) => {\n\t\tconst options: MoneyFormatterOptions = {\n\t\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t\t\t...overrides,\n\t\t};\n\t\tconst resolvedEmptyLabel = options.emptyLabel ?? EMPTY;\n\t\tconst major = resolveMajorAmount({ amount, unit: options.unit, minorUnitScale: options.minorUnitScale });\n\t\tif (major === null) return resolvedEmptyLabel;\n\t\treturn formatMoneyAmount({\n\t\t\tamount: major,\n\t\t\tcurrency: options.currency ?? money.defaultCurrency ?? 'USD',\n\t\t\tsymbol: options.symbol,\n\t\t\tlocale: options.locale ?? formatting.locale,\n\t\t\tcurrencyDisplay: options.currencyDisplay,\n\t\t\tminimumFractionDigits: options.minimumFractionDigits,\n\t\t\tmaximumFractionDigits: options.maximumFractionDigits,\n\t\t\tformatMode: options.formatMode ?? money.formatMode ?? 'with_code',\n\t\t}) ?? resolvedEmptyLabel;\n\t}, [\n\t\tcurrency, unit, minorUnitScale, symbol, locale, currencyDisplay,\n\t\tminimumFractionDigits, maximumFractionDigits, formatMode, emptyLabel,\n\t\tformatting.locale, money.defaultCurrency, money.formatMode,\n\t]);\n}\n\n/** Standalone amounts read as foreground medium; in a sentence they take its typography. */\nconst MONEY_ROLE: ValueTypographyRole = { type: 'main', weight: 'medium' };\n\n/** Logical alignment: `left`/`right` follow the reading direction, like `Text`. */\nfunction getAlignmentClasses(align: TextProps['align']) {\n\tif (align === 'left') return { text: 'text-start', justify: 'justify-start' };\n\tif (align === 'center') return { text: 'text-center', justify: 'justify-center' };\n\treturn { text: 'text-end', justify: 'justify-end' };\n}\n\n/**\n * Canonical monetary display primitive.\n *\n * It owns major/minor-unit conversion, locale-aware formatting, empty values,\n * and optional inline/stacked dual-currency display. Consumers should use\n * this component instead of composing separate money-display or currency-pair\n * wrappers.\n */\nexport function Money({\n\tamount,\n\tcurrency,\n\tunit = 'major',\n\tminorUnitScale,\n\tsymbol,\n\tlocale,\n\tcurrencyDisplay,\n\tminimumFractionDigits,\n\tmaximumFractionDigits,\n\tformatMode,\n\temptyLabel = EMPTY,\n\tsize: sizeProp,\n\talign = 'right',\n\tweight: weightProp,\n\ttype: typeProp,\n\ttag = 'span',\n\tlineHeight: lineHeightProp,\n\tnumeric,\n\tsecondary,\n\tdisplayMode,\n\tlayout,\n\tsecondaryEmphasis = 'discrete',\n\tseparator = '·',\n\tclassName,\n\tref,\n\t...props\n}: MoneyProps) {\n\tconst formatting = useFormattingConfig();\n\tconst money = useMoneyConfig();\n\tconst typography = useValueTypography(\n\t\t{ size: sizeProp, type: typeProp, weight: weightProp, lineHeight: lineHeightProp },\n\t\tMONEY_ROLE,\n\t);\n\tconst { size, type, weight, lineHeight } = typography;\n\tconst resolvedCurrency = currency ?? money.defaultCurrency ?? 'USD';\n\tconst primaryAmount = resolveMajorAmount({ amount, unit, minorUnitScale });\n\tconst primaryLabel = primaryAmount === null\n\t\t? null\n\t\t: formatMoneyAmount({\n\t\t\t\tamount: primaryAmount,\n\t\t\t\tcurrency: resolvedCurrency,\n\t\t\t\tsymbol,\n\t\t\t\tlocale: locale ?? formatting.locale,\n\t\t\t\tcurrencyDisplay,\n\t\t\t\tminimumFractionDigits,\n\t\t\t\tmaximumFractionDigits,\n\t\t\t\tformatMode: formatMode ?? money.formatMode ?? 'with_code',\n\t\t\t});\n\n\tif (primaryLabel === null) {\n\t\tconst empty = emptyValueTypography(typography, weightProp);\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={empty.size}\n\t\t\t\talign={align}\n\t\t\t\tweight={empty.weight}\n\t\t\t\ttype={empty.type}\n\t\t\t\tlineHeight={empty.lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn('money--component inline tabular-nums', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{emptyLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst secondaryAmount = secondary ? resolveMajorAmount(secondary) : null;\n\tconst resolvedSecondaryCurrency = secondary?.currency ?? money.displayCurrency ?? resolvedCurrency;\n\tconst resolvedDisplayMode = displayMode\n\t\t?? (money.dualPricingEnabled ? money.displayMode : undefined)\n\t\t?? 'dual';\n\tconst hasDifferentCurrencies = resolvedSecondaryCurrency !== resolvedCurrency;\n\tconst shouldRenderSecondary = secondaryAmount !== null\n\t\t&& secondaryEmphasis !== 'hidden'\n\t\t&& resolvedDisplayMode !== 'default_only'\n\t\t&& (resolvedDisplayMode !== 'dynamic' || hasDifferentCurrencies);\n\n\tif (!shouldRenderSecondary || !secondary) {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={size}\n\t\t\t\talign={align}\n\t\t\t\tweight={weight}\n\t\t\t\ttype={type}\n\t\t\t\tlineHeight={lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn('money--component inline whitespace-nowrap tabular-nums', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{primaryLabel}\n\t\t\t</Text>\n\t\t);\n\t}\n\n\tconst secondaryLabel = formatMoneyAmount({\n\t\tamount: secondaryAmount,\n\t\tcurrency: resolvedSecondaryCurrency,\n\t\tsymbol: secondary.symbol,\n\t\tlocale: locale ?? formatting.locale,\n\t\tcurrencyDisplay: secondary.currencyDisplay ?? currencyDisplay,\n\t\tminimumFractionDigits: secondary.minimumFractionDigits ?? minimumFractionDigits,\n\t\tmaximumFractionDigits: secondary.maximumFractionDigits ?? maximumFractionDigits,\n\t\tformatMode: secondary.formatMode ?? formatMode ?? money.formatMode ?? 'with_code',\n\t});\n\tconst resolvedLayout: MoneyLayout = layout\n\t\t?? (money.dualPricingDisplay === 'inline' ? 'inline' : 'stacked');\n\tconst secondarySize: TextSize | undefined = secondaryEmphasis === 'match'\n\t\t? size\n\t\t: secondaryEmphasis === 'muted'\n\t\t\t? 'xs'\n\t\t\t: 'xxs';\n\tconst secondaryType: TextProps['type'] = secondaryEmphasis === 'match'\n\t\t? type\n\t\t: secondaryEmphasis === 'muted'\n\t\t\t? 'secondary'\n\t\t\t: 'discrete';\n\tconst secondaryWeight: TextProps['weight'] = secondaryEmphasis === 'match' ? weight : 'regular';\n\tconst alignment = getAlignmentClasses(align);\n\n\tif (resolvedLayout === 'inline') {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\tref={ref}\n\t\t\t\ttag={tag}\n\t\t\t\tsize={size}\n\t\t\t\talign={align}\n\t\t\t\ttype={type}\n\t\t\t\tweight={weight === 'inherit' ? 'inherit' : undefined}\n\t\t\t\tlineHeight={lineHeight}\n\t\t\t\tnumeric={numeric}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'money--component money--inline inline-flex items-baseline gap-space-xs whitespace-nowrap tabular-nums',\n\t\t\t\t\talignment.justify,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size={size} weight={weight} type={type} lineHeight={lineHeight} numeric={numeric} className=\"money--primary\">\n\t\t\t\t\t{primaryLabel}\n\t\t\t\t</Text>\n\t\t\t\t<span className=\"money--separator inline-flex shrink-0 items-center text-muted-foreground\" aria-hidden=\"true\">\n\t\t\t\t\t{separator}\n\t\t\t\t</span>\n\t\t\t\t<Text tag=\"span\" size={secondarySize} weight={secondaryWeight} type={secondaryType} lineHeight={lineHeight} numeric={numeric} className=\"money--secondary\">\n\t\t\t\t\t{secondaryLabel}\n\t\t\t\t</Text>\n\t\t\t</Text>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag={tag}\n\t\t\tsize={size}\n\t\t\talign={align}\n\t\t\ttype={type}\n\t\t\tweight={weight === 'inherit' ? 'inherit' : undefined}\n\t\t\tlineHeight=\"tight\"\n\t\t\tnumeric={numeric}\n\t\t\tclassName={cn(\n\t\t\t\t'money--component money--stacked inline-flex flex-col whitespace-nowrap tabular-nums',\n\t\t\t\talignment.text,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Text tag=\"span\" size={size} align={align} weight={weight} type={type} lineHeight=\"tight\" numeric={numeric} className=\"money--primary\">\n\t\t\t\t{primaryLabel}\n\t\t\t</Text>\n\t\t\t<Text tag=\"span\" size={secondarySize} align={align} weight={secondaryWeight} type={secondaryType} lineHeight=\"tight\" numeric={numeric} className=\"money--secondary\">\n\t\t\t\t{secondaryLabel}\n\t\t\t</Text>\n\t\t</Text>\n\t);\n}\n","import { type ComponentPropsWithoutRef, type ReactNode, type Ref } from 'react';\n\nimport { Text, type TextProps } from '../typography';\nimport type { TextSize } from '../../lib/ui-provider';\nimport { EMPTY, formatPercentRatio, formatWithMinusSign } from '../../lib/format';\nimport { useFormattingConfig } from '../../lib/ui-provider';\nimport { cn } from '../../lib/utils';\n\nimport { emptyValueTypography, useValueTypography, type ValueTypographyRole } from './value-typography';\n\ntype SpanProps = Omit<ComponentPropsWithoutRef<'span'>, 'children' | 'color'>;\n\nexport interface NumberProps extends SpanProps {\n\tvalue?: number | string | null;\n\t/** BCP-47 locale override. Falls back to `UIProvider.formatting.locale`. */\n\tlocale?: string;\n\t/** Passed to `Intl.NumberFormat`; for example `signDisplay: 'exceptZero'` for deltas. */\n\toptions?: Intl.NumberFormatOptions;\n\t/** Rendered with the shared empty treatment when the value is absent or unparsable. Defaults to an em dash. */\n\temptyLabel?: ReactNode;\n\t/** Text size. Defaults to the provider text size; inside running text, the surrounding size. */\n\tsize?: TextSize;\n\t/** Text alignment. Defaults to `right` so columns of figures line up. */\n\talign?: TextProps['align'];\n\t/** Font weight. Defaults to `regular`; inside running text, the surrounding weight. */\n\tweight?: TextProps['weight'];\n\t/** Colour role. Defaults to `main`; inside running text, the surrounding colour. */\n\ttype?: TextProps['type'];\n\t/** Line height. Defaults to the role leading; inside running text, the surrounding leading. */\n\tlineHeight?: TextProps['lineHeight'];\n\tref?: Ref<HTMLSpanElement>;\n}\n\nexport interface PercentProps extends Omit<NumberProps, 'options'> {\n\t/** The value is already 0–100 rather than a 0–1 ratio. Defaults to `false`. */\n\tscaled?: boolean;\n\t/** Passed to `Intl.NumberFormat`. The default maximum is one decimal digit or the supplied minimum, whichever is higher. */\n\toptions?: Intl.NumberFormatOptions;\n\tref?: Ref<HTMLSpanElement>;\n}\n\nconst NUMBER_ROLE: ValueTypographyRole = { type: 'main', weight: 'regular' };\n\nfunction parseNumericValue(value: NumberProps['value']) {\n\tif (value === null || value === undefined || value === '') return null;\n\tconst parsed = typeof value === 'number' ? value : globalThis.Number.parseFloat(value);\n\treturn globalThis.Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction renderNumberLabel(value: NumberProps['value'], locale?: string, options?: Intl.NumberFormatOptions) {\n\tconst parsed = parseNumericValue(value);\n\tif (parsed === null) return null;\n\treturn formatWithMinusSign(new Intl.NumberFormat(locale, options), parsed);\n}\n\n/**\n * A locale-formatted count or quantity in the sans UI font with tabular figures.\n * Negative values use the typographic minus sign (U+2212).\n */\nexport function Number({\n\tvalue,\n\tlocale,\n\toptions,\n\temptyLabel = EMPTY,\n\tsize,\n\talign = 'right',\n\tweight,\n\ttype,\n\tlineHeight,\n\tclassName,\n\tref,\n\t...props\n}: NumberProps) {\n\tconst formatting = useFormattingConfig();\n\tconst resolved = useValueTypography({ size, type, weight, lineHeight }, NUMBER_ROLE);\n\tconst label = renderNumberLabel(value, locale ?? formatting.locale, options);\n\tconst typography = label === null ? emptyValueTypography(resolved, weight) : resolved;\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag=\"span\"\n\t\t\tsize={typography.size}\n\t\t\talign={align}\n\t\t\tweight={typography.weight}\n\t\t\ttype={typography.type}\n\t\t\tlineHeight={typography.lineHeight}\n\t\t\tclassName={cn('number--component inline tabular-nums', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{label ?? emptyLabel}\n\t\t</Text>\n\t);\n}\n\n/**\n * A percentage in the sans UI font with tabular figures. Expects a 0–1 ratio\n * unless `scaled`; one decimal place by default; negative values use U+2212.\n */\nexport function Percent({\n\tvalue,\n\tlocale,\n\tscaled = false,\n\toptions,\n\temptyLabel = EMPTY,\n\tsize,\n\talign = 'right',\n\tweight,\n\ttype,\n\tlineHeight,\n\tclassName,\n\tref,\n\t...props\n}: PercentProps) {\n\tconst formatting = useFormattingConfig();\n\tconst resolved = useValueTypography({ size, type, weight, lineHeight }, NUMBER_ROLE);\n\tconst parsed = parseNumericValue(value);\n\tconst label = parsed === null\n\t\t? null\n\t\t: formatPercentRatio(scaled ? parsed / 100 : parsed, locale ?? formatting.locale, options);\n\tconst typography = label === null ? emptyValueTypography(resolved, weight) : resolved;\n\n\treturn (\n\t\t<Text\n\t\t\tref={ref}\n\t\t\ttag=\"span\"\n\t\t\tsize={typography.size}\n\t\t\talign={align}\n\t\t\tweight={typography.weight}\n\t\t\ttype={typography.type}\n\t\t\tlineHeight={typography.lineHeight}\n\t\t\tclassName={cn('percent--component inline tabular-nums', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{label ?? emptyLabel}\n\t\t</Text>\n\t);\n}\n"],"mappings":"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"}
|