themelia-react-ui 2.0.4 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +211 -0
- package/MIGRATION.md +119 -0
- package/README.md +122 -20
- package/dist/{accordion-96o0pN62.js → accordion-0tQUZ20r.js} +13 -13
- package/dist/accordion-0tQUZ20r.js.map +1 -0
- package/dist/{action-menu-CHgs8vmj.js → action-menu-C0gjzLyE.js} +48 -45
- package/dist/action-menu-C0gjzLyE.js.map +1 -0
- package/dist/{affordance-geometry.generated-B8yGOr8-.js → affordance-geometry.generated-P-aVJisu.js} +36 -36
- package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
- package/dist/{ai-artifact-BZUGwBq6.js → ai-artifact-CGGpQryR.js} +281 -230
- package/dist/ai-artifact-CGGpQryR.js.map +1 -0
- package/dist/app-shell-EHuuRDGy.js +321 -0
- package/dist/app-shell-EHuuRDGy.js.map +1 -0
- package/dist/{attachment-DkoqHPPl.js → attachment-BCpA4e7i.js} +10 -10
- package/dist/{attachment-DkoqHPPl.js.map → attachment-BCpA4e7i.js.map} +1 -1
- package/dist/{auth-D2FVZ1MH.js → auth-B0girIk_.js} +49 -52
- package/dist/auth-B0girIk_.js.map +1 -0
- package/dist/{avatar-DWO_HHhB.js → avatar-B9Jnp-T-.js} +8 -8
- package/dist/avatar-B9Jnp-T-.js.map +1 -0
- package/dist/{badge-DErMA7ul.js → badge-wWauMgAt.js} +5 -5
- package/dist/{badge-DErMA7ul.js.map → badge-wWauMgAt.js.map} +1 -1
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +3 -3
- package/dist/base/cascader.js +2 -372
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +2 -2
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +6 -6
- package/dist/base/feedback.js +4 -4
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +10 -10
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +200 -193
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +8 -8
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +6 -6
- 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 +2 -2
- package/dist/base/toaster.js +36 -36
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-CdfIkCsV.js → batch-action-bar-BoqWIIpV.js} +7 -7
- package/dist/batch-action-bar-BoqWIIpV.js.map +1 -0
- package/dist/blocks/admin.js +21 -21
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +267 -247
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +537 -543
- 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 +1330 -1250
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +6 -6
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +11 -11
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-B-WFKecD.js → breadcrumbs-Bp9Ke7kd.js} +7 -7
- package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
- package/dist/{button-DkmK-z8E.js → button-ChBovTx0.js} +3 -3
- package/dist/button-ChBovTx0.js.map +1 -0
- package/dist/{buttons-BbfzgczK.js → buttons-DeW0bQeK.js} +16 -16
- package/dist/buttons-DeW0bQeK.js.map +1 -0
- package/dist/cards-CNXnmvV5.js +69 -0
- package/dist/cards-CNXnmvV5.js.map +1 -0
- package/dist/cascader-CrAl9zD5.js +439 -0
- package/dist/cascader-CrAl9zD5.js.map +1 -0
- package/dist/chart-I7ROnsl8.js +162 -0
- package/dist/chart-I7ROnsl8.js.map +1 -0
- package/dist/{checkbox-CzYUTPeJ.js → checkbox-MoyHIAPs.js} +3 -3
- package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-MoyHIAPs.js.map} +1 -1
- package/dist/choice-inputs-DHGtx0QV.js +789 -0
- package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
- package/dist/{code-block-CGNaUtAE.js → code-block-BSJyq9e-.js} +9 -9
- package/dist/code-block-BSJyq9e-.js.map +1 -0
- package/dist/{collapsible-Do4G0zcC.js → collapsible-BzJ91LUG.js} +5 -5
- package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BzJ91LUG.js.map} +1 -1
- package/dist/{collection-content-C0e8SsTm.js → collection-content-CSnwtOTH.js} +3 -3
- package/dist/{collection-content-C0e8SsTm.js.map → collection-content-CSnwtOTH.js.map} +1 -1
- package/dist/combobox-Bcvu5J8O.js +363 -0
- package/dist/combobox-Bcvu5J8O.js.map +1 -0
- package/dist/combobox-C2JiSQPc.js +915 -0
- package/dist/combobox-C2JiSQPc.js.map +1 -0
- package/dist/{command-D8NrBj-b.js → command-9e52NPgK.js} +11 -11
- package/dist/command-9e52NPgK.js.map +1 -0
- package/dist/{comments-Di4w0H_S.js → comments-BsgErEqd.js} +44 -39
- package/dist/comments-BsgErEqd.js.map +1 -0
- package/dist/components/base/action-menu/action-menu.d.ts +7 -1
- package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
- package/dist/components/base/cards/card.recipes.d.ts +6 -4
- package/dist/components/base/cards/partials/card-primitives.d.ts +9 -2
- package/dist/components/base/cards/partials/smart-card-header-row.d.ts +3 -1
- package/dist/components/base/cards/smart-card.types.d.ts +3 -4
- package/dist/components/base/cascader/cascader-panel.d.ts +76 -0
- package/dist/components/base/chart/chart.d.ts +6 -1
- package/dist/components/base/choice-inputs/choice-types.d.ts +5 -1
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
- package/dist/components/base/combobox/combobox-field.d.ts +2 -2
- package/dist/components/base/combobox/index.d.ts +4 -2
- package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
- package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/feedback/state-display.d.ts +5 -1
- package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
- package/dist/components/base/forms/form-field.d.ts +7 -2
- package/dist/components/base/forms/form-sizing.d.ts +7 -7
- package/dist/components/base/forms/workflow.d.ts +7 -1
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +8 -1
- package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
- package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
- package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
- package/dist/components/base/metadata-list/metadata-list.d.ts +1 -1
- package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
- package/dist/components/base/navigation/language-switcher.d.ts +12 -4
- package/dist/components/base/navigation/page-header/page-header-commands.d.ts +14 -7
- package/dist/components/base/navigation/page-header/page-header.d.ts +10 -3
- package/dist/components/base/popover/popover.d.ts +3 -3
- package/dist/components/base/popover/popover.recipes.d.ts +10 -6
- package/dist/components/base/repeaters/key-value-editor.d.ts +2 -1
- package/dist/components/base/sheet/sheet.d.ts +2 -0
- package/dist/components/base/sidebar/index.d.ts +1 -1
- package/dist/components/base/sidebar/sidebar.d.ts +29 -5
- package/dist/components/base/toaster/index.d.ts +1 -0
- package/dist/components/base/upload/avatar-upload.d.ts +2 -1
- package/dist/components/base/upload/image-upload.d.ts +2 -1
- package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
- package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +5 -1
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +4 -0
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
- package/dist/components/blocks/analytics/types.d.ts +2 -2
- package/dist/components/blocks/analytics/usage-card/usage-card.strings.d.ts +2 -0
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +1 -1
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +3 -1
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +1 -1
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +3 -1
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +1 -1
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +11 -2
- package/dist/components/blocks/commerce/index.d.ts +7 -6
- package/dist/components/blocks/commerce/inventory-section/inventory-section.d.ts +1 -1
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +7 -2
- package/dist/components/blocks/commerce/invoice-header/index.d.ts +2 -1
- package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-header/types.d.ts +20 -6
- package/dist/components/blocks/commerce/invoice-line-items/invoice-line-items.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-line-items/types.d.ts +24 -7
- package/dist/components/blocks/commerce/invoice-mini/index.d.ts +2 -1
- package/dist/components/blocks/commerce/invoice-mini/types.d.ts +7 -1
- package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +1 -1
- package/dist/components/blocks/commerce/order-customer/types.d.ts +9 -1
- package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +1 -1
- package/dist/components/blocks/commerce/refund-status/types.d.ts +3 -1
- package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
- package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +3 -1
- package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
- package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +3 -1
- package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
- package/dist/components/features/activities/activities.types.d.ts +26 -13
- package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
- package/dist/components/features/activities/partials/activity-marker.d.ts +7 -3
- package/dist/components/features/activities/partials/activity-row.d.ts +24 -0
- package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
- package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
- package/dist/components/features/combobox/combobox.d.ts +2 -2
- package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
- package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
- package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
- package/dist/components/features/combobox/types.d.ts +37 -8
- package/dist/components/features/email-composer/types.d.ts +3 -1
- package/dist/components/features/event-calendar/colors.d.ts +2 -2
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +4 -0
- package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
- package/dist/components/features/filters/facets/range-facet.d.ts +12 -0
- package/dist/components/features/filters/facets/select-facet.d.ts +2 -1
- package/dist/components/features/filters/filters.strings.d.ts +4 -0
- package/dist/components/features/filters/filters.types.d.ts +6 -3
- package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
- package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
- package/dist/components/features/filters/partials/filter-popover-content.d.ts +5 -3
- package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
- package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +25 -3
- package/dist/components/features/global-search/global-search.types.d.ts +2 -0
- package/dist/components/features/global-search/partials/global-search-input.d.ts +10 -0
- package/dist/components/features/global-search/partials/global-search-result-row.d.ts +7 -1
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +8 -0
- package/dist/components/features/media-library/media-library.types.d.ts +50 -12
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +4 -4
- package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
- package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
- package/dist/components/features/products/components/product-options-matrix.d.ts +1 -1
- package/dist/components/features/products/components/product-variant-editor.d.ts +1 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/products.strings.d.ts +9 -1
- package/dist/components/features/products/products.types.d.ts +45 -8
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
- package/dist/components/features/resource/resource.d.ts +6 -2
- package/dist/components/features/resource/resource.types.d.ts +14 -1
- package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
- package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
- package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
- package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/index.d.ts +1 -0
- package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
- package/dist/components/features/table/table-body.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +6 -3
- package/dist/components/features/table/table.strings.d.ts +3 -0
- package/dist/components/features/table/table.types.d.ts +18 -2
- package/dist/components/layout/app-shell/app-shell.types.d.ts +35 -6
- package/dist/components/layout/app-shell/index.d.ts +1 -1
- package/dist/components/layout/app-shell/shell-regions.d.ts +27 -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/containers/two-column-layout.d.ts +2 -0
- package/dist/components/layout/header/header.recipes.d.ts +6 -0
- package/dist/components/layout/header/header.types.d.ts +9 -8
- package/dist/components/layout/layout.types.d.ts +5 -3
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -0
- package/dist/components/layout/navigation/side-nav.d.ts +3 -2
- package/dist/components/layout/normalize-layout-path.d.ts +1 -0
- package/dist/components/layout/page/index.d.ts +2 -1
- package/dist/components/layout/page/page.d.ts +1 -0
- package/dist/components/layout/page/page.strings.d.ts +11 -0
- package/dist/components/layout/page/page.types.d.ts +69 -17
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +10 -3
- 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.d.ts +1 -1
- package/dist/components/layout/sidebar/index.d.ts +2 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +38 -0
- package/dist/components/layout/sidebar/sidebar.context.d.ts +6 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +50 -10
- package/dist/components/layout/sidebar/sidebar.utils.d.ts +9 -1
- package/dist/components/layout/workspace/workspace.types.d.ts +8 -1
- package/dist/components/primitives/link.d.ts +3 -2
- package/dist/components/primitives/money.d.ts +1 -1
- package/dist/components/primitives/number.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
- package/dist/components/ui/alert-dialog.d.ts +2 -2
- package/dist/components/ui/combobox.d.ts +1 -1
- package/dist/components/ui/dialog.d.ts +2 -2
- package/dist/components/ui/overlay-layer.d.ts +18 -0
- package/dist/components/ui/sheet.d.ts +5 -1
- package/dist/components/ui/sidebar-state.d.ts +82 -0
- package/dist/components/ui/sidebar.d.ts +5 -17
- package/dist/{containers-CRmHf7GP.js → containers-CSdc32h9.js} +26 -18
- package/dist/containers-CSdc32h9.js.map +1 -0
- package/dist/{control-group-recipes-DBXmfh2E.js → control-group-recipes-fMuFo0H7.js} +6 -6
- package/dist/control-group-recipes-fMuFo0H7.js.map +1 -0
- package/dist/{copyable-CnGCZdX4.js → copyable-3fdHfMR3.js} +7 -7
- package/dist/{copyable-CnGCZdX4.js.map → copyable-3fdHfMR3.js.map} +1 -1
- package/dist/{data-display-D4oujtx0.js → data-display-Cmj-xZYl.js} +271 -279
- package/dist/data-display-Cmj-xZYl.js.map +1 -0
- package/dist/{date-Q7jnXxpk.js → date-Br0FicVv.js} +5 -5
- package/dist/{date-Q7jnXxpk.js.map → date-Br0FicVv.js.map} +1 -1
- package/dist/date-picker-CyQlFYsP.js +1617 -0
- package/dist/date-picker-CyQlFYsP.js.map +1 -0
- package/dist/date-pickers-tj2MXmXd.js +185 -0
- package/dist/date-pickers-tj2MXmXd.js.map +1 -0
- package/dist/{display-BB4BL_-K.js → display-CT_N2a3w.js} +9 -9
- package/dist/{display-BB4BL_-K.js.map → display-CT_N2a3w.js.map} +1 -1
- package/dist/dropdown-menu-C08iIugv.js +194 -0
- package/dist/dropdown-menu-C08iIugv.js.map +1 -0
- package/dist/features/activities.js +388 -326
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +46 -32
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +130 -130
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +11 -10
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +13 -13
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer.js +243 -239
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +197 -199
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +168 -143
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +19 -30
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map/style.css +15 -0
- package/dist/features/map.js +369 -343
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1202 -975
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +2 -2
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1270 -1183
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +160 -153
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +119 -113
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +28 -19
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +297 -256
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +57 -50
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +470 -470
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-Dzo1xtAU.js +246 -0
- package/dist/feedback-Dzo1xtAU.js.map +1 -0
- package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-D6H7tVJi.js} +5 -5
- package/dist/field-affordance-recipes-D6H7tVJi.js.map +1 -0
- package/dist/field-control-attributes-B6i335wr.js +18 -0
- package/dist/field-control-attributes-B6i335wr.js.map +1 -0
- package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
- package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
- package/dist/filters-Dl80yYtN.js +2415 -0
- package/dist/filters-Dl80yYtN.js.map +1 -0
- package/dist/form-field-CAPdwdnZ.js +74 -0
- package/dist/form-field-CAPdwdnZ.js.map +1 -0
- package/dist/{form-sizing-NXgjkmBG.js → form-sizing-CgcrUbLU.js} +5 -5
- package/dist/form-sizing-CgcrUbLU.js.map +1 -0
- package/dist/{forms-BV5m5aQF.js → forms-B3W8CH7-.js} +17 -13
- package/dist/forms-B3W8CH7-.js.map +1 -0
- package/dist/forms-numeric-CwjQJe-O.js +991 -0
- package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
- package/dist/{header-BA697l4a.js → header-ZIIsRKxP.js} +145 -141
- package/dist/header-ZIIsRKxP.js.map +1 -0
- package/dist/header.recipes-BigdJjw1.js +6 -0
- package/dist/header.recipes-BigdJjw1.js.map +1 -0
- package/dist/hooks/use-files.d.ts +2 -0
- package/dist/{hooks-BQ-L7Uu2.js → hooks-BitHSh-Y.js} +27 -15
- package/dist/hooks-BitHSh-Y.js.map +1 -0
- package/dist/{icon-badge-COWbCCWu.js → icon-badge-npxF1SLX.js} +4 -4
- package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-npxF1SLX.js.map} +1 -1
- package/dist/index.js +4 -5
- package/dist/{input-Cdw4k0fb.js → input-7KAc7XQL.js} +9 -9
- package/dist/{input-Cdw4k0fb.js.map → input-7KAc7XQL.js.map} +1 -1
- package/dist/input-DIREVYHs.js +21 -0
- package/dist/input-DIREVYHs.js.map +1 -0
- package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
- package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
- package/dist/item-FfWnaYST.js +278 -0
- package/dist/item-FfWnaYST.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 +1 -1
- 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 +30 -0
- package/dist/layout.types-E_GAApzO.js.map +1 -0
- package/dist/lib/affordance-geometry.generated.d.ts +35 -35
- package/dist/lib/control-group-recipes.d.ts +5 -5
- package/dist/lib/field-affordance-recipes.d.ts +2 -2
- package/dist/lib/field-control-attributes.d.ts +11 -0
- package/dist/lib/field-state-recipes.d.ts +2 -0
- package/dist/lib/format.d.ts +1 -0
- package/dist/lib/motion-recipes.d.ts +3 -0
- package/dist/lib/navigation-row-recipes.d.ts +7 -7
- package/dist/lib/overlay-anatomy-recipes.d.ts +3 -3
- package/dist/lib/portal-recipes.d.ts +3 -0
- package/dist/lib/surface-recipes.d.ts +1 -1
- package/dist/lib/token-merge.generated.d.ts +18 -15
- package/dist/lib/utils.js +1 -1
- package/dist/map-demo-tile.svg +1 -1
- package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C81DAnKI.js} +6 -6
- package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C81DAnKI.js.map} +1 -1
- package/dist/{mentions-RKOQaaIB.js → mentions-qOnedSt4.js} +237 -168
- package/dist/mentions-qOnedSt4.js.map +1 -0
- package/dist/message-BJHnn43M.js +135 -0
- package/dist/message-BJHnn43M.js.map +1 -0
- package/dist/{metadata-list-qVV7AVxa.js → metadata-list-XkqZ_UXH.js} +64 -64
- package/dist/metadata-list-XkqZ_UXH.js.map +1 -0
- package/dist/{motion-recipes-ChBg4HBq.js → motion-recipes-DitYv6P2.js} +10 -2
- package/dist/motion-recipes-DitYv6P2.js.map +1 -0
- package/dist/navigation-BgtPJAhi.js +288 -0
- package/dist/navigation-BgtPJAhi.js.map +1 -0
- package/dist/navigation-Bt-v7rWP.js +261 -0
- package/dist/navigation-Bt-v7rWP.js.map +1 -0
- package/dist/{navigation-row-recipes-WZEs-hYo.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
- package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
- package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
- package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
- package/dist/{number-E_OiIfJz.js → number-CYqBcrSj.js} +79 -87
- package/dist/number-CYqBcrSj.js.map +1 -0
- package/dist/overflow-tab-bar-BQCA2Zn2.js +172 -0
- package/dist/overflow-tab-bar-BQCA2Zn2.js.map +1 -0
- package/dist/overlays-CC8zI3Du.js +1017 -0
- package/dist/overlays-CC8zI3Du.js.map +1 -0
- package/dist/page-BoQ1VaFJ.js +331 -0
- package/dist/page-BoQ1VaFJ.js.map +1 -0
- package/dist/page-header-commands-DIKspJfx.js +193 -0
- package/dist/page-header-commands-DIKspJfx.js.map +1 -0
- package/dist/{pagination-Ch8X_47u.js → pagination-Br8TdV9A.js} +7 -7
- package/dist/{pagination-Ch8X_47u.js.map → pagination-Br8TdV9A.js.map} +1 -1
- package/dist/popover-k8TdUcAt.js +201 -0
- package/dist/popover-k8TdUcAt.js.map +1 -0
- package/dist/{popover-menu-BYaCdFhf.js → popover-menu-yn-o0kyA.js} +7 -7
- package/dist/{popover-menu-BYaCdFhf.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
- package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DJ0AkUan.js} +19 -12
- package/dist/popover.recipes-DJ0AkUan.js.map +1 -0
- package/dist/portal-recipes-DyUXqUtD.js +9 -0
- package/dist/portal-recipes-DyUXqUtD.js.map +1 -0
- package/dist/{primitives-Du64iDbb.js → primitives-BkkQjYl7.js} +23 -18
- package/dist/primitives-BkkQjYl7.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-BvF2oCdV.js → progress-DZFXXzPs.js} +9 -9
- package/dist/{progress-BvF2oCdV.js.map → progress-DZFXXzPs.js.map} +1 -1
- package/dist/{receipt-D789Jwyy.js → receipt-C7LhOg7Q.js} +7 -7
- package/dist/receipt-C7LhOg7Q.js.map +1 -0
- package/dist/rich-text-BnTzZjIo.js +45 -0
- package/dist/rich-text-BnTzZjIo.js.map +1 -0
- package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-CAurDwT5.js} +501 -424
- package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js +99 -0
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
- package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
- package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
- package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
- package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
- package/dist/{scroll-area-La5RXsEk.js → scroll-area-Bj6CRUif.js} +2 -2
- package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
- package/dist/{separator-DAEV0w65.js → separator-B9ewiCGO.js} +2 -2
- package/dist/{separator-DAEV0w65.js.map → separator-B9ewiCGO.js.map} +1 -1
- package/dist/{separator-GNfPG-90.js → separator-DM6gs2vu.js} +3 -3
- package/dist/{separator-GNfPG-90.js.map → separator-DM6gs2vu.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/settings-DZPHgpx4.js +155 -0
- package/dist/settings-DZPHgpx4.js.map +1 -0
- package/dist/sheet-C4DHsgLk.js +250 -0
- package/dist/sheet-C4DHsgLk.js.map +1 -0
- package/dist/sidebar-C8BnDwTH.js +709 -0
- package/dist/sidebar-C8BnDwTH.js.map +1 -0
- package/dist/sidebar-CmD6a-HK.js +1004 -0
- package/dist/sidebar-CmD6a-HK.js.map +1 -0
- package/dist/skeleton-DDgdhmu9.js +265 -0
- package/dist/skeleton-DDgdhmu9.js.map +1 -0
- package/dist/smart-card-B6vLxqa_.js +617 -0
- package/dist/smart-card-B6vLxqa_.js.map +1 -0
- package/dist/{structure-C0V0_Fyf.js → structure-DZJ2wbAU.js} +2 -2
- package/dist/{structure-C0V0_Fyf.js.map → structure-DZJ2wbAU.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
- package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
- package/dist/{table-DH7rozUv.js → table-CBonSdTp.js} +573 -519
- package/dist/table-CBonSdTp.js.map +1 -0
- package/dist/{table-CpvnzJn9.js → table-CXSPHH25.js} +75 -71
- package/dist/table-CXSPHH25.js.map +1 -0
- package/dist/tabs-C4Kr_hCr.js +192 -0
- package/dist/tabs-C4Kr_hCr.js.map +1 -0
- package/dist/{text-inputs-DXItiR0O.js → text-inputs-jdkS3ReG.js} +18 -18
- package/dist/text-inputs-jdkS3ReG.js.map +1 -0
- package/dist/theme.css +40 -37
- package/dist/{timelines-DmtztAY_.js → timelines-CoPwdJP0.js} +13 -12
- package/dist/timelines-CoPwdJP0.js.map +1 -0
- package/dist/tooltip-31NwIpTo.js +113 -0
- package/dist/tooltip-31NwIpTo.js.map +1 -0
- package/dist/{tree-CV11PURP.js → tree-CeYVzdFE.js} +9 -9
- package/dist/{tree-CV11PURP.js.map → tree-CeYVzdFE.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-CSyJrh28.js → typography-C7-YMW1S.js} +12 -12
- package/dist/{typography-CSyJrh28.js.map → typography-C7-YMW1S.js.map} +1 -1
- package/dist/typography.js +1 -1
- package/dist/ui-provider-C-74NVLc.js +178 -0
- package/dist/ui-provider-C-74NVLc.js.map +1 -0
- package/dist/ui-provider.js +2 -3
- package/dist/{upload-C9SA0X-8.js → upload-Hdm5gObf.js} +309 -296
- package/dist/upload-Hdm5gObf.js.map +1 -0
- package/dist/{upload-queue-DhQJiSRc.js → upload-queue-D0sYPuqo.js} +16 -14
- package/dist/upload-queue-D0sYPuqo.js.map +1 -0
- package/dist/{usage-card-DVTRDmGz.js → usage-card-9s8hLDfn.js} +24 -17
- package/dist/usage-card-9s8hLDfn.js.map +1 -0
- package/dist/{utils-CF3c95Io.js → utils-DhuoqFy4.js} +255 -165
- package/dist/utils-DhuoqFy4.js.map +1 -0
- package/dist/value-inputs-D3aPgq9H.js +980 -0
- package/dist/value-inputs-D3aPgq9H.js.map +1 -0
- package/dist/{value-typography-ClupF0Gz.js → value-typography-uSzzG9Gf.js} +32 -26
- package/dist/value-typography-uSzzG9Gf.js.map +1 -0
- package/dist/{workspace-9EFVXUyk.js → workspace-CC8Vchiu.js} +51 -50
- package/dist/workspace-CC8Vchiu.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +4 -3
- package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
- package/docs/consumer-skill/examples/app-layout.tsx +52 -1
- package/docs/consumer-skill/examples/commerce-lines.tsx +271 -0
- package/docs/consumer-skill/examples/custom-composition.tsx +21 -0
- package/docs/consumer-skill/examples/detail.tsx +5 -4
- package/docs/consumer-skill/examples/edit.tsx +3 -3
- package/docs/consumer-skill/examples/editable-sections.tsx +38 -0
- package/docs/consumer-skill/examples/index-table.tsx +4 -4
- package/docs/consumer-skill/examples/manifest.json +38 -1
- package/docs/consumer-skill/examples/product-media.tsx +41 -0
- package/docs/consumer-skill/examples/product-parts.tsx +81 -0
- package/docs/consumer-skill/examples/rhf-edit-page.tsx +1 -1
- package/docs/consumer-skill/examples/rhf-overlay-form.tsx +24 -11
- package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
- package/docs/consumer-skill/references/agents-md.md +21 -19
- package/docs/consumer-skill/references/analytics.md +33 -1
- package/docs/consumer-skill/references/commerce-composition.md +97 -0
- package/docs/consumer-skill/references/component-contracts.json +21249 -14205
- package/docs/consumer-skill/references/composition-mapping.md +17 -3
- package/docs/consumer-skill/references/composition.md +177 -32
- package/docs/consumer-skill/references/critique-rubric.md +98 -0
- package/docs/consumer-skill/references/custom-composition.md +261 -0
- package/docs/consumer-skill/references/data-reading.md +79 -0
- package/docs/consumer-skill/references/design-contract.md +12 -9
- package/docs/consumer-skill/references/discovery.md +27 -3
- package/docs/consumer-skill/references/domain-structures.md +124 -0
- package/docs/consumer-skill/references/installation.md +62 -8
- package/docs/consumer-skill/references/integration.md +59 -1
- package/docs/consumer-skill/references/product-composition.md +94 -0
- package/docs/consumer-skill/references/public-api.json +3044 -445
- package/docs/consumer-skill/references/review.md +87 -10
- package/docs/consumer-skill/references/rhf-workflows.md +79 -0
- package/docs/consumer-skill/references/screen-archetypes.md +19 -7
- package/docs/consumer-skill/references/screen-decisions.md +126 -0
- package/docs/consumer-skill/references/theming.md +24 -20
- package/docs/consumer-skill/references/tokens.json +9 -9
- package/docs/consumer-skill/references/view-craft.md +153 -0
- package/docs/consumer-skill/references/view-spec.md +73 -0
- package/docs/consumer-skill/references/workflows.md +7 -1
- package/docs/consumer-skill/scripts/composition-policy.mjs +176 -26
- package/docs/consumer-skill/scripts/composition-schema.mjs +1 -1
- package/docs/consumer-skill/scripts/composition.mjs +61 -5
- package/docs/consumer-skill/scripts/discovery.mjs +54 -0
- package/docs/consumer-skill/scripts/inspect-component.mjs +1 -1
- package/docs/consumer-skill/scripts/inspection.mjs +73 -18
- package/docs/consumer-skill/scripts/setup-skills.mjs +79 -7
- package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
- package/docs/consumer-skills/themelia-components/SKILL.md +14 -13
- package/docs/consumer-skills/themelia-composition/SKILL.md +16 -17
- package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
- package/docs/consumer-skills/themelia-foundation/SKILL.md +2 -1
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +24 -17
- package/package.json +4 -2
- package/templates/admin-shell-template.tsx +1 -2
- package/templates/customers-template.tsx +18 -16
- package/dist/accordion-96o0pN62.js.map +0 -1
- package/dist/action-menu-CHgs8vmj.js.map +0 -1
- package/dist/affordance-geometry.generated-B8yGOr8-.js.map +0 -1
- package/dist/ai-artifact-BZUGwBq6.js.map +0 -1
- package/dist/app-shell-D63ATkIK.js +0 -237
- package/dist/app-shell-D63ATkIK.js.map +0 -1
- package/dist/auth-D2FVZ1MH.js.map +0 -1
- package/dist/avatar-DWO_HHhB.js.map +0 -1
- package/dist/base/cascader.js.map +0 -1
- package/dist/batch-action-bar-CdfIkCsV.js.map +0 -1
- package/dist/breadcrumbs-B-WFKecD.js.map +0 -1
- package/dist/button-DkmK-z8E.js.map +0 -1
- package/dist/buttons-BbfzgczK.js.map +0 -1
- package/dist/cards-4JTWqvVe.js +0 -68
- package/dist/cards-4JTWqvVe.js.map +0 -1
- package/dist/chart-C19flDQb.js +0 -155
- package/dist/chart-C19flDQb.js.map +0 -1
- package/dist/choice-inputs-JLtij2y4.js +0 -776
- package/dist/choice-inputs-JLtij2y4.js.map +0 -1
- package/dist/code-block-CGNaUtAE.js.map +0 -1
- package/dist/combobox-CBJDs6w_.js +0 -877
- package/dist/combobox-CBJDs6w_.js.map +0 -1
- package/dist/combobox-hbhSS18O.js +0 -355
- package/dist/combobox-hbhSS18O.js.map +0 -1
- package/dist/command-D8NrBj-b.js.map +0 -1
- package/dist/comments-Di4w0H_S.js.map +0 -1
- package/dist/containers-CRmHf7GP.js.map +0 -1
- package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
- package/dist/data-display-D4oujtx0.js.map +0 -1
- package/dist/date-picker-zOt1oNss.js +0 -1542
- package/dist/date-picker-zOt1oNss.js.map +0 -1
- package/dist/date-pickers-cj8IXbDC.js +0 -179
- package/dist/date-pickers-cj8IXbDC.js.map +0 -1
- package/dist/dropdown-menu-CjY8Vt7W.js +0 -193
- package/dist/dropdown-menu-CjY8Vt7W.js.map +0 -1
- package/dist/feedback-DZNL5Lg1.js +0 -239
- package/dist/feedback-DZNL5Lg1.js.map +0 -1
- package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
- package/dist/filters-BcT-uoFy.js +0 -2209
- package/dist/filters-BcT-uoFy.js.map +0 -1
- package/dist/form-field-CsgRmdit.js +0 -63
- package/dist/form-field-CsgRmdit.js.map +0 -1
- package/dist/form-sizing-NXgjkmBG.js.map +0 -1
- package/dist/forms-BV5m5aQF.js.map +0 -1
- package/dist/forms-numeric-Cd33AKbD.js +0 -906
- package/dist/forms-numeric-Cd33AKbD.js.map +0 -1
- package/dist/header-BA697l4a.js.map +0 -1
- package/dist/hooks-BQ-L7Uu2.js.map +0 -1
- package/dist/input-DOPL5_QE.js +0 -21
- package/dist/input-DOPL5_QE.js.map +0 -1
- package/dist/item-BvZ2DR_x.js +0 -277
- package/dist/item-BvZ2DR_x.js.map +0 -1
- package/dist/layout.types-Cn7aUzJp.js +0 -20
- package/dist/layout.types-Cn7aUzJp.js.map +0 -1
- package/dist/mentions-RKOQaaIB.js.map +0 -1
- package/dist/message-INU2xsxu.js +0 -128
- package/dist/message-INU2xsxu.js.map +0 -1
- package/dist/metadata-list-qVV7AVxa.js.map +0 -1
- package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
- package/dist/navigation-BQNcg1jT.js +0 -269
- package/dist/navigation-BQNcg1jT.js.map +0 -1
- package/dist/navigation-DLF3E1IC.js +0 -145
- package/dist/navigation-DLF3E1IC.js.map +0 -1
- package/dist/navigation-row-recipes-WZEs-hYo.js.map +0 -1
- package/dist/number-E_OiIfJz.js.map +0 -1
- package/dist/overflow-tab-bar-CrbqMteP.js +0 -284
- package/dist/overflow-tab-bar-CrbqMteP.js.map +0 -1
- package/dist/overlays-BlKynmde.js +0 -1004
- package/dist/overlays-BlKynmde.js.map +0 -1
- package/dist/page-CIwNUtGr.js +0 -227
- package/dist/page-CIwNUtGr.js.map +0 -1
- package/dist/page-header-commands-DFMlNYzN.js +0 -128
- package/dist/page-header-commands-DFMlNYzN.js.map +0 -1
- package/dist/popover-uwzX2vo7.js +0 -198
- package/dist/popover-uwzX2vo7.js.map +0 -1
- package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
- package/dist/primitives-Du64iDbb.js.map +0 -1
- package/dist/receipt-D789Jwyy.js.map +0 -1
- package/dist/rich-text-CLJEf76s.js +0 -78
- package/dist/rich-text-CLJEf76s.js.map +0 -1
- package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
- package/dist/rich-text-editor-toolbar-L__e4x47.js +0 -94
- package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
- package/dist/safe-image-src-C6kQSMBZ.js +0 -17
- package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
- package/dist/sanitize-html-DsQmI48u.js.map +0 -1
- package/dist/settings-BA2iboic.js +0 -174
- package/dist/settings-BA2iboic.js.map +0 -1
- package/dist/sheet-DoAxTb2J.js +0 -213
- package/dist/sheet-DoAxTb2J.js.map +0 -1
- package/dist/sidebar-ByqKR_W5.js +0 -512
- package/dist/sidebar-ByqKR_W5.js.map +0 -1
- package/dist/sidebar-D2iSnGJ7.js +0 -619
- package/dist/sidebar-D2iSnGJ7.js.map +0 -1
- package/dist/skeleton-CUj8O5Bd.js +0 -264
- package/dist/skeleton-CUj8O5Bd.js.map +0 -1
- package/dist/smart-card-CqkzQsK-.js +0 -614
- package/dist/smart-card-CqkzQsK-.js.map +0 -1
- package/dist/table-CpvnzJn9.js.map +0 -1
- package/dist/table-DH7rozUv.js.map +0 -1
- package/dist/tabs-eqVsJZWO.js +0 -191
- package/dist/tabs-eqVsJZWO.js.map +0 -1
- package/dist/text-inputs-DXItiR0O.js.map +0 -1
- package/dist/theme-scope-BJ6eE2xt.js +0 -50
- package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
- package/dist/timelines-DmtztAY_.js.map +0 -1
- package/dist/tooltip-B4hjKtoV.js +0 -111
- package/dist/tooltip-B4hjKtoV.js.map +0 -1
- package/dist/ui-provider-CQCuCBcy.js +0 -136
- package/dist/ui-provider-CQCuCBcy.js.map +0 -1
- package/dist/upload-C9SA0X-8.js.map +0 -1
- package/dist/upload-queue-DhQJiSRc.js.map +0 -1
- package/dist/usage-card-DVTRDmGz.js.map +0 -1
- package/dist/use-mobile-vaLKwgyf.js +0 -15
- package/dist/use-mobile-vaLKwgyf.js.map +0 -1
- package/dist/utils-CF3c95Io.js.map +0 -1
- package/dist/value-inputs-C0o70p-U.js +0 -980
- package/dist/value-inputs-C0o70p-U.js.map +0 -1
- package/dist/value-typography-ClupF0Gz.js.map +0 -1
- package/dist/workspace-9EFVXUyk.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-inputs-jdkS3ReG.js","names":["Textarea","React","InputGroup","InputGroupAddon","InputGroupText","InputGroupInput","Input","InputGroupTextarea","InputGroupPrimitive","InputGroupAddonPrimitive","InputGroupTextPrimitive","InputGroupInputPrimitive","InputGroupTextareaPrimitive","React","React","useDensityConfig","cn","affordanceGeometry","Button","Text","fieldStateRecipes","fieldAffordanceRecipes","editableTextSizeClasses","formTextareaInsetClasses","formControlHeightClasses","formTextareaAffordanceTopClasses","formControlHorizontalPaddingClasses","formControlPaddingClasses","formTextareaSizeClasses","resolveFormControlSize","clearNativeField","InputTrailingActionContext","useFormFieldState","FieldClearButton","Input","Input$1","React$1","defaultTextareaStrings","Textarea$1","sizeProp","controlledValue","providedId","stringsProp","props","allProps","textareaRef","useRef","strings","useStrings","size","defaultScale","textareaValue","onChange","hasError","invalid","adjustHeight","useCallback","autoResize","textarea","css","lineHeight","padding","border","minHeight","minRows","maxHeight","maxRows","newHeight","useEffect","previous","observer","signature","handleTextareaChange","newValue","wouldExceedLimit","updateValue","onValueChange","handleClear","loading","onClear","showClearButton","clearable","hasValue","showCount","forwardedRef","node","isControlled","className","characterCount","hasCharacterLimit","maxLength","Loader2Icon","Textarea","InputGroup$1","inputGroupAddonVariants","cva","InputGroupAddon$1","align","InputGroupText$1","InputGroupInput$1","InputGroupTextarea$1","useInputGroupScale","InputGroup","addonAlignmentClasses","addonInlinePaddingClasses","addonIconClasses","InputGroupAddon","alignment","InputGroupButton","iconOnly","isScalarContent","content","InputGroupText","children","InputGroupInput","InputGroupTextarea","defaultPasswordInputStrings","PasswordInput","internalVisible","setInternalVisible","defaultVisible","visible","isVisible","disabledState","disabled","toggleVisibility","nextVisible","onVisibleChange","visibilityAction","revealable","visibilityButtonClassName","event","jsx","EyeOff","Eye","wrapperClassName","inputStrings","slugifyValue","safeSeparator","separator","escapedSeparator","normalized","value","lowercase","trim","SlugField","slug","slugify"],"sources":["../src/components/base/text-inputs/textarea.tsx","../src/components/ui/textarea.tsx","../src/components/ui/input-group.tsx","../src/components/base/text-inputs/input-group.tsx","../src/components/base/text-inputs/password-input.tsx","../src/components/base/text-inputs/slug-field.tsx"],"sourcesContent":["import { fieldStateRecipes } from '../../../lib/field-state-recipes';\nimport { affordanceGeometry } from '../../../lib/affordance-geometry.generated';\nimport { fieldAffordanceRecipes } from '../../../lib/field-affordance-recipes';\nimport { editableTextSizeClasses } from '../../../lib/editable-text-recipe';\nimport { Loader2Icon } from 'lucide-react';\nimport * as React from 'react';\nimport { useRef, useCallback, useEffect } from 'react';\nimport { Text } from '../../typography';\nimport { useDensityConfig, type FormControlSize } from '../../../lib/ui-provider';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { formTextareaAffordanceTopClasses, formTextareaInsetClasses, formTextareaSizeClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { useFormFieldState } from './hooks';\nimport { clearNativeField } from './clear-native-field';\nimport { FieldClearButton } from './field-clear-button';\n\nexport interface TextareaStrings {\n\t\tclear: string;\n}\n\nexport const defaultTextareaStrings: TextareaStrings = {\n\t\tclear: 'Clear textarea',\n};\n\nexport interface TextareaProps extends Omit<React.ComponentProps<'textarea'>, 'onChange' | 'value'> {\n\t\t// String overrides (e.g. clear button aria-label)\n\t\t/** Overrides the character-count and clear copy. */\n\t\tstrings?: StringsProp<TextareaStrings>;\n\t\t// Character limit\n\t\t/** Character cap, also used as the denominator of the count. */\n\t\tmaxLength?: number;\n\t\t/** Shows the current and maximum character count. */\n\t\tshowCharacterCount?: boolean;\n\n\t\t// Clear button\n\t\t/** Shows an inline clear action when the field has a value. */\n\t\tclearable?: boolean;\n\t\tonClear?: () => void;\n\n\t\t// Loading state\n\t\t/** Replaces the trailing affordance with a loading indicator. */\n\t\tloading?: boolean;\n\n\t\t// Error state for styling (passed from FormField)\n\t\t/** Applies the invalid styling. Validation copy stays with FormField. */\n\t\tinvalid?: boolean;\n\n\t\t// Visual size\n\t\t/** Control density. Falls back to `UIProvider.density.defaultScale`. */\n\t\tsize?: FormControlSize;\n\n\t\t// Auto-resize functionality\n\t\t/** Grows the field with its content, between `minRows` and `maxRows`. */\n\t\tautoResize?: boolean;\n\t\t/** Smallest height, in rows, when `autoResize` is set. */\n\t\tminRows?: number;\n\t\t/** Height at which the field stops growing and starts scrolling. */\n\t\tmaxRows?: number;\n\n\t\t// Value props\n\t\tonChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n\t\t/** Raw string callback, emitted alongside the native change event. */\n\t\tonValueChange?: (value: string) => void;\n\t\t/** Current text. Controlled. */\n\t\tvalue?: string | null;\n\t\t/** Initial text for uncontrolled use. */\n\t\tdefaultValue?: string;\n}\n\nconst TextareaImpl = (\n\t\tallProps: TextareaProps,\n\t\tforwardedRef: React.ForwardedRef<HTMLTextAreaElement>,\n) => {\n\t\tconst {\n\t\t\t\tclassName,\n\t\t\t\tmaxLength,\n\t\t\t\tshowCharacterCount,\n\t\t\t\tclearable,\n\t\t\t\tonClear,\n\t\t\t\tloading = false,\n\t\t\t\tinvalid,\n\t\t\t\tsize: sizeProp,\n\t\t\t\tautoResize = false,\n\t\t\t\tminRows = 2,\n\t\t\t\tmaxRows,\n\t\t\t\tonChange,\n\t\t\t\tonValueChange,\n\t\t\t\tvalue: controlledValue,\n\t\t\t\tdefaultValue,\n\t\t\t\tid: providedId,\n\t\t\t\tstrings: stringsProp,\n\t\t\t\t...props\n\t\t} = allProps;\n\t\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\t\tconst strings = useStrings(defaultTextareaStrings, stringsProp);\n\t\tconst { defaultScale } = useDensityConfig();\n\t\tconst size = resolveFormControlSize(sizeProp, defaultScale);\n\n\t\t// Use shared form field state hook\n\t\tconst {\n\t\t\t\tid,\n\t\t\t\tvalue: textareaValue,\n\t\t\t\tisControlled,\n\t\t\t\tcharacterCount,\n\t\t\t\thasCharacterLimit,\n\t\t\t\tshowCount,\n\t\t\t\thasValue,\n\t\t\t\tupdateValue,\n\t\t\t\twouldExceedLimit,\n\t\t} = useFormFieldState({\n\t\t\t\tcontrolledValue,\n\t\t\t\thasControlledValue: 'value' in allProps,\n\t\t\t\tnativeRef: textareaRef,\n\t\t\t\tdefaultValue,\n\t\t\t\tmaxLength,\n\t\t\t\tshowCharacterCount,\n\t\t\t\tprovidedId,\n\t\t\t\tidPrefix: 'textarea',\n\t\t\t\thasOnChange: onChange !== undefined,\n\t\t});\n\n\t\t// Derive display states\n\t\tconst hasError = Boolean(invalid);\n\n\t\tconst adjustHeight = useCallback(() => {\n\t\t\t\tif (!autoResize || !textareaRef.current) return;\n\n\t\t\t\tconst textarea = textareaRef.current;\n\n\t\t\t\tconst css = getComputedStyle(textarea);\n\t\t\t\tconst lineHeight = Number.parseFloat(css.lineHeight) || 20;\n\t\t\t\tconst padding = (Number.parseFloat(css.paddingTop) || 0) + (Number.parseFloat(css.paddingBottom) || 0);\n\t\t\t\tconst border = css.boxSizing === 'border-box' ? (Number.parseFloat(css.borderTopWidth) || 0) + (Number.parseFloat(css.borderBottomWidth) || 0) : 0;\n\t\t\t\ttextarea.style.height = 'auto';\n\t\t\t\tconst minHeight = lineHeight * minRows + padding + border;\n\t\t\t\tconst maxHeight = maxRows ? lineHeight * maxRows + padding + border : Infinity;\n\n\t\t\t\tconst newHeight = Math.min(Math.max(textarea.scrollHeight + border, minHeight), maxHeight);\n\t\t\t\ttextarea.style.height = `${newHeight}px`;\n\t\t}, [autoResize, maxRows, minRows]);\n\n\t\tuseEffect(() => {\n\t\t\t\tadjustHeight();\n\t\t}, [textareaValue, props.placeholder, autoResize, adjustHeight]);\n\n\t\tuseEffect(() => {\n\t\t\t\tconst textarea = textareaRef.current;\n\t\t\t\tif (!autoResize || !textarea || typeof ResizeObserver === 'undefined') return;\n\t\t\t\tlet previous = '';\n\t\t\t\tconst observer = new ResizeObserver(() => {\n\t\t\t\t\t\tconst css = getComputedStyle(textarea);\n\t\t\t\t\t\tconst signature = `${textarea.clientWidth}:${css.fontSize}:${css.lineHeight}`;\n\t\t\t\t\t\tif (signature === previous) return;\n\t\t\t\t\t\tprevious = signature;\n\t\t\t\t\t\tadjustHeight();\n\t\t\t\t});\n\t\t\t\tobserver.observe(textarea);\n\t\t\t\treturn () => observer.disconnect();\n\t\t}, [autoResize, adjustHeight]);\n\n\t\tconst handleTextareaChange = useCallback(\n\t\t\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\t\t\t\tconst newValue = e.target.value;\n\n\t\t\t\t\t\t// Check character limit\n\t\t\t\t\t\tif (wouldExceedLimit(newValue)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Update internal state if uncontrolled\n\t\t\t\t\t\tupdateValue(newValue);\n\t\t\t\t\t\tonValueChange?.(newValue);\n\n\t\t\t\t\t\t// Call external onChange\n\t\t\t\t\t\tonChange?.(e);\n\n\t\t\t\t\t\t// Auto-resize if enabled\n\t\t\t\t\t\tif (autoResize) {\n\t\t\t\t\t\t\t\tsetTimeout(adjustHeight, 0);\n\t\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t[onChange, onValueChange, updateValue, wouldExceedLimit, autoResize, adjustHeight]\n\t\t);\n\n\t\tconst handleClear = useCallback(() => {\n\t\t\t\tif (props.disabled || props.readOnly || loading) return;\n\n\t\t\t\tif (textareaRef.current) clearNativeField(textareaRef.current);\n\n\t\t\t\t// Execute optional onClear callback\n\t\t\t\tonClear?.();\n\n\t\t\t\t// Focus the textarea after clearing\n\t\t\t\ttextareaRef.current?.focus();\n\n\t\t}, [props.disabled, props.readOnly, loading, onClear]);\n\n\t\t// Determine what to show in the end position\n\t\tconst showClearButton = clearable && hasValue && !loading && !showCount;\n\n\t\treturn (\n\t\t\t\t<div className={cn('textarea--component', 'relative w-full')}>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\tref={(node) => {\n\t\t\t\t\t\t\t\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\t\t\t\t\t\t\t\t\tforwardedRef(node);\n\t\t\t\t\t\t\t\t\t\t} else if (forwardedRef) {\n\t\t\t\t\t\t\t\t\t\t\t\tforwardedRef.current = node;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\ttextareaRef.current = node;\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tid={id}\n\t\t\t\t\t\t\t\t{...(isControlled ? { value: textareaValue } : { defaultValue })}\n\t\t\t\t\t\t\t\tonChange={handleTextareaChange}\n\t\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\t\taria-invalid={hasError || undefined}\n\t\t\t\t\t\t\t\trows={minRows}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tresize: autoResize ? 'none' : props.style?.resize,\n\t\t\t\t\t\t\t\t\t\toverflow: autoResize && maxRows ? 'auto' : 'visible',\n\t\t\t\t\t\t\t\t\t\t...props.style,\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\t// Base styles\n\t\t\t\t\t\t\t\t\t\t'placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground',\n\t\t\t\t\t\t\t\t\t\t'border-input box-border flex w-full rounded-radius border bg-transparent px-control',\n\t\t\t\t\t\t\t\t\t\t// First line where a single-line control of this size draws its value.\n\t\t\t\t\t\t\t\t\t\tformTextareaInsetClasses[size],\n\t\t\t\t\t\t\t\t\t\t'transition-[color,box-shadow] outline-none',\n\t\t\t\t\t\t\t\t\t\t'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\t\t\t\t\t// Same read-only fill as Input; disabled stays on the transparent fill.\n\t\t\t\t\t\t\t\t\t\t'[&:read-only:not(:disabled)]:bg-muted',\n\t\t\t\t\t\t\t\t\t\tformTextareaSizeClasses[size],\n\t\t\t\t\t\t\t\t\t\teditableTextSizeClasses[size],\n\t\t\t\t\t\t\t\t\t\t// Focus styles\n\t\t\t\t\t\t\t\t\t\tfieldStateRecipes.focus,\n\t\t\t\t\t\t\t\t\t\t// Invalid/error styles\n\t\t\t\t\t\t\t\t\t\tfieldStateRecipes.invalid,\n\t\t\t\t\t\t\t\t\t\t// Dynamic padding for overlays\n\t\t\t\t\t\t\t\t\t\tshowClearButton && fieldAffordanceRecipes.clearPadding[size],\n\t\t\t\t\t\t\t\t\t\tshowCount && fieldAffordanceRecipes.textareaCountPadding,\n\t\t\t\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tdisabled={props.disabled || loading}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t{/* Character Count */}\n\t\t\t\t\t\t{!!showCount && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'pointer-events-none absolute bottom-control-y-offset text-xs tabular-nums',\n\t\t\t\t\t\t\t\t\t\t\t\taffordanceGeometry.clearEnd.md,\n\t\t\t\t\t\t\t\t\t\t\t\tprops.disabled && 'opacity-50',\n\t\t\t\t\t\t\t\t\t\t\t\thasError ? 'text-destructive' : 'text-muted-foreground'\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\t\t\t\t\t\trole=\"status\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type={hasError ? 'error' : 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t\t\t{characterCount}\n\t\t\t\t\t\t\t\t\t\t\t\t{hasCharacterLimit ? `/${maxLength}` : ''}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Loading Spinner */}\n\t\t\t\t\t\t{!!loading && !showCount && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'pointer-events-none absolute end-[calc(var(--control-x)*var(--space-scale))]',\n\t\t\t\t\t\t\t\t\t\t\t\tformTextareaAffordanceTopClasses.icon[size],\n\t\t\t\t\t\t\t\t\t\t\t\thasError ? 'text-destructive' : 'text-muted-foreground'\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Loader2Icon className=\"size-icon animate-spin\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Clear Button */}\n\t\t\t\t\t\t{!!showClearButton && !showCount && (\n\t\t\t\t\t\t\t\t<FieldClearButton\n\t\t\t\t\t\t\t\t\t\tclassName={cn('absolute', formTextareaAffordanceTopClasses.target[size], fieldAffordanceRecipes.clearEnd[size])}\n\t\t\t\t\t\t\t\t\t\taria-label={strings.clear}\n\t\t\t\t\t\t\t\t\t\tonClick={handleClear}\n\t\t\t\t\t\t\t\t\t\tdisabled={props.disabled || props.readOnly || loading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t);\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(TextareaImpl);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea };\n","import { fieldStateRecipes } from '../../lib/field-state-recipes';\nimport { editableTextSizeClasses } from '../../lib/editable-text-recipe';\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-input rounded-radius border bg-transparent px-control py-space-md shadow-none transition-[color,box-shadow] placeholder:text-muted-foreground flex field-sizing-content min-h-textarea w-full outline-none disabled:cursor-not-allowed disabled:opacity-50 [&:read-only:not(:disabled)]:bg-muted\",\n editableTextSizeClasses.md,\n fieldStateRecipes.focus,\n fieldStateRecipes.invalid,\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Textarea }\n","import { fieldStateRecipes } from '../../lib/field-state-recipes';\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport * as React from \"react\"\n\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Textarea } from \"./textarea\"\nimport { cn } from \"../../lib/utils\"\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"input-group\"\n role=\"group\"\n className={cn(\n \"border-input h-control rounded-radius border shadow-none transition-[color,box-shadow] has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-space-lg has-[>[data-align=block-start]]:[&>input]:pb-space-lg has-[>[data-align=inline-end]]:[&>input]:pe-space-sm has-[>[data-align=inline-start]]:[&>input]:ps-space-sm [[data-slot=combobox-content]_&]:focus-within:border-inherit [[data-slot=combobox-content]_&]:focus-within:ring-0 group/input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto\",\n fieldStateRecipes.groupFocus,\n fieldStateRecipes.groupInvalid,\n className\n )}\n {...props}\n />\n )\n}\n\nconst inputGroupAddonVariants = cva(\n \"text-muted-foreground h-auto gap-space-md py-space-sm text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-radius [&>svg:not([class*='size-'])]:size-icon flex cursor-text items-center justify-center select-none\",\n {\n variants: {\n align: {\n \"inline-start\": \"ps-control has-[>button]:-ms-space-xs has-[>kbd]:-ms-space-2xs order-first\",\n \"inline-end\": \"pe-control has-[>button]:-me-space-xs has-[>kbd]:-me-space-2xs order-last\",\n \"block-start\":\n \"px-control pt-space-md group-has-[>input]/input-group:pt-space-md [.border-b]:pb-space-md order-first w-full justify-start\",\n \"block-end\":\n \"px-control pb-space-md group-has-[>input]/input-group:pb-space-md [.border-t]:pt-space-md order-last w-full justify-start\",\n },\n },\n defaultVariants: {\n align: \"inline-start\",\n },\n }\n)\n\nfunction InputGroupAddon({\n className,\n align = \"inline-start\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof inputGroupAddonVariants>) {\n return (\n <div\n role=\"group\"\n data-slot=\"input-group-addon\"\n data-align={align}\n className={cn(inputGroupAddonVariants({ align }), className)}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"button\")) {\n return\n }\n e.currentTarget.parentElement?.querySelector(\"input\")?.focus()\n }}\n {...props}\n />\n )\n}\n\nconst inputGroupButtonVariants = cva(\n \"gap-space-md text-sm shadow-none flex items-center\",\n {\n variants: {\n size: {\n xs: \"h-action-xs gap-space-xs rounded-radius px-control-xs [&>svg:not([class*='size-'])]:size-icon-sm\",\n sm: \"\",\n \"icon-xs\": \"size-action-xs rounded-radius p-0 has-[>svg]:p-0\",\n \"icon-sm\": \"size-action-sm p-0 has-[>svg]:p-0\",\n },\n },\n defaultVariants: {\n size: \"xs\",\n },\n }\n)\n\nfunction InputGroupButton({\n className,\n type = \"button\",\n variant = \"ghost\",\n size = \"xs\",\n ...props\n}: Omit<React.ComponentProps<typeof Button>, \"size\" | \"type\"> &\n VariantProps<typeof inputGroupButtonVariants> & {\n type?: \"button\" | \"submit\" | \"reset\"\n }) {\n return (\n <Button\n type={type}\n data-size={size}\n variant={variant}\n className={cn(inputGroupButtonVariants({ size }), className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n className={cn(\n \"text-muted-foreground gap-space-md text-sm [&_svg:not([class*='size-'])]:size-icon flex items-center [&_svg]:pointer-events-none\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction InputGroupInput({\n className,\n ...props\n}: React.ComponentProps<\"input\">) {\n return (\n <Input\n data-slot=\"input-group-control\"\n className={cn(\"rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 flex-1\", className)}\n {...props}\n />\n )\n}\n\nfunction InputGroupTextarea({\n className,\n ...props\n}: React.ComponentProps<\"textarea\">) {\n return (\n <Textarea\n data-slot=\"input-group-control\"\n className={cn(\"rounded-none border-0 bg-transparent py-space-md shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 flex-1 resize-none\", className)}\n {...props}\n />\n )\n}\n\nexport {\n InputGroup,\n InputGroupAddon,\n InputGroupButton,\n InputGroupText,\n InputGroupInput,\n InputGroupTextarea,\n}\n","/**\n * InputGroup — base wrapper around the shadcn `ui/input-group` primitive.\n *\n * What this layer adds on top of the primitive:\n * - Stable BEM hooks on every wrapped part's outermost node\n * (`input-group--component`, `input-group-addon--component`, and so on).\n * - Design-system typography for the scalar copy inside `InputGroupText`,\n * while arbitrary `ReactNode` content (icons, `kbd`, buttons) passes through\n * untouched so the compound pattern stays composable.\n * - Keeps the primitive's addon alignment and button-size variants, its\n * focus-within/aria-invalid ring behaviour, and every native prop by spread.\n *\n * Compose it as\n * `<InputGroup><InputGroupAddon><Icon/></InputGroupAddon><InputGroupInput/></InputGroup>`.\n *\n * Reach for it when one control needs inline affordances welded to its frame —\n * a search icon, a unit suffix, a busy indicator, an inline action. For the\n * label / control / hint / error row, use `FormField` instead; this wrapper\n * owns only the control frame.\n */\nimport type { ComponentProps, ReactNode } from 'react';\n\nimport {\n\tInputGroup as InputGroupPrimitive,\n\tInputGroupAddon as InputGroupAddonPrimitive,\n\tInputGroupInput as InputGroupInputPrimitive,\n\tInputGroupText as InputGroupTextPrimitive,\n\tInputGroupTextarea as InputGroupTextareaPrimitive,\n} from '../../ui/input-group';\nimport { Button, type ButtonProps } from '../buttons';\nimport { Text } from '../../typography';\nimport { useDensityConfig, type ComponentScale } from '../../../lib/ui-provider';\nimport { editableTextSizeClasses } from '../../../lib/editable-text-recipe';\nimport { cn } from '../../../lib/utils';\nimport {\n\tformControlHeightClasses,\n\tformControlHorizontalPaddingClasses,\n\tformControlPaddingClasses,\n\tformTextareaSizeClasses,\n\tresolveFormControlSize,\n} from '../forms/form-sizing';\n\nexport type InputGroupProps = ComponentProps<typeof InputGroupPrimitive>;\nexport type InputGroupAddonProps = ComponentProps<typeof InputGroupAddonPrimitive>;\nexport interface InputGroupButtonProps extends Omit<ButtonProps, 'size'> {\n\t/** Component scale. Falls back to `UIProvider.density.defaultScale`. */\n\tsize?: ComponentScale;\n}\nexport type InputGroupInputProps = ComponentProps<typeof InputGroupInputPrimitive>;\nexport type InputGroupTextProps = ComponentProps<typeof InputGroupTextPrimitive>;\nexport type InputGroupTextareaProps = ComponentProps<typeof InputGroupTextareaPrimitive>;\n\nfunction useInputGroupScale() {\n\tconst { defaultScale } = useDensityConfig();\n\treturn resolveFormControlSize(undefined, defaultScale);\n}\n\n/** Control frame that welds inline addons onto a single input or textarea. */\nfunction InputGroup({ className, ...props }: InputGroupProps) {\n\tconst size = useInputGroupScale();\n\treturn (\n\t\t<InputGroupPrimitive\n\t\t\tclassName={cn(\n\t\t\t\t'input-group--component box-border rounded-radius font-sans text-foreground shadow-none',\n\t\t\t\tformControlHeightClasses[size],\n\t\t\t\teditableTextSizeClasses[size],\n\t\t\t\t'has-[>[data-align=block-end]]:[&>input]:pt-space-lg has-[>[data-align=block-start]]:[&>input]:pb-space-lg',\n\t\t\t\t'has-[>[data-align=inline-end]]:[&>input]:pe-space-sm has-[>[data-align=inline-start]]:[&>input]:ps-space-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst addonAlignmentClasses = {\n\t'inline-start': 'h-full py-0',\n\t'inline-end': 'h-full py-0',\n\t'block-start': 'pt-space-md group-has-[>input]/input-group:pt-space-md [.border-b]:pb-space-md',\n\t'block-end': 'pb-space-md group-has-[>input]/input-group:pb-space-md [.border-t]:pt-space-md',\n} as const;\n\nconst addonInlinePaddingClasses = {\n\tsm: { 'inline-start': 'ps-control-sm', 'inline-end': 'pe-control-sm' },\n\tmd: { 'inline-start': 'ps-control', 'inline-end': 'pe-control' },\n\tlg: { 'inline-start': 'ps-control', 'inline-end': 'pe-control' },\n} as const;\n\nconst addonIconClasses = {\n\tsm: \"[&>svg:not([class*='size-'])]:size-icon-sm\",\n\tmd: \"[&>svg:not([class*='size-'])]:size-icon\",\n\tlg: \"[&>svg:not([class*='size-'])]:size-icon-lg\",\n} as const;\n\n/** Leading/trailing (or block start/end) affordance slot inside the frame. */\nfunction InputGroupAddon({ className, align = 'inline-start', ...props }: InputGroupAddonProps) {\n\tconst size = useInputGroupScale();\n\tconst alignment = align ?? 'inline-start';\n\treturn (\n\t\t<InputGroupAddonPrimitive\n\t\t\talign={align}\n\t\t\tclassName={cn(\n\t\t\t\t'input-group-addon--component box-border gap-space-md py-space-sm',\n\t\t\t\taddonIconClasses[size],\n\t\t\t\taddonAlignmentClasses[alignment],\n\t\t\t\talignment === 'inline-start' || alignment === 'inline-end'\n\t\t\t\t\t? addonInlinePaddingClasses[size][alignment]\n\t\t\t\t\t: formControlHorizontalPaddingClasses[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/** Inline action button sized to sit inside the control frame; its label stays on one line. */\nfunction InputGroupButton({\n\tclassName,\n\ttone = 'secondary',\n\tbuttonStyle = 'ghost',\n\ttruncate = true,\n\ticonOnly,\n\t...props\n}: InputGroupButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\ttone={tone}\n\t\t\tbuttonStyle={buttonStyle}\n\t\t\ttruncate={truncate}\n\t\t\ticonOnly={iconOnly}\n\t\t\tclassName={cn(\n\t\t\t\t'input-group-button--component max-h-full shadow-none',\n\t\t\t\t// Text actions fit the inner frame. Icon actions retain their own\n\t\t\t\t// height and derive a square width after the frame caps that height.\n\t\t\t\t// Block/footer actions keep their natural Button geometry.\n\t\t\t\ticonOnly\n\t\t\t\t\t? 'in-[[data-align=inline-start]]:w-auto in-[[data-align=inline-start]]:aspect-square in-[[data-align=inline-end]]:w-auto in-[[data-align=inline-end]]:aspect-square'\n\t\t\t\t\t: 'in-[[data-align=inline-start]]:h-full in-[[data-align=inline-start]]:min-h-0 in-[[data-align=inline-end]]:h-full in-[[data-align=inline-end]]:min-h-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction isScalarContent(content: ReactNode): content is string | number | bigint {\n\treturn typeof content === 'string' || typeof content === 'number' || typeof content === 'bigint';\n}\n\n/** Static copy segment — scalar text renders through Typography. */\nfunction InputGroupText({ children, className, ...props }: InputGroupTextProps) {\n\treturn (\n\t\t<InputGroupTextPrimitive\n\t\t\tclassName={cn('input-group-text--component gap-space-md [&_svg:not([class*=\\'size-\\'])]:size-icon', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{isScalarContent(children) ? (\n\t\t\t\t<Text tag=\"span\" size=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t) : (\n\t\t\t\tchildren\n\t\t\t)}\n\t\t</InputGroupTextPrimitive>\n\t);\n}\n\n/** Single-line control that inherits the group's frame instead of its own. */\nfunction InputGroupInput({ className, ...props }: InputGroupInputProps) {\n\tconst size = useInputGroupScale();\n\treturn (\n\t\t<InputGroupInputPrimitive\n\t\t\tclassName={cn(\n\t\t\t\t// Inline frames grow for their shared editable line and clamp the\n\t\t\t\t// borderless input to the resulting content box.\n\t\t\t\t// Auto-height block compositions retain the shared control height.\n\t\t\t\t'input-group-input--component box-border max-h-full font-sans text-foreground',\n\t\t\t\tformControlHeightClasses[size],\n\t\t\t\t// The group owns the border; its native editor needs only its line.\n\t\t\t\t'min-h-lh',\n\t\t\t\tformControlPaddingClasses[size],\n\t\t\t\teditableTextSizeClasses[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/** Multi-line control that inherits the group's frame instead of its own. */\nfunction InputGroupTextarea({ className, ...props }: InputGroupTextareaProps) {\n\tconst size = useInputGroupScale();\n\treturn (\n\t\t<InputGroupTextareaPrimitive\n\t\t\tclassName={cn(\n\t\t\t\t'input-group-textarea--component box-border py-space-md',\n\t\t\t\tformTextareaSizeClasses[size],\n\t\t\t\tformControlHorizontalPaddingClasses[size],\n\t\t\t\teditableTextSizeClasses[size],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tInputGroup,\n\tInputGroupAddon,\n\tInputGroupButton,\n\tInputGroupInput,\n\tInputGroupText,\n\tInputGroupTextarea,\n};\n","import { Eye, EyeOff } from 'lucide-react';\nimport * as React from 'react';\n\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { Input, type InputProps } from './input';\nimport { InputTrailingActionContext } from './input-trailing-action';\nimport { fieldAffordanceRecipes } from '../../../lib/field-affordance-recipes';\n\nexport interface PasswordInputStrings {\n\tshowPassword: string;\n\thidePassword: string;\n}\n\nexport const defaultPasswordInputStrings: PasswordInputStrings = {\n\tshowPassword: 'Show password',\n\thidePassword: 'Hide password',\n};\n\nexport interface PasswordInputProps extends Omit<InputProps, 'type' | 'endIcon' | 'strings'> {\n\t/** Whether the value is revealed. Controlled. */\n\tvisible?: boolean;\n\t/** Whether the value starts revealed, for uncontrolled use. */\n\tdefaultVisible?: boolean;\n\t/** Fired whenever the reveal state changes. */\n\tonVisibleChange?: (visible: boolean) => void;\n\t/** Shows the reveal toggle. Turn it off for fields that must stay masked. */\n\trevealable?: boolean;\n\t/** Merged onto the field wrapper, outside the input frame. */\n\twrapperClassName?: string;\n\t/** Merged onto the reveal toggle. */\n\tvisibilityButtonClassName?: string;\n\t/** Copy overrides forwarded to the underlying text input. */\n\tinputStrings?: InputProps['strings'];\n\t/** Overrides the show/hide accessible names. */\n\tstrings?: StringsProp<PasswordInputStrings>;\n}\n\nconst PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n\tfunction PasswordInput(\n\t\t{\n\t\t\tvisible,\n\t\t\tdefaultVisible = false,\n\t\t\tonVisibleChange,\n\t\t\trevealable = true,\n\t\t\twrapperClassName,\n\t\t\tvisibilityButtonClassName,\n\t\t\tclassName,\n\t\t\tdisabled,\n\t\t\tloading,\n\t\t\tinputStrings,\n\t\t\tstrings: stringsProp,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst strings = useStrings(defaultPasswordInputStrings, stringsProp);\n\t\tconst [internalVisible, setInternalVisible] = React.useState(defaultVisible);\n\t\tconst isControlled = visible !== undefined;\n\t\tconst isVisible = isControlled ? visible : internalVisible;\n\t\tconst disabledState = disabled || loading;\n\n\t\tconst toggleVisibility = React.useCallback(() => {\n\t\t\tconst nextVisible = !isVisible;\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalVisible(nextVisible);\n\t\t\t}\n\t\t\tonVisibleChange?.(nextVisible);\n\t\t}, [isControlled, isVisible, onVisibleChange]);\n\n\t\tconst visibilityAction = revealable ? (\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={cn('password-input--toggle', fieldAffordanceRecipes.target, fieldAffordanceRecipes.focus, fieldAffordanceRecipes.toggle, visibilityButtonClassName)}\n\t\t\t\taria-label={isVisible ? strings.hidePassword : strings.showPassword}\n\t\t\t\taria-pressed={isVisible}\n\t\t\t\tdisabled={disabledState}\n\t\t\t\tonMouseDown={(event) => event.preventDefault()}\n\t\t\t\tonClick={toggleVisibility}\n\t\t\t>\n\t\t\t\t{isVisible ? <EyeOff className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" /> : <Eye className={fieldAffordanceRecipes.icon} aria-hidden=\"true\" />}\n\t\t\t</button>\n\t\t) : null;\n\n\t\treturn (\n\t\t\t<div className={cn('password-input--component', 'relative', wrapperClassName)}>\n\t\t\t\t<InputTrailingActionContext.Provider value={visibilityAction}>\n\t\t\t\t\t<Input\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype={isVisible ? 'text' : 'password'}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tloading={loading}\n\t\t\t\t\t\tclassName={className}\n\t\t\t\t\t\tstrings={inputStrings}\n\t\t\t\t\t/>\n\t\t\t\t</InputTrailingActionContext.Provider>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nPasswordInput.displayName = 'PasswordInput';\n\nexport { PasswordInput };\n","import * as React from 'react';\n\nimport { cn } from '../../../lib/utils';\n\nimport { Input, type InputProps } from './input';\n\nexport interface SlugifyValueOptions {\n\t/** Character joining words in the generated slug. Default: `-`. */\n\tseparator?: string;\n\t/** Lowercases the generated slug. */\n\tlowercase?: boolean;\n\t/** Strips leading and trailing separators. */\n\ttrim?: boolean;\n}\n\nexport function slugifyValue(\n\tvalue: string | number | null | undefined,\n\t{\n\t\tseparator = '-',\n\t\tlowercase = true,\n\t\ttrim = true,\n\t}: SlugifyValueOptions = {},\n) {\n\tconst safeSeparator = separator || '-';\n\tconst escapedSeparator = safeSeparator.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\tlet normalized = String(value ?? '')\n\t\t.normalize('NFKD')\n\t\t.replace(/[\\u0300-\\u036f]/g, '')\n\t\t.replace(/&/g, ' and ')\n\t\t.replace(/['’]/g, '');\n\n\tif (lowercase) {\n\t\tnormalized = normalized.toLowerCase();\n\t}\n\n\tnormalized = normalized\n\t\t.replace(/[^\\p{Letter}\\p{Number}]+/gu, safeSeparator)\n\t\t.replace(new RegExp(`${escapedSeparator}{2,}`, 'g'), safeSeparator);\n\n\tif (trim) {\n\t\tnormalized = normalized.replace(new RegExp(`^${escapedSeparator}|${escapedSeparator}$`, 'g'), '');\n\t}\n\n\treturn normalized;\n}\n\nexport interface SlugFieldProps\n\textends Omit<\n\t\tInputProps,\n\t\t'value' | 'defaultValue' | 'onChange' | 'readOnly' | 'type'\n\t>,\n\t\tSlugifyValueOptions {\n\t/** Current slug. Controlled. */\n\tvalue: string | number | null | undefined;\n\t/** Replaces the built-in slug derivation entirely. */\n\tslugify?: (value: string | number | null | undefined) => string;\n\t/** Merged onto the field wrapper, outside the input frame. */\n\twrapperClassName?: string;\n}\n\nconst SlugField = React.forwardRef<HTMLInputElement, SlugFieldProps>(\n\tfunction SlugField(\n\t\t{\n\t\t\tvalue,\n\t\t\tslugify,\n\t\t\tseparator = '-',\n\t\t\tlowercase = true,\n\t\t\ttrim = true,\n\t\t\twrapperClassName,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst slug = React.useMemo(\n\t\t\t() => slugify?.(value) ?? slugifyValue(value, { separator, lowercase, trim }),\n\t\t\t[lowercase, separator, slugify, trim, value],\n\t\t);\n\n\t\treturn (\n\t\t\t<div className={cn('slug-field--component', wrapperClassName)}>\n\t\t\t\t<Input\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...props}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tvalue={slug}\n\t\t\t\t\treadOnly\n\t\t\t\t\tclassName={className}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nSlugField.displayName = 'SlugField';\n\nexport { SlugField };\n"],"mappings":"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"}
|
package/dist/theme.css
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
@layer theme {
|
|
59
59
|
:root {
|
|
60
60
|
/* Radius is shared geometry, not a light-palette reset. Mode scopes inherit it. */
|
|
61
|
-
--radius: 0.75rem; /*
|
|
61
|
+
--radius: 0.75rem; /* Default 12px corner for controls, badges and rows; outer shells use 4/3 of it. */
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
--primary-foreground: oklch(0.985 0 0); /* Text and icons on solid primary fills. */
|
|
77
77
|
--secondary: oklch(0.94 0 0); /* Neutral secondary-control and supporting-surface fill. */
|
|
78
78
|
--secondary-foreground: oklch(0.205 0 0); /* Text and icons on secondary fills. */
|
|
79
|
-
--muted: oklch(0.96 0 0); /* Subdued backgrounds for passive regions and
|
|
79
|
+
--muted: oklch(0.96 0 0); /* Subdued backgrounds for passive regions and tracks. */
|
|
80
80
|
--muted-foreground: oklch(0.50 0 0); /* Secondary text, metadata, and passive icons. */
|
|
81
81
|
--accent: oklch(0.945 0 0); /* Hover, selected-row, and emphasized neutral fill. */
|
|
82
82
|
--accent-foreground: oklch(0.205 0 0); /* Text and icons on accent fills. */
|
|
@@ -372,24 +372,25 @@
|
|
|
372
372
|
* compact canonical override surface. Radius utilities read shadcn directly.
|
|
373
373
|
*/
|
|
374
374
|
@theme inline {
|
|
375
|
-
/* One public radius root, two
|
|
376
|
-
* controls, collection rows and nested bodies
|
|
377
|
-
*
|
|
378
|
-
*
|
|
375
|
+
/* One public radius root, two corners: rounded-radius (the root itself) is the
|
|
376
|
+
* default for controls, badges, collection rows and nested bodies; the rarer
|
|
377
|
+
* rounded-surface is the larger corner of cards, popups and other outer shells.
|
|
378
|
+
* The proportional xs/sm/md steps are for small mechanics (checkboxes, kbd,
|
|
379
|
+
* inline marks); circular shapes and joined-edge resets keep their mechanics.
|
|
379
380
|
*/
|
|
380
381
|
--radius-radius-xs: calc(var(--radius) * 0.4);
|
|
381
382
|
--radius-radius-sm: var(--radius-sm);
|
|
382
383
|
--radius-radius-md: var(--radius-md);
|
|
383
384
|
--radius-radius: var(--radius);
|
|
384
|
-
--radius-
|
|
385
|
+
--radius-surface: calc(var(--radius) * 4 / 3);
|
|
385
386
|
--radius-radius-lg: var(--radius-xl);
|
|
386
387
|
--radius-radius-xl: var(--radius-2xl);
|
|
387
388
|
|
|
388
389
|
/* Generated geometry aliases:start */
|
|
389
|
-
--spacing-action-xs: calc(var(--height-action) *
|
|
390
|
-
--spacing-action-sm: calc(var(--height-action) *
|
|
390
|
+
--spacing-action-xs: calc(var(--height-action) * 3 / 4 * var(--density-scale));
|
|
391
|
+
--spacing-action-sm: calc(var(--height-action) * 7 / 8 * var(--density-scale));
|
|
391
392
|
--spacing-action: calc(var(--height-action) * var(--density-scale));
|
|
392
|
-
--spacing-action-lg: calc(var(--height-action) *
|
|
393
|
+
--spacing-action-lg: calc(var(--height-action) * 9 / 8 * var(--density-scale));
|
|
393
394
|
--spacing-control-gap-small: calc(0.375rem * var(--space-scale));
|
|
394
395
|
--spacing-control-gap: calc(0.5rem * var(--space-scale));
|
|
395
396
|
--spacing-control-px: calc(var(--control-x) * var(--space-scale));
|
|
@@ -405,7 +406,7 @@
|
|
|
405
406
|
--spacing-control-actions: calc(var(--control-x) * var(--space-scale) + 2.75rem * var(--density-scale) + 0.25rem * var(--space-scale));
|
|
406
407
|
--spacing-control-clear: calc(1.375rem * var(--density-scale));
|
|
407
408
|
--spacing-control-clear-icon: calc(var(--icon) * 0.75);
|
|
408
|
-
--spacing-control-file: calc(
|
|
409
|
+
--spacing-control-file: calc(var(--height-control) * 3 / 4 * var(--density-scale));
|
|
409
410
|
--spacing-textarea-sm: calc(4rem * var(--density-scale));
|
|
410
411
|
--spacing-textarea: calc(5rem * var(--density-scale));
|
|
411
412
|
--spacing-icon-sm: calc(var(--icon) * 0.75);
|
|
@@ -423,8 +424,8 @@
|
|
|
423
424
|
|
|
424
425
|
@layer theme {
|
|
425
426
|
:root {
|
|
426
|
-
--height-action:
|
|
427
|
-
--height-control:
|
|
427
|
+
--height-action: 2rem; /* Default button and action-trigger height. */
|
|
428
|
+
--height-control: 2rem; /* Default input, select, and field-control height. */
|
|
428
429
|
--control-x: 0.75rem; /* Default inline padding for buttons and field controls. */
|
|
429
430
|
|
|
430
431
|
/* Media */
|
|
@@ -583,29 +584,29 @@
|
|
|
583
584
|
}
|
|
584
585
|
|
|
585
586
|
@utility h-action-xs {
|
|
586
|
-
height: calc(var(--height-action) *
|
|
587
|
+
height: calc(var(--height-action) * 3 / 4 * var(--density-scale));
|
|
587
588
|
}
|
|
588
589
|
|
|
589
590
|
@utility size-action-xs {
|
|
590
|
-
width: calc(var(--height-action) *
|
|
591
|
-
height: calc(var(--height-action) *
|
|
591
|
+
width: calc(var(--height-action) * 3 / 4 * var(--density-scale));
|
|
592
|
+
height: calc(var(--height-action) * 3 / 4 * var(--density-scale));
|
|
592
593
|
}
|
|
593
594
|
|
|
594
595
|
@utility top-action-xs-center {
|
|
595
|
-
top: calc(var(--height-action) *
|
|
596
|
+
top: calc(var(--height-action) * 3 / 4 * var(--density-scale) / 2);
|
|
596
597
|
}
|
|
597
598
|
|
|
598
599
|
@utility h-action-sm {
|
|
599
|
-
height: calc(var(--height-action) *
|
|
600
|
+
height: calc(var(--height-action) * 7 / 8 * var(--density-scale));
|
|
600
601
|
}
|
|
601
602
|
|
|
602
603
|
@utility size-action-sm {
|
|
603
|
-
width: calc(var(--height-action) *
|
|
604
|
-
height: calc(var(--height-action) *
|
|
604
|
+
width: calc(var(--height-action) * 7 / 8 * var(--density-scale));
|
|
605
|
+
height: calc(var(--height-action) * 7 / 8 * var(--density-scale));
|
|
605
606
|
}
|
|
606
607
|
|
|
607
608
|
@utility top-action-sm-center {
|
|
608
|
-
top: calc(var(--height-action) *
|
|
609
|
+
top: calc(var(--height-action) * 7 / 8 * var(--density-scale) / 2);
|
|
609
610
|
}
|
|
610
611
|
|
|
611
612
|
@utility h-action {
|
|
@@ -622,33 +623,33 @@
|
|
|
622
623
|
}
|
|
623
624
|
|
|
624
625
|
@utility h-action-lg {
|
|
625
|
-
height: calc(var(--height-action) *
|
|
626
|
+
height: calc(var(--height-action) * 9 / 8 * var(--density-scale));
|
|
626
627
|
}
|
|
627
628
|
|
|
628
629
|
@utility size-action-lg {
|
|
629
|
-
width: calc(var(--height-action) *
|
|
630
|
-
height: calc(var(--height-action) *
|
|
630
|
+
width: calc(var(--height-action) * 9 / 8 * var(--density-scale));
|
|
631
|
+
height: calc(var(--height-action) * 9 / 8 * var(--density-scale));
|
|
631
632
|
}
|
|
632
633
|
|
|
633
634
|
@utility top-action-lg-center {
|
|
634
|
-
top: calc(var(--height-action) *
|
|
635
|
+
top: calc(var(--height-action) * 9 / 8 * var(--density-scale) / 2);
|
|
635
636
|
}
|
|
636
637
|
|
|
637
638
|
@utility h-control-sm {
|
|
638
|
-
height: calc(var(--height-control) *
|
|
639
|
+
height: calc(var(--height-control) * 7 / 8 * var(--density-scale));
|
|
639
640
|
}
|
|
640
641
|
|
|
641
642
|
@utility min-h-control-sm {
|
|
642
|
-
min-height: calc(var(--height-control) *
|
|
643
|
+
min-height: calc(var(--height-control) * 7 / 8 * var(--density-scale));
|
|
643
644
|
}
|
|
644
645
|
|
|
645
646
|
@utility w-control-sm {
|
|
646
|
-
width: calc(var(--height-control) *
|
|
647
|
+
width: calc(var(--height-control) * 7 / 8 * var(--density-scale));
|
|
647
648
|
}
|
|
648
649
|
|
|
649
650
|
@utility size-control-sm {
|
|
650
|
-
width: calc(var(--height-control) *
|
|
651
|
-
height: calc(var(--height-control) *
|
|
651
|
+
width: calc(var(--height-control) * 7 / 8 * var(--density-scale));
|
|
652
|
+
height: calc(var(--height-control) * 7 / 8 * var(--density-scale));
|
|
652
653
|
}
|
|
653
654
|
|
|
654
655
|
@utility h-control {
|
|
@@ -669,20 +670,20 @@
|
|
|
669
670
|
}
|
|
670
671
|
|
|
671
672
|
@utility h-control-lg {
|
|
672
|
-
height: calc(var(--height-control) *
|
|
673
|
+
height: calc(var(--height-control) * 9 / 8 * var(--density-scale));
|
|
673
674
|
}
|
|
674
675
|
|
|
675
676
|
@utility min-h-control-lg {
|
|
676
|
-
min-height: calc(var(--height-control) *
|
|
677
|
+
min-height: calc(var(--height-control) * 9 / 8 * var(--density-scale));
|
|
677
678
|
}
|
|
678
679
|
|
|
679
680
|
@utility w-control-lg {
|
|
680
|
-
width: calc(var(--height-control) *
|
|
681
|
+
width: calc(var(--height-control) * 9 / 8 * var(--density-scale));
|
|
681
682
|
}
|
|
682
683
|
|
|
683
684
|
@utility size-control-lg {
|
|
684
|
-
width: calc(var(--height-control) *
|
|
685
|
-
height: calc(var(--height-control) *
|
|
685
|
+
width: calc(var(--height-control) * 9 / 8 * var(--density-scale));
|
|
686
|
+
height: calc(var(--height-control) * 9 / 8 * var(--density-scale));
|
|
686
687
|
}
|
|
687
688
|
|
|
688
689
|
@utility px-control-xs {
|
|
@@ -780,7 +781,7 @@
|
|
|
780
781
|
}
|
|
781
782
|
|
|
782
783
|
@utility h-control-file {
|
|
783
|
-
height: calc(
|
|
784
|
+
height: calc(var(--height-control) * 3 / 4 * var(--density-scale));
|
|
784
785
|
}
|
|
785
786
|
|
|
786
787
|
@utility min-h-textarea-sm {
|
|
@@ -815,7 +816,7 @@
|
|
|
815
816
|
|
|
816
817
|
@layer theme {
|
|
817
818
|
:root {
|
|
818
|
-
--shell-header-height:
|
|
819
|
+
--shell-header-height: 4rem; /* Minimum height of the application header shell. */
|
|
819
820
|
--shell-sidebar-width: 16rem; /* Default expanded sidebar content width. */
|
|
820
821
|
--content-width-sm: 40rem; /* Compact centered content measure. */
|
|
821
822
|
--content-width-md: 48rem; /* Medium centered content measure. */
|
|
@@ -834,6 +835,8 @@
|
|
|
834
835
|
@utility shell-sidebar-vars {
|
|
835
836
|
--shell-sidebar-width-current: var(--shell-sidebar-width);
|
|
836
837
|
--shell-sidebar-width-icon: calc(3.75rem * var(--density-scale));
|
|
838
|
+
--shell-navigation-rail-width: calc(var(--height-action) * var(--density-scale) + 1rem * var(--space-scale));
|
|
839
|
+
--sidebar-width-icon: var(--shell-sidebar-width-icon);
|
|
837
840
|
--shell-sidebar-width-offcanvas: min(20rem, calc(100vw - 2rem));
|
|
838
841
|
}
|
|
839
842
|
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "./lib/strings.js";
|
|
3
|
-
import { t } from "./utils-
|
|
4
|
-
import { c as n } from "./typography-
|
|
5
|
-
import { t as r } from "./structure-
|
|
3
|
+
import { t } from "./utils-DhuoqFy4.js";
|
|
4
|
+
import { c as n } from "./typography-C7-YMW1S.js";
|
|
5
|
+
import { t as r } from "./structure-DZJ2wbAU.js";
|
|
6
6
|
import { i } from "./tone-recipes-BPsRAvhu.js";
|
|
7
|
-
import { t as a } from "./progress-
|
|
8
|
-
import { g as o, m as s } from "./primitives-
|
|
9
|
-
import { n as c } from "./number-
|
|
10
|
-
import { t as l } from "./icon-badge-
|
|
11
|
-
import { t as u } from "./badge-
|
|
12
|
-
import { n as d } from "./display-
|
|
7
|
+
import { t as a } from "./progress-DZFXXzPs.js";
|
|
8
|
+
import { g as o, m as s } from "./primitives-BkkQjYl7.js";
|
|
9
|
+
import { n as c } from "./number-CYqBcrSj.js";
|
|
10
|
+
import { t as l } from "./icon-badge-npxF1SLX.js";
|
|
11
|
+
import { t as u } from "./badge-wWauMgAt.js";
|
|
12
|
+
import { n as d } from "./display-CT_N2a3w.js";
|
|
13
13
|
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
14
14
|
import { Check as m, Circle as h, Clock as g, GitCommit as _, Loader2 as v, Minus as y, Plus as b, Wrench as x, X as S } from "lucide-react";
|
|
15
15
|
//#region src/components/blocks/timelines/shared/timeline.tsx
|
|
@@ -94,15 +94,16 @@ function E({ items: e, dotSize: i = "md", className: a }) {
|
|
|
94
94
|
children: [/* @__PURE__ */ p(r, {
|
|
95
95
|
gap: "dense",
|
|
96
96
|
children: [/* @__PURE__ */ p("div", {
|
|
97
|
-
className: "flex items-baseline justify-between gap-space-md",
|
|
97
|
+
className: "timeline--heading flex flex-wrap items-baseline justify-between gap-x-space-md gap-y-dense",
|
|
98
98
|
children: [/* @__PURE__ */ f(n, {
|
|
99
99
|
type: "inherit",
|
|
100
100
|
weight: "medium",
|
|
101
101
|
lineHeight: "tight",
|
|
102
|
+
className: "min-w-0 break-words",
|
|
102
103
|
children: a.title
|
|
103
104
|
}), !!a.timestamp && /* @__PURE__ */ f(o, {
|
|
104
105
|
size: "xs",
|
|
105
|
-
className: "
|
|
106
|
+
className: "min-w-0 tabular-nums",
|
|
106
107
|
children: a.timestamp
|
|
107
108
|
})]
|
|
108
109
|
}), !!a.description && /* @__PURE__ */ f(n, {
|
|
@@ -454,4 +455,4 @@ R.displayName = "MilestonesTimeline";
|
|
|
454
455
|
//#endregion
|
|
455
456
|
export { O as a, j as i, P as n, A as o, N as r, E as s, R as t };
|
|
456
457
|
|
|
457
|
-
//# sourceMappingURL=timelines-
|
|
458
|
+
//# sourceMappingURL=timelines-CoPwdJP0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timelines-CoPwdJP0.js","names":["Text","Stack","Progress","SecondaryValue","MonoValue","Percent","IconBadge","Badge","ContentBlock","DOT_PX","ICON_PX","STATUS_TONE","toneRecipes","Timeline","cn","className","items","status","item","tone","Icon","isLast","i","dotSize","statusStyles","Check","Loader2","Circle","StepsCard","steps","titleType","step","HorizontalDot","stepNumber","StepsHorizontal","title","description","idx","lineColor","footerText","defaultChangelogTimelineStrings","KIND_ICON","Plus","Minus","Wrench","GitCommit","ChangelogTimeline","stringsProp","strings","useStrings","labelByKind","entries","entry","defaultMilestonesTimelineStrings","STATUS_TO_TIMELINE","STATUS_ICON","Clock","X","STATUS_BADGE","MilestonesTimeline","labelByStatus","milestones","m"],"sources":["../src/components/blocks/timelines/shared/timeline.tsx","../src/components/blocks/timelines/steps-card/steps-card.tsx","../src/components/blocks/timelines/changelog/types.ts","../src/components/blocks/timelines/changelog/changelog-timeline.tsx","../src/components/blocks/timelines/milestones/types.ts","../src/components/blocks/timelines/milestones/milestones-timeline.tsx"],"sourcesContent":["/**\n * Timeline — shared base primitive for the blocks timeline family.\n *\n * Renders a vertical, dot-and-line list of events. Each item supports an\n * icon (Lucide component), a status that maps to dot tone, a title row, an\n * optional description block, an optional timestamp, and free-form content\n * via `children`. Use this primitive directly for new timeline variants\n * instead of reinventing the dot/line geometry — see `ChangeLogTimeline`,\n * `MilestonesTimeline`, and the existing OrderTimeline / PaymentTimeline /\n * ActivityStream consumers for examples.\n */\nimport type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { SecondaryValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport type { ComponentScale } from '../../../../lib/component-vocabulary';\nimport { cn } from '../../../../lib/utils';\nimport { toneRecipes } from '../../../../lib/tone-recipes';\n\nexport type TimelineStatus =\n\t| 'completed'\n\t| 'current'\n\t| 'pending'\n\t| 'success'\n\t| 'warning'\n\t| 'error'\n\t| 'neutral';\n\nexport type TimelineDotSize = ComponentScale;\n\nexport interface TimelineItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\t/** Formatted time for the entry. */\n\ttimestamp?: ReactNode;\n\t/** Leading glyph. */\n\ticon?: LucideIcon;\n\tstatus?: TimelineStatus;\n\tchildren?: ReactNode;\n}\n\nexport interface TimelineProps {\n\titems: TimelineItem[];\n\tdotSize?: TimelineDotSize;\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n}\n\nconst DOT_PX: Record<TimelineDotSize, string> = {\n\tsm: 'size-2.5',\n\tmd: 'size-icon-md',\n\tlg: 'size-icon-lg',\n};\n\nconst ICON_PX: Record<TimelineDotSize, string> = {\n\tsm: 'size-2',\n\tmd: 'size-2.5',\n\tlg: 'size-icon-sm',\n};\n\nconst STATUS_TONE: Record<TimelineStatus, { bg: string; text: string; ring: string; line: string }> = {\n\tcompleted: { bg: toneRecipes.success.solid, text: 'text-success-foreground', ring: toneRecipes.success.halo, line: toneRecipes.success.line },\n\tcurrent: { bg: toneRecipes.primary.solid, text: 'text-primary-foreground', ring: toneRecipes.primary.halo, line: toneRecipes.primary.line },\n\tpending: { bg: 'bg-muted', text: 'text-muted-foreground', ring: 'ring-border', line: 'bg-border' },\n\tsuccess: { bg: toneRecipes.success.solid, text: 'text-success-foreground', ring: toneRecipes.success.halo, line: toneRecipes.success.line },\n\twarning: { bg: toneRecipes.warning.solid, text: 'text-warning-foreground', ring: toneRecipes.warning.halo, line: toneRecipes.warning.line },\n\terror: { bg: toneRecipes.destructive.solid, text: 'text-destructive-foreground', ring: toneRecipes.destructive.halo, line: toneRecipes.destructive.line },\n\tneutral: { bg: 'bg-card', text: 'text-card-foreground', ring: 'ring-border', line: 'bg-border' },\n};\n\nexport function Timeline({ items, dotSize = 'md', className }: TimelineProps) {\n\treturn (\n\t\t<Stack render={<ol />} gap=\"xl\" className={cn('timeline--component', 'relative m-0 p-0 list-none', className)}>\n\t\t\t{items.map((item, i) => {\n\t\t\t\tconst status = item.status ?? 'neutral';\n\t\t\t\tconst tone = STATUS_TONE[status];\n\t\t\t\tconst Icon = item.icon;\n\t\t\t\tconst isLast = i === items.length - 1;\n\n\t\t\t\treturn (\n\t\t\t\t\t// `data-status` exposes the state as a hook; the current step is\n\t\t\t\t\t// announced through `aria-current`, independently of its colour.\n\t\t\t\t\t<li\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tdata-status={status}\n\t\t\t\t\t\taria-current={status === 'current' ? 'step' : undefined}\n\t\t\t\t\t\tclassName=\"timeline--item relative flex gap-space-lg\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Connector line — fills available space below dot until last */}\n\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'absolute left-[7px] top-4 bottom-[-1rem] w-px',\n\t\t\t\t\t\t\t\t\ttone.line,\n\t\t\t\t\t\t\t\t\tdotSize === 'lg' && 'left-[10px]',\n\t\t\t\t\t\t\t\t\tdotSize === 'sm' && 'left-[5px]',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<div className=\"relative z-[1] mt-0.5 flex shrink-0 items-start\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'inline-flex items-center justify-center rounded-full ring-2',\n\t\t\t\t\t\t\t\t\ttone.bg,\n\t\t\t\t\t\t\t\t\ttone.text,\n\t\t\t\t\t\t\t\t\ttone.ring,\n\t\t\t\t\t\t\t\t\tDOT_PX[dotSize],\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{!!Icon && <Icon className={ICON_PX[dotSize]} />}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<Stack gap=\"md\" className=\"min-w-0 flex-1 pb-space-md\">\n\t\t\t\t\t\t\t<Stack gap=\"dense\">\n\t\t\t\t\t\t\t\t{/* One line when there is room; in a narrow rail the timestamp drops\n\t\t\t\t\t\t\t\t under the title instead of pushing past the container edge. */}\n\t\t\t\t\t\t\t\t<div className=\"timeline--heading flex flex-wrap items-baseline justify-between gap-x-space-md gap-y-dense\">\n\t\t\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"min-w-0 break-words\">\n\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t{!!item.timestamp && (\n\t\t\t\t\t\t\t\t\t\t<SecondaryValue size=\"xs\" className=\"min-w-0 tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t\t{item.timestamp}\n\t\t\t\t\t\t\t\t\t\t</SecondaryValue>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t\t</Text>\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\t{!!item.children && <div className=\"min-w-0\">{item.children}</div>}\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Stack>\n\t);\n}\n\nTimeline.displayName = 'Timeline';\n","import { Stack } from '../../../base/structure';\nimport { Text } from '../../../typography/text';\nimport { Badge } from '../../../base/badge';\nimport { ContentBlock, IconBadge } from '../../../base/display';\nimport { cn } from '../../../../lib/utils';\nimport { Check, Circle, Loader2 } from 'lucide-react';\nimport { Timeline, type TimelineItem } from '../shared';\nimport { type StepStatus, type StepsCardProps, type StepsHorizontalProps } from './types';\n\nconst statusStyles: Record<StepStatus, {\n\ttitle: 'inherit' | 'secondary';\n\tIcon: typeof Check;\n}> = {\n\tcompleted: { title: 'inherit', Icon: Check },\n\tcurrent: { title: 'inherit', Icon: Loader2 },\n\tupcoming: { title: 'secondary', Icon: Circle },\n};\n\n/* ─── Vertical StepsCard (original) ────────────────────────────────────────── */\n\nexport function StepsCard({ title, description, steps, footerText, className }: StepsCardProps) {\n\tconst items: TimelineItem[] = steps.map((step) => {\n\t\tconst { Icon, title: titleType } = statusStyles[step.status];\n\t\treturn {\n\t\t\tid: step.id,\n\t\t\ttitle: (\n\t\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"semibold\" type={titleType}>\n\t\t\t\t\t\t{step.title}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{step.badge ? (\n\t\t\t\t\t\t<Badge tone={step.badgeTone ?? 'secondary'}>{step.badge}</Badge>\n\t\t\t\t\t) : null}\n\t\t\t\t</span>\n\t\t\t),\n\t\t\tdescription: step.description,\n\t\t\ttimestamp: step.timestamp,\n\t\t\ticon: Icon,\n\t\t\tstatus: step.status === 'upcoming' ? 'pending' : step.status,\n\t\t\tchildren: step.content,\n\t\t};\n\t});\n\n\treturn (\n\t\t<ContentBlock\n\t\t\tdata-component=\"steps-card\"\n\t\t\tdata-slot=\"steps-card\"\n\t\t\ttitle={title}\n\t\t\tdescription={description}\n\t\t\tfooterText={footerText}\n\t\t\tclassName={cn('steps-card--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"lg\" />\n\t\t</ContentBlock>\n\t);\n}\n\nStepsCard.displayName = 'StepsCard';\n\n/*──────────────────────────────────────────────────────────────────────────────\n * STEPS HORIZONTAL — Horizontal step bar with connecting lines\n *────────────────────────────────────────────────────────────────────────────*/\n\n/** Step marker on the shared IconBadge tile: reached steps show a check, the rest their number. */\nfunction HorizontalDot({ status, stepNumber }: { status: StepStatus; stepNumber: number }) {\n\tif (status === 'completed') {\n\t\treturn <IconBadge icon={Check} tone=\"success\" solid shape=\"square\" size=\"md\" className=\"relative z-10\" />;\n\t}\n\n\t// The number is the step's position, so it stays readable to assistive technology.\n\treturn (\n\t\t<IconBadge\n\t\t\ttone={status === 'current' ? 'primary' : 'neutral'}\n\t\t\tsolid={status === 'current'}\n\t\t\tshape=\"square\"\n\t\t\tsize=\"md\"\n\t\t\taria-hidden={false}\n\t\t\tclassName=\"relative z-10\"\n\t\t>\n\t\t\t<Text tag=\"span\" type=\"inherit\" weight={status === 'current' ? 'bold' : 'medium'} className=\"tabular-nums\">\n\t\t\t\t{stepNumber}\n\t\t\t</Text>\n\t\t</IconBadge>\n\t);\n}\n\nexport function StepsHorizontal({ title, description, steps, footerText, className }: StepsHorizontalProps) {\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"steps-horizontal\"\n\t\t\tdata-slot=\"steps-horizontal\"\n\t\t\tclassName={cn('steps-horizontal--component @container/steps-horizontal grid min-w-0 gap-space-md', className)}\n\t\t>\n\t\t\t{!!(title || description) && (\n\t\t\t\t<div className=\"steps-horizontal--header grid min-w-0 gap-normal\">\n\t\t\t\t\t{!!title && <Text type=\"inherit\" weight=\"semibold\">{title}</Text>}\n\t\t\t\t\t{!!description && <Text type=\"secondary\">{description}</Text>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<Stack gap=\"lg\" className=\"@xl/steps-horizontal:hidden\">\n\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\tconst isLast = idx === steps.length - 1;\n\t\t\t\t\tconst lineColor = step.status === 'completed' ? 'bg-success' : 'bg-border';\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={step.id} className=\"flex gap-space-lg\">\n\t\t\t\t\t\t\t<div className=\"flex flex-col items-center\">\n\t\t\t\t\t\t\t\t<HorizontalDot status={step.status} stepNumber={idx + 1} />\n\t\t\t\t\t\t\t\t{!isLast && <div className={cn('mt-1 w-0.5 flex-1 min-h-5', lineColor)} />}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<Stack gap=\"dense\" className={cn('min-w-0 flex-1 pb-space-md', isLast && 'pb-0')}>\n\t\t\t\t\t\t\t\t<Text weight=\"semibold\" lineHeight=\"snug\" type={statusStyles[step.status].title}>\n\t\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t{!!step.description && (\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t{step.description}\n\t\t\t\t\t\t\t\t\t</Text>\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</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Stack>\n\n\t\t\t{/* Horizontal scroll wrapper — when total step width exceeds the\n\t\t\t\tcard, this lets users scroll instead of clipping labels. */}\n\t\t\t<div className=\"hidden overflow-x-auto @xl/steps-horizontal:block\">\n\t\t\t\t<div className=\"flex min-w-fit items-start\">\n\t\t\t\t\t{steps.map((step, idx) => {\n\t\t\t\t\t\tconst isLast = idx === steps.length - 1;\n\t\t\t\t\t\tconst lineColor = step.status === 'completed' ? 'bg-success' : 'bg-border';\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div key={step.id} className=\"flex min-w-28 flex-1 items-start\">\n\t\t\t\t\t\t\t\t<Stack gap=\"md\" align=\"center\" className=\"w-full\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex w-full items-center\">\n\t\t\t\t\t\t\t\t\t\t{idx > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'h-0.5 flex-1',\n\t\t\t\t\t\t\t\t\t\t\t\tsteps[idx - 1].status === 'completed' ? 'bg-success' : 'bg-border',\n\t\t\t\t\t\t\t\t\t\t\t)} />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{idx === 0 && <div className=\"flex-1\" />}\n\n\t\t\t\t\t\t\t\t\t\t<HorizontalDot status={step.status} stepNumber={idx + 1} />\n\n\t\t\t\t\t\t\t\t\t\t{!isLast && (\n\t\t\t\t\t\t\t\t\t\t\t<div className={cn('h-0.5 flex-1', lineColor)} />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{!!isLast && <div className=\"flex-1\" />}\n\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t{/* Labels below dot — clamped to 2 lines so long step\n\t\t\t\t\t\t\t\t\t\tnames break gracefully instead of pushing the\n\t\t\t\t\t\t\t\t\t\trow taller. */}\n\t\t\t\t\t\t\t\t\t<Stack gap=\"dense\" align=\"center\" className=\"w-full px-space-xs\">\n\t\t\t\t\t\t\t\t\t\t<Text weight=\"semibold\" lineHeight=\"snug\" align=\"center\" type={statusStyles[step.status].title} className=\"line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t\t{step.title}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t{!!step.description && (\n\t\t\t\t\t\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" lineHeight=\"snug\" align=\"center\" className=\"line-clamp-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{step.description}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\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</Stack>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{!!footerText && <Text size=\"xs\" type=\"secondary\">{footerText}</Text>}\n\t\t</div>\n\t);\n}\n\nStepsHorizontal.displayName = 'StepsHorizontal';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type ChangelogEntryKind = 'added' | 'removed' | 'modified' | 'fixed';\n\nexport interface ChangelogEntry {\n\t/** Stable identity for this entry. */\n\tid: string;\n\tkind: ChangelogEntryKind;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\tversion?: string;\n\t/** Formatted time for the entry. */\n\ttimestamp?: string;\n\t/** Who produced the entry. */\n\tauthor?: string;\n}\n\nexport interface ChangelogTimelineStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tadded: string;\n\tremoved: string;\n\tmodified: string;\n\tfixed: string;\n}\n\nexport const defaultChangelogTimelineStrings: ChangelogTimelineStrings = {\n\ttitle: 'Changelog',\n\tadded: 'Added',\n\tremoved: 'Removed',\n\tmodified: 'Modified',\n\tfixed: 'Fixed',\n};\n\nexport interface ChangelogTimelineProps {\n\tentries: ChangelogEntry[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<ChangelogTimelineStrings>;\n}\n","/**\n * ChangelogTimeline — code/release changelog rendered through the shared\n * `Timeline` primitive. Each entry's kind (added / removed / modified /\n * fixed) is a neutral chip plus the marker glyph: a kind is a category, not a\n * status, so it carries no colour. An optional version label and timestamp\n * follow. Strings overridable for i18n.\n */\nimport { GitCommit, Minus, Plus, Wrench } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { MonoValue } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { Stack } from '../../../base/structure';\nimport { useStrings } from '../../../../lib/strings';\n\nimport {\n\tTimeline,\n\ttype TimelineItem,\n} from '../shared';\nimport {\n\tdefaultChangelogTimelineStrings,\n\ttype ChangelogEntry,\n\ttype ChangelogEntryKind,\n\ttype ChangelogTimelineProps,\n} from './types';\n\nimport { cn } from '../../../../lib/utils';\nconst KIND_ICON = {\n\tadded: Plus,\n\tremoved: Minus,\n\tmodified: Wrench,\n\tfixed: GitCommit,\n} as const;\n\nexport function ChangelogTimeline({\n\tentries,\n\tclassName,\n\tstrings: stringsProp,\n}: ChangelogTimelineProps) {\n\tconst strings = useStrings(defaultChangelogTimelineStrings, stringsProp);\n\tconst labelByKind: Record<ChangelogEntryKind, string> = {\n\t\tadded: strings.added,\n\t\tremoved: strings.removed,\n\t\tmodified: strings.modified,\n\t\tfixed: strings.fixed,\n\t};\n\n\tconst items: TimelineItem[] = entries.map((entry: ChangelogEntry) => ({\n\t\tid: entry.id,\n\t\ttitle: (\n\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t<Badge>\n\t\t\t\t\t{labelByKind[entry.kind]}\n\t\t\t\t</Badge>\n\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\">\n\t\t\t\t\t{entry.title}\n\t\t\t\t</Text>\n\t\t\t\t{!!entry.version && (\n\t\t\t\t\t<MonoValue size=\"xs\" className=\"text-muted-foreground\">\n\t\t\t\t\t\t{entry.version}\n\t\t\t\t\t</MonoValue>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t),\n\t\tdescription: entry.author ? (\n\t\t\t<Stack render={<span />} direction=\"horizontal\" gap=\"md\" className=\"inline-flex\">\n\t\t\t\t{entry.description}\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"discrete\">\n\t\t\t\t\t— {entry.author}\n\t\t\t\t</Text>\n\t\t\t</Stack>\n\t\t) : (\n\t\t\tentry.description\n\t\t),\n\t\ttimestamp: entry.timestamp,\n\t\ticon: KIND_ICON[entry.kind],\n\t\tstatus: 'neutral',\n\t}));\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"changelog-timeline\"\n\t\t\tdata-slot=\"changelog-timeline\"\n\t\t\tclassName={cn('changelog-timeline--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"md\" />\n\t\t</div>\n\t);\n}\n\nChangelogTimeline.displayName = 'ChangelogTimeline';\n","import type { ReactNode } from 'react';\nimport type { StringsProp } from '../../../../lib/strings';\n\nexport type MilestoneStatus = 'completed' | 'in_progress' | 'upcoming' | 'blocked';\n\nexport interface MilestoneItem {\n\t/** Stable identity for this entry. */\n\tid: string;\n\t/** Surface title. */\n\ttitle: ReactNode;\n\t/** Supporting copy shown under the label. */\n\tdescription?: ReactNode;\n\tdueDate?: string;\n\tstatus: MilestoneStatus;\n\t/** 0–100; only used when status is `in_progress`. */\n\tprogress?: number;\n}\n\nexport interface MilestonesTimelineStrings {\n\t/** Surface title. */\n\ttitle: string;\n\tcompleted: string;\n\tin_progress: string;\n\tupcoming: string;\n\tblocked: string;\n\tdueOn: string;\n}\n\nexport const defaultMilestonesTimelineStrings: MilestonesTimelineStrings = {\n\ttitle: 'Milestones',\n\tcompleted: 'Completed',\n\tin_progress: 'In progress',\n\tupcoming: 'Upcoming',\n\tblocked: 'Blocked',\n\tdueOn: 'Due',\n};\n\nexport interface MilestonesTimelineProps {\n\tmilestones: MilestoneItem[];\n\t/** Merged onto the outermost node. */\n\tclassName?: string;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<MilestonesTimelineStrings>;\n}\n","/**\n * MilestonesTimeline — project / goal milestones rendered through the\n * shared `Timeline` primitive. Each milestone has a status (completed /\n * in-progress / upcoming / blocked) that drives the dot tone, and an\n * optional `progress` percent that renders an inline progress bar when the\n * milestone is in flight. Strings overridable for i18n.\n */\nimport { Check, Circle, Clock, X } from 'lucide-react';\nimport { Badge } from '../../../base/badge';\nimport { Progress } from '../../../base/feedback';\nimport { Stack } from '../../../base/structure';\nimport { Percent } from '../../../primitives';\nimport { Text } from '../../../typography';\nimport { useStrings } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport {\n\tTimeline,\n\ttype TimelineItem,\n\ttype TimelineStatus,\n} from '../shared';\nimport {\n\tdefaultMilestonesTimelineStrings,\n\ttype MilestoneItem,\n\ttype MilestoneStatus,\n\ttype MilestonesTimelineProps,\n} from './types';\n\nconst STATUS_TO_TIMELINE: Record<MilestoneStatus, TimelineStatus> = {\n\tcompleted: 'completed',\n\tin_progress: 'current',\n\tupcoming: 'pending',\n\tblocked: 'error',\n};\n\nconst STATUS_ICON = {\n\tcompleted: Check,\n\tin_progress: Clock,\n\tupcoming: Circle,\n\tblocked: X,\n} as const;\n\n// In progress is a status (info); primary is reserved for the main command.\nconst STATUS_BADGE: Record<MilestoneStatus, 'success' | 'info' | 'secondary' | 'destructive'> = {\n\tcompleted: 'success',\n\tin_progress: 'info',\n\tupcoming: 'secondary',\n\tblocked: 'destructive',\n};\n\nexport function MilestonesTimeline({\n\tmilestones,\n\tclassName,\n\tstrings: stringsProp,\n}: MilestonesTimelineProps) {\n\tconst strings = useStrings(defaultMilestonesTimelineStrings, stringsProp);\n\tconst labelByStatus: Record<MilestoneStatus, string> = {\n\t\tcompleted: strings.completed,\n\t\tin_progress: strings.in_progress,\n\t\tupcoming: strings.upcoming,\n\t\tblocked: strings.blocked,\n\t};\n\n\tconst items: TimelineItem[] = milestones.map((m: MilestoneItem) => ({\n\t\tid: m.id,\n\t\ttitle: (\n\t\t\t<span className=\"inline-flex flex-wrap items-center gap-space-sm\">\n\t\t\t\t<Text type=\"inherit\" tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\">\n\t\t\t\t\t{m.title}\n\t\t\t\t</Text>\n\t\t\t\t<Badge tone={STATUS_BADGE[m.status]}>\n\t\t\t\t\t{labelByStatus[m.status]}\n\t\t\t\t</Badge>\n\t\t\t</span>\n\t\t),\n\t\tdescription: m.description,\n\t\ttimestamp: m.dueDate ? `${strings.dueOn} ${m.dueDate}` : undefined,\n\t\ticon: STATUS_ICON[m.status],\n\t\tstatus: STATUS_TO_TIMELINE[m.status],\n\t\tchildren:\n\t\t\tm.status === 'in_progress' && typeof m.progress === 'number' ? (\n\t\t\t\t<Stack gap=\"xs\" className=\"milestones-timeline--progress\">\n\t\t\t\t\t<Progress value={m.progress} aria-label={labelByStatus.in_progress} />\n\t\t\t\t\t<Percent value={Math.round(m.progress)} scaled size=\"xs\" type=\"secondary\" align=\"left\" />\n\t\t\t\t</Stack>\n\t\t\t) : undefined,\n\t}));\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"milestones-timeline\"\n\t\t\tdata-slot=\"milestones-timeline\"\n\t\t\tclassName={cn('milestones-timeline--component', className)}\n\t\t>\n\t\t\t<Timeline items={items} dotSize=\"md\" />\n\t\t</div>\n\t);\n}\n\nMilestonesTimeline.displayName = 'MilestonesTimeline';\n"],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { i as e } from "./ui-provider-C-74NVLc.js";
|
|
3
|
+
import { t } from "./utils-DhuoqFy4.js";
|
|
4
|
+
import { c as n } from "./typography-C7-YMW1S.js";
|
|
5
|
+
import { t as r } from "./anchored-positioning-DPnKTvNs.js";
|
|
6
|
+
import { t as i } from "./portal-recipes-DyUXqUtD.js";
|
|
7
|
+
import { t as a } from "./motion-recipes-DitYv6P2.js";
|
|
8
|
+
import { t as o } from "./slot-CLF9kLrS.js";
|
|
9
|
+
import { createContext as s, useContext as c, useId as l, useLayoutEffect as u, useState as d } from "react";
|
|
10
|
+
import { jsx as f } from "react/jsx-runtime";
|
|
11
|
+
import { Tooltip as p } from "@base-ui/react/tooltip";
|
|
12
|
+
//#region src/components/ui/tooltip.tsx
|
|
13
|
+
function m({ delay: e = 0, delayDuration: t, ...n }) {
|
|
14
|
+
return /* @__PURE__ */ f(p.Provider, {
|
|
15
|
+
"data-slot": "tooltip-provider",
|
|
16
|
+
delay: t ?? e,
|
|
17
|
+
...n
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function h({ ...e }) {
|
|
21
|
+
return /* @__PURE__ */ f(m, { children: /* @__PURE__ */ f(p.Root, {
|
|
22
|
+
"data-slot": "tooltip",
|
|
23
|
+
...e
|
|
24
|
+
}) });
|
|
25
|
+
}
|
|
26
|
+
function g({ asChild: e = !1, render: t, children: n, ...r }) {
|
|
27
|
+
let i = e ? /* @__PURE__ */ f(o, {}) : void 0, a = typeof t == "function" ? ((e, n) => {
|
|
28
|
+
let { nativeButton: r, ...i } = e;
|
|
29
|
+
return t(i, n);
|
|
30
|
+
}) : t;
|
|
31
|
+
return /* @__PURE__ */ f(p.Trigger, {
|
|
32
|
+
"data-slot": "tooltip-trigger",
|
|
33
|
+
render: i ?? a,
|
|
34
|
+
...r,
|
|
35
|
+
children: n
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function _({ className: n, container: o, side: s = "top", sideOffset: c = 4, align: l = "center", alignOffset: u = 0, positionMethod: d = r, children: m, ...h }) {
|
|
39
|
+
let g = e(o);
|
|
40
|
+
return /* @__PURE__ */ f(p.Portal, {
|
|
41
|
+
container: g,
|
|
42
|
+
className: i(),
|
|
43
|
+
children: /* @__PURE__ */ f(p.Positioner, {
|
|
44
|
+
positionMethod: d,
|
|
45
|
+
align: l,
|
|
46
|
+
alignOffset: u,
|
|
47
|
+
side: s,
|
|
48
|
+
sideOffset: c,
|
|
49
|
+
className: "isolate z-50",
|
|
50
|
+
children: /* @__PURE__ */ f(p.Popup, {
|
|
51
|
+
"data-slot": "tooltip-content",
|
|
52
|
+
className: t(a.popup, "rounded-radius-xs px-space-md py-space-xs text-xs bg-inverse-background text-inverse-foreground z-50 w-fit max-w-xs origin-(--transform-origin)", n),
|
|
53
|
+
...h,
|
|
54
|
+
children: m
|
|
55
|
+
})
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/components/base/display/tooltip.tsx
|
|
61
|
+
var v = s(void 0), y = s(!1);
|
|
62
|
+
function b(e) {
|
|
63
|
+
let t = c(y), n = l(), [r, i] = d(n), a = /* @__PURE__ */ f(v.Provider, {
|
|
64
|
+
value: {
|
|
65
|
+
id: r,
|
|
66
|
+
setId: i
|
|
67
|
+
},
|
|
68
|
+
children: /* @__PURE__ */ f(p.Root, {
|
|
69
|
+
"data-slot": "tooltip",
|
|
70
|
+
...e
|
|
71
|
+
})
|
|
72
|
+
});
|
|
73
|
+
return t ? a : /* @__PURE__ */ f(m, { children: a });
|
|
74
|
+
}
|
|
75
|
+
function x(e) {
|
|
76
|
+
return /* @__PURE__ */ f(y.Provider, {
|
|
77
|
+
value: !0,
|
|
78
|
+
children: /* @__PURE__ */ f(m, { ...e })
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function S({ className: e, ...n }) {
|
|
82
|
+
let r = c(v)?.id;
|
|
83
|
+
return /* @__PURE__ */ f(g, {
|
|
84
|
+
className: t("tooltip-trigger--component", e),
|
|
85
|
+
...n,
|
|
86
|
+
"aria-describedby": [n["aria-describedby"], r].filter(Boolean).join(" ") || void 0
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
function C({ children: e, className: r, ...i }) {
|
|
90
|
+
let a = c(v), o = i.id ?? a?.id;
|
|
91
|
+
u(() => {
|
|
92
|
+
o && a?.setId(o);
|
|
93
|
+
}, [o, a?.setId]);
|
|
94
|
+
let s = typeof e == "string" || typeof e == "number" || typeof e == "bigint" ? /* @__PURE__ */ f(n, {
|
|
95
|
+
tag: "span",
|
|
96
|
+
size: "inherit",
|
|
97
|
+
lineHeight: "snug",
|
|
98
|
+
className: "tooltip-content--text text-inherit",
|
|
99
|
+
children: e
|
|
100
|
+
}) : e;
|
|
101
|
+
return /* @__PURE__ */ f(_, {
|
|
102
|
+
id: o,
|
|
103
|
+
role: "tooltip",
|
|
104
|
+
className: t("tooltip-content--component max-w-xs rounded-radius-xs px-space-md py-space-xs text-xs leading-snug", r),
|
|
105
|
+
...i,
|
|
106
|
+
children: s
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
b.displayName = "Tooltip", x.displayName = "TooltipProvider", S.displayName = "TooltipTrigger", C.displayName = "TooltipContent";
|
|
110
|
+
//#endregion
|
|
111
|
+
export { h as a, S as i, C as n, _ as o, x as r, g as s, b as t };
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=tooltip-31NwIpTo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip-31NwIpTo.js","names":["TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent","Tooltip","BaseTooltip","TooltipProviderPrimitive","TooltipTriggerPrimitive","TooltipContentPrimitive","useThemePortalContainer","Text","anchoredPositionMethod","portalClassName","motionRecipes","Slot","TooltipProvider$1","props","Tooltip","delayDuration","delay","Tooltip$2","TooltipTrigger$1","slotRender","asChild","safeRender","render","_nativeButton","rest","renderProps","state","TooltipContent$1","resolvedContainer","container","cn","className","TooltipDescriptionContext","createContext","SharedTooltipProviderContext","Tooltip$1","hasSharedProvider","useContext","generatedId","useId","descriptionId","setDescriptionId","useState","root","TooltipProvider","TooltipTrigger","TooltipContent","description","content","children"],"sources":["../src/components/ui/tooltip.tsx","../src/components/base/display/tooltip.tsx"],"sourcesContent":["import { anchoredPositionMethod } from '../../lib/anchored-positioning';\nimport { portalClassName } from '../../lib/portal-recipes';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { useThemePortalContainer, type ThemePortalContainer } from '../../lib/theme-scope';\nimport { Tooltip as TooltipPrimitive } from \"@base-ui/react/tooltip\"\n\nimport { Slot } from \"./slot\"\nimport { cn } from \"../../lib/utils\"\n\nfunction TooltipProvider({\n delay = 0,\n delayDuration,\n ...props\n}: TooltipPrimitive.Provider.Props & { delayDuration?: number }) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delay={delayDuration ?? delay}\n {...props}\n />\n )\n}\n\nfunction Tooltip({ ...props }: TooltipPrimitive.Root.Props) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n )\n}\n\nfunction TooltipTrigger({\n asChild = false,\n render,\n children,\n ...props\n}: TooltipPrimitive.Trigger.Props & { asChild?: boolean }) {\n const slotRender = asChild ? <Slot /> : undefined\n const safeRender: TooltipPrimitive.Trigger.Props[\"render\"] = typeof render === \"function\"\n ? ((renderProps, state) => {\n const { nativeButton: _nativeButton, ...rest } = renderProps as Record<string, unknown>\n void _nativeButton\n return render(rest as typeof renderProps, state)\n })\n : render\n\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n render={slotRender ?? safeRender}\n {...props}\n >\n {children}\n </TooltipPrimitive.Trigger>\n )\n}\n\nfunction TooltipContent({\n className,\n container,\n side = \"top\",\n sideOffset = 4,\n align = \"center\",\n alignOffset = 0,\n positionMethod = anchoredPositionMethod,\n children,\n ...props\n}: TooltipPrimitive.Popup.Props &\n Pick<\n TooltipPrimitive.Positioner.Props,\n \"align\" | \"alignOffset\" | \"side\" | \"sideOffset\" | \"positionMethod\"\n > & { container?: ThemePortalContainer }) {\n const resolvedContainer = useThemePortalContainer(container)\n return (\n <TooltipPrimitive.Portal container={resolvedContainer} className={portalClassName()}>\n <TooltipPrimitive.Positioner\n positionMethod={positionMethod}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n className=\"isolate z-50\"\n >\n <TooltipPrimitive.Popup\n data-slot=\"tooltip-content\"\n className={cn(\n motionRecipes.popup,\n \"rounded-radius-xs px-space-md py-space-xs text-xs bg-inverse-background text-inverse-foreground z-50 w-fit max-w-xs origin-(--transform-origin)\",\n className\n )}\n {...props}\n >\n {children}\n </TooltipPrimitive.Popup>\n </TooltipPrimitive.Positioner>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","/** Tokenized base wrappers for short, non-interactive contextual help. */\nimport { Tooltip as BaseTooltip } from '@base-ui/react/tooltip';\nimport { createContext, useContext, useId, useLayoutEffect, useState, type ComponentProps } from 'react';\n\nimport {\n\tTooltipContent as TooltipContentPrimitive,\n\tTooltipProvider as TooltipProviderPrimitive,\n\tTooltipTrigger as TooltipTriggerPrimitive,\n} from '../../ui/tooltip';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\n\nexport type TooltipProps = ComponentProps<typeof BaseTooltip.Root>;\nexport type TooltipProviderProps = ComponentProps<typeof TooltipProviderPrimitive>;\nexport type TooltipTriggerProps = ComponentProps<typeof TooltipTriggerPrimitive>;\nexport type TooltipContentProps = ComponentProps<typeof TooltipContentPrimitive>;\n\nconst TooltipDescriptionContext = createContext<{ id: string; setId: (id: string) => void } | undefined>(undefined);\n\nconst SharedTooltipProviderContext = createContext(false);\n\n/** Tooltip state root. It does not render a DOM node. */\nexport function Tooltip(props: TooltipProps) {\n\tconst hasSharedProvider = useContext(SharedTooltipProviderContext);\n\tconst generatedId = useId();\n\tconst [descriptionId, setDescriptionId] = useState(generatedId);\n\tconst root = <TooltipDescriptionContext.Provider value={{ id: descriptionId, setId: setDescriptionId }}><BaseTooltip.Root data-slot=\"tooltip\" {...props} /></TooltipDescriptionContext.Provider>;\n\n\treturn hasSharedProvider ? root : <TooltipProviderPrimitive>{root}</TooltipProviderPrimitive>;\n}\n\n/** Shared delay provider for a group of tooltip roots. Nested Tooltip roots reuse it. */\nexport function TooltipProvider(props: TooltipProviderProps) {\n\treturn (\n\t\t<SharedTooltipProviderContext.Provider value>\n\t\t\t<TooltipProviderPrimitive {...props} />\n\t\t</SharedTooltipProviderContext.Provider>\n\t);\n}\n\n/** Polymorphic tooltip anchor. */\nexport function TooltipTrigger({ className, ...props }: TooltipTriggerProps) {\n\tconst description = useContext(TooltipDescriptionContext);\n\tconst descriptionId = description?.id;\n\treturn (\n\t\t<TooltipTriggerPrimitive\n\t\t\tclassName={cn('tooltip-trigger--component', className)}\n\t\t\t{...props}\n\t\t\taria-describedby={[props['aria-describedby'], descriptionId].filter(Boolean).join(' ') || undefined}\n\t\t/>\n\t);\n}\n\n/** Inverse contextual-help surface with package spacing and typography. */\nexport function TooltipContent({ children, className, ...props }: TooltipContentProps) {\n\tconst description = useContext(TooltipDescriptionContext);\n\tconst descriptionId = props.id ?? description?.id;\n\tuseLayoutEffect(() => { if (descriptionId) description?.setId(descriptionId); }, [descriptionId, description?.setId]);\n\tconst isSimpleText = typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint';\n\tconst content = isSimpleText ? (\n\t\t\t<Text\n\t\t\t\ttag=\"span\"\n\t\t\t\tsize=\"inherit\"\n\t\t\t\t\n\t\t\t\tlineHeight=\"snug\"\n\t\t\t\tclassName=\"tooltip-content--text text-inherit\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t) : children;\n\n\treturn (\n\t\t<TooltipContentPrimitive\n\t\t\tid={descriptionId}\n\t\t\trole=\"tooltip\"\n\t\t\tclassName={cn(\n\t\t\t\t// Short labels use compact corners, including Button and sidebar hints.\n\t\t\t\t'tooltip-content--component max-w-xs rounded-radius-xs px-space-md py-space-xs text-xs leading-snug',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{content}\n\t\t</TooltipContentPrimitive>\n\t);\n}\n\nTooltip.displayName = 'Tooltip';\nTooltipProvider.displayName = 'TooltipProvider';\nTooltipTrigger.displayName = 'TooltipTrigger';\nTooltipContent.displayName = 'TooltipContent';\n"],"mappings":"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"}
|