themelia-react-ui 2.0.3 → 2.0.4
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 +50 -0
- package/README.md +65 -28
- package/dist/{accordion-Cjb6sx0G.js → accordion-96o0pN62.js} +5 -5
- package/dist/{accordion-Cjb6sx0G.js.map → accordion-96o0pN62.js.map} +1 -1
- package/dist/action-menu-CHgs8vmj.js +281 -0
- package/dist/action-menu-CHgs8vmj.js.map +1 -0
- package/dist/{affordance-geometry.generated-tF36bREk.js → affordance-geometry.generated-B8yGOr8-.js} +7 -1
- package/dist/affordance-geometry.generated-B8yGOr8-.js.map +1 -0
- package/dist/{ai-artifact-DvTwDVyL.js → ai-artifact-BZUGwBq6.js} +277 -276
- package/dist/ai-artifact-BZUGwBq6.js.map +1 -0
- package/dist/{app-shell-C4FhvCqF.js → app-shell-D63ATkIK.js} +84 -83
- package/dist/app-shell-D63ATkIK.js.map +1 -0
- package/dist/{attachment-BxDfL2mw.js → attachment-DkoqHPPl.js} +7 -7
- package/dist/{attachment-BxDfL2mw.js.map → attachment-DkoqHPPl.js.map} +1 -1
- package/dist/{auth-BGua8ouh.js → auth-D2FVZ1MH.js} +10 -10
- package/dist/{auth-BGua8ouh.js.map → auth-D2FVZ1MH.js.map} +1 -1
- package/dist/{avatar-DAPlDvhJ.js → avatar-DWO_HHhB.js} +5 -5
- package/dist/{avatar-DAPlDvhJ.js.map → avatar-DWO_HHhB.js.map} +1 -1
- package/dist/{badge-HpFqoqSY.js → badge-DErMA7ul.js} +4 -4
- package/dist/{badge-HpFqoqSY.js.map → badge-DErMA7ul.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 +13 -13
- 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 +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +6 -6
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +3 -3
- package/dist/base/inline-edit.js +10 -10
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +6 -6
- 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 +9 -9
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +6 -6
- 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 +3 -3
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-DnUJ21NQ.js → batch-action-bar-CdfIkCsV.js} +4 -4
- package/dist/{batch-action-bar-DnUJ21NQ.js.map → batch-action-bar-CdfIkCsV.js.map} +1 -1
- package/dist/blocks/admin.js +20 -20
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +15 -15
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +17 -17
- 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 +570 -567
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +5 -5
- package/dist/blocks/planning.js +11 -11
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-C-oqs1sQ.js → breadcrumbs-B-WFKecD.js} +4 -4
- package/dist/{breadcrumbs-C-oqs1sQ.js.map → breadcrumbs-B-WFKecD.js.map} +1 -1
- package/dist/{button-DVzspB_G.js → button-DkmK-z8E.js} +2 -2
- package/dist/{button-DVzspB_G.js.map → button-DkmK-z8E.js.map} +1 -1
- package/dist/{buttons-DPZekJFu.js → buttons-BbfzgczK.js} +8 -8
- package/dist/{buttons-DPZekJFu.js.map → buttons-BbfzgczK.js.map} +1 -1
- package/dist/{cards-BaBZR-AU.js → cards-4JTWqvVe.js} +10 -10
- package/dist/cards-4JTWqvVe.js.map +1 -0
- package/dist/{chart-ZOYyK2xG.js → chart-C19flDQb.js} +4 -4
- package/dist/{chart-ZOYyK2xG.js.map → chart-C19flDQb.js.map} +1 -1
- package/dist/{checkbox-AWIhNhmo.js → checkbox-CzYUTPeJ.js} +9 -5
- package/dist/checkbox-CzYUTPeJ.js.map +1 -0
- package/dist/{choice-inputs-CNHvARCJ.js → choice-inputs-JLtij2y4.js} +182 -176
- package/dist/choice-inputs-JLtij2y4.js.map +1 -0
- package/dist/{code-block-DeneBJR_.js → code-block-CGNaUtAE.js} +7 -7
- package/dist/{code-block-DeneBJR_.js.map → code-block-CGNaUtAE.js.map} +1 -1
- package/dist/{collapsible-C-_l4hpy.js → collapsible-Do4G0zcC.js} +3 -3
- package/dist/{collapsible-C-_l4hpy.js.map → collapsible-Do4G0zcC.js.map} +1 -1
- package/dist/{collection-content-By56pLog.js → collection-content-C0e8SsTm.js} +3 -3
- package/dist/{collection-content-By56pLog.js.map → collection-content-C0e8SsTm.js.map} +1 -1
- package/dist/{combobox-Dxo2fAYQ.js → combobox-CBJDs6w_.js} +12 -12
- package/dist/{combobox-Dxo2fAYQ.js.map → combobox-CBJDs6w_.js.map} +1 -1
- package/dist/{combobox-DaHESuiL.js → combobox-hbhSS18O.js} +7 -7
- package/dist/{combobox-DaHESuiL.js.map → combobox-hbhSS18O.js.map} +1 -1
- package/dist/{command-C25VMRII.js → command-D8NrBj-b.js} +7 -7
- package/dist/{command-C25VMRII.js.map → command-D8NrBj-b.js.map} +1 -1
- package/dist/{comments-DD0DUPwJ.js → comments-Di4w0H_S.js} +383 -382
- package/dist/comments-Di4w0H_S.js.map +1 -0
- package/dist/components/base/action-menu/action-menu.d.ts +2 -0
- package/dist/components/base/cards/card.recipes.d.ts +12 -5
- package/dist/components/base/cards/smart-card.types.d.ts +12 -7
- package/dist/components/base/choice-inputs/checkbox.d.ts +7 -2
- package/dist/components/base/choice-inputs/switch-card.d.ts +7 -0
- package/dist/components/base/choice-inputs/toggle-field.d.ts +7 -0
- package/dist/components/base/date-pickers/datepicker.types.d.ts +7 -0
- package/dist/components/base/forms/controlled-form-field.d.ts +6 -6
- package/dist/components/base/forms/form-field.d.ts +5 -3
- package/dist/components/base/forms/index.d.ts +1 -0
- package/dist/components/base/forms/server-errors.d.ts +16 -0
- package/dist/components/base/forms/workflow.d.ts +5 -2
- package/dist/components/base/metadata-list/metadata-list.d.ts +3 -1
- package/dist/components/base/navigation/page-header/page-header.d.ts +4 -2
- package/dist/components/base/structure/composition.recipes.d.ts +17 -0
- package/dist/components/base/text-inputs/hooks/use-form-field-state.d.ts +7 -2
- package/dist/components/base/text-inputs/input.d.ts +4 -2
- package/dist/components/base/text-inputs/textarea.d.ts +4 -2
- package/dist/components/base/value-inputs/date-time-input.d.ts +2 -1
- package/dist/components/base/value-inputs/slider.d.ts +5 -1
- package/dist/components/base/value-inputs/tags-input.d.ts +5 -1
- package/dist/components/typography/text.styles.d.ts +26 -1
- package/dist/composition.recipes-COdiFhxB.js +19 -0
- package/dist/composition.recipes-COdiFhxB.js.map +1 -0
- package/dist/containers-CRmHf7GP.js +104 -0
- package/dist/containers-CRmHf7GP.js.map +1 -0
- package/dist/{copyable-ClBuk_UK.js → copyable-CnGCZdX4.js} +4 -4
- package/dist/{copyable-ClBuk_UK.js.map → copyable-CnGCZdX4.js.map} +1 -1
- package/dist/{data-display-DT_khPl_.js → data-display-D4oujtx0.js} +239 -238
- package/dist/data-display-D4oujtx0.js.map +1 -0
- package/dist/{date-DCrsDTZc.js → date-Q7jnXxpk.js} +5 -5
- package/dist/{date-DCrsDTZc.js.map → date-Q7jnXxpk.js.map} +1 -1
- package/dist/{date-picker-B2K3ucWn.js → date-picker-zOt1oNss.js} +102 -90
- package/dist/date-picker-zOt1oNss.js.map +1 -0
- package/dist/date-pickers-cj8IXbDC.js +179 -0
- package/dist/date-pickers-cj8IXbDC.js.map +1 -0
- package/dist/{display-hAc1HjpI.js → display-BB4BL_-K.js} +8 -8
- package/dist/{display-hAc1HjpI.js.map → display-BB4BL_-K.js.map} +1 -1
- package/dist/{dropdown-menu-Cl4X7L5S.js → dropdown-menu-CjY8Vt7W.js} +8 -8
- package/dist/{dropdown-menu-Cl4X7L5S.js.map → dropdown-menu-CjY8Vt7W.js.map} +1 -1
- package/dist/features/activities.js +11 -11
- package/dist/features/ai-chat.js +9 -9
- package/dist/features/appointment-calendar.js +222 -220
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +8 -8
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +10 -10
- package/dist/features/email-composer.js +275 -274
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +199 -198
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +12 -12
- package/dist/features/kanban.js +4 -4
- package/dist/features/map.js +7 -7
- package/dist/features/media-library.js +623 -622
- 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 +973 -969
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +12 -12
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +113 -112
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +2 -2
- package/dist/features/schema-form.js +254 -253
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +19 -19
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/{feedback-BYIhtitP.js → feedback-DZNL5Lg1.js} +9 -9
- package/dist/{feedback-BYIhtitP.js.map → feedback-DZNL5Lg1.js.map} +1 -1
- package/dist/{field-affordance-recipes-DZhnIL_Y.js → field-affordance-recipes-DjwGx8eM.js} +2 -2
- package/dist/{field-affordance-recipes-DZhnIL_Y.js.map → field-affordance-recipes-DjwGx8eM.js.map} +1 -1
- package/dist/{filters-DJVAveHA.js → filters-BcT-uoFy.js} +19 -19
- package/dist/{filters-DJVAveHA.js.map → filters-BcT-uoFy.js.map} +1 -1
- package/dist/{form-field-CwH9y77i.js → form-field-CsgRmdit.js} +14 -8
- package/dist/form-field-CsgRmdit.js.map +1 -0
- package/dist/{form-sizing-BdP_Mf5p.js → form-sizing-NXgjkmBG.js} +3 -3
- package/dist/{form-sizing-BdP_Mf5p.js.map → form-sizing-NXgjkmBG.js.map} +1 -1
- package/dist/{forms-B9G_xwzi.js → forms-BV5m5aQF.js} +83 -65
- package/dist/forms-BV5m5aQF.js.map +1 -0
- package/dist/{forms-numeric-B_jraJaQ.js → forms-numeric-Cd33AKbD.js} +288 -288
- package/dist/forms-numeric-Cd33AKbD.js.map +1 -0
- package/dist/{header-BSfIEWbI.js → header-BA697l4a.js} +14 -14
- package/dist/{header-BSfIEWbI.js.map → header-BA697l4a.js.map} +1 -1
- package/dist/hooks/useFormErrors.d.ts +1 -1
- package/dist/{hooks-ClH9thn4.js → hooks-BQ-L7Uu2.js} +2 -2
- package/dist/{hooks-ClH9thn4.js.map → hooks-BQ-L7Uu2.js.map} +1 -1
- package/dist/{icon-badge-DYKIwvOV.js → icon-badge-COWbCCWu.js} +3 -3
- package/dist/{icon-badge-DYKIwvOV.js.map → icon-badge-COWbCCWu.js.map} +1 -1
- package/dist/index.js +2 -2
- package/dist/input-Cdw4k0fb.js +289 -0
- package/dist/input-Cdw4k0fb.js.map +1 -0
- package/dist/{input-CZw8iU99.js → input-DOPL5_QE.js} +3 -3
- package/dist/{input-CZw8iU99.js.map → input-DOPL5_QE.js.map} +1 -1
- package/dist/item-BvZ2DR_x.js +277 -0
- package/dist/item-BvZ2DR_x.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 +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +10 -10
- package/dist/lib/affordance-geometry.generated.d.ts +6 -0
- package/dist/lib/ui-provider/types.d.ts +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-3zIVLMWH.js → media-gallery-CSl5W1Fy.js} +6 -6
- package/dist/{media-gallery-3zIVLMWH.js.map → media-gallery-CSl5W1Fy.js.map} +1 -1
- package/dist/{mentions-CGlEJ15c.js → mentions-RKOQaaIB.js} +8 -8
- package/dist/{mentions-CGlEJ15c.js.map → mentions-RKOQaaIB.js.map} +1 -1
- package/dist/{message-DZ_ruyUV.js → message-INU2xsxu.js} +4 -4
- package/dist/{message-DZ_ruyUV.js.map → message-INU2xsxu.js.map} +1 -1
- package/dist/metadata-list-qVV7AVxa.js +443 -0
- package/dist/metadata-list-qVV7AVxa.js.map +1 -0
- package/dist/{navigation-BzhHI3lo.js → navigation-BQNcg1jT.js} +8 -8
- package/dist/{navigation-BzhHI3lo.js.map → navigation-BQNcg1jT.js.map} +1 -1
- package/dist/{navigation-Bnotn4AQ.js → navigation-DLF3E1IC.js} +7 -7
- package/dist/{navigation-Bnotn4AQ.js.map → navigation-DLF3E1IC.js.map} +1 -1
- package/dist/{navigation-row-recipes-BFLCk_Aq.js → navigation-row-recipes-WZEs-hYo.js} +2 -2
- package/dist/{navigation-row-recipes-BFLCk_Aq.js.map → navigation-row-recipes-WZEs-hYo.js.map} +1 -1
- package/dist/{number-DbV1Dija.js → number-E_OiIfJz.js} +5 -5
- package/dist/{number-DbV1Dija.js.map → number-E_OiIfJz.js.map} +1 -1
- package/dist/{overflow-tab-bar-CWY7Nogn.js → overflow-tab-bar-CrbqMteP.js} +107 -105
- package/dist/overflow-tab-bar-CrbqMteP.js.map +1 -0
- package/dist/{overlays-tMkF-VAN.js → overlays-BlKynmde.js} +228 -227
- package/dist/overlays-BlKynmde.js.map +1 -0
- package/dist/page-CIwNUtGr.js +227 -0
- package/dist/page-CIwNUtGr.js.map +1 -0
- package/dist/page-header-commands-DFMlNYzN.js +128 -0
- package/dist/page-header-commands-DFMlNYzN.js.map +1 -0
- package/dist/{pagination-BL25hu2s.js → pagination-Ch8X_47u.js} +5 -5
- package/dist/{pagination-BL25hu2s.js.map → pagination-Ch8X_47u.js.map} +1 -1
- package/dist/{popover-menu-Cn9rUkdc.js → popover-menu-BYaCdFhf.js} +6 -6
- package/dist/{popover-menu-Cn9rUkdc.js.map → popover-menu-BYaCdFhf.js.map} +1 -1
- package/dist/{popover-gnTOhbFM.js → popover-uwzX2vo7.js} +4 -4
- package/dist/{popover-gnTOhbFM.js.map → popover-uwzX2vo7.js.map} +1 -1
- package/dist/{primitives-BFK08r9M.js → primitives-Du64iDbb.js} +6 -6
- package/dist/{primitives-BFK08r9M.js.map → primitives-Du64iDbb.js.map} +1 -1
- package/dist/primitives.js +4 -4
- package/dist/{progress-B1VnCT0K.js → progress-BvF2oCdV.js} +5 -5
- package/dist/{progress-B1VnCT0K.js.map → progress-BvF2oCdV.js.map} +1 -1
- package/dist/{receipt-BVSOH3Xo.js → receipt-D789Jwyy.js} +6 -6
- package/dist/{receipt-BVSOH3Xo.js.map → receipt-D789Jwyy.js.map} +1 -1
- package/dist/{rich-text-GOUyKQ-s.js → rich-text-CLJEf76s.js} +4 -4
- package/dist/{rich-text-GOUyKQ-s.js.map → rich-text-CLJEf76s.js.map} +1 -1
- package/dist/{rich-text-editor-cRLC-eBK.js → rich-text-editor-Cm1dpUpQ.js} +10 -10
- package/dist/{rich-text-editor-cRLC-eBK.js.map → rich-text-editor-Cm1dpUpQ.js.map} +1 -1
- package/dist/{rich-text-editor-toolbar-DfXg0-VC.js → rich-text-editor-toolbar-L__e4x47.js} +4 -4
- package/dist/{rich-text-editor-toolbar-DfXg0-VC.js.map → rich-text-editor-toolbar-L__e4x47.js.map} +1 -1
- package/dist/{scroll-area-DcI-M1UT.js → scroll-area-La5RXsEk.js} +2 -2
- package/dist/{scroll-area-DcI-M1UT.js.map → scroll-area-La5RXsEk.js.map} +1 -1
- package/dist/{separator-Bom7NsGO.js → separator-DAEV0w65.js} +2 -2
- package/dist/{separator-Bom7NsGO.js.map → separator-DAEV0w65.js.map} +1 -1
- package/dist/{separator-BDV-Y648.js → separator-GNfPG-90.js} +3 -3
- package/dist/{separator-BDV-Y648.js.map → separator-GNfPG-90.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/settings-BA2iboic.js +174 -0
- package/dist/settings-BA2iboic.js.map +1 -0
- package/dist/{sheet-ijlsjq-n.js → sheet-DoAxTb2J.js} +7 -7
- package/dist/{sheet-ijlsjq-n.js.map → sheet-DoAxTb2J.js.map} +1 -1
- package/dist/{sidebar-DkTO4VTO.js → sidebar-ByqKR_W5.js} +13 -13
- package/dist/{sidebar-DkTO4VTO.js.map → sidebar-ByqKR_W5.js.map} +1 -1
- package/dist/{sidebar-Db6gkh3U.js → sidebar-D2iSnGJ7.js} +11 -11
- package/dist/{sidebar-Db6gkh3U.js.map → sidebar-D2iSnGJ7.js.map} +1 -1
- package/dist/{skeleton-Byjnt7qr.js → skeleton-CUj8O5Bd.js} +3 -3
- package/dist/{skeleton-Byjnt7qr.js.map → skeleton-CUj8O5Bd.js.map} +1 -1
- package/dist/smart-card-CqkzQsK-.js +614 -0
- package/dist/smart-card-CqkzQsK-.js.map +1 -0
- package/dist/{structure-BmisBK-3.js → structure-C0V0_Fyf.js} +3 -3
- package/dist/{structure-BmisBK-3.js.map → structure-C0V0_Fyf.js.map} +1 -1
- package/dist/{structure.recipes-EPz60cU8.js → structure.recipes-BB4-n58V.js} +2 -2
- package/dist/{structure.recipes-EPz60cU8.js.map → structure.recipes-BB4-n58V.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{table-DsfzoUia.js → table-CpvnzJn9.js} +3 -3
- package/dist/{table-DsfzoUia.js.map → table-CpvnzJn9.js.map} +1 -1
- package/dist/{table-BweFy_P9.js → table-DH7rozUv.js} +19 -19
- package/dist/{table-BweFy_P9.js.map → table-DH7rozUv.js.map} +1 -1
- package/dist/{tabs-CDocW5D1.js → tabs-eqVsJZWO.js} +7 -7
- package/dist/{tabs-CDocW5D1.js.map → tabs-eqVsJZWO.js.map} +1 -1
- package/dist/{text-inputs-f9Ia-aCi.js → text-inputs-DXItiR0O.js} +101 -98
- package/dist/text-inputs-DXItiR0O.js.map +1 -0
- package/dist/{text.styles-g4He6UIW.js → text.styles-B64My8RZ.js} +25 -10
- package/dist/text.styles-B64My8RZ.js.map +1 -0
- package/dist/theme.css +152 -112
- package/dist/{timelines-CwM_9IhD.js → timelines-DmtztAY_.js} +10 -10
- package/dist/{timelines-CwM_9IhD.js.map → timelines-DmtztAY_.js.map} +1 -1
- package/dist/{tooltip-yiRJUFjp.js → tooltip-B4hjKtoV.js} +3 -3
- package/dist/{tooltip-yiRJUFjp.js.map → tooltip-B4hjKtoV.js.map} +1 -1
- package/dist/{tree-WnKQzwbq.js → tree-CV11PURP.js} +8 -8
- package/dist/{tree-WnKQzwbq.js.map → tree-CV11PURP.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-CSyJrh28.js +117 -0
- package/dist/typography-CSyJrh28.js.map +1 -0
- package/dist/typography.js +1 -1
- package/dist/{ui-provider-C_U0Xma4.js → ui-provider-CQCuCBcy.js} +3 -3
- package/dist/ui-provider-CQCuCBcy.js.map +1 -0
- package/dist/ui-provider.js +1 -1
- package/dist/{upload-CXyxmQBP.js → upload-C9SA0X-8.js} +11 -11
- package/dist/{upload-CXyxmQBP.js.map → upload-C9SA0X-8.js.map} +1 -1
- package/dist/{upload-queue-Boscubn9.js → upload-queue-DhQJiSRc.js} +9 -9
- package/dist/{upload-queue-Boscubn9.js.map → upload-queue-DhQJiSRc.js.map} +1 -1
- package/dist/{usage-card-BhO5eqkX.js → usage-card-DVTRDmGz.js} +134 -133
- package/dist/usage-card-DVTRDmGz.js.map +1 -0
- package/dist/{utils-BRhFDwuU.js → utils-CF3c95Io.js} +68 -5
- package/dist/utils-CF3c95Io.js.map +1 -0
- package/dist/value-inputs-C0o70p-U.js +980 -0
- package/dist/value-inputs-C0o70p-U.js.map +1 -0
- package/dist/{value-typography-BP8OG6h5.js → value-typography-ClupF0Gz.js} +2 -2
- package/dist/{value-typography-BP8OG6h5.js.map → value-typography-ClupF0Gz.js.map} +1 -1
- package/dist/workspace-9EFVXUyk.js +410 -0
- package/dist/workspace-9EFVXUyk.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +14 -129
- package/docs/consumer-skill/examples/app-layout.tsx +22 -12
- package/docs/consumer-skill/examples/authentication.tsx +77 -0
- package/docs/consumer-skill/examples/edit.tsx +30 -38
- package/docs/consumer-skill/examples/manifest.json +51 -1
- package/docs/consumer-skill/examples/rhf-bindings.tsx +86 -0
- package/docs/consumer-skill/examples/rhf-edit-page.tsx +141 -0
- package/docs/consumer-skill/examples/rhf-overlay-form.tsx +92 -0
- package/docs/consumer-skill/examples/rhf-transport.tsx +28 -0
- package/docs/consumer-skill/references/agents-md.md +17 -7
- package/docs/consumer-skill/references/authentication.md +42 -0
- package/docs/consumer-skill/references/component-contracts.json +319824 -0
- package/docs/consumer-skill/references/composition-mapping.md +92 -0
- package/docs/consumer-skill/references/composition.md +43 -19
- package/docs/consumer-skill/references/design-contract.md +32 -0
- package/docs/consumer-skill/references/discovery.md +84 -7
- package/docs/consumer-skill/references/installation.md +40 -36
- package/docs/consumer-skill/references/integration.md +6 -2
- package/docs/consumer-skill/references/public-api.json +1519 -65
- package/docs/consumer-skill/references/review.md +9 -4
- package/docs/consumer-skill/references/rhf-workflows.md +86 -0
- package/docs/consumer-skill/references/screen-archetypes.md +22 -0
- package/docs/consumer-skill/references/theming.md +8 -9
- package/docs/consumer-skill/references/tokens.json +12 -3
- package/docs/consumer-skill/references/workflows.md +2 -1
- package/docs/consumer-skill/scripts/composition-schema.d.mts +2 -0
- package/docs/consumer-skill/scripts/composition-schema.mjs +32 -0
- package/docs/consumer-skill/scripts/composition.mjs +198 -0
- package/docs/consumer-skill/scripts/discovery.mjs +42 -10
- package/docs/consumer-skill/scripts/inspect-component.mjs +11 -0
- package/docs/consumer-skill/scripts/inspect-tokens.mjs +11 -0
- package/docs/consumer-skill/scripts/inspection.mjs +138 -0
- package/docs/consumer-skill/scripts/map-composition.mjs +12 -0
- package/docs/consumer-skill/scripts/setup-skills.mjs +76 -0
- package/docs/consumer-skills/themelia-components/SKILL.md +30 -0
- package/docs/consumer-skills/themelia-composition/SKILL.md +35 -0
- package/docs/consumer-skills/themelia-forms/SKILL.md +12 -0
- package/docs/consumer-skills/themelia-foundation/SKILL.md +14 -0
- package/docs/consumer-skills/themelia-tokenization/SKILL.md +35 -0
- package/package.json +4 -2
- package/templates/README.md +39 -0
- package/templates/admin-shell-template.tsx +382 -0
- package/templates/analytics-operations-template.tsx +376 -0
- package/templates/customers-template.tsx +509 -0
- package/templates/index.ts +29 -0
- package/templates/orders-template.tsx +1102 -0
- package/templates/products-template.tsx +834 -0
- package/templates/user-permissions-template.tsx +450 -0
- package/dist/action-menu-CllU52Mm.js +0 -280
- package/dist/action-menu-CllU52Mm.js.map +0 -1
- package/dist/affordance-geometry.generated-tF36bREk.js.map +0 -1
- package/dist/ai-artifact-DvTwDVyL.js.map +0 -1
- package/dist/app-shell-C4FhvCqF.js.map +0 -1
- package/dist/cards-BaBZR-AU.js.map +0 -1
- package/dist/checkbox-AWIhNhmo.js.map +0 -1
- package/dist/choice-inputs-CNHvARCJ.js.map +0 -1
- package/dist/comments-DD0DUPwJ.js.map +0 -1
- package/dist/containers-Mu1LMGV1.js +0 -103
- package/dist/containers-Mu1LMGV1.js.map +0 -1
- package/dist/data-display-DT_khPl_.js.map +0 -1
- package/dist/date-picker-B2K3ucWn.js.map +0 -1
- package/dist/date-pickers-Ds8gLaoP.js +0 -175
- package/dist/date-pickers-Ds8gLaoP.js.map +0 -1
- package/dist/form-field-CwH9y77i.js.map +0 -1
- package/dist/forms-B9G_xwzi.js.map +0 -1
- package/dist/forms-numeric-B_jraJaQ.js.map +0 -1
- package/dist/input-DQdEd0YD.js +0 -263
- package/dist/input-DQdEd0YD.js.map +0 -1
- package/dist/item-K5_ghvze.js +0 -275
- package/dist/item-K5_ghvze.js.map +0 -1
- package/dist/metadata-list-8N16ZMW_.js +0 -405
- package/dist/metadata-list-8N16ZMW_.js.map +0 -1
- package/dist/overflow-tab-bar-CWY7Nogn.js.map +0 -1
- package/dist/overlays-tMkF-VAN.js.map +0 -1
- package/dist/page-CL9YeH_V.js +0 -224
- package/dist/page-CL9YeH_V.js.map +0 -1
- package/dist/page-header-commands-DOb6WsfD.js +0 -126
- package/dist/page-header-commands-DOb6WsfD.js.map +0 -1
- package/dist/settings-ybnjVwbd.js +0 -171
- package/dist/settings-ybnjVwbd.js.map +0 -1
- package/dist/smart-card-DiC5aac3.js +0 -604
- package/dist/smart-card-DiC5aac3.js.map +0 -1
- package/dist/text-inputs-f9Ia-aCi.js.map +0 -1
- package/dist/text.styles-g4He6UIW.js.map +0 -1
- package/dist/typography-UTnveOEy.js +0 -117
- package/dist/typography-UTnveOEy.js.map +0 -1
- package/dist/ui-provider-C_U0Xma4.js.map +0 -1
- package/dist/usage-card-BhO5eqkX.js.map +0 -1
- package/dist/utils-BRhFDwuU.js.map +0 -1
- package/dist/value-inputs-TaX4OjNk.js +0 -963
- package/dist/value-inputs-TaX4OjNk.js.map +0 -1
- package/dist/workspace-B-OEm3Kf.js +0 -408
- package/dist/workspace-B-OEm3Kf.js.map +0 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Executable composition mapping
|
|
2
|
+
|
|
3
|
+
Use this when a screen needs several cooperating owners or when a component's
|
|
4
|
+
surface and placement are unclear. The mapper resolves explicit responsibilities
|
|
5
|
+
into exact public components and supported regions. The application still decides
|
|
6
|
+
the user's priorities, data, commands and meaningful grouping.
|
|
7
|
+
|
|
8
|
+
First resolve the installed package and verify copied guidance using
|
|
9
|
+
[installed setup](installation.md). These commands assume its conventional
|
|
10
|
+
`node_modules` location:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --roles
|
|
14
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --role facts
|
|
15
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern record-detail --main invoice-lines --aside facts
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
For a complete copied bundle, use the shared skill's
|
|
19
|
+
`scripts/map-composition.mjs` instead. It resolves `public-api.json` and
|
|
20
|
+
`component-contracts.json` beside that script's shared references, independently
|
|
21
|
+
of the current directory. Node is sufficient; the mapper does not load React,
|
|
22
|
+
TypeScript, optional component peers or the consumer's application code.
|
|
23
|
+
|
|
24
|
+
## Describe responsibilities, then inspect the plan
|
|
25
|
+
|
|
26
|
+
1. Turn the business brief into independent subjects: for example invoice lines
|
|
27
|
+
in the main region and record facts in the supporting region. A responsibility
|
|
28
|
+
is a role tag reported by `--roles`; a complete business brief is not a role.
|
|
29
|
+
2. Use `--role` to inspect a role's mapped owners. Role names accept spaces or
|
|
30
|
+
kebab-case. A qualified `themelia-react-ui/<family>#<Symbol>` selector chooses
|
|
31
|
+
an exact mapped contract when a role has several candidates.
|
|
32
|
+
3. Select a pattern and repeat `--main` or `--aside` for each subject. Supported
|
|
33
|
+
patterns are `record-detail`, `collection`, `edit`, `analytics` and `embedded`.
|
|
34
|
+
They identify structural context; they do not install form state, fetch data
|
|
35
|
+
or choose application-specific variants. Edit plans explicitly retain the
|
|
36
|
+
application's native form and submission requirements.
|
|
37
|
+
Use `--limit 1..10` to bound candidate details; it does not discard requested
|
|
38
|
+
subjects or hide unresolved coverage.
|
|
39
|
+
4. Read `tree`, `coverage`, `unresolved`, `warnings`, `requiredPeers`,
|
|
40
|
+
`applicationOwns` and the focused `nextReads` before implementing. Inspect each
|
|
41
|
+
chosen unfamiliar component with the [API inspector](discovery.md#inspect-a-selected-component).
|
|
42
|
+
|
|
43
|
+
`requiredPeers` lists the selected families' additional optional package peers;
|
|
44
|
+
`baselinePeers` lists the package's nonoptional peers. Both still require the
|
|
45
|
+
installed setup and matching versions. An empty additional list does not remove
|
|
46
|
+
React or Base UI requirements.
|
|
47
|
+
|
|
48
|
+
The record-detail example resolves a route owner and, because support is
|
|
49
|
+
requested, a main/support layout. Its `tree.slots` uses actual insertion props
|
|
50
|
+
such as `children`, `main` and `aside`. Parent-surface content can receive a
|
|
51
|
+
subject Card at that boundary. Already framed owners keep their own surface;
|
|
52
|
+
variant-dependent owners require inspection before choosing framing.
|
|
53
|
+
|
|
54
|
+
For an existing Card boundary:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern embedded --parent Card --main facts
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
That plan uses the selected host's `children` region without adding another Page
|
|
61
|
+
or Card. Qualify an ambiguous parent with `--import <exact public import>`.
|
|
62
|
+
An embedded request without a parent leaves the host decision explicit; inspect
|
|
63
|
+
its unresolved ownership before creating a new boundary.
|
|
64
|
+
Only an explicitly declared route-child slot permits a Page inside a shell;
|
|
65
|
+
AuthShell and bounded workspaces are ordinary content hosts. Variant-dependent
|
|
66
|
+
hosts retain inspection warnings before another framed subject is added.
|
|
67
|
+
|
|
68
|
+
## Read the result's scope
|
|
69
|
+
|
|
70
|
+
The output is advisory JSON. `mapped` means the requested roles resolved under
|
|
71
|
+
the mapper's supported contracts. It does not mean an application is implemented,
|
|
72
|
+
accessible, visually accepted or ready for delivery. `partial` and `unresolved`
|
|
73
|
+
retain requests the mapper could not place or uniquely identify; choose a more
|
|
74
|
+
specific role or qualified mapped owner. Metadata coverage is deliberately
|
|
75
|
+
explicit: an unmapped component can still be a valid public component.
|
|
76
|
+
|
|
77
|
+
Mappings belong to exact import/symbol pairs in the existing authored catalogue,
|
|
78
|
+
then flow into its generated public index. They describe role tags, owner kind,
|
|
79
|
+
region/cell/overlay placement, surface ownership, insertion props and any authored
|
|
80
|
+
literal recommendations. Generation checks them against the actual public API.
|
|
81
|
+
They do not introduce another theme, token system or component registry.
|
|
82
|
+
|
|
83
|
+
Table-cell identities stay in column renderers, and overlays stay at their
|
|
84
|
+
composing app/feature boundary. Similar collection owners remain alternatives;
|
|
85
|
+
a request that cannot distinguish them stays unresolved. App data, callbacks,
|
|
86
|
+
permissions, forms and asynchronous lifecycle still follow the selected owner's
|
|
87
|
+
contract and matching recipe.
|
|
88
|
+
|
|
89
|
+
Use [composition ownership](composition.md), [screen archetypes](screen-archetypes.md)
|
|
90
|
+
and [form workflows](rhf-workflows.md) for the selected task. After implementing,
|
|
91
|
+
run the existing source checker and app checks, inspect narrow/wide light/dark
|
|
92
|
+
appearance, and execute the relevant interactions from [review](review.md).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Composition
|
|
2
2
|
|
|
3
|
-
The [design contract](design-contract.md) separates application layout freedom
|
|
3
|
+
The [design contract](design-contract.md#semantic-roles) defines shared spacing and typography roles and separates application layout freedom
|
|
4
4
|
from library-owned anatomy. Use supported props and slots inside shared surfaces;
|
|
5
5
|
keep placement, width, wrapping and overflow with the surrounding composition.
|
|
6
6
|
|
|
@@ -82,7 +82,8 @@ export and destructive command should not all inherit the same visual emphasis.
|
|
|
82
82
|
}}>{/* route content */}</Page>
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
When a record has separately selected or routed sections, use `header.tabs`.
|
|
86
|
+
A continuous detail document can keep its sections in the body. The tabs sit under the header's
|
|
86
87
|
copy and commands, a `badge` shows a count, tabs that do not fit move into a More
|
|
87
88
|
menu, and `onValueChange` switches the section or routes. Labels name the
|
|
88
89
|
command; an icon on every command repeats it, so keep `+` on an add command and
|
|
@@ -222,21 +223,39 @@ for richer content. Facts and rows follow the same rule: one glyph repeated on
|
|
|
222
223
|
every MetadataList item or Item row is decoration, so leave `icon`/media empty.
|
|
223
224
|
|
|
224
225
|
Card `gap` owns spacing between regions; `contentGap` owns direct body-child
|
|
225
|
-
spacing; `textGap` owns title/supporting-copy rhythm.
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
226
|
+
spacing; `textGap` owns title/supporting-copy rhythm. `contentGap` is unset by
|
|
227
|
+
default, so raw body children retain their inline or caller-owned layout.
|
|
228
|
+
Choose `contentGap="xl"` for related siblings and `contentGap="2xl"` for
|
|
229
|
+
independent sections. Omit it around an existing Grid/Stack or a single feature
|
|
230
|
+
that already owns its layout:
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
<Card title="Billing" contentGap="xl">
|
|
234
|
+
<MetadataList columns={1} items={[
|
|
235
|
+
{ label: 'Plan', value: 'Studio' },
|
|
236
|
+
{ label: 'Billing cycle', value: 'Monthly' },
|
|
237
|
+
]} />
|
|
238
|
+
<Text type="secondary" size="xs">Invoices go to billing@northstar.example.</Text>
|
|
239
|
+
</Card>
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
This lets Card own body rhythm without an extra caller wrapper. For independent sections,
|
|
243
|
+
change the Card to `contentGap="2xl"` and let each section own its heading/copy
|
|
244
|
+
group. The default regional gap
|
|
245
|
+
follows the surface inset tier: 12px with `padding="sm"`, 24px with omitted/`md`
|
|
246
|
+
or `none`, and 32px with `lg`, before spacing scale. An explicit semantic `gap`
|
|
247
|
+
overrides it without changing the insets. See [semantic roles](design-contract.md#semantic-roles).
|
|
248
|
+
|
|
249
|
+
Ordinary independent cards omit `padding` and retain `md` (24px at default
|
|
250
|
+
roots). Card supports `sm` (12px), `md` (24px), `lg` (32px) and `none` (no inset).
|
|
251
|
+
The general surface scale also has a 16px tier; Card does not expose it as a padding prop.
|
|
252
|
+
Component size and density do not choose Card padding. All tiers follow the
|
|
253
|
+
surface roots and space-scale.
|
|
254
|
+
Card defaults to `surface="card"`, with no header rule and a footer rule.
|
|
255
|
+
Flat, card-free structure and a `headerPlacement="frame"` header draw no rule
|
|
256
|
+
unless asked. UIProvider's `card.defaultHeaderDivider` (false) and
|
|
257
|
+
`card.defaultFooterDivider` (true) configure these rules app-wide; explicit
|
|
258
|
+
per-card booleans win. Header/footer-only cards render one shared divider.
|
|
240
259
|
Inside the body, separate a card's sections with `contentGap` or a Stack gap
|
|
241
260
|
clearly larger than the row gap (`2xl` between sections), not rules.
|
|
242
261
|
Overlays rule their regions the same way: `ActionDialog`, `ActionDrawer` and `ConfirmDialog`
|
|
@@ -448,10 +467,15 @@ TwoColumnLayout defaults to its existing viewport breakpoint; choose
|
|
|
448
467
|
adaptTo="container" inside Container/PageViewport to adapt at 48rem of usable
|
|
449
468
|
parent width while preserving main-before-aside DOM/focus order.
|
|
450
469
|
|
|
451
|
-
|
|
470
|
+
The installed [app-shell recipe](../examples/app-layout.tsx) exports a copyable
|
|
471
|
+
`WorkspaceLayout` that hosts route children directly. Put `AccountDetailPage` or
|
|
472
|
+
another route Page inside it. `WorkspaceExamplePage` separately demonstrates a
|
|
473
|
+
Workspace title, Create callback and narrow measure; replace that example when
|
|
474
|
+
composing a real route. This recipe name is local to the copied file; the public
|
|
475
|
+
`WorkspaceLayout` from `layout/workspace` is the record shell described below.
|
|
452
476
|
|
|
453
477
|
PageViewport owns scrolling and adds no padding. Page defaults to `gutter="lg"`
|
|
454
|
-
and `padding="lg"` (
|
|
478
|
+
and `padding="lg"` (32px at shipped roots), so it owns inline/block space once.
|
|
455
479
|
`narrow` selects centered `md` width; explicit `maxWidth` wins. Header copy
|
|
456
480
|
defaults to dense; `textGap="normal"` is an explicit alternative. Do not assume
|
|
457
481
|
an app shell supplies gutters because it supplies a viewport. Set `gutter="none"`
|
|
@@ -52,6 +52,38 @@ requests one shared boundary. Setting both does not add a second line or a blank
|
|
|
52
52
|
body strip. Real body/alert regions retain their distinct requested boundaries;
|
|
53
53
|
an explicitly expandable card retains its collapse region.
|
|
54
54
|
|
|
55
|
+
## Semantic roles
|
|
56
|
+
|
|
57
|
+
Choose spacing by the relationship between content, before choosing a gap tier.
|
|
58
|
+
These base measurements use the shipped roots; spacing scales once through
|
|
59
|
+
`--space-scale`.
|
|
60
|
+
|
|
61
|
+
| Relationship | Default | Owner |
|
|
62
|
+
| --- | --- | --- |
|
|
63
|
+
| Structural title/supporting copy | `normal`, 4px | Headed owner or custom copy Stack |
|
|
64
|
+
| Dense supporting copy | `dense`, 2px | Row/menu copy group |
|
|
65
|
+
| Ordinary commands | `md`, 8px | Page, record and workspace command groups |
|
|
66
|
+
| Compact row affordances | `xs`, 4px | Row action group |
|
|
67
|
+
| Related fields/content | `xl`, 16px | Form or related-content group |
|
|
68
|
+
| Independent subject regions | `2xl`, 24px | Page body, TwoColumnLayout, resource, workspace and settings subjects |
|
|
69
|
+
| Page header/body separation | `3xl`, 32px | Page composition |
|
|
70
|
+
| Surface header/body/footer | Surface-derived regional gap | Card or overlay anatomy, independent of peer gaps |
|
|
71
|
+
|
|
72
|
+
Generic Stack and Grid keep their existing defaults; choose their semantic gap
|
|
73
|
+
for the relationship they host. A Card's regional gap derives from its surface
|
|
74
|
+
inset tier and remains independent of the gap between separate Cards. For Card,
|
|
75
|
+
omitted `padding` means `md` (24px); `sm` is 12px, `lg` is 32px and `none` removes
|
|
76
|
+
insets while retaining the 24px default regional gap. Explicit `gap` overrides
|
|
77
|
+
that regional recipe. The general surface vocabulary also has a 16px tier; it is
|
|
78
|
+
not an additional Card padding prop.
|
|
79
|
+
|
|
80
|
+
Typography follows route, subject and subsection roles at 20/16/14px before
|
|
81
|
+
customization. Body and supporting copy normally use 14/12px. Semantic tags stay
|
|
82
|
+
independent of visual size; supported `size`, typography/provider defaults and
|
|
83
|
+
CSS text-root overrides remain available. Density changes row/control geometry,
|
|
84
|
+
not the primary text hierarchy. Preserve a deliberate website/hero emphasis or
|
|
85
|
+
custom render content rather than forcing every heading onto the admin scale.
|
|
86
|
+
|
|
55
87
|
## Keep these choices independent
|
|
56
88
|
|
|
57
89
|
| Choice | Purpose | Does not choose |
|
|
@@ -14,9 +14,9 @@ node node_modules/themelia-react-ui/docs/consumer-skill/scripts/find-components.
|
|
|
14
14
|
|
|
15
15
|
For a copied skill, replace the script path with that copy's `scripts/find-components.mjs`. Copy the complete skill folder: the script resolves its adjacent `references/public-api.json` relative to itself, regardless of the working directory. It needs Node compatible with the package's engine requirement, not an npm/global CLI or extra dependency.
|
|
16
16
|
|
|
17
|
-
Queries accept multiple words, quoted or separate.
|
|
18
|
-
as a word; `stat` does not match `state` or `status`. An
|
|
19
|
-
|
|
17
|
+
Queries accept multiple words, quoted or separate. Strict `results` require every
|
|
18
|
+
term to match metadata as a word; `stat` does not match `state` or `status`. An
|
|
19
|
+
unknown term leaves strict results empty. Exact imports and case-exact exported names such as `Table` or
|
|
20
20
|
`Empty` select their precise contract. Ordinary task nouns `table` and `empty`
|
|
21
21
|
retain DataTable/DataView and EmptyState alongside the base anatomy. Exported
|
|
22
22
|
types and helper symbols remain available by their exact API name; documented
|
|
@@ -26,9 +26,18 @@ component symbols and curated aliases drive task recommendations.
|
|
|
26
26
|
Foundations but filters under `--layer base`. `--limit` accepts 1–100 and defaults
|
|
27
27
|
to 5. Invalid flags/options or incompatible indexes exit nonzero on stderr.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
When a natural-language query has no strict matches, the finder may add bounded
|
|
30
|
+
`related.results` separately. For example, `member workspace` can suggest the
|
|
31
|
+
workspace owner while explicitly reporting `workspace` as matched and `member`
|
|
32
|
+
as unmatched. These are incomplete context suggestions, not proof that the owner
|
|
33
|
+
implements the whole request. Unmatched terms describe missing metadata evidence;
|
|
34
|
+
they do not establish an unsupported capability. Read the suggested owner's
|
|
35
|
+
choose/avoid guidance and inspect its contract before choosing. Unknown-only
|
|
36
|
+
queries, API-like CamelCase names and explicit import paths do not recover.
|
|
37
|
+
|
|
38
|
+
If there are no useful related owners, shorten the query to the main
|
|
39
|
+
responsibility or an exact symbol, then remove the layer filter. No result does
|
|
40
|
+
not prove the package lacks that responsibility. Read the selected result's choose/avoid guidance and
|
|
32
41
|
alternatives, then follow `nextReads`; do not load every reference. For routine compact searchable selection, search
|
|
33
42
|
`PopoverMenu` or `compact searchable selection`; surface adjectives describe
|
|
34
43
|
variants, not permission to rebuild the owner's padding.
|
|
@@ -44,7 +53,7 @@ description matches. Start with responsibilities such as `record directory`,
|
|
|
44
53
|
`comparison table`, `identity cell`, `fact list`, `page header`, `query toolbar`
|
|
45
54
|
or `theme boundary`. Read choose/avoid and app-owned responsibilities before
|
|
46
55
|
deciding; a directory result does not require DataView when its workflow differs.
|
|
47
|
-
Unknown terms
|
|
56
|
+
Unknown terms never become strict matches; no fuzzy API or guessed prop is invented.
|
|
48
57
|
|
|
49
58
|
Task language also includes `dashboard KPIs`, `dashboard metrics`, `revenue
|
|
50
59
|
overview`, `statistic cards`, `usage statistics` and `single resource page`.
|
|
@@ -87,6 +96,14 @@ new code with the replacement. The public index carries the same map per family.
|
|
|
87
96
|
Exact guide aliases precede generic overlap, and unrelated family pages
|
|
88
97
|
do not fill the result merely to reach three entries.
|
|
89
98
|
|
|
99
|
+
The optional `related` object leaves strict `total` and `results` unchanged. It
|
|
100
|
+
reports an explanation, its own `total` and bounded `results` with `match:
|
|
101
|
+
"partial"`, `matchedTerms` and `unmatchedTerms`. Term coverage ranks first, then
|
|
102
|
+
the existing owner score and import ordering. These suggestions follow the same
|
|
103
|
+
layer filter and limit, and use the same published owners and focused reads;
|
|
104
|
+
package/path vocabulary alone cannot suggest an owner. The static finder shows
|
|
105
|
+
their incomplete coverage separately from full matches.
|
|
106
|
+
|
|
90
107
|
`nextReads.declaration` is relative to the installed package root.
|
|
91
108
|
`nextReads.references` and `nextReads.examples[].file` are relative to this
|
|
92
109
|
skill folder, so they also work with a complete copied skill. Examples report
|
|
@@ -105,6 +122,66 @@ owners and focused reads; declarations establish actual props and behavior.
|
|
|
105
122
|
|
|
106
123
|
Read each declaration relative to the installed package root, for example `node_modules/themelia-react-ui/dist/components/base/cards/index.d.ts`, following its relative exports as needed. Copying this skill copies metadata, not the declaration tree: use declarations from the same installed package version. Never combine metadata from one version with another version's declarations.
|
|
107
124
|
|
|
125
|
+
## Map cooperating components
|
|
126
|
+
|
|
127
|
+
The [composition mapper](composition-mapping.md) resolves explicit role tags into
|
|
128
|
+
qualified owners and an advisory region tree. Use it after decomposing a screen
|
|
129
|
+
into subjects, or inspect the available roles before choosing components:
|
|
130
|
+
|
|
131
|
+
```sh
|
|
132
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --roles
|
|
133
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/map-composition.mjs --pattern record-detail --main invoice-lines --aside facts
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Read its unresolved requirements, surface decisions and peers; the finder and
|
|
137
|
+
API inspector remain useful for responsibilities outside mapped coverage.
|
|
138
|
+
|
|
139
|
+
## Inspect a selected component
|
|
140
|
+
|
|
141
|
+
The finder chooses owners. The dependency-free inspector retrieves a bounded,
|
|
142
|
+
versioned API contract for an exact exported component without loading the full
|
|
143
|
+
catalogue or manually chasing its declaration barrel:
|
|
144
|
+
|
|
145
|
+
```sh
|
|
146
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs DataTable --import themelia-react-ui/features/table
|
|
147
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs DataTable --import themelia-react-ui/features/table --prop onRowSelectionChange
|
|
148
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-component.mjs ThemeScope --import themelia-react-ui/ui-provider
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Use `--import` to select an exact public contract when a symbol has several
|
|
152
|
+
owners. `--prop` requests one exact property; `--limit` bounds the initial list
|
|
153
|
+
of props. Read reported omissions before assuming a property is absent. Unknown
|
|
154
|
+
exports/props and ambiguous unqualified contracts fail explicitly. Aliases can
|
|
155
|
+
share implementation while distinct exports such as the two ThemeScope owners
|
|
156
|
+
have different APIs.
|
|
157
|
+
|
|
158
|
+
The generated `component-contracts.json` comes from the existing TypeScript/prop
|
|
159
|
+
documentation pipeline. Types, call signatures, generic parameters, overloads
|
|
160
|
+
and mode-dependent requirements remain visible. A prop required in one union
|
|
161
|
+
branch is not universally required. Defaults are only those documented by that
|
|
162
|
+
pipeline; an unknown default is not inferred. Native attributes and named helper
|
|
163
|
+
types still lead to installed declarations where the bounded contract needs
|
|
164
|
+
more detail. Inspect callback types and controlled/default state before adapting
|
|
165
|
+
a recipe; sharing a visual shape does not mean controls share a value contract.
|
|
166
|
+
|
|
167
|
+
The copied inspector reads its adjacent shared metadata, like the finder. Verify
|
|
168
|
+
the complete copied bundle and installed identity first. It does not install
|
|
169
|
+
dependencies, alter an app, or add an editor/type-checking runtime.
|
|
170
|
+
|
|
171
|
+
## Inspect theme vocabulary
|
|
172
|
+
|
|
173
|
+
```sh
|
|
174
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs surface --limit 8
|
|
175
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/inspect-tokens.mjs radius --limit 5
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Token lookup reads the existing generated token index. It distinguishes public
|
|
179
|
+
structural roots and advanced settings from derived utility vocabulary. A
|
|
180
|
+
utility match does not become an override root. Unreported semantic theme values
|
|
181
|
+
must be read from the installed stylesheet and [theme guide](theming.md); the
|
|
182
|
+
tool does not invent a palette. The tokenization skill owns changing these
|
|
183
|
+
shared roles and verifying the effects across controls/surfaces and portals.
|
|
184
|
+
|
|
108
185
|
`ThemeScope` has distinct contracts. Root and `themelia-react-ui/ui-provider` export the basic CSS-inheritance boundary with native div/style props and portal hosting. `themelia-react-ui/features/theme-tweaker` exports the advanced theme-definition scope. Inspect the result's responsibility and that exact family's declaration before selecting props.
|
|
109
186
|
|
|
110
187
|
The index retains schemaVersion/discoveryVersion 1; optional family `recipes` and `references`
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
# Installed package and skill setup
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Choose the CSS path
|
|
4
|
+
|
|
5
|
+
**Standalone compiled CSS:** import `themelia-react-ui/style.css` once in the app entry. It includes component styles and the documented public utility vocabulary; components work without a host reset, Tailwind processing or private-source scanning. It deliberately omits global preflight. This path does not generate arbitrary utility classes written in app source.
|
|
6
|
+
|
|
7
|
+
**Tailwind v4 application utilities:** when the app authors Tailwind classes, process this application stylesheet through its Tailwind v4 build integration:
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
@import "tailwindcss";
|
|
11
|
+
@import "themelia-react-ui/style.css";
|
|
12
|
+
@import "themelia-react-ui/theme.css";
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Tailwind supplies app-generated utilities and its layered preflight; theme.css makes the semantic and structural vocabulary available to that compilation. No package-private source scan is required. The default layer order is `theme, base, components, utilities`. Keep app resets inside `@layer base`; unlayered universal/tag resets outrank layered package styles regardless of import order. Do not blanket-reset `[data-slot]`, which also belongs to third-party and app markup. Put intentional scoped app overrides after these imports. See [integration](integration.md) for an optional app-owned reset and provider setup.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Themelia 2.0.4 requires the official `@base-ui/react ^1.9.0` npm peer alongside
|
|
4
19
|
React, React DOM and Lucide. An app already using `^1.9.0` can retain that range.
|
|
5
20
|
Remove any older private Base UI archive pin or override before refreshing the
|
|
6
21
|
lockfile; dismissal translations and nested popup focus belong to Themelia's
|
|
@@ -31,27 +46,15 @@ while (true) {
|
|
|
31
46
|
}
|
|
32
47
|
const installedSkill = path.join(root, 'docs/consumer-skill');
|
|
33
48
|
const selectedSkill = process.env.THEMELIA_SKILL_DIR ?? installedSkill;
|
|
34
|
-
for (const file of ['public-api.json', 'tokens.json']) {
|
|
49
|
+
for (const file of ['public-api.json', 'tokens.json', 'component-contracts.json']) {
|
|
35
50
|
const installed = readJson(path.join(installedSkill, 'references', file));
|
|
36
51
|
assert.equal(installed.package, manifest.name, 'Installed guidance package mismatch');
|
|
37
52
|
assert.equal(installed.version, manifest.version, 'Installed guidance version mismatch');
|
|
38
|
-
const selected = readJson(path.join(selectedSkill, 'references', file));
|
|
39
|
-
assert.deepEqual(selected, installed, 'Copied skill is stale; refresh the complete folder');
|
|
40
53
|
}
|
|
41
54
|
if (fs.realpathSync(selectedSkill) !== fs.realpathSync(installedSkill)) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const installed = path.join(directory, entry.name);
|
|
46
|
-
const selected = path.join(selectedSkill, path.relative(installedSkill, installed));
|
|
47
|
-
const info = fs.lstatSync(installed);
|
|
48
|
-
assert(!info.isSymbolicLink(), 'Installed guidance must contain real assets');
|
|
49
|
-
assert(fs.existsSync(selected) && !fs.lstatSync(selected).isSymbolicLink(), 'Copied skill is stale; missing or linked asset');
|
|
50
|
-
if (info.isDirectory()) compareAssets(installed);
|
|
51
|
-
else assert(fs.readFileSync(installed).equals(fs.readFileSync(selected)), 'Copied skill is stale; refresh the complete folder');
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
compareAssets(installedSkill);
|
|
55
|
+
const { pathToFileURL } = await import('node:url');
|
|
56
|
+
const { checkCopiedConsumerBundle } = await import(pathToFileURL(path.join(installedSkill, 'scripts/setup-skills.mjs')).href);
|
|
57
|
+
checkCopiedConsumerBundle({ packageRoot: root, destination: path.dirname(selectedSkill) });
|
|
55
58
|
}
|
|
56
59
|
// The app's project instructions block records the version it was pasted from.
|
|
57
60
|
const instructions = ['AGENTS.md', 'CLAUDE.md'].find(file => fs.existsSync(file));
|
|
@@ -61,7 +64,7 @@ console.log(JSON.stringify({ package: manifest.name, version: manifest.version,
|
|
|
61
64
|
JS
|
|
62
65
|
```
|
|
63
66
|
|
|
64
|
-
Use the reported root for the bundled finder, stylesheet paths and published
|
|
67
|
+
Use the reported root for the bundled finder/inspectors, stylesheet paths and published
|
|
65
68
|
declarations. Install required peers from that manifest and optional peers for
|
|
66
69
|
the exact imported families from `references/public-api.json`. A copied skill's
|
|
67
70
|
finder reports its own metadata version; it does not inspect the app installation.
|
|
@@ -71,7 +74,7 @@ running the recipe. The comparison checks metadata contents as well as version,
|
|
|
71
74
|
so stale copies with the same development version are caught. Every installed
|
|
72
75
|
guidance/script/example asset is also compared byte-for-byte; extra app-owned
|
|
73
76
|
files or publisher markers in the copy are not checked. Keep local product policy
|
|
74
|
-
outside the package guidance. Recopy the complete
|
|
77
|
+
outside the package guidance. Recopy the complete bundle after upgrades, and
|
|
75
78
|
read declarations from the installed package.
|
|
76
79
|
|
|
77
80
|
`agentsBlock` reports whether the app's `AGENTS.md` (or `CLAUDE.md`) carries the
|
|
@@ -102,20 +105,21 @@ need the codemod; `button: { defaultTone: 'primary', defaultButtonStyle: 'solid'
|
|
|
102
105
|
restores the previous default app-wide. Afterwards, demote extra primaries so
|
|
103
106
|
each page or surface keeps one.
|
|
104
107
|
|
|
105
|
-
##
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
package
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
108
|
+
## Copy the complete skill bundle
|
|
109
|
+
|
|
110
|
+
The package ships three focused capabilities and one compatibility/shared root. One copy of API/token/contract metadata, scripts and examples is shared by all three. Do not copy only an individual SKILL.md or duplicate the generated indexes into each skill.
|
|
111
|
+
|
|
112
|
+
When the user requests installation, run the bundled copy helper with their configured agent skills directory. For Codex the usual destination is `~/.codex/skills`; honor a configured alternative:
|
|
113
|
+
|
|
114
|
+
```sh
|
|
115
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --copy --destination "$HOME/.codex/skills"
|
|
116
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/setup-skills.mjs --check --destination "$HOME/.codex/skills"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
It copies `themelia-components`, `themelia-tokenization`, `themelia-composition`, and `themelia-react-ui-consumer` as real sibling directories. Rich templates are copied once under the shared directory. Markdown links are rebased for this installed layout; no symlinks or repository paths are required. Existing canonical/shared destinations are rejected before writing: preserve or move the previous complete bundle before an upgrade, then copy the release together. `--check` compares every expected asset after rebasing, so stale content with an unchanged development version is caught.
|
|
120
|
+
|
|
121
|
+
The package retains `docs/consumer-skills/themelia-foundation/SKILL.md` and `themelia-forms/SKILL.md` as compatibility routers. They are not added by fresh copying. Existing legacy or unrelated skills are left untouched; review older agent routing separately when upgrading. Keep app policy outside the copied package bundle.
|
|
122
|
+
|
|
123
|
+
For the identity recipe above, set `THEMELIA_SKILL_DIR` to the copied shared `themelia-react-ui-consumer` directory. In project instructions, use the generated [AGENTS.md block](agents-md.md) pointing at package skills, or point the three skill paths to their copied siblings. Invoke `$themelia-components` for setup, discovery and typed APIs/forms; `$themelia-tokenization` for themes and shared visual roles; and `$themelia-composition` for screen hierarchy, workflows and visual repair. The compatibility `$themelia-react-ui-consumer` entrypoint remains available.
|
|
124
|
+
|
|
125
|
+
Copying into an agent's global skill directory requires a user request. The npm package does not perform installation automatically. Run the consuming app's own type/lint/test/build scripts after integration; repository maintainer commands are not installed consumer commands.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Integration
|
|
2
2
|
|
|
3
|
-
Install required peers from the installed package.json; public-api.json records required/optional peers. Install optional peers for the imported families, including base families such as charts and QR code. Whole-family declaration requirements can exceed a tree-shaken runtime graph; follow the exact family's index and declarations. Import style.css once before overrides; it omits preflight
|
|
3
|
+
Install required peers from the installed package.json; public-api.json records required/optional peers. Install optional peers for the imported families, including base families such as charts and QR code. Whole-family declaration requirements can exceed a tree-shaken runtime graph; follow the exact family's index and declarations. Import style.css once before overrides; it omits global preflight and components remain usable without a host reset. Use the [installation CSS paths](installation.md#choose-the-css-path) when generating app utilities. Basic controls must not pull in unrelated map/editor/chart dependencies.
|
|
4
4
|
|
|
5
5
|
Put global resets in the lower-priority `base` layer, or use your framework's layered preflight. The package uses the `theme, base, components, utilities` layer order. Unlayered rules outrank layered component styles regardless of import order; a global `button { font: inherit }` can replace the library's control size and weight. For an app-owned reset:
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ Load intentional, scoped app overrides after the package stylesheet. Keep broad
|
|
|
18
18
|
|
|
19
19
|
UIProvider supplies stable mount-time defaults: explicit prop, provider default, fallback. Per-mount requests/data/callbacks stay on components. ThemeScope from themelia-react-ui/ui-provider places descendant portals inside its CSS boundary. A styled div does not relocate body portals; explicit Base UI portal containers take precedence.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Cards omit the header rule and keep the footer rule by default. To separate them by spacing
|
|
22
22
|
alone, configure the single application provider with
|
|
23
23
|
`card: { defaultHeaderDivider: false, defaultFooterDivider: false }`.
|
|
24
24
|
Explicit Card booleans override these defaults. Ordinary card
|
|
@@ -113,3 +113,7 @@ both container content edges without global preflight; Container and DataTable
|
|
|
113
113
|
own border-box sizing. Stabilize lifecycle inputs as explained in
|
|
114
114
|
[workflows](workflows.md#scoped-directory). These are example/runtime proofs,
|
|
115
115
|
not evidence of an independent agent choosing the same composition.
|
|
116
|
+
|
|
117
|
+
## Form transport and router adapters
|
|
118
|
+
|
|
119
|
+
Use [RHF workflows](rhf-workflows.md#transport-lifecycle) for frontend state with Inertia callback visits or TanStack async mutations. Await the complete transport before resetting dirty state or closing an overlay. The framework stays in the app. `renderLink` on AppSidebar/Page headers adapts the app router: forward href, children, className, accessible/native attributes and onClick; preserve modifier/new-tab behavior and invoke the supplied click handler so mobile navigation can close. Use the [typed shell recipe](../examples/app-layout.tsx) for the exact public renderLink type rather than inventing a router prop. React Router Link, Inertia Link and TanStack Link each need an app adapter matching their own installed version.
|