@wildo-ai/presets-components 1.1.3 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
- package/dist/esm/components/actions/action-bar.js +61 -7
- package/dist/esm/components/actions/action-bar.js.map +1 -1
- package/dist/esm/components/actions/action-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.js +3 -3
- package/dist/esm/components/actions/action-button.js.map +1 -1
- package/dist/esm/components/actions/action-button.labels.d.ts.map +1 -1
- package/dist/esm/components/actions/button-group.d.ts.map +1 -1
- package/dist/esm/components/actions/button.d.ts.map +1 -1
- package/dist/esm/components/actions/button.js +62 -3
- package/dist/esm/components/actions/button.js.map +1 -1
- package/dist/esm/components/actions/button.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.js +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.js.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts +4 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.js +165 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.js.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts +3 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js +63 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/image.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/shiki-highlighter-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/shiki-highlighter.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/web-preview.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/conversation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/message.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/prompt-input.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/sources.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
- package/dist/esm/components/ai-elements/decision/approval.d.ts +36 -4
- package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.js +77 -7
- package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
- package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.js +1 -1
- package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.js +8 -1
- package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
- package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
- package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/agent.js +23 -18
- package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
- package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
- package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
- package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
- package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
- package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
- package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
- package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.js +21 -0
- package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.js +9 -8
- package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
- package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
- package/dist/esm/components/app/public-layout-terms.js +137 -0
- package/dist/esm/components/app/public-layout-terms.js.map +1 -0
- package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
- package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.js +3 -1
- package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
- package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
- package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.js +22 -0
- package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js +19 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
- package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
- package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.js +3 -1
- package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
- package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.js +4 -2
- package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.js +1 -0
- package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
- package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.js +3 -1
- package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
- package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.js +4 -4
- package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js +2 -0
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
- package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
- package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/badge.d.ts.map +1 -1
- package/dist/esm/components/data-display/badge.js +16 -15
- package/dist/esm/components/data-display/badge.js.map +1 -1
- package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.d.ts +2 -1
- package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.js +24 -8
- package/dist/esm/components/data-display/description-list.js.map +1 -1
- package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/duration.d.ts +15 -0
- package/dist/esm/components/data-display/duration.d.ts.map +1 -0
- package/dist/esm/components/data-display/duration.js +50 -0
- package/dist/esm/components/data-display/duration.js.map +1 -0
- package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
- package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
- package/dist/esm/components/data-display/duration.labels.js +35 -0
- package/dist/esm/components/data-display/duration.labels.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
- package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
- package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
- package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
- package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
- package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
- package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.js +12 -8
- package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
- package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js +1 -0
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.js +82 -7
- package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/identifier.d.ts +19 -0
- package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
- package/dist/esm/components/data-display/identifier.js +21 -0
- package/dist/esm/components/data-display/identifier.js.map +1 -0
- package/dist/esm/components/data-display/kbd.d.ts +17 -0
- package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
- package/dist/esm/components/data-display/kbd.js +18 -0
- package/dist/esm/components/data-display/kbd.js.map +1 -0
- package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
- package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.js +3 -11
- package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
- package/dist/esm/components/data-display/timeline.d.ts +3 -0
- package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
- package/dist/esm/components/data-display/timeline.js +92 -0
- package/dist/esm/components/data-display/timeline.js.map +1 -0
- package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
- package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
- package/dist/esm/components/feedback/celebration-overlay.js +146 -22
- package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
- package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
- package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
- package/dist/esm/components/feedback/empty-state.js +11 -1
- package/dist/esm/components/feedback/empty-state.js.map +1 -1
- package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
- package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
- package/dist/esm/components/feedback/notification-center.js +6 -6
- package/dist/esm/components/feedback/notification-center.js.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
- package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/progress.d.ts.map +1 -1
- package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
- package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/toast.d.ts.map +1 -1
- package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
- package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
- package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/field.js +11 -3
- package/dist/esm/components/form/chromes/field.js.map +1 -1
- package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.js +28 -0
- package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
- package/dist/esm/components/form/combobox.d.ts.map +1 -1
- package/dist/esm/components/form/combobox.js +4 -3
- package/dist/esm/components/form/combobox.js.map +1 -1
- package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
- package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
- package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
- package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.js +13 -12
- package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
- package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
- package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +54 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +159 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +22 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +27 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +41 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +129 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +22 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +27 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -0
- package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
- package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
- package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
- package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
- package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
- package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
- package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/carousel.d.ts.map +1 -1
- package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/divider.d.ts.map +1 -1
- package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/resizable.d.ts.map +1 -1
- package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
- package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/separator.d.ts.map +1 -1
- package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
- package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.js +35 -13
- package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.js +10 -2
- package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
- package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.js +38 -22
- package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
- package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.js +30 -5
- package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/command.d.ts.map +1 -1
- package/dist/esm/components/navigation/command.js +2 -2
- package/dist/esm/components/navigation/command.js.map +1 -1
- package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
- package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
- package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.js +11 -1
- package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/card.d.ts.map +1 -1
- package/dist/esm/components/sections/card.js +71 -6
- package/dist/esm/components/sections/card.js.map +1 -1
- package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.js +36 -6
- package/dist/esm/components/sections/content-section.js.map +1 -1
- package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
- package/dist/esm/components/sections/option-gesture.d.ts +15 -0
- package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
- package/dist/esm/components/sections/option-gesture.js +66 -0
- package/dist/esm/components/sections/option-gesture.js.map +1 -0
- package/dist/esm/components/sections/pagination.d.ts.map +1 -1
- package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
- package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/table.d.ts.map +1 -1
- package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.js +64 -15
- package/dist/esm/components/sections/tabs.js.map +1 -1
- package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/heading.d.ts.map +1 -1
- package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/label.d.ts.map +1 -1
- package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/link.d.ts.map +1 -1
- package/dist/esm/components/typography/link.js +9 -3
- package/dist/esm/components/typography/link.js.map +1 -1
- package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/text.d.ts +1 -1
- package/dist/esm/components/typography/text.d.ts.map +1 -1
- package/dist/esm/components/typography/text.js +3 -2
- package/dist/esm/components/typography/text.js.map +1 -1
- package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
- package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/preset-design-system.d.ts.map +1 -1
- package/dist/esm/config/preset-design-system.js +37 -60
- package/dist/esm/config/preset-design-system.js.map +1 -1
- package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
- package/dist/esm/config/preset-kits.d.ts.map +1 -1
- package/dist/esm/config/preset-navigation.d.ts.map +1 -1
- package/dist/esm/config/preset-navigation.js +0 -5
- package/dist/esm/config/preset-navigation.js.map +1 -1
- package/dist/esm/config/preset-resources.d.ts.map +1 -1
- package/dist/esm/config/preset-shell.d.ts.map +1 -1
- package/dist/esm/config/preset-utils.d.ts.map +1 -1
- package/dist/esm/config/presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
- package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.js +163 -7
- package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.js +1 -0
- package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.js +21 -5
- package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.js +25 -3
- package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/index.d.ts.map +1 -1
- package/dist/esm/config/resources/index.js.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.js +90 -12
- package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.d.ts +8 -2
- package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.js +185 -29
- package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/webhooks.resource-presets.js +27 -2
- package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
- package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
- package/dist/esm/mermaid-stub.d.ts.map +1 -1
- package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
- package/dist/esm/registration/register-common-enums.js +48 -34
- package/dist/esm/registration/register-common-enums.js.map +1 -1
- package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
- package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
- package/dist/esm/registration/register-default-icons.js +3 -1
- package/dist/esm/registration/register-default-icons.js.map +1 -1
- package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
- package/dist/esm/registration/register-default-presets.js +36 -4
- package/dist/esm/registration/register-default-presets.js.map +1 -1
- package/dist/esm/registration/register-provider-components.d.ts +31 -0
- package/dist/esm/registration/register-provider-components.d.ts.map +1 -0
- package/dist/esm/registration/register-provider-components.js +50 -0
- package/dist/esm/registration/register-provider-components.js.map +1 -0
- package/dist/esm/shiki-subset.d.ts +11 -3
- package/dist/esm/shiki-subset.d.ts.map +1 -1
- package/dist/esm/shiki-subset.js +10 -2
- package/dist/esm/shiki-subset.js.map +1 -1
- package/dist/esm/theme-exports.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.js +19 -5
- package/dist/esm/themes/cozy.theme.js.map +1 -1
- package/dist/esm/themes/dense.theme.d.ts.map +1 -1
- package/dist/esm/themes/dense.theme.js +56 -10
- package/dist/esm/themes/dense.theme.js.map +1 -1
- package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
- package/dist/esm/themes/editorial.theme.js +19 -5
- package/dist/esm/themes/editorial.theme.js.map +1 -1
- package/dist/esm/themes/glass.theme.d.ts.map +1 -1
- package/dist/esm/themes/glass.theme.js +5 -1
- package/dist/esm/themes/glass.theme.js.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.js +9 -2
- package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
- package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
- package/dist/esm/themes/terminal.theme.js +19 -5
- package/dist/esm/themes/terminal.theme.js.map +1 -1
- package/dist/esm/themes/trading.theme.d.ts.map +1 -1
- package/dist/esm/themes/trading.theme.js +22 -6
- package/dist/esm/themes/trading.theme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +29 -44
- package/dist/esm/.native.tsbuildinfo +0 -1
- package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
- package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
- package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
- package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
|
@@ -83,7 +83,7 @@ const interactiveSizes = {
|
|
|
83
83
|
icon: "size-8 pointer-coarse:min-h-11 pointer-coarse:min-w-11",
|
|
84
84
|
"icon-sm": "size-6 pointer-coarse:min-h-9 pointer-coarse:min-w-9",
|
|
85
85
|
};
|
|
86
|
-
const interactiveDisabled = "disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]";
|
|
86
|
+
const interactiveDisabled = "disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)] aria-disabled:cursor-not-allowed aria-disabled:opacity-[var(--opacity-disabled)]";
|
|
87
87
|
const interactiveInvalid = "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive";
|
|
88
88
|
// ============================================================
|
|
89
89
|
// Focus-ring constants — single source of truth
|
|
@@ -130,12 +130,25 @@ const interactive = {
|
|
|
130
130
|
motion: { transition: MOTION.interactive },
|
|
131
131
|
}),
|
|
132
132
|
[InteractiveVariant.OUTLINE]: recipe({
|
|
133
|
-
|
|
133
|
+
// Edge: `border-strong`, for the reason written at the default theme's OUTLINE recipe (#1322).
|
|
134
|
+
base: "border border-border-strong bg-background shadow-xs rounded-md font-medium text-sm cursor-pointer dark:bg-input/30",
|
|
134
135
|
states: {
|
|
135
136
|
hover: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-input/50 dark:hover:text-foreground",
|
|
136
137
|
active: "active:bg-accent/80 active:shadow-none active:translate-y-px",
|
|
137
138
|
focus: FOCUS_RING_OFFSET_WITH_BORDER,
|
|
138
|
-
|
|
139
|
+
/*
|
|
140
|
+
* SELECTED IS NOT HOVER. It used to be the same two classes as `hover`, so a segmented
|
|
141
|
+
* control could not say which segment was chosen while the pointer was anywhere on it —
|
|
142
|
+
* the chosen one and the one under the cursor were the same pixels.
|
|
143
|
+
*
|
|
144
|
+
* The two additions are both decisions this design system has already taken elsewhere.
|
|
145
|
+
* WEIGHT carries the choice, per `SelectableVariant.FILLED`: "the selected item is the
|
|
146
|
+
* 'you are here' anchor — WEIGHT carries the emphasis instead of a primary tint". And the
|
|
147
|
+
* inset RING is `Card`'s reasoning for a selected card: "the ring is what still reads when
|
|
148
|
+
* the card's own fill is close to" its surroundings, which is precisely a segment whose
|
|
149
|
+
* fill is the hover fill.
|
|
150
|
+
*/
|
|
151
|
+
selected: "data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:font-semibold data-[state=on]:ring-1 data-[state=on]:ring-inset data-[state=on]:ring-ring",
|
|
139
152
|
disabled: interactiveDisabled,
|
|
140
153
|
invalid: interactiveInvalid,
|
|
141
154
|
},
|
|
@@ -160,7 +173,19 @@ const interactive = {
|
|
|
160
173
|
hover: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
|
161
174
|
active: "active:bg-accent/80",
|
|
162
175
|
focus: FOCUS_RING_OFFSET_WITH_BORDER,
|
|
163
|
-
|
|
176
|
+
/*
|
|
177
|
+
* SELECTED IS NOT HOVER. It used to be the same two classes as `hover`, so a segmented
|
|
178
|
+
* control could not say which segment was chosen while the pointer was anywhere on it —
|
|
179
|
+
* the chosen one and the one under the cursor were the same pixels.
|
|
180
|
+
*
|
|
181
|
+
* The two additions are both decisions this design system has already taken elsewhere.
|
|
182
|
+
* WEIGHT carries the choice, per `SelectableVariant.FILLED`: "the selected item is the
|
|
183
|
+
* 'you are here' anchor — WEIGHT carries the emphasis instead of a primary tint". And the
|
|
184
|
+
* inset RING is `Card`'s reasoning for a selected card: "the ring is what still reads when
|
|
185
|
+
* the card's own fill is close to" its surroundings, which is precisely a segment whose
|
|
186
|
+
* fill is the hover fill.
|
|
187
|
+
*/
|
|
188
|
+
selected: "data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:font-semibold data-[state=on]:ring-1 data-[state=on]:ring-inset data-[state=on]:ring-ring",
|
|
164
189
|
highlighted: "focus:bg-accent focus:text-accent-foreground",
|
|
165
190
|
open: "data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
|
|
166
191
|
disabled: interactiveDisabled,
|
|
@@ -245,7 +270,8 @@ const surface = {
|
|
|
245
270
|
// so a dialog reads as a "card the user can act inside" rather than a
|
|
246
271
|
// smaller-cornered floating panel. Required to restore monotonicity
|
|
247
272
|
// (BASE ≤ OVERLAY) — `rounded-md` here was visually demoting dialogs.
|
|
248
|
-
|
|
273
|
+
// Edge: `border-strong`, as the default theme's OVERLAY recipe (#1322).
|
|
274
|
+
base: "bg-surface-overlay text-surface-overlay-foreground rounded-lg border border-border-strong shadow-lg",
|
|
249
275
|
motion: {
|
|
250
276
|
enter: MOTION.enterFadeZoom,
|
|
251
277
|
exit: MOTION.exitFadeZoom,
|
|
@@ -281,7 +307,8 @@ const surface = {
|
|
|
281
307
|
// ============================================================
|
|
282
308
|
const formControl = {
|
|
283
309
|
[FormControlVariant.DEFAULT]: recipe({
|
|
284
|
-
|
|
310
|
+
// Edge: `border-strong` — an input's border is its only cue; see the default theme's FORM CONTROL recipe (#1322).
|
|
311
|
+
base: "border-border-strong dark:bg-surface-inset/30 rounded-md border bg-transparent shadow-xs text-base md:text-sm placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground",
|
|
285
312
|
states: {
|
|
286
313
|
focus: FOCUS_RING_OFFSET_WITH_BORDER,
|
|
287
314
|
disabled: "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]",
|
|
@@ -295,7 +322,8 @@ const formControl = {
|
|
|
295
322
|
motion: { transition: MOTION.formControl },
|
|
296
323
|
}),
|
|
297
324
|
[FormControlVariant.FILLED]: recipe({
|
|
298
|
-
|
|
325
|
+
// Fill PLUS a bottom indicator line at the strong edge — a fill alone marks nothing; see the default theme's FILLED recipe (#1322).
|
|
326
|
+
base: "bg-muted rounded-t-md rounded-b-none border-0 border-b border-border-strong text-base md:text-sm placeholder:text-muted-foreground",
|
|
299
327
|
states: {
|
|
300
328
|
focus: FOCUS_RING_OFFSET,
|
|
301
329
|
disabled: "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]",
|
|
@@ -309,7 +337,7 @@ const formControl = {
|
|
|
309
337
|
motion: { transition: MOTION.formControl },
|
|
310
338
|
}),
|
|
311
339
|
[FormControlVariant.UNDERLINED]: recipe({
|
|
312
|
-
base: "bg-transparent border-0 border-b border-border rounded-none text-base md:text-sm placeholder:text-muted-foreground",
|
|
340
|
+
base: "bg-transparent border-0 border-b border-border-strong rounded-none text-base md:text-sm placeholder:text-muted-foreground",
|
|
313
341
|
states: {
|
|
314
342
|
focus: "focus-visible:border-ring focus-visible:border-b-2",
|
|
315
343
|
disabled: "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]",
|
|
@@ -323,7 +351,7 @@ const formControl = {
|
|
|
323
351
|
motion: { transition: "transition-[border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none" },
|
|
324
352
|
}),
|
|
325
353
|
[FormControlVariant.CHECKBOX]: recipe({
|
|
326
|
-
base: "border-border dark:bg-input/30 border shadow-xs",
|
|
354
|
+
base: "border-border-strong dark:bg-input/30 border shadow-xs",
|
|
327
355
|
states: {
|
|
328
356
|
focus: FOCUS_RING_OFFSET_WITH_BORDER,
|
|
329
357
|
selected: "data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary dark:data-[state=checked]:bg-primary",
|
|
@@ -539,6 +567,10 @@ const typography = {
|
|
|
539
567
|
base: "text-muted-foreground text-sm",
|
|
540
568
|
sizes: { sm: "text-xs", md: "text-sm" },
|
|
541
569
|
}),
|
|
570
|
+
[TypographyVariant.EYEBROW]: recipe({
|
|
571
|
+
base: "text-foreground-subtle text-2xs font-medium uppercase tracking-wide",
|
|
572
|
+
sizes: { sm: "text-2xs", md: "text-xs" },
|
|
573
|
+
}),
|
|
542
574
|
[TypographyVariant.CODE]: recipe({
|
|
543
575
|
base: "font-mono text-sm bg-muted rounded px-1 py-0.5",
|
|
544
576
|
sizes: { sm: "text-xs", md: "text-sm", lg: "text-base" },
|
|
@@ -554,11 +586,25 @@ const typography = {
|
|
|
554
586
|
// Spacing uses the compact token set (`UI_SPACING_COMPACT`) so rows/gaps also
|
|
555
587
|
// tighten, not just control heights.
|
|
556
588
|
// ============================================================
|
|
589
|
+
/**
|
|
590
|
+
* The compact spacing, as the STRINGS a theme carries.
|
|
591
|
+
*
|
|
592
|
+
* `UI_SPACING_COMPACT` is a map of design-TOKEN configurations (`{ modeStrategy, type, value }`), which
|
|
593
|
+
* is what a `DesignSystemConfiguration` takes. A theme's `spacing` is a map of CSS lengths: `UIContext`
|
|
594
|
+
* writes each entry to `--sp-*` verbatim, and `ComponentStyleThemeSchema` refuses anything but strings.
|
|
595
|
+
* Handed the token set directly — as this theme was until #1322 — every application that selected
|
|
596
|
+
* Dense was REJECTED at config parse with "Invalid component style theme", and had it not been, its
|
|
597
|
+
* spacing vars would have read `[object Object]`. The values are read off the token set rather than
|
|
598
|
+
* restated, so the compact scale keeps one source.
|
|
599
|
+
*/
|
|
600
|
+
const spacing = Object.fromEntries(
|
|
601
|
+
/* A spacing length has no light/dark pair; the LIGHT value is read for a token authored with one. */
|
|
602
|
+
Object.entries(UI_SPACING_COMPACT).map(([semantic, token]) => [semantic, 'value' in token ? token.value : token.lightValue]));
|
|
557
603
|
export const denseTheme = {
|
|
558
604
|
id: 'dense',
|
|
559
605
|
name: 'Dense',
|
|
560
606
|
description: 'Compact, Linear-grade opt-in variant of the default theme. Shorter controls/inputs (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control rounded-md · card rounded-lg), flat + hairline surfaces (no card shadow). Same tonal badges, focus rings, and motion as default.',
|
|
561
|
-
spacing
|
|
607
|
+
spacing,
|
|
562
608
|
interactive,
|
|
563
609
|
surface,
|
|
564
610
|
formControl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dense.theme.js","sourceRoot":"","sources":["../../../../src/themes/dense.theme.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentStyleTheme } from '@wildo-ai/presets-components-models';\nimport {\n DividerVariant,\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n SKELETON_NEUTRAL_TINT,\n} from '@wildo-ai/presets-components-models';\nimport type { UIBehaviorRecipe } from '@wildo-ai/presets-components-models';\n// Dense derives from the known-good default theme (full recipe coverage +\n// correct types) and compacts it. The chart preset is shared with the default\n// theme — imported from the package rather than re-authored.\nimport { DEFAULT_CHART_STYLE_PRESET } from '@wildo-ai/saas-frontend-lib';\nimport { UI_SPACING_COMPACT } from '../config/preset-design-system';\n\n// ============================================================\n// Helper\n// ============================================================\n\nfunction recipe(r: Partial<UIBehaviorRecipe> & { base: string }): UIBehaviorRecipe {\n return {\n base: r.base,\n states: r.states ?? {},\n sizes: r.sizes,\n motion: r.motion ?? {},\n gesture: r.gesture,\n policy: r.policy,\n };\n}\n\n// ============================================================\n// Motion constants — reference Level 1 tokens via CSS variables\n//\n// Each behavior targets SPECIFIC properties (no transition-all).\n// Durations and easings come from Level 1 --motion-* tokens.\n// All include motion-reduce for accessibility.\n// ============================================================\n//\n// MOTION PERSONALITY — Default (shadcn / Material-inspired SaaS)\n// Hover/focus : FAST (150ms) + DEFAULT → Material Standard curve.\n// Bidirectional state changes,\n// subtle but present.\n// Overlay enter: NORMAL (250ms) + ENTER → fade + zoom-95 + 2px slide.\n// Pure decelerate.\n// Overlay exit : FAST (150ms) + EXIT → quicker than enter.\n// Backdrop : NORMAL/FAST + ENTER/EXIT → matches overlays.\n// Gestures : NONE — neutral SaaS baseline. CSS-only motion is the\n// contract; theme can be swapped without removing\n// motion.dev wrappers from app code (which any theme\n// may activate via the recipe `gesture` slot).\n//\n// This theme is the reference baseline for the framework. All other\n// themes deviate FROM it intentionally — Glass adds gestures, Editorial\n// stretches durations, Terminal/Trading collapse them, Neo-Brutalist\n// strips easing, Cozy adds gentle springs.\n// ============================================================\n\nconst MOTION = {\n /** Interactive elements: bg, color, border, shadow, transform changes */\n interactive: \"transition-[background-color,color,border-color,box-shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Form controls: border, shadow, color changes on focus/validation */\n formControl: \"transition-[color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Selectable items: bg, color, border on state change */\n selectable: \"transition-[background-color,color,border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Sidebar: width/height collapse */\n sidebarCollapse: \"transition-[width,height,padding] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Enter animation for overlays/surfaces (fade + zoom) */\n enterFadeZoom: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n\n /** Exit animation for overlays/surfaces */\n exitFadeZoom: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n\n /** Enter for directional popovers (fade + zoom + slide per side) */\n enterDirectional: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:data-[state=open]:animate-none\",\n\n /** Enter/exit for backdrop overlay (fade only).\n *\n * Uses explicit ENTER/EXIT easing tokens. Without\n * `ease-[...]`, browsers fall back to the CSS default `ease` curve,\n * silently inheriting a generic curve instead of the theme's ENTER\n * (decelerate) / EXIT (accelerate) personality. Backdrops fade only\n * so the perceptual difference is small, but consistency matters\n * for the \"every motion uses an explicit theme token\" rule. */\n backdropEnter: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n backdropExit: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n};\n\n// ============================================================\n// INTERACTIVE — Buttons, menu items, clickable surfaces\n// ============================================================\n\n// DENSE sizes — one step shorter than default (md h-8 / sm h-7 / lg h-9) with\n// trimmed inline padding, and one radius tier tighter (control `rounded-md`).\n// `pointer-coarse:` touch floors are preserved so dense stays tap-safe.\nconst interactiveSizes: Record<string, string> = {\n xs: \"h-6 px-2 text-xs gap-1 rounded-md has-[>svg]:px-1.5 pointer-coarse:min-h-9\",\n sm: \"h-7 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2 pointer-coarse:min-h-11\",\n md: \"h-8 px-3 has-[>svg]:px-2.5 rounded-md pointer-coarse:min-h-11\",\n lg: \"h-9 px-4 rounded-md has-[>svg]:px-3 pointer-coarse:min-h-11\",\n icon: \"size-8 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-6 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n};\n\nconst interactiveDisabled: string = \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\";\nconst interactiveInvalid: string = \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\";\n\n// ============================================================\n// Focus-ring constants — single source of truth\n// for the keyboard-focus indicators used by INTERACTIVE, FORM_CONTROL,\n// SELECTABLE, and INDICATOR recipes. Shape mirrors the global\n// `.focus-ring-offset` / `.focus-ring-inset` Tailwind utilities exposed\n// in `index.css`; the recipes use raw classes (rather than the @apply\n// utility) because some variants pair the ring with a coloured border.\n// ============================================================\n/** Standard 2px offset ring + matching border-ring (most controls). */\nconst FOCUS_RING_OFFSET_WITH_BORDER: string =\n \"focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Standard 2px offset ring with NO border-ring change (filled / accent). */\nconst FOCUS_RING_OFFSET: string =\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Compact 2px ring used by indicator badges and selectable items. */\nconst FOCUS_RING_COMPACT: string =\n \"focus-visible:ring-2 focus-visible:ring-ring\";\n\nconst interactive: Record<InteractiveVariant, UIBehaviorRecipe> = {\n [InteractiveVariant.PRIMARY]: recipe({\n // T2 tactile: a hairline edge (`border-primary/50`) + `shadow-sm` give the\n // button real elevation, and the press (`active:translate-y-px active:shadow-none`)\n // reads as a physical push. `MOTION.interactive` already transitions transform,\n // so the press animates for free.\n base: \"bg-primary text-primary-foreground rounded-md border border-primary/50 shadow-sm font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-primary/90\",\n active: \"active:bg-primary/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n base: \"bg-destructive text-destructive-foreground rounded-md font-medium text-sm cursor-pointer dark:bg-destructive/60\",\n states: {\n hover: \"hover:bg-destructive/90\",\n active: \"active:bg-destructive/80 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n highlighted: \"focus:bg-destructive/10 dark:focus:bg-destructive/20 focus:text-destructive\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n base: \"border bg-background shadow-xs rounded-md font-medium text-sm cursor-pointer dark:bg-input/30 dark:border-input\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-input/50 dark:hover:text-foreground\",\n active: \"active:bg-accent/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: \"bg-secondary text-secondary-foreground rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-secondary/80\",\n active: \"active:bg-secondary/70 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: \"rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n active: \"active:bg-accent/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground\",\n highlighted: \"focus:bg-accent focus:text-accent-foreground\",\n open: \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.LINK]: recipe({\n base: \"text-primary underline-offset-4 font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:underline\",\n active: \"active:text-primary/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: {\n xs: \"h-7 px-2.5 text-xs gap-1 pointer-coarse:min-h-9\",\n sm: \"h-8 px-3 gap-1.5 pointer-coarse:min-h-11\",\n md: \"h-9 px-4 py-2 pointer-coarse:min-h-11\",\n lg: \"h-10 px-6 pointer-coarse:min-h-11\",\n icon: \"size-9 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-7 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n },\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // TT-1: Gradient stops resolved from theme tokens\n // (`--accent-gradient-{from,via,to}`) so tenants can rebrand the ACCENT\n // recipe without forking a theme. Defaults preserve the historical\n // violet/blue/pink visual.\n base: 'relative bg-primary text-primary-foreground font-semibold rounded-md shadow-xs before:absolute before:inset-0 before:rounded-[inherit] before:p-[1px] before:bg-[length:200%_200%] before:bg-gradient-to-r before:from-accent-gradient-from before:via-accent-gradient-via before:to-accent-gradient-to before:animate-[gradient-rotate_3s_ease_infinite] motion-reduce:before:animate-none before:-z-10 before:blur-[2px] shadow-[0_0_15px_color-mix(in_oklch,var(--primary)_20%,transparent)] text-sm cursor-pointer',\n states: {\n hover: 'hover:shadow-[0_0_25px_color-mix(in_oklch,var(--primary)_35%,transparent)]',\n active: 'active:scale-[0.98]',\n focus: FOCUS_RING_OFFSET,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition: 'transition-[shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// SURFACE — Cards, dialogs, popovers, dropdowns\n// SURFACE PERSONALITY — clean SaaS material hierarchy: cards are bordered\n// elevated panels, tab panels are attached but quiet, shell is chromaless,\n// transient notifications reuse overlay chrome at a smaller scale.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n // Card / panel — anchor of the surface scale at `rounded-lg`.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card — the elevated `surface-raised` fill + border + soft shadow,\n // ALWAYS painted so an explicitly-authored CARD section reads as a card in\n // every context (including inside a dialog/page). Mirrors BASE, the anchor\n // card surface; the section preset adds container padding.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.RAISED]: recipe({\n // Popover / dropdown — floats above the page, gets a slightly tighter\n // radius than BASE to feel \"cut from\" the larger card surface (one tier\n // smaller, never two; previously `rounded-md` was visibly inconsistent\n // when popovers stacked next to cards).\n // `fill-surface-overlay` mirrors the background so SVG children that paint\n // via `fill` — notably the Tooltip's Radix arrow — inherit the body colour\n // (CSS `fill` inherits across Radix's arrow wrapper span; `background` does\n // not). Keep `fill-*` in lockstep with `bg-*` here.\n base: \"bg-surface-overlay fill-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n // Dialog / sheet — the heaviest, most modal surface; matches BASE radius\n // so a dialog reads as a \"card the user can act inside\" rather than a\n // smaller-cornered floating panel. Required to restore monotonicity\n // (BASE ≤ OVERLAY) — `rounded-md` here was visually demoting dialogs.\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-lg border shadow-lg\",\n motion: {\n enter: MOTION.enterFadeZoom,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: \"bg-surface-inset text-surface-inset-foreground\",\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: \"bg-surface-sunken text-surface-sunken-foreground\",\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Tab panel joins to the tab strip: same visual language as BASE, but no\n // border/shadow so the surface policy can own the join.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-b-lg\",\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // App/page shell: chromaless raised background. Landmark semantics remain\n // opt-in via policy config.\n base: \"bg-surface-raised text-surface-raised-foreground\",\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast/snackbar: compact floating card, visually between RAISED and OVERLAY.\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n};\n\n// ============================================================\n// FORM_CONTROL — Inputs, textareas, select triggers\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n base: \"border-border dark:bg-surface-inset/30 rounded-md border bg-transparent shadow-xs text-base md:text-sm placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n base: \"bg-muted rounded-md border-0 text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: \"bg-transparent border-0 border-b border-border rounded-none text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: \"focus-visible:border-ring focus-visible:border-b-2\",\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-9 px-0 py-1 pointer-coarse:min-h-11\",\n sm: \"h-8 px-0 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-10 px-0 py-2 pointer-coarse:min-h-11\",\n },\n motion: { transition: \"transition-[border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n base: \"border-border dark:bg-input/30 border shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary dark:data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: \"data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 border border-transparent shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[background-color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n};\n\n// ============================================================\n// INDICATOR — Badges, alerts, toast severity\n// ============================================================\n\nconst indicatorShared = {\n states: {\n hover: \"[a&]:hover:opacity-[var(--opacity-hover)]\",\n focus: `focus-visible:border-ring ${FOCUS_RING_COMPACT}`,\n invalid: interactiveInvalid,\n },\n // DENSE keeps the pulse subtle to match its compact chrome. Reduced-motion safe.\n motion: { transition: MOTION.interactive, attention: \"animate-pulse motion-reduce:animate-none\" },\n};\n\n// TONAL badges (T1 + T1b) — tinted background + AA-contrast text + hairline\n// border, in place of the previous solid full-saturation fills. Reads calmer\n// and modern (Linear/Stripe/shadcn) and lets many status chips coexist on one\n// row without the \"wall of solid colour\" effect.\n//\n// The tint (`bg-{status}-subtle`) and text (`text-{status}-subtle-foreground`)\n// come from dedicated SUBTLE STATUS TOKENS (T1b), not per-recipe `/10` mixes.\n// Those tokens are palette-adaptive `color-mix()` formulas emitted by the design\n// -token CSS generator (`design-tokens-css.shared.ts` → `buildSubtleStatusColors`),\n// tuned so 12px badge text clears WCAG-AA (≥4.5) against its tint in BOTH light\n// and dark — including the amber WARNING case that fails contrast with a naive\n// same-hue text. Because the tokens reference the base `--{status}` vars, a\n// palette retune (or a light/dark switch) retunes the chip automatically, and a\n// tenant can override any pair via `DesignSystemToken.*_SUBTLE(_FOREGROUND)`.\n// The border stays on the palette base (`border-{status}/25`, `/30` for warning\n// where the base is lighter) so it tracks the same hue.\n//\n// DENSE delta: badges keep the AA-safe subtle tokens (using the raw `text-{status}`\n// here would reintroduce the light-mode contrast failure T1b fixed) but tighten to\n// `px-1.5 py-0` for a compact chip. A further \"quiet tint + neutral text + colored\n// status dot\" pass needs a badge-component-level dot, so it is intentionally NOT a\n// recipe change — deferred as a component-layer refinement.\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n // Tonal like the other four — see default.theme.ts for the rationale. Fixes the\n // sub-AA washed-out grey chip that raw `text-muted-foreground` on `bg-muted`\n // produced for `default`/`secondary`/`outline` enum values.\n base: \"bg-neutral-subtle text-neutral-subtle-foreground border-border rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: \"bg-info-subtle text-info-subtle-foreground border-info/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n base: \"bg-success-subtle text-success-subtle-foreground border-success/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: \"bg-warning-subtle text-warning-subtle-foreground border-warning/30 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n base: \"bg-destructive-subtle text-destructive-subtle-foreground border-destructive/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE — Tabs, sidebar active items, toggles\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: \"rounded-md text-sm outline-hidden ring-surface-sunken-border\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: \"focus-visible:ring-2\",\n active: \"active:bg-surface-sunken-accent active:text-surface-sunken-foreground\",\n selected: \"data-[active=true]:bg-surface-sunken-accent data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground data-[state=active]:bg-surface-sunken-accent data-[state=active]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)] aria-disabled:pointer-events-none aria-disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.UNDERLINE]: recipe({\n base: \"rounded-none border-b-2 border-transparent text-sm outline-hidden\",\n states: {\n hover: \"hover:text-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:border-primary data-[state=active]:text-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs pb-1\",\n md: \"h-8 text-sm pb-2\",\n lg: \"h-10 text-sm pb-3\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.PILL]: recipe({\n base: \"rounded-full text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:bg-primary data-[state=active]:text-primary-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 px-3 text-xs\",\n md: \"h-8 px-4 text-sm\",\n lg: \"h-10 px-5 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.INDICATOR]: recipe({\n base: \"rounded-md text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[active=true]:border-s-2 data-[active=true]:border-surface-sunken-primary data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n};\n\n// ============================================================\n// OVERLAY_BACKDROP — Dialog/Sheet background overlay\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Tailwind v4's `bg-color/[var()]` opacity modifier uses color-mix() which\n // doesn't resolve CSS custom property decimals correctly.\n // Use arbitrary bg value with rgb() alpha channel instead.\n base: \"bg-[rgb(0_0_0_/_var(--opacity-overlay))] backdrop-blur-sm\",\n motion: {\n enter: MOTION.backdropEnter,\n exit: MOTION.backdropExit,\n },\n});\n\n// ============================================================\n// DIVIDER — Separator\n// ============================================================\n\nconst divider: Record<DividerVariant, UIBehaviorRecipe> = {\n [DividerVariant.DEFAULT]: recipe({ base: 'bg-border shrink-0' }),\n // Nested-disclosure guide: the theme's own divider material, as a left edge.\n [DividerVariant.NESTING_GUIDE]: recipe({ base: 'border-s border-border' }),\n};\n\n// ============================================================\n// SKELETON — Loading placeholders\n// ============================================================\n\nconst skeleton: UIBehaviorRecipe = recipe({\n base: `${SKELETON_NEUTRAL_TINT} animate-pulse rounded-md motion-reduce:animate-none`,\n});\n\nconst loadingSpinner: UIBehaviorRecipe = recipe({\n base: \"text-muted-foreground animate-spin motion-reduce:animate-none\",\n});\n\nconst loadingOverlay: UIBehaviorRecipe = recipe({\n base: \"bg-background/80\",\n motion: {\n enter: \"animate-in fade-in-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-enter)] motion-reduce:animate-none\",\n exit: \"animate-out fade-out-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-exit)] motion-reduce:animate-none\",\n },\n});\n\n// ============================================================\n// TYPOGRAPHY — Text hierarchy\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: \"font-semibold leading-none tracking-tight\",\n // Heading scale rebalance — gaps were 12/4/2px (h1→h2→h3→h4); h1 at\n // text-4xl (36px) jumped 1.5× to h2 (text-2xl, 24px), which felt\n // disproportionate for in-app SaaS UI (text-4xl is a hero size).\n // Compressing h1 to text-3xl yields a smooth 6/4/2px ladder\n // (1.25× → 1.2× → 1.11×, classic Major Third base). Pages that want a\n // hero h1 can opt in with `className=\"text-4xl sm:text-5xl\"` since the\n // size class is the LAST `text-*` to win in `cn()`.\n sizes: {\n h1: \"text-3xl\",\n h2: \"text-2xl\",\n h3: \"text-xl\",\n h4: \"text-lg\",\n h5: \"text-base\",\n md: \"text-lg\",\n },\n }),\n [TypographyVariant.BODY]: recipe({\n base: \"text-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: \"font-medium text-sm leading-none\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: \"text-muted-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\" },\n }),\n [TypographyVariant.CODE]: recipe({\n base: \"font-mono text-sm bg-muted rounded px-1 py-0.5\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n};\n\n// ============================================================\n// DENSE THEME — assembled (opt-in, Linear-grade)\n//\n// Derived from the default theme and compacted: shorter control/input sizes\n// (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control `rounded-md`,\n// card `rounded-lg`), flat + hairline surfaces (no `shadow-sm` on cards).\n// Opt in per app: `theme: denseTheme` in `design-system.config.ts`.\n// Spacing uses the compact token set (`UI_SPACING_COMPACT`) so rows/gaps also\n// tighten, not just control heights.\n// ============================================================\n\nexport const denseTheme: ComponentStyleTheme = {\n id: 'dense',\n name: 'Dense',\n description: 'Compact, Linear-grade opt-in variant of the default theme. Shorter controls/inputs (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control rounded-md · card rounded-lg), flat + hairline surfaces (no card shadow). Same tonal badges, focus rings, and motion as default.',\n\n spacing: UI_SPACING_COMPACT,\n\n interactive,\n surface,\n formControl,\n indicator,\n selectable,\n overlayBackdrop,\n divider,\n skeleton,\n loadingSpinner,\n loadingOverlay,\n typography,\n radius: undefined,\n backgroundLayer: undefined,\n chartStyle: DEFAULT_CHART_STYLE_PRESET,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"dense.theme.js","sourceRoot":"","sources":["../../../../src/themes/dense.theme.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComponentStyleTheme } from '@wildo-ai/presets-components-models';\nimport {\n DividerVariant,\n InteractiveVariant,\n SurfaceVariant,\n FormControlVariant,\n IndicatorVariant,\n SelectableVariant,\n TypographyVariant,\n SKELETON_NEUTRAL_TINT,\n} from '@wildo-ai/presets-components-models';\nimport type { UIBehaviorRecipe } from '@wildo-ai/presets-components-models';\n// Dense derives from the known-good default theme (full recipe coverage +\n// correct types) and compacts it. The chart preset is shared with the default\n// theme — imported from the package rather than re-authored.\nimport { DEFAULT_CHART_STYLE_PRESET } from '@wildo-ai/saas-frontend-lib';\nimport { UI_SPACING_COMPACT } from '../config/preset-design-system';\n\n// ============================================================\n// Helper\n// ============================================================\n\nfunction recipe(r: Partial<UIBehaviorRecipe> & { base: string }): UIBehaviorRecipe {\n return {\n base: r.base,\n states: r.states ?? {},\n sizes: r.sizes,\n motion: r.motion ?? {},\n gesture: r.gesture,\n policy: r.policy,\n };\n}\n\n// ============================================================\n// Motion constants — reference Level 1 tokens via CSS variables\n//\n// Each behavior targets SPECIFIC properties (no transition-all).\n// Durations and easings come from Level 1 --motion-* tokens.\n// All include motion-reduce for accessibility.\n// ============================================================\n//\n// MOTION PERSONALITY — Default (shadcn / Material-inspired SaaS)\n// Hover/focus : FAST (150ms) + DEFAULT → Material Standard curve.\n// Bidirectional state changes,\n// subtle but present.\n// Overlay enter: NORMAL (250ms) + ENTER → fade + zoom-95 + 2px slide.\n// Pure decelerate.\n// Overlay exit : FAST (150ms) + EXIT → quicker than enter.\n// Backdrop : NORMAL/FAST + ENTER/EXIT → matches overlays.\n// Gestures : NONE — neutral SaaS baseline. CSS-only motion is the\n// contract; theme can be swapped without removing\n// motion.dev wrappers from app code (which any theme\n// may activate via the recipe `gesture` slot).\n//\n// This theme is the reference baseline for the framework. All other\n// themes deviate FROM it intentionally — Glass adds gestures, Editorial\n// stretches durations, Terminal/Trading collapse them, Neo-Brutalist\n// strips easing, Cozy adds gentle springs.\n// ============================================================\n\nconst MOTION = {\n /** Interactive elements: bg, color, border, shadow, transform changes */\n interactive: \"transition-[background-color,color,border-color,box-shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Form controls: border, shadow, color changes on focus/validation */\n formControl: \"transition-[color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Selectable items: bg, color, border on state change */\n selectable: \"transition-[background-color,color,border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Sidebar: width/height collapse */\n sidebarCollapse: \"transition-[width,height,padding] duration-[var(--motion-duration-normal)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\",\n\n /** Enter animation for overlays/surfaces (fade + zoom) */\n enterFadeZoom: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n\n /** Exit animation for overlays/surfaces */\n exitFadeZoom: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n\n /** Enter for directional popovers (fade + zoom + slide per side) */\n enterDirectional: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 motion-reduce:data-[state=open]:animate-none\",\n\n /** Enter/exit for backdrop overlay (fade only).\n *\n * Uses explicit ENTER/EXIT easing tokens. Without\n * `ease-[...]`, browsers fall back to the CSS default `ease` curve,\n * silently inheriting a generic curve instead of the theme's ENTER\n * (decelerate) / EXIT (accelerate) personality. Backdrops fade only\n * so the perceptual difference is small, but consistency matters\n * for the \"every motion uses an explicit theme token\" rule. */\n backdropEnter: \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:duration-[var(--motion-duration-normal)] data-[state=open]:ease-[var(--motion-easing-enter)] motion-reduce:data-[state=open]:animate-none\",\n backdropExit: \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:duration-[var(--motion-duration-fast)] data-[state=closed]:ease-[var(--motion-easing-exit)] motion-reduce:data-[state=closed]:animate-none\",\n};\n\n// ============================================================\n// INTERACTIVE — Buttons, menu items, clickable surfaces\n// ============================================================\n\n// DENSE sizes — one step shorter than default (md h-8 / sm h-7 / lg h-9) with\n// trimmed inline padding, and one radius tier tighter (control `rounded-md`).\n// `pointer-coarse:` touch floors are preserved so dense stays tap-safe.\nconst interactiveSizes: Record<string, string> = {\n xs: \"h-6 px-2 text-xs gap-1 rounded-md has-[>svg]:px-1.5 pointer-coarse:min-h-9\",\n sm: \"h-7 px-2.5 gap-1.5 rounded-md has-[>svg]:px-2 pointer-coarse:min-h-11\",\n md: \"h-8 px-3 has-[>svg]:px-2.5 rounded-md pointer-coarse:min-h-11\",\n lg: \"h-9 px-4 rounded-md has-[>svg]:px-3 pointer-coarse:min-h-11\",\n icon: \"size-8 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-6 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n};\n\nconst interactiveDisabled: string = \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)] aria-disabled:cursor-not-allowed aria-disabled:opacity-[var(--opacity-disabled)]\";\nconst interactiveInvalid: string = \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\";\n\n// ============================================================\n// Focus-ring constants — single source of truth\n// for the keyboard-focus indicators used by INTERACTIVE, FORM_CONTROL,\n// SELECTABLE, and INDICATOR recipes. Shape mirrors the global\n// `.focus-ring-offset` / `.focus-ring-inset` Tailwind utilities exposed\n// in `index.css`; the recipes use raw classes (rather than the @apply\n// utility) because some variants pair the ring with a coloured border.\n// ============================================================\n/** Standard 2px offset ring + matching border-ring (most controls). */\nconst FOCUS_RING_OFFSET_WITH_BORDER: string =\n \"focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Standard 2px offset ring with NO border-ring change (filled / accent). */\nconst FOCUS_RING_OFFSET: string =\n \"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background\";\n/** Compact 2px ring used by indicator badges and selectable items. */\nconst FOCUS_RING_COMPACT: string =\n \"focus-visible:ring-2 focus-visible:ring-ring\";\n\nconst interactive: Record<InteractiveVariant, UIBehaviorRecipe> = {\n [InteractiveVariant.PRIMARY]: recipe({\n // T2 tactile: a hairline edge (`border-primary/50`) + `shadow-sm` give the\n // button real elevation, and the press (`active:translate-y-px active:shadow-none`)\n // reads as a physical push. `MOTION.interactive` already transitions transform,\n // so the press animates for free.\n base: \"bg-primary text-primary-foreground rounded-md border border-primary/50 shadow-sm font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-primary/90\",\n active: \"active:bg-primary/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.DESTRUCTIVE]: recipe({\n base: \"bg-destructive text-destructive-foreground rounded-md font-medium text-sm cursor-pointer dark:bg-destructive/60\",\n states: {\n hover: \"hover:bg-destructive/90\",\n active: \"active:bg-destructive/80 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n highlighted: \"focus:bg-destructive/10 dark:focus:bg-destructive/20 focus:text-destructive\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.OUTLINE]: recipe({\n // Edge: `border-strong`, for the reason written at the default theme's OUTLINE recipe (#1322).\n base: \"border border-border-strong bg-background shadow-xs rounded-md font-medium text-sm cursor-pointer dark:bg-input/30\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-input/50 dark:hover:text-foreground\",\n active: \"active:bg-accent/80 active:shadow-none active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n /*\n * SELECTED IS NOT HOVER. It used to be the same two classes as `hover`, so a segmented\n * control could not say which segment was chosen while the pointer was anywhere on it —\n * the chosen one and the one under the cursor were the same pixels.\n *\n * The two additions are both decisions this design system has already taken elsewhere.\n * WEIGHT carries the choice, per `SelectableVariant.FILLED`: \"the selected item is the\n * 'you are here' anchor — WEIGHT carries the emphasis instead of a primary tint\". And the\n * inset RING is `Card`'s reasoning for a selected card: \"the ring is what still reads when\n * the card's own fill is close to\" its surroundings, which is precisely a segment whose\n * fill is the hover fill.\n */\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:font-semibold data-[state=on]:ring-1 data-[state=on]:ring-inset data-[state=on]:ring-ring\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.SECONDARY]: recipe({\n base: \"bg-secondary text-secondary-foreground rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-secondary/80\",\n active: \"active:bg-secondary/70 active:translate-y-px\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.GHOST]: recipe({\n base: \"rounded-md font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n active: \"active:bg-accent/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n /*\n * SELECTED IS NOT HOVER. It used to be the same two classes as `hover`, so a segmented\n * control could not say which segment was chosen while the pointer was anywhere on it —\n * the chosen one and the one under the cursor were the same pixels.\n *\n * The two additions are both decisions this design system has already taken elsewhere.\n * WEIGHT carries the choice, per `SelectableVariant.FILLED`: \"the selected item is the\n * 'you are here' anchor — WEIGHT carries the emphasis instead of a primary tint\". And the\n * inset RING is `Card`'s reasoning for a selected card: \"the ring is what still reads when\n * the card's own fill is close to\" its surroundings, which is precisely a segment whose\n * fill is the hover fill.\n */\n selected: \"data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:font-semibold data-[state=on]:ring-1 data-[state=on]:ring-inset data-[state=on]:ring-ring\",\n highlighted: \"focus:bg-accent focus:text-accent-foreground\",\n open: \"data-[state=open]:bg-accent data-[state=open]:text-accent-foreground\",\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.LINK]: recipe({\n base: \"text-primary underline-offset-4 font-medium text-sm cursor-pointer\",\n states: {\n hover: \"hover:underline\",\n active: \"active:text-primary/80\",\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: {\n xs: \"h-7 px-2.5 text-xs gap-1 pointer-coarse:min-h-9\",\n sm: \"h-8 px-3 gap-1.5 pointer-coarse:min-h-11\",\n md: \"h-9 px-4 py-2 pointer-coarse:min-h-11\",\n lg: \"h-10 px-6 pointer-coarse:min-h-11\",\n icon: \"size-9 pointer-coarse:min-h-11 pointer-coarse:min-w-11\",\n \"icon-sm\": \"size-7 pointer-coarse:min-h-9 pointer-coarse:min-w-9\",\n },\n motion: { transition: MOTION.interactive },\n }),\n\n [InteractiveVariant.ACCENT]: recipe({\n // TT-1: Gradient stops resolved from theme tokens\n // (`--accent-gradient-{from,via,to}`) so tenants can rebrand the ACCENT\n // recipe without forking a theme. Defaults preserve the historical\n // violet/blue/pink visual.\n base: 'relative bg-primary text-primary-foreground font-semibold rounded-md shadow-xs before:absolute before:inset-0 before:rounded-[inherit] before:p-[1px] before:bg-[length:200%_200%] before:bg-gradient-to-r before:from-accent-gradient-from before:via-accent-gradient-via before:to-accent-gradient-to before:animate-[gradient-rotate_3s_ease_infinite] motion-reduce:before:animate-none before:-z-10 before:blur-[2px] shadow-[0_0_15px_color-mix(in_oklch,var(--primary)_20%,transparent)] text-sm cursor-pointer',\n states: {\n hover: 'hover:shadow-[0_0_25px_color-mix(in_oklch,var(--primary)_35%,transparent)]',\n active: 'active:scale-[0.98]',\n focus: FOCUS_RING_OFFSET,\n disabled: interactiveDisabled,\n invalid: interactiveInvalid,\n },\n sizes: interactiveSizes,\n motion: {\n transition: 'transition-[shadow,transform] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none',\n },\n }),\n};\n\n// ============================================================\n// SURFACE — Cards, dialogs, popovers, dropdowns\n// SURFACE PERSONALITY — clean SaaS material hierarchy: cards are bordered\n// elevated panels, tab panels are attached but quiet, shell is chromaless,\n// transient notifications reuse overlay chrome at a smaller scale.\n// ============================================================\n\nconst surface: ComponentStyleTheme['surface'] = {\n [SurfaceVariant.BASE]: recipe({\n // Card / panel — anchor of the surface scale at `rounded-lg`.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.CARD]: recipe({\n // Content card — the elevated `surface-raised` fill + border + soft shadow,\n // ALWAYS painted so an explicitly-authored CARD section reads as a card in\n // every context (including inside a dialog/page). Mirrors BASE, the anchor\n // card surface; the section preset adds container padding.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-lg border\",\n }),\n\n [SurfaceVariant.RAISED]: recipe({\n // Popover / dropdown — floats above the page, gets a slightly tighter\n // radius than BASE to feel \"cut from\" the larger card surface (one tier\n // smaller, never two; previously `rounded-md` was visibly inconsistent\n // when popovers stacked next to cards).\n // `fill-surface-overlay` mirrors the background so SVG children that paint\n // via `fill` — notably the Tooltip's Radix arrow — inherit the body colour\n // (CSS `fill` inherits across Radix's arrow wrapper span; `background` does\n // not). Keep `fill-*` in lockstep with `bg-*` here.\n base: \"bg-surface-overlay fill-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.OVERLAY]: recipe({\n // Dialog / sheet — the heaviest, most modal surface; matches BASE radius\n // so a dialog reads as a \"card the user can act inside\" rather than a\n // smaller-cornered floating panel. Required to restore monotonicity\n // (BASE ≤ OVERLAY) — `rounded-md` here was visually demoting dialogs.\n // Edge: `border-strong`, as the default theme's OVERLAY recipe (#1322).\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-lg border border-border-strong shadow-lg\",\n motion: {\n enter: MOTION.enterFadeZoom,\n exit: MOTION.exitFadeZoom,\n },\n }),\n\n [SurfaceVariant.INSET]: recipe({\n base: \"bg-surface-inset text-surface-inset-foreground\",\n }),\n\n [SurfaceVariant.SUNKEN]: recipe({\n base: \"bg-surface-sunken text-surface-sunken-foreground\",\n }),\n\n [SurfaceVariant.TAB_PANEL]: recipe({\n // Tab panel joins to the tab strip: same visual language as BASE, but no\n // border/shadow so the surface policy can own the join.\n base: \"bg-surface-raised text-surface-raised-foreground rounded-b-lg\",\n }),\n\n [SurfaceVariant.SHELL]: recipe({\n // App/page shell: chromaless raised background. Landmark semantics remain\n // opt-in via policy config.\n base: \"bg-surface-raised text-surface-raised-foreground\",\n }),\n\n [SurfaceVariant.TRANSIENT]: recipe({\n // Toast/snackbar: compact floating card, visually between RAISED and OVERLAY.\n base: \"bg-surface-overlay text-surface-overlay-foreground rounded-md border shadow-md\",\n motion: {\n enter: MOTION.enterDirectional,\n exit: MOTION.exitFadeZoom,\n },\n }),\n};\n\n// ============================================================\n// FORM_CONTROL — Inputs, textareas, select triggers\n// ============================================================\n\nconst formControl: Record<FormControlVariant, UIBehaviorRecipe> = {\n [FormControlVariant.DEFAULT]: recipe({\n // Edge: `border-strong` — an input's border is its only cue; see the default theme's FORM CONTROL recipe (#1322).\n base: \"border-border-strong dark:bg-surface-inset/30 rounded-md border bg-transparent shadow-xs text-base md:text-sm placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.FILLED]: recipe({\n // Fill PLUS a bottom indicator line at the strong edge — a fill alone marks nothing; see the default theme's FILLED recipe (#1322).\n base: \"bg-muted rounded-t-md rounded-b-none border-0 border-b border-border-strong text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: FOCUS_RING_OFFSET,\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-8 px-2.5 py-1 pointer-coarse:min-h-11\",\n sm: \"h-7 px-2 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-9 px-3 py-1.5 pointer-coarse:min-h-11\",\n },\n motion: { transition: MOTION.formControl },\n }),\n\n [FormControlVariant.UNDERLINED]: recipe({\n base: \"bg-transparent border-0 border-b border-border-strong rounded-none text-base md:text-sm placeholder:text-muted-foreground\",\n states: {\n focus: \"focus-visible:border-ring focus-visible:border-b-2\",\n disabled: \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:border-destructive\",\n },\n sizes: {\n md: \"h-9 px-0 py-1 pointer-coarse:min-h-11\",\n sm: \"h-8 px-0 py-1 text-sm pointer-coarse:min-h-11\",\n lg: \"h-10 px-0 py-2 pointer-coarse:min-h-11\",\n },\n motion: { transition: \"transition-[border-color] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.CHECKBOX]: recipe({\n base: \"border-border-strong dark:bg-input/30 border shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary dark:data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n\n [FormControlVariant.SWITCH]: recipe({\n base: \"data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80 border border-transparent shadow-xs\",\n states: {\n focus: FOCUS_RING_OFFSET_WITH_BORDER,\n selected: \"data-[state=checked]:bg-primary\",\n disabled: \"disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]\",\n invalid: \"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n },\n motion: { transition: \"transition-[background-color,border-color,box-shadow] duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-default)] motion-reduce:transition-none\" },\n }),\n};\n\n// ============================================================\n// INDICATOR — Badges, alerts, toast severity\n// ============================================================\n\nconst indicatorShared = {\n states: {\n hover: \"[a&]:hover:opacity-[var(--opacity-hover)]\",\n focus: `focus-visible:border-ring ${FOCUS_RING_COMPACT}`,\n invalid: interactiveInvalid,\n },\n // DENSE keeps the pulse subtle to match its compact chrome. Reduced-motion safe.\n motion: { transition: MOTION.interactive, attention: \"animate-pulse motion-reduce:animate-none\" },\n};\n\n// TONAL badges (T1 + T1b) — tinted background + AA-contrast text + hairline\n// border, in place of the previous solid full-saturation fills. Reads calmer\n// and modern (Linear/Stripe/shadcn) and lets many status chips coexist on one\n// row without the \"wall of solid colour\" effect.\n//\n// The tint (`bg-{status}-subtle`) and text (`text-{status}-subtle-foreground`)\n// come from dedicated SUBTLE STATUS TOKENS (T1b), not per-recipe `/10` mixes.\n// Those tokens are palette-adaptive `color-mix()` formulas emitted by the design\n// -token CSS generator (`design-tokens-css.shared.ts` → `buildSubtleStatusColors`),\n// tuned so 12px badge text clears WCAG-AA (≥4.5) against its tint in BOTH light\n// and dark — including the amber WARNING case that fails contrast with a naive\n// same-hue text. Because the tokens reference the base `--{status}` vars, a\n// palette retune (or a light/dark switch) retunes the chip automatically, and a\n// tenant can override any pair via `DesignSystemToken.*_SUBTLE(_FOREGROUND)`.\n// The border stays on the palette base (`border-{status}/25`, `/30` for warning\n// where the base is lighter) so it tracks the same hue.\n//\n// DENSE delta: badges keep the AA-safe subtle tokens (using the raw `text-{status}`\n// here would reintroduce the light-mode contrast failure T1b fixed) but tighten to\n// `px-1.5 py-0` for a compact chip. A further \"quiet tint + neutral text + colored\n// status dot\" pass needs a badge-component-level dot, so it is intentionally NOT a\n// recipe change — deferred as a component-layer refinement.\nconst indicator: Record<IndicatorVariant, UIBehaviorRecipe> = {\n [IndicatorVariant.NEUTRAL]: recipe({\n // Tonal like the other four — see default.theme.ts for the rationale. Fixes the\n // sub-AA washed-out grey chip that raw `text-muted-foreground` on `bg-muted`\n // produced for `default`/`secondary`/`outline` enum values.\n base: \"bg-neutral-subtle text-neutral-subtle-foreground border-border rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.INFO]: recipe({\n base: \"bg-info-subtle text-info-subtle-foreground border-info/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.SUCCESS]: recipe({\n base: \"bg-success-subtle text-success-subtle-foreground border-success/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.WARNING]: recipe({\n base: \"bg-warning-subtle text-warning-subtle-foreground border-warning/30 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n [IndicatorVariant.ERROR]: recipe({\n base: \"bg-destructive-subtle text-destructive-subtle-foreground border-destructive/25 rounded-md border px-1.5 py-0 text-xs font-medium\",\n ...indicatorShared,\n }),\n};\n\n// ============================================================\n// SELECTABLE — Tabs, sidebar active items, toggles\n// ============================================================\n\nconst selectable: Record<SelectableVariant, UIBehaviorRecipe> = {\n [SelectableVariant.FILLED]: recipe({\n base: \"rounded-md text-sm outline-hidden ring-surface-sunken-border\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: \"focus-visible:ring-2\",\n active: \"active:bg-surface-sunken-accent active:text-surface-sunken-foreground\",\n selected: \"data-[active=true]:bg-surface-sunken-accent data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground data-[state=active]:bg-surface-sunken-accent data-[state=active]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)] aria-disabled:pointer-events-none aria-disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.UNDERLINE]: recipe({\n base: \"rounded-none border-b-2 border-transparent text-sm outline-hidden\",\n states: {\n hover: \"hover:text-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:border-primary data-[state=active]:text-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs pb-1\",\n md: \"h-8 text-sm pb-2\",\n lg: \"h-10 text-sm pb-3\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.PILL]: recipe({\n base: \"rounded-full text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-accent hover:text-accent-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[state=active]:bg-primary data-[state=active]:text-primary-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 px-3 text-xs\",\n md: \"h-8 px-4 text-sm\",\n lg: \"h-10 px-5 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n\n [SelectableVariant.INDICATOR]: recipe({\n base: \"rounded-md text-sm outline-hidden\",\n states: {\n hover: \"hover:bg-surface-sunken-accent hover:text-surface-sunken-foreground\",\n focus: FOCUS_RING_COMPACT,\n selected: \"data-[active=true]:border-s-2 data-[active=true]:border-surface-sunken-primary data-[active=true]:font-medium data-[active=true]:text-surface-sunken-foreground\",\n disabled: \"disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]\",\n },\n sizes: {\n sm: \"h-7 text-xs\",\n md: \"h-8 text-sm\",\n lg: \"h-12 text-sm\",\n },\n motion: { transition: MOTION.selectable },\n }),\n};\n\n// ============================================================\n// OVERLAY_BACKDROP — Dialog/Sheet background overlay\n// ============================================================\n\nconst overlayBackdrop: UIBehaviorRecipe = recipe({\n // Tailwind v4's `bg-color/[var()]` opacity modifier uses color-mix() which\n // doesn't resolve CSS custom property decimals correctly.\n // Use arbitrary bg value with rgb() alpha channel instead.\n base: \"bg-[rgb(0_0_0_/_var(--opacity-overlay))] backdrop-blur-sm\",\n motion: {\n enter: MOTION.backdropEnter,\n exit: MOTION.backdropExit,\n },\n});\n\n// ============================================================\n// DIVIDER — Separator\n// ============================================================\n\nconst divider: Record<DividerVariant, UIBehaviorRecipe> = {\n [DividerVariant.DEFAULT]: recipe({ base: 'bg-border shrink-0' }),\n // Nested-disclosure guide: the theme's own divider material, as a left edge.\n [DividerVariant.NESTING_GUIDE]: recipe({ base: 'border-s border-border' }),\n};\n\n// ============================================================\n// SKELETON — Loading placeholders\n// ============================================================\n\nconst skeleton: UIBehaviorRecipe = recipe({\n base: `${SKELETON_NEUTRAL_TINT} animate-pulse rounded-md motion-reduce:animate-none`,\n});\n\nconst loadingSpinner: UIBehaviorRecipe = recipe({\n base: \"text-muted-foreground animate-spin motion-reduce:animate-none\",\n});\n\nconst loadingOverlay: UIBehaviorRecipe = recipe({\n base: \"bg-background/80\",\n motion: {\n enter: \"animate-in fade-in-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-enter)] motion-reduce:animate-none\",\n exit: \"animate-out fade-out-0 duration-[var(--motion-duration-fast)] ease-[var(--motion-easing-exit)] motion-reduce:animate-none\",\n },\n});\n\n// ============================================================\n// TYPOGRAPHY — Text hierarchy\n// ============================================================\n\nconst typography: Record<TypographyVariant, UIBehaviorRecipe> = {\n [TypographyVariant.HEADING]: recipe({\n base: \"font-semibold leading-none tracking-tight\",\n // Heading scale rebalance — gaps were 12/4/2px (h1→h2→h3→h4); h1 at\n // text-4xl (36px) jumped 1.5× to h2 (text-2xl, 24px), which felt\n // disproportionate for in-app SaaS UI (text-4xl is a hero size).\n // Compressing h1 to text-3xl yields a smooth 6/4/2px ladder\n // (1.25× → 1.2× → 1.11×, classic Major Third base). Pages that want a\n // hero h1 can opt in with `className=\"text-4xl sm:text-5xl\"` since the\n // size class is the LAST `text-*` to win in `cn()`.\n sizes: {\n h1: \"text-3xl\",\n h2: \"text-2xl\",\n h3: \"text-xl\",\n h4: \"text-lg\",\n h5: \"text-base\",\n md: \"text-lg\",\n },\n }),\n [TypographyVariant.BODY]: recipe({\n base: \"text-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.LABEL]: recipe({\n base: \"font-medium text-sm leading-none\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n [TypographyVariant.DESCRIPTION]: recipe({\n base: \"text-muted-foreground text-sm\",\n sizes: { sm: \"text-xs\", md: \"text-sm\" },\n }),\n [TypographyVariant.EYEBROW]: recipe({\n base: \"text-foreground-subtle text-2xs font-medium uppercase tracking-wide\",\n sizes: { sm: \"text-2xs\", md: \"text-xs\" },\n }),\n [TypographyVariant.CODE]: recipe({\n base: \"font-mono text-sm bg-muted rounded px-1 py-0.5\",\n sizes: { sm: \"text-xs\", md: \"text-sm\", lg: \"text-base\" },\n }),\n};\n\n// ============================================================\n// DENSE THEME — assembled (opt-in, Linear-grade)\n//\n// Derived from the default theme and compacted: shorter control/input sizes\n// (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control `rounded-md`,\n// card `rounded-lg`), flat + hairline surfaces (no `shadow-sm` on cards).\n// Opt in per app: `theme: denseTheme` in `design-system.config.ts`.\n// Spacing uses the compact token set (`UI_SPACING_COMPACT`) so rows/gaps also\n// tighten, not just control heights.\n// ============================================================\n\n/**\n * The compact spacing, as the STRINGS a theme carries.\n *\n * `UI_SPACING_COMPACT` is a map of design-TOKEN configurations (`{ modeStrategy, type, value }`), which\n * is what a `DesignSystemConfiguration` takes. A theme's `spacing` is a map of CSS lengths: `UIContext`\n * writes each entry to `--sp-*` verbatim, and `ComponentStyleThemeSchema` refuses anything but strings.\n * Handed the token set directly — as this theme was until #1322 — every application that selected\n * Dense was REJECTED at config parse with \"Invalid component style theme\", and had it not been, its\n * spacing vars would have read `[object Object]`. The values are read off the token set rather than\n * restated, so the compact scale keeps one source.\n */\nconst spacing: ComponentStyleTheme['spacing'] = Object.fromEntries(\n /* A spacing length has no light/dark pair; the LIGHT value is read for a token authored with one. */\n Object.entries(UI_SPACING_COMPACT).map(([semantic, token]) => [semantic, 'value' in token ? token.value : token.lightValue]),\n) as ComponentStyleTheme['spacing'];\n\nexport const denseTheme: ComponentStyleTheme = {\n id: 'dense',\n name: 'Dense',\n description: 'Compact, Linear-grade opt-in variant of the default theme. Shorter controls/inputs (md h-8 · sm h-7 · lg h-9), one radius tier tighter (control rounded-md · card rounded-lg), flat + hairline surfaces (no card shadow). Same tonal badges, focus rings, and motion as default.',\n\n spacing,\n\n interactive,\n surface,\n formControl,\n indicator,\n selectable,\n overlayBackdrop,\n divider,\n skeleton,\n loadingSpinner,\n loadingOverlay,\n typography,\n radius: undefined,\n backgroundLayer: undefined,\n chartStyle: DEFAULT_CHART_STYLE_PRESET,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorial.theme.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"editorial.theme.d.ts","sourceRoot":"","sources":["../../../../src/themes/editorial.theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAA4B,MAAM,qCAAqC,CAAC;AAyrBzG,eAAO,MAAM,cAAc,EAAE,mBAgE5B,CAAC"}
|
|
@@ -34,9 +34,18 @@ const ED = {
|
|
|
34
34
|
hairline: 'border border-foreground/10',
|
|
35
35
|
/** Slightly stronger hairline for surfaces that need a definitive edge. */
|
|
36
36
|
edge: 'border border-foreground/15',
|
|
37
|
+
/*
|
|
38
|
+
* A TEXT INPUT's edge, as distinct from `edge`. An input's border is its only cue that it is an
|
|
39
|
+
* input, so it owes 3:1 against the page (WCAG 2.1 SC 1.4.11); `edge` is this theme's foreground
|
|
40
|
+
* at a low alpha, which cannot reach that at any strength this theme uses (foreground/30 is 1.95:1
|
|
41
|
+
* in light). `border-strong` is palette-derived and pinned at 3:1 on the token, so it follows this
|
|
42
|
+
* theme's own colours. Hairlines and card edges keep `edge`: a line between two regions is
|
|
43
|
+
* decoration and owes nothing (#1443, after #1322).
|
|
44
|
+
*/
|
|
45
|
+
inputEdge: 'border border-border-strong',
|
|
37
46
|
radius: 'rounded-sm',
|
|
38
47
|
focus: 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60 focus-visible:ring-offset-2 focus-visible:ring-offset-background',
|
|
39
|
-
disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)]',
|
|
48
|
+
disabled: 'disabled:pointer-events-none disabled:opacity-[var(--opacity-disabled)] aria-disabled:cursor-not-allowed aria-disabled:opacity-[var(--opacity-disabled)]',
|
|
40
49
|
invalid: 'aria-invalid:ring-destructive/30 dark:aria-invalid:ring-destructive/50 aria-invalid:border-destructive',
|
|
41
50
|
};
|
|
42
51
|
// ============================================================
|
|
@@ -267,7 +276,7 @@ const surface = {
|
|
|
267
276
|
// ============================================================
|
|
268
277
|
const formControl = {
|
|
269
278
|
[FormControlVariant.DEFAULT]: recipe({
|
|
270
|
-
base: `bg-background ${ED.
|
|
279
|
+
base: `bg-background ${ED.inputEdge} ${ED.radius} text-base md:text-sm text-foreground placeholder:text-muted-foreground selection:bg-primary/20 selection:text-foreground`,
|
|
271
280
|
states: {
|
|
272
281
|
focus: ED.focus,
|
|
273
282
|
disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',
|
|
@@ -281,7 +290,8 @@ const formControl = {
|
|
|
281
290
|
motion: { transition: ED_MOTION.formControl },
|
|
282
291
|
}),
|
|
283
292
|
[FormControlVariant.FILLED]: recipe({
|
|
284
|
-
|
|
293
|
+
// Fill PLUS a bottom indicator line: a fill alone (about 1.3:1) marks nothing as an input, and `invalid` sets a border colour a borderless field cannot show.
|
|
294
|
+
base: `bg-muted/50 rounded-t-sm rounded-b-none border-0 border-b border-border-strong text-base md:text-sm text-foreground placeholder:text-muted-foreground`,
|
|
285
295
|
states: {
|
|
286
296
|
focus: ED.focus,
|
|
287
297
|
disabled: 'disabled:cursor-not-allowed disabled:opacity-[var(--opacity-disabled)]',
|
|
@@ -297,7 +307,7 @@ const formControl = {
|
|
|
297
307
|
[FormControlVariant.UNDERLINED]: recipe({
|
|
298
308
|
// The most editorial-looking form variant: a single hairline rule
|
|
299
309
|
// under the field — like filling in a paper form.
|
|
300
|
-
base: 'bg-transparent border-0 border-b border-
|
|
310
|
+
base: 'bg-transparent border-0 border-b border-border-strong rounded-none text-base md:text-sm text-foreground placeholder:text-muted-foreground',
|
|
301
311
|
states: {
|
|
302
312
|
focus: 'focus-visible:outline-none focus-visible:border-primary focus-visible:border-b-2',
|
|
303
313
|
disabled: 'disabled:opacity-[var(--opacity-disabled)]',
|
|
@@ -313,7 +323,7 @@ const formControl = {
|
|
|
313
323
|
},
|
|
314
324
|
}),
|
|
315
325
|
[FormControlVariant.CHECKBOX]: recipe({
|
|
316
|
-
base: `${ED.
|
|
326
|
+
base: `${ED.inputEdge} ${ED.radius}`,
|
|
317
327
|
states: {
|
|
318
328
|
focus: ED.focus,
|
|
319
329
|
selected: 'data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary',
|
|
@@ -494,6 +504,10 @@ const typography = {
|
|
|
494
504
|
base: 'font-sans text-muted-foreground text-base leading-relaxed italic',
|
|
495
505
|
sizes: { sm: 'text-sm', md: 'text-base' },
|
|
496
506
|
}),
|
|
507
|
+
[TypographyVariant.EYEBROW]: recipe({
|
|
508
|
+
base: 'font-sans text-foreground-subtle text-xs font-medium uppercase tracking-[0.18em]',
|
|
509
|
+
sizes: { sm: 'text-2xs', md: 'text-xs' },
|
|
510
|
+
}),
|
|
497
511
|
[TypographyVariant.CODE]: recipe({
|
|
498
512
|
base: 'font-mono text-[0.9em] bg-muted/60 rounded-sm px-1.5 py-0.5 border border-foreground/10',
|
|
499
513
|
sizes: { sm: 'text-xs', md: 'text-sm', lg: 'text-base' },
|