@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-layout-consent-gate.js","sourceRoot":"","sources":["../../../../../src/components/app/app-layout-consent-gate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useId, useState } from 'react';\nimport { z } from 'zod';\n\nimport {\n Alert,\n AlertDescription,\n Button,\n ButtonVariants_Variant,\n Checkbox,\n ConsentGateStatus,\n Link,\n Surface,\n cn,\n useApplication,\n useI18n,\n useUI,\n type AppLayoutPreset_ConsentGate_DefaultProps,\n} from '@wildo-ai/saas-frontend-lib';\nimport {\n ConsentPurpose,\n CoreResourceType,\n PUBLIC_GOVERNED_DOCUMENT_REFS,\n PUBLIC_GOVERNED_DOCUMENT_ROUTE_PATHS,\n UserPrivacySchema,\n requiresApprovedGovernedDocuments,\n resolveInForcePublicDocument,\n} from '@wildo-ai/saas-models';\nimport { getZodObjectShape } from '@wildo-ai/zod-decorators';\nimport {\n AppLayoutsConsentGateLabel,\n FrontendComponentType,\n SurfaceVariant,\n TypographyVariant,\n UIBehavior,\n} from '@wildo-ai/presets-components-models';\n\nconst CT = FrontendComponentType.APP_LAYOUTS_CONSENT_GATE;\n\n/**\n * The self-preferences field that stores granted purposes. Its schema is handed to the enum-word lookup\n * because a value is worded only through the enum its FIELD declares (#966). That field declares\n * `.systemEnum('ConsentPurpose')`, so the lookup reads `system_enums.ConsentPurpose.<value>` — the bundle\n * this gate loads (`keys: ['system_enums']`) and the same words the preferences page shows for the field.\n */\nconst CONSENTED_PURPOSES_FIELD_SCHEMA = getZodObjectShape(UserPrivacySchema).consentedPurposes;\n\n/** A purpose's tick box: a statement a person either makes or does not. */\nconst PURPOSE_CHOICE_SCHEMA = z.boolean();\n\n/**\n * What each purpose MEANS for the person, beside its name.\n *\n * The name answers *what is it called* and comes from the `ConsentPurpose` vocabulary; this answers\n * *what will happen to me*, and without it the choice is not an informed one — \"Analytics\" beside a\n * tick box tells a reader nothing they can decide on. Every specialized consent platform pairs the\n * two for exactly this reason, and this panel showed only the first half.\n *\n * TOTAL over the vocabulary by its type: a purpose added to `ConsentPurpose` is a compile error here\n * rather than a row that silently renders a name and no explanation.\n */\nconst PURPOSE_DESCRIPTION_LABELS: Readonly<Record<ConsentPurpose, AppLayoutsConsentGateLabel>> = Object.freeze({\n [ConsentPurpose.ANALYTICS]: AppLayoutsConsentGateLabel.PURPOSE_DESCRIPTION_ANALYTICS,\n [ConsentPurpose.MARKETING]: AppLayoutsConsentGateLabel.PURPOSE_DESCRIPTION_MARKETING,\n});\n\n/**\n * Default rendering of the application-tier consent gate (#534 / #453).\n *\n * The wrapper has already decided WHETHER and HOW the gate shows (`AppLayout_ConsentGate`); this preset\n * only draws the two surfaces.\n *\n * - **Required** — a full panel in place of the whole application shell, which the wrapper withholds. It names each purpose the operator requires, in\n * the vocabulary's own words, quotes the operator's description of what it gates, and offers exactly\n * two ways forward: agree, or sign out. Any optional purpose is asked in the same panel, unticked. Nothing here can let the person past without agreeing; the\n * wrapper does not render the application while this is shown.\n * - **Prompt** — a fixed panel over the application, one box per optional purpose, NONE ticked by default.\n * A pre-ticked box is not a choice. \"Decline all\" is a first-class action and is recorded as a\n * decision, so the prompt does not return; closing without deciding is deliberately not offered,\n * because it would leave the question open forever and still read as an answer.\n *\n * Purpose names are the words of the `ConsentPurpose` vocabulary (`system_enums.ConsentPurpose.<value>`),\n * reached through the field that stores them (`privacy.consentedPurposes`, which declares that vocabulary),\n * so the gate and the preferences page cannot word a purpose differently.\n */\nexport function AppLayoutPreset_ConsentGate_Default({ gate }: AppLayoutPreset_ConsentGate_DefaultProps): React.JSX.Element | null {\n const { tComponent, tResourceFieldEnumValue, isReady } = useI18n({ component: CT, keys: ['system_enums'] });\n const { appConfig } = useApplication();\n const { getRecipe } = useUI();\n const heading = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const description = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n const headingId = useId();\n const [selected, setSelected] = useState<ConsentPurpose[]>(() => gate.grantedPurposes.filter((purpose) => gate.optionalPurposes.includes(purpose)));\n\n if (!isReady) return null;\n\n const label = (key: AppLayoutsConsentGateLabel): string => tComponent(CT, key);\n const purposeName = (purpose: ConsentPurpose): string =>\n tResourceFieldEnumValue(CoreResourceType.USER_SELF_PREFERENCES, 'privacy.consentedPurposes', purpose, CONSENTED_PURPOSES_FIELD_SCHEMA);\n const saveFailed = gate.saveFailed && (\n <Alert variant=\"destructive\">\n <AlertDescription>{label(AppLayoutsConsentGateLabel.SAVE_FAILED)}</AlertDescription>\n </Alert>\n );\n\n const offeredOptional = gate.optionalPurposes;\n const toggle = (purpose: ConsentPurpose, checked: boolean): void => {\n setSelected((current) => (checked ? [...current.filter((entry) => entry !== purpose), purpose] : current.filter((entry) => entry !== purpose)));\n };\n /*\n * One row per purpose: its NAME, what agreeing to it MEANS for this person, and the control —\n * the shape every specialized consent platform converged on, and the half that was missing. A tick\n * box labelled \"Analytics\" is a choice nobody can make informedly, and an informed choice is the\n * whole of what makes consent valid.\n *\n * The ALWAYS-ACTIVE row comes first and carries no control. It is not a `ConsentPurpose` and must\n * never become one — the vocabulary is what a person DECIDES — but a panel that lists only the\n * optional purposes leaves a reader unable to see the whole picture, which is exactly what they\n * opened it for.\n *\n * ## Every row has the SAME shape, including the one that cannot be changed\n *\n * A two-column grid: the control, then the name on its line, then the explanation beneath the name.\n * The always-active row carries a real checkbox — CHECKED and DISABLED — rather than a text status\n * beside the name.\n *\n * That reverses an earlier reading of this panel, and the reversal is the point. The argument for a\n * status was that a disabled control invites a click that cannot work; the argument against it is\n * stronger and is what every specialized consent platform does: a person scanning the list reads\n * DOWN the column of controls, and a row whose control is missing does not read as \"cannot be\n * changed\", it reads as a row that was forgotten. A checked, disabled box says the same thing in\n * the vocabulary the rest of the list is already using, and assistive technology announces\n * \"checked, unavailable\" without needing any extra words.\n */\n const purposeRow = (key: string, name: string, explanation: string, control: React.ReactNode, interactive: boolean): React.JSX.Element => {\n // A wrapping <label> names the box for assistive technology and makes the words clickable, without\n // the control having to accept an id. `col-start-2` puts the explanation under the NAME rather\n // than under the control, which is what keeps the two-line row scannable.\n const Row = interactive ? 'label' : 'div';\n return (\n <Row key={key} className={cn('grid grid-cols-[auto_1fr] items-center gap-x-element-sm px-element py-element-sm', interactive && 'cursor-pointer')}>\n {control}\n <span className=\"font-medium\">{name}</span>\n <span className={cn(description.base, 'col-start-2 text-xs')}>{explanation}</span>\n </Row>\n );\n };\n\n const purposeRows = offeredOptional.length > 0 && (\n <div className=\"flex flex-col divide-y divide-border overflow-hidden rounded-md border border-border\">\n {purposeRow(\n 'essential',\n label(AppLayoutsConsentGateLabel.ESSENTIAL_TITLE),\n label(AppLayoutsConsentGateLabel.ESSENTIAL_DESCRIPTION),\n <Checkbox name=\"consent-purpose-essential\" schema={PURPOSE_CHOICE_SCHEMA} checked disabled />,\n false,\n )}\n {offeredOptional.map((purpose) => purposeRow(\n purpose,\n purposeName(purpose),\n label(PURPOSE_DESCRIPTION_LABELS[purpose]),\n <Checkbox\n name={`consent-purpose-${purpose}`}\n schema={PURPOSE_CHOICE_SCHEMA}\n checked={selected.includes(purpose)}\n disabled={gate.isSaving}\n onCheckedChange={(checked) => toggle(purpose, checked)}\n />,\n true,\n ))}\n </div>\n );\n\n /*\n * The application's own privacy notice, when it serves one — resolved through the same function the\n * public page uses, so the panel never offers a link to a document that is not in force. A consent\n * surface is required to say where the full explanation is; a link to a page that answers\n * \"unavailable\" is worse than no link, which is why this is conditional rather than always drawn.\n */\n const privacyNoticeIsServed = resolveInForcePublicDocument(\n appConfig.compliance?.publicDocuments ?? [],\n PUBLIC_GOVERNED_DOCUMENT_REFS.PRIVACY_NOTICE,\n new Date().toISOString(),\n // The page's own gate (#1565), so the link is drawn exactly when the page would show the notice.\n { requireApproved: requiresApprovedGovernedDocuments(appConfig.compliance) },\n ) !== undefined;\n const privacyNoticeLink = privacyNoticeIsServed && (\n <Link\n href={PUBLIC_GOVERNED_DOCUMENT_ROUTE_PATHS[PUBLIC_GOVERNED_DOCUMENT_REFS.PRIVACY_NOTICE]}\n external\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-sm\"\n >\n {label(AppLayoutsConsentGateLabel.PRIVACY_NOTICE_LINK)}\n </Link>\n );\n\n if (gate.status === ConsentGateStatus.REQUIRED) {\n // Optional purposes are asked HERE too, in the same decision. Agreeing to the required purposes\n // records a decision instant, so a separate prompt afterwards would never appear — and a person\n // would have been asked about the purposes the operator needs but never about the ones it merely uses.\n const required = gate.missingRequiredPurposes;\n // The panel stands in for the WHOLE shell, so no zone's scroll container is around it and the page itself\n // does not scroll (`html, body { overflow: hidden }`). Its own scroll box is what keeps agree and sign-out —\n // the only ways forward — reachable on a short viewport or under a long operator description.\n return (\n <div className=\"h-dvh overflow-y-auto\">\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n {/*\n * `data-slot` names the panel for the same reason every other preset carries one: it is how\n * this design system addresses a composed part from outside itself. Here that outside is\n * the accessibility audit (#1385), which must be able to WAIT for the panel before reading\n * it — and the alternatives are worse. A heading's text is whatever the locale says, and a\n * bare `section[aria-labelledby]` matches any landmark the shell happens to render.\n */}\n <section data-slot=\"consent-gate-required\" aria-labelledby={headingId} aria-busy={gate.isSaving} className=\"mx-auto my-section flex max-w-prose flex-col gap-card p-card\">\n <h1 id={headingId} className={cn(heading.base, heading.sizes?.lg)}>{label(AppLayoutsConsentGateLabel.REQUIRED_TITLE)}</h1>\n <p className={description.base}>{label(AppLayoutsConsentGateLabel.REQUIRED_DESCRIPTION)}</p>\n {/*\n * Each required purpose with its EXPLANATION, exactly as the optional rows carry theirs.\n *\n * This list held bare names while the optional purposes below gained a sentence each —\n * which is the wrong way round, and was an invariant applied at one of its two sites. A\n * required purpose is the one a person cannot use the application without granting, so it\n * is the decision with the highest stakes and the one most in need of saying what it means.\n * Consent that is not informed is not consent, and that does not become less true because\n * the operator has made the purpose a condition.\n */}\n <ul className=\"flex list-disc flex-col gap-element pl-6\">\n {gate.missingRequiredPurposes.map((purpose) => (\n <li key={purpose} className=\"flex flex-col gap-element-sm\">\n <span className=\"font-medium\">{purposeName(purpose)}</span>\n <span className={cn(description.base, 'text-xs')}>{label(PURPOSE_DESCRIPTION_LABELS[purpose])}</span>\n </li>\n ))}\n </ul>\n {gate.gatedProcessing && (\n <div className=\"flex flex-col gap-element-sm\">\n <p className={cn(description.base, 'font-medium')}>{label(AppLayoutsConsentGateLabel.GATED_PROCESSING)}</p>\n {/* The operator's own words, from its declaration — authored content, not a label. */}\n <p>{gate.gatedProcessing}</p>\n </div>\n )}\n {purposeRows && (\n <div className=\"flex flex-col gap-element-sm\">\n <p className={description.base}>{label(AppLayoutsConsentGateLabel.PROMPT_DESCRIPTION)}</p>\n {purposeRows}\n </div>\n )}\n {privacyNoticeLink}\n {saveFailed}\n <div className=\"flex flex-wrap justify-end gap-element\">\n <Button variant={ButtonVariants_Variant.OUTLINE} disabled={gate.isSaving} onClick={gate.signOut}>\n {label(AppLayoutsConsentGateLabel.SIGN_OUT)}\n </Button>\n {/*\n * `> 0` here, where the PROMPT panel uses `> 1`, and the two thresholds are right for\n * different reasons rather than one of them being unswept.\n *\n * In PROMPT, SAVE is a THIRD button standing beside allow-none and allow-all; with a\n * single optional purpose it can only repeat one of them, which is what made a reader\n * ask what it was for. HERE it is the ONLY way forward — required purposes cannot be\n * declined, so there is no allow-none, and no second button to compare it against. With\n * one optional purpose the button still commits a CHOICE (the required set, plus that\n * purpose only if it is ticked), so \"save choice\" is what it does and \"allow all\" would\n * be false whenever the box is left unticked.\n */}\n {/*\n * OUTLINE, like its sign-out sibling — the PROMPT panel's equal-weight rule reaches here\n * too, and this panel was an unexamined exception to a rule stated absolutely.\n *\n * The pair is different (agree / sign out rather than accept / reject) and the stakes are\n * higher, not lower: this panel also collects the OPTIONAL purposes, so a filled primary\n * beside a quiet alternative is a nudge applied to a consent decision, which is the thing\n * CNIL fined over. What the person came here to do is read two options and choose; making\n * one of them shout is not neutral, and a panel that has already withheld the whole\n * application does not additionally need emphasis to be noticed.\n */}\n <Button\n variant={ButtonVariants_Variant.OUTLINE}\n disabled={gate.isSaving}\n onClick={() => void gate.decide([...required, ...offeredOptional], [...required, ...selected])}\n >\n {label(offeredOptional.length > 0 ? AppLayoutsConsentGateLabel.SAVE_CHOICE : AppLayoutsConsentGateLabel.GRANT_ALL)}\n </Button>\n </div>\n </section>\n </Surface>\n </div>\n );\n }\n\n if (gate.status !== ConsentGateStatus.PROMPT) return null;\n\n const offered = offeredOptional;\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <section\n data-slot=\"consent-gate-prompt\"\n aria-labelledby={headingId}\n aria-busy={gate.isSaving}\n /*\n * Bottom-RIGHT corner from `sm` up, full width below it. `inset-x-0` keeps the phone case a\n * bar — a corner card on a 360px viewport is just a cramped bar with worse margins — and the\n * `sm:` overrides release the left edge so it hugs the right on anything larger.\n */\n className=\"fixed inset-x-0 bottom-0 z-50 flex max-h-[85dvh] max-w-lg flex-col gap-element-sm p-element shadow-lg sm:bottom-4 sm:left-auto sm:right-4 sm:rounded-lg\"\n >\n <h2 id={headingId} className={cn(heading.base, heading.sizes?.md)}>{label(AppLayoutsConsentGateLabel.PROMPT_TITLE)}</h2>\n <p className={description.base}>{label(AppLayoutsConsentGateLabel.PROMPT_DESCRIPTION)}</p>\n {/*\n * The purpose rows scroll, the panel does not: `max-h-[85dvh]` on the panel with the rows in\n * a `min-h-0` scroll box keeps the ACTIONS on screen however many purposes there are and\n * however long their explanations. A panel that grows with its content pushes accept and\n * reject off the bottom of a short viewport — a consent surface whose refusal cannot be\n * reached is a refusal that was not offered, whatever the markup says.\n */}\n <div className=\"min-h-0 flex-1 overflow-y-auto\">{purposeRows}</div>\n {saveFailed}\n {/*\n * The notice link shares the ACTIONS' line rather than taking one of its own: it is where the\n * full answer is, not a fourth thing to do, and a row of its own gave it the weight of one.\n * `justify-between` puts it at the leading edge with the actions at the trailing edge, and\n * `flex-wrap` lets it drop above them on a narrow panel rather than squeezing the buttons.\n */}\n <div className=\"flex flex-wrap items-center justify-between gap-element\">\n <span>{privacyNoticeLink}</span>\n <div className=\"flex flex-wrap justify-end gap-element\">\n {/*\n * DECLINE and GRANT carry the SAME variant, and NEITHER is the filled one.\n *\n * Equality is the constraint: refusing was an OUTLINE button beside a filled GRANT, which\n * is the asymmetry regulators treat as a dark pattern — CNIL fined Google and Meta over\n * banners where rejecting was visually subordinate to accepting, on the ground that consent\n * obtained that way is not freely given. So the pair moves together or not at all; making\n * only one of them quiet is the thing that may never happen here.\n *\n * Which variant the PAIR takes is then free, and OUTLINE is the better answer: two filled\n * buttons shouting side by side read as an alert rather than a question, and a consent\n * panel deliberately has no recommended action — the absence of a primary is the honest\n * rendering of \"we are not nudging you either way\".\n */}\n <Button variant={ButtonVariants_Variant.OUTLINE} disabled={gate.isSaving} onClick={() => void gate.decide(offered, [])}>\n {label(AppLayoutsConsentGateLabel.DECLINE_ALL)}\n </Button>\n {/*\n * SAVE appears only when a MIXED choice exists to save — two or more optional purposes.\n *\n * With one purpose the button is unanswerable: \"allow none\" and \"allow all\" already cover\n * the whole space, so a third action beside them describes nothing a person can picture,\n * and they read it as a question rather than an answer. With two or more it is the only\n * control that can express \"this one and not that one\", which is precisely what the boxes\n * above are for.\n *\n * Derived from the offered set rather than declared, so an application that adds a second\n * purpose gets the control with no edit here, and one that removes it loses the control\n * rather than keeping a button that can only repeat its neighbours.\n */}\n {offered.length > 1 && (\n <Button variant={ButtonVariants_Variant.OUTLINE} disabled={gate.isSaving} onClick={() => void gate.decide(offered, selected)}>\n {label(AppLayoutsConsentGateLabel.SAVE_CHOICE)}\n </Button>\n )}\n <Button variant={ButtonVariants_Variant.OUTLINE} disabled={gate.isSaving} onClick={() => void gate.decide(offered, offered)}>\n {label(AppLayoutsConsentGateLabel.GRANT_ALL)}\n </Button>\n </div>\n </div>\n </section>\n </Surface>\n );\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type AppLayoutPreset_DocumentAcceptanceGate_DefaultProps } from '@wildo-ai/saas-frontend-lib';
|
|
3
|
+
/**
|
|
4
|
+
* Default rendering of the application-tier document acceptance gate (#1258, Step 2).
|
|
5
|
+
*
|
|
6
|
+
* The wrapper has already decided that an acceptance is owed and withholds the whole shell; this preset
|
|
7
|
+
* draws the panel that stands in for it. It offers exactly two ways forward — accept, or sign out — and
|
|
8
|
+
* asks through the SAME acceptance control registration uses, so the three modes, the reading gate and
|
|
9
|
+
* the document links behave identically on both surfaces.
|
|
10
|
+
*
|
|
11
|
+
* Both actions are OUTLINE, for the reason the consent panels give: a filled primary beside a quiet
|
|
12
|
+
* alternative is a nudge applied to an agreement, and a panel that has already withheld the application
|
|
13
|
+
* needs no emphasis to be noticed.
|
|
14
|
+
*
|
|
15
|
+
* `data-slot="document-acceptance-gate"` names it for the accessibility audit, which must wait for it
|
|
16
|
+
* by selector — it cannot be reached by navigating.
|
|
17
|
+
*/
|
|
18
|
+
export declare function AppLayoutPreset_DocumentAcceptanceGate_Default({ gate }: AppLayoutPreset_DocumentAcceptanceGate_DefaultProps): React.JSX.Element | null;
|
|
19
|
+
//# sourceMappingURL=app-layout-document-acceptance-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-layout-document-acceptance-gate.d.ts","sourceRoot":"","sources":["../../../../../src/components/app/app-layout-document-acceptance-gate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyB,MAAM,OAAO,CAAC;AAC9C,OAAO,EAUL,KAAK,mDAAmD,EACzD,MAAM,6BAA6B,CAAC;AAiCrC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8CAA8C,CAAC,EAAE,IAAI,EAAE,EAAE,mDAAmD,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA8CtJ"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useMemo } from 'react';
|
|
3
|
+
import { Alert, AlertDescription, Button, ButtonVariants_Variant, GovernedDocumentAcceptanceControl, Surface, cn, useI18n, useUI, } from '@wildo-ai/saas-frontend-lib';
|
|
4
|
+
import { GovernedDocumentAcceptanceOwedReason } from '@wildo-ai/saas-models';
|
|
5
|
+
import { AppLayoutsDocumentAcceptanceGateLabel, FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior, } from '@wildo-ai/presets-components-models';
|
|
6
|
+
const CT = FrontendComponentType.APP_LAYOUTS_DOCUMENT_ACCEPTANCE_GATE;
|
|
7
|
+
/** The acceptance control's own words live in this namespace (see `GovernedDocumentAcceptanceControl`). */
|
|
8
|
+
const ACCEPTANCE_WORDS = FrontendComponentType.PUBLIC_LAYOUTS_USER_REGISTER;
|
|
9
|
+
/**
|
|
10
|
+
* The heading and description for each reason a person is asked.
|
|
11
|
+
*
|
|
12
|
+
* TOTAL over `GovernedDocumentAcceptanceOwedReason` by its type: a reason added tomorrow is a compile
|
|
13
|
+
* error here rather than a panel that silently borrows the wrong sentence. "We have never recorded your
|
|
14
|
+
* agreement" and "the terms you agreed to have changed" are different statements, and one generic
|
|
15
|
+
* sentence would be false for somebody.
|
|
16
|
+
*/
|
|
17
|
+
const REASON_WORDS = Object.freeze({
|
|
18
|
+
[GovernedDocumentAcceptanceOwedReason.NEVER_ACCEPTED]: {
|
|
19
|
+
title: AppLayoutsDocumentAcceptanceGateLabel.NEVER_ACCEPTED_TITLE,
|
|
20
|
+
description: AppLayoutsDocumentAcceptanceGateLabel.NEVER_ACCEPTED_DESCRIPTION,
|
|
21
|
+
},
|
|
22
|
+
[GovernedDocumentAcceptanceOwedReason.MATERIALLY_CHANGED]: {
|
|
23
|
+
title: AppLayoutsDocumentAcceptanceGateLabel.MATERIALLY_CHANGED_TITLE,
|
|
24
|
+
description: AppLayoutsDocumentAcceptanceGateLabel.MATERIALLY_CHANGED_DESCRIPTION,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Default rendering of the application-tier document acceptance gate (#1258, Step 2).
|
|
29
|
+
*
|
|
30
|
+
* The wrapper has already decided that an acceptance is owed and withholds the whole shell; this preset
|
|
31
|
+
* draws the panel that stands in for it. It offers exactly two ways forward — accept, or sign out — and
|
|
32
|
+
* asks through the SAME acceptance control registration uses, so the three modes, the reading gate and
|
|
33
|
+
* the document links behave identically on both surfaces.
|
|
34
|
+
*
|
|
35
|
+
* Both actions are OUTLINE, for the reason the consent panels give: a filled primary beside a quiet
|
|
36
|
+
* alternative is a nudge applied to an agreement, and a panel that has already withheld the application
|
|
37
|
+
* needs no emphasis to be noticed.
|
|
38
|
+
*
|
|
39
|
+
* `data-slot="document-acceptance-gate"` names it for the accessibility audit, which must wait for it
|
|
40
|
+
* by selector — it cannot be reached by navigating.
|
|
41
|
+
*/
|
|
42
|
+
export function AppLayoutPreset_DocumentAcceptanceGate_Default({ gate }) {
|
|
43
|
+
const components = useMemo(() => [CT, ACCEPTANCE_WORDS], []);
|
|
44
|
+
const { tComponent, isReady } = useI18n({ component: components });
|
|
45
|
+
const { getRecipe } = useUI();
|
|
46
|
+
const heading = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);
|
|
47
|
+
const description = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);
|
|
48
|
+
const headingId = useId();
|
|
49
|
+
if (!isReady || gate.reason === undefined)
|
|
50
|
+
return null;
|
|
51
|
+
const label = (key) => tComponent(CT, key);
|
|
52
|
+
const acceptanceWord = (key) => tComponent(ACCEPTANCE_WORDS, key);
|
|
53
|
+
const words = REASON_WORDS[gate.reason];
|
|
54
|
+
return (_jsx("div", { className: "h-dvh overflow-y-auto", children: _jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsxs("section", { "data-slot": "document-acceptance-gate", "aria-labelledby": headingId, "aria-busy": gate.isSaving, className: "mx-auto my-section flex max-w-prose flex-col gap-card p-card", children: [_jsx("h1", { id: headingId, className: cn(heading.base, heading.sizes?.lg), children: label(words.title) }), _jsx("p", { className: description.base, children: label(words.description) }), _jsx(GovernedDocumentAcceptanceControl, { state: gate.acceptance, t: acceptanceWord, tComponent: tComponent }), gate.saveFailed && (_jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: label(AppLayoutsDocumentAcceptanceGateLabel.SAVE_FAILED) }) })), _jsxs("div", { className: "flex flex-wrap justify-end gap-element", children: [_jsx(Button, { variant: ButtonVariants_Variant.OUTLINE, disabled: gate.isSaving, onClick: gate.signOut, children: label(AppLayoutsDocumentAcceptanceGateLabel.SIGN_OUT) }), _jsx(Button, { variant: ButtonVariants_Variant.OUTLINE, disabled: gate.isSaving || !gate.canAccept, onClick: () => void gate.accept(), children: label(AppLayoutsDocumentAcceptanceGateLabel.ACCEPT_AND_CONTINUE) })] })] }) }) }));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=app-layout-document-acceptance-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-layout-document-acceptance-gate.js","sourceRoot":"","sources":["../../../../../src/components/app/app-layout-document-acceptance-gate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useId, useMemo } from 'react';\nimport {\n Alert,\n AlertDescription,\n Button,\n ButtonVariants_Variant,\n GovernedDocumentAcceptanceControl,\n Surface,\n cn,\n useI18n,\n useUI,\n type AppLayoutPreset_DocumentAcceptanceGate_DefaultProps,\n} from '@wildo-ai/saas-frontend-lib';\nimport { GovernedDocumentAcceptanceOwedReason } from '@wildo-ai/saas-models';\nimport {\n AppLayoutsDocumentAcceptanceGateLabel,\n FrontendComponentType,\n SurfaceVariant,\n TypographyVariant,\n UIBehavior,\n} from '@wildo-ai/presets-components-models';\n\nconst CT = FrontendComponentType.APP_LAYOUTS_DOCUMENT_ACCEPTANCE_GATE;\n/** The acceptance control's own words live in this namespace (see `GovernedDocumentAcceptanceControl`). */\nconst ACCEPTANCE_WORDS = FrontendComponentType.PUBLIC_LAYOUTS_USER_REGISTER;\n\n/**\n * The heading and description for each reason a person is asked.\n *\n * TOTAL over `GovernedDocumentAcceptanceOwedReason` by its type: a reason added tomorrow is a compile\n * error here rather than a panel that silently borrows the wrong sentence. \"We have never recorded your\n * agreement\" and \"the terms you agreed to have changed\" are different statements, and one generic\n * sentence would be false for somebody.\n */\nconst REASON_WORDS: Readonly<Record<GovernedDocumentAcceptanceOwedReason, { title: AppLayoutsDocumentAcceptanceGateLabel; description: AppLayoutsDocumentAcceptanceGateLabel }>> = Object.freeze({\n [GovernedDocumentAcceptanceOwedReason.NEVER_ACCEPTED]: {\n title: AppLayoutsDocumentAcceptanceGateLabel.NEVER_ACCEPTED_TITLE,\n description: AppLayoutsDocumentAcceptanceGateLabel.NEVER_ACCEPTED_DESCRIPTION,\n },\n [GovernedDocumentAcceptanceOwedReason.MATERIALLY_CHANGED]: {\n title: AppLayoutsDocumentAcceptanceGateLabel.MATERIALLY_CHANGED_TITLE,\n description: AppLayoutsDocumentAcceptanceGateLabel.MATERIALLY_CHANGED_DESCRIPTION,\n },\n});\n\n/**\n * Default rendering of the application-tier document acceptance gate (#1258, Step 2).\n *\n * The wrapper has already decided that an acceptance is owed and withholds the whole shell; this preset\n * draws the panel that stands in for it. It offers exactly two ways forward — accept, or sign out — and\n * asks through the SAME acceptance control registration uses, so the three modes, the reading gate and\n * the document links behave identically on both surfaces.\n *\n * Both actions are OUTLINE, for the reason the consent panels give: a filled primary beside a quiet\n * alternative is a nudge applied to an agreement, and a panel that has already withheld the application\n * needs no emphasis to be noticed.\n *\n * `data-slot=\"document-acceptance-gate\"` names it for the accessibility audit, which must wait for it\n * by selector — it cannot be reached by navigating.\n */\nexport function AppLayoutPreset_DocumentAcceptanceGate_Default({ gate }: AppLayoutPreset_DocumentAcceptanceGate_DefaultProps): React.JSX.Element | null {\n const components = useMemo(() => [CT, ACCEPTANCE_WORDS], []);\n const { tComponent, isReady } = useI18n({ component: components });\n const { getRecipe } = useUI();\n const heading = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const description = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n const headingId = useId();\n\n if (!isReady || gate.reason === undefined) return null;\n const label = (key: AppLayoutsDocumentAcceptanceGateLabel): string => tComponent(CT, key);\n const acceptanceWord = (key: string): string => tComponent(ACCEPTANCE_WORDS, key);\n const words = REASON_WORDS[gate.reason];\n\n return (\n <div className=\"h-dvh overflow-y-auto\">\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <section\n data-slot=\"document-acceptance-gate\"\n aria-labelledby={headingId}\n aria-busy={gate.isSaving}\n className=\"mx-auto my-section flex max-w-prose flex-col gap-card p-card\"\n >\n <h1 id={headingId} className={cn(heading.base, heading.sizes?.lg)}>{label(words.title)}</h1>\n <p className={description.base}>{label(words.description)}</p>\n <GovernedDocumentAcceptanceControl state={gate.acceptance} t={acceptanceWord} tComponent={tComponent} />\n {gate.saveFailed && (\n <Alert variant=\"destructive\">\n <AlertDescription>{label(AppLayoutsDocumentAcceptanceGateLabel.SAVE_FAILED)}</AlertDescription>\n </Alert>\n )}\n <div className=\"flex flex-wrap justify-end gap-element\">\n <Button variant={ButtonVariants_Variant.OUTLINE} disabled={gate.isSaving} onClick={gate.signOut}>\n {label(AppLayoutsDocumentAcceptanceGateLabel.SIGN_OUT)}\n </Button>\n <Button\n variant={ButtonVariants_Variant.OUTLINE}\n disabled={gate.isSaving || !gate.canAccept}\n onClick={() => void gate.accept()}\n >\n {label(AppLayoutsDocumentAcceptanceGateLabel.ACCEPT_AND_CONTINUE)}\n </Button>\n </div>\n </section>\n </Surface>\n </div>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-layout-main-container.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"app-layout-main-container.d.ts","sourceRoot":"","sources":["../../../../../src/components/app/app-layout-main-container.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAGhE,OAAO,EACL,0CAA0C,EAmB3C,MAAM,6BAA6B,CAAC;AAErC,eAAO,MAAM,qCAAqC,GAAI,cAAc,0CAA0C,KAAG,KAAK,CAAC,GAAG,CAAC,OAqH1H,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-layout-main-container.labels.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"app-layout-main-container.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/app/app-layout-main-container.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM1I,eAAO,MAAM,6BAA6B,EAAE,mBAAmB,EAiC9D,CAAC"}
|
|
@@ -10,6 +10,27 @@ export const AppLayoutsMainContainerLabels = [
|
|
|
10
10
|
+ 'empty via onEmpty: EMPTY_STATE — tells the reader the pane is waiting for a selection rather '
|
|
11
11
|
+ 'than broken. Not shown when the zone collapses instead.',
|
|
12
12
|
},
|
|
13
|
+
{
|
|
14
|
+
ref: 'zoneExpand',
|
|
15
|
+
kind: LabelKind.BUTTON,
|
|
16
|
+
purpose: 'The control on an adjacent content zone (detail / companion pane) that gives that pane the '
|
|
17
|
+
+ 'WHOLE content area, folding the list it opened from out of view. Short, imperative, one or '
|
|
18
|
+
+ 'two words; it also names the control for screen readers.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
ref: 'zoneDismiss',
|
|
22
|
+
kind: LabelKind.BUTTON,
|
|
23
|
+
purpose: 'The control that CLOSES an adjacent content zone (detail / companion pane) outright, handing '
|
|
24
|
+
+ 'its width back to the pane beside it. Offered only where the layout declares the zone '
|
|
25
|
+
+ 'collapses when empty, because that is where closing it actually returns room. Short, '
|
|
26
|
+
+ 'imperative, one or two words; it also names the control for screen readers.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
ref: 'zoneRestore',
|
|
30
|
+
kind: LabelKind.BUTTON,
|
|
31
|
+
purpose: 'The inverse of zoneExpand, shown while a pane has the whole content area: hands the room back '
|
|
32
|
+
+ 'to the split so the list appears beside the pane again. Escape does the same.',
|
|
33
|
+
},
|
|
13
34
|
];
|
|
14
35
|
registerComponentLabels(FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER, AppLayoutsMainContainerLabels);
|
|
15
36
|
//# sourceMappingURL=app-layout-main-container.labels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-layout-main-container.labels.js","sourceRoot":"","sources":["../../../../../src/components/app/app-layout-main-container.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAA4B,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE1I,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAE/E,MAAM,CAAC,MAAM,6BAA6B,GAA0B;IAClE;QACE,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,SAAS,CAAC,WAAW;QAC3B,OAAO,EACL,gGAAgG;cAC9F,+FAA+F;cAC/F,yDAAyD;KAC9D;CACF,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,CAAC","sourcesContent":["import { FrontendComponentType, LabelKind, type LabellingUnitaryDef, registerComponentLabels } from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + (where\n// authored) per-key purpose / kind / variable meaning. Statically scanned by\n// the dev companion; NOT imported at runtime, so it never ships in the bundle.\n\nexport const AppLayoutsMainContainerLabels: LabellingUnitaryDef[] = [\n {\n ref: 'zoneEmptyState',\n kind: LabelKind.EMPTY_STATE,\n purpose:\n 'Shown in an adjacent content zone (detail / companion pane) that a layout keeps VISIBLE while '\n + 'empty via onEmpty: EMPTY_STATE — tells the reader the pane is waiting for a selection rather '\n + 'than broken. Not shown when the zone collapses instead.',\n },\n];\nregisterComponentLabels(FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER, AppLayoutsMainContainerLabels);\n"]}
|
|
1
|
+
{"version":3,"file":"app-layout-main-container.labels.js","sourceRoot":"","sources":["../../../../../src/components/app/app-layout-main-container.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAA4B,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE1I,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAE/E,MAAM,CAAC,MAAM,6BAA6B,GAA0B;IAClE;QACE,GAAG,EAAE,gBAAgB;QACrB,IAAI,EAAE,SAAS,CAAC,WAAW;QAC3B,OAAO,EACL,gGAAgG;cAC9F,+FAA+F;cAC/F,yDAAyD;KAC9D;IACD;QACE,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,SAAS,CAAC,MAAM;QACtB,OAAO,EACL,6FAA6F;cAC3F,6FAA6F;cAC7F,0DAA0D;KAC/D;IACD;QACE,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,SAAS,CAAC,MAAM;QACtB,OAAO,EACL,+FAA+F;cAC7F,wFAAwF;cACxF,uFAAuF;cACvF,6EAA6E;KAClF;IACD;QACE,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,SAAS,CAAC,MAAM;QACtB,OAAO,EACL,gGAAgG;cAC9F,+EAA+E;KACpF;CACF,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,CAAC","sourcesContent":["import { FrontendComponentType, LabelKind, type LabellingUnitaryDef, registerComponentLabels } from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + (where\n// authored) per-key purpose / kind / variable meaning. Statically scanned by\n// the dev companion; NOT imported at runtime, so it never ships in the bundle.\n\nexport const AppLayoutsMainContainerLabels: LabellingUnitaryDef[] = [\n {\n ref: 'zoneEmptyState',\n kind: LabelKind.EMPTY_STATE,\n purpose:\n 'Shown in an adjacent content zone (detail / companion pane) that a layout keeps VISIBLE while '\n + 'empty via onEmpty: EMPTY_STATE — tells the reader the pane is waiting for a selection rather '\n + 'than broken. Not shown when the zone collapses instead.',\n },\n {\n ref: 'zoneExpand',\n kind: LabelKind.BUTTON,\n purpose:\n 'The control on an adjacent content zone (detail / companion pane) that gives that pane the '\n + 'WHOLE content area, folding the list it opened from out of view. Short, imperative, one or '\n + 'two words; it also names the control for screen readers.',\n },\n {\n ref: 'zoneDismiss',\n kind: LabelKind.BUTTON,\n purpose:\n 'The control that CLOSES an adjacent content zone (detail / companion pane) outright, handing '\n + 'its width back to the pane beside it. Offered only where the layout declares the zone '\n + 'collapses when empty, because that is where closing it actually returns room. Short, '\n + 'imperative, one or two words; it also names the control for screen readers.',\n },\n {\n ref: 'zoneRestore',\n kind: LabelKind.BUTTON,\n purpose:\n 'The inverse of zoneExpand, shown while a pane has the whole content area: hands the room back '\n + 'to the split so the list appears beside the pane again. Escape does the same.',\n },\n];\nregisterComponentLabels(FrontendComponentType.APP_LAYOUTS_MAIN_CONTAINER, AppLayoutsMainContainerLabels);\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { PublicLayoutPreset_MainContainer_DefaultProps } from '@wildo-ai/saas-frontend-lib';
|
|
3
|
-
export declare const PublicLayoutPreset_MainContainer_Default: ({ children, useCardLayout, className }: PublicLayoutPreset_MainContainer_DefaultProps) => React.JSX.Element;
|
|
3
|
+
export declare const PublicLayoutPreset_MainContainer_Default: ({ children, useCardLayout, organizationBranding, className }: PublicLayoutPreset_MainContainer_DefaultProps) => React.JSX.Element;
|
|
4
4
|
//# sourceMappingURL=public-layout-main-container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-layout-main-container.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"public-layout-main-container.d.ts","sourceRoot":"","sources":["../../../../../src/components/app/public-layout-main-container.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,6CAA6C,EAU9C,MAAM,6BAA6B,CAAC;AAyErC,eAAO,MAAM,wCAAwC,GAAI,8DAKtD,6CAA6C,KAAG,KAAK,CAAC,GAAG,CAAC,OAuG5D,CAAC"}
|
|
@@ -18,8 +18,9 @@ import { SurfaceVariant, TypographyVariant, UIBehavior } from "@wildo-ai/presets
|
|
|
18
18
|
* where it is most visible: a cold load on a slow link, which is the first impression the page
|
|
19
19
|
* exists to make. The `h-14` box is fixed and `w-auto` lets a wide lockup keep its aspect ratio
|
|
20
20
|
* inside it — sized against the name beneath rather than picked in the abstract, so mark and name
|
|
21
|
-
* read as one unit (hence the tighter `gap-element-sm` between them
|
|
22
|
-
* the
|
|
21
|
+
* read as one unit (hence the tighter `gap-element-sm` between them). Below the pair sits a
|
|
22
|
+
* SECTION gap, not a group gap: the identity and the form's own heading are two different things
|
|
23
|
+
* ("this is <product>" / "sign in"), and at `mb-group` the heading read as a caption of the logo.
|
|
23
24
|
*
|
|
24
25
|
* ## Why the name is styled from the recipe and is NOT a heading
|
|
25
26
|
*
|
|
@@ -34,13 +35,13 @@ import { SurfaceVariant, TypographyVariant, UIBehavior } from "@wildo-ai/presets
|
|
|
34
35
|
* this same card. A second one would give the document two competing top-level headings; the recipe
|
|
35
36
|
* supplies the LOOK while the outline stays owned by the content.
|
|
36
37
|
*/
|
|
37
|
-
const PublicShellBrandHeader = ({ identity }) => {
|
|
38
|
+
const PublicShellBrandHeader = ({ identity, accentColor }) => {
|
|
38
39
|
const { name, logoUrl, hasMark, markCarriesName, isEmpty, onMarkError } = useBrandPresentation(identity);
|
|
39
40
|
const { getRecipe } = useUI();
|
|
40
41
|
const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);
|
|
41
42
|
if (isEmpty)
|
|
42
43
|
return null;
|
|
43
|
-
return (_jsxs("div", { className: "flex flex-col items-center gap-element-sm mb-
|
|
44
|
+
return (_jsxs("div", { className: "flex flex-col items-center gap-element-sm mb-section-lg", children: [accentColor && _jsx("span", { "aria-hidden": "true", className: "h-1 w-12 rounded-full", style: { backgroundColor: accentColor } }), hasMark && (_jsx("div", { className: "flex h-14 items-center justify-center", children: _jsx("img", { src: logoUrl,
|
|
44
45
|
/*
|
|
45
46
|
* A mark that CARRIES the name is the only thing announcing it, so it is the accessible
|
|
46
47
|
* name. A symbol sits beside the name text below and is decorative — announcing it too
|
|
@@ -48,11 +49,11 @@ const PublicShellBrandHeader = ({ identity }) => {
|
|
|
48
49
|
*/
|
|
49
50
|
alt: markCarriesName ? name : '', "aria-hidden": markCarriesName ? undefined : 'true', onError: onMarkError, className: "max-h-14 w-auto object-contain" }) })), !markCarriesName && name !== '' && (_jsx("p", { className: cn(headingRecipe.base, headingRecipe.sizes?.h1 ?? 'text-3xl', 'text-center text-foreground'), children: name }))] }));
|
|
50
51
|
};
|
|
51
|
-
export const PublicLayoutPreset_MainContainer_Default = ({ children = null, useCardLayout = false, className = "" }) => {
|
|
52
|
-
const { brandHeader } = usePublicShellLayout(useCardLayout);
|
|
52
|
+
export const PublicLayoutPreset_MainContainer_Default = ({ children = null, useCardLayout = false, organizationBranding, className = "" }) => {
|
|
53
|
+
const { brandHeader, brandAccentColor } = usePublicShellLayout(useCardLayout, organizationBranding);
|
|
53
54
|
if (useCardLayout) {
|
|
54
|
-
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.SHELL, policyOverride: NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE, children: _jsx("div", { className: "h-screen w-screen overflow-auto", children: _jsx("
|
|
55
|
+
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.SHELL, policyOverride: NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE, children: _jsx("div", { className: "h-screen w-screen overflow-auto", children: _jsx("main", { className: "isolate min-h-full flex items-center justify-center p-container", children: _jsx(Card, { className: cn('w-full max-w-md', className), policyOverride: { a11y: { landmarkRole: 'none' } }, children: _jsxs(CardContent, { className: "p-container-xl", children: [brandHeader && _jsx(PublicShellBrandHeader, { identity: brandHeader, accentColor: brandAccentColor }), children] }) }) }) }) }));
|
|
55
56
|
}
|
|
56
|
-
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.SHELL, policyOverride: NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE, children: _jsx("div", { className: cn('h-screen w-screen overflow-auto', className), children: _jsx("main", { className: "min-h-full py-section", children: _jsx("div", { className: "max-w-7xl mx-auto px-card sm:px-container lg:px-container-lg", children: children }) }) }) }));
|
|
57
|
+
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.SHELL, policyOverride: NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE, children: _jsx("div", { tabIndex: 0, className: cn('h-screen w-screen overflow-auto focus-ring-inset', className), children: _jsx("main", { className: "isolate min-h-full py-section", children: _jsx("div", { className: "max-w-7xl mx-auto px-card sm:px-container lg:px-container-lg", children: children }) }) }) }));
|
|
57
58
|
};
|
|
58
59
|
//# sourceMappingURL=public-layout-main-container.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-layout-main-container.js","sourceRoot":"","sources":["../../../../../src/components/app/public-layout-main-container.tsx"],"names":[],"mappings":";AAEA,OAAO,EAEL,IAAI,EACJ,WAAW,EACX,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,EACL,EAAE,EACF,2CAA2C,EAC3C,OAAO,GAER,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAyB,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAE1H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,sBAAsB,GAAG,CAAC,EAAE,QAAQ,EAA+B,EAA4B,EAAE;IACrG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzG,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAElF,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,CACL,eAAK,SAAS,EAAC,oDAAoD,aAChE,OAAO,IAAI,CACV,cAAK,SAAS,EAAC,uCAAuC,YACpD,cACE,GAAG,EAAE,OAAO;oBACZ;;;;uBAIG;oBACH,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,iBACnB,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EACjD,OAAO,EAAE,WAAW,EACpB,SAAS,EAAC,gCAAgC,GAC1C,GACE,CACP,EACA,CAAC,eAAe,IAAI,IAAI,KAAK,EAAE,IAAI,CAClC,YAAG,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,EAAE,IAAI,UAAU,EAAE,6BAA6B,CAAC,YACvG,IAAI,GACH,CACL,IACG,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wCAAwC,GAAG,CAAC,EACvD,QAAQ,GAAG,IAAI,EACf,aAAa,GAAG,KAAK,EACrB,SAAS,GAAG,EAAE,EACgC,EAAqB,EAAE;IAErE,MAAM,EAAE,WAAW,EAAE,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAE5D,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CACL,KAAC,OAAO,IAAC,OAAO,QAAC,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,2CAA2C,YAChI,cAAK,SAAS,EAAC,iCAAiC,YAC9C,cAAK,SAAS,EAAC,yDAAyD,YAStE,KAAC,IAAI,IACH,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,EAC3C,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,YAElD,MAAC,WAAW,IAAC,SAAS,EAAC,gBAAgB,aAUpC,WAAW,IAAI,KAAC,sBAAsB,IAAC,QAAQ,EAAE,WAAW,GAAI,EAChE,QAAQ,IACG,GACT,GACH,GACF,GACE,CACX,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,OAAO,IAAC,OAAO,QAAC,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,2CAA2C,YAChI,cAAK,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE,SAAS,CAAC,YAC9D,eAAM,SAAS,EAAC,uBAAuB,YACrC,cAAK,SAAS,EAAC,8DAA8D,YAC1E,QAAQ,GACL,GACD,GACH,GACE,CACX,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import React from 'react';\n\nimport {\n PublicLayoutPreset_MainContainer_DefaultProps,\n Card,\n CardContent,\n usePublicShellLayout,\n useBrandPresentation,\n useUI,\n cn,\n NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE,\n Surface,\n type BrandIdentity,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from \"@wildo-ai/presets-components-models\"\n\n/**\n * The surface's identity, at the top of the public card.\n *\n * Rendered ONLY when the application opted in (`publicShellIdentityMode`) — `usePublicShellLayout`\n * gates that, so reaching this component at all is the permission. What it draws is decided from the\n * DATA, and each branch is a defect that would otherwise ship silently:\n *\n * - a WORDMARK/LOCKUP already contains the name, so the name label is dropped rather than printed\n * twice — the brand resolver returns one for an application that generated no symbol;\n * - a mark whose URL 404s degrades to the name alone instead of a browser broken-image glyph;\n * - an identity with neither mark nor name renders nothing, not an empty gap above the card.\n *\n * The height is RESERVED rather than left to the image. A login card that jumps downward when a logo\n * finishes loading is the \"glitch\" this feature is most likely to introduce, and it is worst exactly\n * where it is most visible: a cold load on a slow link, which is the first impression the page\n * exists to make. The `h-14` box is fixed and `w-auto` lets a wide lockup keep its aspect ratio\n * inside it — sized against the name beneath rather than picked in the abstract, so mark and name\n * read as one unit (hence the tighter `gap-element-sm` between them, and the wider `mb-group` below\n * the pair).\n *\n * ## Why the name is styled from the recipe and is NOT a heading\n *\n * The type comes from the design system's `TYPOGRAPHY.HEADING` recipe rather than from classes\n * chosen here, so an application that restyles its headings restyles this too — the same thing\n * `CardTitle` does, and the reason it is worth a hook call for one line of text. `h1` SIZE — the top\n * of the design system's ordinary ladder — because the identity is what the card is opening with; at\n * `h2` it rendered visibly smaller than the action heading beneath it and read as a caption on the\n * logo rather than as the product's name. Measured on a screenshot, not reasoned about.\n *\n * It renders as a `<p>`, not a heading, because `Auth_Main` already emits the page's `<h1>` inside\n * this same card. A second one would give the document two competing top-level headings; the recipe\n * supplies the LOOK while the outline stays owned by the content.\n */\nconst PublicShellBrandHeader = ({ identity }: { identity: BrandIdentity }): React.JSX.Element | null => {\n const { name, logoUrl, hasMark, markCarriesName, isEmpty, onMarkError } = useBrandPresentation(identity);\n const { getRecipe } = useUI();\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n\n if (isEmpty) return null;\n\n return (\n <div className=\"flex flex-col items-center gap-element-sm mb-group\">\n {hasMark && (\n <div className=\"flex h-14 items-center justify-center\">\n <img\n src={logoUrl}\n /*\n * A mark that CARRIES the name is the only thing announcing it, so it is the accessible\n * name. A symbol sits beside the name text below and is decorative — announcing it too\n * would read the product name twice to a screen reader.\n */\n alt={markCarriesName ? name : ''}\n aria-hidden={markCarriesName ? undefined : 'true'}\n onError={onMarkError}\n className=\"max-h-14 w-auto object-contain\"\n />\n </div>\n )}\n {!markCarriesName && name !== '' && (\n <p className={cn(headingRecipe.base, headingRecipe.sizes?.h1 ?? 'text-3xl', 'text-center text-foreground')}>\n {name}\n </p>\n )}\n </div>\n );\n};\n\nexport const PublicLayoutPreset_MainContainer_Default = ({\n children = null,\n useCardLayout = false,\n className = \"\"\n}: PublicLayoutPreset_MainContainer_DefaultProps): React.JSX.Element => {\n\n const { brandHeader } = usePublicShellLayout(useCardLayout);\n\n if (useCardLayout) {\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.SHELL} policyOverride={NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE}>\n <div className=\"h-screen w-screen overflow-auto\">\n <div className=\"min-h-full flex items-center justify-center p-container\">\n {/*\n `landmarkRole: 'none'` opts this card out of the BASE variant's\n default `region` landmark. The card here is presentational\n chrome wrapping the public-auth panel — it doesn't represent a\n distinct semantic region on the page. Without the override the\n card would emit `role=\"region\"` without a label (no header,\n no aria-label) and the framework would warn on every render.\n */}\n <Card\n className={cn('w-full max-w-md', className)}\n policyOverride={{ a11y: { landmarkRole: 'none' } }}\n >\n <CardContent className=\"p-container-xl\">\n {/*\n The identity sits INSIDE the card, above the form's own heading — so the box reads\n as one object (\"this is <product>, sign in\") rather than as a card with a caption\n floating over it.\n\n Only the CARD branch carries it. The other branch is the wide static-content layout\n (terms, legal pages), which is reached with the application's chrome around it and\n does not ask \"sign in to what\".\n */}\n {brandHeader && <PublicShellBrandHeader identity={brandHeader} />}\n {children}\n </CardContent>\n </Card>\n </div>\n </div>\n </Surface>\n );\n }\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.SHELL} policyOverride={NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE}>\n <div className={cn('h-screen w-screen overflow-auto', className)}>\n <main className=\"min-h-full py-section\">\n <div className=\"max-w-7xl mx-auto px-card sm:px-container lg:px-container-lg\">\n {children}\n </div>\n </main>\n </div>\n </Surface>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"public-layout-main-container.js","sourceRoot":"","sources":["../../../../../src/components/app/public-layout-main-container.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {\n PublicLayoutPreset_MainContainer_DefaultProps,\n Card,\n CardContent,\n usePublicShellLayout,\n useBrandPresentation,\n useUI,\n cn,\n NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE,\n Surface,\n type BrandIdentity,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from \"@wildo-ai/presets-components-models\"\n\n/**\n * The surface's identity, at the top of the public card.\n *\n * Rendered ONLY when the application opted in (`publicShellIdentityMode`) — `usePublicShellLayout`\n * gates that, so reaching this component at all is the permission. What it draws is decided from the\n * DATA, and each branch is a defect that would otherwise ship silently:\n *\n * - a WORDMARK/LOCKUP already contains the name, so the name label is dropped rather than printed\n * twice — the brand resolver returns one for an application that generated no symbol;\n * - a mark whose URL 404s degrades to the name alone instead of a browser broken-image glyph;\n * - an identity with neither mark nor name renders nothing, not an empty gap above the card.\n *\n * The height is RESERVED rather than left to the image. A login card that jumps downward when a logo\n * finishes loading is the \"glitch\" this feature is most likely to introduce, and it is worst exactly\n * where it is most visible: a cold load on a slow link, which is the first impression the page\n * exists to make. The `h-14` box is fixed and `w-auto` lets a wide lockup keep its aspect ratio\n * inside it — sized against the name beneath rather than picked in the abstract, so mark and name\n * read as one unit (hence the tighter `gap-element-sm` between them). Below the pair sits a\n * SECTION gap, not a group gap: the identity and the form's own heading are two different things\n * (\"this is <product>\" / \"sign in\"), and at `mb-group` the heading read as a caption of the logo.\n *\n * ## Why the name is styled from the recipe and is NOT a heading\n *\n * The type comes from the design system's `TYPOGRAPHY.HEADING` recipe rather than from classes\n * chosen here, so an application that restyles its headings restyles this too — the same thing\n * `CardTitle` does, and the reason it is worth a hook call for one line of text. `h1` SIZE — the top\n * of the design system's ordinary ladder — because the identity is what the card is opening with; at\n * `h2` it rendered visibly smaller than the action heading beneath it and read as a caption on the\n * logo rather than as the product's name. Measured on a screenshot, not reasoned about.\n *\n * It renders as a `<p>`, not a heading, because `Auth_Main` already emits the page's `<h1>` inside\n * this same card. A second one would give the document two competing top-level headings; the recipe\n * supplies the LOOK while the outline stays owned by the content.\n */\nconst PublicShellBrandHeader = ({ identity, accentColor }: { identity: BrandIdentity; accentColor?: string }): React.JSX.Element | null => {\n const { name, logoUrl, hasMark, markCarriesName, isEmpty, onMarkError } = useBrandPresentation(identity);\n const { getRecipe } = useUI();\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n\n if (isEmpty) return null;\n\n return (\n <div className=\"flex flex-col items-center gap-element-sm mb-section-lg\">\n {accentColor && <span aria-hidden=\"true\" className=\"h-1 w-12 rounded-full\" style={{ backgroundColor: accentColor }} />}\n {hasMark && (\n <div className=\"flex h-14 items-center justify-center\">\n <img\n src={logoUrl}\n /*\n * A mark that CARRIES the name is the only thing announcing it, so it is the accessible\n * name. A symbol sits beside the name text below and is decorative — announcing it too\n * would read the product name twice to a screen reader.\n */\n alt={markCarriesName ? name : ''}\n aria-hidden={markCarriesName ? undefined : 'true'}\n onError={onMarkError}\n className=\"max-h-14 w-auto object-contain\"\n />\n </div>\n )}\n {!markCarriesName && name !== '' && (\n <p className={cn(headingRecipe.base, headingRecipe.sizes?.h1 ?? 'text-3xl', 'text-center text-foreground')}>\n {name}\n </p>\n )}\n </div>\n );\n};\n\nexport const PublicLayoutPreset_MainContainer_Default = ({\n children = null,\n useCardLayout = false,\n organizationBranding,\n className = \"\"\n}: PublicLayoutPreset_MainContainer_DefaultProps): React.JSX.Element => {\n\n const { brandHeader, brandAccentColor } = usePublicShellLayout(useCardLayout, organizationBranding);\n\n if (useCardLayout) {\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.SHELL} policyOverride={NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE}>\n <div className=\"h-screen w-screen overflow-auto\">\n {/*\n A `<main>`, exactly like the wide branch below — the two branches are the same page at\n different widths, and only one of them had a landmark.\n\n The card branch is every public AUTH surface (sign-in, register, invitation, password\n reset, MFA challenge), so its content sat in no landmark at all: axe reported\n `landmark-one-main` plus three `region` violations on `/login` in the first accessibility\n audit ever run against this product (#533). A screen-reader user had no \"skip to main\"\n target and no way to jump to the form.\n\n It goes HERE, on the centring wrapper, rather than on the card: `Card` deliberately opts\n out of a landmark (`landmarkRole: 'none'` below) because it is presentational chrome, and\n the shell `<div>` above owns scrolling. This element is the one that actually bounds the\n page's content.\n */}\n {/* `isolate` for the same reason as the wide branch below — stated rather than left to\n `Card`'s incidental `z-index: 0`, which is what happened to keep this branch visible. */}\n <main className=\"isolate min-h-full flex items-center justify-center p-container\">\n {/*\n `landmarkRole: 'none'` opts this card out of the BASE variant's\n default `region` landmark. The card here is presentational\n chrome wrapping the public-auth panel — it doesn't represent a\n distinct semantic region on the page. Without the override the\n card would emit `role=\"region\"` without a label (no header,\n no aria-label) and the framework would warn on every render.\n */}\n <Card\n className={cn('w-full max-w-md', className)}\n policyOverride={{ a11y: { landmarkRole: 'none' } }}\n >\n <CardContent className=\"p-container-xl\">\n {/*\n The identity sits INSIDE the card, above the form's own heading — so the box reads\n as one object (\"this is <product>, sign in\") rather than as a card with a caption\n floating over it.\n\n Only the CARD branch carries it. The other branch is the wide static-content layout\n (terms, legal pages), which is reached with the application's chrome around it and\n does not ask \"sign in to what\".\n */}\n {brandHeader && <PublicShellBrandHeader identity={brandHeader} accentColor={brandAccentColor} />}\n {children}\n </CardContent>\n </Card>\n </main>\n </div>\n </Surface>\n );\n }\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.SHELL} policyOverride={NON_CANONICAL_SHELL_SURFACE_POLICY_OVERRIDE}>\n {/*\n FOCUSABLE, because this element is the only thing that scrolls. The product sets\n `html, body { overflow: hidden }`, so the page never scrolls — each shell owns it — and a\n scroll container can only be scrolled from the keyboard while focus is inside it.\n\n The card branch above needs none of this: every surface it serves has form fields. This\n branch serves the static public pages, and `/terms` is pure prose with nothing focusable in\n it at all — so a keyboard user could not read past the first screen of the terms they were\n being asked to accept. The first accessibility run against it reported exactly that\n (`scrollable-region-focusable`, #1385). `/privacy` passed only because it happens to\n contain a link, which is luck rather than design.\n\n `focus-ring-inset` rather than offset: an offset ring on a viewport-sized box is drawn\n outside the viewport and nobody sees it.\n */}\n <div tabIndex={0} className={cn('h-screen w-screen overflow-auto focus-ring-inset', className)}>\n {/*\n `isolate` is load-bearing: it is what makes this page's content VISIBLE.\n\n A theme's decorative background layer is rendered by `UIContext` inside an `isolate`\n wrapper, and `isolation: isolate` on a NON-POSITIONED element promotes that wrapper to\n the z-index:0 painting level (CSS 2.1 painting order step 8) rather than leaving it with\n in-flow block backgrounds and inline content at steps 3-5. So the layer paints ABOVE all\n ordinary content, and being an earlier DOM sibling does not lower it — DOM order only\n orders peers within the SAME painting level.\n\n Content therefore has to reach that level too. The card branch got there by accident:\n `Card` is a flex item carrying `z-index: 0`, so it paints at the same level and, being\n later in DOM order, lands above the layer. This branch is plain prose with no z-index,\n so its whole document painted underneath the layer and the page rendered as an empty\n gradient — 13,453 characters of privacy notice in the DOM and nothing on screen (#1204).\n\n Isolating the CONTENT rather than the shell is deliberate: the shell's own fill stays\n below the layer, so the decorative ground is unchanged and only the content rises.\n */}\n <main className=\"isolate min-h-full py-section\">\n <div className=\"max-w-7xl mx-auto px-card sm:px-container lg:px-container-lg\">\n {children}\n </div>\n </main>\n </div>\n </Surface>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-layout-main-container.labels.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"public-layout-main-container.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/app/public-layout-main-container.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAM/H,eAAO,MAAM,gCAAgC,EAAE,mBAAmB,EAAO,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PublicLayoutPreset_Terms_DefaultProps } from '@wildo-ai/saas-frontend-lib';
|
|
3
|
+
/**
|
|
4
|
+
* The public governed-document page. Issue #168, and #968 for what it serves.
|
|
5
|
+
*
|
|
6
|
+
* Reads the application's own `compliance.publicDocuments` — each entry a composed release with the
|
|
7
|
+
* text it carries, or the latest draft of a document the application has never released. The page
|
|
8
|
+
* is a RENDERING of that specification, never a second description of it, which is why it takes no
|
|
9
|
+
* title, no body and no effective date as props: every one of them would be a place the page could
|
|
10
|
+
* disagree with the document.
|
|
11
|
+
*
|
|
12
|
+
* ## Four states
|
|
13
|
+
*
|
|
14
|
+
* **Not settled** — labels are still resolving. A loading line, because rendering a legal document
|
|
15
|
+
* with unresolved labels around it is worse than rendering nothing for a moment.
|
|
16
|
+
*
|
|
17
|
+
* **Nothing to show** — no release for this ref is in force (or none is approved, when the gate is
|
|
18
|
+
* armed), and no draft may stand in. The page says so and shows NO content. There is deliberately no
|
|
19
|
+
* partial render: a legal statement half-shown is worse than one not shown, because a reader cannot
|
|
20
|
+
* tell which half is missing.
|
|
21
|
+
*
|
|
22
|
+
* **Released** — the document, its sections and clauses in their declared order, with the release
|
|
23
|
+
* version and effective date beneath the title. `bodyMarkdown` goes through `MarkdownContent`, which
|
|
24
|
+
* renders markdown as TEXT through the active theme's typography recipes; the schema's own note says
|
|
25
|
+
* public content "is never trusted as raw HTML", and this is where that holds.
|
|
26
|
+
*
|
|
27
|
+
* **Unreleased draft** — the same rendering, with a notice in place of the release metadata saying
|
|
28
|
+
* the reader is looking at a draft. There is no effective date to show because nothing took effect.
|
|
29
|
+
* It exists so that neither a missing approval nor a missing release leaves the page empty (#968).
|
|
30
|
+
*
|
|
31
|
+
* ## Unestablished clauses are MARKED, in either state
|
|
32
|
+
*
|
|
33
|
+
* A clause the drafter could not yet establish is rendered with a note beneath it saying so and what
|
|
34
|
+
* is missing. Omitting it would narrow the document; showing it bare would state as settled what the
|
|
35
|
+
* application itself wrote down as unsettled.
|
|
36
|
+
*
|
|
37
|
+
* ## What it does not decide
|
|
38
|
+
*
|
|
39
|
+
* Whether an UNAPPROVED release — or a draft — may be shown. That is the application's approval gate,
|
|
40
|
+
* `compliance.governedDocumentApprovalGate`, read through `requiresApprovedGovernedDocuments` — the same
|
|
41
|
+
* reading every acceptance surface uses, so the page cannot be armed without them (#1565). It used to
|
|
42
|
+
* be a prop the route passed, which is exactly how it could be armed here alone. See
|
|
43
|
+
* `.claude/rules/one-source-of-truth.md` D5 for why arming it belongs to Gate 3.
|
|
44
|
+
*/
|
|
45
|
+
export declare const PublicLayoutPreset_Terms_Default: ({ documentRef, }: PublicLayoutPreset_Terms_DefaultProps) => React.JSX.Element;
|
|
46
|
+
//# sourceMappingURL=public-layout-terms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-layout-terms.d.ts","sourceRoot":"","sources":["../../../../../src/components/app/public-layout-terms.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EASL,KAAK,qCAAqC,EAC3C,MAAM,6BAA6B,CAAC;AAiBrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,gCAAgC,GAAI,kBAE9C,qCAAqC,KAAG,KAAK,CAAC,GAAG,CAAC,OA6JpD,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { PublicLayout_MainContainer, cn, getManualCallsHttpClient, useAnonymousSession, useApplication, useI18n, useUI, useUserOrgs, } from '@wildo-ai/saas-frontend-lib';
|
|
4
|
+
import { GovernedDocumentInteractionKind, GovernedDocumentPublicClauseStanding, GovernedDocumentPublicDocumentKind, requiresApprovedGovernedDocuments, resolveInForcePublicDocument, } from '@wildo-ai/saas-models';
|
|
5
|
+
// The markdown renderer is THIS package's, so it is reached by its own path rather than through the
|
|
6
|
+
// engine barrel — `presets-components` is where the theme-mapped renderer lives.
|
|
7
|
+
import { MarkdownContent } from '../../components/data-display/markdown-content.js';
|
|
8
|
+
import { FrontendComponentType, PublicLayoutsTermsLabel, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';
|
|
9
|
+
const CT = FrontendComponentType.PUBLIC_LAYOUTS_TERMS;
|
|
10
|
+
/**
|
|
11
|
+
* The public governed-document page. Issue #168, and #968 for what it serves.
|
|
12
|
+
*
|
|
13
|
+
* Reads the application's own `compliance.publicDocuments` — each entry a composed release with the
|
|
14
|
+
* text it carries, or the latest draft of a document the application has never released. The page
|
|
15
|
+
* is a RENDERING of that specification, never a second description of it, which is why it takes no
|
|
16
|
+
* title, no body and no effective date as props: every one of them would be a place the page could
|
|
17
|
+
* disagree with the document.
|
|
18
|
+
*
|
|
19
|
+
* ## Four states
|
|
20
|
+
*
|
|
21
|
+
* **Not settled** — labels are still resolving. A loading line, because rendering a legal document
|
|
22
|
+
* with unresolved labels around it is worse than rendering nothing for a moment.
|
|
23
|
+
*
|
|
24
|
+
* **Nothing to show** — no release for this ref is in force (or none is approved, when the gate is
|
|
25
|
+
* armed), and no draft may stand in. The page says so and shows NO content. There is deliberately no
|
|
26
|
+
* partial render: a legal statement half-shown is worse than one not shown, because a reader cannot
|
|
27
|
+
* tell which half is missing.
|
|
28
|
+
*
|
|
29
|
+
* **Released** — the document, its sections and clauses in their declared order, with the release
|
|
30
|
+
* version and effective date beneath the title. `bodyMarkdown` goes through `MarkdownContent`, which
|
|
31
|
+
* renders markdown as TEXT through the active theme's typography recipes; the schema's own note says
|
|
32
|
+
* public content "is never trusted as raw HTML", and this is where that holds.
|
|
33
|
+
*
|
|
34
|
+
* **Unreleased draft** — the same rendering, with a notice in place of the release metadata saying
|
|
35
|
+
* the reader is looking at a draft. There is no effective date to show because nothing took effect.
|
|
36
|
+
* It exists so that neither a missing approval nor a missing release leaves the page empty (#968).
|
|
37
|
+
*
|
|
38
|
+
* ## Unestablished clauses are MARKED, in either state
|
|
39
|
+
*
|
|
40
|
+
* A clause the drafter could not yet establish is rendered with a note beneath it saying so and what
|
|
41
|
+
* is missing. Omitting it would narrow the document; showing it bare would state as settled what the
|
|
42
|
+
* application itself wrote down as unsettled.
|
|
43
|
+
*
|
|
44
|
+
* ## What it does not decide
|
|
45
|
+
*
|
|
46
|
+
* Whether an UNAPPROVED release — or a draft — may be shown. That is the application's approval gate,
|
|
47
|
+
* `compliance.governedDocumentApprovalGate`, read through `requiresApprovedGovernedDocuments` — the same
|
|
48
|
+
* reading every acceptance surface uses, so the page cannot be armed without them (#1565). It used to
|
|
49
|
+
* be a prop the route passed, which is exactly how it could be armed here alone. See
|
|
50
|
+
* `.claude/rules/one-source-of-truth.md` D5 for why arming it belongs to Gate 3.
|
|
51
|
+
*/
|
|
52
|
+
export const PublicLayoutPreset_Terms_Default = ({ documentRef, }) => {
|
|
53
|
+
const { appConfig } = useApplication();
|
|
54
|
+
const { tComponent, isReady } = useI18n({ component: CT });
|
|
55
|
+
const { getRecipe } = useUI();
|
|
56
|
+
const { user, auth } = useUserOrgs();
|
|
57
|
+
const { initAnonymousSession } = useAnonymousSession();
|
|
58
|
+
const heading = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);
|
|
59
|
+
const body = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.BODY);
|
|
60
|
+
/*
|
|
61
|
+
* Pinned at mount rather than re-evaluated per render. A release taking effect while somebody is
|
|
62
|
+
* READING would otherwise swap the document under them mid-paragraph — the reading equivalent of
|
|
63
|
+
* the registration form's own "what am I agreeing to" hazard.
|
|
64
|
+
*/
|
|
65
|
+
const document = React.useMemo(() => resolveInForcePublicDocument(appConfig.compliance?.publicDocuments ?? [], documentRef, new Date().toISOString(), { requireApproved: requiresApprovedGovernedDocuments(appConfig.compliance) }),
|
|
66
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- pinned at mount, deliberately; see above.
|
|
67
|
+
[appConfig.compliance?.publicDocuments, documentRef, appConfig.compliance?.governedDocumentApprovalGate]);
|
|
68
|
+
/*
|
|
69
|
+
* Record NOTICE_DELIVERED once, on MOUNT — never per render — for the exact release this page is
|
|
70
|
+
* showing (#1258 Step 5 / R11). Fire-and-forget: a delivery record failing to write must never
|
|
71
|
+
* affect the page the reader already sees.
|
|
72
|
+
*
|
|
73
|
+
* Two guards keep this from writing the "47 identical reads" the #51 lesson warns about
|
|
74
|
+
* (`recordGovernedDocumentAcceptances`'s own header cites it): the effect's own empty-ish deps
|
|
75
|
+
* fire it once per mount, and a `sessionStorage` flag skips a repeat visit to the same document +
|
|
76
|
+
* release within the same browser tab. Neither is a hard guarantee against every duplicate — the
|
|
77
|
+
* recorder's own JSDoc explains why a rare true duplicate is tolerated rather than built out with a
|
|
78
|
+
* second queryable resource.
|
|
79
|
+
*
|
|
80
|
+
* Reader identity: a signed-in person's own bearer-token route, or the anonymous-session door —
|
|
81
|
+
* whichever the person currently is. **Waits for `auth.isRestoringSession` to clear first**, and
|
|
82
|
+
* that wait is load-bearing, not cosmetic (review finding F1, #1258 Steps 4-5): a stored access
|
|
83
|
+
* token resolves ASYNCHRONOUSLY, over a real network round-trip
|
|
84
|
+
* (`AuthSessionContext`/`UserOrgsContext`) — an earlier draft of this comment claimed the resolve
|
|
85
|
+
* was synchronous and that "signed out" and "not yet known" were indistinguishable, and both
|
|
86
|
+
* halves were wrong. A signed-in person landing directly on `/terms` or `/privacy` on a fresh page
|
|
87
|
+
* load (an emailed link, the R7 re-acceptance redirect) would otherwise be read as signed-out for
|
|
88
|
+
* the one render this effect fires on, mint a throwaway anonymous session via
|
|
89
|
+
* `initAnonymousSession()`, and have their delivery permanently misattributed to it — nothing ever
|
|
90
|
+
* reconciles a stray session created this way back onto the account, unlike Step 1's carry, which
|
|
91
|
+
* only runs at registration/authentication. `AppLayout_AuthenticatedRoute.tsx` already gates on
|
|
92
|
+
* exactly this signal for exactly this reason; this effect now does the same.
|
|
93
|
+
*/
|
|
94
|
+
React.useEffect(() => {
|
|
95
|
+
if (auth.isRestoringSession)
|
|
96
|
+
return;
|
|
97
|
+
if (document?.kind !== GovernedDocumentPublicDocumentKind.RELEASED)
|
|
98
|
+
return;
|
|
99
|
+
if (!document.release.allowedInteractionKinds.includes(GovernedDocumentInteractionKind.NOTICE_DELIVERED))
|
|
100
|
+
return;
|
|
101
|
+
const sessionKey = `wildo:notice-delivered:${documentRef}:${document.release.identity.releaseId}@${document.release.identity.releaseVersion}`;
|
|
102
|
+
try {
|
|
103
|
+
if (window.sessionStorage.getItem(sessionKey))
|
|
104
|
+
return;
|
|
105
|
+
window.sessionStorage.setItem(sessionKey, '1');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Storage unavailable (private browsing, quota) — proceed and risk a duplicate row rather than
|
|
109
|
+
// never recording delivery at all.
|
|
110
|
+
}
|
|
111
|
+
const client = getManualCallsHttpClient();
|
|
112
|
+
if (user !== null) {
|
|
113
|
+
void client.recordGovernedDocumentNoticeDelivered(documentRef);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
// A first-ever visit has no anonymous session yet — `record_consent`'s own door needed the
|
|
117
|
+
// same thing before Step 1a existed. `initAnonymousSession` is a no-op returning the existing
|
|
118
|
+
// id when one is already ACTIVE, so this is safe to call unconditionally here.
|
|
119
|
+
initAnonymousSession();
|
|
120
|
+
void client.recordAnonymousGovernedDocumentNoticeDelivered(documentRef);
|
|
121
|
+
}
|
|
122
|
+
// `auth.isRestoringSession` is a real dependency, not a suppressed one: this effect must re-run
|
|
123
|
+
// the instant it clears, which is the whole point of the gate above. `user`/`initAnonymousSession`
|
|
124
|
+
// are read fresh inside the effect and are stable enough not to cause a spurious re-fire past the
|
|
125
|
+
// sessionStorage guard, which is what the suppression below still covers.
|
|
126
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- fires once per mount for this release; see above.
|
|
127
|
+
}, [document, documentRef, auth.isRestoringSession]);
|
|
128
|
+
if (!isReady) {
|
|
129
|
+
return (_jsx(PublicLayout_MainContainer, { children: _jsx("p", { className: cn(body.base, 'text-muted-foreground'), children: tComponent(CT, PublicLayoutsTermsLabel.LOADING) }) }));
|
|
130
|
+
}
|
|
131
|
+
if (!document) {
|
|
132
|
+
return (_jsx(PublicLayout_MainContainer, { children: _jsxs("div", { className: "mx-auto flex max-w-prose flex-col gap-element", children: [_jsx("h1", { className: cn(heading.base, heading.sizes?.h1 ?? 'text-3xl'), children: tComponent(CT, PublicLayoutsTermsLabel.UNAVAILABLE_TITLE) }), _jsx("p", { className: cn(body.base, 'text-muted-foreground'), children: tComponent(CT, PublicLayoutsTermsLabel.UNAVAILABLE_DESCRIPTION) })] }) }));
|
|
133
|
+
}
|
|
134
|
+
const { content } = document;
|
|
135
|
+
return (_jsx(PublicLayout_MainContainer, { children: _jsxs("article", { className: "mx-auto flex max-w-prose flex-col gap-section", lang: content.locale, children: [_jsxs("header", { className: "flex flex-col gap-element-sm", children: [_jsx("h1", { className: cn(heading.base, heading.sizes?.h1 ?? 'text-3xl'), children: content.title }), document.kind === GovernedDocumentPublicDocumentKind.RELEASED ? (_jsxs("dl", { className: cn(body.base, 'flex flex-wrap gap-field text-sm text-muted-foreground'), children: [_jsxs("div", { className: "flex gap-element-sm", children: [_jsx("dt", { children: tComponent(CT, PublicLayoutsTermsLabel.EFFECTIVE_AT) }), _jsx("dd", { children: _jsx("time", { dateTime: document.release.effectiveAt, children: new Date(document.release.effectiveAt).toLocaleDateString() }) })] }), _jsx("div", { className: "flex gap-element-sm", children: _jsx("dt", { children: tComponent(CT, PublicLayoutsTermsLabel.RELEASE_VERSION, { releaseVersion: document.release.identity.releaseVersion }) }) })] })) : (_jsx("p", { role: "note", className: cn(body.base, 'text-sm text-muted-foreground'), children: tComponent(CT, PublicLayoutsTermsLabel.UNRELEASED_DRAFT_NOTICE) }))] }), content.sections.map((section) => (_jsxs("section", { className: "flex flex-col gap-element", children: [_jsx("h2", { className: cn(heading.base, heading.sizes?.h2 ?? 'text-2xl'), children: section.title }), section.clauses.map((clause) => (_jsxs("div", { className: "flex flex-col gap-element-sm", children: [_jsx(MarkdownContent, { value: clause.bodyMarkdown }), clause.standing === GovernedDocumentPublicClauseStanding.NOT_YET_ESTABLISHED && (_jsxs("p", { role: "note", className: cn(body.base, 'text-sm text-muted-foreground'), children: [_jsx("span", { children: tComponent(CT, PublicLayoutsTermsLabel.CLAUSE_NOT_YET_ESTABLISHED) }), " ", _jsx("span", { children: clause.missingInformation })] }))] }, clause.clauseRef)))] }, section.sectionRef)))] }) }));
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=public-layout-terms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-layout-terms.js","sourceRoot":"","sources":["../../../../../src/components/app/public-layout-terms.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {\n PublicLayout_MainContainer,\n cn,\n getManualCallsHttpClient,\n useAnonymousSession,\n useApplication,\n useI18n,\n useUI,\n useUserOrgs,\n type PublicLayoutPreset_Terms_DefaultProps,\n} from '@wildo-ai/saas-frontend-lib';\nimport {\n GovernedDocumentInteractionKind,\n GovernedDocumentPublicClauseStanding,\n GovernedDocumentPublicDocumentKind,\n requiresApprovedGovernedDocuments,\n resolveInForcePublicDocument,\n type GovernedDocumentPublicDocument,\n} from '@wildo-ai/saas-models';\n\n// The markdown renderer is THIS package's, so it is reached by its own path rather than through the\n// engine barrel — `presets-components` is where the theme-mapped renderer lives.\nimport { MarkdownContent } from '~wildo-presets/components/data-display/markdown-content';\nimport { FrontendComponentType, PublicLayoutsTermsLabel, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\n\nconst CT = FrontendComponentType.PUBLIC_LAYOUTS_TERMS;\n\n/**\n * The public governed-document page. Issue #168, and #968 for what it serves.\n *\n * Reads the application's own `compliance.publicDocuments` — each entry a composed release with the\n * text it carries, or the latest draft of a document the application has never released. The page\n * is a RENDERING of that specification, never a second description of it, which is why it takes no\n * title, no body and no effective date as props: every one of them would be a place the page could\n * disagree with the document.\n *\n * ## Four states\n *\n * **Not settled** — labels are still resolving. A loading line, because rendering a legal document\n * with unresolved labels around it is worse than rendering nothing for a moment.\n *\n * **Nothing to show** — no release for this ref is in force (or none is approved, when the gate is\n * armed), and no draft may stand in. The page says so and shows NO content. There is deliberately no\n * partial render: a legal statement half-shown is worse than one not shown, because a reader cannot\n * tell which half is missing.\n *\n * **Released** — the document, its sections and clauses in their declared order, with the release\n * version and effective date beneath the title. `bodyMarkdown` goes through `MarkdownContent`, which\n * renders markdown as TEXT through the active theme's typography recipes; the schema's own note says\n * public content \"is never trusted as raw HTML\", and this is where that holds.\n *\n * **Unreleased draft** — the same rendering, with a notice in place of the release metadata saying\n * the reader is looking at a draft. There is no effective date to show because nothing took effect.\n * It exists so that neither a missing approval nor a missing release leaves the page empty (#968).\n *\n * ## Unestablished clauses are MARKED, in either state\n *\n * A clause the drafter could not yet establish is rendered with a note beneath it saying so and what\n * is missing. Omitting it would narrow the document; showing it bare would state as settled what the\n * application itself wrote down as unsettled.\n *\n * ## What it does not decide\n *\n * Whether an UNAPPROVED release — or a draft — may be shown. That is the application's approval gate,\n * `compliance.governedDocumentApprovalGate`, read through `requiresApprovedGovernedDocuments` — the same\n * reading every acceptance surface uses, so the page cannot be armed without them (#1565). It used to\n * be a prop the route passed, which is exactly how it could be armed here alone. See\n * `.claude/rules/one-source-of-truth.md` D5 for why arming it belongs to Gate 3.\n */\nexport const PublicLayoutPreset_Terms_Default = ({\n documentRef,\n}: PublicLayoutPreset_Terms_DefaultProps): React.JSX.Element => {\n const { appConfig } = useApplication();\n const { tComponent, isReady } = useI18n({ component: CT });\n const { getRecipe } = useUI();\n const { user, auth } = useUserOrgs();\n const { initAnonymousSession } = useAnonymousSession();\n const heading = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const body = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.BODY);\n\n /*\n * Pinned at mount rather than re-evaluated per render. A release taking effect while somebody is\n * READING would otherwise swap the document under them mid-paragraph — the reading equivalent of\n * the registration form's own \"what am I agreeing to\" hazard.\n */\n const document = React.useMemo<GovernedDocumentPublicDocument | undefined>(\n () => resolveInForcePublicDocument(\n appConfig.compliance?.publicDocuments ?? [],\n documentRef,\n new Date().toISOString(),\n { requireApproved: requiresApprovedGovernedDocuments(appConfig.compliance) },\n ),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- pinned at mount, deliberately; see above.\n [appConfig.compliance?.publicDocuments, documentRef, appConfig.compliance?.governedDocumentApprovalGate],\n );\n\n /*\n * Record NOTICE_DELIVERED once, on MOUNT — never per render — for the exact release this page is\n * showing (#1258 Step 5 / R11). Fire-and-forget: a delivery record failing to write must never\n * affect the page the reader already sees.\n *\n * Two guards keep this from writing the \"47 identical reads\" the #51 lesson warns about\n * (`recordGovernedDocumentAcceptances`'s own header cites it): the effect's own empty-ish deps\n * fire it once per mount, and a `sessionStorage` flag skips a repeat visit to the same document +\n * release within the same browser tab. Neither is a hard guarantee against every duplicate — the\n * recorder's own JSDoc explains why a rare true duplicate is tolerated rather than built out with a\n * second queryable resource.\n *\n * Reader identity: a signed-in person's own bearer-token route, or the anonymous-session door —\n * whichever the person currently is. **Waits for `auth.isRestoringSession` to clear first**, and\n * that wait is load-bearing, not cosmetic (review finding F1, #1258 Steps 4-5): a stored access\n * token resolves ASYNCHRONOUSLY, over a real network round-trip\n * (`AuthSessionContext`/`UserOrgsContext`) — an earlier draft of this comment claimed the resolve\n * was synchronous and that \"signed out\" and \"not yet known\" were indistinguishable, and both\n * halves were wrong. A signed-in person landing directly on `/terms` or `/privacy` on a fresh page\n * load (an emailed link, the R7 re-acceptance redirect) would otherwise be read as signed-out for\n * the one render this effect fires on, mint a throwaway anonymous session via\n * `initAnonymousSession()`, and have their delivery permanently misattributed to it — nothing ever\n * reconciles a stray session created this way back onto the account, unlike Step 1's carry, which\n * only runs at registration/authentication. `AppLayout_AuthenticatedRoute.tsx` already gates on\n * exactly this signal for exactly this reason; this effect now does the same.\n */\n React.useEffect(() => {\n if (auth.isRestoringSession) return;\n if (document?.kind !== GovernedDocumentPublicDocumentKind.RELEASED) return;\n if (!document.release.allowedInteractionKinds.includes(GovernedDocumentInteractionKind.NOTICE_DELIVERED)) return;\n\n const sessionKey = `wildo:notice-delivered:${documentRef}:${document.release.identity.releaseId}@${document.release.identity.releaseVersion}`;\n try {\n if (window.sessionStorage.getItem(sessionKey)) return;\n window.sessionStorage.setItem(sessionKey, '1');\n } catch {\n // Storage unavailable (private browsing, quota) — proceed and risk a duplicate row rather than\n // never recording delivery at all.\n }\n\n const client = getManualCallsHttpClient();\n if (user !== null) {\n void client.recordGovernedDocumentNoticeDelivered(documentRef);\n } else {\n // A first-ever visit has no anonymous session yet — `record_consent`'s own door needed the\n // same thing before Step 1a existed. `initAnonymousSession` is a no-op returning the existing\n // id when one is already ACTIVE, so this is safe to call unconditionally here.\n initAnonymousSession();\n void client.recordAnonymousGovernedDocumentNoticeDelivered(documentRef);\n }\n // `auth.isRestoringSession` is a real dependency, not a suppressed one: this effect must re-run\n // the instant it clears, which is the whole point of the gate above. `user`/`initAnonymousSession`\n // are read fresh inside the effect and are stable enough not to cause a spurious re-fire past the\n // sessionStorage guard, which is what the suppression below still covers.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- fires once per mount for this release; see above.\n }, [document, documentRef, auth.isRestoringSession]);\n\n if (!isReady) {\n return (\n <PublicLayout_MainContainer>\n <p className={cn(body.base, 'text-muted-foreground')}>{tComponent(CT, PublicLayoutsTermsLabel.LOADING)}</p>\n </PublicLayout_MainContainer>\n );\n }\n\n if (!document) {\n return (\n <PublicLayout_MainContainer>\n <div className=\"mx-auto flex max-w-prose flex-col gap-element\">\n <h1 className={cn(heading.base, heading.sizes?.h1 ?? 'text-3xl')}>\n {tComponent(CT, PublicLayoutsTermsLabel.UNAVAILABLE_TITLE)}\n </h1>\n <p className={cn(body.base, 'text-muted-foreground')}>\n {tComponent(CT, PublicLayoutsTermsLabel.UNAVAILABLE_DESCRIPTION)}\n </p>\n </div>\n </PublicLayout_MainContainer>\n );\n }\n\n const { content } = document;\n\n return (\n <PublicLayout_MainContainer>\n {/*\n * `lang` is the document's OWN locale, not the reader's. A French notice read in an English\n * browser is still French, and announcing it as English makes a screen reader pronounce it\n * wrongly — the one accessibility defect a document page can introduce that its own content\n * cannot fix.\n */}\n <article className=\"mx-auto flex max-w-prose flex-col gap-section\" lang={content.locale}>\n <header className=\"flex flex-col gap-element-sm\">\n <h1 className={cn(heading.base, heading.sizes?.h1 ?? 'text-3xl')}>{content.title}</h1>\n {document.kind === GovernedDocumentPublicDocumentKind.RELEASED ? (\n <dl className={cn(body.base, 'flex flex-wrap gap-field text-sm text-muted-foreground')}>\n <div className=\"flex gap-element-sm\">\n <dt>{tComponent(CT, PublicLayoutsTermsLabel.EFFECTIVE_AT)}</dt>\n {/* The machine-readable value stays in `dateTime`; the text is the reader's locale. */}\n <dd>\n <time dateTime={document.release.effectiveAt}>{new Date(document.release.effectiveAt).toLocaleDateString()}</time>\n </dd>\n </div>\n <div className=\"flex gap-element-sm\">\n <dt>\n {tComponent(CT, PublicLayoutsTermsLabel.RELEASE_VERSION, { releaseVersion: document.release.identity.releaseVersion })}\n </dt>\n </div>\n </dl>\n ) : (\n <p role=\"note\" className={cn(body.base, 'text-sm text-muted-foreground')}>\n {tComponent(CT, PublicLayoutsTermsLabel.UNRELEASED_DRAFT_NOTICE)}\n </p>\n )}\n </header>\n {content.sections.map((section) => (\n <section key={section.sectionRef} className=\"flex flex-col gap-element\">\n <h2 className={cn(heading.base, heading.sizes?.h2 ?? 'text-2xl')}>{section.title}</h2>\n {section.clauses.map((clause) => (\n <div key={clause.clauseRef} className=\"flex flex-col gap-element-sm\">\n <MarkdownContent value={clause.bodyMarkdown} />\n {clause.standing === GovernedDocumentPublicClauseStanding.NOT_YET_ESTABLISHED && (\n <p role=\"note\" className={cn(body.base, 'text-sm text-muted-foreground')}>\n <span>{tComponent(CT, PublicLayoutsTermsLabel.CLAUSE_NOT_YET_ESTABLISHED)}</span> <span>{clause.missingInformation}</span>\n </p>\n )}\n </div>\n ))}\n </section>\n ))}\n </article>\n </PublicLayout_MainContainer>\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-format.utils.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"billing-format.utils.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-format.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAK3D;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,MAAM,CAe9D"}
|