themelia-react-ui 2.0.4 → 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 +135 -0
- package/README.md +113 -18
- package/dist/{accordion-96o0pN62.js → accordion-B9MHG0cT.js} +11 -11
- package/dist/accordion-B9MHG0cT.js.map +1 -0
- package/dist/{action-menu-CHgs8vmj.js → action-menu-Dr8K-ghE.js} +48 -45
- package/dist/action-menu-Dr8K-ghE.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-C58tQcBy.js} +210 -174
- 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-DkoqHPPl.js → attachment-Dg_69lPS.js} +9 -9
- package/dist/{attachment-DkoqHPPl.js.map → attachment-Dg_69lPS.js.map} +1 -1
- package/dist/{auth-D2FVZ1MH.js → auth-DTkkshS8.js} +43 -46
- package/dist/auth-DTkkshS8.js.map +1 -0
- package/dist/{avatar-DWO_HHhB.js → avatar-CeZaFmNH.js} +8 -8
- package/dist/avatar-CeZaFmNH.js.map +1 -0
- package/dist/{badge-DErMA7ul.js → badge-xIiV_E7f.js} +5 -5
- package/dist/{badge-DErMA7ul.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 +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 +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-CdfIkCsV.js → batch-action-bar-Cb8cuvyy.js} +6 -6
- package/dist/batch-action-bar-Cb8cuvyy.js.map +1 -0
- package/dist/blocks/admin.js +21 -21
- 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 +325 -306
- 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 +1259 -1184
- 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-J-K2kl4c.js} +6 -6
- package/dist/{breadcrumbs-B-WFKecD.js.map → breadcrumbs-J-K2kl4c.js.map} +1 -1
- package/dist/{button-DkmK-z8E.js → button-S2Cubiiz.js} +3 -3
- package/dist/button-S2Cubiiz.js.map +1 -0
- package/dist/{buttons-BbfzgczK.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-CzYUTPeJ.js → checkbox-fflqmODR.js} +2 -2
- package/dist/{checkbox-CzYUTPeJ.js.map → checkbox-fflqmODR.js.map} +1 -1
- package/dist/{choice-inputs-JLtij2y4.js → choice-inputs-zUgBZfE4.js} +258 -257
- package/dist/choice-inputs-zUgBZfE4.js.map +1 -0
- package/dist/{code-block-CGNaUtAE.js → code-block-BzmM9Eig.js} +8 -8
- package/dist/code-block-BzmM9Eig.js.map +1 -0
- package/dist/{collapsible-Do4G0zcC.js → collapsible-BkAI_XD4.js} +5 -5
- package/dist/{collapsible-Do4G0zcC.js.map → collapsible-BkAI_XD4.js.map} +1 -1
- package/dist/{collection-content-C0e8SsTm.js → collection-content-gDh1v6O4.js} +3 -3
- package/dist/{collection-content-C0e8SsTm.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-CBJDs6w_.js → combobox-BwzoXFSG.js} +254 -247
- package/dist/combobox-BwzoXFSG.js.map +1 -0
- package/dist/{command-D8NrBj-b.js → command-CrlPIL6m.js} +11 -11
- package/dist/command-CrlPIL6m.js.map +1 -0
- package/dist/{comments-Di4w0H_S.js → comments-Dmpp0YIc.js} +29 -29
- package/dist/{comments-Di4w0H_S.js.map → comments-Dmpp0YIc.js.map} +1 -1
- 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 +1 -1
- package/dist/components/base/combobox/index.d.ts +4 -2
- package/dist/components/base/feedback/alert.d.ts +1 -1
- 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 +4 -0
- 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/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/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/toaster/index.d.ts +1 -0
- 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/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-CIxwbZt5.js} +26 -18
- 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-CnGCZdX4.js → copyable-DIznBqiT.js} +7 -7
- package/dist/{copyable-CnGCZdX4.js.map → copyable-DIznBqiT.js.map} +1 -1
- package/dist/{data-display-D4oujtx0.js → data-display-BdgCAw8T.js} +268 -277
- package/dist/data-display-BdgCAw8T.js.map +1 -0
- package/dist/{date-Q7jnXxpk.js → date-Cq8ioE4o.js} +5 -5
- package/dist/{date-Q7jnXxpk.js.map → date-Cq8ioE4o.js.map} +1 -1
- package/dist/{date-picker-zOt1oNss.js → date-picker-RlIzKom_.js} +446 -437
- package/dist/date-picker-RlIzKom_.js.map +1 -0
- package/dist/{date-pickers-cj8IXbDC.js → date-pickers-DY-CpXS1.js} +12 -12
- package/dist/{date-pickers-cj8IXbDC.js.map → date-pickers-DY-CpXS1.js.map} +1 -1
- package/dist/{display-BB4BL_-K.js → display-KsZLw9Ov.js} +9 -9
- package/dist/{display-BB4BL_-K.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 +22 -22
- 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 +237 -238
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +140 -146
- 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 +375 -326
- 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 +1266 -1193
- 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 +69 -66
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +13 -13
- 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 +94 -95
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/{feedback-DZNL5Lg1.js → feedback-Dm4izqFn.js} +80 -79
- package/dist/feedback-Dm4izqFn.js.map +1 -0
- package/dist/{field-affordance-recipes-DjwGx8eM.js → field-affordance-recipes-DWcNcOjh.js} +4 -4
- package/dist/field-affordance-recipes-DWcNcOjh.js.map +1 -0
- package/dist/{filters-BcT-uoFy.js → filters-DzgSJpMK.js} +693 -645
- package/dist/filters-DzgSJpMK.js.map +1 -0
- package/dist/{form-field-CsgRmdit.js → form-field-BriWAXyg.js} +6 -6
- package/dist/{form-field-CsgRmdit.js.map → form-field-BriWAXyg.js.map} +1 -1
- package/dist/{form-sizing-NXgjkmBG.js → form-sizing-Bs2qFUeE.js} +4 -4
- package/dist/form-sizing-Bs2qFUeE.js.map +1 -0
- package/dist/{forms-BV5m5aQF.js → forms-C0RGnJTe.js} +17 -13
- package/dist/forms-C0RGnJTe.js.map +1 -0
- package/dist/{forms-numeric-Cd33AKbD.js → forms-numeric-DIhghX1Q.js} +86 -82
- package/dist/forms-numeric-DIhghX1Q.js.map +1 -0
- package/dist/{header-BA697l4a.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-BQ-L7Uu2.js → hooks-DB6CJ4MR.js} +26 -14
- package/dist/hooks-DB6CJ4MR.js.map +1 -0
- package/dist/{icon-badge-COWbCCWu.js → icon-badge-DZF-YjQp.js} +4 -4
- package/dist/{icon-badge-COWbCCWu.js.map → icon-badge-DZF-YjQp.js.map} +1 -1
- package/dist/index.js +4 -5
- package/dist/{input-Cdw4k0fb.js → input-CvyDQlY7.js} +8 -8
- package/dist/{input-Cdw4k0fb.js.map → input-CvyDQlY7.js.map} +1 -1
- package/dist/input-DMBwAZmr.js +21 -0
- package/dist/input-DMBwAZmr.js.map +1 -0
- package/dist/{item-BvZ2DR_x.js → item-DjCcM18E.js} +16 -16
- 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 +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/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/utils.js +1 -1
- package/dist/map-demo-tile.svg +1 -1
- package/dist/{media-gallery-CSl5W1Fy.js → media-gallery-C-vChPmE.js} +6 -6
- package/dist/{media-gallery-CSl5W1Fy.js.map → media-gallery-C-vChPmE.js.map} +1 -1
- package/dist/{mentions-RKOQaaIB.js → mentions-0_4nWuI-.js} +10 -10
- package/dist/{mentions-RKOQaaIB.js.map → mentions-0_4nWuI-.js.map} +1 -1
- package/dist/{message-INU2xsxu.js → message-g8p7eVtN.js} +7 -7
- package/dist/message-g8p7eVtN.js.map +1 -0
- package/dist/{metadata-list-qVV7AVxa.js → metadata-list-C3MkU-Om.js} +64 -64
- 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-BQNcg1jT.js → navigation-DaRjthVk.js} +101 -82
- package/dist/navigation-DaRjthVk.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/{number-E_OiIfJz.js → number-CRU3kGuk.js} +5 -5
- package/dist/{number-E_OiIfJz.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-Ch8X_47u.js → pagination-CgCjElfu.js} +7 -7
- package/dist/{pagination-Ch8X_47u.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-BYaCdFhf.js → popover-menu-DlnQ2zlR.js} +7 -7
- package/dist/{popover-menu-BYaCdFhf.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-Du64iDbb.js → primitives-ByWgGUgt.js} +5 -5
- package/dist/{primitives-Du64iDbb.js.map → primitives-ByWgGUgt.js.map} +1 -1
- package/dist/primitives.js +4 -4
- package/dist/{progress-BvF2oCdV.js → progress-BJhQP9WX.js} +9 -9
- package/dist/{progress-BvF2oCdV.js.map → progress-BJhQP9WX.js.map} +1 -1
- package/dist/{receipt-D789Jwyy.js → receipt-tOc7B3hw.js} +7 -7
- package/dist/receipt-tOc7B3hw.js.map +1 -0
- package/dist/{rich-text-CLJEf76s.js → rich-text-Dth5E882.js} +3 -3
- package/dist/{rich-text-CLJEf76s.js.map → rich-text-Dth5E882.js.map} +1 -1
- package/dist/{rich-text-editor-Cm1dpUpQ.js → rich-text-editor-C1fOjBTd.js} +429 -430
- package/dist/rich-text-editor-C1fOjBTd.js.map +1 -0
- package/dist/{rich-text-editor-toolbar-L__e4x47.js → rich-text-editor-toolbar-laT3tpBT.js} +32 -28
- package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +1 -0
- package/dist/{scroll-area-La5RXsEk.js → scroll-area-B0dB2cBi.js} +2 -2
- package/dist/{scroll-area-La5RXsEk.js.map → scroll-area-B0dB2cBi.js.map} +1 -1
- package/dist/{separator-DAEV0w65.js → separator-Bb17I4pu.js} +2 -2
- package/dist/{separator-DAEV0w65.js.map → separator-Bb17I4pu.js.map} +1 -1
- package/dist/{separator-GNfPG-90.js → separator-Ct_WSWTJ.js} +3 -3
- package/dist/{separator-GNfPG-90.js.map → separator-Ct_WSWTJ.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/{settings-BA2iboic.js → settings-Bar5wiSo.js} +31 -38
- 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-C0V0_Fyf.js → structure-DuxKl954.js} +2 -2
- package/dist/{structure-C0V0_Fyf.js.map → structure-DuxKl954.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{table-CpvnzJn9.js → table-B4TE7iOV.js} +3 -3
- package/dist/{table-CpvnzJn9.js.map → table-B4TE7iOV.js.map} +1 -1
- package/dist/{table-DH7rozUv.js → table-CFOWY9pQ.js} +394 -388
- package/dist/table-CFOWY9pQ.js.map +1 -0
- package/dist/{tabs-eqVsJZWO.js → tabs-e7ko9S2o.js} +11 -11
- package/dist/tabs-e7ko9S2o.js.map +1 -0
- package/dist/{text-inputs-DXItiR0O.js → text-inputs-B1culiSK.js} +17 -17
- package/dist/text-inputs-B1culiSK.js.map +1 -0
- package/dist/theme.css +40 -37
- package/dist/{timelines-DmtztAY_.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-CV11PURP.js → tree-CzUJHnFs.js} +8 -8
- package/dist/{tree-CV11PURP.js.map → tree-CzUJHnFs.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-CSyJrh28.js → typography-BQnine1k.js} +12 -12
- package/dist/{typography-CSyJrh28.js.map → typography-BQnine1k.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-BOW6U2tI.js} +25 -24
- package/dist/upload-BOW6U2tI.js.map +1 -0
- package/dist/{upload-queue-DhQJiSRc.js → upload-queue-qUXn1ykN.js} +16 -14
- package/dist/upload-queue-qUXn1ykN.js.map +1 -0
- package/dist/{usage-card-DVTRDmGz.js → usage-card-BeSLY0i0.js} +24 -17
- package/dist/usage-card-BeSLY0i0.js.map +1 -0
- package/dist/{utils-CF3c95Io.js → utils-B6kKb8jB.js} +237 -141
- 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-ClupF0Gz.js → value-typography-uAmWUAL1.js} +2 -2
- package/dist/{value-typography-ClupF0Gz.js.map → value-typography-uAmWUAL1.js.map} +1 -1
- package/dist/{workspace-9EFVXUyk.js → workspace-DHeHv0qw.js} +50 -49
- package/dist/workspace-DHeHv0qw.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/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 +19 -17
- package/docs/consumer-skill/references/analytics.md +18 -1
- package/docs/consumer-skill/references/commerce-composition.md +97 -0
- package/docs/consumer-skill/references/component-contracts.json +7131 -1754
- package/docs/consumer-skill/references/composition-mapping.md +17 -3
- package/docs/consumer-skill/references/composition.md +159 -31
- 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 +11 -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 +15 -4
- package/docs/consumer-skill/references/integration.md +35 -0
- package/docs/consumer-skill/references/product-composition.md +94 -0
- package/docs/consumer-skill/references/public-api.json +2881 -420
- package/docs/consumer-skill/references/review.md +39 -2
- package/docs/consumer-skill/references/rhf-workflows.md +7 -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 +17 -18
- 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 +39 -3
- 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 +41 -6
- 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 +1 -1
- 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/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.map +0 -1
- package/dist/code-block-CGNaUtAE.js.map +0 -1
- 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/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.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.map +0 -1
- package/dist/field-affordance-recipes-DjwGx8eM.js.map +0 -1
- package/dist/filters-BcT-uoFy.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.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.map +0 -1
- 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.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/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/receipt-D789Jwyy.js.map +0 -1
- package/dist/rich-text-editor-Cm1dpUpQ.js.map +0 -1
- package/dist/rich-text-editor-toolbar-L__e4x47.js.map +0 -1
- 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-DH7rozUv.js.map +0 -1
- 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/workspace-9EFVXUyk.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,140 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.5 — 2026-10-31
|
|
4
|
+
|
|
5
|
+
- Modal scrims render again under `SidebarProvider`/`AppSidebar`. The sidebar
|
|
6
|
+
drawer owner is a Dialog root around the app, so Base UI treated every dialog
|
|
7
|
+
inside as nested and skipped its backdrop. A modal now draws its backdrop
|
|
8
|
+
unless it opens from inside another modal's content.
|
|
9
|
+
- Collection rows (menus, Command, Select, Combobox, cascader, global search) are
|
|
10
|
+
sized by their height role: block padding steps one tier below Item's, so a
|
|
11
|
+
single line is exactly 32/28/36px at default/compact/comfortable instead of
|
|
12
|
+
1.5px taller. DataTable menus, kanban and activities drop the legacy 24px
|
|
13
|
+
`density="table"` rows.
|
|
14
|
+
- Skeletons use the translucent neutral chip fill, so they keep one contrast on
|
|
15
|
+
every surface, including a `--muted` sidebar where they used to disappear.
|
|
16
|
+
- `StackedLayout`, `TopbarSidebarLayout` and `AppLayout` with no variant follow
|
|
17
|
+
the active theme; `headerTheme`/`light-header`/`dark-header` still scope the
|
|
18
|
+
header. Header controls (sidebar trigger, search, tools, notifications, a
|
|
19
|
+
one-line user trigger) share the 32px action height.
|
|
20
|
+
- The dual navigation cluster docks its contextual panel from 768px beside a
|
|
21
|
+
primary rail and opens it as a drawer below that; `mobileSidebarMode="inline"`
|
|
22
|
+
keeps the previous docked cluster.
|
|
23
|
+
- `GlobalSearch` input is a combobox with `aria-activedescendant`; results are
|
|
24
|
+
options reached with the arrow keys rather than Tab.
|
|
25
|
+
- Filter editors focus their primary input when opened and share one editor
|
|
26
|
+
header; selection captions read "2 status selected" in running text.
|
|
27
|
+
- Additive: `CardShell surface`, `FormSection titleSize`, CoordinatesInput
|
|
28
|
+
latitude/longitude accessible-label strings, MetricComparison `pointsUnit`,
|
|
29
|
+
UsageCard average-unavailable string, AI tool-call `elapsedLabel`, AI summary
|
|
30
|
+
`confidenceLabel`, ActivityRow `reserveDisclosure`/`reserveMenu`,
|
|
31
|
+
MediaLibraryToolbar `summary`/`disabled`, `useMediaLibrary().retry` and
|
|
32
|
+
`strings.retry`.
|
|
33
|
+
- Alert places its action beside the copy only when the alert itself is wide
|
|
34
|
+
enough (container query), otherwise below it. PageHeader wraps its commands
|
|
35
|
+
below the copy before the copy column gets cramped.
|
|
36
|
+
|
|
37
|
+
- `--height-action` and `--height-control` default to 2rem (32px) instead of
|
|
38
|
+
2.25rem. Their size steps are eighths of the root (¾, ⅞, 9⁄8), so the scale is
|
|
39
|
+
24/28/32/36px in whole pixels; it was 28/32/36/40px in ninths. Set the roots
|
|
40
|
+
back to 2.25rem to restore the previous heights (steps become 27/31.5/36/40.5px).
|
|
41
|
+
- Corner roles: `rounded-radius` (`--radius`, 12px by default) is now the
|
|
42
|
+
default corner for buttons, inputs, select and facet triggers, badges,
|
|
43
|
+
collection and navigation rows and nested bodies. The new `rounded-surface`
|
|
44
|
+
(4/3 × `--radius`, 16px) is the larger corner of cards, popups, dialogs,
|
|
45
|
+
command shells and other outer surfaces. `rounded-inner` and its bounded
|
|
46
|
+
formula are removed. Migration: replace an app's `rounded-radius` on outer
|
|
47
|
+
shells with `rounded-surface`, and `rounded-inner` with `rounded-radius`.
|
|
48
|
+
- `Alert` and the `Toaster` toast take Item's row geometry: the row insets
|
|
49
|
+
(`px-row-x`, `py-row-y`, 12px and 8px by default) and Item's 12px
|
|
50
|
+
media/actions gap, instead of the 24px card surface inset. A two-line notice
|
|
51
|
+
is about 60px tall instead of 94px. Overlay tone notices, which are Alerts,
|
|
52
|
+
follow the same row roles.
|
|
53
|
+
- `PopoverTitle` and `PopoverDescription` no longer wrap plain text in the
|
|
54
|
+
popover's inherited line box, and `Cascader` keeps "Select current" beside
|
|
55
|
+
its title and path instead of inside the title row. A drilled level's title
|
|
56
|
+
and parent path now sit 4px apart instead of 11px.
|
|
57
|
+
- Menu surfaces (popover menus and their header and footer bands, dropdown
|
|
58
|
+
menus, Select and Combobox lists, Command and its search row, global search,
|
|
59
|
+
mentions and the cascader) inset by md (8px) on both axes instead of xs
|
|
60
|
+
(4px) inline, so rows and the search field sit further from the edge, and
|
|
61
|
+
header and footer copy sit one small xs step (4px) inside that edge instead
|
|
62
|
+
of adding the full row inset (shared `popoverRecipes.menuCopyInset`).
|
|
63
|
+
- Filters support nested options. `FilterOption.children` was declared but
|
|
64
|
+
ignored; `SELECT` and `MULTI_SELECT` editors now show nested options one level
|
|
65
|
+
at a time through the Cascader's panel (path search, Back, multi-select across
|
|
66
|
+
levels, `closeOnSelect`), and `SelectFacet` uses the `Cascader` field. A chosen
|
|
67
|
+
nested option reads as its path ("Europe / Greece / Athens") in chips and
|
|
68
|
+
facets. `FilterConfig.selectableOptions: 'any'` lets a branch be chosen, and
|
|
69
|
+
the filter strings add `previousLevel` and `selectCurrentLevel`. The panel is
|
|
70
|
+
a private part shared by `Cascader` and filters; `Cascader` behaviour is
|
|
71
|
+
unchanged.
|
|
72
|
+
- `Cascader` moves between levels with motion: a drilled level or a new column
|
|
73
|
+
enters from the side it was reached from (shared `motionRecipes.level`,
|
|
74
|
+
`@starting-style`, reduced-motion aware). Opening and searching do not
|
|
75
|
+
animate the list.
|
|
76
|
+
- `LayoutSidebarProvider` (and so `AppSidebar`) defaults to
|
|
77
|
+
`menuDensity="default"`: 28px primary rows and 24px nested rows on a 4px gap
|
|
78
|
+
(with the 2rem action height below), instead of comfortable 36px and 32px
|
|
79
|
+
rows. Pass `menuDensity="comfortable"` for 32px rows. Sidebar navigation
|
|
80
|
+
labels are medium weight throughout; the current entry is marked by its fill.
|
|
81
|
+
An unscoped base `SidebarMenuButton` falls back to the default density like
|
|
82
|
+
the rest of the menu, and a collapsed icon-rail row is the square of its own
|
|
83
|
+
height.
|
|
84
|
+
- Remove the leftover `active:translate-y-0!` press overrides from Collapsible
|
|
85
|
+
and Tooltip triggers, dialog and sheet close buttons, popover buttons and the
|
|
86
|
+
sidebar trigger. Nothing translates on press any more, and the overrides made
|
|
87
|
+
triggers centred with a translate, such as the sidebar disclosure chevron,
|
|
88
|
+
jump down while pressed.
|
|
89
|
+
- Add a fourth consumer skill, `themelia-design`, for the designer's part of a
|
|
90
|
+
view: a data brief read from real records, a view spec with ranked
|
|
91
|
+
information, wireframes and encodings, and a scored critique rubric with a
|
|
92
|
+
browser census for rendered screens. A `themelia-ui-designer` agent
|
|
93
|
+
definition applies it to whole views (design mode builds, renders and fixes;
|
|
94
|
+
review mode critiques read-only). `setup-skills.mjs --agents <directory>`
|
|
95
|
+
copies the agent without overwriting an existing file, and `--check`
|
|
96
|
+
compares it. The project-instructions block lists the new skill.
|
|
97
|
+
- `ResourceCell` draws its media circle only when `imageUrl`, `icon` or
|
|
98
|
+
`fallback` is passed, and no longer falls back to a decorative mail glyph, so
|
|
99
|
+
order and invoice identifiers read as plain text. To keep a monogram for a
|
|
100
|
+
person or organization, pass `fallback={<Initials value={name} />}` (on every
|
|
101
|
+
row of a column where only some rows have a photo). An explicit `fallback`
|
|
102
|
+
still wins over `icon`, and `icon` now wins over title initials.
|
|
103
|
+
- `InvoiceLineItems` states quantity and unit price once per narrow row instead
|
|
104
|
+
of repeating column labels, aligns header and rows on one subgrid with
|
|
105
|
+
content-sized numeric tracks, top-aligns custom cells, scrolls custom columns
|
|
106
|
+
horizontally (or drops columns marked `wideOnly` below its `@lg` width), and
|
|
107
|
+
adds `surface="flat"` for use inside a Card. Header and
|
|
108
|
+
rows now sit in `.invoice-line-items--body`, which carries the grid template
|
|
109
|
+
that each row used to repeat. The family
|
|
110
|
+
index now exports `InvoiceColumn`, `InvoiceLineItemsFooterRow`,
|
|
111
|
+
`InvoiceLineItemsStrings` and `defaultInvoiceLineItemsStrings`.
|
|
112
|
+
- Commerce owners that hard-coded their frame accept `surface`/`padding`:
|
|
113
|
+
`FulfillmentGroup` (framed by default) and `InvoiceHeader`,
|
|
114
|
+
`DiscountStackPreview`, `TaxBreakdownCard`, `RefundStatusCard`,
|
|
115
|
+
`CartSummaryCard`, `ShipmentTracking` and `InventorySectionCard` (unframed by
|
|
116
|
+
default). Defaults are unchanged.
|
|
117
|
+
- Add `maxVisibleSecondaryActions` to page, record, settings, workspace and
|
|
118
|
+
resource headers (default 2), `visibleFields` and `children` to
|
|
119
|
+
`ProductVariantEditor`, and `showGroupBy` to `ProductVariantsManager`
|
|
120
|
+
(default true).
|
|
121
|
+
- Consumer gaps from the round-2 rebuilds: `InvoiceStatus` adds `draft` and
|
|
122
|
+
`disputed`; `InvoiceHeader.status` is optional and parties take `details`;
|
|
123
|
+
`OrderCustomer` adds `shippingMethod` and `showShippingAddress`;
|
|
124
|
+
`FulfillmentGroup` adds `count`; `MetricComparison` honours `current.trend`;
|
|
125
|
+
`ChartTooltipContent` adds `valueFormatter`; `ProductVariantEditor` adds
|
|
126
|
+
`errors`, `formId` and `showHeader`; `ResourceCell` adds `mediaShape` and a
|
|
127
|
+
full-title hover; `MediaResourceGallery` grid shows whole images and omits a
|
|
128
|
+
missing file size; an explicit DataTable column `size` sets its width without
|
|
129
|
+
resizing; `base/toaster` re-exports `toast`; `blocks/commerce` exports its
|
|
130
|
+
status tone maps and invoice strings. `ProductOptionsMatrix` focuses a value
|
|
131
|
+
added in its option editor so it can be typed at once.
|
|
132
|
+
- Discovery resolves near-miss import paths with `importResolution`, the mapper
|
|
133
|
+
knows 139 roles across commerce, products, media, charts and analytics and
|
|
134
|
+
suggests nearby roles for unmatched phrases, and the inspector reads several
|
|
135
|
+
props at once and points hooks to their declaration. A new order and invoice
|
|
136
|
+
composition reference ships with executable recipes.
|
|
137
|
+
|
|
3
138
|
## 2.0.4 — 2026-10-28
|
|
4
139
|
|
|
5
140
|
Shared composition roles, stronger consumer guidance and executable component
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A publishable React UI package built on Base UI and Tailwind, with shadcn-compatible themes and Themelia's public APIs. Routing, persistence, permissions and translations remain consumer-owned.
|
|
4
4
|
|
|
5
|
-
Package: **`themelia-react-ui`** · current version: **`2.0.
|
|
5
|
+
Package: **`themelia-react-ui`** · current version: **`2.0.5`** · MIT licensed.
|
|
6
6
|
The GitHub repository is `themelia-react-ui`; npm imports use `themelia-react-ui`.
|
|
7
7
|
|
|
8
8
|
Consuming apps start with [consumer setup](#consumer-setup) and the packaged
|
|
@@ -25,6 +25,14 @@ npm run check:all
|
|
|
25
25
|
|
|
26
26
|
The Vite React playground has foundations, a complete searchable catalogue, and an interactive products workspace. The catalogue groups Foundations (including semantic primitives and composition structures), Base components, Layouts, Blocks, and domain Features. Layouts includes five composed AppLayout presets (light header, dark header, sidebar, inset canvas and stacked navigation), plus a responsive composition guide for viewport grids, parent-driven grids, wrapping actions and stable content order. Navigation uses actual package families, static domain headings above Features, padded disclosures and a single Skeletons family page. Expansion persists across page changes and mobile drawer closure; search shows the same group context. `/` opens the full catalogue with preview-only hash navigation (`/?page=catalog` also works); `/?page=products` exercises options, generation, validation, async save/retry and bulk actions. React Router is not a dependency.
|
|
27
27
|
|
|
28
|
+
For the application shell at its actual viewport size, open
|
|
29
|
+
`/?page=shells&layout=header`, `/?page=shells&layout=sidebar` or
|
|
30
|
+
`/?page=shells&layout=inset`; append `&theme=dark`
|
|
31
|
+
for the dark theme. This preview-only mode removes catalogue chrome from the
|
|
32
|
+
composition. The [shell architecture verification report](docs/verification/2026-10-29-shell-architecture-catalogue.md)
|
|
33
|
+
records source ownership, rendered measurements and executed interactions for
|
|
34
|
+
the three catalogue structures.
|
|
35
|
+
|
|
28
36
|
`build` emits ESM entrypoints, TypeScript declarations, compiled component CSS, editable Tailwind theme source and optional map styles. Playground files stay outside the tarball. `check:contract` enforces exact exports, retained source symbols, component layers, dependencies and token ownership. `check:preview` verifies ready routes, example files, exact current public symbols, published imports and public family coverage. `check:docs` verifies local props for source-origin-qualified public callable owners, including all static displayed PropsTables. `check:package` requires a fresh `npm run build`. It installs the tarball into an isolated consumer, checks strict declarations for every family and matches installed declaration exports to the source-backed skill index. Its installed basic fixture checks SSR/hydration and executes provider defaults, controlled Input/Select/Checkbox state, form submission/validation/reset, scoped overlay portals and async confirmation/retry. Native links retain a separate strict typecheck and Vite-build smoke. The optional fixture exercises controlled table sorting/selection/visibility and client module initialization for specialist peers. Initialization does not establish specialist workflow or server-rendering support. It uses the configured npm cache, or `THEMELIA_NPM_CACHE`; a fresh `npm ci` cache may lack fixture registry metadata. Use `THEMELIA_FIXTURE_INSTALL=online` explicitly for cold temporary consumers, or supply a prepared cache for the default offline install. See [release readiness](docs/releasing.md).
|
|
29
37
|
|
|
30
38
|
`lint` runs development-only `@shadcn/lint` through Oxlint: semantic colors across components, shared recipes and preview TSX and fixed typography contracts in preview examples. `check:design-lint` proves rule recognition, package stylesheet discovery and permitted customization. Both run inside `check`; `.oxlintrc.json` owns the staged policy. See [typography and lint guidance](docs/typography-and-design-lint.md).
|
|
@@ -48,14 +56,14 @@ Chromium 111+, Safari 18.1+ or Firefox 151+ for this theme behavior. The nearest
|
|
|
48
56
|
mode class governs nested components and their scoped portals; see the
|
|
49
57
|
[theme guide](docs/consumer-skill/references/theming.md) for partial overrides.
|
|
50
58
|
|
|
51
|
-
Version 2.0.
|
|
59
|
+
Version 2.0.5 uses official `@base-ui/react ^1.9.0` from npm. Themelia's
|
|
52
60
|
`ComboboxRoot.dismissLabel` and feature `strings.dismiss` name both screen-reader
|
|
53
61
|
dismissal controls. Shared popup owners preserve focus restored to a child
|
|
54
62
|
trigger during deferred parent recovery. These behaviors are library-owned;
|
|
55
63
|
consumers install the unmodified official Base UI package.
|
|
56
64
|
|
|
57
65
|
```sh
|
|
58
|
-
npm install ./themelia-react-ui-2.0.
|
|
66
|
+
npm install ./themelia-react-ui-2.0.5.tgz '@base-ui/react@^1.9.0' lucide-react
|
|
59
67
|
```
|
|
60
68
|
|
|
61
69
|
For a registry release, install into a React 19 application with:
|
|
@@ -99,16 +107,21 @@ app overrides after library CSS. A Tailwind v4 application can additionally
|
|
|
99
107
|
import `theme.css` after Tailwind to generate app-owned utilities from the same
|
|
100
108
|
mappings; this editable file contains Tailwind directives and needs processing.
|
|
101
109
|
|
|
102
|
-
The package ships
|
|
110
|
+
The package ships four focused agent capabilities:
|
|
103
111
|
[components](docs/consumer-skills/themelia-components/SKILL.md) for installed setup,
|
|
104
112
|
search and typed component/form integration;
|
|
105
|
-
[tokenization](docs/consumer-skills/themelia-tokenization/SKILL.md) for
|
|
106
|
-
|
|
113
|
+
[tokenization](docs/consumer-skills/themelia-tokenization/SKILL.md) for domain
|
|
114
|
+
structures combining public parts with semantic JSX and token-backed Tailwind,
|
|
115
|
+
plus shared themes, typography and geometry;
|
|
107
116
|
[composition](docs/consumer-skills/themelia-composition/SKILL.md) for business
|
|
108
|
-
hierarchy, responsive screens and visual repair
|
|
117
|
+
hierarchy, responsive screens and visual repair; and
|
|
118
|
+
[design](docs/consumer-skills/themelia-design/SKILL.md) for reading records into
|
|
119
|
+
view specs and scoring rendered views against a critique rubric. A
|
|
120
|
+
[designer agent](docs/consumer-skill/agents/themelia-ui-designer.md) applies the
|
|
121
|
+
design skill to whole views. Their shared assets and
|
|
109
122
|
the compatible original entrypoint remain in `docs/consumer-skill`. The previous
|
|
110
123
|
foundation/forms paths remain package compatibility routes; fresh skill copying
|
|
111
|
-
installs the
|
|
124
|
+
installs the four canonical capabilities. Follow the
|
|
112
125
|
[installed setup and copying guide](docs/consumer-skill/references/installation.md)
|
|
113
126
|
to preserve all references; npm installation does not modify global agent skills.
|
|
114
127
|
|
|
@@ -163,7 +176,8 @@ defines application freedom and library-owned anatomy; the
|
|
|
163
176
|
and verification gate. Shipped consumer examples receive the same design lint as
|
|
164
177
|
library compositions. Those repository checks do not run automatically in apps.
|
|
165
178
|
Popover display/menu anatomy and default/compact insets are separate from collection
|
|
166
|
-
row density and control size.
|
|
179
|
+
row density and control size. Rich display surfaces keep 24px default insets;
|
|
180
|
+
compact menu/list shells use 4px around their already-padded rows. Flush delegates padding to owned regions. Command
|
|
167
181
|
search composes the public Input; features inherit these base recipes rather than
|
|
168
182
|
rebuilding menu chrome or passing local padding overrides.
|
|
169
183
|
|
|
@@ -240,9 +254,10 @@ Use `titleSuffix` for card status, count and version badges. `headerStart` is fu
|
|
|
240
254
|
Application drawers use `ActionDrawer` and `useOverlayVisibility` from `themelia-react-ui/features/overlays`. Sheet is the structural foundation and remains available for lower-layer infrastructure and compatibility.
|
|
241
255
|
|
|
242
256
|
Header commands are role-based: one `primaryAction` and ordered
|
|
243
|
-
`secondaryActions` render as `[secondary…] [primary] [⋯]`, with overflow
|
|
244
|
-
destructive commands
|
|
245
|
-
|
|
257
|
+
`secondaryActions` render as `[secondary…] [primary] [⋯]`, with overflow
|
|
258
|
+
and destructive commands moved into the More actions menu that ends the row.
|
|
259
|
+
Below 40rem of actual header width, one More actions trigger contains all commands,
|
|
260
|
+
including primary. Page, PageHeader, PageHeading, the resource shells,
|
|
246
261
|
WorkspaceRecordHeader and SettingsShell share that row; keep `actions` for
|
|
247
262
|
non-command controls. Use `header.tabs` for separately selected or routed record
|
|
248
263
|
sections, with counts when useful. Continuous detail documents keep their
|
|
@@ -256,7 +271,18 @@ scale. The menu comes after any primary command in its row, and destructive
|
|
|
256
271
|
entries stay last.
|
|
257
272
|
Page owns inline and block padding, defaulting to the large surface role;
|
|
258
273
|
PageViewport owns scrolling and supplies no inset. Use `Page narrow` for a
|
|
259
|
-
centered single resource
|
|
274
|
+
centered single resource. An `aside` selects the `xl` (80rem) measure unless
|
|
275
|
+
`narrow` or an explicit `maxWidth` wins. Page owns `toolbar`, body lifecycle
|
|
276
|
+
states (`loading`, `error`, `empty`, `onRetry`) and the route header.
|
|
277
|
+
Its four header content slots are `beforeTitle`, `titleSuffix`, `afterDescription`
|
|
278
|
+
and `actions`: pass React content or a callback receiving `{ renderLink, defaultContent }`.
|
|
279
|
+
Compose Badge or MetadataList in those slots; the header adds no avatar or automatic
|
|
280
|
+
metadata shape. `slots.actions` can wrap or return its default responsive command
|
|
281
|
+
row through `defaultContent`; replacing it makes command behavior caller-owned.
|
|
282
|
+
Legacy `slots.back`, `titleBadges`, `titleIcon` and direct `actions` remain supported.
|
|
283
|
+
ResourceHeader, ResourceIndexShell, ResourceShowShell and TabbedResourceShell
|
|
284
|
+
are deprecated; replace them with Page rather than nesting route owners. Their
|
|
285
|
+
existing embedded geometry remains supported. Page headers use dense copy
|
|
260
286
|
gaps. Ordinary cards default to `surface="card"` and `md` padding (24px), with
|
|
261
287
|
an unruled header and a ruled footer. Explicit divider props override provider
|
|
262
288
|
defaults. Use `surface="framed"` for grouped emphasis and `surface="flat"`
|
|
@@ -264,10 +290,73 @@ inside an existing boundary. Card padding supports `none`, `sm` (12px), `md`
|
|
|
264
290
|
(24px) and `lg` (32px); its default regional gap follows the same surface tier
|
|
265
291
|
(`none` retains the 24px gap). The general surface scale also includes 16px. All
|
|
266
292
|
are scaled once by `--space-scale`; control heights and corners remain separate.
|
|
293
|
+
|
|
294
|
+
AppLayout keeps its five variant choices. The shared header-height root now
|
|
295
|
+
defaults to `4rem`. Header-first
|
|
296
|
+
`light-header`/`dark-header` layouts can opt into `contentSurface="inset"`: a
|
|
297
|
+
quiet secondary canvas around the card-colored main surface. Sidebar-first
|
|
298
|
+
`sidebar`/`inset` presets keep their existing flush/inset behavior. Shells own
|
|
299
|
+
one PageViewport; Page supplies the page padding, and header partials occupy the
|
|
300
|
+
shell's single header owner.
|
|
301
|
+
|
|
302
|
+
The catalogue leads with three structures: a global Header shell, the shared
|
|
303
|
+
App sidebar shell and a shadcn-style Inset shell. Single/dual navigation,
|
|
304
|
+
attached/floating framing and collapse behavior configure these structures.
|
|
305
|
+
They reuse the five presets. Full-size previews use
|
|
306
|
+
`?page=shells&layout=header`, `sidebar` or `inset`, optionally with `&theme=dark`.
|
|
307
|
+
The focused `grouped`, `dual`, `dual-inset`, `floating` and `stacked` views remain
|
|
308
|
+
available for comparison.
|
|
309
|
+
|
|
310
|
+
The featured layouts use grouped left navigation or a static left area rail
|
|
311
|
+
beside a full navigation panel. Collapse is a caller choice on
|
|
312
|
+
`AppSidebar`/`LayoutSidebar`, independent of the shell or sidebar skin:
|
|
313
|
+
`collapsible="icon"` minimizes the full panel to icons, `"offcanvas"` hides it,
|
|
314
|
+
and `"none"` keeps it expanded. Current examples default to `icon` and expose
|
|
315
|
+
a preview selector for these modes. In a dual layout the primary area rail
|
|
316
|
+
remains static: icon mode leaves a second compact column, while offcanvas
|
|
317
|
+
leaves only the original rail. One explicit trigger controls the contextual
|
|
318
|
+
panel; selecting an area opens it. Keep the primary rail's `collapsible="none"`
|
|
319
|
+
policy independent of the adjacent panel's policy.
|
|
320
|
+
At narrow widths the inline cluster pans a minimum page canvas while its area
|
|
321
|
+
rail stays pinned; resizing does not silently minimize navigation.
|
|
322
|
+
Both header-first and sidebar-first shells expose `mobileSidebarMode`; choose
|
|
323
|
+
`inline` for this persistent cluster, or retain the default drawer policy.
|
|
324
|
+
Sidebar shells accept
|
|
325
|
+
`slots.sidebar` (primary) and `slots.secondarySidebar` (contextual), with named
|
|
326
|
+
state inherited under one LayoutSidebarProvider. `openPanels` controls expansion and
|
|
327
|
+
`mobilePanel` selects one shared undocked drawer while preserving desktop state.
|
|
328
|
+
`navigationPanel` selects the untargeted trigger/shortcut destination. Existing
|
|
329
|
+
primary `open`/`onOpenChange` remain supported; controlled `openPanels` takes
|
|
330
|
+
precedence. Independent width props and `sidebarPresentation="rail"` use existing
|
|
331
|
+
shell geometry, with no new public theme roots. SidebarNavigationRail supplies
|
|
332
|
+
area navigation on its own background surface with one divider. Its dedicated
|
|
333
|
+
width is 52px at the default roots (a 36px action plus 8px on each side); the
|
|
334
|
+
existing full-sidebar icon-collapse width remains 60px. These are derived
|
|
335
|
+
recipes, not new public settings. SidebarRail remains the collapse affordance.
|
|
336
|
+
|
|
267
337
|
AppSidebar offers pinned `slots.headerStart`/`headerEnd` around its workspace
|
|
268
|
-
region,
|
|
338
|
+
region, grouped navigation and a separated footer. The four `header`,
|
|
339
|
+
`beforeNavigation`, `afterNavigation` and `footer` slots accept content or a
|
|
340
|
+
callback with named state, renderLink and defaultContent. A header node preserves
|
|
341
|
+
its legacy full replacement behavior; callback header content and either footer
|
|
342
|
+
form retain library-owned insets. Before/after navigation content scrolls.
|
|
343
|
+
Ordered `{ id, label?, items }` groups supplement the existing Record form, and
|
|
344
|
+
`renderItemContent` customizes label content inside the accessible row. Use
|
|
345
|
+
`currentUrl` for most-specific destination matching; render contexts distinguish
|
|
346
|
+
the current item from its `ancestor`. In icon mode, searchable sidebars retain
|
|
347
|
+
their search band as an icon that expands and focuses the field. Compact rows
|
|
348
|
+
keep a small gap; default and comfortable density share a roomier row gap,
|
|
349
|
+
with separate caption and group spacing. SidebarNavigationRail also exposes
|
|
350
|
+
`header`, `beforeNavigation`, `afterNavigation` and `footer` slots: header/footer
|
|
351
|
+
stay pinned and before/after content scrolls with navigation. Use
|
|
352
|
+
`surface="transparent"` for navigation that shares a docked shell canvas;
|
|
353
|
+
drawers remain opaque. `adaptTo="container"` keeps an embedded drawer and its
|
|
354
|
+
backdrop inside the provider for compositions that use drawers. Omit a contextual
|
|
355
|
+
group label when its header already supplies that same label. KPI peers use MetricGrid. The
|
|
269
356
|
[complete shell recipe](docs/consumer-skill/examples/app-layout.tsx) demonstrates
|
|
270
|
-
|
|
357
|
+
single- and multiple-region composition with public workspace/account controls
|
|
358
|
+
and hosts route children directly. Its `contextualCollapsible` option defaults
|
|
359
|
+
to `icon`; a supplied `secondarySidebar` can choose its own collapse mode. Its separate
|
|
271
360
|
`WorkspaceExamplePage` owns the illustrative title, Create callback and narrow
|
|
272
361
|
measure; a real route such as `AccountDetailPage` replaces that example.
|
|
273
362
|
|
|
@@ -276,7 +365,13 @@ surfaces win. Leave Card's `icon` slot for a glyph that carries state or a
|
|
|
276
365
|
brand; titles name the subject. `headerPlacement` chooses inside/frame
|
|
277
366
|
composition independently. Independent framed peers use `gap="2xl"`, matching
|
|
278
367
|
Page and TwoColumnLayout's rhythm, since outer rings consume a smaller DOM gap.
|
|
279
|
-
|
|
368
|
+
Card body children use the related (`xl`, 16px) gap by default; explicit
|
|
369
|
+
`contentGap` remains authoritative. SettingsShell spaces direct sections by the
|
|
370
|
+
subjects (`2xl`, 24px) role. MetadataList (`themelia-react-ui/base/metadata-list`)
|
|
371
|
+
keeps semibold labels and normal primary values in both densities. It now adapts
|
|
372
|
+
to its own container by default, with 22/28/38/52/64rem thresholds; pass
|
|
373
|
+
`adaptTo="viewport"` to retain viewport breakpoints. DataTable owns its surface
|
|
374
|
+
and topbar insets; place compact FilterLayout in `topbarContent`, or use DataView.
|
|
280
375
|
Dashboard KPIs use Metric/MetricGrid/MetricBar; quotas use the focused UsageCard
|
|
281
376
|
owner. See [analytics selection](docs/consumer-skill/references/analytics.md) and
|
|
282
377
|
the [resource page recipe](docs/consumer-skill/examples/detail.tsx).
|
|
@@ -293,7 +388,7 @@ and ordinary Card subjects without app chrome. The packaged
|
|
|
293
388
|
offers and real navigation links using the same theme and inset owners.
|
|
294
389
|
|
|
295
390
|
|
|
296
|
-
Popover content uses `type="display"` for substantive content and `type="menu"` for collections. Mixed searchable menus use flush shells and compact region insets. `--radius` defaults to 12px. Cards and popup/command shells use `rounded-
|
|
391
|
+
Popover content uses `type="display"` for substantive content and `type="menu"` for collections. Mixed searchable menus use flush shells and compact region insets. `--radius` defaults to 12px. Cards and popup/command shells use `rounded-surface`; controls, collection/navigation rows and nested bodies use the shared, height-bounded `rounded-radius` role (normally 9px). Both derive from the same public root. Consumers inherit these recipes; see the [theme contract](docs/consumer-skill/references/theming.md) for scaling and custom roots. No separate surface/control radius setting is introduced.
|
|
297
392
|
|
|
298
393
|
|
|
299
394
|
## Agent skill and consumer references
|
|
@@ -342,7 +437,7 @@ visual review remain separate.
|
|
|
342
437
|
|
|
343
438
|
Maintainers run `npm run docs:sync-skill` after changes to exports, types, selection guidance, peers or tokens. `npm run check:skill` requires a fresh library build and rejects stale source-backed references, built declaration exports and broken reference links. `prepack` checks source-backed references without rebuilding; `prepublishOnly` builds fresh assets and verifies built guidance. `check:package` verifies the complete shipped skill, strictly compiles the basic recipes without optional peers and every recipe with its required peers, and executes installed shell/resource-page and workflow checks.
|
|
344
439
|
|
|
345
|
-
Build portable consumer documentation with `npm run build` followed by `npm run build:docs`. The generated [static entry](dist-docs/index.html) links to `dist-docs/2.0.
|
|
440
|
+
Build portable consumer documentation with `npm run build` followed by `npm run build:docs`. The generated [static entry](dist-docs/index.html) links to `dist-docs/2.0.5/` for the current version. Each version preserves the complete skill and all declaration files, supports search with the same finder, and uses relative links under any hosting subdirectory. Serve the entire artifact over HTTP; it needs no external CDN. Run `npm run check:static-docs` to check generated asset paths. The future hosting destination remains pending.
|
|
346
441
|
|
|
347
442
|
`npm run check:agent` runs focused agent-consumption fixtures and built skill alignment. `npm run check:release` performs the real serial local build/package/browser/agent/static-documentation gate; it does not publish or deploy. `npm run check:quick` runs the everyday core (contract, lint, design lint, typecheck, unit tests, build). See the [release guide](docs/releasing.md) and [draft changelog](CHANGELOG.md). There is no hosted CI; every check runs locally, when you choose. These commands verify locally; publication and deployment remain separate actions.
|
|
348
443
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useStrings as e } from "./lib/strings.js";
|
|
3
|
-
import { t } from "./utils-
|
|
4
|
-
import { c as n } from "./typography-
|
|
3
|
+
import { t } from "./utils-B6kKb8jB.js";
|
|
4
|
+
import { c as n } from "./typography-BQnine1k.js";
|
|
5
5
|
import { t as r } from "./focus-recipes-B653VaLq.js";
|
|
6
|
-
import { t as i } from "./motion-recipes-
|
|
7
|
-
import { t as a } from "./structure-
|
|
6
|
+
import { t as i } from "./motion-recipes-DitYv6P2.js";
|
|
7
|
+
import { t as a } from "./structure-DuxKl954.js";
|
|
8
8
|
import { t as o } from "./interaction-recipes-XR9ZpVYL.js";
|
|
9
9
|
import { t as s } from "./disclosure-panel-B0HFNZ9x.js";
|
|
10
|
-
import { t as c } from "./icon-badge-
|
|
10
|
+
import { t as c } from "./icon-badge-DZF-YjQp.js";
|
|
11
11
|
import * as l from "react";
|
|
12
12
|
import { forwardRef as u } from "react";
|
|
13
13
|
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
@@ -61,7 +61,7 @@ function v({ className: e, children: n, render: r, ...a }) {
|
|
|
61
61
|
var y = l.forwardRef(function({ className: e, ...n }, r) {
|
|
62
62
|
return /* @__PURE__ */ d(h, {
|
|
63
63
|
ref: r,
|
|
64
|
-
className: t("accordion--component rounded-
|
|
64
|
+
className: t("accordion--component rounded-surface border-border bg-card text-card-foreground", e),
|
|
65
65
|
...n
|
|
66
66
|
});
|
|
67
67
|
});
|
|
@@ -111,12 +111,12 @@ S.displayName = "AccordionContent";
|
|
|
111
111
|
//#region src/components/base/accordion/accordion-variants.ts
|
|
112
112
|
var C = {
|
|
113
113
|
card: "gap-space-md border-0 rounded-none bg-transparent text-inherit overflow-visible",
|
|
114
|
-
bordered: "rounded-
|
|
115
|
-
flat: "border-0 rounded-none bg-transparent text-inherit overflow-visible"
|
|
114
|
+
bordered: "rounded-surface border border-border bg-card text-card-foreground overflow-hidden",
|
|
115
|
+
flat: "-mx-row-x w-auto border-0 rounded-none bg-transparent text-inherit overflow-visible"
|
|
116
116
|
}, w = {
|
|
117
|
-
card: "border border-border bg-card text-card-foreground rounded-
|
|
117
|
+
card: "border border-border bg-card text-card-foreground rounded-surface overflow-hidden",
|
|
118
118
|
bordered: "bg-transparent not-last:border-b border-border",
|
|
119
|
-
flat: "border-0 not-last:border-b-0 bg-transparent rounded-
|
|
119
|
+
flat: "border-0 not-last:border-b-0 bg-transparent rounded-surface overflow-hidden"
|
|
120
120
|
}, T = "items-center gap-space-lg px-row-x py-row-y text-start hover:no-underline", E = {
|
|
121
121
|
withMedallion: "ps-[calc(var(--row-x)*var(--space-scale)+var(--avatar)+0.75rem*var(--space-scale))] pe-row-x pt-0",
|
|
122
122
|
withInline: "ps-[calc(var(--row-x)*var(--space-scale)+var(--icon)*1.25+0.75rem*var(--space-scale))] pe-row-x pt-0",
|
|
@@ -205,4 +205,4 @@ function A({ iconStyle: e, icon: n, reserveSpace: r }) {
|
|
|
205
205
|
//#endregion
|
|
206
206
|
export { C as a, S as c, w as i, b as l, D as n, T as o, E as r, y as s, O as t, x as u };
|
|
207
207
|
|
|
208
|
-
//# sourceMappingURL=accordion-
|
|
208
|
+
//# sourceMappingURL=accordion-B9MHG0cT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accordion-B9MHG0cT.js","names":["Accordion","AccordionPrimitive","AccordionItem","AccordionTrigger","AccordionContent","Accordion","React","PrimitiveAccordion","PrimitiveAccordionItem","PrimitiveAccordionTrigger","PrimitiveAccordionContent","Accordion","Text","focusRecipes","motionRecipes","Stack","interactionRecipes","DisclosurePanelElement","IconBadge","React$1","Accordion$2","props","Accordion","cn","className","AccordionItem$1","AccordionTrigger$1","children","ChevronDownIcon","AccordionContent$1","panelProps","Accordion$1","AccordionItem","AccordionTrigger","isSimpleText","AccordionContent","ACCORDION_ROOT_VARIANT_CLASS","ACCORDION_ITEM_VARIANT_CLASS","ACCORDION_TRIGGER_BASE","ACCORDION_CONTENT_PADDING","defaultSmartAccordionStrings","SmartAccordion","forwardRef","stringsProp","strings","useStrings","hasIconColumn","iconStyle","items","item","contentPadding","triggerGridClass","onValueChange","next","variant","itemClassName","triggerClassName","SmartAccordionIcon","isSimpleContent","contentClassName","content","reserveSpace","icon"],"sources":["../src/components/ui/accordion.tsx","../src/components/base/accordion/accordion.tsx","../src/components/base/accordion/accordion-variants.ts","../src/components/base/accordion/accordion.strings.ts","../src/components/base/accordion/smart-accordion.tsx"],"sourcesContent":["import { DisclosurePanelElement } from './disclosure-panel';\nimport { motionRecipes } from '../../lib/motion-recipes';\nimport { Accordion as AccordionPrimitive } from \"@base-ui/react/accordion\"\n\nimport { cn } from \"../../lib/utils\"\nimport { ChevronDownIcon } from \"lucide-react\"\n\nfunction Accordion({ className, ...props }: AccordionPrimitive.Root.Props) {\n return (\n <AccordionPrimitive.Root\n data-slot=\"accordion\"\n className={cn(\"border-border accordion--component flex w-full flex-col border box-border overflow-hidden\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionItem({ className, ...props }: AccordionPrimitive.Item.Props) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn(\"border-border accordion-item--component border-b last:border-b-0\", className)}\n {...props}\n />\n )\n}\n\nfunction AccordionTrigger({\n className,\n children,\n ...props\n}: AccordionPrimitive.Trigger.Props) {\n return (\n <AccordionPrimitive.Header className=\"accordion-header m-0\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\"accordion-trigger--component flex w-full items-center justify-between border-0 bg-transparent outline-none cursor-pointer box-border\", className)}\n {...props}\n >\n {children}\n <ChevronDownIcon data-slot=\"accordion-trigger-icon\" className={cn(\"accordion-trigger--icon size-icon text-muted-foreground shrink-0 [[aria-expanded=true]_&]:rotate-180\", motionRecipes.chevron)} />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n}\n\nfunction AccordionContent({\n className,\n children,\n render,\n ...props\n}: AccordionPrimitive.Panel.Props) {\n return (\n <AccordionPrimitive.Panel\n data-slot=\"accordion-content\"\n className={cn(\"accordion-content--component box-border text-inherit h-(--accordion-panel-height)\", motionRecipes.disclosure, className)}\n {...props}\n render={(panelProps, state) => <DisclosurePanelElement props={panelProps} state={state} render={render} heightVariable=\"--accordion-panel-height\" />}\n >\n {children}\n </AccordionPrimitive.Panel>\n )\n}\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n\n","/**\n * Accordion — tokenized base wrapper around the shadcn/Base UI primitive.\n *\n * The internal primitive intentionally keeps shadcn's roomy defaults. This\n * public layer calibrates them for admin surfaces: radius tokens, 12px row\n * insets, density-aware vertical rhythm, quiet hover/focus treatments, and\n * matching trigger/content columns. Consumers retain the complete compound\n * API and can override any treatment with `className`.\n */\nimport * as React from 'react';\n\nimport {\n\tAccordion as PrimitiveAccordion,\n\tAccordionContent as PrimitiveAccordionContent,\n\tAccordionItem as PrimitiveAccordionItem,\n\tAccordionTrigger as PrimitiveAccordionTrigger,\n} from '../../ui/accordion';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { interactionRecipes } from '../../../lib/interaction-recipes';\n\nexport type AccordionProps = React.ComponentPropsWithoutRef<typeof PrimitiveAccordion>;\nexport type AccordionItemProps = React.ComponentPropsWithoutRef<typeof PrimitiveAccordionItem>;\nexport type AccordionTriggerProps = React.ComponentPropsWithoutRef<typeof PrimitiveAccordionTrigger>;\nexport type AccordionContentProps = React.ComponentPropsWithoutRef<typeof PrimitiveAccordionContent>;\n\nconst Accordion = React.forwardRef<React.ElementRef<typeof PrimitiveAccordion>, AccordionProps>(\n\tfunction Accordion({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<PrimitiveAccordion\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'accordion--component rounded-surface border-border bg-card text-card-foreground',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nAccordion.displayName = 'Accordion';\n\nconst AccordionItem = React.forwardRef<React.ElementRef<typeof PrimitiveAccordionItem>, AccordionItemProps>(\n\tfunction AccordionItem({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<PrimitiveAccordionItem\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'accordion-item--component border-border',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<React.ElementRef<typeof PrimitiveAccordionTrigger>, AccordionTriggerProps>(\n\tfunction AccordionTrigger({ className, children, ...props }, ref) {\n\t\tconst isSimpleText = typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint';\n\t\treturn (\n\t\t\t<PrimitiveAccordionTrigger\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'accordion-trigger--component min-h-action items-center gap-space-lg px-row-x py-row-y',\n\t\t\t\t\t`text-start text-inherit text-sm font-medium transition-colors ${interactionRecipes.rowHover} hover:no-underline`,\n\t\t\t\t\t// Inset: the shell clips its rounded corners, so an outer ring was cut off.\n\t\t\t\t\t`focus-visible:z-10 ${focusRecipes.inset}`,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{isSimpleText ? (\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Text>\n\t\t\t\t) : children}\n\t\t\t</PrimitiveAccordionTrigger>\n\t\t);\n\t},\n);\nAccordionTrigger.displayName = 'AccordionTrigger';\n\nconst AccordionContent = React.forwardRef<React.ElementRef<typeof PrimitiveAccordionContent>, AccordionContentProps>(\n\tfunction AccordionContent({ className, children, ...props }, ref) {\n\t\tconst isSimpleText = typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint';\n\t\treturn (\n\t\t\t<PrimitiveAccordionContent\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'accordion-content--component px-row-x pb-space-lg text-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{isSimpleText ? (\n\t\t\t\t\t<Text tag=\"div\" size=\"inherit\" lineHeight=\"relaxed\" className=\"text-inherit\">\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</Text>\n\t\t\t\t) : children}\n\t\t\t</PrimitiveAccordionContent>\n\t\t);\n\t},\n);\nAccordionContent.displayName = 'AccordionContent';\n\nexport {\n\tAccordion,\n\tAccordionItem,\n\tAccordionTrigger,\n\tAccordionContent,\n};\n","/**\n * Shared accordion-shell variant classes — used by both `SmartAccordion`\n * and any blocks surface that builds on `base/accordion` directly\n * (e.g. `blocks/onboarding/checklist`).\n *\n * Exported because two consumers already keep it in lockstep; a third\n * one will copy this exact map. Centralising means a future tweak\n * (e.g. tighten `card` items to `border-border/70`) propagates.\n *\n * Padding tokens for trigger / content live alongside so the rhythm\n * is shared too:\n *\n * - Trigger: `gap-space-lg px-row-x py-row-y` — density-driven,\n * `<UIProvider>`\n * override flows through.\n * - Content padding accounts for the base panel's `px-row-x`.\n * Medallion and inline rows use shared media/spacing tokens, and\n * no-icon rows add no extra left padding so body copy tracks the\n * trigger text column instead of drifting.\n */\nimport type { DisclosureSurface } from '../../../lib/component-vocabulary';\n\nexport type AccordionShellVariant = DisclosureSurface;\n\n// Flat sits inside a surface that already owns the inset. It outdents by the row\n// inset, so trigger and panel text align with that surface's content edge while\n// the hover fill and focus edge keep their room in the surface gutter.\nexport const ACCORDION_ROOT_VARIANT_CLASS: Record<AccordionShellVariant, string> = {\n\tcard: 'gap-space-md border-0 rounded-none bg-transparent text-inherit overflow-visible',\n\tbordered: 'rounded-surface border border-border bg-card text-card-foreground overflow-hidden',\n\tflat: '-mx-row-x w-auto border-0 rounded-none bg-transparent text-inherit overflow-visible',\n};\n\n// The chevron and the revealed panel carry the open state; an open item is not\n// tinted into a box. Rounded items clip their trigger so its inset focus ring and\n// hover fill follow the item's corners.\nexport const ACCORDION_ITEM_VARIANT_CLASS: Record<AccordionShellVariant, string> = {\n\tcard: 'border border-border bg-card text-card-foreground rounded-surface overflow-hidden',\n\tbordered: 'bg-transparent not-last:border-b border-border',\n\tflat: 'border-0 not-last:border-b-0 bg-transparent rounded-surface overflow-hidden',\n};\n\nexport const ACCORDION_TRIGGER_BASE =\n\t'items-center gap-space-lg px-row-x py-row-y text-start hover:no-underline';\n\n/**\n * Content-padding presets keyed off the leading-icon width. Use\n * `withMedallion` when the trigger renders a default `IconBadge`\n * plus the shared row gap so body text aligns under the title at every\n * consumer density.\n */\nexport const ACCORDION_CONTENT_PADDING = {\n\t// Composed from root tokens so a scoped density/space boundary applies (the\n\t// `--spacing-*` aliases resolve once at :root inside arbitrary values).\n\twithMedallion: 'ps-[calc(var(--row-x)*var(--space-scale)+var(--avatar)+0.75rem*var(--space-scale))] pe-row-x pt-0',\n\twithInline: 'ps-[calc(var(--row-x)*var(--space-scale)+var(--icon)*1.25+0.75rem*var(--space-scale))] pe-row-x pt-0',\n\twithoutIcon: 'px-row-x pt-0',\n} as const;\n","/**\n * Strings for `SmartAccordion`. There aren't many — Radix handles the\n * trigger ARIA states automatically, so the only library-owned copy is\n * the optional landmark label on the wrapping nav region. Consumers\n * override per-item `title` / `badge` / `content` directly via\n * `SmartAccordionItem` props (the strings live in the data, not here).\n */\nexport interface SmartAccordionStrings {\n\t/**\n\t * Sets `aria-label` on the wrapping element so screen readers can name\n\t * the accordion region. Optional — when absent, no aria-label is set.\n\t */\n\tregionAriaLabel?: string;\n}\n\nexport const defaultSmartAccordionStrings: SmartAccordionStrings = {\n\tregionAriaLabel: undefined,\n};\n","/**\n * SmartAccordion — the canonical \"icon + title + optional badge + body\"\n * accordion pattern, with three visual variants for the surface chrome\n * (`card` | `bordered` | `flat`) and three icon framings (`medallion` |\n * `inline` | `none`).\n *\n * Composes the wrapped `base/accordion` parts (rule 2 — blocks-style\n * convenience built from re-exports, not the raw shadcn primitive).\n *\n * For richer rows (multi-line metadata, custom layouts), drop down to\n * the compound API:\n *\n * import { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n * from '.';\n */\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { IconBadge } from '../display/icon-badge';\nimport { Stack } from '../structure';\nimport { Text } from '../../typography';\nimport { useStrings } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\n\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './accordion';\nimport {\n\tACCORDION_CONTENT_PADDING,\n\tACCORDION_ITEM_VARIANT_CLASS,\n\tACCORDION_ROOT_VARIANT_CLASS,\n\tACCORDION_TRIGGER_BASE,\n} from './accordion-variants';\nimport { defaultSmartAccordionStrings } from './accordion.strings';\nimport type {\n\tSmartAccordionIconStyle,\n\tSmartAccordionProps,\n} from './accordion.types';\n\n/**\n * Bounded accordion composition for repeated icon, title, description, badge,\n * and body sections. Use the compound Accordion parts when row structure or\n * per-item presentation differs.\n */\nexport const SmartAccordion = forwardRef<HTMLDivElement, SmartAccordionProps>(function SmartAccordion({\n\titems,\n\tmultiple = false,\n\tdefaultValue,\n\tvalue,\n\tonValueChange,\n\tvariant = 'bordered',\n\ticonStyle = 'inline',\n\tclassName,\n\titemClassName,\n\ttriggerClassName,\n\tcontentClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst strings = useStrings(defaultSmartAccordionStrings, stringsProp);\n\tconst hasIconColumn = iconStyle !== 'none' && items.some((item) => item.icon != null);\n\tconst contentPadding =\n\t\t!hasIconColumn\n\t\t\t? ACCORDION_CONTENT_PADDING.withoutIcon\n\t\t\t: iconStyle === 'medallion'\n\t\t\t? ACCORDION_CONTENT_PADDING.withMedallion\n\t\t\t: ACCORDION_CONTENT_PADDING.withInline;\n\tconst triggerGridClass = !hasIconColumn\n\t\t? 'grid-cols-[minmax(0,1fr)]'\n\t\t: 'grid-cols-[auto_minmax(0,1fr)]';\n\treturn (\n\t\t<Accordion\n\t\t\tref={ref}\n\t\t\tmultiple={multiple}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tvalue={value}\n\t\t\tonValueChange={\n\t\t\t\tonValueChange\n\t\t\t\t\t? (next) => onValueChange(next as string[])\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t\taria-label={strings.regionAriaLabel}\n\t\t\tdata-variant={variant}\n\t\t\tdata-icon-style={iconStyle}\n\t\t\tclassName={cn('smart-accordion--component', ACCORDION_ROOT_VARIANT_CLASS[variant], className)}\n\t\t>\n\t\t\t{items.map((item) => (\n\t\t\t\t<AccordionItem\n\t\t\t\t\tkey={item.value}\n\t\t\t\t\tvalue={item.value}\n\t\t\t\t\tclassName={cn('smart-accordion--item', ACCORDION_ITEM_VARIANT_CLASS[variant], itemClassName)}\n\t\t\t\t>\n\t\t\t\t\t<AccordionTrigger\n\t\t\t\t\t\tclassName={cn('smart-accordion--trigger', ACCORDION_TRIGGER_BASE, triggerClassName)}\n\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className={cn('grid min-w-0 flex-1 items-center gap-x-space-lg', triggerGridClass)}>\n\t\t\t\t\t\t\t<SmartAccordionIcon\n\t\t\t\t\t\t\t\ticonStyle={iconStyle}\n\t\t\t\t\t\t\t\ticon={item.icon}\n\t\t\t\t\t\t\t\treserveSpace={hasIconColumn}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Stack render={<span />} gap=\"dense\" className=\"smart-accordion--heading flex-1\">\n\t\t\t\t\t\t\t\t<span className=\"flex min-w-0 flex-wrap items-center gap-x-space-md gap-y-space-xs\">\n\t\t\t\t\t\t\t\t\t{isSimpleContent(item.title) ? (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"inherit\" weight=\"semibold\" className=\"smart-accordion--title min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t) : item.title}\n\t\t\t\t\t\t\t\t\t{item.badge != null && (\n\t\t\t\t\t\t\t\t\t\t<span className=\"smart-accordion--badge inline-flex shrink-0\">{item.badge}</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{!!item.description && (\n\t\t\t\t\t\t\t\t\tisSimpleContent(item.description) ? (\n\t\t\t\t\t\t\t\t\t\t<Text tag=\"span\" type=\"secondary\" className=\"smart-accordion--description min-w-0\">\n\t\t\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t) : item.description\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</AccordionTrigger>\n\t\t\t\t\t<AccordionContent\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'smart-accordion--content',\n\t\t\t\t\t\t\tcontentPadding,\n\t\t\t\t\t\t\tcontentClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isSimpleContent(item.content) ? (\n\t\t\t\t\t\t\t<Text tag=\"div\" type=\"secondary\" lineHeight=\"relaxed\">\n\t\t\t\t\t\t\t\t{item.content}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t) : item.content}\n\t\t\t\t\t</AccordionContent>\n\t\t\t\t</AccordionItem>\n\t\t\t))}\n\t\t</Accordion>\n\t);\n});\n\nSmartAccordion.displayName = 'SmartAccordion';\n\nfunction isSimpleContent(content: ReactNode): content is string | number | bigint {\n\treturn typeof content === 'string' || typeof content === 'number' || typeof content === 'bigint';\n}\n\nfunction SmartAccordionIcon({\n\ticonStyle,\n\ticon,\n\treserveSpace,\n}: {\n\ticonStyle: SmartAccordionIconStyle;\n\ticon?: ReactNode;\n\treserveSpace: boolean;\n}) {\n\tif (iconStyle === 'none' || !reserveSpace) return null;\n\tif (!icon) {\n\t\treturn (\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'smart-accordion--icon inline-flex shrink-0',\n\t\t\t\t\ticonStyle === 'inline' ? 'size-icon-lg' : 'size-avatar',\n\t\t\t\t)}\n\t\t\t/>\n\t\t);\n\t}\n\tif (iconStyle === 'inline') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"smart-accordion--icon inline-flex size-icon-lg shrink-0 self-center text-muted-foreground [&>svg]:size-icon\"\n\t\t\t>\n\t\t\t\t{icon}\n\t\t\t</span>\n\t\t);\n\t}\n\treturn (\n\t\t<IconBadge size=\"md\" tone=\"neutral\" shape=\"circle\" aria-hidden=\"true\" className=\"smart-accordion--icon self-center\">\n\t\t\t{icon}\n\t\t</IconBadge>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import {
|
|
2
|
+
import { S as e, d as t } from "./ui-provider-C-74NVLc.js";
|
|
3
3
|
import { useStrings as n } from "./lib/strings.js";
|
|
4
|
-
import { t as r } from "./utils-
|
|
5
|
-
import { n as i } from "./buttons-
|
|
6
|
-
import { c as a } from "./typography-
|
|
4
|
+
import { t as r } from "./utils-B6kKb8jB.js";
|
|
5
|
+
import { n as i } from "./buttons-BedGfygC.js";
|
|
6
|
+
import { c as a } from "./typography-BQnine1k.js";
|
|
7
7
|
import { t as o } from "./composition.recipes-COdiFhxB.js";
|
|
8
|
-
import { i as s, t as c } from "./popover.recipes-
|
|
9
|
-
import { t as l } from "./collection-content-
|
|
10
|
-
import { a as u, d, g as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dropdown-menu-
|
|
8
|
+
import { i as s, t as c } from "./popover.recipes-DdiEp0rd.js";
|
|
9
|
+
import { t as l } from "./collection-content-gDh1v6O4.js";
|
|
10
|
+
import { a as u, d, g as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dropdown-menu-CLs8Lihj.js";
|
|
11
11
|
import y, { isValidElement as b } from "react";
|
|
12
12
|
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
13
13
|
import { MoreHorizontal as w } from "lucide-react";
|
|
@@ -149,64 +149,67 @@ function F(e) {
|
|
|
149
149
|
function I(e, t) {
|
|
150
150
|
typeof e == "function" ? e(t) : e && (e.current = t);
|
|
151
151
|
}
|
|
152
|
-
var L = y.forwardRef(function({ actions: o,
|
|
153
|
-
let [
|
|
154
|
-
if (
|
|
155
|
-
let
|
|
156
|
-
tone:
|
|
157
|
-
buttonStyle:
|
|
158
|
-
size:
|
|
159
|
-
iconOnly: !
|
|
160
|
-
className:
|
|
161
|
-
}, { tone:
|
|
162
|
-
...
|
|
163
|
-
...
|
|
164
|
-
className: r(
|
|
165
|
-
},
|
|
152
|
+
var L = y.forwardRef(function({ actions: o, open: c, onOpenChange: l, finalFocus: u, label: d, icon: m = T.icon, srText: h, context: _ = "inline", buttonProps: b, align: w = "end", side: D = "bottom", contentClassName: k = "", width: j = "w-auto", closeOnSelect: M = !0, density: N = "default", labelVisibility: P = "visible", preserveOrder: L = !1, renderLink: R, renderTrigger: z, strings: B }, V) {
|
|
153
|
+
let [H, U] = y.useState(!1), W = c ?? H, { defaultScale: G } = t(), K = n(E, B), ee = h ?? K.openMenuLabel, q = y.useMemo(() => O(o, L), [o, L]);
|
|
154
|
+
if (q.length === 0) return null;
|
|
155
|
+
let J = !!d && P === "visible", te = !!d && P === "responsive", Y = T.context[_] ?? T.context.inline, X = J ? b?.size ?? "sm" : e(b?.size, G), Z = X === "sm" ? "size-action-sm" : X === "lg" ? "size-action-lg" : "size-action", Q = {
|
|
156
|
+
tone: Y.tone,
|
|
157
|
+
buttonStyle: Y.buttonStyle,
|
|
158
|
+
size: X,
|
|
159
|
+
iconOnly: !J,
|
|
160
|
+
className: J ? void 0 : te ? `${Z} p-0 sm:w-auto sm:gap-space-sm sm:px-control-sm` : r(`${Z} p-0`, Y.glyph)
|
|
161
|
+
}, { tone: ne = Y.tone, buttonStyle: re = Y.buttonStyle, size: ie = X, iconOnly: ae = !J, className: oe, ...se } = {
|
|
162
|
+
...Q,
|
|
163
|
+
...b,
|
|
164
|
+
className: r(Q.className, b?.className)
|
|
165
|
+
}, ce = P === "hidden" ? "sr-only" : P === "responsive" ? "sr-only sm:not-sr-only" : void 0, $ = A(m), le = d ? /* @__PURE__ */ C(x, { children: [$, /* @__PURE__ */ S(a, {
|
|
166
166
|
tag: "span",
|
|
167
167
|
size: "inherit",
|
|
168
168
|
weight: "medium",
|
|
169
169
|
lineHeight: "tight",
|
|
170
|
-
className: r("whitespace-nowrap text-inherit",
|
|
171
|
-
children:
|
|
170
|
+
className: r("whitespace-nowrap text-inherit", ce),
|
|
171
|
+
children: d
|
|
172
172
|
})] }) : /* @__PURE__ */ C(x, { children: [$, /* @__PURE__ */ S(a, {
|
|
173
173
|
tag: "span",
|
|
174
174
|
size: "inherit",
|
|
175
175
|
className: "sr-only",
|
|
176
|
-
children:
|
|
176
|
+
children: ee
|
|
177
177
|
})] });
|
|
178
178
|
return /* @__PURE__ */ C(v, {
|
|
179
|
-
open:
|
|
180
|
-
onOpenChange:
|
|
181
|
-
|
|
179
|
+
open: W,
|
|
180
|
+
onOpenChange: (e, t) => {
|
|
181
|
+
l?.(e, t), c === void 0 && !t.isCanceled && U(e);
|
|
182
|
+
},
|
|
183
|
+
children: [/* @__PURE__ */ S(f, { render: z ?? ((e) => {
|
|
182
184
|
let { ref: t } = e, n = (e) => {
|
|
183
|
-
I(t, e), I(
|
|
185
|
+
I(t, e), I(V, e);
|
|
184
186
|
};
|
|
185
187
|
return /* @__PURE__ */ S(i, {
|
|
186
|
-
...
|
|
188
|
+
...se,
|
|
187
189
|
...e,
|
|
188
190
|
ref: n,
|
|
189
191
|
type: "button",
|
|
190
|
-
tone:
|
|
191
|
-
buttonStyle:
|
|
192
|
-
size:
|
|
193
|
-
iconOnly:
|
|
194
|
-
"data-context":
|
|
195
|
-
className: r("action-menu--component",
|
|
196
|
-
children:
|
|
192
|
+
tone: ne,
|
|
193
|
+
buttonStyle: re,
|
|
194
|
+
size: ie,
|
|
195
|
+
iconOnly: ae,
|
|
196
|
+
"data-context": _,
|
|
197
|
+
className: r("action-menu--component", oe, e.className),
|
|
198
|
+
children: le
|
|
197
199
|
});
|
|
198
200
|
}) }), /* @__PURE__ */ S(g, {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
201
|
+
finalFocus: u,
|
|
202
|
+
density: N === "table" ? "compact" : N,
|
|
203
|
+
align: w,
|
|
204
|
+
side: D,
|
|
205
|
+
className: r("action-menu--content", j, s.menuMin, k),
|
|
203
206
|
children: /* @__PURE__ */ S(p, {
|
|
204
207
|
className: "action-menu--group",
|
|
205
208
|
children: F({
|
|
206
|
-
actions:
|
|
207
|
-
density:
|
|
208
|
-
closeOnSelect:
|
|
209
|
-
renderLink:
|
|
209
|
+
actions: q,
|
|
210
|
+
density: N,
|
|
211
|
+
closeOnSelect: M,
|
|
212
|
+
renderLink: R
|
|
210
213
|
})
|
|
211
214
|
})
|
|
212
215
|
})]
|
|
@@ -278,4 +281,4 @@ R.displayName = "ActionButtons";
|
|
|
278
281
|
//#endregion
|
|
279
282
|
export { L as n, E as r, R as t };
|
|
280
283
|
|
|
281
|
-
//# sourceMappingURL=action-menu-
|
|
284
|
+
//# sourceMappingURL=action-menu-Dr8K-ghE.js.map
|