themelia-react-ui 1.0.2 → 2.0.1
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 +632 -1
- package/README.md +31 -13
- package/dist/accordion-B6a3vVgA.js +207 -0
- package/dist/accordion-B6a3vVgA.js.map +1 -0
- package/dist/action-menu-TzCoSlwL.js +280 -0
- package/dist/action-menu-TzCoSlwL.js.map +1 -0
- package/dist/{affordance-geometry.generated-CL84ZN9A.js → affordance-geometry.generated-B5iu-Mkr.js} +9 -3
- package/dist/affordance-geometry.generated-B5iu-Mkr.js.map +1 -0
- package/dist/{ai-artifact-DLVdK0Py.js → ai-artifact-BMJdv-6q.js} +389 -391
- package/dist/ai-artifact-BMJdv-6q.js.map +1 -0
- package/dist/{app-shell-C_fKpljx.js → app-shell-ZK5RWdo6.js} +4 -4
- package/dist/{app-shell-C_fKpljx.js.map → app-shell-ZK5RWdo6.js.map} +1 -1
- package/dist/attachment-BtfhGm8i.js +245 -0
- package/dist/attachment-BtfhGm8i.js.map +1 -0
- package/dist/{auth-CAQcasMV.js → auth-CYxKfo69.js} +239 -237
- package/dist/auth-CYxKfo69.js.map +1 -0
- package/dist/{avatar-Bu2HhitA.js → avatar-BBnEJIx8.js} +71 -68
- package/dist/avatar-BBnEJIx8.js.map +1 -0
- package/dist/badge-MrKVNzW9.js +93 -0
- package/dist/badge-MrKVNzW9.js.map +1 -0
- 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 +3 -0
- package/dist/base/buttons.js +2 -3
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +19 -19
- package/dist/base/carousel.js.map +1 -1
- package/dist/base/cascader.js +234 -224
- package/dist/base/cascader.js.map +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +3 -3
- 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 +7 -7
- package/dist/base/feedback.js +3 -3
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +81 -76
- package/dist/base/inline-edit.js.map +1 -1
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +3 -0
- package/dist/base/navigation.js +7 -7
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +7 -4
- package/dist/base/qr-code.js.map +1 -1
- package/dist/base/repeaters.js +175 -174
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +1 -1
- package/dist/base/signature-pad.js +148 -138
- package/dist/base/signature-pad.js.map +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 +2 -2
- package/dist/base/toaster.js +4 -4
- package/dist/base/toaster.js.map +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +2 -2
- package/dist/batch-action-bar-BZGDG-Si.js +104 -0
- package/dist/batch-action-bar-BZGDG-Si.js.map +1 -0
- package/dist/blocks/admin.js +264 -253
- package/dist/blocks/admin.js.map +1 -1
- package/dist/blocks/ai.js +293 -323
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +596 -587
- 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 +2246 -1693
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +3 -2
- package/dist/blocks/onboarding.js +50 -49
- package/dist/blocks/onboarding.js.map +1 -1
- package/dist/blocks/planning.js +82 -91
- package/dist/blocks/planning.js.map +1 -1
- package/dist/blocks/timelines.js +1 -1
- package/dist/breadcrumbs-D5t7I023.js +129 -0
- package/dist/breadcrumbs-D5t7I023.js.map +1 -0
- package/dist/{button-BZyfTvwm.js → button-QYwiyhD2.js} +15 -14
- package/dist/button-QYwiyhD2.js.map +1 -0
- package/dist/buttons-SbIcm1HJ.js +661 -0
- package/dist/buttons-SbIcm1HJ.js.map +1 -0
- package/dist/{cards-qGSErLw_.js → cards-CiiHpKYd.js} +8 -8
- package/dist/cards-CiiHpKYd.js.map +1 -0
- package/dist/{chart-Bsc5BICK.js → chart-QfrARkXl.js} +17 -15
- package/dist/chart-QfrARkXl.js.map +1 -0
- package/dist/checkbox-DhB6K0bK.js +36 -0
- package/dist/checkbox-DhB6K0bK.js.map +1 -0
- package/dist/choice-inputs-t6w3ATNz.js +766 -0
- package/dist/choice-inputs-t6w3ATNz.js.map +1 -0
- package/dist/code-block-Dgbu-CU3.js +185 -0
- package/dist/code-block-Dgbu-CU3.js.map +1 -0
- package/dist/{collapsible-ClvC7Bj3.js → collapsible-D8AEGU1-.js} +4 -4
- package/dist/{collapsible-ClvC7Bj3.js.map → collapsible-D8AEGU1-.js.map} +1 -1
- package/dist/{collection-content-D6S8cv_n.js → collection-content-uK16Grv0.js} +3 -3
- package/dist/{collection-content-D6S8cv_n.js.map → collection-content-uK16Grv0.js.map} +1 -1
- package/dist/{combobox-BFnbJJp3.js → combobox-2Ic8N9bL.js} +103 -98
- package/dist/combobox-2Ic8N9bL.js.map +1 -0
- package/dist/combobox-DLl0bfiq.js +867 -0
- package/dist/combobox-DLl0bfiq.js.map +1 -0
- package/dist/{command-BnmSchli.js → command-kNR20o7x.js} +34 -30
- package/dist/command-kNR20o7x.js.map +1 -0
- package/dist/{comments-u5L0OGip.js → comments-BpDuCUUu.js} +304 -301
- package/dist/comments-BpDuCUUu.js.map +1 -0
- package/dist/components/base/accordion/accordion-variants.d.ts +3 -3
- package/dist/components/base/action-menu/action-menu.d.ts +27 -5
- package/dist/components/base/action-menu/action-menu.recipes.d.ts +21 -0
- package/dist/components/base/action-menu/index.d.ts +1 -0
- package/dist/components/base/avatar/stacked-avatars.d.ts +5 -4
- package/dist/components/base/badge/badge.d.ts +1 -1
- package/dist/components/base/badge/badge.recipes.d.ts +6 -6
- package/dist/components/base/batch-action-bar/batch-action-bar.d.ts +50 -0
- package/dist/components/base/batch-action-bar/batch-action-bar.strings.d.ts +20 -0
- package/dist/components/base/batch-action-bar/index.d.ts +8 -0
- package/dist/components/base/buttons/base-button.d.ts +7 -0
- package/dist/components/base/buttons/button-group.recipes.d.ts +2 -2
- package/dist/components/base/buttons/button.recipes.d.ts +2 -2
- package/dist/components/base/buttons/button.variants.d.ts +1 -0
- package/dist/components/base/buttons/loader-button.d.ts +3 -1
- package/dist/components/base/buttons/text-button.d.ts +2 -2
- package/dist/components/base/carousel/carousel.d.ts +3 -1
- package/dist/components/base/chart/chart.d.ts +7 -7
- package/dist/components/base/choice-inputs/checkbox.d.ts +6 -7
- package/dist/components/base/choice-inputs/choice-types.d.ts +24 -3
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +9 -0
- package/dist/components/base/choice-inputs/select-popup.d.ts +9 -1
- package/dist/components/base/choice-inputs/switch-card.d.ts +1 -1
- package/dist/components/base/date-pickers/date-picker-field.d.ts +23 -0
- package/dist/components/base/date-pickers/datepicker.types.d.ts +13 -3
- package/dist/components/base/display/alert-dialog.d.ts +10 -3
- package/dist/components/base/display/content-block.d.ts +4 -2
- package/dist/components/base/display/date-block.d.ts +1 -1
- package/dist/components/base/display/dialog.d.ts +8 -5
- package/dist/components/base/display/icon-badge/icon-badge.d.ts +1 -1
- package/dist/components/base/display/surface-title.d.ts +6 -1
- package/dist/components/base/feedback/alert.d.ts +1 -1
- package/dist/components/base/feedback/state-display.d.ts +5 -4
- package/dist/components/base/forms/form-sizing.d.ts +43 -8
- package/dist/components/base/forms/workflow.d.ts +2 -0
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +3 -0
- package/dist/components/base/forms-numeric/rounding-mode-select.d.ts +4 -1
- package/dist/components/base/metadata-list/index.d.ts +12 -0
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.d.ts +28 -25
- package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-value.d.ts +2 -2
- package/dist/components/base/navigation/dropdown-menu.d.ts +2 -2
- package/dist/components/base/navigation/index.d.ts +1 -1
- package/dist/components/base/navigation/language-switcher.d.ts +4 -1
- package/dist/components/base/navigation/overflow-tab-bar.d.ts +7 -0
- package/dist/components/base/navigation/page-header/index.d.ts +1 -0
- package/dist/components/base/navigation/page-header/page-header-commands.d.ts +73 -0
- package/dist/components/base/navigation/page-header/page-header.d.ts +30 -4
- package/dist/components/base/qr-code/qr-code.d.ts +2 -0
- package/dist/components/base/sheet/index.d.ts +29 -1
- package/dist/components/base/sheet/sheet.d.ts +10 -5
- package/dist/components/base/signature-pad/signature-pad.types.d.ts +5 -1
- package/dist/components/base/signature-pad/signature-pad.utils.d.ts +11 -3
- package/dist/components/base/spinner/spinner.d.ts +3 -2
- package/dist/components/base/structure/structure.types.d.ts +1 -1
- package/dist/components/base/text-inputs/field-clear-button.d.ts +6 -0
- package/dist/components/base/text-inputs/input-group.d.ts +2 -2
- package/dist/components/base/upload/upload.recipes.d.ts +33 -0
- package/dist/components/base/value-inputs/date-time-input.d.ts +4 -2
- package/dist/components/base/value-inputs/index.d.ts +5 -5
- package/dist/components/base/value-inputs/tags-input.d.ts +38 -12
- package/dist/components/blocks/admin/api-key-list/api-key-list.types.d.ts +1 -1
- package/dist/components/blocks/analytics/format-metric-value.d.ts +11 -1
- package/dist/components/blocks/analytics/index.d.ts +1 -1
- package/dist/components/blocks/analytics/use-metric-format-options.d.ts +3 -0
- package/dist/components/blocks/commerce/address-card/address-card.d.ts +1 -1
- package/dist/components/blocks/commerce/address-card/types.d.ts +4 -1
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.d.ts +4 -0
- package/dist/components/blocks/commerce/booking-calendar-event-card/booking-calendar-event-card.types.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/cart-summary.d.ts +3 -1
- package/dist/components/blocks/commerce/cart-summary/index.d.ts +2 -2
- package/dist/components/blocks/commerce/cart-summary/types.d.ts +6 -1
- package/dist/components/blocks/commerce/discount-stack/discount-stack.d.ts +3 -1
- package/dist/components/blocks/commerce/discount-stack/index.d.ts +2 -2
- package/dist/components/blocks/commerce/discount-stack/types.d.ts +16 -4
- package/dist/components/blocks/commerce/fulfillment-group/fulfillment-group.d.ts +5 -0
- package/dist/components/blocks/commerce/fulfillment-group/index.d.ts +2 -0
- package/dist/components/blocks/commerce/fulfillment-group/types.d.ts +43 -0
- package/dist/components/blocks/commerce/index.d.ts +13 -5
- package/dist/components/blocks/commerce/inventory-section/types.d.ts +4 -1
- package/dist/components/blocks/commerce/invoice-header/invoice-header.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-header/types.d.ts +4 -2
- package/dist/components/blocks/commerce/invoice-mini/invoice-mini.d.ts +1 -1
- package/dist/components/blocks/commerce/invoice-mini/types.d.ts +2 -1
- package/dist/components/blocks/commerce/loyalty-points/types.d.ts +1 -1
- package/dist/components/blocks/commerce/order-customer/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-customer/order-customer.d.ts +5 -0
- package/dist/components/blocks/commerce/order-customer/types.d.ts +48 -0
- package/dist/components/blocks/commerce/order-header/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-header/order-header.d.ts +5 -0
- package/dist/components/blocks/commerce/order-header/types.d.ts +37 -0
- package/dist/components/blocks/commerce/order-line-item/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-line-item/order-line-item.d.ts +5 -0
- package/dist/components/blocks/commerce/order-line-item/types.d.ts +46 -0
- package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
- package/dist/components/blocks/commerce/order-summary/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-summary/order-summary.d.ts +5 -0
- package/dist/components/blocks/commerce/order-summary/types.d.ts +42 -0
- package/dist/components/blocks/commerce/order-transactions/index.d.ts +2 -0
- package/dist/components/blocks/commerce/order-transactions/order-transactions.d.ts +5 -0
- package/dist/components/blocks/commerce/order-transactions/types.d.ts +46 -0
- package/dist/components/blocks/commerce/payment-method/index.d.ts +2 -2
- package/dist/components/blocks/commerce/payment-method/payment-method.d.ts +9 -1
- package/dist/components/blocks/commerce/payment-method/types.d.ts +14 -1
- package/dist/components/blocks/commerce/refund-status/index.d.ts +2 -2
- package/dist/components/blocks/commerce/refund-status/refund-status.d.ts +3 -1
- package/dist/components/blocks/commerce/refund-status/types.d.ts +6 -3
- package/dist/components/blocks/commerce/seo-listing/seo-listing-card.d.ts +1 -1
- package/dist/components/blocks/commerce/seo-listing/types.d.ts +3 -1
- package/dist/components/blocks/commerce/shared/address-lines.d.ts +21 -0
- package/dist/components/blocks/commerce/shared/line-thumbnail.d.ts +9 -0
- package/dist/components/blocks/commerce/shared/order-status.d.ts +51 -0
- package/dist/components/blocks/commerce/shipment-tracking/shipment-tracking.d.ts +1 -1
- package/dist/components/blocks/commerce/shipment-tracking/types.d.ts +27 -6
- package/dist/components/blocks/commerce/summary-panel/amount-row.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/index.d.ts +3 -0
- package/dist/components/blocks/commerce/summary-panel/summary-panel.d.ts +2 -0
- package/dist/components/blocks/commerce/summary-panel/types.d.ts +26 -0
- package/dist/components/blocks/commerce/tax-breakdown/tax-breakdown.d.ts +1 -1
- package/dist/components/blocks/commerce/tax-breakdown/types.d.ts +2 -1
- package/dist/components/blocks/commerce/vendor-profile/types.d.ts +4 -1
- package/dist/components/blocks/data-display/dense-info-card/dense-info.strings.d.ts +4 -1
- package/dist/components/blocks/data-display/inline-stat/inline-stat.d.ts +4 -1
- package/dist/components/blocks/data-display/metadata/index.d.ts +30 -4
- package/dist/components/features/activities/partials/activity-row.d.ts +6 -2
- package/dist/components/features/activities/partials/tone-tokens.d.ts +0 -6
- package/dist/components/features/global-search/partials/global-search-group-heading.d.ts +15 -0
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +1 -1
- package/dist/components/features/global-search/partials/tone-palettes.d.ts +0 -5
- package/dist/components/features/kanban/kanban.d.ts +1 -1
- package/dist/components/features/kanban/kanban.strings.d.ts +1 -1
- package/dist/components/features/kanban/kanban.types.d.ts +2 -2
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
- package/dist/components/features/media-library/index.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +4 -0
- package/dist/components/features/media-library/media-library.types.d.ts +74 -1
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
- package/dist/components/features/mentions/partials/mention-kind-toggles.d.ts +16 -0
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +2 -2
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +11 -4
- package/dist/components/features/overlays/index.d.ts +1 -1
- package/dist/components/features/overlays/overlay-tone-icon.d.ts +37 -0
- package/dist/components/features/overlays/overlays.types.d.ts +62 -19
- package/dist/components/features/products/components/product-contract-overview.d.ts +5 -0
- package/dist/components/features/products/components/product-details-card.d.ts +5 -0
- package/dist/components/features/products/components/product-operations-card.d.ts +5 -0
- package/dist/components/features/products/components/product-option-action-menu.d.ts +5 -0
- package/dist/components/features/products/components/product-options-summary.d.ts +5 -0
- package/dist/components/features/products/components/product-policies-card.d.ts +5 -0
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +5 -0
- package/dist/components/features/products/components/product-readiness-card.d.ts +5 -0
- package/dist/components/features/products/components/product-structure-card.d.ts +5 -0
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +23 -1
- package/dist/components/features/products/components/product-variants-manager.d.ts +1 -1
- package/dist/components/features/products/partials/index.d.ts +1 -1
- package/dist/components/features/products/partials/product-metric-tile.d.ts +6 -0
- package/dist/components/features/products/partials/product-tone.d.ts +11 -1
- package/dist/components/features/products/products.types.d.ts +11 -3
- package/dist/components/features/resource/index.d.ts +1 -1
- package/dist/components/features/resource/resource.d.ts +1 -1
- package/dist/components/features/resource/resource.types.d.ts +34 -6
- package/dist/components/features/rich-text-editor/index.d.ts +2 -1
- package/dist/components/features/rich-text-editor/partials/image-nodes.d.ts +13 -0
- package/dist/components/features/rich-text-editor/partials/image-uploads.d.ts +66 -0
- package/dist/components/features/rich-text-editor/partials/inline-reference-node.d.ts +19 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +14 -0
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +45 -0
- package/dist/components/features/rich-text-editor/use-rich-text-images.d.ts +18 -0
- package/dist/components/features/sync/index.d.ts +26 -3
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/partials/cell-renderers.d.ts +1 -1
- package/dist/components/features/table/table.types.d.ts +32 -7
- package/dist/components/layout/page/index.d.ts +1 -1
- package/dist/components/layout/page/page.types.d.ts +51 -4
- package/dist/components/layout/page/partials/page-actions.d.ts +1 -0
- package/dist/components/layout/page/partials/page-header.d.ts +1 -1
- package/dist/components/layout/settings/settings.d.ts +16 -2
- package/dist/components/layout/workspace/workspace.types.d.ts +21 -4
- package/dist/components/primitives/date.d.ts +16 -3
- package/dist/components/primitives/dimensions.d.ts +6 -0
- package/dist/components/primitives/duration.d.ts +6 -0
- package/dist/components/primitives/file-size.d.ts +6 -0
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/initials.d.ts +11 -2
- package/dist/components/primitives/link.d.ts +7 -0
- package/dist/components/primitives/money.d.ts +29 -7
- package/dist/components/primitives/number.d.ts +17 -0
- package/dist/components/primitives/value-typography.d.ts +54 -0
- package/dist/components/primitives/value.d.ts +31 -6
- package/dist/components/typography/heading.d.ts +9 -1
- package/dist/components/typography/label.d.ts +3 -0
- package/dist/components/typography/rich-text/index.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +19 -0
- package/dist/components/typography/rich-text/rich-text.d.ts +16 -0
- package/dist/components/typography/running-text.d.ts +12 -0
- package/dist/components/typography/text-link.d.ts +24 -1
- package/dist/components/typography/text.d.ts +12 -0
- package/dist/components/typography/text.styles.d.ts +35 -13
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/components/ui/checkbox.d.ts +6 -0
- package/dist/components/ui/overlay.recipes.d.ts +6 -2
- package/dist/components/ui/select.d.ts +3 -1
- package/dist/components/ui/switch.d.ts +5 -0
- package/dist/{containers-DqB-bSYE.js → containers-DmWiJa2I.js} +36 -35
- package/dist/containers-DmWiJa2I.js.map +1 -0
- package/dist/{copyable-BTSByfmq.js → copyable-B3Gwgdqc.js} +6 -6
- package/dist/{copyable-BTSByfmq.js.map → copyable-B3Gwgdqc.js.map} +1 -1
- package/dist/data-display-DafIvCl5.js +960 -0
- package/dist/data-display-DafIvCl5.js.map +1 -0
- package/dist/date-BgK3bTdo.js +144 -0
- package/dist/date-BgK3bTdo.js.map +1 -0
- package/dist/date-picker-CF-DtUpF.js +1529 -0
- package/dist/date-picker-CF-DtUpF.js.map +1 -0
- package/dist/date-pickers-BmzxJl5l.js +174 -0
- package/dist/date-pickers-BmzxJl5l.js.map +1 -0
- package/dist/{display-CS6Hbk18.js → display-DsQTVzMz.js} +88 -87
- package/dist/display-DsQTVzMz.js.map +1 -0
- package/dist/{dropdown-menu-D-boNgGO.js → dropdown-menu-E2qmdC7o.js} +23 -16
- package/dist/dropdown-menu-E2qmdC7o.js.map +1 -0
- package/dist/features/activities.js +437 -521
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +174 -172
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/async-preview.js +8 -8
- package/dist/features/async-preview.js.map +1 -1
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +139 -138
- package/dist/features/data-view.js.map +1 -1
- package/dist/features/email-composer/engine.js +1 -1
- package/dist/features/email-composer.js +353 -352
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +262 -269
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +1 -1
- package/dist/features/global-search.js +307 -310
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +95 -97
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map.js +56 -57
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +914 -824
- 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 +1272 -1311
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +204 -194
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +103 -95
- package/dist/features/resource-assignment.js.map +1 -1
- package/dist/features/resource.js +77 -69
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +30 -11
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +193 -189
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +3 -3
- package/dist/features/sync.js +7 -7
- package/dist/features/sync.js.map +1 -1
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +455 -455
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-qNuMBtRH.js +233 -0
- package/dist/feedback-qNuMBtRH.js.map +1 -0
- package/dist/field-affordance-recipes-qQeIf4lG.js +48 -0
- package/dist/field-affordance-recipes-qQeIf4lG.js.map +1 -0
- package/dist/field-state-recipes-BVA2CWHo.js +12 -0
- package/dist/field-state-recipes-BVA2CWHo.js.map +1 -0
- package/dist/{filters-D6FF8L6s.js → filters-BkHH53uv.js} +414 -412
- package/dist/filters-BkHH53uv.js.map +1 -0
- package/dist/focus-recipes-B653VaLq.js +12 -0
- package/dist/focus-recipes-B653VaLq.js.map +1 -0
- package/dist/{form-field-CZwrkP7m.js → form-field-DUt4UxSV.js} +7 -7
- package/dist/{form-field-CZwrkP7m.js.map → form-field-DUt4UxSV.js.map} +1 -1
- package/dist/form-sizing-By94KzXE.js +130 -0
- package/dist/form-sizing-By94KzXE.js.map +1 -0
- package/dist/{forms-B5NCbkSC.js → forms-Bzha-Y3B.js} +25 -25
- package/dist/forms-Bzha-Y3B.js.map +1 -0
- package/dist/forms-numeric-C0bvjRPZ.js +906 -0
- package/dist/forms-numeric-C0bvjRPZ.js.map +1 -0
- package/dist/{header-kxruN3RM.js → header-BOefOKd1.js} +38 -41
- package/dist/header-BOefOKd1.js.map +1 -0
- package/dist/{hooks-BrlnCwQd.js → hooks-9k_TtmKh.js} +2 -2
- package/dist/{hooks-BrlnCwQd.js.map → hooks-9k_TtmKh.js.map} +1 -1
- package/dist/{http-CdEIHyQf.js → http-D_6rOnzU.js} +2 -2
- package/dist/{http-CdEIHyQf.js.map → http-D_6rOnzU.js.map} +1 -1
- package/dist/icon-badge-CAuKupo9.js +55 -0
- package/dist/icon-badge-CAuKupo9.js.map +1 -0
- package/dist/index.js +7 -7
- package/dist/input-DWhBBBww.js +262 -0
- package/dist/input-DWhBBBww.js.map +1 -0
- package/dist/{input-vxcaNCYC.js → input-Ddi_LSYv.js} +3 -3
- package/dist/{input-vxcaNCYC.js.map → input-Ddi_LSYv.js.map} +1 -1
- package/dist/interaction-recipes-CHr0dJUs.js +24 -0
- package/dist/interaction-recipes-CHr0dJUs.js.map +1 -0
- package/dist/item-DEmDiTlD.js +265 -0
- package/dist/item-DEmDiTlD.js.map +1 -0
- package/dist/layer-recipes-CCpklYME.js +13 -0
- package/dist/layer-recipes-CCpklYME.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 +7 -1
- package/dist/lib/field-affordance-recipes.d.ts +41 -1
- package/dist/lib/field-state-recipes.d.ts +9 -6
- package/dist/lib/focus-recipes.d.ts +24 -0
- package/dist/lib/format.d.ts +9 -0
- package/dist/lib/interaction-recipes.d.ts +35 -0
- package/dist/lib/layer-recipes.d.ts +19 -0
- package/dist/lib/money-format.d.ts +30 -0
- package/dist/lib/motion-recipes.d.ts +1 -0
- package/dist/lib/overlay-anatomy-recipes.d.ts +2 -1
- package/dist/lib/safe-image-src.d.ts +10 -0
- package/dist/lib/sanitize-html.d.ts +15 -3
- package/dist/lib/surface-recipes.d.ts +48 -6
- package/dist/lib/token-merge.generated.d.ts +17 -14
- package/dist/lib/tone-recipes.d.ts +79 -0
- package/dist/lib/track-recipes.d.ts +1 -1
- package/dist/lib/ui-provider/hooks.d.ts +2 -1
- package/dist/lib/ui-provider/index.d.ts +2 -2
- package/dist/lib/ui-provider/provider.d.ts +7 -2
- package/dist/lib/ui-provider/store.d.ts +6 -2
- package/dist/lib/ui-provider/types.d.ts +14 -2
- package/dist/lib/utils.js +1 -1
- package/dist/media-gallery-DcTtAaeC.js +203 -0
- package/dist/media-gallery-DcTtAaeC.js.map +1 -0
- package/dist/mentions-D-uyCh01.js +568 -0
- package/dist/mentions-D-uyCh01.js.map +1 -0
- package/dist/{message-SZUNB1eX.js → message-CdHgIWKf.js} +5 -5
- package/dist/{message-SZUNB1eX.js.map → message-CdHgIWKf.js.map} +1 -1
- package/dist/metadata-list-X5rYAKSB.js +394 -0
- package/dist/metadata-list-X5rYAKSB.js.map +1 -0
- package/dist/{motion-recipes-B6jKXEcN.js → motion-recipes-ChBg4HBq.js} +3 -2
- package/dist/{motion-recipes-B6jKXEcN.js.map → motion-recipes-ChBg4HBq.js.map} +1 -1
- package/dist/navigation-D3KwXmaq.js +145 -0
- package/dist/navigation-D3KwXmaq.js.map +1 -0
- package/dist/navigation-HJf5zxlH.js +268 -0
- package/dist/navigation-HJf5zxlH.js.map +1 -0
- package/dist/{navigation-row-recipes-DQEXQcqY.js → navigation-row-recipes-BVowojQw.js} +2 -2
- package/dist/{navigation-row-recipes-DQEXQcqY.js.map → navigation-row-recipes-BVowojQw.js.map} +1 -1
- package/dist/number-DMhe-Vsk.js +352 -0
- package/dist/number-DMhe-Vsk.js.map +1 -0
- package/dist/overflow-tab-bar-sQHXLlwQ.js +280 -0
- package/dist/overflow-tab-bar-sQHXLlwQ.js.map +1 -0
- package/dist/overlay.recipes-8GHqmlb4.js +6 -0
- package/dist/overlay.recipes-8GHqmlb4.js.map +1 -0
- package/dist/overlays-I0axtYA6.js +999 -0
- package/dist/overlays-I0axtYA6.js.map +1 -0
- package/dist/{page-hGmT4nWK.js → page-B5dTH9gE.js} +79 -68
- package/dist/page-B5dTH9gE.js.map +1 -0
- package/dist/page-header-commands-DjzFEq3E.js +126 -0
- package/dist/page-header-commands-DjzFEq3E.js.map +1 -0
- package/dist/{pagination-NLGqRirf.js → pagination-3bPA_a6K.js} +19 -19
- package/dist/{pagination-NLGqRirf.js.map → pagination-3bPA_a6K.js.map} +1 -1
- package/dist/{popover-CghIYdQf.js → popover-Di55PyAI.js} +8 -8
- package/dist/popover-Di55PyAI.js.map +1 -0
- package/dist/{popover-menu-B4PoWhRl.js → popover-menu-B71Tn2Qz.js} +6 -6
- package/dist/{popover-menu-B4PoWhRl.js.map → popover-menu-B71Tn2Qz.js.map} +1 -1
- package/dist/{popover.recipes-QlD4JenO.js → popover.recipes-Bdyhj2db.js} +2 -2
- package/dist/{popover.recipes-QlD4JenO.js.map → popover.recipes-Bdyhj2db.js.map} +1 -1
- package/dist/primitives-B-CkiEMU.js +379 -0
- package/dist/primitives-B-CkiEMU.js.map +1 -0
- package/dist/primitives.js +5 -5
- package/dist/{progress-BroqrAyV.js → progress-rnS8-uAW.js} +11 -11
- package/dist/progress-rnS8-uAW.js.map +1 -0
- package/dist/{receipt-BuJynLgf.js → receipt-D0oswZ0p.js} +6 -6
- package/dist/{receipt-BuJynLgf.js.map → receipt-D0oswZ0p.js.map} +1 -1
- package/dist/rich-text-DvGulsNJ.js +78 -0
- package/dist/rich-text-DvGulsNJ.js.map +1 -0
- package/dist/rich-text-editor-sMU_Scqm.js +1204 -0
- package/dist/rich-text-editor-sMU_Scqm.js.map +1 -0
- package/dist/rich-text-editor.recipes-CadiF_Uu.js +88 -0
- package/dist/rich-text-editor.recipes-CadiF_Uu.js.map +1 -0
- package/dist/rich-text-editor.strings-CB59ekH2.js +38 -0
- package/dist/rich-text-editor.strings-CB59ekH2.js.map +1 -0
- package/dist/safe-image-src-C6kQSMBZ.js +17 -0
- package/dist/safe-image-src-C6kQSMBZ.js.map +1 -0
- package/dist/sanitize-html-DsQmI48u.js +92 -0
- package/dist/sanitize-html-DsQmI48u.js.map +1 -0
- package/dist/scroll-area-Bt_vXY2b.js +48 -0
- package/dist/scroll-area-Bt_vXY2b.js.map +1 -0
- package/dist/{separator-BNIgG3au.js → separator-C8DlRGwF.js} +4 -4
- package/dist/separator-C8DlRGwF.js.map +1 -0
- package/dist/{separator-BhtFyo4x.js → separator-CYHnjsAb.js} +2 -2
- package/dist/{separator-BhtFyo4x.js.map → separator-CYHnjsAb.js.map} +1 -1
- package/dist/services/actions/action-adapters.d.ts +22 -0
- package/dist/services/actions/index.d.ts +1 -1
- package/dist/services/actions.js +23 -6
- package/dist/services/actions.js.map +1 -1
- package/dist/settings-CQW3b-Cu.js +170 -0
- package/dist/settings-CQW3b-Cu.js.map +1 -0
- package/dist/sheet-4SEvVYzA.js +210 -0
- package/dist/sheet-4SEvVYzA.js.map +1 -0
- package/dist/{sidebar-CyR4XKwR.js → sidebar-C7WWR29L.js} +181 -180
- package/dist/sidebar-C7WWR29L.js.map +1 -0
- package/dist/sidebar-d7Dg80ln.js +511 -0
- package/dist/sidebar-d7Dg80ln.js.map +1 -0
- package/dist/{skeleton-3F0uhYn3.js → skeleton-Cz890JZF.js} +10 -10
- package/dist/skeleton-Cz890JZF.js.map +1 -0
- package/dist/smart-card-lFKxn5Hu.js +595 -0
- package/dist/smart-card-lFKxn5Hu.js.map +1 -0
- package/dist/{spinner-Cpf7oRkF.js → spinner-fa3h1Aif.js} +10 -8
- package/dist/spinner-fa3h1Aif.js.map +1 -0
- package/dist/{structure-CRdqVawd.js → structure-DC2dygdA.js} +3 -3
- package/dist/{structure-CRdqVawd.js.map → structure-DC2dygdA.js.map} +1 -1
- package/dist/{structure.recipes-Bqhf9oIh.js → structure.recipes-EPz60cU8.js} +37 -19
- package/dist/structure.recipes-EPz60cU8.js.map +1 -0
- package/dist/style.css +1 -1
- package/dist/surface-recipes-BKRVW8Os.js +43 -0
- package/dist/surface-recipes-BKRVW8Os.js.map +1 -0
- package/dist/table-CIKyLUsy.js +163 -0
- package/dist/table-CIKyLUsy.js.map +1 -0
- package/dist/{table-CcRDZiLP.js → table-CrcLN9Io.js} +544 -530
- package/dist/table-CrcLN9Io.js.map +1 -0
- package/dist/tabs-DwBJfjxX.js +190 -0
- package/dist/tabs-DwBJfjxX.js.map +1 -0
- package/dist/{text-inputs-DsR56TR-.js → text-inputs-aaK9wcDT.js} +151 -155
- package/dist/text-inputs-aaK9wcDT.js.map +1 -0
- package/dist/{text.styles-Q4sGAIgA.js → text.styles-g4He6UIW.js} +17 -14
- package/dist/text.styles-g4He6UIW.js.map +1 -0
- package/dist/theme.css +16 -12
- package/dist/themes/green.css +24 -0
- package/dist/{timelines-D1pkt3se.js → timelines-C_SBwHNP.js} +154 -164
- package/dist/timelines-C_SBwHNP.js.map +1 -0
- package/dist/tone-recipes-CPoExcTE.js +70 -0
- package/dist/tone-recipes-CPoExcTE.js.map +1 -0
- package/dist/tooltip-CsfgrfS7.js +111 -0
- package/dist/tooltip-CsfgrfS7.js.map +1 -0
- package/dist/track-recipes-CDcKmndW.js +10 -0
- package/dist/track-recipes-CDcKmndW.js.map +1 -0
- package/dist/{tree-BtmYyMZV.js → tree-BiKhg8AY.js} +72 -70
- package/dist/tree-BiKhg8AY.js.map +1 -0
- package/dist/typography/rich-text.js +1 -1
- package/dist/typography-DTRkE9zL.js +117 -0
- package/dist/typography-DTRkE9zL.js.map +1 -0
- package/dist/typography.js +2 -2
- package/dist/{ui-provider-DRPn3qNl.js → ui-provider-1D_NSYzO.js} +30 -23
- package/dist/ui-provider-1D_NSYzO.js.map +1 -0
- package/dist/ui-provider.js +3 -3
- package/dist/{upload-CDbYw1WN.js → upload-BO8-CLN6.js} +294 -293
- package/dist/upload-BO8-CLN6.js.map +1 -0
- package/dist/{upload-queue-CNd_hH_a.js → upload-queue-EOC8g1gf.js} +133 -138
- package/dist/upload-queue-EOC8g1gf.js.map +1 -0
- package/dist/upload.recipes-BbxTqrCT.js +61 -0
- package/dist/upload.recipes-BbxTqrCT.js.map +1 -0
- package/dist/{usage-card-VyJLUwRr.js → usage-card-obRaBskq.js} +42 -43
- package/dist/{usage-card-VyJLUwRr.js.map → usage-card-obRaBskq.js.map} +1 -1
- package/dist/{utils-BvH9PSmq.js → utils-l5LpDw2z.js} +264 -62
- package/dist/utils-l5LpDw2z.js.map +1 -0
- package/dist/value-inputs-TAYMX111.js +947 -0
- package/dist/value-inputs-TAYMX111.js.map +1 -0
- package/dist/value-typography-b8wpz1eX.js +116 -0
- package/dist/value-typography-b8wpz1eX.js.map +1 -0
- package/dist/workspace-DH0v0KcB.js +407 -0
- package/dist/workspace-DH0v0KcB.js.map +1 -0
- package/docs/consumer-skill/SKILL.md +62 -50
- package/docs/consumer-skill/examples/app-layout.tsx +3 -5
- package/docs/consumer-skill/examples/composition.tsx +3 -3
- package/docs/consumer-skill/examples/detail.tsx +59 -13
- package/docs/consumer-skill/examples/edit.tsx +2 -2
- package/docs/consumer-skill/examples/layout-blocks.tsx +20 -0
- package/docs/consumer-skill/examples/manifest.json +28 -6
- package/docs/consumer-skill/examples/receipt.tsx +2 -2
- package/docs/consumer-skill/examples/scoped-directory.tsx +3 -3
- package/docs/consumer-skill/examples/website.tsx +1 -1
- package/docs/consumer-skill/references/agents-md.md +33 -0
- package/docs/consumer-skill/references/analytics.md +1 -1
- package/docs/consumer-skill/references/composition.md +139 -24
- package/docs/consumer-skill/references/design-contract.md +12 -3
- package/docs/consumer-skill/references/discovery.md +4 -0
- package/docs/consumer-skill/references/installation.md +33 -1
- package/docs/consumer-skill/references/integration.md +32 -1
- package/docs/consumer-skill/references/public-api.json +1051 -610
- package/docs/consumer-skill/references/review.md +44 -8
- package/docs/consumer-skill/references/theming.md +14 -4
- package/docs/consumer-skill/references/tokens.json +5 -2
- package/docs/consumer-skill/references/workflows.md +30 -9
- package/docs/consumer-skill/scripts/composition-policy.mjs +127 -6
- package/docs/consumer-skill/scripts/discovery.mjs +11 -3
- package/docs/consumer-skill/scripts/pin-button-defaults.mjs +95 -0
- package/docs/consumer-skill/scripts/surface-policy.mjs +139 -5
- package/package.json +13 -3
- package/dist/accordion-BRTcsp8J.js +0 -205
- package/dist/accordion-BRTcsp8J.js.map +0 -1
- package/dist/action-menu-Drxw_vJk.js +0 -265
- package/dist/action-menu-Drxw_vJk.js.map +0 -1
- package/dist/affordance-geometry.generated-CL84ZN9A.js.map +0 -1
- package/dist/ai-artifact-DLVdK0Py.js.map +0 -1
- package/dist/attachment-DbjUWsP0.js +0 -244
- package/dist/attachment-DbjUWsP0.js.map +0 -1
- package/dist/auth-CAQcasMV.js.map +0 -1
- package/dist/avatar-Bu2HhitA.js.map +0 -1
- package/dist/badge-CzId1Wlm.js +0 -92
- package/dist/badge-CzId1Wlm.js.map +0 -1
- package/dist/breadcrumbs-BuYz5SDU.js +0 -128
- package/dist/breadcrumbs-BuYz5SDU.js.map +0 -1
- package/dist/button-BZDasD04.js +0 -651
- package/dist/button-BZDasD04.js.map +0 -1
- package/dist/button-BZyfTvwm.js.map +0 -1
- package/dist/buttons-D_6KJvEE.js +0 -99
- package/dist/buttons-D_6KJvEE.js.map +0 -1
- package/dist/cards-qGSErLw_.js.map +0 -1
- package/dist/chart-Bsc5BICK.js.map +0 -1
- package/dist/checkbox-BQNDjUCh.js +0 -34
- package/dist/checkbox-BQNDjUCh.js.map +0 -1
- package/dist/choice-inputs-Mk3iWbhr.js +0 -725
- package/dist/choice-inputs-Mk3iWbhr.js.map +0 -1
- package/dist/code-block-DzHKRybS.js +0 -183
- package/dist/code-block-DzHKRybS.js.map +0 -1
- package/dist/combobox-BFnbJJp3.js.map +0 -1
- package/dist/combobox-hozNwUcc.js +0 -847
- package/dist/combobox-hozNwUcc.js.map +0 -1
- package/dist/command-BnmSchli.js.map +0 -1
- package/dist/comments-u5L0OGip.js.map +0 -1
- package/dist/containers-DqB-bSYE.js.map +0 -1
- package/dist/data-display-Bihs9Ven.js +0 -1342
- package/dist/data-display-Bihs9Ven.js.map +0 -1
- package/dist/date-DOKhJPu7.js +0 -140
- package/dist/date-DOKhJPu7.js.map +0 -1
- package/dist/date-picker-DzP5HQq7.js +0 -1541
- package/dist/date-picker-DzP5HQq7.js.map +0 -1
- package/dist/date-pickers-BpgGz7S-.js +0 -196
- package/dist/date-pickers-BpgGz7S-.js.map +0 -1
- package/dist/display-CS6Hbk18.js.map +0 -1
- package/dist/dropdown-menu-D-boNgGO.js.map +0 -1
- package/dist/feedback-CJkUAapr.js +0 -233
- package/dist/feedback-CJkUAapr.js.map +0 -1
- package/dist/field-affordance-recipes-uKY4MsZ_.js +0 -25
- package/dist/field-affordance-recipes-uKY4MsZ_.js.map +0 -1
- package/dist/field-state-recipes-DQQpiLWC.js +0 -11
- package/dist/field-state-recipes-DQQpiLWC.js.map +0 -1
- package/dist/filters-D6FF8L6s.js.map +0 -1
- package/dist/form-sizing-QP8aIRaW.js +0 -103
- package/dist/form-sizing-QP8aIRaW.js.map +0 -1
- package/dist/format-iamDSqs2.js +0 -110
- package/dist/format-iamDSqs2.js.map +0 -1
- package/dist/forms-B5NCbkSC.js.map +0 -1
- package/dist/forms-numeric-Crrm80Lm.js +0 -867
- package/dist/forms-numeric-Crrm80Lm.js.map +0 -1
- package/dist/header-kxruN3RM.js.map +0 -1
- package/dist/icon-badge-Btc6pQrp.js +0 -53
- package/dist/icon-badge-Btc6pQrp.js.map +0 -1
- package/dist/input-SX9V0AL3.js +0 -255
- package/dist/input-SX9V0AL3.js.map +0 -1
- package/dist/item-DE4YnuJx.js +0 -258
- package/dist/item-DE4YnuJx.js.map +0 -1
- package/dist/media-gallery-DLp3HAz0.js +0 -201
- package/dist/media-gallery-DLp3HAz0.js.map +0 -1
- package/dist/mentions-Cl0Kt_Pd.js +0 -565
- package/dist/mentions-Cl0Kt_Pd.js.map +0 -1
- package/dist/navigation-DnQSNMT0.js +0 -276
- package/dist/navigation-DnQSNMT0.js.map +0 -1
- package/dist/navigation-DyytsLRB.js +0 -265
- package/dist/navigation-DyytsLRB.js.map +0 -1
- package/dist/number-DasMFWEG.js +0 -269
- package/dist/number-DasMFWEG.js.map +0 -1
- package/dist/overlay.recipes-BxW5FIfK.js +0 -6
- package/dist/overlay.recipes-BxW5FIfK.js.map +0 -1
- package/dist/overlays-DUbs1KEi.js +0 -1011
- package/dist/overlays-DUbs1KEi.js.map +0 -1
- package/dist/page-hGmT4nWK.js.map +0 -1
- package/dist/page-header-D8nERkn5.js +0 -112
- package/dist/page-header-D8nERkn5.js.map +0 -1
- package/dist/popover-CghIYdQf.js.map +0 -1
- package/dist/primitives-C7ff0QaI.js +0 -337
- package/dist/primitives-C7ff0QaI.js.map +0 -1
- package/dist/progress-BroqrAyV.js.map +0 -1
- package/dist/rich-text-DlxDOtf4.js +0 -32
- package/dist/rich-text-DlxDOtf4.js.map +0 -1
- package/dist/rich-text-editor-BKyG7rWz.js +0 -574
- package/dist/rich-text-editor-BKyG7rWz.js.map +0 -1
- package/dist/rich-text-editor.recipes-B72Nfuze.js +0 -81
- package/dist/rich-text-editor.recipes-B72Nfuze.js.map +0 -1
- package/dist/rich-text-editor.strings-BpnIQgMl.js +0 -25
- package/dist/rich-text-editor.strings-BpnIQgMl.js.map +0 -1
- package/dist/sanitize-html-BG9FGe-j.js +0 -64
- package/dist/sanitize-html-BG9FGe-j.js.map +0 -1
- package/dist/scroll-area-D-pIhEKl.js +0 -47
- package/dist/scroll-area-D-pIhEKl.js.map +0 -1
- package/dist/separator-BNIgG3au.js.map +0 -1
- package/dist/settings-DOTOzeZ2.js +0 -161
- package/dist/settings-DOTOzeZ2.js.map +0 -1
- package/dist/sheet-BFhrNehm.js +0 -205
- package/dist/sheet-BFhrNehm.js.map +0 -1
- package/dist/sidebar-CyR4XKwR.js.map +0 -1
- package/dist/sidebar-SvGJ0Zwi.js +0 -506
- package/dist/sidebar-SvGJ0Zwi.js.map +0 -1
- package/dist/skeleton-3F0uhYn3.js.map +0 -1
- package/dist/smart-card-DjGVV2xr.js +0 -584
- package/dist/smart-card-DjGVV2xr.js.map +0 -1
- package/dist/spinner-Cpf7oRkF.js.map +0 -1
- package/dist/structure.recipes-Bqhf9oIh.js.map +0 -1
- package/dist/surface-recipes-Dd__PD-w.js +0 -28
- package/dist/surface-recipes-Dd__PD-w.js.map +0 -1
- package/dist/table-CLtJTxoR.js +0 -147
- package/dist/table-CLtJTxoR.js.map +0 -1
- package/dist/table-CcRDZiLP.js.map +0 -1
- package/dist/tabs-BNgu7g0u.js +0 -188
- package/dist/tabs-BNgu7g0u.js.map +0 -1
- package/dist/text-inputs-DsR56TR-.js.map +0 -1
- package/dist/text.styles-Q4sGAIgA.js.map +0 -1
- package/dist/timelines-D1pkt3se.js.map +0 -1
- package/dist/track-recipes-LLPNVwFg.js +0 -10
- package/dist/track-recipes-LLPNVwFg.js.map +0 -1
- package/dist/tree-BtmYyMZV.js.map +0 -1
- package/dist/typography-BxQgiZyw.js +0 -96
- package/dist/typography-BxQgiZyw.js.map +0 -1
- package/dist/ui-provider-DRPn3qNl.js.map +0 -1
- package/dist/upload-CDbYw1WN.js.map +0 -1
- package/dist/upload-queue-CNd_hH_a.js.map +0 -1
- package/dist/use-file-drop-target-BX7GnhoQ.js +0 -39
- package/dist/use-file-drop-target-BX7GnhoQ.js.map +0 -1
- package/dist/utils-BvH9PSmq.js.map +0 -1
- package/dist/value-inputs-D0KCrfVC.js +0 -840
- package/dist/value-inputs-D0KCrfVC.js.map +0 -1
- package/dist/workspace-CcR8r-Nt.js +0 -395
- package/dist/workspace-CcR8r-Nt.js.map +0 -1
- /package/dist/components/{blocks/data-display/metadata → base/metadata-list}/metadata-list.strings.d.ts +0 -0
|
@@ -5,11 +5,23 @@ description: Use when building, integrating, theming or migrating React apps and
|
|
|
5
5
|
|
|
6
6
|
# Themelia React UI consumer
|
|
7
7
|
|
|
8
|
-
Build from the public owner that fits the task
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
Build from the public owner that fits the task: resolve the installed contract,
|
|
9
|
+
pick the exact family import in the table or finder, read its declaration and
|
|
10
|
+
recipe, then adapt the app's data and callbacks. Never infer props from names.
|
|
11
|
+
|
|
12
|
+
## House rules
|
|
13
|
+
|
|
14
|
+
Each rule has an owning prop or component, and the [composition checker](references/review.md) reports most; depart only for a nameable product reason.
|
|
15
|
+
|
|
16
|
+
1. Mount `UIProvider` (`themelia-react-ui/ui-provider`) once at the app root; calls inherit its currency, locale, date, density, button, badge and card defaults.
|
|
17
|
+
2. Give every admin route a `Page` (`themelia-react-ui/layout/page`); its title is the route's `h1`, so do not repeat it in the body.
|
|
18
|
+
3. Give commands roles: one `header.primaryAction`, ordered `header.secondaryActions`, `destructive: true` plus `ConfirmDialog`; the header renders `[secondary…] [primary] [⋯]`. Record headers in `features/resource`, `layout/workspace` and `layout/settings` take the same props. A record's sections go in `header.tabs`. An untoned `Button` is the neutral outline; give only the main command `tone="primary"` (solid), one per page or surface.
|
|
19
|
+
4. Space siblings with `Stack`/`Grid` and their semantic `gap` (`themelia-react-ui/base/structure`), not flex divs with gap or margin utilities.
|
|
20
|
+
5. Write copy with `Heading`/`Text`, not raw `h1`–`h6`; show values with `Money`, `Date`, `Number` and `Percent`, and use `useMoneyFormatter()` inside strings.
|
|
21
|
+
6. Color with semantic classes (`bg-muted`, `text-muted-foreground`, `border-border`, status tones); palette classes such as `bg-blue-500` bypass theming and dark mode.
|
|
22
|
+
7. Badges stay neutral unless the status means `success`, `warning`, `destructive` or `info`. Titles, facts and rows get no decorative icons, and gaps, not dividers, separate a card's sections.
|
|
23
|
+
8. In a Card, badges go in `titleSuffix`, one quick control in `headerAction`, a command list in `actions` and the commit action in `footerSlot`.
|
|
24
|
+
9. Dialogs, confirmations, drawers and sheets come only from `themelia-react-ui/features/overlays` (`ActionDialog`, `ConfirmDialog`, `ActionDrawer` with `useOverlayVisibility`); never hand-roll a modal, import `Dialog`/`Sheet` primitives or add a modal library.
|
|
13
25
|
|
|
14
26
|
## Start with an owner
|
|
15
27
|
|
|
@@ -17,12 +29,15 @@ app's data/callbacks. Do not infer props or missing capabilities from names alon
|
|
|
17
29
|
| --- | --- |
|
|
18
30
|
| KPI cards, revenue, trends, comparisons | `themelia-react-ui/blocks/analytics`: `Metric`, `MetricGrid`, `MetricBar`, `MetricComparison`, `MetricGradient`, `MetricMicroGrid`, `ChartCard`, `ActivityHeatmap` |
|
|
19
31
|
| Used/limit quotas and period/retry states | `themelia-react-ui/blocks/analytics/usage-card`: `UsageCard` |
|
|
20
|
-
| Record facts, one plain value, empty regions | `themelia-react-ui/blocks/data-display`: `
|
|
32
|
+
| Record facts, one plain value, empty regions | `themelia-react-ui/base/metadata-list`: `MetadataList`; `themelia-react-ui/blocks/data-display`: `InlineStat`, `EmptyState` |
|
|
21
33
|
| Query-driven directory or tabular comparison | `themelia-react-ui/features/data-view`: `DataView`; `themelia-react-ui/features/table`: `DataTable`, `ResourceCell` |
|
|
22
34
|
| Query criteria and facets | `themelia-react-ui/features/filters`: `FilterLayout`, `SelectFacet`, `SearchFacet`, `DateFacet` |
|
|
23
35
|
| Modal action, confirmation, drawer | `themelia-react-ui/features/overlays`: `ActionDialog`, `ConfirmDialog`, `ActionDrawer`, `useOverlayVisibility` |
|
|
24
36
|
| Fields, schema-driven forms, inline drafts | `themelia-react-ui/base/forms`: `FormField`, `FormSection`, `FormActionsBar`; `themelia-react-ui/features/schema-form`: `SchemaForm`; `themelia-react-ui/base/inline-edit`: `InlineEdit` |
|
|
37
|
+
| Passive rows, stacks, tracks and spans | `themelia-react-ui/base/structure`: `Stack`, `Grid`, `GridCell`, `AdaptiveGrid`; a row is `Stack direction="horizontal"` |
|
|
38
|
+
| Content measure, sections, main/aside split | `themelia-react-ui/layout/containers`: `Container`, `Section`, `TwoColumnLayout`, `PageViewport` |
|
|
25
39
|
| Application shell, sidebar, route identity | `themelia-react-ui/layout/app-shell`: `AppLayout`; `themelia-react-ui/layout/sidebar`: `AppSidebar`; `themelia-react-ui/layout/page`: `Page` |
|
|
40
|
+
| Record page: status badge, role-based commands, section tabs with counts | `themelia-react-ui/layout/page`: `Page`, `PageHeaderAction`, `PageHeaderTabs`; see the [detail recipe](examples/detail.tsx) |
|
|
26
41
|
| Public website and content sections | `themelia-react-ui/layout/containers`: `Container`, `Section`, `PageViewport` |
|
|
27
42
|
| Task summaries and conversation messages | `themelia-react-ui/blocks/planning`: `TaskCard`; `themelia-react-ui/blocks/collaboration`: `Message`, `MessageBubble` |
|
|
28
43
|
| Timelines, activity, commerce workflows | `themelia-react-ui/blocks/timelines`: `Timeline`, `StepsCard`; `themelia-react-ui/features/activities`: `ActivityLog`; discover the commerce subject below |
|
|
@@ -33,7 +48,8 @@ For example, a KPI owns formatting, hierarchy and trend presentation:
|
|
|
33
48
|
|
|
34
49
|
```tsx
|
|
35
50
|
import { Metric, MetricGrid, type MetricData } from 'themelia-react-ui/blocks/analytics';
|
|
36
|
-
import {
|
|
51
|
+
import { MetadataList } from 'themelia-react-ui/base/metadata-list';
|
|
52
|
+
import { InlineStat } from 'themelia-react-ui/blocks/data-display';
|
|
37
53
|
|
|
38
54
|
const revenue: MetricData = {
|
|
39
55
|
id: 'revenue', label: 'Revenue', value: 42500,
|
|
@@ -43,24 +59,21 @@ const revenue: MetricData = {
|
|
|
43
59
|
export const Revenue = () => <Metric variant="card" data={revenue} />;
|
|
44
60
|
export const Dashboard = () => <MetricGrid metrics={[revenue]} columns={3} />;
|
|
45
61
|
export const InvoiceCount = () => <InlineStat label="Invoices" value={18} />;
|
|
46
|
-
export const AccountFacts = () => <MetadataList items={[
|
|
47
|
-
{ id: 'email', label: 'Email', value: 'morgan@example.com' },
|
|
48
|
-
]} />;
|
|
62
|
+
export const AccountFacts = () => <MetadataList items={[{ id: 'email', label: 'Email', value: 'morgan@example.com' }]} />;
|
|
49
63
|
```
|
|
50
64
|
|
|
51
65
|
`Metric variant="card"`, default `MetricGrid`, `UsageCard` and `TaskCard` already
|
|
52
66
|
own their surfaces. MetadataList, InlineStat and ChartCard delegate framing;
|
|
53
67
|
Receipt owns its flat paper and insets. Choose a custom subject when its content
|
|
54
|
-
or lifecycle calls for it; reuse the appropriate lower owners within it.
|
|
55
|
-
|
|
56
|
-
the focused UsageCard import has no chart peer. See [analytics](references/analytics.md).
|
|
68
|
+
or lifecycle calls for it; reuse the appropriate lower owners within it. The analytics
|
|
69
|
+
barrel needs optional `recharts`; UsageCard's focused import does not. See [analytics](references/analytics.md).
|
|
57
70
|
|
|
58
71
|
## Resolve the installed contract
|
|
59
72
|
|
|
60
|
-
Follow [installed setup](references/installation.md) to resolve the
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
utilities process `theme.css`
|
|
73
|
+
Follow [installed setup](references/installation.md) to resolve the package and check
|
|
74
|
+
copied guidance after upgrades; paste the [project instructions block](references/agents-md.md)
|
|
75
|
+
into the app's AGENTS.md. Import `themelia-react-ui/style.css` once; components need no
|
|
76
|
+
source scanning. Apps authoring semantic utilities process `theme.css` with Tailwind v4.
|
|
64
77
|
|
|
65
78
|
For another task or an unfamiliar prop, run the bundled [finder](references/discovery.md):
|
|
66
79
|
|
|
@@ -68,37 +81,36 @@ For another task or an unfamiliar prop, run the bundled [finder](references/disc
|
|
|
68
81
|
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/find-components.mjs record directory --limit 5
|
|
69
82
|
```
|
|
70
83
|
|
|
71
|
-
Task nouns
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
RichText accepts sanitized HTML; convert Markdown in the app before passing `html`.
|
|
84
|
+
Task nouns return richer alternatives; exact symbols such as `DataTable` and
|
|
85
|
+
exact imports select one contract. Follow `relevantSymbols` and `nextReads`,
|
|
86
|
+
check reported optional peers, and replace any name listed under `deprecated`.
|
|
87
|
+
The [public index](references/public-api.json) lists all families; catalogue
|
|
88
|
+
routes and source paths are not imports. RichText takes sanitized HTML, not Markdown.
|
|
77
89
|
|
|
78
90
|
## Compose and adapt the screen
|
|
79
91
|
|
|
80
|
-
Use Page for
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
92
|
+
Use Page for routes and Container/Section for content-led sites. Header `actions`
|
|
93
|
+
holds non-command controls such as a period select, never command rows. Card frames
|
|
94
|
+
one subject; `surface="flat" padding="none"` composes within an existing boundary.
|
|
95
|
+
For headed commerce/variants blocks, choose their `surface` prop instead of
|
|
96
|
+
adding a second Card boundary; see [headed blocks](references/composition.md#headed-blocks-inside-surfaces).
|
|
84
97
|
Use the table/query/selection/row-action seams when they fit the workflow.
|
|
85
98
|
Keep fixed parent context while criteria change; make command scope clear.
|
|
86
99
|
|
|
87
100
|
Give each inset and gap one owner: page/container gutters, surface padding,
|
|
88
|
-
section rhythm and Stack/Grid sibling gaps.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
Choose `textGap`, density, control `size` and
|
|
92
|
-
Shells own global corners; controls/rows own
|
|
93
|
-
`--radius` at the theme boundary
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
Treat appearance feedback as an acceptance criterion
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
appearance; UIProvider supplies defaults. Use ThemeScope for scoped portals and
|
|
101
|
+
section rhythm and Stack/Grid sibling gaps. Peer Card stacks in TwoColumnLayout
|
|
102
|
+
use `gap="2xl"` to match its default grid rhythm in both axes. Choose Heading
|
|
103
|
+
`tag` for semantics and `size` for emphasis; keep typography margin-free and
|
|
104
|
+
primary rows at the shared size. Choose `textGap`, density, control `size` and
|
|
105
|
+
surface padding independently. Shells own global corners; controls/rows own
|
|
106
|
+
bounded inner corners. Change `--radius` at the theme boundary, never per
|
|
107
|
+
component. Public props and regions own internal anatomy; application
|
|
108
|
+
placement, alignment and overflow remain flexible.
|
|
109
|
+
|
|
110
|
+
Treat appearance feedback as an acceptance criterion: inspect the reported state
|
|
111
|
+
and improve its owning composition or recipe, since a passing static check cannot
|
|
112
|
+
show that hierarchy, contrast, corners or spacing look right. Theme through
|
|
113
|
+
semantic pairs and structural roots; use ThemeScope for scoped portals and
|
|
102
114
|
native `dir` plus DirectionProvider for RTL. See [theming](references/theming.md).
|
|
103
115
|
|
|
104
116
|
Keep controlled values authoritative and per-mount callbacks in the component.
|
|
@@ -111,16 +123,16 @@ For server-component apps, mount interactive families from a client wrapper.
|
|
|
111
123
|
|
|
112
124
|
| Work | Focused guidance and complete example |
|
|
113
125
|
| --- | --- |
|
|
114
|
-
|
|
|
126
|
+
| Rows, grids, regions and peer gaps | [Layout-owner map](references/composition.md#structure-and-spacing), [layout blocks](examples/layout-blocks.tsx) |
|
|
127
|
+
| Card, public websites, heading scale | [Composition](references/composition.md), [website](examples/website.tsx) |
|
|
115
128
|
| Shell/sidebar/header and parent adaptation | [Layout composition](references/composition.md#application-layouts), [workspace](examples/app-layout.tsx) |
|
|
116
129
|
| Directory, detail, editing and confirmation | [Workflows](references/workflows.md), [directory](examples/scoped-directory.tsx), [detail](examples/detail.tsx), [edit](examples/edit.tsx), [confirmation](examples/destructive-confirm.tsx) |
|
|
117
130
|
| KPI, facts, quota/task summaries | [Analytics](references/analytics.md), [analytics recipe](examples/analytics.tsx), [task/usage/inline edit](examples/planning-usage-edit.tsx) |
|
|
118
131
|
| Email, receipts, files, messages and integrations | [Domain composition](references/composition.md#receipts), [recipe exports/peers](examples/manifest.json), [integration](references/integration.md) |
|
|
119
|
-
| Shared anatomy and
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
expressions. Install/copy the complete skill manually after package upgrades.
|
|
132
|
+
| Shared anatomy, checker and hand-back | [Design contract](references/design-contract.md), [composition checker](references/review.md#done-means) |
|
|
133
|
+
|
|
134
|
+
Done means the [checker](references/review.md#done-means) reports no errors on the
|
|
135
|
+
files you changed (fix and re-run, at most three rounds), then the app's typecheck,
|
|
136
|
+
lint and tests pass. Inspect long content at narrow/desktop widths in light/dark;
|
|
137
|
+
open menus/overlays and run keyboard, dismissal, validation and retry paths. Hand
|
|
138
|
+
back each check as run or not run, and every kept warning with file:line.
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import { Button } from 'themelia-react-ui/base/buttons';
|
|
3
2
|
import { Card } from 'themelia-react-ui/base/cards';
|
|
4
3
|
import { SidebarTrigger } from 'themelia-react-ui/base/sidebar';
|
|
5
|
-
import { Stack } from 'themelia-react-ui/base/structure';
|
|
6
4
|
import { AppLayout, type AppLayoutVariant } from 'themelia-react-ui/layout/app-shell';
|
|
7
5
|
import { HeaderUserMenu, type HeaderUserMenuProps } from 'themelia-react-ui/layout/header';
|
|
8
6
|
import { Page } from 'themelia-react-ui/layout/page';
|
|
@@ -13,7 +11,7 @@ import { Text } from 'themelia-react-ui/typography';
|
|
|
13
11
|
/** Use at the application's single UIProvider mount; CSS owns palette/geometry. */
|
|
14
12
|
export const workspaceUIDefaults: UIConfig = {
|
|
15
13
|
density: { defaultScale: 'md' },
|
|
16
|
-
card: { defaultSurface: 'card'
|
|
14
|
+
card: { defaultSurface: 'card' },
|
|
17
15
|
};
|
|
18
16
|
|
|
19
17
|
export interface WorkspaceLayoutProps {
|
|
@@ -46,13 +44,13 @@ export function WorkspaceLayout({ variant = 'inset', sidebar, navigationGroups =
|
|
|
46
44
|
slots={{ headerEnd: workspaceSwitcher, footer: user && sidebarAccount ? <SidebarNavigationUser user={user} onLogout={onLogout} /> : undefined }} />;
|
|
47
45
|
const content = <Page narrow={narrow} gutter={variant === 'stacked' ? 'none' : undefined}
|
|
48
46
|
header={{ title: 'Workspace', description: 'Review activity and manage your records.',
|
|
49
|
-
|
|
47
|
+
primaryAction: { label: 'Create record', onClick: onCreate } }}>
|
|
50
48
|
{children ?? <Card title="Activity" footerText="Latest workspace activity"><Text>Application content goes here.</Text></Card>}
|
|
51
49
|
</Page>;
|
|
52
50
|
const trigger = <SidebarTrigger />;
|
|
53
51
|
return <LayoutSidebarProvider adaptTo="container" className="min-h-0">
|
|
54
52
|
{variant === 'stacked' ? <AppLayout variant="stacked" className="h-svh min-h-0" logo={brand}
|
|
55
|
-
slots={{headerEnd: account}}
|
|
53
|
+
slots={{headerEnd: account}}>{content}</AppLayout>
|
|
56
54
|
: variant === 'sidebar' || variant === 'inset' ? <AppLayout variant={variant} className="h-svh min-h-0"
|
|
57
55
|
sidebar={navigation} sidebarTrigger={trigger} slots={{ toolbarStart: brand, toolbarEnd: account }}>{content}</AppLayout>
|
|
58
56
|
: <AppLayout variant={variant} className="h-svh min-h-0" logo={brand} sidebar={navigation}
|
|
@@ -17,9 +17,9 @@ export function AccountComposition({ save }: { save: (name: string) => Promise<v
|
|
|
17
17
|
return <ThemeScope style={{ '--height-action': '2.5rem', '--height-control': '2.5rem' }}>
|
|
18
18
|
<Grid columns={{ base: 1, lg: 2 }} align="start" gap="xl">
|
|
19
19
|
<Card surface="card" title={savedName} titleSuffix={<Badge tone="neutral">Workspace</Badge>}
|
|
20
|
-
headerPlacement="frame"
|
|
21
|
-
|
|
22
|
-
<Stack gap="lg"><Text type="secondary">A framed header with one
|
|
20
|
+
headerPlacement="frame"
|
|
21
|
+
headerAction={<Button onClick={() => { setName(savedName); setError(undefined); editor.show(); }}>Edit workspace</Button>}>
|
|
22
|
+
<Stack gap="lg"><Text type="secondary">A framed header with one quick control and one body.</Text></Stack>
|
|
23
23
|
</Card>
|
|
24
24
|
<Card surface="flat" padding="none" title="Ownership">
|
|
25
25
|
<Stack gap="md"><Text>The app owns data and save behavior.</Text>
|
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useState, type ReactNode } from 'react';
|
|
2
2
|
import { Button } from 'themelia-react-ui/base/buttons';
|
|
3
3
|
import { Card } from 'themelia-react-ui/base/cards';
|
|
4
|
-
import { MetadataList } from 'themelia-react-ui/
|
|
4
|
+
import { MetadataList } from 'themelia-react-ui/base/metadata-list';
|
|
5
|
+
import { ConfirmDialog, useOverlayVisibility } from 'themelia-react-ui/features/overlays';
|
|
6
|
+
import { Page, type PageHeaderAction } from 'themelia-react-ui/layout/page';
|
|
5
7
|
import { Date, Email, Money, Value } from 'themelia-react-ui/primitives';
|
|
6
|
-
import {
|
|
8
|
+
import { Text } from 'themelia-react-ui/typography';
|
|
7
9
|
|
|
8
10
|
export interface AccountDetailRecord {
|
|
9
11
|
id: string; name: string; email: string | null;
|
|
10
12
|
createdAt: string | null; balanceMinor: number | null; currency: string;
|
|
13
|
+
/** Shown as the one status badge beside the title. */
|
|
14
|
+
overdue?: boolean;
|
|
11
15
|
}
|
|
12
16
|
export interface AccountDetailProps {
|
|
13
17
|
account: AccountDetailRecord;
|
|
@@ -15,21 +19,63 @@ export interface AccountDetailProps {
|
|
|
15
19
|
onBack: () => void;
|
|
16
20
|
}
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
/** One framed subject for a drawer or dashboard: one quick control, no page chrome. */
|
|
23
|
+
export function AccountDetail({ account, onEdit }: AccountDetailProps) {
|
|
19
24
|
return <Card title={account.name} headerPlacement="frame"
|
|
20
|
-
headerAction={<Button onClick={() => onEdit(account.id)}>Edit
|
|
21
|
-
footerSlot={<Button tone="secondary" buttonStyle="outline" onClick={onBack}>Back to accounts</Button>}>
|
|
25
|
+
headerAction={<Button onClick={() => onEdit(account.id)}>Edit</Button>}>
|
|
22
26
|
<AccountFacts account={account}/>
|
|
23
27
|
</Card>;
|
|
24
28
|
}
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
export type AccountSection = 'overview' | 'invoices' | 'activity';
|
|
31
|
+
|
|
32
|
+
export interface AccountDetailPageProps extends AccountDetailProps {
|
|
33
|
+
section: AccountSection;
|
|
34
|
+
onSectionChange: (section: AccountSection) => void;
|
|
35
|
+
invoiceCount: number;
|
|
36
|
+
onSendStatement: (id: string) => void;
|
|
37
|
+
/** Reject on failure; the confirmation stays open and shows the error. */
|
|
38
|
+
onDelete: (id: string) => Promise<void>;
|
|
39
|
+
/** The app's invoice table or activity log for the other sections. */
|
|
40
|
+
children?: ReactNode;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A record route: Page owns the title, status, commands and section tabs.
|
|
45
|
+
* Commands carry roles, not colours; the header places them.
|
|
46
|
+
*/
|
|
47
|
+
export function AccountDetailPage({ account, onEdit, onBack, section, onSectionChange,
|
|
48
|
+
invoiceCount, onSendStatement, onDelete, children }: AccountDetailPageProps) {
|
|
49
|
+
const deletion = useOverlayVisibility();
|
|
50
|
+
const [error, setError] = useState<string>();
|
|
51
|
+
const commands: PageHeaderAction[] = [
|
|
52
|
+
{ label: 'Send statement', onClick: () => onSendStatement(account.id) },
|
|
53
|
+
{ label: 'Delete account', destructive: true, onClick: () => { setError(undefined); deletion.show(); } },
|
|
54
|
+
];
|
|
55
|
+
return <Page header={{
|
|
56
|
+
title: account.name, onBack, backLabel: 'Back to accounts',
|
|
57
|
+
titleBadges: account.overdue ? [{ label: 'Overdue', tone: 'warning' }] : undefined,
|
|
58
|
+
primaryAction: { label: 'Edit account', onClick: () => onEdit(account.id) },
|
|
59
|
+
secondaryActions: commands,
|
|
60
|
+
tabs: {
|
|
61
|
+
label: 'Account sections', value: section,
|
|
62
|
+
onValueChange: id => onSectionChange(id as AccountSection),
|
|
63
|
+
items: [
|
|
64
|
+
{ id: 'overview', label: 'Overview' },
|
|
65
|
+
{ id: 'invoices', label: 'Invoices', badge: invoiceCount },
|
|
66
|
+
{ id: 'activity', label: 'Activity' },
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
}}>
|
|
70
|
+
{section === 'overview'
|
|
71
|
+
? <Card title="Contact and billing" headerPlacement="frame"><AccountFacts account={account}/></Card>
|
|
72
|
+
: children}
|
|
73
|
+
<ConfirmDialog {...deletion.overlayProps} destructive
|
|
74
|
+
title={`Delete ${account.name}?`} description="This permanently removes the account."
|
|
75
|
+
onAsyncConfirm={() => onDelete(account.id)}
|
|
76
|
+
onError={() => setError('Deletion failed. The account is kept; retry or cancel.')}>
|
|
77
|
+
{error && <Text role="alert" type="error">{error}</Text>}
|
|
78
|
+
</ConfirmDialog>
|
|
33
79
|
</Page>;
|
|
34
80
|
}
|
|
35
81
|
|
|
@@ -52,8 +52,8 @@ export function AccountEdit({ initial, onSave, onCancel }: AccountEditProps) {
|
|
|
52
52
|
{error && <Text role="alert" type="error">{error}</Text>}
|
|
53
53
|
{saved && <Text role="status">Account saved.</Text>}
|
|
54
54
|
<Stack direction={{ base: 'vertical', sm: 'horizontal' }} gap="sm">
|
|
55
|
-
<Button type="submit" loading={pending} strings={{ loading: 'Saving account…' }}>Save account</Button>
|
|
56
|
-
<Button type="button"
|
|
55
|
+
<Button tone="primary" type="submit" loading={pending} strings={{ loading: 'Saving account…' }}>Save account</Button>
|
|
56
|
+
<Button type="button" disabled={pending} onClick={onCancel}>Cancel edit</Button>
|
|
57
57
|
</Stack>
|
|
58
58
|
</Stack>
|
|
59
59
|
</form>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { Stack } from 'themelia-react-ui/base/structure';
|
|
3
|
+
import { TwoColumnLayout } from 'themelia-react-ui/layout/containers';
|
|
4
|
+
|
|
5
|
+
export interface LayoutBlocksProps {
|
|
6
|
+
summary?: ReactNode;
|
|
7
|
+
primary: ReactNode;
|
|
8
|
+
secondary: ReactNode;
|
|
9
|
+
support: ReactNode;
|
|
10
|
+
actions?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Place inside Page. Pass independently framed subjects; this composition adds no Card or gutter. */
|
|
14
|
+
export function LayoutBlocks({ summary, primary, secondary, support, actions }: LayoutBlocksProps) {
|
|
15
|
+
return <TwoColumnLayout adaptTo="container" header={summary}
|
|
16
|
+
main={<Stack gap="2xl">{primary}{secondary}</Stack>}
|
|
17
|
+
aside={<Stack gap="2xl">{support}</Stack>}
|
|
18
|
+
footer={actions ? <Stack direction="horizontal" justify="end" gap="md">{actions}</Stack> : undefined}
|
|
19
|
+
/>;
|
|
20
|
+
}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
"examples": [
|
|
4
4
|
{
|
|
5
5
|
"file": "website.tsx",
|
|
6
|
-
"exports": [
|
|
6
|
+
"exports": [
|
|
7
|
+
"WebsiteLandingPage"
|
|
8
|
+
],
|
|
7
9
|
"phase": "basic",
|
|
8
10
|
"optionalPeers": []
|
|
9
11
|
},
|
|
@@ -27,14 +29,20 @@
|
|
|
27
29
|
},
|
|
28
30
|
{
|
|
29
31
|
"file": "scoped-directory.tsx",
|
|
30
|
-
"exports": [
|
|
32
|
+
"exports": [
|
|
33
|
+
"ScopedDirectory"
|
|
34
|
+
],
|
|
31
35
|
"phase": "optional",
|
|
32
|
-
"optionalPeers": [
|
|
36
|
+
"optionalPeers": [
|
|
37
|
+
"@tanstack/react-table",
|
|
38
|
+
"react-day-picker"
|
|
39
|
+
]
|
|
33
40
|
},
|
|
34
41
|
{
|
|
35
42
|
"file": "detail.tsx",
|
|
36
43
|
"exports": [
|
|
37
|
-
"AccountDetail",
|
|
44
|
+
"AccountDetail",
|
|
45
|
+
"AccountDetailPage"
|
|
38
46
|
],
|
|
39
47
|
"phase": "basic",
|
|
40
48
|
"optionalPeers": []
|
|
@@ -112,9 +120,23 @@
|
|
|
112
120
|
},
|
|
113
121
|
{
|
|
114
122
|
"file": "analytics.tsx",
|
|
115
|
-
"exports": [
|
|
123
|
+
"exports": [
|
|
124
|
+
"RevenueOverview",
|
|
125
|
+
"RevenueMetric",
|
|
126
|
+
"PlainStatistic"
|
|
127
|
+
],
|
|
116
128
|
"phase": "optional",
|
|
117
|
-
"optionalPeers": [
|
|
129
|
+
"optionalPeers": [
|
|
130
|
+
"recharts"
|
|
131
|
+
]
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"file": "layout-blocks.tsx",
|
|
135
|
+
"exports": [
|
|
136
|
+
"LayoutBlocks"
|
|
137
|
+
],
|
|
138
|
+
"phase": "basic",
|
|
139
|
+
"optionalPeers": []
|
|
118
140
|
}
|
|
119
141
|
]
|
|
120
142
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Receipt, ReceiptItems, type ReceiptLineItem } from 'themelia-react-ui/blocks/commerce/receipt';
|
|
2
|
-
import { MetadataList } from 'themelia-react-ui/
|
|
2
|
+
import { MetadataList } from 'themelia-react-ui/base/metadata-list';
|
|
3
3
|
import { Money } from 'themelia-react-ui/primitives';
|
|
4
4
|
import { Separator } from 'themelia-react-ui/base/display';
|
|
5
5
|
import { Stack } from 'themelia-react-ui/base/structure';
|
|
@@ -13,7 +13,7 @@ export function PurchaseReceipt({ items, total, reference }: { items: readonly R
|
|
|
13
13
|
<Separator dashed />
|
|
14
14
|
<ReceiptItems items={items} currency="EUR" unit="minor" />
|
|
15
15
|
<Separator dashed />
|
|
16
|
-
<MetadataList layout="rows" items={[{ label: 'Total', value: <Money tag="div" className="block" amount={total} currency="EUR" unit="minor" weight="semibold" /> }]} />
|
|
16
|
+
<MetadataList layout="rows" valueAlign="end" items={[{ label: 'Total', value: <Money tag="div" className="block" amount={total} currency="EUR" unit="minor" weight="semibold" /> }]} />
|
|
17
17
|
</Stack>
|
|
18
18
|
</Receipt>;
|
|
19
19
|
}
|
|
@@ -50,11 +50,11 @@ export function ScopedDirectory(props: ScopedDirectoryProps) {
|
|
|
50
50
|
const rowActions = useMemo<DataTableProps<DirectoryContact, unknown>['rowActions']>(() => [
|
|
51
51
|
{ id: 'open', label: 'Open contact', onClick: contact => props.onOpen(contact.id) },
|
|
52
52
|
], [props.onOpen]);
|
|
53
|
-
return <Page header={{ title: 'Contacts',
|
|
53
|
+
return <Page header={{ title: 'Contacts',
|
|
54
54
|
description: 'People responsible for bookings, billing and operations.',
|
|
55
55
|
onBack: props.onBack, backLabel: 'All businesses',
|
|
56
56
|
slots: { beforeTitle: <Text type="secondary">Business: {props.scope.label}</Text> },
|
|
57
|
-
|
|
57
|
+
primaryAction: props.onCreate ? { label: 'New contact', onClick: props.onCreate } : undefined,
|
|
58
58
|
}}>
|
|
59
59
|
<FilterProvider filters={criteria} activeFilters={props.filters}
|
|
60
60
|
navigating={props.state.status === 'loading'}
|
|
@@ -70,7 +70,7 @@ export function ScopedDirectory(props: ScopedDirectoryProps) {
|
|
|
70
70
|
props.state.status === 'error' ? 'Contacts could not be loaded.' :
|
|
71
71
|
props.filters.length ? 'No contacts match these criteria.' : 'No contacts in this business yet.'}
|
|
72
72
|
emptyStateAction={props.state.status === 'error' ? <Stack gap="dense"><Text role="alert" type="error">{props.state.message}</Text>
|
|
73
|
-
<Button
|
|
73
|
+
<Button onClick={props.onRetry}>Retry contacts</Button></Stack> : undefined}
|
|
74
74
|
rowActions={rowActions} />
|
|
75
75
|
</FilterProvider>
|
|
76
76
|
</Page>;
|
|
@@ -43,7 +43,7 @@ export function WebsiteLandingPage({ title, description, actionLabel, actionHref
|
|
|
43
43
|
<Heading tag="h2" size="2xl" id={servicesId}>{servicesTitle}</Heading>
|
|
44
44
|
<Grid columns={{ base: 1, md: 2, lg: 3 }} gap="xl">
|
|
45
45
|
{offers.map(offer => <Card key={offer.id} title={offer.title} description={offer.description}
|
|
46
|
-
footerSlot={<Button href={offer.href}
|
|
46
|
+
footerSlot={<Button href={offer.href}>{offer.actionLabel}</Button>}>
|
|
47
47
|
<Stack gap="dense">
|
|
48
48
|
<Money {...offer.price} locale={locale} align="left" weight="semibold" />
|
|
49
49
|
<Text type="secondary" size="xs">{offer.priceNote}</Text>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Project instructions block
|
|
2
|
+
|
|
3
|
+
Agents load a skill only when they decide to, and often never open it. Paste this
|
|
4
|
+
block into the consuming app's `AGENTS.md`, which Codex, Cursor, Copilot and
|
|
5
|
+
Claude Code read; in a project that has only `CLAUDE.md`, paste it there. It
|
|
6
|
+
points agents at this installed skill and states when UI work is done.
|
|
7
|
+
|
|
8
|
+
```md
|
|
9
|
+
<!-- themelia-react-ui:start 2.0.1 -->
|
|
10
|
+
## UI built with themelia-react-ui
|
|
11
|
+
Before writing UI, read node_modules/themelia-react-ui/docs/consumer-skill/SKILL.md and the
|
|
12
|
+
installed declarations; prefer them over memory. Find the owner for a task with:
|
|
13
|
+
node node_modules/themelia-react-ui/docs/consumer-skill/scripts/find-components.mjs <task nouns>
|
|
14
|
+
Rules: one Page per route, whose title is the h1. Commands go in header.primaryAction
|
|
15
|
+
(one) and ordered header.secondaryActions; destructive ones confirm with ConfirmDialog.
|
|
16
|
+
A record's sections go in header.tabs. Space siblings with Stack/Grid gap; write copy
|
|
17
|
+
with Heading/Text and values with Money/Date/Number; use semantic colors; badges stay
|
|
18
|
+
neutral unless they state status; dialogs come only from themelia-react-ui/features/overlays.
|
|
19
|
+
Done means: node node_modules/themelia-react-ui/docs/consumer-skill/scripts/check-composition.mjs <changed files>
|
|
20
|
+
reports no errors (fix and re-run, at most three rounds), then the app's typecheck, lint
|
|
21
|
+
and tests pass. Hand back each check as run or not run, and every kept warning with
|
|
22
|
+
file:line and its reason.
|
|
23
|
+
<!-- themelia-react-ui:end -->
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
- Keep the block between its markers and replace all of it after an upgrade. The
|
|
27
|
+
start marker records the package version it was generated for; app rules belong
|
|
28
|
+
outside the markers.
|
|
29
|
+
- It names only the Node scripts that ship in `docs/consumer-skill/scripts`, so
|
|
30
|
+
every agent can run them without a plugin, MCP server or global CLI.
|
|
31
|
+
- The done condition is the agent's, not the build's: app CI can stay
|
|
32
|
+
non-blocking on checker warnings. See [review](review.md#done-means) for the
|
|
33
|
+
hand-back and the checker's coverage.
|
|
@@ -15,7 +15,7 @@ application data and never fetch or define a business metric.
|
|
|
15
15
|
| Current versus previous metric | `MetricComparison` from `themelia-react-ui/blocks/analytics` | Uses current/previous `MetricData`; app defines the comparison baseline. |
|
|
16
16
|
| Used/limit quotas with shares, daily values and period selection | `UsageCard` from `themelia-react-ui/blocks/analytics/usage-card` | Owns a Card and ready/loading/error/empty presentation with retry/period callbacks. No optional chart peer. |
|
|
17
17
|
| One plain label/value fact | `InlineStat` from `themelia-react-ui/blocks/data-display` | Card-free; app chooses whether this subject needs a Card. |
|
|
18
|
-
| Several facts about one record | `MetadataList` from `themelia-react-ui/
|
|
18
|
+
| Several facts about one record | `MetadataList` from `themelia-react-ui/base/metadata-list` | Card-free; value primitives own formatting. |
|
|
19
19
|
| Caller-owned chart series | `ChartCard` from `themelia-react-ui/blocks/analytics` | Card-free chart composition; caller supplies chart content and an optional Card boundary. |
|
|
20
20
|
|
|
21
21
|
Start with these subject owners before constructing a Card with a number and
|