themelia-react-ui 2.0.3 → 2.0.5
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 +185 -0
- package/README.md +168 -36
- package/dist/{accordion-Cjb6sx0G.js → accordion-B9MHG0cT.js} +11 -11
- package/dist/accordion-B9MHG0cT.js.map +1 -0
- package/dist/action-menu-Dr8K-ghE.js +284 -0
- package/dist/action-menu-Dr8K-ghE.js.map +1 -0
- package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-P-aVJisu.js} +42 -36
- package/dist/affordance-geometry.generated-P-aVJisu.js.map +1 -0
- package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-C58tQcBy.js} +387 -350
- package/dist/ai-artifact-C58tQcBy.js.map +1 -0
- package/dist/app-shell-B_IuNWOo.js +321 -0
- package/dist/app-shell-B_IuNWOo.js.map +1 -0
- package/dist/{attachment-BxDfL2mw.js → attachment-Dg_69lPS.js} +9 -9
- package/dist/{attachment-BxDfL2mw.js.map → attachment-Dg_69lPS.js.map} +1 -1
- package/dist/{auth-BGua8ouh.js → auth-DTkkshS8.js} +44 -47
- package/dist/auth-DTkkshS8.js.map +1 -0
- package/dist/{avatar-DAPlDvhJ.js → avatar-CeZaFmNH.js} +8 -8
- package/dist/avatar-CeZaFmNH.js.map +1 -0
- package/dist/{badge-HpFqoqSY.js → badge-xIiV_E7f.js} +5 -5
- package/dist/{badge-HpFqoqSY.js.map → badge-xIiV_E7f.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 +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +3 -3
- 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 +12 -12
- 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 +7 -7
- package/dist/base/signature-pad.js.map +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +4 -4
- 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-DnUJ21NQ.js → batch-action-bar-Cb8cuvyy.js} +6 -6
- package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
- package/dist/blocks/admin.js +23 -23
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +230 -216
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +326 -307
- 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 +1247 -1169
- 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-C-oqs1sQ.js → breadcrumbs-J-K2kl4c.js} +6 -6
- package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
- package/dist/{button-DVzspB_G.js → button-S2Cubiiz.js} +3 -3
- package/dist/button-S2Cubiiz.js.map +1 -0
- package/dist/{buttons-DPZekJFu.js → buttons-BedGfygC.js} +16 -16
- package/dist/buttons-BedGfygC.js.map +1 -0
- package/dist/cards-rNX1M4Xn.js +69 -0
- package/dist/cards-rNX1M4Xn.js.map +1 -0
- package/dist/cascader-B1MiqkBq.js +439 -0
- package/dist/cascader-B1MiqkBq.js.map +1 -0
- package/dist/chart-Darg_0Kv.js +162 -0
- package/dist/chart-Darg_0Kv.js.map +1 -0
- package/dist/{checkbox-AWIhNhmo.js → checkbox-fflqmODR.js} +9 -5
- package/dist/checkbox-fflqmODR.js.map +1 -0
- package/dist/choice-inputs-zUgBZfE4.js +777 -0
- package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
- package/dist/{code-block-DeneBJR_.js → code-block-BzmM9Eig.js} +9 -9
- package/dist/code-block-BzmM9Eig.js.map +1 -0
- package/dist/{collapsible-C-_l4hpy.js → collapsible-BkAI_XD4.js} +5 -5
- package/dist/{collapsible-C-_l4hpy.js.map → collapsible-BkAI_XD4.js.map} +1 -1
- package/dist/{collection-content-By56pLog.js → collection-content-gDh1v6O4.js} +3 -3
- package/dist/{collection-content-By56pLog.js.map → collection-content-gDh1v6O4.js.map} +1 -1
- package/dist/combobox-BEx0vJgF.js +362 -0
- package/dist/combobox-BEx0vJgF.js.map +1 -0
- package/dist/{combobox-Dxo2fAYQ.js → combobox-BwzoXFSG.js} +254 -247
- package/dist/combobox-BwzoXFSG.js.map +1 -0
- package/dist/{command-C25VMRII.js → command-CrlPIL6m.js} +12 -12
- package/dist/command-CrlPIL6m.js.map +1 -0
- package/dist/{comments-DD0DUPwJ.js → comments-Dmpp0YIc.js} +380 -379
- package/dist/comments-Dmpp0YIc.js.map +1 -0
- package/dist/components/base/action-menu/action-menu.d.ts +9 -1
- package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
- package/dist/components/base/cards/card.recipes.d.ts +16 -7
- 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 +11 -7
- 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/checkbox.d.ts +7 -2
- package/dist/components/base/choice-inputs/choice-types.d.ts +1 -1
- package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
- package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
- package/dist/components/base/combobox/index.d.ts +4 -2
- package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
- package/dist/components/base/forms/form-field.d.ts +5 -3
- package/dist/components/base/forms/form-sizing.d.ts +7 -7
- package/dist/components/base/forms/index.d.ts +1 -0
- package/dist/components/base/forms/server-errors.d.ts +16 -0
- package/dist/components/base/forms/workflow.d.ts +11 -2
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -0
- package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
- package/dist/components/base/navigation/dropdown-menu.d.ts +1 -1
- 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 +13 -4
- 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/sheet/sheet.d.ts +2 -0
- package/dist/components/base/sidebar/index.d.ts +1 -1
- package/dist/components/base/sidebar/sidebar.d.ts +27 -5
- package/dist/components/base/structure/composition.recipes.d.ts +17 -0
- package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
- package/dist/components/base/text-inputs/input.d.ts +4 -2
- package/dist/components/base/text-inputs/textarea.d.ts +4 -2
- package/dist/components/base/toaster/index.d.ts +1 -0
- package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
- package/dist/components/base/value-inputs/slider.d.ts +5 -1
- package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
- package/dist/components/blocks/ai/ai-file-tree/types.d.ts +1 -1
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +3 -1
- package/dist/components/blocks/ai/ai.strings.d.ts +2 -0
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
- 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/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/features/activities/activities.types.d.ts +8 -2
- 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/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/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 +3 -0
- package/dist/components/features/filters/partials/filter-editor-header.d.ts +16 -0
- package/dist/components/features/filters/partials/filter-popover-content.d.ts +1 -1
- package/dist/components/features/filters/partials/nested-filter-options.d.ts +21 -0
- package/dist/components/features/filters/partials/regular-filter-content.d.ts +2 -1
- package/dist/components/features/filters/utils/filter-utils.d.ts +21 -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/media-library.strings.d.ts +2 -0
- package/dist/components/features/media-library/media-library.types.d.ts +14 -4
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +1 -1
- 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 +43 -6
- package/dist/components/features/resource/resource.d.ts +5 -1
- package/dist/components/features/resource/resource.types.d.ts +12 -1
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +12 -2
- package/dist/components/features/table/partials/resource-cell.d.ts +22 -5
- package/dist/components/features/table/table.types.d.ts +1 -1
- 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 +6 -6
- package/dist/components/layout/navigation/section-nav/section-nav.d.ts +5 -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 +9 -2
- 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 +36 -0
- package/dist/components/layout/sidebar/sidebar.context.d.ts +5 -7
- package/dist/components/layout/sidebar/sidebar.types.d.ts +48 -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/typography/text.styles.d.ts +26 -1
- 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/composition.recipes-COdiFhxB.js +19 -0
- package/dist/composition.recipes-COdiFhxB.js.map +1 -0
- package/dist/containers-CIxwbZt5.js +112 -0
- package/dist/containers-CIxwbZt5.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-ClBuk_UK.js → copyable-DIznBqiT.js} +7 -7
- package/dist/{copyable-ClBuk_UK.js.map → copyable-DIznBqiT.js.map} +1 -1
- package/dist/{data-display-DT_khPl_.js → data-display-BdgCAw8T.js} +277 -285
- package/dist/data-display-BdgCAw8T.js.map +1 -0
- package/dist/{date-DCrsDTZc.js → date-Cq8ioE4o.js} +5 -5
- package/dist/{date-DCrsDTZc.js.map → date-Cq8ioE4o.js.map} +1 -1
- package/dist/{date-picker-B2K3ucWn.js → date-picker-RlIzKom_.js} +501 -480
- package/dist/date-picker-RlIzKom_.js.map +1 -0
- package/dist/date-pickers-DY-CpXS1.js +179 -0
- package/dist/date-pickers-DY-CpXS1.js.map +1 -0
- package/dist/{display-hAc1HjpI.js → display-KsZLw9Ov.js} +9 -9
- package/dist/{display-hAc1HjpI.js.map → display-KsZLw9Ov.js.map} +1 -1
- package/dist/dropdown-menu-CLs8Lihj.js +194 -0
- package/dist/dropdown-menu-CLs8Lihj.js.map +1 -0
- package/dist/features/activities.js +302 -253
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +15 -14
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +222 -220
- 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 +249 -249
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +264 -269
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +167 -138
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +6 -7
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +269 -260
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +827 -777
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +1246 -1169
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +13 -13
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +127 -123
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +254 -253
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +95 -96
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/{feedback-BYIhtitP.js → feedback-Dm4izqFn.js} +81 -80
- package/dist/feedback-Dm4izqFn.js.map +1 -0
- package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
- package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
- package/dist/{filters-DJVAveHA.js → filters-DzgSJpMK.js} +693 -645
- package/dist/filters-DzgSJpMK.js.map +1 -0
- package/dist/{form-field-CwH9y77i.js → form-field-BriWAXyg.js} +14 -8
- package/dist/form-field-BriWAXyg.js.map +1 -0
- package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-Bs2qFUeE.js} +4 -4
- package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
- package/dist/forms-C0RGnJTe.js +216 -0
- package/dist/forms-C0RGnJTe.js.map +1 -0
- package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-DIhghX1Q.js} +295 -291
- package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
- package/dist/{header-BSfIEWbI.js → header-DMMxG__r.js} +67 -63
- package/dist/header-DMMxG__r.js.map +1 -0
- package/dist/header.recipes-BigdJjw1.js +6 -0
- package/dist/header.recipes-BigdJjw1.js.map +1 -0
- package/dist/hooks/useFormErrors.d.ts +1 -1
- package/dist/{hooks-ClH9thn4.js → hooks-DB6CJ4MR.js} +26 -14
- package/dist/hooks-DB6CJ4MR.js.map +1 -0
- package/dist/{icon-badge-DYKIwvOV.js → icon-badge-DZF-YjQp.js} +4 -4
- package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
- package/dist/index.js +4 -5
- package/dist/input-CvyDQlY7.js +289 -0
- package/dist/input-CvyDQlY7.js.map +1 -0
- package/dist/input-DMBwAZmr.js +21 -0
- package/dist/input-DMBwAZmr.js.map +1 -0
- package/dist/item-DjCcM18E.js +277 -0
- package/dist/item-DjCcM18E.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 +11 -11
- package/dist/lib/affordance-geometry.generated.d.ts +41 -35
- package/dist/lib/control-group-recipes.d.ts +5 -5
- package/dist/lib/field-affordance-recipes.d.ts +2 -2
- 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/token-merge.generated.d.ts +13 -10
- package/dist/lib/ui-provider/types.d.ts +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/map-demo-tile.svg +1 -1
- package/dist/{media-gallery-3zIVLMWH.js → media-gallery-C-vChPmE.js} +6 -6
- package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-C-vChPmE.js.map} +1 -1
- package/dist/{mentions-CGlEJ15c.js → mentions-0_4nWuI-.js} +10 -10
- package/dist/{mentions-CGlEJ15c.js.map → mentions-0_4nWuI-.js.map} +1 -1
- package/dist/{message-DZ_ruyUV.js → message-g8p7eVtN.js} +7 -7
- package/dist/message-g8p7eVtN.js.map +1 -0
- package/dist/metadata-list-C3MkU-Om.js +443 -0
- package/dist/metadata-list-C3MkU-Om.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-C90-oQFq.js +255 -0
- package/dist/navigation-C90-oQFq.js.map +1 -0
- package/dist/{navigation-BzhHI3lo.js → navigation-DaRjthVk.js} +101 -82
- package/dist/navigation-DaRjthVk.js.map +1 -0
- package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-BGVLvU_O.js} +9 -9
- package/dist/navigation-row-recipes-BGVLvU_O.js.map +1 -0
- package/dist/{number-DbV1Dija.js → number-CRU3kGuk.js} +5 -5
- package/dist/{number-DbV1Dija.js.map → number-CRU3kGuk.js.map} +1 -1
- package/dist/overflow-tab-bar-IVFVQFV6.js +172 -0
- package/dist/overflow-tab-bar-IVFVQFV6.js.map +1 -0
- package/dist/overlays-BSgCtM2v.js +1013 -0
- package/dist/overlays-BSgCtM2v.js.map +1 -0
- package/dist/page-DUUKDAjo.js +331 -0
- package/dist/page-DUUKDAjo.js.map +1 -0
- package/dist/page-header-commands-7P3sfE9u.js +193 -0
- package/dist/page-header-commands-7P3sfE9u.js.map +1 -0
- package/dist/{pagination-BL25hu2s.js → pagination-CgCjElfu.js} +7 -7
- package/dist/{pagination-BL25hu2s.js.map → pagination-CgCjElfu.js.map} +1 -1
- package/dist/popover-B85RenIl.js +201 -0
- package/dist/popover-B85RenIl.js.map +1 -0
- package/dist/{popover-menu-Cn9rUkdc.js → popover-menu-DlnQ2zlR.js} +7 -7
- package/dist/{popover-menu-Cn9rUkdc.js.map → popover-menu-DlnQ2zlR.js.map} +1 -1
- package/dist/{popover.recipes-D3j8R8Yp.js → popover.recipes-DdiEp0rd.js} +18 -11
- package/dist/popover.recipes-DdiEp0rd.js.map +1 -0
- package/dist/portal-recipes-BpsV_iRw.js +9 -0
- package/dist/portal-recipes-BpsV_iRw.js.map +1 -0
- package/dist/{primitives-BFK08r9M.js → primitives-ByWgGUgt.js} +6 -6
- package/dist/{primitives-BFK08r9M.js.map → primitives-ByWgGUgt.js.map} +1 -1
- package/dist/primitives.js +4 -4
- package/dist/{progress-B1VnCT0K.js → progress-BJhQP9WX.js} +9 -9
- package/dist/{progress-B1VnCT0K.js.map → progress-BJhQP9WX.js.map} +1 -1
- package/dist/{receipt-BVSOH3Xo.js → receipt-tOc7B3hw.js} +7 -7
- package/dist/receipt-tOc7B3hw.js.map +1 -0
- package/dist/{rich-text-GOUyKQ-s.js → rich-text-Dth5E882.js} +4 -4
- package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-Dth5E882.js.map} +1 -1
- package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-C1fOjBTd.js} +429 -430
- package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
- package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-laT3tpBT.js} +33 -29
- package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
- package/dist/{scroll-area-DcI-M1UT.js → scroll-area-B0dB2cBi.js} +2 -2
- package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
- package/dist/{separator-Bom7NsGO.js → separator-Bb17I4pu.js} +2 -2
- package/dist/{separator-Bom7NsGO.js.map → separator-Bb17I4pu.js.map} +1 -1
- package/dist/{separator-BDV-Y648.js → separator-Ct_WSWTJ.js} +3 -3
- package/dist/{separator-BDV-Y648.js.map → separator-Ct_WSWTJ.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/settings-Bar5wiSo.js +167 -0
- package/dist/settings-Bar5wiSo.js.map +1 -0
- package/dist/sheet-BGPERY55.js +250 -0
- package/dist/sheet-BGPERY55.js.map +1 -0
- package/dist/sidebar-D-JYMMbY.js +686 -0
- package/dist/sidebar-D-JYMMbY.js.map +1 -0
- package/dist/sidebar-f9gRWXIR.js +1001 -0
- package/dist/sidebar-f9gRWXIR.js.map +1 -0
- package/dist/skeleton-BapcJd9C.js +265 -0
- package/dist/skeleton-BapcJd9C.js.map +1 -0
- package/dist/smart-card-CW0hjetE.js +617 -0
- package/dist/smart-card-CW0hjetE.js.map +1 -0
- package/dist/{structure-BmisBK-3.js → structure-DuxKl954.js} +3 -3
- package/dist/{structure-BmisBK-3.js.map → structure-DuxKl954.js.map} +1 -1
- package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
- package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{table-DsfzoUia.js → table-B4TE7iOV.js} +3 -3
- package/dist/{table-DsfzoUia.js.map → table-B4TE7iOV.js.map} +1 -1
- package/dist/{table-BweFy_P9.js → table-CFOWY9pQ.js} +394 -388
- package/dist/table-CFOWY9pQ.js.map +1 -0
- package/dist/{tabs-CDocW5D1.js → tabs-e7ko9S2o.js} +11 -11
- package/dist/tabs-e7ko9S2o.js.map +1 -0
- package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-B1culiSK.js} +107 -104
- package/dist/text-inputs-B1culiSK.js.map +1 -0
- package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
- package/dist/text.styles-B64My8RZ.js.map +1 -0
- package/dist/theme.css +192 -149
- package/dist/{timelines-CwM_9IhD.js → timelines-D3Sl9ueq.js} +13 -12
- package/dist/timelines-D3Sl9ueq.js.map +1 -0
- package/dist/tooltip-8wz5S_Zr.js +113 -0
- package/dist/tooltip-8wz5S_Zr.js.map +1 -0
- package/dist/{tree-WnKQzwbq.js → tree-CzUJHnFs.js} +9 -9
- package/dist/{tree-WnKQzwbq.js.map → tree-CzUJHnFs.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-BQnine1k.js +117 -0
- package/dist/typography-BQnine1k.js.map +1 -0
- 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-CXyxmQBP.js → upload-BOW6U2tI.js} +25 -24
- package/dist/upload-BOW6U2tI.js.map +1 -0
- package/dist/{upload-queue-Boscubn9.js → upload-queue-qUXn1ykN.js} +16 -14
- package/dist/upload-queue-qUXn1ykN.js.map +1 -0
- package/dist/{usage-card-BhO5eqkX.js → usage-card-BeSLY0i0.js} +145 -137
- package/dist/usage-card-BeSLY0i0.js.map +1 -0
- package/dist/{utils-BRhFDwuU.js → utils-B6kKb8jB.js} +303 -144
- package/dist/utils-B6kKb8jB.js.map +1 -0
- package/dist/value-inputs-skdVB2zh.js +980 -0
- package/dist/value-inputs-skdVB2zh.js.map +1 -0
- package/dist/{value-typography-BP8OG6h5.js → value-typography-uAmWUAL1.js} +2 -2
- package/dist/{value-typography-BP8OG6h5.js.map → value-typography-uAmWUAL1.js.map} +1 -1
- package/dist/workspace-DHeHv0qw.js +411 -0
- package/dist/workspace-DHeHv0qw.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +15 -129
- package/docs/consumer-skill/agents/themelia-ui-designer.md +96 -0
- package/docs/consumer-skill/examples/app-layout.tsx +74 -13
- package/docs/consumer-skill/examples/authentication.tsx +77 -0
- 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 +30 -38
- 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 +88 -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-bindings.tsx +86 -0
- package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
- package/docs/consumer-skill/examples/rhf-overlay-form.tsx +105 -0
- package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
- package/docs/consumer-skill/examples/token-domain-structure.tsx +68 -0
- package/docs/consumer-skill/references/agents-md.md +23 -11
- package/docs/consumer-skill/references/analytics.md +18 -1
- package/docs/consumer-skill/references/authentication.md +42 -0
- package/docs/consumer-skill/references/commerce-composition.md +97 -0
- package/docs/consumer-skill/references/component-contracts.json +325201 -0
- package/docs/consumer-skill/references/composition-mapping.md +106 -0
- package/docs/consumer-skill/references/composition.md +198 -46
- 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 +43 -9
- package/docs/consumer-skill/references/discovery.md +109 -8
- package/docs/consumer-skill/references/domain-structures.md +124 -0
- package/docs/consumer-skill/references/installation.md +51 -36
- package/docs/consumer-skill/references/integration.md +41 -2
- package/docs/consumer-skill/references/product-composition.md +94 -0
- package/docs/consumer-skill/references/public-api.json +4390 -475
- package/docs/consumer-skill/references/review.md +47 -5
- package/docs/consumer-skill/references/rhf-workflows.md +93 -0
- package/docs/consumer-skill/references/screen-archetypes.md +34 -0
- package/docs/consumer-skill/references/screen-decisions.md +126 -0
- package/docs/consumer-skill/references/theming.md +25 -27
- package/docs/consumer-skill/references/tokens.json +20 -11
- 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 +9 -2
- package/docs/consumer-skill/scripts/composition-policy.mjs +39 -3
- package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
- package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
- package/docs/consumer-skill/scripts/composition.mjs +254 -0
- package/docs/consumer-skill/scripts/discovery.mjs +96 -10
- package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
- package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
- package/docs/consumer-skill/scripts/inspection.mjs +193 -0
- package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
- package/docs/consumer-skill/scripts/setup-skills.mjs +111 -0
- package/docs/consumer-skill/scripts/surface-policy.mjs +5 -5
- package/docs/consumer-skills/themelia-components/SKILL.md +31 -0
- package/docs/consumer-skills/themelia-composition/SKILL.md +34 -0
- package/docs/consumer-skills/themelia-design/SKILL.md +55 -0
- package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
- package/docs/consumer-skills/themelia-foundation/SKILL.md +15 -0
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +42 -0
- package/package.json +4 -2
- package/templates/README.md +39 -0
- package/templates/admin-shell-template.tsx +382 -0
- package/templates/analytics-operations-template.tsx +376 -0
- package/templates/customers-template.tsx +509 -0
- package/templates/index.ts +29 -0
- package/templates/orders-template.tsx +1102 -0
- package/templates/products-template.tsx +834 -0
- package/templates/user-permissions-template.tsx +450 -0
- package/dist/accordion-Cjb6sx0G.js.map +0 -1
- package/dist/action-menu-CllU52Mm.js +0 -280
- package/dist/action-menu-CllU52Mm.js.map +0 -1
- package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
- package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
- package/dist/app-shell-C4FhvCqF.js +0 -236
- package/dist/app-shell-C4FhvCqF.js.map +0 -1
- package/dist/auth-BGua8ouh.js.map +0 -1
- package/dist/avatar-DAPlDvhJ.js.map +0 -1
- package/dist/base/cascader.js.map +0 -1
- package/dist/batch-action-bar-DnUJ21NQ.js.map +0 -1
- package/dist/button-DVzspB_G.js.map +0 -1
- package/dist/buttons-DPZekJFu.js.map +0 -1
- package/dist/cards-BaBZR-AU.js +0 -68
- package/dist/cards-BaBZR-AU.js.map +0 -1
- package/dist/chart-ZOYyK2xG.js +0 -155
- package/dist/chart-ZOYyK2xG.js.map +0 -1
- package/dist/checkbox-AWIhNhmo.js.map +0 -1
- package/dist/choice-inputs-CNHvARCJ.js +0 -770
- package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
- package/dist/code-block-DeneBJR_.js.map +0 -1
- package/dist/combobox-DaHESuiL.js +0 -355
- package/dist/combobox-DaHESuiL.js.map +0 -1
- package/dist/combobox-Dxo2fAYQ.js.map +0 -1
- package/dist/command-C25VMRII.js.map +0 -1
- package/dist/comments-DD0DUPwJ.js.map +0 -1
- package/dist/containers-Mu1LMGV1.js +0 -103
- package/dist/containers-Mu1LMGV1.js.map +0 -1
- package/dist/control-group-recipes-DBXmfh2E.js.map +0 -1
- package/dist/data-display-DT_khPl_.js.map +0 -1
- package/dist/date-picker-B2K3ucWn.js.map +0 -1
- package/dist/date-pickers-Ds8gLaoP.js +0 -175
- package/dist/date-pickers-Ds8gLaoP.js.map +0 -1
- package/dist/dropdown-menu-Cl4X7L5S.js +0 -193
- package/dist/dropdown-menu-Cl4X7L5S.js.map +0 -1
- package/dist/feedback-BYIhtitP.js.map +0 -1
- package/dist/field-affordance-recipes-DZhnIL_Y.js.map +0 -1
- package/dist/filters-DJVAveHA.js.map +0 -1
- package/dist/form-field-CwH9y77i.js.map +0 -1
- package/dist/form-sizing-BdP_Mf5p.js.map +0 -1
- package/dist/forms-B9G_xwzi.js +0 -194
- package/dist/forms-B9G_xwzi.js.map +0 -1
- package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
- package/dist/header-BSfIEWbI.js.map +0 -1
- package/dist/hooks-ClH9thn4.js.map +0 -1
- package/dist/input-CZw8iU99.js +0 -21
- package/dist/input-CZw8iU99.js.map +0 -1
- package/dist/input-DQdEd0YD.js +0 -263
- package/dist/input-DQdEd0YD.js.map +0 -1
- package/dist/item-K5_ghvze.js +0 -275
- package/dist/item-K5_ghvze.js.map +0 -1
- package/dist/message-DZ_ruyUV.js.map +0 -1
- package/dist/metadata-list-8N16ZMW_.js +0 -405
- package/dist/metadata-list-8N16ZMW_.js.map +0 -1
- package/dist/motion-recipes-ChBg4HBq.js.map +0 -1
- package/dist/navigation-Bnotn4AQ.js +0 -145
- package/dist/navigation-Bnotn4AQ.js.map +0 -1
- package/dist/navigation-BzhHI3lo.js.map +0 -1
- package/dist/navigation-row-recipes-BFLCk_Aq.js.map +0 -1
- package/dist/overflow-tab-bar-CWY7Nogn.js +0 -282
- package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
- package/dist/overlays-tMkF-VAN.js +0 -1003
- package/dist/overlays-tMkF-VAN.js.map +0 -1
- package/dist/page-CL9YeH_V.js +0 -224
- package/dist/page-CL9YeH_V.js.map +0 -1
- package/dist/page-header-commands-DOb6WsfD.js +0 -126
- package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
- package/dist/popover-gnTOhbFM.js +0 -198
- package/dist/popover-gnTOhbFM.js.map +0 -1
- package/dist/popover.recipes-D3j8R8Yp.js.map +0 -1
- package/dist/receipt-BVSOH3Xo.js.map +0 -1
- package/dist/rich-text-editor-cRLC-eBK.js.map +0 -1
- package/dist/rich-text-editor-toolbar-DfXg0-VC.js.map +0 -1
- package/dist/settings-ybnjVwbd.js +0 -171
- package/dist/settings-ybnjVwbd.js.map +0 -1
- package/dist/sheet-ijlsjq-n.js +0 -213
- package/dist/sheet-ijlsjq-n.js.map +0 -1
- package/dist/sidebar-Db6gkh3U.js +0 -619
- package/dist/sidebar-Db6gkh3U.js.map +0 -1
- package/dist/sidebar-DkTO4VTO.js +0 -512
- package/dist/sidebar-DkTO4VTO.js.map +0 -1
- package/dist/skeleton-Byjnt7qr.js +0 -264
- package/dist/skeleton-Byjnt7qr.js.map +0 -1
- package/dist/smart-card-DiC5aac3.js +0 -604
- package/dist/smart-card-DiC5aac3.js.map +0 -1
- package/dist/table-BweFy_P9.js.map +0 -1
- package/dist/tabs-CDocW5D1.js.map +0 -1
- package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
- package/dist/text.styles-g4He6UIW.js.map +0 -1
- package/dist/theme-scope-BJ6eE2xt.js +0 -50
- package/dist/theme-scope-BJ6eE2xt.js.map +0 -1
- package/dist/timelines-CwM_9IhD.js.map +0 -1
- package/dist/tooltip-yiRJUFjp.js +0 -111
- package/dist/tooltip-yiRJUFjp.js.map +0 -1
- package/dist/typography-UTnveOEy.js +0 -117
- package/dist/typography-UTnveOEy.js.map +0 -1
- package/dist/ui-provider-C_U0Xma4.js +0 -136
- package/dist/ui-provider-C_U0Xma4.js.map +0 -1
- package/dist/upload-CXyxmQBP.js.map +0 -1
- package/dist/upload-queue-Boscubn9.js.map +0 -1
- package/dist/usage-card-BhO5eqkX.js.map +0 -1
- package/dist/use-mobile-vaLKwgyf.js +0 -15
- package/dist/use-mobile-vaLKwgyf.js.map +0 -1
- package/dist/utils-BRhFDwuU.js.map +0 -1
- package/dist/value-inputs-TaX4OjNk.js +0 -963
- package/dist/value-inputs-TaX4OjNk.js.map +0 -1
- package/dist/workspace-B-OEm3Kf.js +0 -408
- package/dist/workspace-B-OEm3Kf.js.map +0 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# App-owned composites
|
|
2
|
+
|
|
3
|
+
Use this when the product's data needs a particular presentation, when the app
|
|
4
|
+
needs a reusable subject, or when several existing owners should cooperate.
|
|
5
|
+
Start from the user's decision and the data relationships, then choose the seam.
|
|
6
|
+
The four skills cooperate: design decides what the view shows and judges the
|
|
7
|
+
rendered result, components verifies APIs, composition assigns owners, and
|
|
8
|
+
tokenization supplies shared visual roles. A new app component does not imply a
|
|
9
|
+
new library component or token.
|
|
10
|
+
|
|
11
|
+
## Compare capabilities before constructing the subject
|
|
12
|
+
|
|
13
|
+
Break the screen into task responsibilities and search each one, including its
|
|
14
|
+
domain nouns. Finding Card, Input and Grid does not finish discovery of a product
|
|
15
|
+
editor's options, variant workflow or media gallery. For each substantial region,
|
|
16
|
+
compare the fitting feature/block and its public parts: accepted data, state and
|
|
17
|
+
callbacks, content/render seams, presentation fit, and what remains app-owned.
|
|
18
|
+
A few working notes suffice; no permission gate or large inventory is needed.
|
|
19
|
+
|
|
20
|
+
Use the existing owner when it fits; extend its supported content/render seam
|
|
21
|
+
when the data needs extra structure. Check a compound part before replacing a
|
|
22
|
+
convenience wrapper. Custom domain JSX remains a first-class choice for a
|
|
23
|
+
comparison, grouping or relationship, but it is not a reason to recreate an
|
|
24
|
+
existing option editor, gallery selection/reordering, menu or focus lifecycle.
|
|
25
|
+
If an owner seems unsuitable, inspect the exact limitation and its callers.
|
|
26
|
+
Do not mistake incorrect controlled-state wiring for missing support.
|
|
27
|
+
|
|
28
|
+
The [product capability map](product-composition.md) demonstrates this comparison:
|
|
29
|
+
product options and their generated variant rows, editing one variant, a local
|
|
30
|
+
File[] gallery and already-attached asset records are distinct responsibilities.
|
|
31
|
+
Its examples route to actual public APIs rather than a handcrafted photo grid
|
|
32
|
+
or a new option-pill implementation. Other domains need the same task-specific
|
|
33
|
+
discovery, not the same product layout.
|
|
34
|
+
|
|
35
|
+
## Shape the subject from the data
|
|
36
|
+
|
|
37
|
+
Inspect real representative records before choosing a template. Notice which
|
|
38
|
+
facts interact, which values reconcile, where there are stages or dependencies,
|
|
39
|
+
and which exceptional states change the next action. Choose an information
|
|
40
|
+
structure that lets the user understand those relationships in place.
|
|
41
|
+
|
|
42
|
+
| Data and user decision | Useful subject structure |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| A supplier's contact details and one edit command | An existing facts/contact block or MetadataList; the simple subject needs no invented workflow |
|
|
45
|
+
| Goods split across warehouses, partially allocated stock, payment coverage and a release hold | A release-readiness subject: affected goods and quantities grouped by warehouse, shortages beside those lines, payment/hold consequences beside the release command |
|
|
46
|
+
| Several payments allocated to invoices, a disputed amount and unapplied credit | An account-reconciliation subject: allocation provenance, collectible/disputed/future balances and the calculation connecting them; keep unallocated credit distinct until an allocation rule applies |
|
|
47
|
+
| Agreed invoice lines plus a service-specific exception | Keep InvoiceLineItems for the invoice subject and add an app-owned exception/decision region through the surrounding composition |
|
|
48
|
+
|
|
49
|
+
These are examples of relationships, not mandatory component shapes. The
|
|
50
|
+
business rules must establish what can ship, what is collectible or which
|
|
51
|
+
action is permitted. Missing valuation, allocation or policy is unknown; do
|
|
52
|
+
not infer it from a total or manufacture a precise decision.
|
|
53
|
+
|
|
54
|
+
Choose among an existing block, an app-owned subject made from smaller parts,
|
|
55
|
+
or a combination. The match includes meaning, emphasis and relationships as
|
|
56
|
+
well as prop coverage. A block accepting the fields does not establish that
|
|
57
|
+
its arrangement communicates the task well.
|
|
58
|
+
|
|
59
|
+
An app-owned component can combine Button, Badge, Text, value primitives,
|
|
60
|
+
Stack/Grid and ordinary JSX such as a definition list, grouped list or
|
|
61
|
+
comparison tracks. App-owned domain functions or authoritative server results
|
|
62
|
+
supply calculations and eligibility; the subject presents those results with
|
|
63
|
+
their explanations and related evidence. Its caller can supply
|
|
64
|
+
permissions, callbacks and transport; the public controls retain their
|
|
65
|
+
keyboard, loading, focus and disabled behavior. Use the shared typography,
|
|
66
|
+
spacing, color and surface roles throughout the custom content.
|
|
67
|
+
|
|
68
|
+
For example, a `ReleaseReadiness` app component can present the unshipped
|
|
69
|
+
quantity, allocated quantity and shortage for each product, then explain which
|
|
70
|
+
hold blocks release. It can reuse a customer block elsewhere and the existing
|
|
71
|
+
line-item table for price reconciliation. A new name around unchanged generic
|
|
72
|
+
cards adds no information structure; the useful change is making the
|
|
73
|
+
relationship and its operational consequence visible.
|
|
74
|
+
|
|
75
|
+
Extract a domain component when it gives a coherent subject, useful local
|
|
76
|
+
contract or reuse. Local JSX inside a page is also valid. Neither a new file
|
|
77
|
+
nor custom code is required for every region. After composing, check whether
|
|
78
|
+
the user can make the intended decision without mentally joining disconnected
|
|
79
|
+
facts, and whether the same arrangement would still make sense with a
|
|
80
|
+
different record or exception.
|
|
81
|
+
|
|
82
|
+
## Check domain coverage
|
|
83
|
+
|
|
84
|
+
A route title and a fact summary do not establish coverage of an entity. Inspect
|
|
85
|
+
the brief, data types, representative records, related entities and existing app
|
|
86
|
+
flows for the parts users actually work with. Separate the parts present in the
|
|
87
|
+
model, those required by the task but missing, and those outside the task.
|
|
88
|
+
|
|
89
|
+
| Entity | Inspect when relevant | What changes the presentation |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| Order | Line items, purchased variant/SKU and selected options, quantities, price adjustments/tax, payment records, fulfillment groups, cancellations/refunds | Item identity and options stay with the purchased line; partial fulfillment and refunds stay with affected quantities; totals reconcile separately from operational readiness |
|
|
92
|
+
| Product | Option groups and values, variant combinations, per-variant SKU/price/inventory/availability/media, publishing and product type | Option definitions differ from sellable variants; use a variant comparison/editor when combinations matter, with shared defaults and exceptions made explicit |
|
|
93
|
+
| Invoice/account | Line items, due dates, payments and allocations, credits/disputes, remaining balance and collection history | Trace the remaining collectible amount and its provenance instead of showing disconnected totals or treating payment state as the complete history |
|
|
94
|
+
|
|
95
|
+
Adapt this inspection to the product: digital goods, services, subscriptions and
|
|
96
|
+
simple products have different parts. Do not add warehouses, variants or a refund
|
|
97
|
+
workflow just because another product has them. For relevant missing data, state
|
|
98
|
+
the contract or coverage gap rather than presenting an absent region as complete.
|
|
99
|
+
Inspect existing public domain features and templates: the
|
|
100
|
+
[products template](../../../templates/products-template.tsx) demonstrates
|
|
101
|
+
ProductVariantsManager, ProductVariantEditor and ProductVariantDetails from
|
|
102
|
+
features/products, including option groups and variant-level fields. A feature's
|
|
103
|
+
existence is separate from whether this app actually integrates it.
|
|
104
|
+
|
|
105
|
+
For a requested prototype, use coherent, explicitly mock examples that exercise
|
|
106
|
+
its agreed domain depth: a simple record and representative variants, partial
|
|
107
|
+
states or exceptions. Keep related IDs, selected options, quantities and money
|
|
108
|
+
consistent. Preserve supplied authoritative fixtures; expand an evaluation's
|
|
109
|
+
dataset as an explicit new round so original results remain reproducible.
|
|
110
|
+
For an existing app, inspect its real contracts before adding domain assumptions.
|
|
111
|
+
Report which regions and behaviors were delivered and which remain outside the
|
|
112
|
+
scope or unverified. A rendered generic summary is not evidence of options,
|
|
113
|
+
variant editing, line-level fulfillment or other unimplemented behavior.
|
|
114
|
+
|
|
115
|
+
## Choose owners before JSX
|
|
116
|
+
|
|
117
|
+
| Layer | Owns | Does not imply |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
| Typography | Text/Heading/Label roles; semantic tag and visual size are separate | Every nested label should become a large heading |
|
|
120
|
+
| Primitives | Formatted Money, Date, Number, contact and missing values | Raw unstyled interaction primitives |
|
|
121
|
+
| Base | Accessible controls, disclosure, collection, surface and passive structures | A headless kit whose states need restyling |
|
|
122
|
+
| Layout | App chrome, Page identity/gutters, scrolling and responsive regions | Another Card around every route or another shell inside its children |
|
|
123
|
+
| Blocks | Reusable subject presentation with supported local interactions | A complete transport workflow or an implicit frame |
|
|
124
|
+
| Features | Coordinated business workflow, editing/selection/async lifecycle | Exclusive ownership of all interaction in the package |
|
|
125
|
+
|
|
126
|
+
Stack/Grid/AdaptiveGrid live in base/structure and browse under Foundations.
|
|
127
|
+
Layout sidebar owns application navigation; base/sidebar exposes its lower-level
|
|
128
|
+
anatomy. Prefer AppSidebar for routine grouped/workspace navigation and inspect
|
|
129
|
+
its render slots before reconstructing that behavior. A formatted value, a row
|
|
130
|
+
of record facts and a sidebar are different responsibilities even if all appear
|
|
131
|
+
inside one business panel.
|
|
132
|
+
|
|
133
|
+
Search each responsibility. A fitting feature can own the workflow; a block can
|
|
134
|
+
own its subject; a base component can own local behavior. Use compound parts when
|
|
135
|
+
the convenience wrapper's bounded shape cannot express the requirement. Combine
|
|
136
|
+
those owners into app content after inspecting the relevant API seams.
|
|
137
|
+
The search term is a task responsibility, not necessarily a package layer.
|
|
138
|
+
|
|
139
|
+
Before replacing an existing control, disclosure or workflow implementation,
|
|
140
|
+
identify the behavior it cannot express and verify that limit. Composing a
|
|
141
|
+
domain's content from smaller public parts does not require an API gap; its
|
|
142
|
+
data relationships can justify the shape. For an unfamiliar interactive
|
|
143
|
+
composition, retain a brief source note: selected owner/import,
|
|
144
|
+
needed prop or slot, and the behavior that still belongs to the app. No lengthy
|
|
145
|
+
report is needed for routine known controls.
|
|
146
|
+
|
|
147
|
+
## Disclosure sections
|
|
148
|
+
|
|
149
|
+
For labeled expandable sections, inspect Accordion and its compound parts before
|
|
150
|
+
choosing Card + Collapsible. Custom badges or retained fields are requirements to
|
|
151
|
+
check, not evidence that Accordion cannot work.
|
|
152
|
+
|
|
153
|
+
```sh
|
|
154
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/find-components.mjs "expandable form sections"
|
|
155
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs Accordion --import themelia-react-ui/base/accordion --prop multiple
|
|
156
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs AccordionContent --import themelia-react-ui/base/accordion --prop keepMounted
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
The [editable sections recipe](../examples/editable-sections.tsx) demonstrates
|
|
160
|
+
multiple open panels, a validation badge inside rich trigger content and
|
|
161
|
+
keepMounted on each content panel. SmartAccordion supports badge nodes but does
|
|
162
|
+
not expose keepMounted. Use compound parts for that verified requirement.
|
|
163
|
+
Collapsible remains appropriate for one custom disclosure; independently framed
|
|
164
|
+
objects can legitimately use Card. The app owns form values, validation,
|
|
165
|
+
submission and opening an invalid section before focusing its field.
|
|
166
|
+
|
|
167
|
+
Keep the panel title at the subject heading role. A disclosure trigger owns its
|
|
168
|
+
smaller medium label; custom trigger JSX should inherit that scale rather than
|
|
169
|
+
introducing Card title typography. Use Text's size/type inheritance and medium
|
|
170
|
+
weight for a rich label. Include a text separator between label and badge
|
|
171
|
+
(`{' '}` or an explicitly spaced accessible name); a CSS gap alone can produce
|
|
172
|
+
the accessible name "Business details2 errors". Do not place another button/link inside that trigger.
|
|
173
|
+
Custom content is a real styling seam: a Text child with its own weight can
|
|
174
|
+
override the trigger's inherited type even when the outer component is correct.
|
|
175
|
+
|
|
176
|
+
Preserving a React value alone does not establish mounted DOM. Verify node
|
|
177
|
+
identity and draft retention after closing/reopening, multiple expansion,
|
|
178
|
+
keyboard operation, hidden-field focus, validation badges and submission. The
|
|
179
|
+
recipe does not implement a validation library or persistence.
|
|
180
|
+
|
|
181
|
+
## Token-backed placement and drawing
|
|
182
|
+
|
|
183
|
+
The [assessment comparison recipe](../examples/custom-composition.tsx) combines a
|
|
184
|
+
block's label/value role, Money primitives and wrapping Stack actions. It adds
|
|
185
|
+
no Card, heading, inset or control skin; the host owns those. Its Tailwind grid
|
|
186
|
+
chooses exactly two comparison tracks at the local container breakpoint. That
|
|
187
|
+
breakpoint is product geometry. Prefer AdaptiveGrid when automatic equal tracks
|
|
188
|
+
fit; ordinary viewport Grid props are not container queries.
|
|
189
|
+
|
|
190
|
+
| Need | Use |
|
|
191
|
+
| --- | --- |
|
|
192
|
+
| Peer groups, actions, equal available-width tracks | Stack/Grid/AdaptiveGrid props |
|
|
193
|
+
| A subject's frame/title/body/footer | Card or the selected block's documented surface |
|
|
194
|
+
| App-specific tracks, container queries, alignment, min-width and overflow | Tailwind on the app-owned wrapper |
|
|
195
|
+
| A shared gap/inset in custom markup | Verified gap-space-*, row or surface utility for that responsibility |
|
|
196
|
+
| Text role, formatted value, control or focus behavior | Public typography, primitive or interactive owner |
|
|
197
|
+
| Related components should change together | Supported CSS roots at root/ThemeScope |
|
|
198
|
+
|
|
199
|
+
Token-backed does not mean appropriate everywhere: gap-space-xl can be correct
|
|
200
|
+
between fields yet padding on AccordionContent or a menu can duplicate its
|
|
201
|
+
owner's inset. No second local radius, focus, hover or disabled recipe is needed
|
|
202
|
+
around an existing control. Missing interaction behavior requires an accessible
|
|
203
|
+
owner or a verified additive seam, not a div styled to resemble a control.
|
|
204
|
+
|
|
205
|
+
```sh
|
|
206
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs gap-space-xl
|
|
207
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs --space-scale
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Inspect exact utility spelling and overrideRoot. Derived utilities can be used
|
|
211
|
+
as classes; their CSS aliases are not settings to override or read inside a
|
|
212
|
+
scoped calc. A genuinely app-owned formula uses canonical roots and scales
|
|
213
|
+
exactly once. Semantic colors pair surface/foreground (card/card-foreground,
|
|
214
|
+
sidebar/sidebar-foreground); status uses Badge/Alert tones. The lookup does not
|
|
215
|
+
index semantic color values: follow its theme stylesheet/reference reads.
|
|
216
|
+
|
|
217
|
+
Shipped component CSS and app-authored utility compilation are different. Follow
|
|
218
|
+
[the Tailwind setup](theming.md) before adding classes: a utility in an app's
|
|
219
|
+
source must be generated by its Tailwind build. Package cn supports the shipped
|
|
220
|
+
vocabulary; app-only aliases need the app's merge configuration. Use supported
|
|
221
|
+
public slots/className rather than private imports, DOM descendants or copied
|
|
222
|
+
component recipes.
|
|
223
|
+
|
|
224
|
+
## Commerce lines and financial summaries
|
|
225
|
+
|
|
226
|
+
Match the line's meaning before choosing its presentation. `OrderLineItem` from
|
|
227
|
+
`themelia-react-ui/blocks/commerce` keeps a sold product's selected options
|
|
228
|
+
(`variantTitle`), `sku`, `properties`, unit price, quantity and passed line total
|
|
229
|
+
together. Compose `SummaryPanel` with `AmountRow` beneath the goods when the
|
|
230
|
+
subject also needs shipping, tax or a grand total. `AmountRow` accepts an already
|
|
231
|
+
formatted `amount`; `total` sets emphasis and `rollup` draws the rule above the
|
|
232
|
+
financial grand total. The app owns calculations and the surrounding Card.
|
|
233
|
+
|
|
234
|
+
`InvoiceLineItems` from that same public import fits an invoice's description,
|
|
235
|
+
quantity, unit-price and line-total grid. Its concise default adapts to narrow
|
|
236
|
+
containers and can compute a subtotal/tax/total footer from the supplied line
|
|
237
|
+
totals and tax ratio. Pass `footerRows` for authoritative custom amounts. Typed
|
|
238
|
+
`columns` replace the default grid and narrow layout; each `width` is a CSS grid
|
|
239
|
+
track value, such as `minmax(0, 1fr)`, and each `cell` owns its custom content.
|
|
240
|
+
|
|
241
|
+
The [commerce lines recipe](../examples/commerce-lines.tsx) shows both choices:
|
|
242
|
+
`SoldProductWithSummary` keeps purchased identity and financial rows together;
|
|
243
|
+
`CustomServiceInvoice` uses two columns with quantity × unit price below the
|
|
244
|
+
service description. It uses public Text/Stack and Number/Money primitives
|
|
245
|
+
instead of styling InvoiceLineItems descendants. Its custom footer gives normal
|
|
246
|
+
Money values `weight="regular"` and the financial total `weight="bold"`.
|
|
247
|
+
`emphasis="total"` controls the footer label, plain-text value and top spacing;
|
|
248
|
+
a React-node value retains its own typography. Select the seam that fits the
|
|
249
|
+
record, then inspect representative narrow/wide output before changing shared
|
|
250
|
+
defaults or imposing the same arrangement on every invoice or order.
|
|
251
|
+
|
|
252
|
+
## Validate the chosen seam
|
|
253
|
+
|
|
254
|
+
Check the exact public types and existing source checker, then verify the app.
|
|
255
|
+
Inspect narrow/wide parent widths, both themes, enlarged type and independent
|
|
256
|
+
spacing/density settings. Open a real menu or picker inside the scoped theme;
|
|
257
|
+
a themed trigger alone cannot establish portal inheritance. Exercise local
|
|
258
|
+
state, dismissal/focus, validation and asynchronous paths that the chosen
|
|
259
|
+
composition uses. Keep source, appearance and interaction evidence separate;
|
|
260
|
+
an advisory mapper result or a syntactically valid class list is not visual
|
|
261
|
+
acceptance.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Read the data before the layout
|
|
2
|
+
|
|
3
|
+
Use before designing or redesigning a view. A layout chosen before the records
|
|
4
|
+
are read turns every field into an equally weighted box. Read four records
|
|
5
|
+
before any JSX: a typical one, the largest, an exception and an empty one. Read
|
|
6
|
+
records, not only the schema: a schema lists every field, while records show
|
|
7
|
+
which few vary, which repeat and which change what the user does.
|
|
8
|
+
|
|
9
|
+
## What to read
|
|
10
|
+
|
|
11
|
+
| Read | Ask | It decides |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| Subject and cardinality | What is the subject? How many children does a typical and a large one have: one line or forty, three variants or sixty? | List, table or grid; whether children need search, paging or a summary line |
|
|
14
|
+
| Ranges and outliers | What are the minimum, typical and maximum of each number? Which records sit far from typical? | Format, column width, default sort and whether an outlier earns emphasis |
|
|
15
|
+
| State frequency | Which states occur, how often, and which one needs action? | Which states take a tone, which collapse into "nothing outstanding", whether zero counters appear at all |
|
|
16
|
+
| Time | Is it a series (values at intervals) or events (things that happened)? | Series become a trend with a stated period and baseline; events become a timeline or history |
|
|
17
|
+
| Relationships | Which facts only make sense together: a shortage and its line, a refund and its payment, a price and its variant? | Adjacency. These stay in one subject and never split across separate cards |
|
|
18
|
+
| Missing, not applicable, zero | Is a value unknown, irrelevant to this record, or a real zero? | "Not set" versus `0`; a not-applicable row is omitted, not printed empty |
|
|
19
|
+
| Units and precision | Currency and minor units, percentage base, whole quantities | The value primitive, its precision and tabular alignment |
|
|
20
|
+
| Text length | Longest names, translations, identifiers | Wrapping, truncation with full text available, track widths |
|
|
21
|
+
|
|
22
|
+
## Find the decision
|
|
23
|
+
|
|
24
|
+
Name who looks at the screen, what they decide or do next, and how often. An
|
|
25
|
+
operator working a queue scans many records for exceptions and acts on one. A
|
|
26
|
+
manager opening an overview wants to know whether things are on track and where
|
|
27
|
+
to look. A catalogue editor configures structure that later sales depend on. The
|
|
28
|
+
same records produce different views for each; write the one you are designing
|
|
29
|
+
for.
|
|
30
|
+
|
|
31
|
+
## Questions per data shape
|
|
32
|
+
|
|
33
|
+
- **One figure.** Compared with what: the previous period, a target, a limit? A
|
|
34
|
+
figure without a baseline cannot be judged. If no honest baseline exists, say
|
|
35
|
+
so instead of inventing a trend.
|
|
36
|
+
- **A series.** Is the shape the message (a dip, a ramp, seasonality) or only
|
|
37
|
+
the latest value? Do the series period and the comparison period match?
|
|
38
|
+
- **A collection.** Which column would the user sort by first? Which rows need
|
|
39
|
+
attention, and how does a row show it? What identifies a row, and what lets the
|
|
40
|
+
user decide about it without opening it?
|
|
41
|
+
- **A record.** What state is it in now, what blocks it, and what is the next
|
|
42
|
+
action? Which facts are evidence and which drive the action?
|
|
43
|
+
- **A lifecycle.** Which stage is current, which are complete, and what stops
|
|
44
|
+
progress? Completed stages rarely need equal weight with the current one.
|
|
45
|
+
|
|
46
|
+
## Write the data brief
|
|
47
|
+
|
|
48
|
+
Keep it to a few lines in the view spec. It is the input to every later choice,
|
|
49
|
+
so state facts from the records, not intentions.
|
|
50
|
+
|
|
51
|
+
```text
|
|
52
|
+
Decision: <who> decides <what>, <how often>
|
|
53
|
+
Subject: <entity>; typical <n> children, largest <n>
|
|
54
|
+
Facts that matter: 1) … 2) … 3) …
|
|
55
|
+
Anomaly: <the record or value that breaks the pattern, and what the view must make visible>
|
|
56
|
+
States: show <…>; collapse <…>; omit <zero or not-applicable …>
|
|
57
|
+
Must stay together: <fact + fact>, <fact + command>
|
|
58
|
+
Unknowns: <data the records do not contain; state them, never invent them>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Example: an order with a split shipment
|
|
62
|
+
|
|
63
|
+
An order whose line is reserved across two warehouses, with one unit short:
|
|
64
|
+
|
|
65
|
+
```text
|
|
66
|
+
Decision: an operator decides what can ship now and what blocks the rest, many times a day
|
|
67
|
+
Subject: order; typical 2 lines, largest 6; up to 2 locations
|
|
68
|
+
Facts that matter: 1) units that can ship from each location now 2) the shortage and the line it affects 3) whether payment allows release
|
|
69
|
+
Anomaly: one line split across two locations; the split belongs on the line, not in two unrelated lists
|
|
70
|
+
States: show reserved, short and shipped where non-zero; omit "0 returned"; collapse fully shipped lines
|
|
71
|
+
Must stay together: shortage + its line + location; payment state + the release command
|
|
72
|
+
Unknowns: carrier tracking is not in the records
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
That brief already rules out a facts card repeating the header, per-line counters
|
|
76
|
+
for every lifecycle stage, and a generic "items" table that separates goods from
|
|
77
|
+
their location. Owner selection then follows from
|
|
78
|
+
[screen decisions](screen-decisions.md) and the
|
|
79
|
+
[order and invoice owner map](commerce-composition.md).
|
|
@@ -52,6 +52,38 @@ requests one shared boundary. Setting both does not add a second line or a blank
|
|
|
52
52
|
body strip. Real body/alert regions retain their distinct requested boundaries;
|
|
53
53
|
an explicitly expandable card retains its collapse region.
|
|
54
54
|
|
|
55
|
+
## Semantic roles
|
|
56
|
+
|
|
57
|
+
Choose spacing by the relationship between content, before choosing a gap tier.
|
|
58
|
+
These base measurements use the shipped roots; spacing scales once through
|
|
59
|
+
`--space-scale`.
|
|
60
|
+
|
|
61
|
+
| Relationship | Default | Owner |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| Structural title/supporting copy | `normal`, 4px | Headed owner or custom copy Stack |
|
|
64
|
+
| Dense supporting copy | `dense`, 2px | Row/menu copy group |
|
|
65
|
+
| Ordinary commands | `md`, 8px | Page, record and workspace command groups |
|
|
66
|
+
| Compact row affordances | `xs`, 4px | Row action group |
|
|
67
|
+
| Related fields/content | `xl`, 16px | Form or related-content group |
|
|
68
|
+
| Independent subject regions | `2xl`, 24px | Page body, TwoColumnLayout, resource, workspace and settings subjects |
|
|
69
|
+
| Page header/body separation | `3xl`, 32px | Page composition |
|
|
70
|
+
| Surface header/body/footer | Surface-derived regional gap | Card or overlay anatomy, independent of peer gaps |
|
|
71
|
+
|
|
72
|
+
Generic Stack and Grid keep their existing defaults; choose their semantic gap
|
|
73
|
+
for the relationship they host. A Card's regional gap derives from its surface
|
|
74
|
+
inset tier and remains independent of the gap between separate Cards. For Card,
|
|
75
|
+
omitted `padding` means `md` (24px); `sm` is 12px, `lg` is 32px and `none` removes
|
|
76
|
+
insets while retaining the 24px default regional gap. Explicit `gap` overrides
|
|
77
|
+
that regional recipe. The general surface vocabulary also has a 16px tier; it is
|
|
78
|
+
not an additional Card padding prop.
|
|
79
|
+
|
|
80
|
+
Typography follows route, subject and subsection roles at 20/16/14px before
|
|
81
|
+
customization. Body and supporting copy normally use 14/12px. Semantic tags stay
|
|
82
|
+
independent of visual size; supported `size`, typography/provider defaults and
|
|
83
|
+
CSS text-root overrides remain available. Density changes row/control geometry,
|
|
84
|
+
not the primary text hierarchy. Preserve a deliberate website/hero emphasis or
|
|
85
|
+
custom render content rather than forcing every heading onto the admin scale.
|
|
86
|
+
|
|
55
87
|
## Keep these choices independent
|
|
56
88
|
|
|
57
89
|
| Choice | Purpose | Does not choose |
|
|
@@ -60,7 +92,7 @@ an explicitly expandable card retains its collapse region.
|
|
|
60
92
|
| Collection density | Row block padding and minimum height | Inline padding, text size, surface inset or corners |
|
|
61
93
|
| Item size | Legacy text/media scale, including provider fallback | Vertical row density |
|
|
62
94
|
| Control size | That owner's action/field geometry | Page rhythm or surface padding |
|
|
63
|
-
| Surface inset default/compact |
|
|
95
|
+
| Surface inset default/compact | Rich surface roots / compact collection shell (24/8px defaults) | Row density |
|
|
64
96
|
| Surface inset flush | Delegate padding to public regions | Remove Input padding or create a third density |
|
|
65
97
|
| `--space-scale` | Shared gaps, inline insets and surface padding | Row block/control-height density |
|
|
66
98
|
| `--density-scale` | Action/control heights and row block padding | Inline room or primary text hierarchy |
|
|
@@ -70,14 +102,16 @@ multiply once by `--space-scale`. Descriptions have no extra margin. These are
|
|
|
70
102
|
copy gaps; larger section and action-cluster gaps remain on their own owners.
|
|
71
103
|
The [token reference](tokens.json) records the installed defaults and vocabulary.
|
|
72
104
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
105
|
+
Corners derive from the one shadcn root, `--radius` (12px by default). Input,
|
|
106
|
+
Button, Select/facet triggers, badges, collection highlights, navigation rows and
|
|
107
|
+
nested bodies use the default `rounded-radius`, the root itself. Card, popup and
|
|
108
|
+
Command shells use the larger `rounded-surface` (4/3 of the root, 16px). See [the
|
|
109
|
+
exact theme recipe](theming.md). Density, spacing scale and padding do not select
|
|
110
|
+
another radius; only small mechanics use the proportional xs/sm/md steps.
|
|
111
|
+
|
|
112
|
+
Short tooltip labels use the existing compact `rounded-radius-xs` tier
|
|
113
|
+
(0.4× the radius root, 4.8px by default) and an arrowless 4px anchor gap. They
|
|
114
|
+
remain inverse contextual labels rather than substantive popup surfaces.
|
|
81
115
|
|
|
82
116
|
Use the public component defaults instead of adding radius classes to callers.
|
|
83
117
|
Joined edges may reset their meeting corners. Circular indicators and avatars
|
|
@@ -14,9 +14,9 @@ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/find-components.
|
|
|
14
14
|
|
|
15
15
|
For a copied skill, replace the script path with that copy's `scripts/find-components.mjs`. Copy the complete skill folder: the script resolves its adjacent `references/public-api.json` relative to itself, regardless of the working directory. It needs Node compatible with the package's engine requirement, not an npm/global CLI or extra dependency.
|
|
16
16
|
|
|
17
|
-
Queries accept multiple words, quoted or separate.
|
|
18
|
-
as a word; `stat` does not match `state` or `status`. An
|
|
19
|
-
|
|
17
|
+
Queries accept multiple words, quoted or separate. Strict `results` require every
|
|
18
|
+
term to match metadata as a word; `stat` does not match `state` or `status`. An
|
|
19
|
+
unknown term leaves strict results empty. Exact imports and case-exact exported names such as `Table` or
|
|
20
20
|
`Empty` select their precise contract. Ordinary task nouns `table` and `empty`
|
|
21
21
|
retain DataTable/DataView and EmptyState alongside the base anatomy. Exported
|
|
22
22
|
types and helper symbols remain available by their exact API name; documented
|
|
@@ -26,9 +26,28 @@ component symbols and curated aliases drive task recommendations.
|
|
|
26
26
|
Foundations but filters under `--layer base`. `--limit` accepts 1–100 and defaults
|
|
27
27
|
to 5. Invalid flags/options or incompatible indexes exit nonzero on stderr.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
When a natural-language query has no strict matches, the finder may add bounded
|
|
30
|
+
`related.results` separately. For example, `member workspace` can suggest the
|
|
31
|
+
workspace owner while explicitly reporting `workspace` as matched and `member`
|
|
32
|
+
as unmatched. These are incomplete context suggestions, not proof that the owner
|
|
33
|
+
implements the whole request. Unmatched terms describe missing metadata evidence;
|
|
34
|
+
they do not establish an unsupported capability. Read the suggested owner's
|
|
35
|
+
choose/avoid guidance and inspect its contract before choosing. Unknown-only
|
|
36
|
+
queries, API-like CamelCase names and explicit import paths do not recover.
|
|
37
|
+
|
|
38
|
+
An unpublished import path is resolved only from deterministic evidence: the
|
|
39
|
+
missing package prefix (`base/cards`), a catalogue path alias, the family's
|
|
40
|
+
published singular or plural spelling (`base/card` → `base/cards`, `base/charts`
|
|
41
|
+
→ `base/chart`) or a trailing segment naming one exported component
|
|
42
|
+
(`features/data-table` → `DataTable` in `features/table`,
|
|
43
|
+
`blocks/commerce/order-header` → `OrderHeader`). The result then reports
|
|
44
|
+
`importResolution` with the requested path, the canonical `import`, the reason
|
|
45
|
+
and any named `symbol`. Use that canonical import in code. A path without such
|
|
46
|
+
evidence, such as `features/unknown`, still returns no owner.
|
|
47
|
+
|
|
48
|
+
If there are no useful related owners, shorten the query to the main
|
|
49
|
+
responsibility or an exact symbol, then remove the layer filter. No result does
|
|
50
|
+
not prove the package lacks that responsibility. Read the selected result's choose/avoid guidance and
|
|
32
51
|
alternatives, then follow `nextReads`; do not load every reference. For routine compact searchable selection, search
|
|
33
52
|
`PopoverMenu` or `compact searchable selection`; surface adjectives describe
|
|
34
53
|
variants, not permission to rebuild the owner's padding.
|
|
@@ -44,7 +63,7 @@ description matches. Start with responsibilities such as `record directory`,
|
|
|
44
63
|
`comparison table`, `identity cell`, `fact list`, `page header`, `query toolbar`
|
|
45
64
|
or `theme boundary`. Read choose/avoid and app-owned responsibilities before
|
|
46
65
|
deciding; a directory result does not require DataView when its workflow differs.
|
|
47
|
-
Unknown terms
|
|
66
|
+
Unknown terms never become strict matches; no fuzzy API or guessed prop is invented.
|
|
48
67
|
|
|
49
68
|
Task language also includes `dashboard KPIs`, `dashboard metrics`, `revenue
|
|
50
69
|
overview`, `statistic cards`, `usage statistics` and `single resource page`.
|
|
@@ -68,7 +87,7 @@ content; application chrome and analytics are separate responsibilities.
|
|
|
68
87
|
|
|
69
88
|
For geometry, `radius`, `border radius`, `control corners` and `control heights` select the existing UIProvider/theme
|
|
70
89
|
boundary guidance; `copy gaps` selects Structure. Their focused references explain
|
|
71
|
-
|
|
90
|
+
surface/default corner roles, corresponding sizes, inherited defaults and normal/dense
|
|
72
91
|
copy rhythm even when no executable recipe matches the query. `page padding`
|
|
73
92
|
selects Page; `card padding` selects Card. Read those owners before adding local
|
|
74
93
|
gutters, reducing normal Card insets or rebuilding their headers/footers.
|
|
@@ -87,6 +106,14 @@ new code with the replacement. The public index carries the same map per family.
|
|
|
87
106
|
Exact guide aliases precede generic overlap, and unrelated family pages
|
|
88
107
|
do not fill the result merely to reach three entries.
|
|
89
108
|
|
|
109
|
+
The optional `related` object leaves strict `total` and `results` unchanged. It
|
|
110
|
+
reports an explanation, its own `total` and bounded `results` with `match:
|
|
111
|
+
"partial"`, `matchedTerms` and `unmatchedTerms`. Term coverage ranks first, then
|
|
112
|
+
the existing owner score and import ordering. These suggestions follow the same
|
|
113
|
+
layer filter and limit, and use the same published owners and focused reads;
|
|
114
|
+
package/path vocabulary alone cannot suggest an owner. The static finder shows
|
|
115
|
+
their incomplete coverage separately from full matches.
|
|
116
|
+
|
|
90
117
|
`nextReads.declaration` is relative to the installed package root.
|
|
91
118
|
`nextReads.references` and `nextReads.examples[].file` are relative to this
|
|
92
119
|
skill folder, so they also work with a complete copied skill. Examples report
|
|
@@ -105,6 +132,80 @@ owners and focused reads; declarations establish actual props and behavior.
|
|
|
105
132
|
|
|
106
133
|
Read each declaration relative to the installed package root, for example `node_modules/themelia-react-ui/dist/components/base/cards/index.d.ts`, following its relative exports as needed. Copying this skill copies metadata, not the declaration tree: use declarations from the same installed package version. Never combine metadata from one version with another version's declarations.
|
|
107
134
|
|
|
135
|
+
## Map cooperating components
|
|
136
|
+
|
|
137
|
+
`expandable form sections`, `collapsible sections` and `editable sections` select
|
|
138
|
+
Accordion's coordinated disclosure anatomy and the retained-content recipe.
|
|
139
|
+
Inspect the exact compound parts when a bounded convenience wrapper lacks a
|
|
140
|
+
needed seam. `custom composition` routes to passive structure guidance; it does
|
|
141
|
+
not mean Stack replaces the semantic controls/blocks inside that composition.
|
|
142
|
+
|
|
143
|
+
The [composition mapper](composition-mapping.md) resolves explicit role tags into
|
|
144
|
+
qualified owners and an advisory region tree. Use it after decomposing a screen
|
|
145
|
+
into subjects, or inspect the available roles before choosing components:
|
|
146
|
+
|
|
147
|
+
```sh
|
|
148
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --roles
|
|
149
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern record-detail --main invoice-lines --aside facts
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Read its unresolved requirements, surface decisions and peers; the finder and
|
|
153
|
+
API inspector remain useful for responsibilities outside mapped coverage.
|
|
154
|
+
|
|
155
|
+
## Inspect a selected component
|
|
156
|
+
|
|
157
|
+
The finder chooses owners. The dependency-free inspector retrieves a bounded,
|
|
158
|
+
versioned API contract for an exact exported component without loading the full
|
|
159
|
+
catalogue or manually chasing its declaration barrel:
|
|
160
|
+
|
|
161
|
+
```sh
|
|
162
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs DataTable --import themelia-react-ui/features/table
|
|
163
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs DataTable --import themelia-react-ui/features/table --prop onRowSelectionChange
|
|
164
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs ThemeScope --import themelia-react-ui/ui-provider
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Default inspection includes meaningful inherited component behavior before
|
|
168
|
+
native/ARIA noise. All inherited props remain available through exact --prop;
|
|
169
|
+
read omissions before concluding that an API is absent. For example, inspect
|
|
170
|
+
AccordionContent's keepMounted rather than assuming form fields must unmount.
|
|
171
|
+
|
|
172
|
+
Use `--import` to select an exact public contract when a symbol has several
|
|
173
|
+
owners. `--prop` requests exact properties: repeat it or separate names with
|
|
174
|
+
commas (`--prop title,primaryAction`); `--limit` bounds the initial list
|
|
175
|
+
of props. Read reported omissions before assuming a property is absent. Unknown
|
|
176
|
+
exports/props and ambiguous unqualified contracts fail explicitly. A public hook
|
|
177
|
+
or helper such as `useOverlayVisibility` has no component contract; the error
|
|
178
|
+
names the declaration file and import that hold its signature. Aliases can
|
|
179
|
+
share implementation while distinct exports such as the two ThemeScope owners
|
|
180
|
+
have different APIs.
|
|
181
|
+
|
|
182
|
+
The generated `component-contracts.json` comes from the existing TypeScript/prop
|
|
183
|
+
documentation pipeline. Types, call signatures, generic parameters, overloads
|
|
184
|
+
and mode-dependent requirements remain visible. A prop required in one union
|
|
185
|
+
branch is not universally required. Defaults are only those documented by that
|
|
186
|
+
pipeline; an unknown default is not inferred. Native attributes and named helper
|
|
187
|
+
types still lead to installed declarations where the bounded contract needs
|
|
188
|
+
more detail. Inspect callback types and controlled/default state before adapting
|
|
189
|
+
a recipe; sharing a visual shape does not mean controls share a value contract.
|
|
190
|
+
|
|
191
|
+
The copied inspector reads its adjacent shared metadata, like the finder. Verify
|
|
192
|
+
the complete copied bundle and installed identity first. It does not install
|
|
193
|
+
dependencies, alter an app, or add an editor/type-checking runtime.
|
|
194
|
+
|
|
195
|
+
## Inspect theme vocabulary
|
|
196
|
+
|
|
197
|
+
```sh
|
|
198
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs surface --limit 8
|
|
199
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs radius --limit 5
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Token lookup reads the existing generated token index. It distinguishes public
|
|
203
|
+
structural roots and advanced settings from derived utility vocabulary. A
|
|
204
|
+
utility match does not become an override root. Unreported semantic theme values
|
|
205
|
+
must be read from the installed stylesheet and [theme guide](theming.md); the
|
|
206
|
+
tool does not invent a palette. The tokenization skill owns changing these
|
|
207
|
+
shared roles and verifying the effects across controls/surfaces and portals.
|
|
208
|
+
|
|
108
209
|
`ThemeScope` has distinct contracts. Root and `themelia-react-ui/ui-provider` export the basic CSS-inheritance boundary with native div/style props and portal hosting. `themelia-react-ui/features/theme-tweaker` exports the advanced theme-definition scope. Inspect the result's responsibility and that exact family's declaration before selecting props.
|
|
109
210
|
|
|
110
211
|
The index retains schemaVersion/discoveryVersion 1; optional family `recipes` and `references`
|