themelia-ui 3.0.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/themelia-ui/SKILL.md +60 -33
- package/.agents/skills/themelia-ui/manifest.json +23 -0
- package/.agents/skills/themelia-ui/references/api-compatibility.md +5 -4
- package/.agents/skills/themelia-ui/references/blocks.md +123 -0
- package/.agents/skills/themelia-ui/references/composition-ladder.md +8 -8
- package/.agents/skills/themelia-ui/references/composition.md +100 -19
- package/.agents/skills/themelia-ui/references/forms.md +23 -3
- package/.agents/skills/themelia-ui/references/framework-wiring.md +41 -13
- package/.agents/skills/themelia-ui/references/i18n.md +4 -2
- package/.agents/skills/themelia-ui/references/imports.md +104 -104
- package/.agents/skills/themelia-ui/references/installation.md +60 -31
- package/.agents/skills/themelia-ui/references/migration.md +156 -5
- package/.agents/skills/themelia-ui/references/provider-and-scoping.md +37 -25
- package/.agents/skills/themelia-ui/references/reference-workflows.md +43 -0
- package/.agents/skills/themelia-ui/references/structure-and-spacing.md +147 -0
- package/.agents/skills/themelia-ui/references/theming.md +174 -131
- package/.agents/skills/themelia-ui/references/troubleshooting.md +88 -30
- package/.agents/skills/themelia-ui/references/verification.md +60 -5
- package/CHANGELOG.md +212 -0
- package/README.md +48 -60
- package/dist/accordion-CHuzMmWL.js +143 -0
- package/dist/{action-menu-BNLURfMK.js → action-menu-BwiL_F6I.js} +35 -33
- package/dist/{alert-dialog-BMVo6Z-8.js → alert-dialog-Cg2HhuBe.js} +1 -1
- package/dist/avatar-Dc_BNYfB.js +93 -0
- package/dist/badge-VlJVZjdm.js +45 -0
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/alert-dialog.js +1 -1
- package/dist/base/aspect-ratio.js +3 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +2 -2
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +1 -1
- package/dist/base/carousel.js +6 -4
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/context-menu.js +22 -21
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +1 -1
- package/dist/base/dialog.js +1 -1
- package/dist/base/display.js +1 -1
- package/dist/base/dropdown-menu.js +1 -1
- package/dist/base/feedback.js +1 -1
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +1 -1
- package/dist/base/hover-card.js +26 -23
- package/dist/base/input-group.js +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/label.js +1 -1
- package/dist/base/menubar.js +20 -14
- package/dist/base/navigation-menu.js +47 -38
- package/dist/base/navigation.js +1 -1
- package/dist/base/otp-input.js +36 -30
- package/dist/base/overlay.js +1 -1
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +51 -47
- package/dist/base/repeaters.js +1 -1
- package/dist/base/resizable.js +2 -0
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +1 -1
- package/dist/base/timeline.js +1 -1
- package/dist/base/toaster.js +1 -1
- package/dist/base/toggle.js +21 -15
- package/dist/base/toolbar.js +1 -1
- package/dist/base/tooltip.js +1 -1
- package/dist/base/typography.js +2 -2
- package/dist/base/upload.js +1 -1
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-BZYNKXdV.js → batch-action-bar-DZVMVW83.js} +11 -8
- package/dist/{admin/patterns → blocks/admin}/access.js +79 -76
- package/dist/blocks/admin/commerce.js +2493 -0
- package/dist/{patterns → blocks}/analytics.js +312 -303
- package/dist/{patterns → blocks}/onboarding.js +27 -23
- package/dist/{patterns → blocks}/timelines.js +1 -1
- package/dist/buttons-BX2JfL5X.js +173 -0
- package/dist/cards-Ddhz43Bz.js +279 -0
- package/dist/chart-BkK3Xm10.js +201 -0
- package/dist/choice-inputs-NwRxvmZN.js +694 -0
- package/dist/combobox-519ubijc.js +292 -0
- package/dist/command-JjApYFds.js +156 -0
- package/dist/comments-CCQ2QRaU.js +1443 -0
- package/dist/components/base/action-menu/action-menu.d.ts +1 -1
- package/dist/components/base/action-menu/action-menu.types.d.ts +2 -2
- package/dist/components/base/avatar/avatar.d.ts +5 -2
- package/dist/components/base/badge/badge.d.ts +10 -10
- package/dist/components/base/badge/badge.variants.d.ts +1 -2
- package/dist/components/base/badge/index.d.ts +1 -2
- package/dist/components/base/buttons/button.d.ts +9 -8
- package/dist/components/base/buttons/button.types.d.ts +2 -2
- package/dist/components/base/buttons/index.d.ts +1 -1
- package/dist/components/base/buttons/text-button.d.ts +1 -1
- package/dist/components/base/cards/card-actions.d.ts +1 -1
- package/dist/components/base/cards/card.d.ts +3 -1
- package/dist/components/base/cards/partials/card-header.d.ts +2 -1
- package/dist/components/base/choice-inputs/choice.types.d.ts +2 -2
- package/dist/components/base/choice-inputs/partials/choice-parts.d.ts +3 -3
- package/dist/components/base/command/command.d.ts +5 -2
- package/dist/components/base/display/icon-badge.d.ts +5 -3
- package/dist/components/base/display/index.d.ts +1 -1
- package/dist/components/base/display/metadata-list.d.ts +6 -6
- package/dist/components/base/display/metadata-value.d.ts +1 -1
- package/dist/components/base/display/separator.d.ts +2 -2
- package/dist/components/base/feedback/alert.d.ts +3 -2
- package/dist/components/base/feedback/empty.d.ts +5 -4
- package/dist/components/base/feedback/progress-circle.d.ts +2 -2
- package/dist/components/base/feedback/progress.d.ts +3 -1
- package/dist/components/base/forms/form-field.d.ts +2 -2
- package/dist/components/base/input-group/input-group.d.ts +8 -10
- package/dist/components/base/item/item.d.ts +2 -2
- package/dist/components/base/overlay/index.d.ts +1 -1
- package/dist/components/base/overlay/overlay.types.d.ts +7 -5
- package/dist/components/base/qr-code/qr-code.d.ts +4 -4
- package/dist/components/base/sheet/sheet.d.ts +1 -1
- package/dist/components/base/sidebar/sidebar.d.ts +9 -13
- package/dist/components/base/spinner/spinner.d.ts +2 -2
- package/dist/components/base/structure/adaptive-grid.d.ts +3 -3
- package/dist/components/base/structure/bleed.d.ts +4 -2
- package/dist/components/base/structure/grid.d.ts +10 -4
- package/dist/components/base/structure/index.d.ts +1 -1
- package/dist/components/base/structure/split.d.ts +4 -3
- package/dist/components/base/structure/stack.d.ts +5 -5
- package/dist/components/base/structure/structure.maps.d.ts +2 -1
- package/dist/components/base/structure/structure.types.d.ts +10 -4
- package/dist/components/base/toggle/toggle.d.ts +2 -2
- package/dist/components/base/toolbar/toolbar.d.ts +3 -3
- package/dist/components/base/typography/index.d.ts +2 -0
- package/dist/components/base/typography/rich-text/rich-text.variants.d.ts +9 -0
- package/dist/components/base/typography/text/index.d.ts +1 -0
- package/dist/components/base/typography/text/text.d.ts +15 -8
- package/dist/components/base/typography/text/text.variants.d.ts +41 -0
- package/dist/components/base/value-inputs/color-input.d.ts +1 -7
- package/dist/components/base/value-inputs/slider.d.ts +2 -7
- package/dist/components/{admin/patterns → blocks/admin}/commerce/vendor-profile.d.ts +2 -1
- package/dist/components/{patterns → blocks}/analytics/analytics.strings.d.ts +2 -5
- package/dist/components/features/actions/action-adapters.d.ts +3 -3
- package/dist/components/features/actions/actions.types.d.ts +3 -5
- package/dist/components/features/actions/index.d.ts +1 -1
- package/dist/components/features/activities/activities-feed.d.ts +1 -1
- package/dist/components/features/activities/activities.types.d.ts +4 -4
- package/dist/components/features/activities/activity-parts.d.ts +3 -3
- package/dist/components/features/activities/activity-row.d.ts +4 -4
- package/dist/components/features/activities/index.d.ts +1 -1
- package/dist/components/features/ai-chat/ai-chat.types.d.ts +10 -3
- package/dist/components/features/ai-chat/ai-message-surfaces.d.ts +1 -1
- package/dist/components/features/ai-chat/ai-work-surfaces.d.ts +1 -1
- package/dist/components/features/combobox/combobox.strings.d.ts +2 -2
- package/dist/components/features/combobox/fetching-combobox.d.ts +2 -1
- package/dist/components/features/combobox/resource-combobox.d.ts +3 -0
- package/dist/components/features/combobox/use-suggestions.d.ts +7 -0
- package/dist/components/features/event-calendar/event-calendar.types.d.ts +3 -0
- package/dist/components/features/media-library/index.d.ts +1 -1
- package/dist/components/features/media-library/media-library-parts.d.ts +4 -3
- package/dist/components/features/media-library/media-library-views.d.ts +4 -3
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +12 -13
- package/dist/components/features/media-library/media-library.types.d.ts +11 -9
- package/dist/components/features/media-library/media-resource-gallery.d.ts +1 -1
- package/dist/components/features/media-library/use-media-library.d.ts +1 -4
- package/dist/components/features/overlays/action-overlay-frame.d.ts +1 -1
- package/dist/components/features/overlays/index.d.ts +1 -1
- package/dist/components/features/overlays/overlay-parts.d.ts +3 -3
- package/dist/components/features/overlays/overlays.types.d.ts +8 -7
- package/dist/components/features/rich-text-editor/index.d.ts +0 -1
- package/dist/components/features/table/data-table-body.d.ts +1 -1
- package/dist/components/features/table/data-table-expanded-row.d.ts +27 -0
- package/dist/components/features/table/data-table-header.d.ts +1 -1
- package/dist/components/features/table/data-table-size.d.ts +1 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/index.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +9 -3
- package/dist/components/features/table/table.strings.d.ts +11 -0
- package/dist/components/features/table/table.types.d.ts +60 -2
- package/dist/components/features/theme-tweaker/index.d.ts +1 -1
- package/dist/components/features/theme-tweaker/theme-tweaker.strings.d.ts +1 -1
- package/dist/components/features/theme-tweaker/theme-tweaker.types.d.ts +6 -10
- package/dist/components/features/theme-tweaker/theme-tweaker.utils.d.ts +22 -6
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts +1 -1
- package/dist/components/layout/auth/auth.d.ts +1 -1
- package/dist/components/layout/auth/auth.types.d.ts +1 -1
- package/dist/components/primitives/value.d.ts +3 -1
- package/dist/containers-B8d8U9GS.js +2 -0
- package/dist/{copyable-H1TUEY-H.js → copyable-D9Okb1w6.js} +12 -11
- package/dist/core.css +2 -2
- package/dist/css/access.css +2 -1
- package/dist/css/accordion.css +2 -1
- package/dist/css/action-menu.css +2 -1
- package/dist/css/activities.css +2 -1
- package/dist/css/ai-chat.css +2 -1
- package/dist/css/analytics.css +2 -1
- package/dist/css/app-shell.css +2 -1
- package/dist/css/aspect-ratio.css +2 -1
- package/dist/css/async-preview.css +2 -1
- package/dist/css/auth.css +2 -1
- package/dist/css/avatar.css +2 -1
- package/dist/css/badge.css +2 -1
- package/dist/css/batch-action-bar.css +2 -1
- package/dist/css/buttons.css +2 -1
- package/dist/css/cards.css +2 -1
- package/dist/css/carousel.css +2 -1
- package/dist/css/chart.css +2 -1
- package/dist/css/choice-inputs.css +2 -1
- package/dist/css/combobox.css +2 -1
- package/dist/css/combobox2.css +2 -1
- package/dist/css/command.css +2 -1
- package/dist/css/comments.css +2 -1
- package/dist/css/commerce.css +2 -1
- package/dist/css/containers.css +2 -1
- package/dist/css/copyable.css +2 -1
- package/dist/css/data-view.css +2 -1
- package/dist/css/date-pickers.css +2 -1
- package/dist/css/display.css +2 -1
- package/dist/css/dropdown-menu.css +2 -1
- package/dist/css/event-calendar.css +2 -1
- package/dist/css/feedback.css +2 -1
- package/dist/css/filters.css +2 -1
- package/dist/css/forms-numeric.css +2 -1
- package/dist/css/forms.css +2 -1
- package/dist/css/global-search.css +2 -1
- package/dist/css/header.css +2 -1
- package/dist/css/hover-card.css +2 -1
- package/dist/css/input-group.css +2 -1
- package/dist/css/item.css +2 -1
- package/dist/css/kanban.css +2 -1
- package/dist/css/label.css +2 -1
- package/dist/css/map.css +2 -1
- package/dist/css/media-library.css +2 -1
- package/dist/css/mentions.css +2 -1
- package/dist/css/menubar.css +2 -1
- package/dist/css/navigation-menu.css +2 -1
- package/dist/css/navigation.css +2 -1
- package/dist/css/navigation2.css +2 -1
- package/dist/css/onboarding.css +2 -1
- package/dist/css/otp-input.css +2 -1
- package/dist/css/overlay.css +2 -1
- package/dist/css/overlays.css +2 -1
- package/dist/css/page.css +2 -1
- package/dist/css/popover-menu.css +2 -1
- package/dist/css/popover.css +2 -1
- package/dist/css/primitives.css +2 -1
- package/dist/css/products.css +2 -1
- package/dist/css/qr-code.css +2 -1
- package/dist/css/repeaters.css +2 -1
- package/dist/css/resizable.css +2 -1
- package/dist/css/resource-assignment.css +2 -1
- package/dist/css/resource.css +2 -1
- package/dist/css/rich-text-editor.css +2 -1
- package/dist/css/schema-form.css +2 -1
- package/dist/css/sidebar.css +2 -1
- package/dist/css/sidebar2.css +2 -1
- package/dist/css/skeleton.css +2 -1
- package/dist/css/spinner.css +2 -1
- package/dist/css/structure.css +2 -1
- package/dist/css/sync.css +2 -1
- package/dist/css/table.css +2 -1
- package/dist/css/table2.css +2 -1
- package/dist/css/text-inputs.css +2 -1
- package/dist/css/theme-tweaker.css +2 -1
- package/dist/css/timeline.css +2 -1
- package/dist/css/timelines.css +2 -1
- package/dist/css/toaster.css +2 -1
- package/dist/css/toggle.css +2 -1
- package/dist/css/toolbar.css +2 -1
- package/dist/css/tooltip.css +2 -1
- package/dist/css/typography.css +2 -1
- package/dist/css/upload.css +2 -1
- package/dist/css/value-inputs.css +2 -1
- package/dist/css/workspace.css +2 -1
- package/dist/css-graph.json +1027 -0
- package/dist/date-pickers-BwCwKIVM.js +685 -0
- package/dist/{dialog-CtFCuTUF.js → dialog-CAnwRNrm.js} +1 -1
- package/dist/display-a7AoX_u7.js +664 -0
- package/dist/dropdown-menu-Br8kvjrF.js +235 -0
- package/dist/empty.js +0 -0
- package/dist/features/actions.js +6 -6
- package/dist/features/activities.js +219 -216
- package/dist/features/ai-chat.js +593 -565
- package/dist/features/async-preview.js +105 -286
- package/dist/features/combobox.js +328 -314
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +56 -55
- package/dist/features/event-calendar.js +189 -185
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +259 -260
- package/dist/features/kanban.js +39 -37
- package/dist/features/map.js +357 -354
- package/dist/features/media-library.js +931 -931
- package/dist/features/mentions.js +1 -1
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +950 -942
- package/dist/features/resource-assignment.js +39 -37
- package/dist/features/resource.js +70 -71
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +342 -338
- package/dist/features/sync.js +14 -12
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +1002 -962
- package/dist/feedback-D4qVsKlD.js +430 -0
- package/dist/{filters-DOLKRSmb.js → filters-BhsTkWpZ.js} +386 -383
- package/dist/forms-C0WeNPFF.js +250 -0
- package/dist/forms-numeric-IwQ1ltNf.js +582 -0
- package/dist/hooks/use-native-dialog.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/input-group-HS_Z0Ei_.js +119 -0
- package/dist/item-M2pmpWXh.js +150 -0
- package/dist/{label-DumoMDm6.js → label-HOBXAscw.js} +7 -5
- package/dist/layout/app-shell.js +4 -2
- package/dist/layout/auth.js +102 -100
- package/dist/layout/header.js +190 -180
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +18 -16
- package/dist/layout/settings.js +2 -2
- package/dist/layout/sidebar.js +50 -46
- package/dist/layout/workspace.js +71 -69
- package/dist/lib/action-presentation.d.ts +3 -3
- package/dist/lib/component-vocabulary.d.ts +2 -2
- package/dist/lib/css-length.d.ts +2 -0
- package/dist/lib/responsive.d.ts +1 -1
- package/dist/lib/theming/index.d.ts +1 -0
- package/dist/lib/theming/recipes.d.ts +2 -2
- package/dist/lib/theming/themes/dense.d.ts +3 -0
- package/dist/lib/theming/themes/editorial.d.ts +3 -0
- package/dist/lib/theming/themes/index.d.ts +8 -0
- package/dist/lib/theming/themes/pair.d.ts +7 -0
- package/dist/lib/theming/themes/sharp.d.ts +3 -0
- package/dist/lib/theming/themes/soft.d.ts +3 -0
- package/dist/lib/theming/themes/types.d.ts +12 -0
- package/dist/lib/ui-provider/index.d.ts +1 -1
- package/dist/lib/ui-provider/scope.d.ts +5 -8
- package/dist/lib/ui-provider/tokens.d.ts +11 -3
- package/dist/lib/ui-provider/tokens.generated.d.ts +6 -4
- package/dist/lib/ui-provider/types.d.ts +17 -19
- package/dist/lib/ui-provider/ui-scope.d.ts +1 -1
- package/dist/{mentions-BbsEHlcH.js → mentions-BOxbigwp.js} +113 -111
- package/dist/navigation-Bgu7Vc0M.js +622 -0
- package/dist/navigation-DiYACqpE.js +216 -0
- package/dist/overlay-BuQOl8aP.js +356 -0
- package/dist/{overlays-DvVoS3td.js → overlays-1sULyytH.js} +77 -75
- package/dist/popover-CA7SP_iz.js +127 -0
- package/dist/popover-menu-QXgQeWeG.js +192 -0
- package/dist/{primitives-D0bdDozz.js → primitives-BskKlf35.js} +181 -178
- package/dist/primitives.js +1 -1
- package/dist/profiles/admin.json +6 -36
- package/dist/profiles/general.json +6 -96
- package/dist/repeaters-CeH20dvr.js +445 -0
- package/dist/rich-text-editor-D_Ppm8yh.js +491 -0
- package/dist/{sheet-CKcmRbJ9.js → sheet-CJ1-OAla.js} +3 -3
- package/dist/sidebar-D8uGqxio.js +421 -0
- package/dist/skeleton-BTKNKTdj.js +173 -0
- package/dist/spinner-Tc1QCnxM.js +30 -0
- package/dist/{structure-D0WGQAP3.js → structure-CynEZ-OY.js} +15 -23
- package/dist/style.css +1 -1
- package/dist/styles/TOKENS.md +116 -275
- package/dist/styles/animation.css +114 -0
- package/dist/styles/base.css +7 -6
- package/dist/styles/fields.css +45 -63
- package/dist/styles/focus.css +12 -0
- package/dist/styles/forced-colors.css +11 -10
- package/dist/styles/index.css +23 -30
- package/dist/styles/map.css +45 -34
- package/dist/styles/mentions.css +14 -52
- package/dist/styles/overlays.css +7 -7
- package/dist/styles/tailwind.css +76 -127
- package/dist/styles/targets.css +3 -3
- package/dist/styles/theme/colour.css +86 -0
- package/dist/styles/theme/density.css +31 -0
- package/dist/styles/theme/elevation.css +9 -0
- package/dist/styles/theme/layout.css +18 -0
- package/dist/styles/theme/motion.css +18 -0
- package/dist/styles/theme/shape.css +12 -0
- package/dist/styles/theme/size.css +10 -0
- package/dist/styles/theme/spacing.css +11 -0
- package/dist/styles/theme/typography.css +20 -0
- package/dist/styles/tone.css +61 -0
- package/dist/table-B7dtIFUx.js +1262 -0
- package/dist/table-Ds_eO9av.js +191 -0
- package/dist/tailwind.css +76 -127
- package/dist/text-inputs-BboE77nZ.js +395 -0
- package/dist/theming-C5ygF5uf.js +292 -0
- package/dist/theming.js +2 -2
- package/dist/{timeline-BdaGRyj-.js → timeline-BR_jNgvz.js} +57 -49
- package/dist/{timelines-BB7550mz.js → timelines-DXG1BfIN.js} +69 -67
- package/dist/{toaster-bBMgXm8z.js → toaster-CXL8L7Mm.js} +106 -99
- package/dist/tokens.json +1027 -636
- package/dist/toolbar-DBK-c4yy.js +74 -0
- package/dist/tooltip-BPYP-jUm.js +76 -0
- package/dist/{typography-BkxEiwQ1.js → typography-DmeR05Er.js} +87 -53
- package/dist/{ui-provider-Cmoq6i_D.js → ui-provider-DpzLUD12.js} +117 -69
- package/dist/ui-provider.js +1 -1
- package/dist/upload-CYuoJykZ.js +968 -0
- package/dist/use-async-preview-BFwf9ElY.js +188 -0
- package/dist/value-inputs-ng8aVJJZ.js +728 -0
- package/docs/README.md +13 -3
- package/docs/build/browser-composition-fixture.ts +28 -0
- package/docs/build/recipes.md +11484 -10723
- package/docs/generated/component-index.json +9809 -9169
- package/docs/generated/components/INDEX.md +5 -5
- package/docs/generated/components/base--accordion.md +51 -2
- package/docs/generated/components/base--action-menu.md +14 -15
- package/docs/generated/components/base--alert-dialog.md +3 -4
- package/docs/generated/components/base--aspect-ratio.md +3 -4
- package/docs/generated/components/base--avatar.md +7 -7
- package/docs/generated/components/base--badge.md +159 -27
- package/docs/generated/components/base--batch-action-bar.md +6 -7
- package/docs/generated/components/base--buttons.md +151 -47
- package/docs/generated/components/base--cards.md +107 -14
- package/docs/generated/components/base--carousel.md +1 -2
- package/docs/generated/components/base--chart.md +44 -8
- package/docs/generated/components/base--choice-inputs.md +10 -11
- package/docs/generated/components/base--combobox.md +3 -4
- package/docs/generated/components/base--command.md +6 -6
- package/docs/generated/components/base--context-menu.md +1 -2
- package/docs/generated/components/base--copyable.md +6 -7
- package/docs/generated/components/base--date-pickers.md +6 -7
- package/docs/generated/components/base--dialog.md +6 -7
- package/docs/generated/components/base--direction.md +1 -1
- package/docs/generated/components/base--display.md +234 -54
- package/docs/generated/components/base--dropdown-menu.md +6 -7
- package/docs/generated/components/base--feedback.md +71 -18
- package/docs/generated/components/base--forms-numeric.md +6 -7
- package/docs/generated/components/base--forms.md +84 -14
- package/docs/generated/components/base--hover-card.md +3 -4
- package/docs/generated/components/base--input-group.md +27 -30
- package/docs/generated/components/base--item.md +8 -9
- package/docs/generated/components/base--label.md +2 -3
- package/docs/generated/components/base--menubar.md +2 -4
- package/docs/generated/components/base--navigation-menu.md +2 -3
- package/docs/generated/components/base--navigation.md +2 -3
- package/docs/generated/components/base--otp-input.md +3 -4
- package/docs/generated/components/base--overlay.md +56 -47
- package/docs/generated/components/base--popover-menu.md +7 -8
- package/docs/generated/components/base--popover.md +9 -10
- package/docs/generated/components/base--qr-code.md +7 -8
- package/docs/generated/components/base--repeaters.md +6 -7
- package/docs/generated/components/base--resizable.md +2 -3
- package/docs/generated/components/base--sheet.md +12 -13
- package/docs/generated/components/base--sidebar.md +9 -11
- package/docs/generated/components/base--skeleton.md +6 -7
- package/docs/generated/components/base--slot.md +1 -1
- package/docs/generated/components/base--spinner.md +5 -7
- package/docs/generated/components/base--structure.md +320 -70
- package/docs/generated/components/base--table.md +61 -3
- package/docs/generated/components/base--text-inputs.md +17 -18
- package/docs/generated/components/base--timeline.md +45 -4
- package/docs/generated/components/base--toaster.md +43 -12
- package/docs/generated/components/base--toggle.md +11 -12
- package/docs/generated/components/base--toolbar.md +7 -8
- package/docs/generated/components/base--tooltip.md +5 -6
- package/docs/generated/components/base--typography.md +317 -32
- package/docs/generated/components/base--upload.md +8 -9
- package/docs/generated/components/base--value-inputs.md +9 -38
- package/docs/generated/components/{admin--patterns--access.md → blocks--admin--access.md} +15 -6
- package/docs/generated/components/{admin--patterns--commerce.md → blocks--admin--commerce.md} +40 -41
- package/docs/generated/components/{patterns--analytics.md → blocks--analytics.md} +57 -14
- package/docs/generated/components/{patterns--onboarding.md → blocks--onboarding.md} +6 -7
- package/docs/generated/components/{patterns--timelines.md → blocks--timelines.md} +6 -7
- package/docs/generated/components/features--actions.md +8 -18
- package/docs/generated/components/features--activities.md +31 -32
- package/docs/generated/components/features--ai-chat.md +15 -15
- package/docs/generated/components/features--async-preview.md +5 -6
- package/docs/generated/components/features--combobox.md +71 -5
- package/docs/generated/components/features--comments.md +0 -1
- package/docs/generated/components/features--data-view.md +63 -8
- package/docs/generated/components/features--event-calendar.md +1 -2
- package/docs/generated/components/features--filters.md +11 -2
- package/docs/generated/components/features--global-search.md +1 -2
- package/docs/generated/components/features--kanban.md +1 -2
- package/docs/generated/components/features--map.md +1 -2
- package/docs/generated/components/features--media-library.md +105 -38
- package/docs/generated/components/features--mentions.md +7 -7
- package/docs/generated/components/features--overlays.md +75 -22
- package/docs/generated/components/features--products.md +10 -11
- package/docs/generated/components/features--resource-assignment.md +2 -3
- package/docs/generated/components/features--resource.md +3 -4
- package/docs/generated/components/features--rich-text-editor.md +42 -13
- package/docs/generated/components/features--schema-form.md +1 -2
- package/docs/generated/components/features--sync.md +2 -3
- package/docs/generated/components/features--table.md +162 -12
- package/docs/generated/components/features--theme-tweaker.md +30 -15
- package/docs/generated/components/forms.md +2 -2
- package/docs/generated/components/layout--app-shell.md +41 -11
- package/docs/generated/components/layout--auth.md +8 -9
- package/docs/generated/components/layout--containers.md +40 -1
- package/docs/generated/components/layout--header.md +2 -3
- package/docs/generated/components/layout--navigation.md +0 -1
- package/docs/generated/components/layout--page.md +33 -5
- package/docs/generated/components/layout--settings.md +0 -1
- package/docs/generated/components/layout--sidebar.md +47 -7
- package/docs/generated/components/layout--workspace.md +3 -4
- package/docs/generated/components/primitives.md +128 -17
- package/docs/generated/components/theming.md +147 -4
- package/docs/generated/components/ui-provider.md +96 -78
- package/docs/generated/composition-ladder.md +8 -8
- package/docs/generated/consumer-contract.json +5736 -0
- package/docs/generated/imports.md +104 -104
- package/docs/generated/migration-broad-imports.json +267 -90
- package/docs/generated/migration-broad-imports.md +266 -101
- package/docs/generated/migration-codemod.json +365 -70
- package/docs/generated/migration.md +665 -95
- package/docs/generated/profiles.md +27 -27
- package/docs/generated/public-api.md +104 -102
- package/docs/generated/recipes.json +755 -810
- package/docs/generated/workflows/communications-overview/analytics/communications-reference.tsx +19 -0
- package/docs/generated/workflows/index.json +691 -0
- package/docs/generated/workflows/media-picking/media-library/media-picking-reference.tsx +63 -0
- package/docs/generated/workflows/media-picking/media-library/reference-data.ts +3 -0
- package/docs/generated/workflows/multi-section-form/form-workflow/multi-section-reference.tsx +46 -0
- package/docs/generated/workflows/nested-action-flow/action-overlays/nested-action-reference.tsx +39 -0
- package/docs/generated/workflows/record-detail/page-layout/record-detail-reference.tsx +24 -0
- package/docs/generated/workflows/resource-index/data-view/resource-index-reference.tsx +51 -0
- package/docs/generated/workflows/scoped-resource-selection/combobox/scoped-resource-reference.tsx +50 -0
- package/docs/generated/workflows/website-content-editor/media-library/reference-data.ts +3 -0
- package/docs/generated/workflows/website-content-editor/rich-text-editor/website-content-reference.tsx +33 -0
- package/docs/generated/workflows/workspace-navigation/app-shell/workspace-navigation-reference.tsx +26 -0
- package/docs/learn/api-compatibility.md +5 -4
- package/docs/learn/blocks.md +123 -0
- package/docs/learn/composition.md +100 -19
- package/docs/learn/forms.md +23 -3
- package/docs/learn/framework-wiring.md +41 -13
- package/docs/learn/i18n.md +4 -2
- package/docs/learn/installation.md +60 -31
- package/docs/learn/migration.md +156 -5
- package/docs/learn/provider-and-scoping.md +37 -25
- package/docs/learn/reference-workflows.md +43 -0
- package/docs/learn/structure-and-spacing.md +147 -0
- package/docs/learn/theming.md +174 -131
- package/docs/learn/troubleshooting.md +88 -30
- package/docs/learn/verification.md +60 -5
- package/package.json +42 -473
- package/scripts/consumer/codemod.mjs +50 -32
- package/scripts/consumer/contract-reader.mjs +42 -0
- package/scripts/consumer/css-scan.mjs +51 -0
- package/scripts/consumer/diagnose.mjs +136 -0
- package/scripts/consumer/find-component.mjs +30 -17
- package/scripts/consumer/install-skill.mjs +93 -11
- package/src/styles/TOKENS.md +116 -275
- package/dist/accordion-6YPJ9XRO.js +0 -135
- package/dist/admin/patterns/access.css +0 -15
- package/dist/admin/patterns/commerce.css +0 -29
- package/dist/admin/patterns/commerce.js +0 -2493
- package/dist/avatar-CS7zow2q.js +0 -85
- package/dist/badge-CxOuTfVr.js +0 -63
- package/dist/base/accordion.css +0 -3
- package/dist/base/action-menu.css +0 -6
- package/dist/base/alert-dialog.css +0 -4
- package/dist/base/aspect-ratio.css +0 -2
- package/dist/base/avatar.css +0 -4
- package/dist/base/badge.css +0 -2
- package/dist/base/batch-action-bar.css +0 -5
- package/dist/base/buttons.css +0 -4
- package/dist/base/cards.css +0 -13
- package/dist/base/carousel.css +0 -5
- package/dist/base/chart.css +0 -2
- package/dist/base/choice-inputs.css +0 -10
- package/dist/base/combobox.css +0 -3
- package/dist/base/command.css +0 -9
- package/dist/base/context-menu.css +0 -2
- package/dist/base/copyable.css +0 -6
- package/dist/base/date-pickers.css +0 -11
- package/dist/base/dialog.css +0 -4
- package/dist/base/display.css +0 -8
- package/dist/base/dropdown-menu.css +0 -2
- package/dist/base/feedback.css +0 -5
- package/dist/base/forms-numeric.css +0 -12
- package/dist/base/forms.css +0 -14
- package/dist/base/hover-card.css +0 -2
- package/dist/base/input-group.css +0 -6
- package/dist/base/item.css +0 -9
- package/dist/base/label.css +0 -3
- package/dist/base/menubar.css +0 -2
- package/dist/base/navigation-menu.css +0 -2
- package/dist/base/navigation.css +0 -12
- package/dist/base/otp-input.css +0 -9
- package/dist/base/overlay.css +0 -4
- package/dist/base/popover-menu.css +0 -11
- package/dist/base/popover.css +0 -3
- package/dist/base/qr-code.css +0 -2
- package/dist/base/repeaters.css +0 -18
- package/dist/base/resizable.css +0 -2
- package/dist/base/sheet.css +0 -4
- package/dist/base/sidebar.css +0 -12
- package/dist/base/skeleton.css +0 -9
- package/dist/base/spinner.css +0 -2
- package/dist/base/structure.css +0 -2
- package/dist/base/table.css +0 -3
- package/dist/base/text-inputs.css +0 -2
- package/dist/base/timeline.css +0 -9
- package/dist/base/toaster.css +0 -2
- package/dist/base/toggle.css +0 -2
- package/dist/base/toolbar.css +0 -5
- package/dist/base/tooltip.css +0 -2
- package/dist/base/typography.css +0 -2
- package/dist/base/upload.css +0 -10
- package/dist/base/value-inputs.css +0 -14
- package/dist/buttons-CqXKWty3.js +0 -179
- package/dist/cards-C6Ulbkw7.js +0 -271
- package/dist/chart-nomhJ87z.js +0 -193
- package/dist/choice-inputs-OUDn0kQw.js +0 -680
- package/dist/combobox-C8oP92bT.js +0 -266
- package/dist/command-Bp3B6pUu.js +0 -143
- package/dist/comments-CAnDlyXO.js +0 -1438
- package/dist/components/admin/patterns/index.d.ts +0 -2
- package/dist/components/features/rich-text-editor/exec-command-engine.d.ts +0 -2
- package/dist/components/patterns/index.d.ts +0 -3
- package/dist/css/styles.css +0 -1
- package/dist/date-pickers-DOwIT-Nk.js +0 -661
- package/dist/display-B3Q17h5z.js +0 -645
- package/dist/dropdown-menu-TyNLCLML.js +0 -223
- package/dist/features/actions.css +0 -11
- package/dist/features/activities.css +0 -25
- package/dist/features/ai-chat.css +0 -14
- package/dist/features/async-preview.css +0 -10
- package/dist/features/combobox.css +0 -12
- package/dist/features/comments.css +0 -24
- package/dist/features/data-view.css +0 -31
- package/dist/features/event-calendar.css +0 -17
- package/dist/features/filters.css +0 -24
- package/dist/features/global-search.css +0 -19
- package/dist/features/kanban.css +0 -7
- package/dist/features/map.css +0 -15
- package/dist/features/media-library.css +0 -27
- package/dist/features/mentions.css +0 -17
- package/dist/features/overlays.css +0 -11
- package/dist/features/products.css +0 -29
- package/dist/features/resource-assignment.css +0 -14
- package/dist/features/resource.css +0 -15
- package/dist/features/rich-text-editor.css +0 -8
- package/dist/features/schema-form.css +0 -22
- package/dist/features/sync.css +0 -11
- package/dist/features/table.css +0 -20
- package/dist/features/theme-tweaker.css +0 -27
- package/dist/feedback-DRerHGuV.js +0 -469
- package/dist/forms-CPrGGif_.js +0 -242
- package/dist/forms-numeric-CPVsL7Vf.js +0 -569
- package/dist/index.css +0 -3
- package/dist/input-group-BYe0rhoB.js +0 -126
- package/dist/item-B3yQ26as.js +0 -146
- package/dist/layout/app-shell.css +0 -13
- package/dist/layout/auth.css +0 -14
- package/dist/layout/containers.css +0 -2
- package/dist/layout/header.css +0 -20
- package/dist/layout/navigation.css +0 -11
- package/dist/layout/page.css +0 -15
- package/dist/layout/settings.css +0 -16
- package/dist/layout/sidebar.css +0 -16
- package/dist/layout/workspace.css +0 -15
- package/dist/navigation-CsqTA16F.js +0 -614
- package/dist/navigation-DzxzPuwg.js +0 -202
- package/dist/overlay-WQOsLd69.js +0 -345
- package/dist/patterns/analytics.css +0 -15
- package/dist/patterns/onboarding.css +0 -11
- package/dist/patterns/timelines.css +0 -11
- package/dist/popover-DriLnIFc.js +0 -123
- package/dist/popover-menu-C2UCMAe7.js +0 -189
- package/dist/primitives.css +0 -3
- package/dist/repeaters-DuP1N0nw.js +0 -438
- package/dist/rich-text-editor-BQXFe9oN.js +0 -595
- package/dist/sidebar-D0N6ckJL.js +0 -412
- package/dist/skeleton-DGR9df28.js +0 -172
- package/dist/spinner-CUAVFecI.js +0 -52
- package/dist/styles/FACTORS.md +0 -36
- package/dist/styles/SCOPES.md +0 -86
- package/dist/styles/themes/default.css +0 -164
- package/dist/styles/theming/animation.css +0 -143
- package/dist/styles/theming/colors.css +0 -97
- package/dist/styles/theming/feedback.css +0 -17
- package/dist/styles/theming/field.css +0 -21
- package/dist/styles/theming/focus.css +0 -88
- package/dist/styles/theming/layers.css +0 -13
- package/dist/styles/theming/layout.css +0 -21
- package/dist/styles/theming/motion.css +0 -42
- package/dist/styles/theming/overlay.css +0 -52
- package/dist/styles/theming/sizing.css +0 -118
- package/dist/styles/theming/text.css +0 -30
- package/dist/styles/theming/typography.css +0 -26
- package/dist/styles/tokens/components.css +0 -22
- package/dist/styles/tokens/foundation.css +0 -80
- package/dist/styles/tokens/layout.css +0 -19
- package/dist/styles/tokens/palette.css +0 -88
- package/dist/styles/tokens/primitives.css +0 -18
- package/dist/styles/tokens/states.css +0 -77
- package/dist/table-BC4qqsUb.js +0 -180
- package/dist/table-BHDpjajL.js +0 -982
- package/dist/text-inputs-DF_lD7pA.js +0 -385
- package/dist/theming-D6KRU7hO.js +0 -104
- package/dist/toolbar-DWRywF0R.js +0 -68
- package/dist/tooltip-t1VQQ2tZ.js +0 -73
- package/dist/upload-B38YZeFJ.js +0 -938
- package/dist/value-inputs-Q4ymjXlV.js +0 -716
- package/src/styles/FACTORS.md +0 -36
- package/src/styles/SCOPES.md +0 -86
- /package/dist/components/{admin/patterns → blocks/admin}/access/admin.strings.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/credential-list.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/index.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/role-permissions.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/access/sensitive-action.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/account.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/address-lines.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/booking.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/cart.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.strings.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/commerce.types.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/format-amount.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/index.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/inventory-section.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/invoice.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/loyalty.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-customer.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-detail.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-line-item.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order-transactions.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/order.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-listing.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/seo-score.d.ts +0 -0
- /package/dist/components/{admin/patterns → blocks/admin}/commerce/summary-panel.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/activity-heatmap.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/analytics.types.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/chart-card.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/format-metric-value.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/index.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-bar.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-comparison.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-gradient.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-grid.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-micro-grid.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-skeleton.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric-trend-chip.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/metric.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/analytics/time-ruler.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/onboarding/checklist.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/onboarding/index.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/onboarding/onboarding.strings.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/changelog-timeline.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/index.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/milestones-timeline.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/steps.d.ts +0 -0
- /package/dist/components/{patterns → blocks}/timelines/timelines.strings.d.ts +0 -0
- /package/dist/styles/{theming/breakpoints.css → breakpoints.css} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: themelia-ui
|
|
3
|
-
description: Use when a React consumer is selecting, importing, composing, theming, localizing, integrating or upgrading themelia-ui components — forms, routing, data, SSR, CSP, consumer CSS overrides, Tailwind, and migrating between versions with the packaged codemod. Do not use for maintaining package internals.
|
|
3
|
+
description: Use when a React consumer is selecting, importing, composing, theming, localizing, integrating or upgrading themelia-ui components — structural layouts, blocks, spacing, responsive grids, forms, routing, data, SSR, CSP, consumer CSS overrides, Tailwind, and migrating between versions with the packaged codemod. Do not use for maintaining package internals.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
<!-- GENERATED by themelia-ui/scripts/gen-agent-skill.mjs -->
|
|
@@ -13,17 +13,33 @@ uses CSS Modules over Base UI, publishes exact module subpaths, and has no `ui/`
|
|
|
13
13
|
|
|
14
14
|
## Workflow
|
|
15
15
|
|
|
16
|
-
1.
|
|
17
|
-
|
|
16
|
+
1. Read the application's instructions and policy skills; they own domain decisions. Identify
|
|
17
|
+
the installed package version and check this copy with the packaged installer `--check`.
|
|
18
|
+
Review drift before reinstalling; keep application policy in a separate skill.
|
|
19
|
+
2. Map owners: route, surface, section, fact, metric, editable group, field, transport and command.
|
|
20
|
+
Read `references/composition.md` for their insets, names and parent responsibilities. Search
|
|
21
|
+
the catalogue by job and context; read `chooseWhen`, `avoidWhen`, alternatives and peers.
|
|
22
|
+
For page geometry, gaps and responsive widths, read `references/structure-and-spacing.md`;
|
|
23
|
+
for analytics, onboarding, timelines and admin presentation, read `references/blocks.md`.
|
|
18
24
|
3. Open that module's generated API reference before writing JSX. It contains every public
|
|
19
25
|
declaration, inherited prop contract, dependency, and attributed live-preview recipe.
|
|
20
26
|
4. Prefer the highest ready module that owns the behavior, then customize it at the lowest
|
|
21
27
|
sufficient extension rung: prop → provider default → slot/render prop → composition →
|
|
22
28
|
consumer CSS → application-owned component.
|
|
23
|
-
5. Import the exact JavaScript subpath
|
|
29
|
+
5. Import the exact JavaScript subpath; in a bundled app its CSS comes with it.
|
|
24
30
|
6. Keep application policy in the application, then verify the composed result in its real
|
|
25
31
|
route, theme, density, data states, keyboard flow, and production bundle.
|
|
26
32
|
|
|
33
|
+
For a shared component/style change, trace its callers first. Select representatives of each
|
|
34
|
+
affected surface and check the initiating control, parent width, inset and portal owners.
|
|
35
|
+
Use `references/reference-workflows.md` when several modules meet; copy the complete source
|
|
36
|
+
directory including helpers. Run the packaged read-only diagnostics against explicit source
|
|
37
|
+
paths and treat advisory findings as review prompts. Read only the relevant guide.
|
|
38
|
+
If the catalogue or declaration is absent, name the missing path and use the installed package's
|
|
39
|
+
export map/types or request the missing artifact. Do not infer an API from another version.
|
|
40
|
+
If browser access is unavailable, finish independent type/build work and report browser
|
|
41
|
+
behavior and appearance as unverified.
|
|
42
|
+
|
|
27
43
|
**Upgrading between versions** comes before any of that. Read the version's section in
|
|
28
44
|
`references/migration.md`, then run the packaged codemod — dry first — and handle what it
|
|
29
45
|
reports (removed tokens, overrides that now set a shared name, look-alike Tailwind utilities)
|
|
@@ -33,6 +49,7 @@ by hand. Re-run the skill installer afterwards so this skill matches the install
|
|
|
33
49
|
node node_modules/themelia-ui/scripts/consumer/codemod.mjs --dry-run src/
|
|
34
50
|
node node_modules/themelia-ui/scripts/consumer/codemod.mjs src/
|
|
35
51
|
node node_modules/themelia-ui/scripts/consumer/install-skill.mjs --project=.
|
|
52
|
+
node node_modules/themelia-ui/scripts/consumer/install-skill.mjs --project=. --check --json
|
|
36
53
|
```
|
|
37
54
|
|
|
38
55
|
## Installed-package authorities
|
|
@@ -44,11 +61,9 @@ These paths exist after installation and are the source of truth:
|
|
|
44
61
|
| `node_modules/themelia-ui/docs/generated/components/INDEX.md` | module-by-module API references and recipes |
|
|
45
62
|
| `node_modules/themelia-ui/docs/generated/component-index.json` | machine-readable discovery records |
|
|
46
63
|
| `node_modules/themelia-ui/docs/generated/public-api.md` | every exported name and exact subpath |
|
|
47
|
-
| `node_modules/themelia-ui/docs/generated/imports.md` | every
|
|
64
|
+
| `node_modules/themelia-ui/docs/generated/imports.md` | every import and optional-peer owner |
|
|
48
65
|
| `node_modules/themelia-ui/docs/generated/recipes.json` | machine-readable live-preview examples |
|
|
49
|
-
| `node_modules/themelia-ui/src/styles/TOKENS.md` |
|
|
50
|
-
| `node_modules/themelia-ui/src/styles/FACTORS.md` | scale, spacing, density, and typography factors |
|
|
51
|
-
| `node_modules/themelia-ui/src/styles/SCOPES.md` | boundaries where derived tokens recompute |
|
|
66
|
+
| `node_modules/themelia-ui/src/styles/TOKENS.md` | the theme contract: every variable, its role, and what components compute from it |
|
|
52
67
|
| `node_modules/themelia-ui/docs/generated/migration.md` | every renamed or removed name, token and utility, with what replaces it |
|
|
53
68
|
| `node_modules/themelia-ui/scripts/consumer/codemod.mjs` | applies the mechanical half of an upgrade to your source |
|
|
54
69
|
|
|
@@ -67,11 +82,11 @@ node node_modules/themelia-ui/scripts/consumer/find-component.mjs --peer=@tansta
|
|
|
67
82
|
node node_modules/themelia-ui/scripts/consumer/find-component.mjs --help
|
|
68
83
|
```
|
|
69
84
|
|
|
70
|
-
It indexes 97 modules,
|
|
71
|
-
|
|
85
|
+
It indexes 97 modules, 404 attributed live recipes, and
|
|
86
|
+
119 live preview routes by public symbol, module id, recipe title, preview route,
|
|
72
87
|
component capabilities, descriptions, and positive selection guidance. Negative `avoidWhen` guidance is never treated as a
|
|
73
88
|
recommendation. `--json` includes the exact
|
|
74
|
-
`publicImport`, `
|
|
89
|
+
`publicImport`, `apiDoc`, optional peers, dependencies, and alternatives.
|
|
75
90
|
Use `--explain` to see matched components and why they fit. Component guidance identifies
|
|
76
91
|
curated decisions separately from module-level fallback; missing prop defaults are not inferred.
|
|
77
92
|
<!-- /GENERATED:search -->
|
|
@@ -102,9 +117,9 @@ Selection rules:
|
|
|
102
117
|
| Base (`base`) | 54 | one generic concept: text roles, controls, rows, passive structure | `themelia-ui/base/accordion` |
|
|
103
118
|
| Layout (`layout`) | 9 | page and application shells | `themelia-ui/layout/app-shell` |
|
|
104
119
|
| Features (`features`) | 24 | an owned interaction lifecycle — a context, a hook, a state machine | `themelia-ui/features/actions` |
|
|
105
|
-
| Blocks (`blocks`) | 5 | an arrangement rendering a subject; the admin blocks make up the admin profile | `themelia-ui/admin/
|
|
120
|
+
| Blocks (`blocks`) | 5 | an arrangement rendering a subject; the admin blocks make up the admin profile | `themelia-ui/blocks/admin/access` |
|
|
106
121
|
|
|
107
|
-
97 modules, 752 public components,
|
|
122
|
+
97 modules, 752 public components, 1072 exported symbols in total.
|
|
108
123
|
<!-- /GENERATED:tiers -->
|
|
109
124
|
|
|
110
125
|
Dependencies flow downward:
|
|
@@ -134,7 +149,10 @@ analytics, persistence, translation orchestration, and domain decisions. Pass th
|
|
|
134
149
|
documented props, callbacks, accessors, slots, render props, hooks, and provider seams.
|
|
135
150
|
|
|
136
151
|
Read `references/composition.md` for page examples and
|
|
137
|
-
`references/composition-ladder.md` for
|
|
152
|
+
`references/composition-ladder.md` for available extension seams. Structural helpers arrange
|
|
153
|
+
siblings; subject blocks own a recognizable presentation. Stack has gap and alignment props,
|
|
154
|
+
no padding prop. Page already supplies a Container, and DataView already supplies its frame.
|
|
155
|
+
Check child insets before adding parent gaps; flat FormSections retain their inset.
|
|
138
156
|
|
|
139
157
|
## Imports and CSS delivery
|
|
140
158
|
|
|
@@ -152,21 +170,21 @@ leaflet. Reach for a module by its own subpath and the question never comes up.
|
|
|
152
170
|
<!-- GENERATED:delivery by scripts/gen-agent-skill.mjs — do not edit between these markers. -->
|
|
153
171
|
```tsx compile
|
|
154
172
|
import { Button } from "themelia-ui/base/buttons"
|
|
155
|
-
import "themelia-ui/base/buttons.css"
|
|
156
173
|
```
|
|
157
174
|
|
|
158
|
-
**
|
|
159
|
-
|
|
175
|
+
**A component brings its own CSS.** In a bundled app (Vite, webpack, Rspack, Next.js, React
|
|
176
|
+
Router, Astro) importing the component is enough: its stylesheet arrives with its
|
|
177
|
+
JavaScript, once, and a module the application never imports brings none. Do not also
|
|
178
|
+
import `themelia-ui/style.css` or a module stylesheet from JavaScript; that loads the CSS twice.
|
|
160
179
|
|
|
161
|
-
**
|
|
162
|
-
`
|
|
163
|
-
Import `core.css` on its own only when application CSS needs the token contract before
|
|
164
|
-
any component stylesheet is loaded.
|
|
180
|
+
**Server rendering with Vite needs one line.** Astro, React Router, TanStack Start and Vike
|
|
181
|
+
list `themelia-ui` in `ssr.noExternal`; Astro renders the kit unstyled without it.
|
|
165
182
|
|
|
166
|
-
`themelia-ui/style.css
|
|
167
|
-
|
|
183
|
+
**No bundler:** link `themelia-ui/style.css`, which includes `core.css`. Node, Vitest and
|
|
184
|
+
`require()` load the JavaScript with no CSS setup; Jest needs 29.4 or newer, with the package
|
|
185
|
+
exempted in `transformIgnorePatterns`.
|
|
168
186
|
|
|
169
|
-
|
|
187
|
+
Consumer overrides need no ordering: the kit's component rules are layered, so ordinary
|
|
170
188
|
unlayered app CSS wins without specificity tricks.
|
|
171
189
|
<!-- /GENERATED:delivery -->
|
|
172
190
|
|
|
@@ -192,7 +210,7 @@ There are 15 optional peer packages. A consumer only needs the peers reachable f
|
|
|
192
210
|
| `react-hook-form` | `features/sync`, `forms-rhf` |
|
|
193
211
|
| `react-leaflet` | `features/map` |
|
|
194
212
|
| `react-leaflet-markercluster` | `features/map` |
|
|
195
|
-
| `recharts` | `base/chart`, `
|
|
213
|
+
| `recharts` | `base/chart`, `blocks/analytics` |
|
|
196
214
|
<!-- /GENERATED:peers -->
|
|
197
215
|
|
|
198
216
|
## Provider, scopes, themes, and portals
|
|
@@ -224,15 +242,16 @@ export function ScopedPreview() {
|
|
|
224
242
|
}
|
|
225
243
|
```
|
|
226
244
|
|
|
227
|
-
Theme through the public contract in `node_modules/themelia-ui/src/styles/TOKENS.md
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
245
|
+
Theme through the public contract in `node_modules/themelia-ui/src/styles/TOKENS.md`: about
|
|
246
|
+
eighty variables, declared once at `:root`, each colour a `light-dark(light, dark)` pair. Set
|
|
247
|
+
the ones you change on `:root` (or on any element, for a region). Component defaults inherit
|
|
248
|
+
them; explicit scope overrides and density presets establish new values on their regions.
|
|
249
|
+
`density` changes spacing and control heights; `scale` also changes icons and type;
|
|
250
|
+
`typography.scale` changes type alone. A component's own variables are private (`--_x`), never
|
|
251
|
+
an override surface.
|
|
233
252
|
|
|
234
|
-
|
|
235
|
-
|
|
253
|
+
Kit component rules are layered, so ordinary unlayered consumer CSS wins whatever its order,
|
|
254
|
+
without `!important`. Target stable documented `data-slot` or
|
|
236
255
|
BEM hooks, and Base UI's state attributes (`data-open`, `data-checked`, `data-disabled`,
|
|
237
256
|
`data-highlighted`, `data-popup-open`) for a state — not Radix's `[data-state="open"]`; never
|
|
238
257
|
target CSS Module hashes. If the application uses Tailwind
|
|
@@ -267,6 +286,9 @@ portals, strict CSP, or streaming SSR. Read `references/theming.md` before defin
|
|
|
267
286
|
| `references/theming.md` | changing color, radius, density, scale, typography, DTCG, or Tailwind integration |
|
|
268
287
|
| `references/provider-and-scoping.md` | configuring roots, nested regions, portals, CSP, or SSR |
|
|
269
288
|
| `references/composition.md` | building application-specific pages and business components |
|
|
289
|
+
| `references/structure-and-spacing.md` | choosing structural blocks, insets/gaps, widths, responsive grids, scroll owners or bleed |
|
|
290
|
+
| `references/blocks.md` | choosing analytics, onboarding, timelines or admin blocks and their application seams |
|
|
291
|
+
| `references/reference-workflows.md` | complete compositions, state ownership and helper sources |
|
|
270
292
|
| `references/composition-ladder.md` | choosing the highest ready tier and lowest extension seam |
|
|
271
293
|
| `references/framework-wiring.md` | connecting router, data, permissions, persistence, and rendering boundaries |
|
|
272
294
|
| `references/forms.md` | binding fields to React state, react-hook-form, or another controller |
|
|
@@ -278,6 +300,11 @@ portals, strict CSP, or streaming SSR. Read `references/theming.md` before defin
|
|
|
278
300
|
|
|
279
301
|
## Consumer completion checklist
|
|
280
302
|
|
|
303
|
+
Record the package/skill versions, selected owners and public seams, changed callers, tested
|
|
304
|
+
routes and states, widths/themes/densities/locales, keyboard/focus interactions, exact commands
|
|
305
|
+
and observed results. List unavailable checks and application acceptance still required.
|
|
306
|
+
Only claim checks you executed; a successful typecheck cannot establish visual or workflow success.
|
|
307
|
+
|
|
281
308
|
- Exact module import and its CSS resolve from the installed package.
|
|
282
309
|
- Only the selected modules' optional peers are installed and bundled.
|
|
283
310
|
- Public props and slots are used; no internal path, hash class, or undocumented token leaks in.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"packageVersion": "3.2.0",
|
|
4
|
+
"files": {
|
|
5
|
+
"SKILL.md": "c9a3884bc4315abd7425417e64aa68460a3a890c3f93f8f201d6dd0e3f79209d",
|
|
6
|
+
"references/api-compatibility.md": "7ecd0b9be0eff433391709fdf08321885d9ac4f1f30d99579b9ec179ea070da2",
|
|
7
|
+
"references/blocks.md": "42772d3390cdb22d0aac25dd47ddc0ed7de18159a760b3f8dc09eb9346b386c3",
|
|
8
|
+
"references/composition-ladder.md": "f02ee3b3f55464684ba993d7e129915d5c4732b329d8b9f702ab7579ef6322f2",
|
|
9
|
+
"references/composition.md": "ccf8fa769cc605c9f7d59ec939e3be5873f97b5d4158eee5eb04dc62d523f270",
|
|
10
|
+
"references/forms.md": "8e1b86b5da221f04855b59f1ebcf90c7cc6fe63284be34b30afd09e4d978fafb",
|
|
11
|
+
"references/framework-wiring.md": "c98ca307c33c0e89ba4371d3d893af2aa0fd219aeea7413d534c3ac83d4cbf20",
|
|
12
|
+
"references/i18n.md": "74759967f8460ceb2e41c18d6ff20c62f40ccd745bbc87b645106360be3d7c59",
|
|
13
|
+
"references/imports.md": "c45ff607b729b9b00b8a58ed62bf0da9f12c355a554f3ef7b0aa5f17d9b7b684",
|
|
14
|
+
"references/installation.md": "60e3ca9ac46f5d43f27cb3eacf482bb4bbae05f5bc673f10a3fe7aa6fd34b5ed",
|
|
15
|
+
"references/migration.md": "e8e3875e4db01b6ed32246733e493f8077db8dd1b18ca82a8309af0889e74381",
|
|
16
|
+
"references/provider-and-scoping.md": "71a9844192804c3be7c604545b9592bf17e6f591595553d6a91b1de9b954259a",
|
|
17
|
+
"references/reference-workflows.md": "9f7a02aa3d34934cd8a22fbabcc377a880513c251bba0b2a49f5ecdc50f7c47c",
|
|
18
|
+
"references/structure-and-spacing.md": "e44c3f90e2d3c4aa590c7a88115e7806d6e0fdff1c7bba9ce862894fdd671653",
|
|
19
|
+
"references/theming.md": "f5e14f5c72274a7b58a1148a8365334aafdbb884bac2ed6854022a895e3c9023",
|
|
20
|
+
"references/troubleshooting.md": "f81f8fb782933bedadf347efbc15898bd531b0719d9ffe6f1ff2cc6d309837d8",
|
|
21
|
+
"references/verification.md": "c8a8f2313021d7f15fe02a6f49f46b5bf457ffba69ece9f962c836bd1a1a3a3e"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# API compatibility
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Exact package subpaths, exported names, callable signatures, and
|
|
4
4
|
exported props/type members are compatibility surfaces. Public global theme tokens, documented
|
|
5
5
|
`data-slot` and BEM hooks, and the `strings` contracts are also consumer contracts.
|
|
6
6
|
|
|
@@ -15,9 +15,10 @@ exported props/type members are compatibility surfaces. Public global theme toke
|
|
|
15
15
|
| a documented default changes | behavioural change; release notes required |
|
|
16
16
|
| component token or hashed CSS Module name changes | internal unless documented as an extension point |
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
3.1 includes breaking changes despite its minor version number: it removes obsolete aliases
|
|
19
|
+
and adapters. Removed names do not stay available solely for an
|
|
20
|
+
upgrade window. A breaking release records the replacement in the migration reference and
|
|
21
|
+
the changelog; consumers pin the old version until they are ready to update.
|
|
21
22
|
|
|
22
23
|
A removal, a newly required member or an incompatible type change ships with a migration
|
|
23
24
|
record: the migration reference (`node_modules/themelia-ui/docs/generated/migration.md`) names each one with its
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Choosing and composing blocks
|
|
2
|
+
|
|
3
|
+
A structural block arranges regions; a subject block renders a recognizable job such as
|
|
4
|
+
metrics, onboarding or an order summary. Use [Structure and spacing](structure-and-spacing.md)
|
|
5
|
+
for page geometry, surfaces and gaps. Start with a ready subject block when its vocabulary
|
|
6
|
+
fits the product, then use its documented props, callbacks or parts. The application keeps
|
|
7
|
+
data, permission checks, routing, mutation and persistence.
|
|
8
|
+
|
|
9
|
+
## Published subject modules
|
|
10
|
+
|
|
11
|
+
| Job | Exact subpath and examples | Application owns | Optional peers |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| Quantities, changes and plots | `themelia-ui/blocks/analytics`: MetricGrid, Metric, MetricComparison, ChartCard, ActivityHeatmap | Measures, period, comparison meaning, loading/errors and metric actions | `recharts`, for the module even when the adopted block has no plot |
|
|
14
|
+
| Setup tasks completed over time | `themelia-ui/blocks/onboarding`: Checklist | Step status, content, submission and persistence | None |
|
|
15
|
+
| Milestones, changelog or linear progress | `themelia-ui/blocks/timelines`: MilestonesTimeline, ChangelogTimeline, Steps, StepsBar | Sequence, status, dates and navigation | None |
|
|
16
|
+
| Permissions and credential management | `themelia-ui/blocks/admin/access`: RolePermissions, CredentialList, SensitiveAction | Authorization, actual secrets, deletion confirmation and mutations | None |
|
|
17
|
+
| Orders, invoices, inventory and payment summaries | `themelia-ui/blocks/admin/commerce`: OrderSummary, InvoiceLineItems, InventorySection, PaymentTimeline | Commerce records, calculation policy, commands and transport | None |
|
|
18
|
+
|
|
19
|
+
These are modules, not broad barrels: there is no `themelia-ui/blocks` import. General and
|
|
20
|
+
admin profiles come from the same installation. Admin is presentation vocabulary rather
|
|
21
|
+
than an authorization layer; importing an admin block does not protect its actions or data.
|
|
22
|
+
The generated [import table](imports.md) is authoritative for optional peers.
|
|
23
|
+
Do not assume a symbol is peer-free because its own UI looks simple.
|
|
24
|
+
|
|
25
|
+
Open the selected API before JSX: analytics (`node_modules/themelia-ui/docs/generated/components/blocks--analytics.md`),
|
|
26
|
+
onboarding (`node_modules/themelia-ui/docs/generated/components/blocks--onboarding.md`),
|
|
27
|
+
timelines (`node_modules/themelia-ui/docs/generated/components/blocks--timelines.md`),
|
|
28
|
+
admin access (`node_modules/themelia-ui/docs/generated/components/blocks--admin--access.md`), or
|
|
29
|
+
admin commerce (`node_modules/themelia-ui/docs/generated/components/blocks--admin--commerce.md`).
|
|
30
|
+
They list exact record shapes, defaults, strings, dependencies and preview recipes.
|
|
31
|
+
|
|
32
|
+
## Facts versus quantities
|
|
33
|
+
|
|
34
|
+
MetadataList owns label/value facts such as owner, status, address or a date. A numeric
|
|
35
|
+
identifier is still a fact. MetricGrid/Metric own measures such as delivered messages,
|
|
36
|
+
revenue or a conversion rate, with optional comparison and trend. Put prose facts beside
|
|
37
|
+
quantities rather than turning every value into a metric tile.
|
|
38
|
+
|
|
39
|
+
```tsx compile
|
|
40
|
+
import { ContentBlock, MetadataList } from "themelia-ui/base/display"
|
|
41
|
+
import { Stack } from "themelia-ui/base/structure"
|
|
42
|
+
import { MetricGrid, type MetricData } from "themelia-ui/blocks/analytics"
|
|
43
|
+
import { Page } from "themelia-ui/layout/page"
|
|
44
|
+
|
|
45
|
+
const metrics: MetricData[] = [
|
|
46
|
+
{ id: "delivered", label: "Delivered", value: 248 },
|
|
47
|
+
{ id: "opened", label: "Opened", value: null, subtitle: "Tracking unavailable" },
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
export function DeliveryOverview() {
|
|
51
|
+
return <Page header={{ title: "Delivery overview", description: "Current campaign" }}>
|
|
52
|
+
<Stack>
|
|
53
|
+
<MetricGrid metrics={metrics} variant="card" />
|
|
54
|
+
<ContentBlock title="Campaign details">
|
|
55
|
+
<MetadataList items={[
|
|
56
|
+
{ id: "owner", label: "Owner", value: "Alex" },
|
|
57
|
+
{ id: "status", label: "Status", value: "Sending" },
|
|
58
|
+
]} />
|
|
59
|
+
</ContentBlock>
|
|
60
|
+
</Stack>
|
|
61
|
+
</Page>
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Use `null` for an unavailable MetricData value; zero means a measured zero. MetricGrid's
|
|
66
|
+
loading contract is for initial loading. For error or refresh behavior, inspect the adopted
|
|
67
|
+
component's exact API rather than assuming every analytics block accepts the same props.
|
|
68
|
+
The [communications workflow](reference-workflows.md) demonstrates retained figures,
|
|
69
|
+
failure feedback, retry, unknown tracking and a separate facts region.
|
|
70
|
+
|
|
71
|
+
## Compose without duplicating owners
|
|
72
|
+
|
|
73
|
+
Inspect whether a block already owns its title, surface, controls and responsive layout
|
|
74
|
+
before surrounding it with another Card or Grid. MetricGrid already arranges tiles;
|
|
75
|
+
ChartCard already owns its chart frame; FormSection already owns an editable section's
|
|
76
|
+
header and inset. Use a sibling surface for an independent subject and ContentBlock for
|
|
77
|
+
supporting prose inside one. [Composition](composition.md#decide-the-owners-before-jsx)
|
|
78
|
+
describes the owners in detail.
|
|
79
|
+
|
|
80
|
+
Keep default typography and spacing with those owners. Do not invent `size`, `padding`,
|
|
81
|
+
`error` or `strings` props by analogy with another block. Use a documented slot or render
|
|
82
|
+
prop for one region; use public parts or an application composition when the arrangement
|
|
83
|
+
must differ. No block needs every extension seam. The [composition ladder](composition-ladder.md)
|
|
84
|
+
is a discovery aid; the selected API remains the contract.
|
|
85
|
+
|
|
86
|
+
## Compose your own subject
|
|
87
|
+
|
|
88
|
+
When the ready block's vocabulary cannot express the product, start from its public
|
|
89
|
+
lower-tier recipe rather than copying internals. The live block pages include these
|
|
90
|
+
compose-your-own examples; their source is also embedded in
|
|
91
|
+
recipes.json (`node_modules/themelia-ui/docs/generated/recipes.json`) under the exact id below and in the
|
|
92
|
+
recipe book (`node_modules/themelia-ui/docs/build/recipes.md`). The recipe imports identify the adopted modules and
|
|
93
|
+
their peer requirements; they do not require importing the corresponding ready block.
|
|
94
|
+
|
|
95
|
+
| Subject | Recipe id | Public building blocks |
|
|
96
|
+
| --- | --- | --- |
|
|
97
|
+
| A custom measure | `analytics-blueprint` | Card, Stack, Money, Badge, Sparkline |
|
|
98
|
+
| Setup checklist | `blocks-checklist-blueprint` | Progress, Accordion, IconBadge, Text, Button |
|
|
99
|
+
| Release timeline | `blocks-changelog-blueprint` | Timeline, MonoValue, Badge |
|
|
100
|
+
| Role/permission summary | `blocks-roles-blueprint` | Table, Badge, VisuallyHidden |
|
|
101
|
+
| Custom order summary | `cart-summary-blueprint` | Card, MetadataList, Money, Button, toast |
|
|
102
|
+
|
|
103
|
+
For example, retrieve the exact checklist source from the installed package:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
node <<'NODE'
|
|
107
|
+
const fs = require('node:fs')
|
|
108
|
+
const { recipes } = JSON.parse(fs.readFileSync('node_modules/themelia-ui/docs/generated/recipes.json', 'utf8'))
|
|
109
|
+
const recipe = recipes.find(item => item.id === 'blocks-checklist-blueprint')
|
|
110
|
+
if (!recipe) throw new Error('Recipe missing from this installed version')
|
|
111
|
+
process.stdout.write(recipe.code)
|
|
112
|
+
NODE
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
These examples establish presentation seams, with fixed sample data and mock callbacks.
|
|
116
|
+
Keep the application's real permission model, calculations and completion state in its
|
|
117
|
+
own component. Use the [complete workflows](reference-workflows.md) when the task needs
|
|
118
|
+
submission, lookup, selection or retained-draft behavior beyond a presentation recipe.
|
|
119
|
+
|
|
120
|
+
For translated copy, use the selected module's typed strings and exported defaults. Product
|
|
121
|
+
labels and record content remain application copy. Test permissions, loading/empty/error
|
|
122
|
+
states, long labels, keyboard interaction, RTL and the adopted density in the real route;
|
|
123
|
+
the package's previews do not establish application acceptance.
|
|
@@ -10,9 +10,9 @@ The rungs are ordinary props; controlled state and callbacks when state exists;
|
|
|
10
10
|
named slots; render props; exported parts; headless hooks; and complete recipes. Passive
|
|
11
11
|
modules may stop at the first rung. Interaction features normally expose several.
|
|
12
12
|
|
|
13
|
-
This table
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
This table summarizes detected declarations and recipes. It is a discovery aid, not a
|
|
14
|
+
prop contract: open the selected module API for exact signatures and supported seams.
|
|
15
|
+
It focuses on feature modules; the columns start at accessors.
|
|
16
16
|
|
|
17
17
|
| module | accessors | slots | render props | headless hook | partials | recipe |
|
|
18
18
|
| --- | :-: | :-: | :-: | :-: | :-: | :-: |
|
|
@@ -41,7 +41,7 @@ higher rungs are meaningful; the columns start at accessors.
|
|
|
41
41
|
| `features/table` | ● | ● | · | ● | ● | ● |
|
|
42
42
|
| `features/theme-tweaker` | · | ● | · | ● | ● | ● |
|
|
43
43
|
|
|
44
|
-
##
|
|
44
|
+
## Four feature examples
|
|
45
45
|
|
|
46
46
|
Global Search, Filters, Comments and Data View are the demonstration cases, because a
|
|
47
47
|
ladder that only works on a Badge proves nothing. Each is usable at three heights:
|
|
@@ -50,7 +50,7 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
|
|
|
50
50
|
|
|
51
51
|
**Ready-made** — `GlobalSearch`, dropped in with props and callbacks.
|
|
52
52
|
|
|
53
|
-
**Region-customized** —
|
|
53
|
+
**Region-customized** — 7 other public exports to inspect for region customization: `GlobalSearchDialog`, `GlobalSearchEmptyState`, `GlobalSearchFooter`, `GlobalSearchIdleState`, `GlobalSearchInput`, and 2 more.
|
|
54
54
|
|
|
55
55
|
**Headless** — `useGlobalSearch`, for presentation the parts cannot express.
|
|
56
56
|
|
|
@@ -58,7 +58,7 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
|
|
|
58
58
|
|
|
59
59
|
**Ready-made** — `FilterLayout`, dropped in with props and callbacks.
|
|
60
60
|
|
|
61
|
-
**Region-customized** —
|
|
61
|
+
**Region-customized** — 17 other public exports to inspect for region customization: `AsyncFilterEditor`, `DateFilterEditor`, `FilterEditor`, `FilterErrorBoundary`, `FilterOperator`, and 12 more.
|
|
62
62
|
|
|
63
63
|
**Headless** — `useAsyncOptions`, `useFilterCache`, `useFilterGroups`, `useFilters`, for presentation the parts cannot express.
|
|
64
64
|
|
|
@@ -66,7 +66,7 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
|
|
|
66
66
|
|
|
67
67
|
**Ready-made** — `Comments`, dropped in with props and callbacks.
|
|
68
68
|
|
|
69
|
-
**Region-customized** —
|
|
69
|
+
**Region-customized** — 5 other public exports to inspect for region customization: `CommentAttachmentChip`, `CommentComposer`, `CommentContent`, `CommentItem`, `CommentTimeline`.
|
|
70
70
|
|
|
71
71
|
**Headless** — `useAttachmentUpload`, `useComments`, for presentation the parts cannot express.
|
|
72
72
|
|
|
@@ -74,6 +74,6 @@ ladder that only works on a Badge proves nothing. Each is usable at three height
|
|
|
74
74
|
|
|
75
75
|
**Ready-made** — `DataView`, dropped in with props and callbacks.
|
|
76
76
|
|
|
77
|
-
**Region-customized** —
|
|
77
|
+
**Region-customized** — 5 other public exports to inspect for region customization: `DataViewPagination`, `DataViewShell`, `DataViewTableFrame`, `DataViewToolbar`, `SavedViewTabs`.
|
|
78
78
|
|
|
79
79
|
**Headless** — `useDataView`, for presentation the parts cannot express.
|
|
@@ -20,6 +20,10 @@ ready-made surface does not express the job.
|
|
|
20
20
|
compose both; neither may import a block. The complete generated graph is in
|
|
21
21
|
Profiles (`node_modules/themelia-ui/docs/generated/profiles.md`).
|
|
22
22
|
|
|
23
|
+
For structural blocks, spacing roles and responsive widths, use
|
|
24
|
+
[Structure and spacing](structure-and-spacing.md). For ready analytics, onboarding,
|
|
25
|
+
timeline and admin presentations, use [Choosing blocks](blocks.md).
|
|
26
|
+
|
|
23
27
|
## The composition ladder
|
|
24
28
|
|
|
25
29
|
Use the lowest rung that solves the real requirement:
|
|
@@ -68,11 +72,8 @@ generic metadata, and an action without teaching the package what an invoice is:
|
|
|
68
72
|
|
|
69
73
|
```tsx compile
|
|
70
74
|
import { Button } from "themelia-ui/base/buttons"
|
|
71
|
-
import "themelia-ui/base/buttons.css"
|
|
72
75
|
import { MetadataList } from "themelia-ui/base/display"
|
|
73
|
-
import "themelia-ui/base/display.css"
|
|
74
76
|
import { Page } from "themelia-ui/layout/page"
|
|
75
|
-
import "themelia-ui/layout/page.css"
|
|
76
77
|
|
|
77
78
|
type Invoice = { id: string; number: string; customerName: string; status: string; dueLabel: string }
|
|
78
79
|
export function InvoiceDetail({ invoice, onCollectPayment }: {
|
|
@@ -111,10 +112,8 @@ callbacks, then open each linked module reference for the complete prop contract
|
|
|
111
112
|
### Dashboard
|
|
112
113
|
|
|
113
114
|
```tsx fragment — dashboard data and chart series come from the consuming application
|
|
114
|
-
import { MetricGrid } from "themelia-ui/
|
|
115
|
-
import "themelia-ui/patterns/analytics.css"
|
|
115
|
+
import { MetricGrid } from "themelia-ui/blocks/analytics"
|
|
116
116
|
import { Page } from "themelia-ui/layout/page"
|
|
117
|
-
import "themelia-ui/layout/page.css"
|
|
118
117
|
|
|
119
118
|
<Page header={{ title: "Overview", description: periodLabel }}>
|
|
120
119
|
<MetricGrid metrics={metrics} variant="card" />
|
|
@@ -128,7 +127,6 @@ window, permission-filtered figures, and what clicking a metric means.
|
|
|
128
127
|
|
|
129
128
|
```tsx fragment — columns, filters, records, paging, and mutations are consumer-owned
|
|
130
129
|
import { DataView, DataViewPagination } from "themelia-ui/features/data-view"
|
|
131
|
-
import "themelia-ui/features/data-view.css"
|
|
132
130
|
|
|
133
131
|
<DataView
|
|
134
132
|
data={records}
|
|
@@ -148,13 +146,18 @@ The invoice example above is the canonical shape: `Page` for route geometry,
|
|
|
148
146
|
`MetadataList` and primitives for facts, then domain callbacks on package actions. Keep the
|
|
149
147
|
record type out of the package.
|
|
150
148
|
|
|
149
|
+
When the task also fits the standard loading, empty, error and retry presentation, use
|
|
150
|
+
`ResourceShowShell` or `ResourceIndexShell` from `features/resource`. Those shells already
|
|
151
|
+
own a header, body and state replacement; do not duplicate that route header by wrapping
|
|
152
|
+
them in another Page. Page remains appropriate for a custom record arrangement where the
|
|
153
|
+
application already owns lifecycle feedback. Read the
|
|
154
|
+
resource API (`node_modules/themelia-ui/docs/generated/components/features--resource.md`) for state and slot contracts.
|
|
155
|
+
|
|
151
156
|
### Form
|
|
152
157
|
|
|
153
158
|
```tsx fragment — validation, field values, submit mutation, and product copy remain in the app
|
|
154
159
|
import { FormActionsBar, FormField, FormSection, SubmitStateButton } from "themelia-ui/base/forms"
|
|
155
|
-
import "themelia-ui/base/forms.css"
|
|
156
160
|
import { Input } from "themelia-ui/base/text-inputs"
|
|
157
|
-
import "themelia-ui/base/text-inputs.css"
|
|
158
161
|
|
|
159
162
|
<FormSection title="Billing" description="Where invoices go.">
|
|
160
163
|
<FormField label="Company" error={errors.company}>
|
|
@@ -171,7 +174,6 @@ adapter when React Hook Form already owns the state.
|
|
|
171
174
|
|
|
172
175
|
```tsx fragment — route matching and the router link renderer belong to the application
|
|
173
176
|
import { AsideNavShell } from "themelia-ui/layout/settings"
|
|
174
|
-
import "themelia-ui/layout/settings.css"
|
|
175
177
|
|
|
176
178
|
<AsideNavShell
|
|
177
179
|
title="Settings"
|
|
@@ -200,7 +202,7 @@ documentation tree whose vocabulary is not settings.
|
|
|
200
202
|
|
|
201
203
|
Look up a specific task with the offline finder. Exact symbols take priority; `--explain`
|
|
202
204
|
shows matched components, selection reasons and direct API anchors. `--json` exposes the
|
|
203
|
-
same records for tools. Guidance marked `
|
|
205
|
+
same records for tools. Guidance marked `module` is a fallback, not a component-specific
|
|
204
206
|
recommendation. An empty result means refine the query or inspect the catalogue, not invent
|
|
205
207
|
an export.
|
|
206
208
|
|
|
@@ -218,15 +220,10 @@ the entered value; pending state prevents a second submission.
|
|
|
218
220
|
```tsx compile
|
|
219
221
|
import { useState } from "react"
|
|
220
222
|
import { Card, CardHeader, CardContent } from "themelia-ui/base/cards"
|
|
221
|
-
import "themelia-ui/base/cards.css"
|
|
222
223
|
import { FormField } from "themelia-ui/base/forms"
|
|
223
|
-
import "themelia-ui/base/forms.css"
|
|
224
224
|
import { Input } from "themelia-ui/base/text-inputs"
|
|
225
|
-
import "themelia-ui/base/text-inputs.css"
|
|
226
225
|
import { Button } from "themelia-ui/base/buttons"
|
|
227
|
-
import "themelia-ui/base/buttons.css"
|
|
228
226
|
import { Stack } from "themelia-ui/base/structure"
|
|
229
|
-
import "themelia-ui/base/structure.css"
|
|
230
227
|
|
|
231
228
|
export function RenameRecord({ initialName, save }: {
|
|
232
229
|
initialName: string
|
|
@@ -248,7 +245,7 @@ export function RenameRecord({ initialName, save }: {
|
|
|
248
245
|
catch { setError("Could not save. Your changes are still here; try again.") }
|
|
249
246
|
finally { setPending(false) }
|
|
250
247
|
}}>
|
|
251
|
-
<Stack gap="
|
|
248
|
+
<Stack gap="sm">
|
|
252
249
|
<FormField label="Name" error={error}>
|
|
253
250
|
<Input value={name} disabled={pending} onChange={(event) => setName(event.target.value)} />
|
|
254
251
|
</FormField>
|
|
@@ -270,7 +267,6 @@ filtering contract to your query layer instead of filtering an already paged sub
|
|
|
270
267
|
```tsx compile
|
|
271
268
|
import { useState } from "react"
|
|
272
269
|
import { DataView, type DataViewProps } from "themelia-ui/features/data-view"
|
|
273
|
-
import "themelia-ui/features/data-view.css"
|
|
274
270
|
import { FilterType, FilterOperator, type ActiveFilter, type FilterConfig } from "themelia-ui/features/filters"
|
|
275
271
|
|
|
276
272
|
type RecordRow = { id: string; name: string; status: string }
|
|
@@ -298,7 +294,6 @@ edge fade through the public prop instead of adding a local mask or a second scr
|
|
|
298
294
|
|
|
299
295
|
```tsx compile
|
|
300
296
|
import { Tabs, TabList, Tab, TabPanel } from "themelia-ui/base/navigation"
|
|
301
|
-
import "themelia-ui/base/navigation.css"
|
|
302
297
|
|
|
303
298
|
export function SettingsTabs() {
|
|
304
299
|
return <Tabs defaultValue="general">
|
|
@@ -330,6 +325,92 @@ Only use states the selected module exposes; the API reference is authoritative.
|
|
|
330
325
|
complete examples above type-check against the built package, but their application
|
|
331
326
|
callbacks are illustrative: verify persistence and browser behaviour in your app.
|
|
332
327
|
|
|
328
|
+
## Decide the owners before JSX
|
|
329
|
+
|
|
330
|
+
| Owner | Insets and type | Name and command scope | Parent responsibility |
|
|
331
|
+
| --- | --- | --- | --- |
|
|
332
|
+
| `Page` | Route geometry; header owns heading type | One route heading; route commands | Data, routing and independent subjects |
|
|
333
|
+
| `Card` / parts | Surface and content inset; header owns title/description | A bounded subject; commands for that subject | Arrange sibling subjects, choose heading level |
|
|
334
|
+
| `ContentBlock` | Title/content gap; `plain` has no inset, decorated surfaces add one | Supporting content within a subject | Decide whether another independent surface is warranted |
|
|
335
|
+
| `MetadataList` / values | Fact layout; labels and semantic value formatting | Read-only facts, not editable labels | Permission-filtered records and value descriptors |
|
|
336
|
+
| Analytics blocks | Quantity hierarchy and responsive metric arrangement | Measures and their period; metric actions | Query, unknown quantities and interpretation |
|
|
337
|
+
| `FormSection` | Section inset and heading; `flat` retains its padding | Editable region title; section-specific actions | Form, values, validation and completion |
|
|
338
|
+
| `FieldGroup` | Related control arrangement and support line | Fieldset/legend for a group; children retain distinct labels | Group disabled state and validation policy |
|
|
339
|
+
| `FormField` / binding | Label and support typography, control association | One editable field | Value, mutation and explicit name/ARIA overrides |
|
|
340
|
+
| `Stack` / `Grid` | Shared gaps; no new typography owner | Passive arrangement | Choose whether child insets already supply separation |
|
|
341
|
+
| `DataView` | Filter/table shell and responsive filter presentation | Resource-browser commands | Transport, page totals and selection lifetime |
|
|
342
|
+
| `DataTable` | Tabular interaction and table geometry | Column/row names and row commands | Filters, surrounding surface and server transport |
|
|
343
|
+
| `FilterLayout` / slots | Responsive controls and sheet | Filter controls only | Shared filter state; put export/create in action slots |
|
|
344
|
+
|
|
345
|
+
`surface="flat"` changes decoration, not the inset contract. Several flat FormSections
|
|
346
|
+
inside CardContent accumulate the card content inset and each section's inset. Use the
|
|
347
|
+
ready Card body when that separation is useful; use parts when you need a different region
|
|
348
|
+
arrangement. `Stack gap="none"` is appropriate when adjacent sections already own their
|
|
349
|
+
vertical separation. Do not compensate by assigning private padding variables or local type.
|
|
350
|
+
|
|
351
|
+
These are fragments; the [complete workflows](reference-workflows.md) include state,
|
|
352
|
+
helpers and submission behavior.
|
|
353
|
+
|
|
354
|
+
```tsx fragment — fields and subject data come from the application
|
|
355
|
+
<Card title="Account details">
|
|
356
|
+
<Stack gap="none">
|
|
357
|
+
<FormSection surface="flat" title="Contact">{contactFields}</FormSection>
|
|
358
|
+
<FormSection surface="flat" title="Billing">{billingFields}</FormSection>
|
|
359
|
+
</Stack>
|
|
360
|
+
</Card>
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
```tsx fragment — parts expose the same owners; table rows and columns are application data
|
|
364
|
+
<Card>
|
|
365
|
+
<CardHeader title="Related records" titleLevel={2} />
|
|
366
|
+
<CardContent><DataTable data={rows} columns={columns} /></CardContent>
|
|
367
|
+
</Card>
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
Use sibling Cards for independent subjects. Use ContentBlock inside a Card for supporting
|
|
371
|
+
prose. Repeating the route heading as each Card title adds no new subject. Repeating a
|
|
372
|
+
FormField label in a nested DisplayLabel creates competing names; supply the field label
|
|
373
|
+
once and let FormField associate it. A FieldGroup legend names the group, so its children's
|
|
374
|
+
labels should identify their distinct values. Labels on different records may repeat.
|
|
375
|
+
|
|
376
|
+
```tsx fragment — each subject supplies its own application-owned facts
|
|
377
|
+
<Grid columns={{ base: 1, md: 2 }}>
|
|
378
|
+
<Card title="Contact"><MetadataList items={contactFacts} /></Card>
|
|
379
|
+
<Card title="Billing"><MetadataList items={billingFacts} /></Card>
|
|
380
|
+
</Grid>
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Grid owns separation between the sibling subjects and their responsive columns. Each Card
|
|
384
|
+
owns its header and body inset. For a resource browser, DataView already owns the filter/table
|
|
385
|
+
frame: put a Heading and supporting Text beside that frame instead of wrapping it in another
|
|
386
|
+
Card. The [resource workflow](reference-workflows.md) demonstrates a constrained parent;
|
|
387
|
+
the detail workflow demonstrates a secondary table within an independent titled subject.
|
|
388
|
+
|
|
389
|
+
Keep a record's command beside that record, a page command in the page header, and a
|
|
390
|
+
selected-row command in the table's bulk-action seam. Filter toolbars communicate query
|
|
391
|
+
state; export and create belong in the action slots. Applications decide destructive policy,
|
|
392
|
+
field-per-row arrangements and permission boundaries.
|
|
393
|
+
|
|
394
|
+
For server filtering, use `filtering.filterRows: ({ data }) => [...data]` when the server
|
|
395
|
+
already matched the page. DataView's default filtering is local and can remove valid server
|
|
396
|
+
matches whose search fields are absent from the visible columns. Use an app-owned cursor
|
|
397
|
+
footer when totals are unknown; never invent a page count. Drop to DataTable when the app
|
|
398
|
+
already owns the browser shell, filters and command placement.
|
|
399
|
+
|
|
400
|
+
Selector variants serve different lifecycles: SuggestionsCombobox uses the generic lookup
|
|
401
|
+
hook; AsyncCombobox accepts application-owned results; ResourceCombobox owns the ready
|
|
402
|
+
single-resource fetching presentation. Use `scopeKey` on SuggestionsCombobox or ResourceCombobox when workspace or permission context changes without a
|
|
403
|
+
query change. It invalidates lookup results, not the controlled selection. The application
|
|
404
|
+
clears a value that is invalid in the new context.
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
node node_modules/themelia-ui/scripts/consumer/find-component.mjs "editable section" --context=existing-surface --context=editable --explain
|
|
408
|
+
node node_modules/themelia-ui/scripts/consumer/find-component.mjs "resource selector" --context=changing-scope --json
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
Context matches are positive evidence. Uncurated exports remain visible with unknown
|
|
412
|
+
context coverage; they do not become recommendations by omission.
|
|
413
|
+
|
|
333
414
|
## When to wrap, compose, or contribute
|
|
334
415
|
|
|
335
416
|
- **Wrap** when the product needs a stable local name or defaults around one module.
|