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
|
@@ -27,7 +27,9 @@ TypeScript, optional component peers or the consumer's application code.
|
|
|
27
27
|
in the main region and record facts in the supporting region. A responsibility
|
|
28
28
|
is a role tag reported by `--roles`; a complete business brief is not a role.
|
|
29
29
|
2. Use `--role` to inspect a role's mapped owners. Role names accept spaces or
|
|
30
|
-
kebab-case. A
|
|
30
|
+
kebab-case. A phrase that matches no role stays `unresolved` and may list
|
|
31
|
+
`suggestedRoles` that share its words; retry with one of them only when it
|
|
32
|
+
names the same job. A qualified `themelia-react-ui/<family>#<Symbol>` selector chooses
|
|
31
33
|
an exact mapped contract when a role has several candidates.
|
|
32
34
|
3. Select a pattern and repeat `--main` or `--aside` for each subject. Supported
|
|
33
35
|
patterns are `record-detail`, `collection`, `edit`, `analytics` and `embedded`.
|
|
@@ -46,11 +48,23 @@ installed setup and matching versions. An empty additional list does not remove
|
|
|
46
48
|
React or Base UI requirements.
|
|
47
49
|
|
|
48
50
|
The record-detail example resolves a route owner and, because support is
|
|
49
|
-
requested,
|
|
50
|
-
such as `children
|
|
51
|
+
requested, Page's mapped aside slot. Without support, edit/detail plans recommend narrow when its contract supports that prop. Its `tree.slots` uses actual insertion props
|
|
52
|
+
such as `children` and Page's direct `aside`. Older bundles without Page aside anatomy retain their explicit main/support layout. Parent-surface content can receive a
|
|
51
53
|
subject Card at that boundary. Already framed owners keep their own surface;
|
|
52
54
|
variant-dependent owners require inspection before choosing framing.
|
|
53
55
|
|
|
56
|
+
Collection plans can place an explicit toolbar need in the table seam:
|
|
57
|
+
|
|
58
|
+
```sh
|
|
59
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern collection --main comparison-table --main query-toolbar
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The mapped FilterLayout goes into DataTable's topbarContent with compact/clear
|
|
63
|
+
props, and the mapped FilterProvider wraps that table. Supply its definitions,
|
|
64
|
+
activeFilters and onFilterChange using the app's query transport. Toolbar order
|
|
65
|
+
in the request does not matter. Missing/ambiguous table seams or context mappings
|
|
66
|
+
remain unresolved; no detached filter strip or guessed provider is emitted.
|
|
67
|
+
|
|
54
68
|
For an existing Card boundary:
|
|
55
69
|
|
|
56
70
|
```sh
|
|
@@ -16,6 +16,12 @@ keep placement, width, wrapping and overflow with the surrounding composition.
|
|
|
16
16
|
| Reusable subject presentation | Blocks |
|
|
17
17
|
| Editing/selection/async lifecycle | Features with app callbacks |
|
|
18
18
|
|
|
19
|
+
Base controls, layouts and blocks also own their local interaction and
|
|
20
|
+
accessibility; features coordinate a complete business workflow. For choosing
|
|
21
|
+
compound APIs and building token-backed app content, read
|
|
22
|
+
[app-owned composites](custom-composition.md). It includes disclosure sections,
|
|
23
|
+
layer boundaries and a custom comparison seam.
|
|
24
|
+
|
|
19
25
|
## Compose from the task
|
|
20
26
|
|
|
21
27
|
Identify the user's next decision before selecting components. Establish fixed
|
|
@@ -29,11 +35,11 @@ a detail workspace or a form; they need different information hierarchies.
|
|
|
29
35
|
| DataView | Its coordinated query, view and collection lifecycle fits | DataTable with app-owned query transport and native toolbar slots when coordination differs; base Table for presentation without TanStack behavior |
|
|
30
36
|
| ResourceCell | Identity inside a table cell | Item for independent list entries; MetadataList for label/value facts about one subject |
|
|
31
37
|
| Page / application shell | Route identity, navigation, content bounds and page commands | Card for an independent subject within that route; do not repeat the same heading merely to frame a table |
|
|
32
|
-
| Card | One subject needs a frame and headed regions | `surface="flat" padding="none"` inside an existing boundary;
|
|
38
|
+
| Card | One subject needs a frame and headed regions | `surface="flat" padding="none"` inside an existing boundary; prefer DataTable directly in the layout, or Card padding="none" with a flat table |
|
|
33
39
|
| Metric / MetricGrid / MetricBar | A KPI needs formatted value, comparison/trend or peer layout | UsageCard for used/limit quotas; InlineStat for one plain fact, MetadataList for several record facts |
|
|
34
40
|
| FormField / InlineEdit | A field needs label/hint/error, or isolated save/cancel | Complete feature/overlay for a workflow; app form owns whole-record submission |
|
|
35
41
|
|
|
36
|
-
For a DataTable composition, put
|
|
42
|
+
For a DataTable composition, wrap it in FilterProvider and put `FilterLayout variant="compact" showClearFilters` in `topbarContent`, exports or collection
|
|
37
43
|
tools in `topbarEnd`, selection commands in `bulkActions`, and record commands
|
|
38
44
|
in `rowActions`. `bulkActions` render in the shared `BatchActionBar`, docked to
|
|
39
45
|
the viewport while rows are selected (`selectionToolbarPlacement="inline"` keeps
|
|
@@ -57,20 +63,31 @@ or supported comparison controls. Avoid automatically appending every hidden
|
|
|
57
63
|
column to identity metadata. There is no universal row-line limit: long names,
|
|
58
64
|
accessibility needs and the task can justify richer rows. Explain the priority.
|
|
59
65
|
Custom ResourceCell metadata is caller content; use shared supporting typography
|
|
60
|
-
and CellStack where its smaller secondary-value contract fits.
|
|
66
|
+
and CellStack where its smaller secondary-value contract fits. ResourceCell draws
|
|
67
|
+
its media circle only when you pass `imageUrl`, `icon` or `fallback`: order and
|
|
68
|
+
invoice identifiers stay plain text, and a person opts in with
|
|
69
|
+
`fallback={<Initials value={name} />}`.
|
|
61
70
|
|
|
62
71
|
Commands need explicit importance as well as scope. Describe page commands by
|
|
63
72
|
role in Page's header: `primaryAction` is the route's one main command, and
|
|
64
73
|
`secondaryActions` lists supporting commands in priority order. The header owns
|
|
65
74
|
their treatment and order: outline secondary buttons, the solid primary button,
|
|
66
75
|
then a More actions menu for overflow, destructive commands and narrow screens,
|
|
67
|
-
which always ends the row.
|
|
76
|
+
which always ends the desktop row. Below 40rem of actual header width, every
|
|
77
|
+
command, including primary, moves into one More actions menu. WorkspaceRecordHeader, ResourceHeader, the resource
|
|
68
78
|
shells and SettingsShell take the same props and render the same row. Choosing which
|
|
69
79
|
command is primary, which are `destructive`, and which are `visible` remains an
|
|
70
80
|
application decision; confirm destructive commands in their handler. Use
|
|
71
|
-
`actions`
|
|
81
|
+
the compatible direct `actions` prop for non-command controls such as a period select. A back link,
|
|
72
82
|
export and destructive command should not all inherit the same visual emphasis.
|
|
73
83
|
|
|
84
|
+
Scope this hierarchy to route commands. A local lookup or independently saved
|
|
85
|
+
settings form keeps its primary submit beside its fields or in its own footer;
|
|
86
|
+
it does not compete with the route's primary action. A whole-page editor can
|
|
87
|
+
deliberately expose one submit in its header. Preserve native form association
|
|
88
|
+
and validation instead of moving local saves to header DOM-lookup handlers just
|
|
89
|
+
to silence a primary-command warning.
|
|
90
|
+
|
|
74
91
|
```tsx
|
|
75
92
|
<Page header={{
|
|
76
93
|
title: 'Contacts',
|
|
@@ -92,7 +109,7 @@ leave the others plain.
|
|
|
92
109
|
```tsx
|
|
93
110
|
<Page header={{
|
|
94
111
|
title: member.name,
|
|
95
|
-
|
|
112
|
+
slots: { titleSuffix: <Badge tone="warning">Needs attention</Badge> },
|
|
96
113
|
primaryAction: { label: 'Generate report', onClick: onReport },
|
|
97
114
|
secondaryActions: [
|
|
98
115
|
{ label: 'Update profile', onClick: onEdit },
|
|
@@ -210,7 +227,7 @@ See the [website example](../examples/website.tsx) for both hero and section emp
|
|
|
210
227
|
|
|
211
228
|
## Card anatomy
|
|
212
229
|
|
|
213
|
-
Card surface="card" is the ordinary bordered surface; surface="framed" retains its ring recipe; surface="flat" padding="none" composes within an existing boundary. headerPlacement="frame" places title/icon/actions above an inset body, retaining
|
|
230
|
+
Card surface="card" is the ordinary bordered surface; surface="framed" retains its ring recipe; surface="flat" padding="none" composes within an existing boundary. headerPlacement="frame" places title/icon/actions above an inset body, retaining the surface corner and using rounded-radius on that body.
|
|
214
231
|
|
|
215
232
|
Choose one ordinary Card surface through UIProvider's `card.defaultSurface` and
|
|
216
233
|
let sibling subjects inherit it. Explicit per-card surfaces win: mixing `card`
|
|
@@ -223,9 +240,9 @@ for richer content. Facts and rows follow the same rule: one glyph repeated on
|
|
|
223
240
|
every MetadataList item or Item row is decoration, so leave `icon`/media empty.
|
|
224
241
|
|
|
225
242
|
Card `gap` owns spacing between regions; `contentGap` owns direct body-child
|
|
226
|
-
spacing; `textGap` owns title/supporting-copy rhythm.
|
|
227
|
-
|
|
228
|
-
|
|
243
|
+
spacing; `textGap` owns title/supporting-copy rhythm. Body children default to
|
|
244
|
+
the shared related `xl` gap (16px at default roots).
|
|
245
|
+
Use `contentGap="2xl"` for
|
|
229
246
|
independent sections. Omit it around an existing Grid/Stack or a single feature
|
|
230
247
|
that already owns its layout:
|
|
231
248
|
|
|
@@ -325,26 +342,28 @@ primitives rather than replacing labels and values with undifferentiated Text.
|
|
|
325
342
|
|
|
326
343
|
## Menus and controls
|
|
327
344
|
|
|
328
|
-
PopoverContent type="display" owns substantive-content padding; type="menu" compact collection padding around already-padded rows. Popover and Command share inset="default" and inset="compact" paradigms. Mixed searchable shells use inset="flush"; public header/search/list/footer anatomy owns its insets automatically. CommandInput composes the public Input for control geometry and focus styling; its search region adds only outer spacing. Do not pass padding through className, contentClassName or inline styles. Compact header controls and footer actions align with row highlight edges; header text and footer captions
|
|
345
|
+
PopoverContent type="display" owns substantive-content padding; type="menu" compact collection padding around already-padded rows. Popover and Command share inset="default" and inset="compact" paradigms. Mixed searchable shells use inset="flush"; public header/search/list/footer anatomy owns its insets automatically. CommandInput composes the public Input for control geometry and focus styling; its search region adds only outer spacing. Do not pass padding through className, contentClassName or inline styles. Compact header controls and footer actions align with row highlight edges and the search field; header text and footer captions sit one small step inside that edge. Use PopoverHeader start for a leading control and PopoverFooter caption for supporting content alongside trailing action children. Dividers use the same semantic recipe. density selects vertical row rhythm without changing inline padding. ActionMenu owns action definitions, PopoverMenu searchable selection, DropdownMenu bespoke menu anatomy. Shared appearance preserves their accessible menu/listbox/dialog behavior.
|
|
329
346
|
|
|
330
347
|
| Choice | Responsibility |
|
|
331
348
|
| --- | --- |
|
|
332
349
|
| PopoverContent type="display" / type="menu" | Display versus collection anatomy and typography |
|
|
333
|
-
| inset="default" / "compact" |
|
|
350
|
+
| inset="default" / "compact" | Rich surface inset versus small collection shell |
|
|
334
351
|
| inset="flush" | Delegate insets to owned regions; not a density |
|
|
335
352
|
| density="compact" / "default" / "comfortable" | Collection row block rhythm, independent from inline spacing |
|
|
336
353
|
| size="sm" / "md" / "lg" | Supported control's scale; consult its declaration and provider precedence |
|
|
337
354
|
|
|
338
|
-
Input, Button, Select
|
|
339
|
-
|
|
355
|
+
Input, Button, Select, filter-facet triggers and badges share the default
|
|
356
|
+
`rounded-radius` corner; Card and popup shells use the larger `rounded-surface`.
|
|
357
|
+
Fields and actions use their corresponding height scales; badges remain content-sized.
|
|
358
|
+
Omitted sizes inherit the provider; explicit sizes win.
|
|
340
359
|
Keep action/control roots equal when those controls adjoin. Compact menu rows,
|
|
341
|
-
surface insets and control sizes remain independent; density
|
|
342
|
-
|
|
360
|
+
surface insets and control sizes remain independent; density does not change
|
|
361
|
+
the corner.
|
|
343
362
|
Inset segmented children use the supported compound owner's same-height frame.
|
|
344
363
|
|
|
345
364
|
PopoverContent defaults to display/default; Command defaults to compact. An explicit PopoverContent type controls anatomy; explicit inset controls padding and takes precedence over the type's inferred inset. Without type, compact implies menu, other insets imply display. Put type="menu" inset="flush" on PopoverContent for a headed searchable picker. Popover is the interaction root and receives no surface props. PopoverMenu already assembles that picker anatomy; use its declared selection/search props. ComboboxPopup is flush because ComboboxList owns its inset. Do not add another wrapper inset around a normal collection list.
|
|
346
365
|
|
|
347
|
-
At shipped roots, compact shell padding is 8px; row inline padding is 12px
|
|
366
|
+
At shipped roots, rich display padding is 24px and compact collection shell padding is 8px; row inline padding is 12px. Anchored collection rows use 6px block padding and a 32px minimum height by default. Compact/comfortable rows use 2/8px block padding and 28/36px minimum heights. These differ from Item/table row density recipes; content can grow when it wraps. These are token-derived measurements, not app constants. Flush compact header/footer bands match the list's 8px inset. Plain header text and footer captions add a small xs step (4px) to that md band inset, rather than the full row inset; leading controls and actions stay on the band edge. Nested public slots do not repeat these insets.
|
|
348
367
|
|
|
349
368
|
Input frames and outline buttons share the input semantic token; collection dividers use border/60; focus uses ring separately and draws one indicator everywhere (a full-strength edge inside a soft halo). Equal responsibilities share recipes, while different semantic roles retain their own treatment. CommandInput keeps its existing onValueChange search contract and native refs; use the actual public Input through its default composition rather than restyling an unframed native field.
|
|
350
369
|
|
|
@@ -356,7 +375,10 @@ Overflow menus use ActionMenu's own trigger: the ⋯ glyph named "More actions",
|
|
|
356
375
|
|
|
357
376
|
## Migration
|
|
358
377
|
|
|
359
|
-
Use exact themelia-react-ui paths. Presentation imports
|
|
378
|
+
Use exact `themelia-react-ui` paths. Presentation imports move from
|
|
379
|
+
`admin-ui-starter-kit/composed/<family>` to `themelia-react-ui/blocks/<family>`.
|
|
380
|
+
Read `MIGRATION.md` in the installed package for setup, tools and changed
|
|
381
|
+
defaults. Check the installed types when migrating a composition.
|
|
360
382
|
|
|
361
383
|
|
|
362
384
|
## Copy rhythm
|
|
@@ -446,6 +468,40 @@ to the existing shell and retains its typed slots; topbar props and toolbar
|
|
|
446
468
|
props are specific to their variants. The low-level TopbarSidebarLayout,
|
|
447
469
|
SidebarInsetLayout and StackedLayout remain available for deliberate composition.
|
|
448
470
|
|
|
471
|
+
Choose the structure before its options: a global Header above navigation, a
|
|
472
|
+
full-height AppSidebar beside the content Header, or the shadcn-style inset page
|
|
473
|
+
beside navigation. The catalogue leads with these three structures and reuses
|
|
474
|
+
the exact AppSidebar example from the Sidebar page. Single/dual navigation,
|
|
475
|
+
attached/floating frames and icon/offcanvas collapse configure a structure.
|
|
476
|
+
Example child destinations are text-only; an explicit child icon is reserved
|
|
477
|
+
for a case where it carries information.
|
|
478
|
+
|
|
479
|
+
Header-first light/dark variants accept `contentSurface="inset"` for a quiet
|
|
480
|
+
secondary canvas around the card-colored main surface; omission keeps plain.
|
|
481
|
+
SidebarInsetLayout retains `surface="inset" | "flush"`, and the sidebar/inset
|
|
482
|
+
presets retain their defaults. AppSidebar/LayoutSidebar `surface="transparent"`
|
|
483
|
+
shares the docked canvas; drawer surfaces remain opaque. This uses the existing
|
|
484
|
+
theme roles and structural roots.
|
|
485
|
+
|
|
486
|
+
The shared global header-height root defaults to 4rem. Use the playground's
|
|
487
|
+
full-viewport `?page=shells&layout=header|sidebar|inset` views to inspect
|
|
488
|
+
the composition, optionally with `&theme=dark`.
|
|
489
|
+
|
|
490
|
+
Sidebar shells accept `slots.sidebar` (primary) and `slots.secondarySidebar`
|
|
491
|
+
(contextual navigation). Each missing region removes its track. `sidebarWidth`
|
|
492
|
+
and `secondarySidebarWidth` size their own expanded region, with the
|
|
493
|
+
shared shell width as fallback. `sidebarPresentation="rail"` selects dedicated
|
|
494
|
+
primary navigation geometry independently of full-sidebar icon collapse. Use SidebarNavigationRail from
|
|
495
|
+
layout/sidebar for area navigation with items, value/onValueChange and
|
|
496
|
+
renderLink; it preserves accessible labels/tooltips and defaults to
|
|
497
|
+
collapsible="none". Its default background surface and divider distinguish it
|
|
498
|
+
from the contextual canvas. The 48px default derives from a 32px action plus
|
|
499
|
+
two 8px insets; full-sidebar icon collapse remains 60px. These are private
|
|
500
|
+
recipes, not extra consumer knobs. SidebarRail remains the collapse affordance.
|
|
501
|
+
The rail also accepts header, beforeNavigation, afterNavigation and footer
|
|
502
|
+
nodes or render callbacks with named state. Header/footer are pinned;
|
|
503
|
+
before/after content scrolls with its navigation.
|
|
504
|
+
|
|
449
505
|
The shell owns one PageViewport and framing. Give the root a constrained height
|
|
450
506
|
(`h-svh min-h-0` for full-screen apps). Page owns width, page gutters and
|
|
451
507
|
header/body rhythm, Card owns its insets, and Stack/Grid owns peer gaps. With
|
|
@@ -453,12 +509,49 @@ stacked/contained content, use Page gutter="none" to avoid repeating the shell's
|
|
|
453
509
|
Container gutter. Metric card size changes copy/media scale, keeping the default
|
|
454
510
|
surface inset in ready, loading and error states.
|
|
455
511
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
512
|
+
Keep the dual area rail docked on the left beside the full navigation panel,
|
|
513
|
+
and choose that panel's AppSidebar/LayoutSidebar `collapsible` independently
|
|
514
|
+
of its skin or AppLayout variant. `icon` minimizes it to a second compact
|
|
515
|
+
column, `offcanvas` hides it and leaves only the original rail, and `none`
|
|
516
|
+
keeps it expanded. Current examples default to `icon` and expose a preview
|
|
517
|
+
selector for the same modes; standalone navigation supports the same choice.
|
|
518
|
+
The primary area rail keeps its own `collapsible="none"` policy. One explicit
|
|
519
|
+
trigger controls the contextual panel; selecting an area opens it. At narrow widths the inline cluster pans a
|
|
520
|
+
minimum page canvas while its area rail stays pinned. It preserves the chosen
|
|
521
|
+
expansion state rather than silently minimizing. Do not repeat a contextual
|
|
522
|
+
group heading already supplied by its pinned
|
|
523
|
+
header. KPI peers use MetricGrid. Shared header/page/navigation recipes own the
|
|
524
|
+
spacing; Page remains the one page-padding owner.
|
|
525
|
+
|
|
526
|
+
Compose one LayoutSidebarProvider around the shell and its triggers. Shell slots
|
|
527
|
+
establish named scopes, so AppSidebar, LayoutSidebar and useLayoutSidebar() infer
|
|
528
|
+
their panel ID; ordinary compositions need no repeated IDs or nested provider.
|
|
529
|
+
Manual compositions can pass a panel ID explicitly. `SidebarTrigger panelId`
|
|
530
|
+
targets primary/secondary/aside; omission uses provider `navigationPanel`
|
|
531
|
+
(primary by default). That also selects the Ctrl/Command+B shortcut target;
|
|
532
|
+
keyboardShortcut changes the key or accepts false.
|
|
533
|
+
|
|
534
|
+
Desktop expansion uses openPanels/defaultOpenPanels/onOpenPanelsChange. Closed
|
|
535
|
+
icon panels leave a rail, offcanvas removes their track, and none remains visible.
|
|
536
|
+
Controlled openPanels wins over legacy primary open; otherwise open controls
|
|
537
|
+
primary and the provider owns other regions. defaultOpenPanels defines the
|
|
538
|
+
initial uncontrolled set; without it, defaultOpen keeps its primary meaning.
|
|
539
|
+
Primary changes notify onOpenChange and set changes notify onOpenPanelsChange.
|
|
540
|
+
The app accepts controlled proposals by updating the matching props; additional
|
|
541
|
+
persistence remains application-owned.
|
|
542
|
+
|
|
543
|
+
mobilePanel/onMobilePanelChange select one active undocked drawer, preserving
|
|
544
|
+
desktop preferences. Context presentation is docked/drawer; isMobile is its
|
|
545
|
+
drawer alias, including when a contextual panel undocks on a desktop viewport.
|
|
546
|
+
Other panel/drawer compositions retain default thresholds of 768/1024/1440px
|
|
547
|
+
for primary/secondary/aside against available shell width. The featured dual
|
|
548
|
+
cluster uses `mobileSidebarMode="inline"` to keep the rail and its adjacent
|
|
549
|
+
collapsible panel docked. Use adaptTo="container" on embedded providers to contain
|
|
550
|
+
their drawer and backdrop inside that provider. Essential
|
|
551
|
+
undocked regions need reachable targeted triggers. Account/search/page actions
|
|
552
|
+
remain application callbacks. Do not add another scroll viewport inside Page.
|
|
553
|
+
Use Header partials in shell slots to retain one header/inset owner. Header menus
|
|
554
|
+
retain the header theme through their portal host.
|
|
462
555
|
|
|
463
556
|
Header forwards native attributes, handlers and refs. PageHeader supports
|
|
464
557
|
textGap="normal" or "dense" without changing control or page insets. Header
|
|
@@ -471,12 +564,23 @@ The installed [app-shell recipe](../examples/app-layout.tsx) exports a copyable
|
|
|
471
564
|
`WorkspaceLayout` that hosts route children directly. Put `AccountDetailPage` or
|
|
472
565
|
another route Page inside it. `WorkspaceExamplePage` separately demonstrates a
|
|
473
566
|
Workspace title, Create callback and narrow measure; replace that example when
|
|
474
|
-
composing a real route.
|
|
567
|
+
composing a real route. `WorkspaceRegionsLayout` accepts primaryNavigation and
|
|
568
|
+
sidebarPresentation="rail" for a static SidebarNavigationRail beside contextual
|
|
569
|
+
navigation; omitted primaryNavigation builds the alternative grouped sidebar.
|
|
570
|
+
It coordinates controlled named state under one provider. The app's area rail
|
|
571
|
+
can use useLayoutSidebar('secondary') to open context when an area is selected.
|
|
572
|
+
A defined
|
|
573
|
+
secondarySidebar replacement wins over contextualNavigationGroups; null removes
|
|
574
|
+
that region. Without a replacement, groups build the standard AppSidebar with
|
|
575
|
+
`contextualCollapsible?: AppSidebarProps['collapsible']`, defaulting to `icon`.
|
|
576
|
+
Pass `offcanvas` to hide it or `none` to retain expanded navigation; a supplied
|
|
577
|
+
secondarySidebar owns its own policy. These recipe names are
|
|
578
|
+
local to the copied file; the public
|
|
475
579
|
`WorkspaceLayout` from `layout/workspace` is the record shell described below.
|
|
476
580
|
|
|
477
581
|
PageViewport owns scrolling and adds no padding. Page defaults to `gutter="lg"`
|
|
478
582
|
and `padding="lg"` (32px at shipped roots), so it owns inline/block space once.
|
|
479
|
-
`narrow` selects centered `md` width;
|
|
583
|
+
`narrow` selects centered `md` width (48rem); otherwise an aside selects `xl` (80rem), and a single column uses `lg` (64rem). Explicit `maxWidth` wins over both. Header copy
|
|
480
584
|
defaults to dense; `textGap="normal"` is an explicit alternative. Do not assume
|
|
481
585
|
an app shell supplies gutters because it supplies a viewport. Set `gutter="none"`
|
|
482
586
|
only when an actual parent Container/surface supplies the inline inset, such as
|
|
@@ -484,24 +588,63 @@ StackedLayout's contained mode. Block padding remains independent.
|
|
|
484
588
|
That contained measure uses the same large gutter as Page; ordinary Container
|
|
485
589
|
defaults remain unchanged.
|
|
486
590
|
|
|
591
|
+
|
|
592
|
+
Page is the canonical route owner for new index/detail/edit screens. Its header
|
|
593
|
+
keeps title, description, back navigation, commands and tabs. Add content through
|
|
594
|
+
`header.slots.beforeTitle`, `titleSuffix`, `afterDescription` and `actions`.
|
|
595
|
+
Each accepts a React node or a callback receiving `{ renderLink, defaultContent }`.
|
|
596
|
+
Compose Badge for a title status and MetadataList for facts below the description;
|
|
597
|
+
there is no automatic metadata item shape or avatar column. Title, description and afterDescription stay in one tight left copy column;
|
|
598
|
+
actions occupy a separate right column aligned to the top. beforeTitle spans
|
|
599
|
+
above the columns, and tabs sit below. An actions renderer
|
|
600
|
+
can wrap or return `defaultContent` to retain the responsive command row; replacing
|
|
601
|
+
it owns its own command semantics. Legacy `slots.back`, `titleBadges`, `titleIcon`
|
|
602
|
+
and direct `actions` remain compatible. Direct toolbar, aside and lifecycle props compose at that
|
|
603
|
+
same boundary; explicit slots override matching direct regions. beforeHeader
|
|
604
|
+
precedes the header; afterHeader is the compatible toolbar fallback. Loading
|
|
605
|
+
precedes error, then empty, replacing only the main body while the header,
|
|
606
|
+
toolbar and aside remain mounted. Customize state strings or loading/error/empty
|
|
607
|
+
slots and wire onRetry. ResourceHeader/ResourceIndexShell/ResourceShowShell/
|
|
608
|
+
TabbedResourceShell retain legacy embedding behavior for migration.
|
|
609
|
+
|
|
487
610
|
Select width from the task: a single focused resource/form can use `narrow`;
|
|
488
|
-
a record with
|
|
489
|
-
TwoColumnLayout. A wide comparison/directory can deliberately use `maxWidth="full"`.
|
|
611
|
+
a record with supporting context uses Page `aside` and infers `xl` (80rem).
|
|
612
|
+
An explicit TwoColumnLayout inside Page should set `maxWidth="xl"`; it retains its own split contract. A wide comparison/directory can deliberately use `maxWidth="full"`.
|
|
490
613
|
Setting full on every route defeats the resource measure. Do not remove Page's
|
|
491
614
|
gutters to make its title touch the sidebar; align the header and body through
|
|
492
615
|
the same Page. Density, container measure and page inset are separate choices.
|
|
493
616
|
The [detail recipe](../examples/detail.tsx) includes `AccountDetailPage`: the
|
|
494
|
-
|
|
617
|
+
narrow record measure, a status badge, route-level commands and section tabs in
|
|
495
618
|
the header, and MetadataList facts in one framed Card, with no duplicated subject
|
|
496
619
|
header or gutter.
|
|
497
620
|
|
|
621
|
+
Page's measure contains both header and body. On a mixed route with wide tables
|
|
622
|
+
and focused settings panels, keep Page's width stable across tabs. Constrain
|
|
623
|
+
only the focused panel with `Container maxWidth="md" gutter="none"`; Container
|
|
624
|
+
uses `gutter`, not a `padding` prop. An intentional responsive route width is
|
|
625
|
+
different from changing the header's width on every section selection.
|
|
626
|
+
|
|
498
627
|
Compose HeaderUserMenu in topbar `slots.headerEnd` or a local toolbar, and
|
|
499
628
|
SidebarNavigationUser in AppSidebar `slots.footer` when account access belongs
|
|
500
629
|
in navigation. Use SidebarWorkspaceDropdown for workspace links, or add a
|
|
501
630
|
custom control through `slots.headerEnd` alongside the logo. `headerStart` and
|
|
502
|
-
`headerEnd` stay inside the padded, fixed header
|
|
503
|
-
|
|
504
|
-
|
|
631
|
+
`headerEnd` stay inside the padded, fixed header. The four header,
|
|
632
|
+
beforeNavigation, afterNavigation and footer slots accept nodes or callbacks
|
|
633
|
+
receiving `{ panelId, collapsed, presentation, isMobile, renderLink, defaultContent }`.
|
|
634
|
+
A legacy header node replaces the entire header; a callback supplies content
|
|
635
|
+
inside its library-owned inset. Both footer forms retain SidebarFooter's rule and
|
|
636
|
+
inset. Before/after navigation content scrolls with the links, so tall supporting
|
|
637
|
+
content belongs there. Ordered `{ id, label?, items }` navigation groups supplement
|
|
638
|
+
the Record form; use stable item IDs for branch state and live badges.
|
|
639
|
+
renderItemContent changes noninteractive row content while preserving the owning
|
|
640
|
+
link/disclosure/focus treatment; renderItem remains the full row escape hatch.
|
|
641
|
+
Current matching selects the most-specific href; render contexts expose ancestor
|
|
642
|
+
state separately from current active state. In icon mode, searchable
|
|
643
|
+
AppSidebar preserves its search band as an icon button that expands and focuses
|
|
644
|
+
the field without clearing the query. LayoutSidebarProvider defaults to
|
|
645
|
+
comfortable rows with a shared xs gap. Default keeps that gap with smaller
|
|
646
|
+
rows; compact uses a tighter 2xs gap. Caption and group spacing keep their own
|
|
647
|
+
larger roles. Explicit density still wins.
|
|
505
648
|
WorkspaceLayout owns its own bounded content inset; do not add a padded Page
|
|
506
649
|
inside it. WorkspaceRecordHeader and WorkspaceLocaleStrip align to the same
|
|
507
650
|
large inline surface role. Record copy supports textGap with a dense default.
|
|
@@ -526,3 +669,5 @@ formatted-value and structure owners. Drawn rings and mini charts retain private
|
|
|
526
669
|
geometry and semantic chart/status colors. Read the
|
|
527
670
|
[workflow contracts](workflows.md#task-summaries-usage-and-inline-editing) and
|
|
528
671
|
[typed workspace recipe](../examples/planning-usage-edit.tsx) for integration.
|
|
672
|
+
|
|
673
|
+
Explicit `type="display" inset="compact"` retains the small rich-surface tier (12px); collection compact insets use 8px. Display/default remains 24px. Chart tooltips and explicit small async previews retain their rich-content surface sizing.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Critique rubric
|
|
2
|
+
|
|
3
|
+
Use to judge a rendered view: after building one, before handing it back, or when
|
|
4
|
+
reviewing someone else's screen. Judge screenshots and measurements, not source.
|
|
5
|
+
Valid API usage, passing checks and a correct data model do not make a view
|
|
6
|
+
clear.
|
|
7
|
+
|
|
8
|
+
Render the view at 390×844 and 1440×900, in light and dark, with the states the
|
|
9
|
+
task touches (opened menu or editor, error, accepted). Run the census below at
|
|
10
|
+
each width, then score every criterion.
|
|
11
|
+
|
|
12
|
+
## Criteria
|
|
13
|
+
|
|
14
|
+
Score each criterion 0 (fails), 1 (partly) or 2 (passes). Criteria marked
|
|
15
|
+
**blocking** must score 2 before the work is handed back.
|
|
16
|
+
|
|
17
|
+
| # | Criterion | Question | How to measure |
|
|
18
|
+
| --- | --- | --- | --- |
|
|
19
|
+
| 1 | Five-second test (**blocking**) | From the first viewport alone, can you say what this is, what state it is in and what to do next? | Write the three answers from the screenshot before reading source. Compare them with the data brief's decision and facts |
|
|
20
|
+
| 2 | Focal point | Is there one dominant element per view and per region, and is it the one the brief chose? | Look at a reduced screenshot; census `focalCandidates` lists the largest text and its position. The focal element is in the first viewport at both widths |
|
|
21
|
+
| 3 | Hierarchy (**blocking**) | Does each region use at most three text levels, ordered title, value, supporting? | Census `regions[].textLevels`; above 4 needs a reason (a badge or a value primitive's secondary part). Compare `textStyles` outliers with their owners |
|
|
22
|
+
| 4 | Emphasis budget | One solid primary command per page or surface; tones only where status changes the action? | Census `primaryCommands`: 0 means the next action has no emphasis, 2 or more on one surface means competition. Read each toned badge and name the status it states |
|
|
23
|
+
| 5 | Data integrity (**blocking**) | Do figures, units, signs and totals match the records; zero and missing differ; nothing invented? | Check three figures against the data and recompute one total or delta |
|
|
24
|
+
| 6 | Encoding fit | Does each chart answer a question you can write in one sentence, and does each table compare rows on shared columns? | Write the question beside each chart. Name the compared column for each table |
|
|
25
|
+
| 7 | Grouping and rhythm | Do gaps grow from within a group to between groups to between sections, without filler or box-in-box? | Census `regions[].insideFrame` lists frames inside frames. Measure sibling gaps in the DOM; equal gaps at every level fail |
|
|
26
|
+
| 8 | Alignment | Do peer regions share content start edges, and do numbers right-align on one axis? | Census `regions[].left` and `inset`: peers differ by at most 1px. A leading badge adds its own padding to `inset`; check it in the image |
|
|
27
|
+
| 9 | Narrow reading order | At 390 wide, does the decision content come before evidence, with no sideways page scroll? | `overflowX` is 0. Scroll position of the focal element and the primary command. Tables may scroll inside their own region |
|
|
28
|
+
| 10 | Theme and states | Does dark keep the same hierarchy and contrast, and are loading, empty, error and accepted states designed? | Dark screenshots of the same viewports; trigger each state the view supports |
|
|
29
|
+
|
|
30
|
+
Hand back at 16 of 20 or more with every blocking criterion at 2. Otherwise fix
|
|
31
|
+
the lowest-scoring criterion at its owner and score again. After three rounds,
|
|
32
|
+
stop and report what remains and why.
|
|
33
|
+
|
|
34
|
+
## Census
|
|
35
|
+
|
|
36
|
+
Run in the page through the browser tool's JavaScript evaluation. It reads
|
|
37
|
+
computed styles only and changes nothing.
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
(() => {
|
|
41
|
+
const shown = el => { const r = el.getBoundingClientRect(); const s = getComputedStyle(el); return r.width > 0 && r.height > 0 && s.visibility !== 'hidden' && s.opacity !== '0'; };
|
|
42
|
+
const hasText = el => [...el.childNodes].some(node => node.nodeType === 3 && node.textContent.trim());
|
|
43
|
+
const words = el => (el.getAttribute('aria-label') || el.textContent || '').trim().replace(/\s+/g, ' ').slice(0, 40);
|
|
44
|
+
const probe = document.body.appendChild(Object.assign(document.createElement('span'), { style: 'background: var(--primary)' }));
|
|
45
|
+
const primary = getComputedStyle(probe).backgroundColor; probe.remove();
|
|
46
|
+
const all = [...document.querySelectorAll('body *')].filter(shown);
|
|
47
|
+
const texts = all.filter(hasText);
|
|
48
|
+
const style = el => { const s = getComputedStyle(el); return `${s.fontSize} ${s.fontWeight}`; };
|
|
49
|
+
const isFrame = el => { const s = getComputedStyle(el); const r = el.getBoundingClientRect();
|
|
50
|
+
return ['Top', 'Right', 'Bottom', 'Left'].every(side => parseFloat(s[`border${side}Width`]) > 0) && r.height >= 64 && r.width >= 160
|
|
51
|
+
&& !el.matches('input, textarea, select, button, [role="combobox"], [role="group"]') && !el.querySelector('h1'); };
|
|
52
|
+
const frames = all.filter(isFrame);
|
|
53
|
+
const owner = el => frames.filter(frame => frame !== el && frame.contains(el)).at(-1);
|
|
54
|
+
const regions = frames.map(frame => {
|
|
55
|
+
const own = texts.filter(el => frame.contains(el) && owner(el) === frame);
|
|
56
|
+
const first = own[0];
|
|
57
|
+
return { region: first ? words(first) : '(no text)', top: Math.round(frame.getBoundingClientRect().top + scrollY), left: Math.round(frame.getBoundingClientRect().left),
|
|
58
|
+
inset: first ? Math.round(first.getBoundingClientRect().left - frame.getBoundingClientRect().left) : null,
|
|
59
|
+
textLevels: new Set(own.map(style)).size, insideFrame: owner(frame) ? words(texts.find(el => owner(frame).contains(el)) || owner(frame)) : null };
|
|
60
|
+
}).sort((a, b) => a.top - b.top || a.left - b.left);
|
|
61
|
+
const counts = new Map(texts.map(style).map(key => [key, 0]));
|
|
62
|
+
for (const el of texts) counts.set(style(el), counts.get(style(el)) + 1);
|
|
63
|
+
return {
|
|
64
|
+
viewport: `${innerWidth}x${innerHeight}`,
|
|
65
|
+
overflowX: document.documentElement.scrollWidth - document.documentElement.clientWidth,
|
|
66
|
+
primaryCommands: all.filter(el => el.matches('button, a') && getComputedStyle(el).backgroundColor === primary).map(words),
|
|
67
|
+
focalCandidates: texts.map(el => ({ el, size: parseFloat(getComputedStyle(el).fontSize) })).sort((a, b) => b.size - a.size).slice(0, 3).map(({ el, size }) => `${size}px ${words(el)} @${Math.round(el.getBoundingClientRect().top + scrollY)}`),
|
|
68
|
+
textStyles: [...counts].sort((a, b) => b[1] - a[1]).map(([key, count]) => `${key} ×${count}`),
|
|
69
|
+
regions,
|
|
70
|
+
};
|
|
71
|
+
})()
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The census lists signals, not verdicts. The application shell's frame (any frame
|
|
75
|
+
containing the page `h1`) is excluded. Frames are bordered regions at least
|
|
76
|
+
160×64px, so tables, cards and drawers appear. A surface without a border is not
|
|
77
|
+
listed: judge it in the image.
|
|
78
|
+
|
|
79
|
+
## Write findings
|
|
80
|
+
|
|
81
|
+
One finding per problem, most severe first:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
[criterion #] <where: route, region, width/theme>
|
|
85
|
+
Seen: <what the screenshot or census shows>
|
|
86
|
+
Why it matters: <the user's decision or reading it harms>
|
|
87
|
+
Fix: <owner and prop, or the content to remove or move>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
A finding names the owner that should change. "Looks cluttered" is not a
|
|
91
|
+
finding; "Purchased goods uses 9 text levels at 1440, so quantity, SKU and
|
|
92
|
+
location compete with the product name" is.
|
|
93
|
+
|
|
94
|
+
## Report the score
|
|
95
|
+
|
|
96
|
+
State the score per criterion, with the measurement behind each 1 or 0, for
|
|
97
|
+
every width and theme inspected. Say which states were not rendered: an
|
|
98
|
+
unrendered state is unverified, not passed.
|