@wildo-ai/presets-components 1.1.4 → 1.1.6
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 +65 -8
- 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.js +8 -1
- package/dist/esm/components/ai-elements/chat/suggestion.js.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 +124 -17
- package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.js +105 -13
- 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 +3 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.js +3 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.js.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 +9 -0
- package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.js +17 -23
- package/dist/esm/components/app/app-layout-main-container.js.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 +48 -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 +25 -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 +22 -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 +10 -4
- 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 +8 -1
- 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 +10 -7
- 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 +4 -1
- 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 +29 -11
- 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 +14 -15
- 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 +2 -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 +8 -3
- 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-number.labels.js +5 -2
- package/dist/esm/components/data-display/formatters/display-field-number.labels.js.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 +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 +129 -15
- 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/data-display/untrusted-html-content.d.ts +55 -0
- package/dist/esm/components/data-display/untrusted-html-content.d.ts.map +1 -0
- package/dist/esm/components/data-display/untrusted-html-content.js +67 -0
- package/dist/esm/components/data-display/untrusted-html-content.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.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 +5 -5
- 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 +37 -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 +14 -13
- 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/address/providers/google-places-address-lookup.adapter.d.ts +42 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js +120 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts +16 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js +8 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js.map +1 -0
- 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 +3 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +3 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +6 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +8 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +6 -2
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +6 -2
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +6 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +8 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -1
- 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.js +2 -2
- package/dist/esm/components/navigation/app-level/activity-bar.js.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.js +10 -4
- package/dist/esm/components/navigation/app-level/menu-user-org.js.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/menu-user-org.labels.js +7 -0
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.js.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 +36 -14
- 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 +31 -5
- 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 +41 -25
- 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.js +2 -2
- package/dist/esm/components/navigation/app-level/status-bar.js.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.js +2 -2
- package/dist/esm/components/navigation/app-level/toolbar.js.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 +24 -6
- 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.js +1 -1
- package/dist/esm/components/navigation/breadcrumb.js.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.js +5 -3
- package/dist/esm/components/sections/stepper.js.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 +60 -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 +23 -7
- 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/agent-work.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/agent-work.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/agent-work.resource-presets.js +115 -0
- package/dist/esm/config/resources/agent-work.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/api-key-rotation-window.d.ts +22 -0
- package/dist/esm/config/resources/api-key-rotation-window.d.ts.map +1 -0
- package/dist/esm/config/resources/api-key-rotation-window.js +45 -0
- package/dist/esm/config/resources/api-key-rotation-window.js.map +1 -0
- 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 +268 -26
- package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.d.ts +4 -3
- package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.js +241 -111
- package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.js +105 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.js +39 -16
- package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.d.ts +0 -13
- package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.js +71 -17
- package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts +6 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.js +112 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.js +182 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/index.d.ts.map +1 -1
- package/dist/esm/config/resources/index.js +9 -2
- package/dist/esm/config/resources/index.js.map +1 -1
- package/dist/esm/config/resources/legal-holds.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.js +76 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.js +216 -35
- package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.d.ts +20 -0
- package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.js +20 -0
- package/dist/esm/config/resources/resource.config.utils.js.map +1 -1
- package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts +5 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.js +74 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/security.resource-presets.d.ts +11 -3
- package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.js +685 -99
- package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/service-providers.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/service-providers.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/service-providers.resource-presets.js +321 -0
- package/dist/esm/config/resources/service-providers.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts +4 -3
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/webhooks.resource-presets.js +102 -26
- 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 +63 -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 +32 -4
- package/dist/esm/registration/register-default-presets.js.map +1 -1
- package/dist/esm/registration/register-provider-components.d.ts.map +1 -1
- package/dist/esm/registration/register-provider-components.js +11 -0
- package/dist/esm/registration/register-provider-components.js.map +1 -1
- 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 +76 -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 +31 -45
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-invoice-history.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-invoice-history.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * InvoiceHistory (Preset)\n *\n * Displays a list of recent invoices with status badge, total amount,\n * date, and links to view/download the invoice from the billing provider.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of dates and monetary amounts, respecting user/org regional preferences.\n */\n\nimport { FrontendComponentType, IndicatorVariant, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n InvoiceHistoryProps,\n Alert,\n AlertDescription,\n Button,\n ButtonVariants_Variant,\n cn,\n IconSize,\n Skeleton,\n StandardIconReference,\n useI18n,\n useIconRegistry,\n useUI,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { ButtonSize } from '@wildo-ai/presets-components-models';\nimport React, { useCallback, useMemo } from 'react';\nimport { useFormatMoney } from './billing-format.utils';\n\n// ── Status badge mapping (IndicatorVariant) ──────────────────────────\n\ninterface StatusBadgeConfig {\n labelKey: string;\n indicatorVariant: IndicatorVariant;\n}\n\nconst STATUS_BADGE_CONFIG: Record<string, StatusBadgeConfig> = {\n paid: { labelKey: 'paidBadge', indicatorVariant: IndicatorVariant.SUCCESS },\n open: { labelKey: 'openBadge', indicatorVariant: IndicatorVariant.INFO },\n draft: { labelKey: 'draftBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n void: { labelKey: 'voidBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n uncollectible: { labelKey: 'uncollectibleBadge', indicatorVariant: IndicatorVariant.ERROR },\n};\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function InvoiceHistory({\n invoices,\n providerName,\n isLoading,\n error,\n onViewAll,\n limit = 10,\n}: InvoiceHistoryProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatDate, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_INVOICE_HISTORY });\n const { renderIcon } = useIconRegistry();\n const formatMoney = useFormatMoney();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_INVOICE_HISTORY),\n [makeTrComponent],\n );\n\n const displayInvoices = useMemo(\n () => invoices.slice(0, limit),\n [invoices, limit],\n );\n\n const formatDisplayDate = useCallback((date: Date | string | null | undefined): string => {\n if (!date) return '';\n const d = typeof date === 'string' ? new Date(date) : date;\n return formatDate(d);\n }, [formatDate]);\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <Skeleton className=\"h-5 w-32 mb-section\" />\n <div className=\"space-y-element\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between py-3\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n <Skeleton className=\"h-4 w-24\" />\n </div>\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-4 w-16\" />\n <Skeleton className=\"h-8 w-8 rounded-md\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </Surface>\n );\n }\n\n if (!isReady) return null;\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-section\">\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md)}>{t('title')}</h3>\n {onViewAll && invoices.length > limit && (\n <Button variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} onClick={onViewAll}>\n <span>{t('viewAll')}</span>\n {providerName && (\n <span className={cn(descriptionRecipe.base, \"text-xs\")}>\n {providerName}\n </span>\n )}\n </Button>\n )}\n </div>\n\n {/* Empty state */}\n {displayInvoices.length === 0 && (\n <p className={cn(descriptionRecipe.base, \"py-4 text-center\")}>\n {t('emptyState')}\n </p>\n )}\n\n {/* Invoice list */}\n {displayInvoices.length > 0 && (\n <div className=\"divide-y divide-border\">\n {displayInvoices.map((invoice) => {\n const badgeConfig = STATUS_BADGE_CONFIG[invoice.status] ?? STATUS_BADGE_CONFIG.draft;\n const badgeRecipe = getRecipe(UIBehavior.INDICATOR, badgeConfig.indicatorVariant);\n\n return (\n <div key={invoice._id} className=\"flex items-center justify-between py-3 first:pt-0 last:pb-0\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <span className={cn(\"inline-flex items-center px-2 py-0.5 shrink-0\", badgeRecipe.base, \"rounded-full\")}>\n {t(badgeConfig.labelKey)}\n </span>\n <span className={cn(descriptionRecipe.base, \"truncate\")}>\n {formatDisplayDate(invoice.createdAt)}\n </span>\n </div>\n\n {/*\n No per-row document link. The provider-hosted invoice URLs are\n `.isBackendOnly()` and never reach the client: they are unauthenticated\n capability links to a document that legally carries the customer's name and\n billing address. Invoice DOCUMENTS are reached through the provider's customer\n portal (the footer / header action below), which authenticates the viewer\n provider-side — the conventional SaaS shape.\n */}\n <div className=\"flex items-center gap-3 shrink-0\">\n <span className={cn(descriptionRecipe.base, \"font-medium text-foreground\")}>\n {formatMoney(invoice.total)}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Footer: View all button when within limit but portal is available */}\n {onViewAll && displayInvoices.length > 0 && invoices.length <= limit && (\n <div className=\"mt-section pt-section border-t border-border\">\n <Button variant={ButtonVariants_Variant.SECONDARY} size={ButtonSize.SM} onClick={onViewAll} className=\"w-full\">\n {renderIcon(StandardIconReference.EXTERNAL_LINK, { size: IconSize.SM })}\n <span>{t('manageInvoices')}</span>\n {providerName && (\n <span className={cn(descriptionRecipe.base, \"text-xs\")}>\n {providerName}\n </span>\n )}\n </Button>\n </div>\n )}\n </div>\n </Surface>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"billing-invoice-history.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-invoice-history.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * InvoiceHistory (Preset)\n *\n * Displays a list of recent invoices with status badge, total amount,\n * date, and links to view/download the invoice from the billing provider.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of dates and monetary amounts, respecting user/org regional preferences.\n */\n\nimport { FrontendComponentType, IndicatorVariant, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n InvoiceHistoryProps,\n Alert,\n AlertDescription,\n Button,\n ButtonVariants_Variant,\n cn,\n IconSize,\n Skeleton,\n StandardIconReference,\n useI18n,\n useIconRegistry,\n useUI,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\n\nimport { ButtonSize } from '@wildo-ai/presets-components-models';\nimport React, { useCallback, useMemo } from 'react';\nimport { useFormatMoney } from './billing-format.utils';\n\n// ── Status badge mapping (IndicatorVariant) ──────────────────────────\n\ninterface StatusBadgeConfig {\n labelKey: string;\n indicatorVariant: IndicatorVariant;\n}\n\nconst STATUS_BADGE_CONFIG: Record<string, StatusBadgeConfig> = {\n paid: { labelKey: 'paidBadge', indicatorVariant: IndicatorVariant.SUCCESS },\n open: { labelKey: 'openBadge', indicatorVariant: IndicatorVariant.INFO },\n draft: { labelKey: 'draftBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n void: { labelKey: 'voidBadge', indicatorVariant: IndicatorVariant.NEUTRAL },\n uncollectible: { labelKey: 'uncollectibleBadge', indicatorVariant: IndicatorVariant.ERROR },\n};\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function InvoiceHistory({\n invoices,\n providerName,\n isLoading,\n error,\n unavailable,\n onViewAll,\n limit = 10,\n}: InvoiceHistoryProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatDate, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_INVOICE_HISTORY });\n const { renderIcon } = useIconRegistry();\n const formatMoney = useFormatMoney();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_INVOICE_HISTORY),\n [makeTrComponent],\n );\n\n const displayInvoices = useMemo(\n () => invoices.slice(0, limit),\n [invoices, limit],\n );\n\n const formatDisplayDate = useCallback((date: Date | string | null | undefined): string => {\n if (!date) return '';\n const d = typeof date === 'string' ? new Date(date) : date;\n return formatDate(d);\n }, [formatDate]);\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <Skeleton className=\"h-5 w-32 mb-section\" />\n <div className=\"space-y-element\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between py-3\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n <Skeleton className=\"h-4 w-24\" />\n </div>\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-4 w-16\" />\n <Skeleton className=\"h-8 w-8 rounded-md\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n </Surface>\n );\n }\n\n if (!isReady) return null;\n\n if (unavailable) return <Alert variant=\"destructive\"><AlertDescription>{t('unavailable')}</AlertDescription></Alert>;\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n {/* Header */}\n <div className=\"flex items-center justify-between mb-section\">\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md)}>{t('title')}</h3>\n {onViewAll && invoices.length > limit && (\n <Button variant={ButtonVariants_Variant.GHOST} size={ButtonSize.SM} onClick={onViewAll}>\n <span>{t('viewAll')}</span>\n {providerName && (\n <span className={cn(descriptionRecipe.base, \"text-xs\")}>\n {providerName}\n </span>\n )}\n </Button>\n )}\n </div>\n\n {/* Empty state */}\n {displayInvoices.length === 0 && (\n <p className={cn(descriptionRecipe.base, \"py-4 text-center\")}>\n {t('emptyState')}\n </p>\n )}\n\n {/* Invoice list */}\n {displayInvoices.length > 0 && (\n <div className=\"divide-y divide-border\">\n {displayInvoices.map((invoice) => {\n const badgeConfig = STATUS_BADGE_CONFIG[invoice.status] ?? STATUS_BADGE_CONFIG.draft;\n const badgeRecipe = getRecipe(UIBehavior.INDICATOR, badgeConfig.indicatorVariant);\n\n return (\n <div key={invoice._id} className=\"flex items-center justify-between py-3 first:pt-0 last:pb-0\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <span className={cn(\"inline-flex items-center px-2 py-0.5 shrink-0\", badgeRecipe.base, \"rounded-full\")}>\n {t(badgeConfig.labelKey)}\n </span>\n <span className={cn(descriptionRecipe.base, \"truncate\")}>\n {formatDisplayDate(invoice.createdAt)}\n </span>\n </div>\n\n {/*\n No per-row document link. The provider-hosted invoice URLs are\n `.isBackendOnly()` and never reach the client: they are unauthenticated\n capability links to a document that legally carries the customer's name and\n billing address. Invoice DOCUMENTS are reached through the provider's customer\n portal (the footer / header action below), which authenticates the viewer\n provider-side — the conventional SaaS shape.\n */}\n <div className=\"flex items-center gap-3 shrink-0\">\n <span className={cn(descriptionRecipe.base, \"font-medium text-foreground\")}>\n {formatMoney(invoice.total)}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {/* Footer: View all button when within limit but portal is available */}\n {onViewAll && displayInvoices.length > 0 && invoices.length <= limit && (\n <div className=\"mt-section pt-section border-t border-border\">\n <Button variant={ButtonVariants_Variant.SECONDARY} size={ButtonSize.SM} onClick={onViewAll} className=\"w-full\">\n {renderIcon(StandardIconReference.EXTERNAL_LINK, { size: IconSize.SM })}\n <span>{t('manageInvoices')}</span>\n {providerName && (\n <span className={cn(descriptionRecipe.base, \"text-xs\")}>\n {providerName}\n </span>\n )}\n </Button>\n </div>\n )}\n </div>\n </Surface>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-invoice-history.labels.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"billing-invoice-history.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-invoice-history.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAM7C,eAAO,MAAM,mCAAmC,EAAE,mBAAmB,EAcpE,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { FrontendComponentType, LabelKind, registerComponentLabels, } from '@wil
|
|
|
3
3
|
// purpose / kind / variable meaning. Statically scanned by the dev companion;
|
|
4
4
|
// NOT imported at runtime, so it never ships in the bundle.
|
|
5
5
|
export const LowLevelBillingInvoiceHistoryLabels = [
|
|
6
|
+
{ ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },
|
|
6
7
|
{ ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the invoice history panel' },
|
|
7
8
|
{ ref: 'viewAll', kind: LabelKind.BUTTON, purpose: 'Action that expands the list to show every invoice' },
|
|
8
9
|
{ ref: 'emptyState', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when the customer has no invoices yet' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-invoice-history.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-invoice-history.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,mCAAmC,GAA0B;IACxE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,uCAAuC,EAAE;IAC3F,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,oDAAoD,EAAE;IACzG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,6CAA6C,EAAE;IAC1G,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE;IACtG,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,8CAA8C,EAAE;IACpG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,+CAA+C,EAAE;IACtG,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,6CAA6C,EAAE;IACnG,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,kDAAkD,EAAE;IACjH,qFAAqF;IACrF,+FAA+F;IAC/F,wCAAwC;IACxC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,6DAA6D,EAAE;CAC1H,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,iCAAiC,EAAE,mCAAmC,CAAC,CAAC","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + per-key\n// purpose / kind / variable meaning. Statically scanned by the dev companion;\n// NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelBillingInvoiceHistoryLabels: LabellingUnitaryDef[] = [\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the invoice history panel' },\n { ref: 'viewAll', kind: LabelKind.BUTTON, purpose: 'Action that expands the list to show every invoice' },\n { ref: 'emptyState', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when the customer has no invoices yet' },\n { ref: 'paidBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice that has been paid' },\n { ref: 'openBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice awaiting payment' },\n { ref: 'draftBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice not yet finalised' },\n { ref: 'voidBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice that was voided' },\n { ref: 'uncollectibleBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice marked uncollectible' },\n // No per-invoice `viewInvoice` / `downloadPdf` actions: the provider-hosted URLs are\n // `.isBackendOnly()` and never reach the client, so invoice DOCUMENTS are reached only through\n // the provider's customer portal below.\n { ref: 'manageInvoices', kind: LabelKind.BUTTON, purpose: 'Action that opens the billing portal to manage all invoices' },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_INVOICE_HISTORY, LowLevelBillingInvoiceHistoryLabels);\n"]}
|
|
1
|
+
{"version":3,"file":"billing-invoice-history.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-invoice-history.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,mCAAmC,GAA0B;IACxE,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,4GAA4G,EAAE;IAC1K,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,uCAAuC,EAAE;IAC3F,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,oDAAoD,EAAE;IACzG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,6CAA6C,EAAE;IAC1G,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE;IACtG,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,8CAA8C,EAAE;IACpG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,+CAA+C,EAAE;IACtG,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,6CAA6C,EAAE;IACnG,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,kDAAkD,EAAE;IACjH,qFAAqF;IACrF,+FAA+F;IAC/F,wCAAwC;IACxC,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,6DAA6D,EAAE;CAC1H,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,iCAAiC,EAAE,mCAAmC,CAAC,CAAC","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + per-key\n// purpose / kind / variable meaning. Statically scanned by the dev companion;\n// NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelBillingInvoiceHistoryLabels: LabellingUnitaryDef[] = [\n { ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the invoice history panel' },\n { ref: 'viewAll', kind: LabelKind.BUTTON, purpose: 'Action that expands the list to show every invoice' },\n { ref: 'emptyState', kind: LabelKind.EMPTY_STATE, purpose: 'Shown when the customer has no invoices yet' },\n { ref: 'paidBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice that has been paid' },\n { ref: 'openBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice awaiting payment' },\n { ref: 'draftBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice not yet finalised' },\n { ref: 'voidBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice that was voided' },\n { ref: 'uncollectibleBadge', kind: LabelKind.LABEL, purpose: 'Status badge for an invoice marked uncollectible' },\n // No per-invoice `viewInvoice` / `downloadPdf` actions: the provider-hosted URLs are\n // `.isBackendOnly()` and never reach the client, so invoice DOCUMENTS are reached only through\n // the provider's customer portal below.\n { ref: 'manageInvoices', kind: LabelKind.BUTTON, purpose: 'Action that opens the billing portal to manage all invoices' },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_INVOICE_HISTORY, LowLevelBillingInvoiceHistoryLabels);\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PlanChangePreviewProps } from '@wildo-ai/saas-frontend-lib';
|
|
3
|
+
/** Provider invoice estimate; amount due is not presented as a promise of immediate collection. */
|
|
4
|
+
export declare function PlanChangePreview({ preview, targetPlanName, isLoading, isConfirming, hasError, onConfirm, onCancel, onRetry }: PlanChangePreviewProps): React.JSX.Element | null;
|
|
5
|
+
//# sourceMappingURL=billing-plan-change-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing-plan-change-preview.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-plan-change-preview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4C,MAAM,OAAO,CAAC;AAGjE,OAAO,EAAE,KAAK,sBAAsB,EAAkG,MAAM,6BAA6B,CAAC;AAG1K,mGAAmG;AACnG,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,sBAAsB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2ChL"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useId, useMemo, useRef } from 'react';
|
|
3
|
+
import { FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';
|
|
4
|
+
import { BillingTiming } from '@wildo-ai/saas-models';
|
|
5
|
+
import { Alert, AlertDescription, Button, ButtonVariants_Variant, cn, Skeleton, Surface, useI18n, useUI } from '@wildo-ai/saas-frontend-lib';
|
|
6
|
+
import { useFormatMoney } from './billing-format.utils.js';
|
|
7
|
+
/** Provider invoice estimate; amount due is not presented as a promise of immediate collection. */
|
|
8
|
+
export function PlanChangePreview({ preview, targetPlanName, isLoading, isConfirming, hasError, onConfirm, onCancel, onRetry }) {
|
|
9
|
+
const { getRecipe } = useUI();
|
|
10
|
+
const { makeTrComponent, formatDate, formatNumber, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_PLAN_CHANGE_PREVIEW });
|
|
11
|
+
const t = useMemo(() => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_PLAN_CHANGE_PREVIEW), [makeTrComponent]);
|
|
12
|
+
const formatMoney = useFormatMoney();
|
|
13
|
+
const headingId = useId();
|
|
14
|
+
const panel = useRef(null);
|
|
15
|
+
useEffect(() => { if (isReady)
|
|
16
|
+
panel.current?.focus(); }, [isReady]);
|
|
17
|
+
const heading = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);
|
|
18
|
+
const description = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);
|
|
19
|
+
if (!isReady)
|
|
20
|
+
return null;
|
|
21
|
+
// A change at the end of the period charges nothing now: the estimate is the renewal invoice on the new plan (#1868).
|
|
22
|
+
const deferred = preview?.timing === BillingTiming.AT_PERIOD_END;
|
|
23
|
+
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsxs("section", { ref: panel, tabIndex: -1, "aria-labelledby": headingId, "aria-busy": !!isLoading || !!isConfirming, className: "p-card space-y-card", children: [_jsx("h3", { id: headingId, className: cn(heading.base, heading.sizes?.md), children: t('title', { plan: targetPlanName }) }), _jsx("p", { className: description.base, children: t(deferred ? 'deferredEstimateExplanation' : 'estimateExplanation') }), hasError && _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: t(preview ? 'confirmationFailed' : 'previewFailed') }) }), isLoading && _jsxs("div", { role: "status", children: [_jsx("span", { children: t('loading') }), _jsx(Skeleton, { className: "h-8 w-32" })] }), preview && !isLoading && (_jsxs("div", { className: "space-y-element", children: [_jsxs("dl", { children: [deferred && _jsxs(_Fragment, { children: [_jsx("dt", { className: description.base, children: t('effectiveAt') }), _jsx("dd", { className: heading.base, children: formatDate(preview.effectiveAt) })] }), _jsx("dt", { className: description.base, children: t('amountDue') }), _jsx("dd", { className: heading.base, children: formatMoney(preview.amount) }), _jsx("dt", { className: description.base, children: t('invoicePeriod') }), _jsxs("dd", { children: [formatDate(preview.periodStart), " \u2014 ", formatDate(preview.periodEnd)] })] }), _jsx("ul", { className: "space-y-element", "aria-label": t('lineItems'), children: preview.lineItems.map((item, index) => _jsxs("li", { className: "flex flex-wrap justify-between gap-element", children: [_jsxs("span", { children: [item.description, " ", _jsx("span", { className: description.base, children: t('quantity', { quantity: formatNumber(item.quantity) }) })] }), _jsx("span", { children: formatMoney(item.amount) })] }, index)) }), _jsx("p", { className: description.base, children: t(deferred ? 'deferredConfirmationExplanation' : 'confirmationExplanation') })] })), _jsxs("div", { className: "flex flex-wrap gap-element", children: [_jsx(Button, { onClick: onCancel, disabled: isConfirming, variant: ButtonVariants_Variant.OUTLINE, children: t('cancel') }), onRetry && !isConfirming && _jsx(Button, { onClick: onRetry, disabled: isLoading, variant: ButtonVariants_Variant.OUTLINE, children: t('retryPreview') }), preview && onConfirm && _jsx(Button, { onClick: onConfirm, disabled: isLoading || isConfirming, children: t(isConfirming ? 'confirming' : 'confirmChange') })] })] }) }));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=billing-plan-change-preview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing-plan-change-preview.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-plan-change-preview.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useId, useMemo, useRef } from 'react';\nimport { FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport { BillingTiming } from '@wildo-ai/saas-models';\nimport { type PlanChangePreviewProps, Alert, AlertDescription, Button, ButtonVariants_Variant, cn, Skeleton, Surface, useI18n, useUI } from '@wildo-ai/saas-frontend-lib';\nimport { useFormatMoney } from './billing-format.utils';\n\n/** Provider invoice estimate; amount due is not presented as a promise of immediate collection. */\nexport function PlanChangePreview({ preview, targetPlanName, isLoading, isConfirming, hasError, onConfirm, onCancel, onRetry }: PlanChangePreviewProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatDate, formatNumber, isReady } = useI18n({ component: FrontendComponentType.LOW_LEVEL_BILLING_PLAN_CHANGE_PREVIEW });\n const t = useMemo(() => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_PLAN_CHANGE_PREVIEW), [makeTrComponent]);\n const formatMoney = useFormatMoney();\n const headingId = useId();\n const panel = useRef<HTMLElement>(null);\n useEffect(() => { if (isReady) panel.current?.focus(); }, [isReady]);\n const heading = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const description = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n if (!isReady) return null;\n // A change at the end of the period charges nothing now: the estimate is the renewal invoice on the new plan (#1868).\n const deferred = preview?.timing === BillingTiming.AT_PERIOD_END;\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <section ref={panel} tabIndex={-1} aria-labelledby={headingId} aria-busy={!!isLoading || !!isConfirming} className=\"p-card space-y-card\">\n <h3 id={headingId} className={cn(heading.base, heading.sizes?.md)}>{t('title', { plan: targetPlanName })}</h3>\n <p className={description.base}>{t(deferred ? 'deferredEstimateExplanation' : 'estimateExplanation')}</p>\n {hasError && <Alert variant=\"destructive\"><AlertDescription>{t(preview ? 'confirmationFailed' : 'previewFailed')}</AlertDescription></Alert>}\n {isLoading && <div role=\"status\"><span>{t('loading')}</span><Skeleton className=\"h-8 w-32\" /></div>}\n {preview && !isLoading && (\n <div className=\"space-y-element\">\n <dl>\n {deferred && <><dt className={description.base}>{t('effectiveAt')}</dt><dd className={heading.base}>{formatDate(preview.effectiveAt)}</dd></>}\n <dt className={description.base}>{t('amountDue')}</dt>\n <dd className={heading.base}>{formatMoney(preview.amount)}</dd>\n <dt className={description.base}>{t('invoicePeriod')}</dt>\n <dd>{formatDate(preview.periodStart)} — {formatDate(preview.periodEnd)}</dd>\n </dl>\n <ul className=\"space-y-element\" aria-label={t('lineItems')}>\n {preview.lineItems.map((item, index) => <li key={index} className=\"flex flex-wrap justify-between gap-element\"><span>{item.description} <span className={description.base}>{t('quantity', { quantity: formatNumber(item.quantity) })}</span></span><span>{formatMoney(item.amount)}</span></li>)}\n </ul>\n <p className={description.base}>{t(deferred ? 'deferredConfirmationExplanation' : 'confirmationExplanation')}</p>\n </div>\n )}\n <div className=\"flex flex-wrap gap-element\">\n <Button onClick={onCancel} disabled={isConfirming} variant={ButtonVariants_Variant.OUTLINE}>{t('cancel')}</Button>\n {onRetry && !isConfirming && <Button onClick={onRetry} disabled={isLoading} variant={ButtonVariants_Variant.OUTLINE}>{t('retryPreview')}</Button>}\n {preview && onConfirm && <Button onClick={onConfirm} disabled={isLoading || isConfirming}>{t(isConfirming ? 'confirming' : 'confirmChange')}</Button>}\n </div>\n </section>\n </Surface>\n );\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing-plan-change-preview.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-plan-change-preview.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,mBAAmB,EAA2B,MAAM,qCAAqC,CAAC;AAE1I,eAAO,MAAM,sCAAsC,EAAE,mBAAmB,EAkBvE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FrontendComponentType, LabelKind, registerComponentLabels } from '@wildo-ai/presets-components-models';
|
|
2
|
+
export const LowLevelBillingPlanChangePreviewLabels = [
|
|
3
|
+
{ ref: 'title', kind: LabelKind.HEADING, purpose: 'Review the proposed subscription plan change', params: [{ key: 'plan', meaning: 'selected target plan display name' }] },
|
|
4
|
+
{ ref: 'estimateExplanation', kind: LabelKind.LABEL, purpose: 'The provider estimates the upcoming invoice for this change; the amount is not a promise of immediate collection or final tax' },
|
|
5
|
+
{ ref: 'amountDue', kind: LabelKind.LABEL, purpose: 'Estimated invoice amount due, which can include other invoice lines; not merely the proration adjustment' },
|
|
6
|
+
{ ref: 'invoicePeriod', kind: LabelKind.LABEL, purpose: 'Start and end of the estimated invoice period, not the exact collection date' },
|
|
7
|
+
{ ref: 'quantity', kind: LabelKind.LABEL, purpose: 'Quantity represented by one estimated invoice line', params: [{ key: 'quantity', meaning: 'formatted invoice line quantity' }] },
|
|
8
|
+
{ ref: 'lineItems', kind: LabelKind.ARIA, purpose: 'Invoice estimate line items' },
|
|
9
|
+
{ ref: 'confirmationExplanation', kind: LabelKind.LABEL, purpose: 'Confirmation applies this selected plan change; the server verifies that the preview still matches the subscription and price' },
|
|
10
|
+
{ ref: 'deferredEstimateExplanation', kind: LabelKind.LABEL, purpose: 'This change takes effect at the end of the current billing period; the estimate is the renewal invoice on the new plan, and nothing is charged when the change is confirmed' },
|
|
11
|
+
{ ref: 'effectiveAt', kind: LabelKind.LABEL, purpose: 'Date the plan change takes effect: the end of the current billing period' },
|
|
12
|
+
{ ref: 'deferredConfirmationExplanation', kind: LabelKind.LABEL, purpose: 'Confirmation schedules this plan change for the end of the current billing period; the current plan stays in place until then, and the change can be withdrawn before it takes effect' },
|
|
13
|
+
{ ref: 'previewFailed', kind: LabelKind.EMPTY_STATE, purpose: 'The estimate could not be retrieved; no plan change was submitted. Retry or cancel' },
|
|
14
|
+
{ ref: 'confirmationFailed', kind: LabelKind.EMPTY_STATE, purpose: 'The plan change could not be confirmed. Retry the same confirmation or cancel; do not imply a failed response proves no provider change occurred' },
|
|
15
|
+
{ ref: 'loading', kind: LabelKind.LABEL, purpose: 'Retrieving the provider invoice estimate' },
|
|
16
|
+
{ ref: 'confirming', kind: LabelKind.BUTTON, purpose: 'The plan change confirmation is in progress' },
|
|
17
|
+
{ ref: 'confirmChange', kind: LabelKind.BUTTON, purpose: 'Explicitly confirm the currently displayed and server-bound plan change' },
|
|
18
|
+
{ ref: 'cancel', kind: LabelKind.BUTTON, purpose: 'Dismiss the preview without submitting a confirmation' },
|
|
19
|
+
{ ref: 'retryPreview', kind: LabelKind.BUTTON, purpose: 'Retry retrieving the estimate after a preview request failed' },
|
|
20
|
+
];
|
|
21
|
+
registerComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_PLAN_CHANGE_PREVIEW, LowLevelBillingPlanChangePreviewLabels);
|
|
22
|
+
//# sourceMappingURL=billing-plan-change-preview.labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"billing-plan-change-preview.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-plan-change-preview.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAA4B,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAE1I,MAAM,CAAC,MAAM,sCAAsC,GAA0B;IAC3E,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,8CAA8C,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,EAAE;IAC3K,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,+HAA+H,EAAE;IAC/L,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,0GAA0G,EAAE;IAChK,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,8EAA8E,EAAE;IACxI,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,oDAAoD,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,EAAE;IACpL,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,6BAA6B,EAAE;IAClF,EAAE,GAAG,EAAE,yBAAyB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,+HAA+H,EAAE;IACnM,EAAE,GAAG,EAAE,6BAA6B,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,6KAA6K,EAAE;IACrP,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,0EAA0E,EAAE;IAClI,EAAE,GAAG,EAAE,iCAAiC,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,uLAAuL,EAAE;IACnQ,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,oFAAoF,EAAE;IACpJ,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,kJAAkJ,EAAE;IACvN,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,0CAA0C,EAAE;IAC9F,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,6CAA6C,EAAE;IACrG,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,yEAAyE,EAAE;IACpI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,uDAAuD,EAAE;IAC3G,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,8DAA8D,EAAE;CACzH,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,qCAAqC,EAAE,sCAAsC,CAAC,CAAC","sourcesContent":["import { FrontendComponentType, LabelKind, type LabellingUnitaryDef, registerComponentLabels } from '@wildo-ai/presets-components-models';\n\nexport const LowLevelBillingPlanChangePreviewLabels: LabellingUnitaryDef[] = [\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Review the proposed subscription plan change', params: [{ key: 'plan', meaning: 'selected target plan display name' }] },\n { ref: 'estimateExplanation', kind: LabelKind.LABEL, purpose: 'The provider estimates the upcoming invoice for this change; the amount is not a promise of immediate collection or final tax' },\n { ref: 'amountDue', kind: LabelKind.LABEL, purpose: 'Estimated invoice amount due, which can include other invoice lines; not merely the proration adjustment' },\n { ref: 'invoicePeriod', kind: LabelKind.LABEL, purpose: 'Start and end of the estimated invoice period, not the exact collection date' },\n { ref: 'quantity', kind: LabelKind.LABEL, purpose: 'Quantity represented by one estimated invoice line', params: [{ key: 'quantity', meaning: 'formatted invoice line quantity' }] },\n { ref: 'lineItems', kind: LabelKind.ARIA, purpose: 'Invoice estimate line items' },\n { ref: 'confirmationExplanation', kind: LabelKind.LABEL, purpose: 'Confirmation applies this selected plan change; the server verifies that the preview still matches the subscription and price' },\n { ref: 'deferredEstimateExplanation', kind: LabelKind.LABEL, purpose: 'This change takes effect at the end of the current billing period; the estimate is the renewal invoice on the new plan, and nothing is charged when the change is confirmed' },\n { ref: 'effectiveAt', kind: LabelKind.LABEL, purpose: 'Date the plan change takes effect: the end of the current billing period' },\n { ref: 'deferredConfirmationExplanation', kind: LabelKind.LABEL, purpose: 'Confirmation schedules this plan change for the end of the current billing period; the current plan stays in place until then, and the change can be withdrawn before it takes effect' },\n { ref: 'previewFailed', kind: LabelKind.EMPTY_STATE, purpose: 'The estimate could not be retrieved; no plan change was submitted. Retry or cancel' },\n { ref: 'confirmationFailed', kind: LabelKind.EMPTY_STATE, purpose: 'The plan change could not be confirmed. Retry the same confirmation or cancel; do not imply a failed response proves no provider change occurred' },\n { ref: 'loading', kind: LabelKind.LABEL, purpose: 'Retrieving the provider invoice estimate' },\n { ref: 'confirming', kind: LabelKind.BUTTON, purpose: 'The plan change confirmation is in progress' },\n { ref: 'confirmChange', kind: LabelKind.BUTTON, purpose: 'Explicitly confirm the currently displayed and server-bound plan change' },\n { ref: 'cancel', kind: LabelKind.BUTTON, purpose: 'Dismiss the preview without submitting a confirmation' },\n { ref: 'retryPreview', kind: LabelKind.BUTTON, purpose: 'Retry retrieving the estimate after a preview request failed' },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_PLAN_CHANGE_PREVIEW, LowLevelBillingPlanChangePreviewLabels);\n"]}
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import React from 'react';
|
|
8
8
|
import { BillingPortalLinkProps } from '@wildo-ai/saas-frontend-lib';
|
|
9
|
-
export declare function BillingPortalLink({ onOpenPortal, providerName, isLoading, error, }: BillingPortalLinkProps): React.JSX.Element | null;
|
|
9
|
+
export declare function BillingPortalLink({ onOpenPortal, providerName, isLoading, error, unavailable, }: BillingPortalLinkProps): React.JSX.Element | null;
|
|
10
10
|
//# sourceMappingURL=billing-portal-link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-portal-link.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"billing-portal-link.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-portal-link.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAQL,sBAAsB,EAMvB,MAAM,6BAA6B,CAAC;AAIrC,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,EACL,WAAW,GACZ,EAAE,sBAAsB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAsEnD"}
|
|
@@ -9,7 +9,7 @@ import { useMemo } from 'react';
|
|
|
9
9
|
import { FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';
|
|
10
10
|
import { cn, useI18n, useIconRegistry, StandardIconReference, IconSize, useUI, Surface, Button, ButtonVariants_Variant, Skeleton, Alert, AlertDescription, } from '@wildo-ai/saas-frontend-lib';
|
|
11
11
|
// ── Component ───────────────────────────────────────────────────────
|
|
12
|
-
export function BillingPortalLink({ onOpenPortal, providerName, isLoading, error, }) {
|
|
12
|
+
export function BillingPortalLink({ onOpenPortal, providerName, isLoading, error, unavailable, }) {
|
|
13
13
|
const { getRecipe } = useUI();
|
|
14
14
|
const { makeTrComponent, isReady } = useI18n({
|
|
15
15
|
component: FrontendComponentType.LOW_LEVEL_BILLING_PORTAL_LINK,
|
|
@@ -27,6 +27,8 @@ export function BillingPortalLink({ onOpenPortal, providerName, isLoading, error
|
|
|
27
27
|
}
|
|
28
28
|
if (!isReady)
|
|
29
29
|
return null;
|
|
30
|
+
if (unavailable)
|
|
31
|
+
return _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: t('unavailable') }) });
|
|
30
32
|
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsx("div", { className: cn("p-card", surfaceRecipe.base), children: _jsxs("div", { className: "flex flex-col gap-card sm:flex-row sm:items-center sm:justify-between", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("h4", { className: cn(headingRecipe.base, headingRecipe.sizes?.sm), children: t('manageBilling') }), _jsx("p", { className: descriptionRecipe.base, children: t('description') })] }), _jsxs(Button, { variant: ButtonVariants_Variant.LINK, onClick: onOpenPortal, disabled: isLoading, className: "shrink-0", children: [renderIcon(StandardIconReference.EXTERNAL_LINK, { size: IconSize.SM }), _jsx("span", { children: t('manageBilling') }), providerName && (_jsx("span", { className: cn(descriptionRecipe.base, "text-xs"), children: providerName }))] })] }) }) }));
|
|
31
33
|
}
|
|
32
34
|
//# sourceMappingURL=billing-portal-link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-portal-link.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-portal-link.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAC3H,OAAO,EACL,EAAE,EACF,OAAO,EACP,eAAe,EACf,qBAAqB,EACrB,QAAQ,EACR,KAAK,EACL,OAAO,EAEP,MAAM,EACN,sBAAsB,EACtB,QAAQ,EACR,KAAK,EACL,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,uEAAuE;AAEvE,MAAM,UAAU,iBAAiB,CAAC,EAChC,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,KAAK,
|
|
1
|
+
{"version":3,"file":"billing-portal-link.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-portal-link.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * BillingPortalLink (Preset)\n *\n * Simple card/button that links to the provider's Customer Portal\n * for managing payment methods, invoices, billing address, and cancellation.\n */\n\nimport React, { useMemo } from 'react';\nimport { FrontendComponentType, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n cn,\n useI18n,\n useIconRegistry,\n StandardIconReference,\n IconSize,\n useUI,\n Surface,\n BillingPortalLinkProps,\n Button,\n ButtonVariants_Variant,\n Skeleton,\n Alert,\n AlertDescription,\n} from '@wildo-ai/saas-frontend-lib';\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function BillingPortalLink({\n onOpenPortal,\n providerName,\n isLoading,\n error,\n unavailable,\n}: BillingPortalLinkProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, isReady } = useI18n({\n component: FrontendComponentType.LOW_LEVEL_BILLING_PORTAL_LINK,\n });\n const { renderIcon } = useIconRegistry();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.LABEL);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_PORTAL_LINK),\n [makeTrComponent],\n );\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <div className=\"flex flex-col gap-card sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"space-y-1 flex-1 min-w-0\">\n <Skeleton className=\"h-4 w-32 mb-1\" />\n <Skeleton className=\"h-4 w-48\" />\n </div>\n <Skeleton className=\"h-9 w-36 shrink-0 rounded-md\" />\n </div>\n </div>\n </Surface>\n );\n }\n\n if (!isReady) return null;\n\n if (unavailable) return <Alert variant=\"destructive\"><AlertDescription>{t('unavailable')}</AlertDescription></Alert>;\n\n return (\n <Surface asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"p-card\", surfaceRecipe.base)}>\n <div className=\"flex flex-col gap-card sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"space-y-1\">\n <h4 className={cn(headingRecipe.base, headingRecipe.sizes?.sm)}>{t('manageBilling')}</h4>\n <p className={descriptionRecipe.base}>{t('description')}</p>\n </div>\n <Button\n variant={ButtonVariants_Variant.LINK}\n onClick={onOpenPortal}\n disabled={isLoading}\n className=\"shrink-0\"\n >\n {renderIcon(StandardIconReference.EXTERNAL_LINK, { size: IconSize.SM })}\n <span>{t('manageBilling')}</span>\n {providerName && (\n <span className={cn(descriptionRecipe.base, \"text-xs\")}>\n {providerName}\n </span>\n )}\n </Button>\n </div>\n </div>\n </Surface>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-portal-link.labels.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"billing-portal-link.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-portal-link.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAM7C,eAAO,MAAM,+BAA+B,EAAE,mBAAmB,EAQhE,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { FrontendComponentType, LabelKind, registerComponentLabels, } from '@wil
|
|
|
3
3
|
// purpose / kind / variable meaning. Statically scanned by the dev companion;
|
|
4
4
|
// NOT imported at runtime, so it never ships in the bundle.
|
|
5
5
|
export const LowLevelBillingPortalLinkLabels = [
|
|
6
|
+
{ ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },
|
|
6
7
|
{ ref: 'manageBilling', kind: LabelKind.BUTTON, purpose: 'Action that opens the billing provider customer portal' },
|
|
7
8
|
{
|
|
8
9
|
ref: 'description',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-portal-link.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-portal-link.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,+BAA+B,GAA0B;IACpE,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,wDAAwD,EAAE;IACnH;QACE,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,SAAS,CAAC,WAAW;QAC3B,OAAO,EAAE,+EAA+E;KACzF;CACF,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,6BAA6B,EAAE,+BAA+B,CAAC,CAAC","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + per-key\n// purpose / kind / variable meaning. Statically scanned by the dev companion;\n// NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelBillingPortalLinkLabels: LabellingUnitaryDef[] = [\n { ref: 'manageBilling', kind: LabelKind.BUTTON, purpose: 'Action that opens the billing provider customer portal' },\n {\n ref: 'description',\n kind: LabelKind.DESCRIPTION,\n purpose: 'Helper text explaining what the customer can self-serve in the billing portal',\n },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_PORTAL_LINK, LowLevelBillingPortalLinkLabels);\n"]}
|
|
1
|
+
{"version":3,"file":"billing-portal-link.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-portal-link.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,+BAA+B,GAA0B;IACpE,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,OAAO,EAAE,4GAA4G,EAAE;IAC1K,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,wDAAwD,EAAE;IACnH;QACE,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,SAAS,CAAC,WAAW;QAC3B,OAAO,EAAE,+EAA+E;KACzF;CACF,CAAC;AACF,uBAAuB,CAAC,qBAAqB,CAAC,6BAA6B,EAAE,+BAA+B,CAAC,CAAC","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + per-key\n// purpose / kind / variable meaning. Statically scanned by the dev companion;\n// NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelBillingPortalLinkLabels: LabellingUnitaryDef[] = [\n { ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },\n { ref: 'manageBilling', kind: LabelKind.BUTTON, purpose: 'Action that opens the billing provider customer portal' },\n {\n ref: 'description',\n kind: LabelKind.DESCRIPTION,\n purpose: 'Helper text explaining what the customer can self-serve in the billing portal',\n },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_PORTAL_LINK, LowLevelBillingPortalLinkLabels);\n"]}
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import React from 'react';
|
|
14
14
|
import { PricingTableProps } from '@wildo-ai/saas-frontend-lib';
|
|
15
|
-
export declare function PricingTable({ plans, currentPlanKey, onSelectPlan, showIntervalToggle, isLoading, error, }: PricingTableProps): React.JSX.Element | null;
|
|
15
|
+
export declare function PricingTable({ plans, currentPlanKey, onSelectPlan, showIntervalToggle, isLoading, error, unavailable, isSelectionDisabled, contactSalesHref, pendingPlanChange, onKeepCurrentPlan, isKeepingCurrentPlan, }: PricingTableProps): React.JSX.Element | null;
|
|
16
16
|
//# sourceMappingURL=billing-pricing-table.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-pricing-table.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"billing-pricing-table.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAIL,iBAAiB,EAalB,MAAM,6BAA6B,CAAC;AAQrC,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,cAAc,EACd,YAAY,EACZ,kBAAyB,EACzB,SAAS,EACT,KAAK,EACL,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,EAAE,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA+P9C"}
|
|
@@ -14,11 +14,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
14
14
|
import { useMemo, useState } from 'react';
|
|
15
15
|
import { ButtonSize, FrontendComponentType, IndicatorVariant, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';
|
|
16
16
|
import { cn, useI18n, useIconRegistry, StandardIconReference, IconSize, useUI, Button, ButtonVariants_Variant, Skeleton, Alert, AlertDescription, Surface, } from '@wildo-ai/saas-frontend-lib';
|
|
17
|
+
import { ProductPriceDisclosure } from '@wildo-ai/saas-models';
|
|
17
18
|
import { useFormatMoney } from './billing-format.utils.js';
|
|
18
19
|
// ── Component ───────────────────────────────────────────────────────
|
|
19
|
-
export function PricingTable({ plans, currentPlanKey, onSelectPlan, showIntervalToggle = true, isLoading, error, }) {
|
|
20
|
+
export function PricingTable({ plans, currentPlanKey, onSelectPlan, showIntervalToggle = true, isLoading, error, unavailable, isSelectionDisabled, contactSalesHref, pendingPlanChange, onKeepCurrentPlan, isKeepingCurrentPlan, }) {
|
|
20
21
|
const { getRecipe } = useUI();
|
|
21
|
-
const { makeTrComponent, isReady } = useI18n({
|
|
22
|
+
const { makeTrComponent, formatDate, isReady } = useI18n({
|
|
22
23
|
component: FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE,
|
|
23
24
|
keys: ['billing_products', 'billing_features', 'billing_limits'],
|
|
24
25
|
});
|
|
@@ -65,10 +66,15 @@ export function PricingTable({ plans, currentPlanKey, onSelectPlan, showInterval
|
|
|
65
66
|
}
|
|
66
67
|
if (!isReady)
|
|
67
68
|
return null;
|
|
68
|
-
|
|
69
|
+
if (unavailable)
|
|
70
|
+
return _jsx(Alert, { variant: "destructive", children: _jsx(AlertDescription, { children: t('unavailable') }) });
|
|
71
|
+
return (_jsxs("div", { className: "w-full", children: [_jsx("div", { className: "text-center mb-section", children: _jsx("h2", { className: cn(headingRecipe.base, "text-3xl mb-element"), children: t('title') }) }), pendingPlanChange && (_jsx(Alert, { className: "mb-section", children: _jsxs(AlertDescription, { className: "flex flex-wrap items-center justify-between gap-element", children: [_jsx("span", { children: t('pendingPlanChange', { plan: pendingPlanChange.targetPlanName, date: formatDate(pendingPlanChange.effectiveAt) }) }), onKeepCurrentPlan && (_jsx(Button, { variant: ButtonVariants_Variant.OUTLINE, size: ButtonSize.SM, onClick: onKeepCurrentPlan, disabled: isKeepingCurrentPlan, children: t(isKeepingCurrentPlan ? 'keepingCurrentPlan' : 'keepCurrentPlan') }))] }) })), showIntervalToggle && hasYearlyPrices && (_jsxs("div", { className: "flex items-center justify-center gap-element mb-section", role: "radiogroup", "aria-label": t('intervalToggleLabel'), children: [_jsx(Button, { variant: selectedInterval === 'month' ? ButtonVariants_Variant.DEFAULT : ButtonVariants_Variant.GHOST, size: ButtonSize.SM, role: "radio", "aria-checked": selectedInterval === 'month', onClick: () => setSelectedInterval('month'), children: t('monthlyToggle') }), _jsx(Button, { variant: selectedInterval === 'year' ? ButtonVariants_Variant.DEFAULT : ButtonVariants_Variant.GHOST, size: ButtonSize.SM, role: "radio", "aria-checked": selectedInterval === 'year', onClick: () => setSelectedInterval('year'), children: t('yearlyToggle') })] })), _jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-card max-w-7xl mx-auto", children: sortedPlans.map(plan => {
|
|
69
72
|
const priceEntry = getDisplayPrice(plan);
|
|
70
73
|
const isCurrent = plan.key === currentPlanKey;
|
|
71
|
-
|
|
74
|
+
const isOnRequest = plan.priceDisclosure === ProductPriceDisclosure.ON_REQUEST;
|
|
75
|
+
const isStartingAt = plan.priceDisclosure === ProductPriceDisclosure.STARTING_AT;
|
|
76
|
+
const isAcquirable = plan.isAcquirable !== false;
|
|
77
|
+
return (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.BASE, children: _jsxs("div", { className: cn("relative p-card flex flex-col", surfaceRecipe.base, plan.isRecommended && "border-primary shadow-[var(--shadow-lg)] ring-1 ring-primary", isCurrent && "bg-primary/5"), children: [plan.isRecommended && (_jsx("div", { className: "absolute -top-3 inset-x-0 flex justify-center", children: _jsx("span", { className: cn("inline-flex items-center px-3 py-1", indicatorInfoRecipe.base, "rounded-full"), children: t('recommendedBadge') }) })), isCurrent && (_jsx("div", { className: "absolute -top-3 inset-x-0 flex justify-center", children: _jsxs("span", { className: cn("inline-flex items-center px-3 py-1", indicatorNeutralRecipe.base, "rounded-full"), children: [renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'me-1' }), t('currentPlanBadge')] }) })), _jsx("h3", { className: cn(headingRecipe.base, headingRecipe.sizes?.md, "mt-element"), children: plan.name }), plan.description && (_jsx("p", { className: cn(descriptionRecipe.base, "mt-1"), children: plan.description })), _jsx("div", { className: "my-section", children: isOnRequest ? (_jsx("div", { className: cn(headingRecipe.base, "text-2xl"), children: t('priceOnRequest') })) : !isStartingAt && (plan.isFree || (priceEntry && isFreePrice(priceEntry.price))) ? (_jsx("div", { className: cn(headingRecipe.base, "text-4xl"), children: t('freePlanLabel') })) : priceEntry ? (_jsxs("div", { className: "flex items-baseline gap-item", children: [isStartingAt && _jsx("span", { className: cn(descriptionRecipe.base), children: t('startingAtPrefix') }), _jsx("span", { className: cn(headingRecipe.base, "text-4xl"), children: formatMoney(priceEntry.price) }), _jsx("span", { className: cn(descriptionRecipe.base), children: priceEntry.interval === 'year' ? t('perYear') : t('perMonth') })] })) : null }), plan.trialDays && plan.trialDays > 0 && !isCurrent && (_jsx("p", { className: "text-xs text-center text-primary font-medium mb-element", children: t('trialDays', { days: plan.trialDays }) })), isOnRequest && !isCurrent ? (contactSalesHref ? (_jsx(Button, { variant: plan.isRecommended ? ButtonVariants_Variant.ACCENT : ButtonVariants_Variant.SECONDARY, className: "w-full mb-section", asChild: true, children: _jsx("a", { href: contactSalesHref, children: t('contactSales') }) })) : null) : (_jsx(Button, { variant: isCurrent ? ButtonVariants_Variant.SECONDARY : plan.isRecommended ? ButtonVariants_Variant.ACCENT : ButtonVariants_Variant.SECONDARY, className: "w-full mb-section", disabled: isCurrent || isSelectionDisabled || !priceEntry || !isAcquirable, onClick: () => priceEntry && isAcquirable && onSelectPlan(plan.key, priceEntry.priceId), children: isCurrent || isAcquirable ? getButtonLabel(plan) : t('comingSoon') })), _jsxs("div", { className: "flex-1 space-y-element", children: [_jsx("p", { className: cn(descriptionRecipe.base, "font-medium"), children: t('featuresIncluded') }), _jsxs("ul", { className: "space-y-1.5", children: [plan.grantedFeatures.map(feature => (_jsxs("li", { className: cn("flex items-start gap-element", descriptionRecipe.base), children: [renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'text-primary mt-0.5 shrink-0' }), _jsx("span", { children: feature.label })] }, feature.id))), plan.grantedLimits.map(limit => (_jsxs("li", { className: cn("flex items-start gap-element", descriptionRecipe.base), children: [renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'text-primary mt-0.5 shrink-0' }), _jsxs("span", { children: [limit.label, ": ", limit.value === -1 ? t('unlimited') : t('limitDisplay', { value: limit.value })] })] }, limit.id)))] })] })] }) }, plan.key));
|
|
72
78
|
}) })] }));
|
|
73
79
|
}
|
|
74
80
|
//# sourceMappingURL=billing-pricing-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-pricing-table.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * PricingTable (Preset)\n *\n * Responsive plan comparison table. Reads product definitions to display\n * plan options with features, pricing, and CTAs.\n *\n * DELEGATION PRINCIPLE: Clicking a plan triggers `onSelectPlan` which\n * opens Stripe Checkout (hosted page) — no payment UI is rendered here.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of monetary amounts and numbers, respecting user/org regional preferences.\n */\n\nimport React, { useMemo, useState } from 'react';\nimport { ButtonSize, FrontendComponentType, IndicatorVariant, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n PricingTableFeature,\n PricingTableLimit,\n PricingTablePlan,\n PricingTableProps,\n cn,\n useI18n,\n useIconRegistry,\n StandardIconReference,\n IconSize,\n useUI,\n Button,\n ButtonVariants_Variant,\n Skeleton,\n Alert,\n AlertDescription,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\nimport type { MoneyValue } from '@wildo-ai/zod-decorators';\n\nimport { useFormatMoney } from './billing-format.utils';\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function PricingTable({\n plans,\n currentPlanKey,\n onSelectPlan,\n showIntervalToggle = true,\n isLoading,\n error,\n}: PricingTableProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, isReady } = useI18n({\n component: FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE,\n keys: ['billing_products', 'billing_features', 'billing_limits'],\n });\n const { renderIcon } = useIconRegistry();\n const formatMoney = useFormatMoney();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const indicatorInfoRecipe = getRecipe(UIBehavior.INDICATOR, IndicatorVariant.INFO);\n const indicatorNeutralRecipe = getRecipe(UIBehavior.INDICATOR, IndicatorVariant.NEUTRAL);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE),\n [makeTrComponent],\n );\n\n const [selectedInterval, setSelectedInterval] = useState<'month' | 'year'>('month');\n\n // Sort plans by sortOrder\n const sortedPlans = useMemo(\n () => [...plans].sort((a, b) => a.sortOrder - b.sortOrder),\n [plans],\n );\n\n // Check if any plan has yearly prices\n const hasYearlyPrices = useMemo(\n () => plans.some(p => p.prices.some(pr => pr.interval === 'year')),\n [plans],\n );\n\n const getDisplayPrice = (plan: PricingTablePlan) => {\n // Find the price for the selected interval\n const matchingPrice = plan.prices.find(pr => pr.interval === selectedInterval);\n if (matchingPrice) return matchingPrice;\n // Fallback to default price\n const defaultPrice = plan.prices.find(pr => pr.isDefault);\n return defaultPrice ?? plan.prices[0];\n };\n\n const isFreePrice = (money: MoneyValue): boolean => money.amount === 0n;\n\n const getButtonLabel = (plan: PricingTablePlan): string => {\n if (plan.isCurrent) return t('currentPlan');\n if (currentPlanKey) {\n const currentPlan = plans.find(p => p.key === currentPlanKey);\n if (currentPlan && plan.sortOrder > currentPlan.sortOrder) return t('upgradePlan');\n if (currentPlan && plan.sortOrder < currentPlan.sortOrder) return t('downgradePlan');\n }\n return t('selectPlan');\n };\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <div className=\"w-full\">\n <div className=\"text-center mb-section\">\n <Skeleton className=\"h-8 w-48 mx-auto mb-element\" />\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-card max-w-7xl mx-auto\">\n {[0, 1, 2].map(i => (\n <Surface key={i} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"relative p-card flex flex-col\", surfaceRecipe.base)}>\n <Skeleton className=\"h-5 w-24 mb-element\" />\n <Skeleton className=\"h-10 w-32 my-section\" />\n <Skeleton className=\"h-10 w-full rounded-md mb-section\" />\n <div className=\"space-y-element flex-1\">\n <Skeleton className=\"h-4 w-28\" />\n {[0, 1, 2, 3].map(j => (\n <Skeleton key={j} className=\"h-4 w-full\" />\n ))}\n </div>\n </div>\n </Surface>\n ))}\n </div>\n </div>\n );\n }\n\n if (!isReady) return null;\n\n return (\n <div className=\"w-full\">\n {/* Title */}\n <div className=\"text-center mb-section\">\n <h2 className={cn(headingRecipe.base, \"text-3xl mb-element\")}>{t('title')}</h2>\n </div>\n\n {/* Interval toggle */}\n {showIntervalToggle && hasYearlyPrices && (\n <div className=\"flex items-center justify-center gap-element mb-section\" role=\"radiogroup\" aria-label={t('intervalToggleLabel')}>\n <Button\n variant={selectedInterval === 'month' ? ButtonVariants_Variant.DEFAULT : ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n role=\"radio\"\n aria-checked={selectedInterval === 'month'}\n onClick={() => setSelectedInterval('month')}\n >\n {t('monthlyToggle')}\n </Button>\n <Button\n variant={selectedInterval === 'year' ? ButtonVariants_Variant.DEFAULT : ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n role=\"radio\"\n aria-checked={selectedInterval === 'year'}\n onClick={() => setSelectedInterval('year')}\n >\n {t('yearlyToggle')}\n </Button>\n </div>\n )}\n\n {/* Plan cards grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-card max-w-7xl mx-auto\">\n {sortedPlans.map(plan => {\n const priceEntry = getDisplayPrice(plan);\n const isCurrent = plan.key === currentPlanKey;\n\n return (\n <Surface key={plan.key} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div\n className={cn(\n \"relative p-card flex flex-col\",\n surfaceRecipe.base,\n plan.isPopular && \"border-primary shadow-[var(--shadow-lg)] ring-1 ring-primary\",\n isCurrent && \"bg-primary/5\",\n )}\n >\n {/* Popular badge */}\n {plan.isPopular && (\n <div className=\"absolute -top-3 inset-x-0 flex justify-center\">\n <span className={cn(\"inline-flex items-center px-3 py-1\", indicatorInfoRecipe.base, \"rounded-full\")}>\n {t('mostPopularBadge')}\n </span>\n </div>\n )}\n\n {/* Current plan badge */}\n {isCurrent && (\n <div className=\"absolute -top-3 inset-x-0 flex justify-center\">\n <span className={cn(\"inline-flex items-center px-3 py-1\", indicatorNeutralRecipe.base, \"rounded-full\")}>\n {renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'me-1' })}\n {t('currentPlanBadge')}\n </span>\n </div>\n )}\n\n {/* Plan name + description */}\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md, \"mt-element\")}>{plan.name}</h3>\n {plan.description && (\n <p className={cn(descriptionRecipe.base, \"mt-1\")}>{plan.description}</p>\n )}\n\n {/* Price */}\n <div className=\"my-section\">\n {plan.isFree || (priceEntry && isFreePrice(priceEntry.price)) ? (\n <div className={cn(headingRecipe.base, \"text-4xl\")}>{t('freePlanLabel')}</div>\n ) : priceEntry ? (\n <div className=\"flex items-baseline gap-item\">\n <span className={cn(headingRecipe.base, \"text-4xl\")}>\n {formatMoney(priceEntry.price)}\n </span>\n <span className={cn(descriptionRecipe.base)}>\n {priceEntry.interval === 'year' ? t('perYear') : t('perMonth')}\n </span>\n </div>\n ) : null}\n </div>\n\n {/* Trial days badge */}\n {plan.trialDays && plan.trialDays > 0 && !isCurrent && (\n <p className=\"text-xs text-center text-primary font-medium mb-element\">\n {t('trialDays', { days: plan.trialDays })}\n </p>\n )}\n\n {/* CTA button */}\n <Button\n variant={isCurrent ? ButtonVariants_Variant.SECONDARY : plan.isPopular ? ButtonVariants_Variant.ACCENT : ButtonVariants_Variant.SECONDARY}\n className=\"w-full mb-section\"\n disabled={isCurrent}\n onClick={() => priceEntry && onSelectPlan(plan.key, priceEntry.priceId)}\n >\n {getButtonLabel(plan)}\n </Button>\n\n {/* Features list */}\n <div className=\"flex-1 space-y-element\">\n <p className={cn(descriptionRecipe.base, \"font-medium\")}>{t('featuresIncluded')}</p>\n <ul className=\"space-y-1.5\">\n {plan.grantedFeatures.map(feature => (\n <li key={feature.id} className={cn(\"flex items-start gap-element\", descriptionRecipe.base)}>\n {renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'text-primary mt-0.5 shrink-0' })}\n <span>{feature.label}</span>\n </li>\n ))}\n {plan.grantedLimits.map(limit => (\n <li key={limit.id} className={cn(\"flex items-start gap-element\", descriptionRecipe.base)}>\n {renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'text-primary mt-0.5 shrink-0' })}\n <span>\n {limit.label}: {limit.value === -1 ? t('unlimited') : t('limitDisplay', { value: limit.value })}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </Surface>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"billing-pricing-table.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * PricingTable (Preset)\n *\n * Responsive plan comparison table. Reads product definitions to display\n * plan options with features, pricing, and CTAs.\n *\n * DELEGATION PRINCIPLE: Clicking a plan triggers `onSelectPlan` which\n * opens Stripe Checkout (hosted page) — no payment UI is rendered here.\n *\n * Formatting: Uses useI18n() for locale-aware formatting\n * of monetary amounts and numbers, respecting user/org regional preferences.\n */\n\nimport React, { useMemo, useState } from 'react';\nimport { ButtonSize, FrontendComponentType, IndicatorVariant, SurfaceVariant, TypographyVariant, UIBehavior } from '@wildo-ai/presets-components-models';\nimport {\n PricingTableFeature,\n PricingTableLimit,\n PricingTablePlan,\n PricingTableProps,\n cn,\n useI18n,\n useIconRegistry,\n StandardIconReference,\n IconSize,\n useUI,\n Button,\n ButtonVariants_Variant,\n Skeleton,\n Alert,\n AlertDescription,\n Surface,\n} from '@wildo-ai/saas-frontend-lib';\nimport type { MoneyValue } from '@wildo-ai/zod-decorators';\nimport { ProductPriceDisclosure } from '@wildo-ai/saas-models';\n\nimport { useFormatMoney } from './billing-format.utils';\n\n// ── Component ───────────────────────────────────────────────────────\n\nexport function PricingTable({\n plans,\n currentPlanKey,\n onSelectPlan,\n showIntervalToggle = true,\n isLoading,\n error,\n unavailable,\n isSelectionDisabled,\n contactSalesHref,\n pendingPlanChange,\n onKeepCurrentPlan,\n isKeepingCurrentPlan,\n}: PricingTableProps): React.JSX.Element | null {\n const { getRecipe } = useUI();\n const { makeTrComponent, formatDate, isReady } = useI18n({\n component: FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE,\n keys: ['billing_products', 'billing_features', 'billing_limits'],\n });\n const { renderIcon } = useIconRegistry();\n const formatMoney = useFormatMoney();\n\n const surfaceRecipe = getRecipe(UIBehavior.SURFACE, SurfaceVariant.BASE);\n const indicatorInfoRecipe = getRecipe(UIBehavior.INDICATOR, IndicatorVariant.INFO);\n const indicatorNeutralRecipe = getRecipe(UIBehavior.INDICATOR, IndicatorVariant.NEUTRAL);\n const headingRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.HEADING);\n const descriptionRecipe = getRecipe(UIBehavior.TYPOGRAPHY, TypographyVariant.DESCRIPTION);\n\n const t = useMemo(\n () => makeTrComponent(FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE),\n [makeTrComponent],\n );\n\n const [selectedInterval, setSelectedInterval] = useState<'month' | 'year'>('month');\n\n // Sort plans by sortOrder\n const sortedPlans = useMemo(\n () => [...plans].sort((a, b) => a.sortOrder - b.sortOrder),\n [plans],\n );\n\n // Check if any plan has yearly prices\n const hasYearlyPrices = useMemo(\n () => plans.some(p => p.prices.some(pr => pr.interval === 'year')),\n [plans],\n );\n\n const getDisplayPrice = (plan: PricingTablePlan) => {\n // Find the price for the selected interval\n const matchingPrice = plan.prices.find(pr => pr.interval === selectedInterval);\n if (matchingPrice) return matchingPrice;\n // Fallback to default price\n const defaultPrice = plan.prices.find(pr => pr.isDefault);\n return defaultPrice ?? plan.prices[0];\n };\n\n const isFreePrice = (money: MoneyValue): boolean => money.amount === 0n;\n\n const getButtonLabel = (plan: PricingTablePlan): string => {\n if (plan.isCurrent) return t('currentPlan');\n if (currentPlanKey) {\n const currentPlan = plans.find(p => p.key === currentPlanKey);\n if (currentPlan && plan.sortOrder > currentPlan.sortOrder) return t('upgradePlan');\n if (currentPlan && plan.sortOrder < currentPlan.sortOrder) return t('downgradePlan');\n }\n return t('selectPlan');\n };\n\n if (error) {\n return (\n <Alert variant=\"destructive\">\n <AlertDescription>{error}</AlertDescription>\n </Alert>\n );\n }\n\n if (isLoading) {\n return (\n <div className=\"w-full\">\n <div className=\"text-center mb-section\">\n <Skeleton className=\"h-8 w-48 mx-auto mb-element\" />\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-card max-w-7xl mx-auto\">\n {[0, 1, 2].map(i => (\n <Surface key={i} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div className={cn(\"relative p-card flex flex-col\", surfaceRecipe.base)}>\n <Skeleton className=\"h-5 w-24 mb-element\" />\n <Skeleton className=\"h-10 w-32 my-section\" />\n <Skeleton className=\"h-10 w-full rounded-md mb-section\" />\n <div className=\"space-y-element flex-1\">\n <Skeleton className=\"h-4 w-28\" />\n {[0, 1, 2, 3].map(j => (\n <Skeleton key={j} className=\"h-4 w-full\" />\n ))}\n </div>\n </div>\n </Surface>\n ))}\n </div>\n </div>\n );\n }\n\n if (!isReady) return null;\n\n if (unavailable) return <Alert variant=\"destructive\"><AlertDescription>{t('unavailable')}</AlertDescription></Alert>;\n\n return (\n <div className=\"w-full\">\n {/* Title */}\n <div className=\"text-center mb-section\">\n <h2 className={cn(headingRecipe.base, \"text-3xl mb-element\")}>{t('title')}</h2>\n </div>\n\n {/* A plan change pending at the end of the period (#1868): another change is refused until it is withdrawn. */}\n {pendingPlanChange && (\n <Alert className=\"mb-section\">\n <AlertDescription className=\"flex flex-wrap items-center justify-between gap-element\">\n <span>{t('pendingPlanChange', { plan: pendingPlanChange.targetPlanName, date: formatDate(pendingPlanChange.effectiveAt) })}</span>\n {onKeepCurrentPlan && (\n <Button variant={ButtonVariants_Variant.OUTLINE} size={ButtonSize.SM} onClick={onKeepCurrentPlan} disabled={isKeepingCurrentPlan}>\n {t(isKeepingCurrentPlan ? 'keepingCurrentPlan' : 'keepCurrentPlan')}\n </Button>\n )}\n </AlertDescription>\n </Alert>\n )}\n\n {/* Interval toggle */}\n {showIntervalToggle && hasYearlyPrices && (\n <div className=\"flex items-center justify-center gap-element mb-section\" role=\"radiogroup\" aria-label={t('intervalToggleLabel')}>\n <Button\n variant={selectedInterval === 'month' ? ButtonVariants_Variant.DEFAULT : ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n role=\"radio\"\n aria-checked={selectedInterval === 'month'}\n onClick={() => setSelectedInterval('month')}\n >\n {t('monthlyToggle')}\n </Button>\n <Button\n variant={selectedInterval === 'year' ? ButtonVariants_Variant.DEFAULT : ButtonVariants_Variant.GHOST}\n size={ButtonSize.SM}\n role=\"radio\"\n aria-checked={selectedInterval === 'year'}\n onClick={() => setSelectedInterval('year')}\n >\n {t('yearlyToggle')}\n </Button>\n </div>\n )}\n\n {/* Plan cards grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-card max-w-7xl mx-auto\">\n {sortedPlans.map(plan => {\n const priceEntry = getDisplayPrice(plan);\n const isCurrent = plan.key === currentPlanKey;\n const isOnRequest = plan.priceDisclosure === ProductPriceDisclosure.ON_REQUEST;\n const isStartingAt = plan.priceDisclosure === ProductPriceDisclosure.STARTING_AT;\n const isAcquirable = plan.isAcquirable !== false;\n\n return (\n <Surface key={plan.key} asChild emitPolicyVars={false} variant={SurfaceVariant.BASE}>\n <div\n className={cn(\n \"relative p-card flex flex-col\",\n surfaceRecipe.base,\n plan.isRecommended && \"border-primary shadow-[var(--shadow-lg)] ring-1 ring-primary\",\n isCurrent && \"bg-primary/5\",\n )}\n >\n {/* Recommended badge — the catalogue's recommendation, never a popularity claim */}\n {plan.isRecommended && (\n <div className=\"absolute -top-3 inset-x-0 flex justify-center\">\n <span className={cn(\"inline-flex items-center px-3 py-1\", indicatorInfoRecipe.base, \"rounded-full\")}>\n {t('recommendedBadge')}\n </span>\n </div>\n )}\n\n {/* Current plan badge */}\n {isCurrent && (\n <div className=\"absolute -top-3 inset-x-0 flex justify-center\">\n <span className={cn(\"inline-flex items-center px-3 py-1\", indicatorNeutralRecipe.base, \"rounded-full\")}>\n {renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'me-1' })}\n {t('currentPlanBadge')}\n </span>\n </div>\n )}\n\n {/* Plan name + description */}\n <h3 className={cn(headingRecipe.base, headingRecipe.sizes?.md, \"mt-element\")}>{plan.name}</h3>\n {plan.description && (\n <p className={cn(descriptionRecipe.base, \"mt-1\")}>{plan.description}</p>\n )}\n\n {/* Price */}\n <div className=\"my-section\">\n {isOnRequest ? (\n <div className={cn(headingRecipe.base, \"text-2xl\")}>{t('priceOnRequest')}</div>\n ) : !isStartingAt && (plan.isFree || (priceEntry && isFreePrice(priceEntry.price))) ? (\n <div className={cn(headingRecipe.base, \"text-4xl\")}>{t('freePlanLabel')}</div>\n ) : priceEntry ? (\n <div className=\"flex items-baseline gap-item\">\n {isStartingAt && <span className={cn(descriptionRecipe.base)}>{t('startingAtPrefix')}</span>}\n <span className={cn(headingRecipe.base, \"text-4xl\")}>\n {formatMoney(priceEntry.price)}\n </span>\n <span className={cn(descriptionRecipe.base)}>\n {priceEntry.interval === 'year' ? t('perYear') : t('perMonth')}\n </span>\n </div>\n ) : null}\n </div>\n\n {/* Trial days badge */}\n {plan.trialDays && plan.trialDays > 0 && !isCurrent && (\n <p className=\"text-xs text-center text-primary font-medium mb-element\">\n {t('trialDays', { days: plan.trialDays })}\n </p>\n )}\n\n {/* CTA — an on-request plan leads to sales (or nowhere, when no destination is configured);\n an upcoming plan is shown and cannot be selected, because the backend refuses it. */}\n {isOnRequest && !isCurrent ? (\n contactSalesHref ? (\n <Button variant={plan.isRecommended ? ButtonVariants_Variant.ACCENT : ButtonVariants_Variant.SECONDARY} className=\"w-full mb-section\" asChild>\n <a href={contactSalesHref}>{t('contactSales')}</a>\n </Button>\n ) : null\n ) : (\n <Button\n variant={isCurrent ? ButtonVariants_Variant.SECONDARY : plan.isRecommended ? ButtonVariants_Variant.ACCENT : ButtonVariants_Variant.SECONDARY}\n className=\"w-full mb-section\"\n disabled={isCurrent || isSelectionDisabled || !priceEntry || !isAcquirable}\n onClick={() => priceEntry && isAcquirable && onSelectPlan(plan.key, priceEntry.priceId)}\n >\n {isCurrent || isAcquirable ? getButtonLabel(plan) : t('comingSoon')}\n </Button>\n )}\n\n {/* Features list */}\n <div className=\"flex-1 space-y-element\">\n <p className={cn(descriptionRecipe.base, \"font-medium\")}>{t('featuresIncluded')}</p>\n <ul className=\"space-y-1.5\">\n {plan.grantedFeatures.map(feature => (\n <li key={feature.id} className={cn(\"flex items-start gap-element\", descriptionRecipe.base)}>\n {renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'text-primary mt-0.5 shrink-0' })}\n <span>{feature.label}</span>\n </li>\n ))}\n {plan.grantedLimits.map(limit => (\n <li key={limit.id} className={cn(\"flex items-start gap-element\", descriptionRecipe.base)}>\n {renderIcon(StandardIconReference.CHECK, { size: IconSize.SM, className: 'text-primary mt-0.5 shrink-0' })}\n <span>\n {limit.label}: {limit.value === -1 ? t('unlimited') : t('limitDisplay', { value: limit.value })}\n </span>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </Surface>\n );\n })}\n </div>\n </div>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-pricing-table.labels.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"billing-pricing-table.labels.d.ts","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EAEzB,MAAM,qCAAqC,CAAC;AAM7C,eAAO,MAAM,iCAAiC,EAAE,mBAAmB,EAmDlE,CAAC"}
|
|
@@ -3,9 +3,13 @@ import { FrontendComponentType, LabelKind, registerComponentLabels, } from '@wil
|
|
|
3
3
|
// purpose / kind / variable meaning. Statically scanned by the dev companion;
|
|
4
4
|
// NOT imported at runtime, so it never ships in the bundle.
|
|
5
5
|
export const LowLevelBillingPricingTableLabels = [
|
|
6
|
+
{ ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },
|
|
6
7
|
{ ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the pricing-table plan grid' },
|
|
8
|
+
{ ref: 'pendingPlanChange', kind: LabelKind.LABEL, purpose: 'A plan change is already confirmed and takes effect at the end of the current billing period; until then the subscription stays on its current plan and another plan cannot be chosen', params: [{ key: 'plan', meaning: 'name of the plan the subscription moves to' }, { key: 'date', meaning: 'formatted date the change takes effect' }] },
|
|
9
|
+
{ ref: 'keepCurrentPlan', kind: LabelKind.BUTTON, purpose: 'Withdraw the pending plan change so the subscription renews on its current plan' },
|
|
10
|
+
{ ref: 'keepingCurrentPlan', kind: LabelKind.BUTTON, purpose: 'The pending plan change is being withdrawn' },
|
|
7
11
|
{ ref: 'currentPlanBadge', kind: LabelKind.LABEL, purpose: "Badge marking the customer's currently active plan" },
|
|
8
|
-
{ ref: '
|
|
12
|
+
{ ref: 'recommendedBadge', kind: LabelKind.LABEL, purpose: 'Badge on the plan the product recommends for the audience it is designed for. A recommendation, never a claim about what other customers chose: do not word it as "most popular".' },
|
|
9
13
|
{ ref: 'perMonth', kind: LabelKind.LABEL, purpose: 'Suffix denoting a per-month price' },
|
|
10
14
|
{ ref: 'perYear', kind: LabelKind.LABEL, purpose: 'Suffix denoting a per-year price' },
|
|
11
15
|
{ ref: 'monthlyToggle', kind: LabelKind.LABEL, purpose: 'Toggle option that shows monthly pricing' },
|
|
@@ -15,6 +19,9 @@ export const LowLevelBillingPricingTableLabels = [
|
|
|
15
19
|
{ ref: 'upgradePlan', kind: LabelKind.BUTTON, purpose: 'Call-to-action that moves the customer to a higher tier' },
|
|
16
20
|
{ ref: 'downgradePlan', kind: LabelKind.BUTTON, purpose: 'Call-to-action that moves the customer to a lower tier' },
|
|
17
21
|
{ ref: 'contactSales', kind: LabelKind.BUTTON, purpose: 'Call-to-action for enterprise/custom-quote plans' },
|
|
22
|
+
{ ref: 'priceOnRequest', kind: LabelKind.LABEL, purpose: 'Shown in place of a price for a plan whose price is quoted on request rather than listed' },
|
|
23
|
+
{ ref: 'startingAtPrefix', kind: LabelKind.LABEL, purpose: 'Word placed before a plan price that is only a starting price, because part of the total is quoted (for example "From")' },
|
|
24
|
+
{ ref: 'comingSoon', kind: LabelKind.BUTTON, purpose: 'Disabled action on a plan that is announced but cannot be bought yet' },
|
|
18
25
|
{ ref: 'freePlanLabel', kind: LabelKind.LABEL, purpose: 'Price label shown for a no-cost plan tier' },
|
|
19
26
|
{ ref: 'featuresIncluded', kind: LabelKind.HEADING, purpose: "Heading above a plan's list of included features" },
|
|
20
27
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-pricing-table.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.labels.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,SAAS,EAET,uBAAuB,GACxB,MAAM,qCAAqC,CAAC;AAE7C,4EAA4E;AAC5E,8EAA8E;AAC9E,4DAA4D;AAE5D,MAAM,CAAC,MAAM,iCAAiC,GAA0B;IACtE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,yCAAyC,EAAE;IAC7F,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,oDAAoD,EAAE;IACjH,EAAE,GAAG,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"billing-pricing-table.labels.js","sourceRoot":"","sources":["../../../../../src/components/billing/billing-pricing-table.labels.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FrontendComponentType,\n LabelKind,\n type LabellingUnitaryDef,\n registerComponentLabels,\n} from '@wildo-ai/presets-components-models';\n\n// Companion-only label metadata for this component: keys + params + per-key\n// purpose / kind / variable meaning. Statically scanned by the dev companion;\n// NOT imported at runtime, so it never ships in the bundle.\n\nexport const LowLevelBillingPricingTableLabels: LabellingUnitaryDef[] = [\n { ref: 'unavailable', kind: LabelKind.EMPTY_STATE, purpose: 'Billing information is temporarily unavailable; this is a failed read, not an empty account or a free plan' },\n { ref: 'title', kind: LabelKind.HEADING, purpose: 'Heading for the pricing-table plan grid' },\n { ref: 'pendingPlanChange', kind: LabelKind.LABEL, purpose: 'A plan change is already confirmed and takes effect at the end of the current billing period; until then the subscription stays on its current plan and another plan cannot be chosen', params: [{ key: 'plan', meaning: 'name of the plan the subscription moves to' }, { key: 'date', meaning: 'formatted date the change takes effect' }] },\n { ref: 'keepCurrentPlan', kind: LabelKind.BUTTON, purpose: 'Withdraw the pending plan change so the subscription renews on its current plan' },\n { ref: 'keepingCurrentPlan', kind: LabelKind.BUTTON, purpose: 'The pending plan change is being withdrawn' },\n { ref: 'currentPlanBadge', kind: LabelKind.LABEL, purpose: \"Badge marking the customer's currently active plan\" },\n { ref: 'recommendedBadge', kind: LabelKind.LABEL, purpose: 'Badge on the plan the product recommends for the audience it is designed for. A recommendation, never a claim about what other customers chose: do not word it as \"most popular\".' },\n { ref: 'perMonth', kind: LabelKind.LABEL, purpose: 'Suffix denoting a per-month price' },\n { ref: 'perYear', kind: LabelKind.LABEL, purpose: 'Suffix denoting a per-year price' },\n { ref: 'monthlyToggle', kind: LabelKind.LABEL, purpose: 'Toggle option that shows monthly pricing' },\n { ref: 'yearlyToggle', kind: LabelKind.LABEL, purpose: 'Toggle option that shows yearly pricing' },\n { ref: 'selectPlan', kind: LabelKind.BUTTON, purpose: 'Call-to-action that selects a plan the customer is not yet on' },\n { ref: 'currentPlan', kind: LabelKind.LABEL, purpose: \"Label on the tile for the customer's current plan\" },\n { ref: 'upgradePlan', kind: LabelKind.BUTTON, purpose: 'Call-to-action that moves the customer to a higher tier' },\n { ref: 'downgradePlan', kind: LabelKind.BUTTON, purpose: 'Call-to-action that moves the customer to a lower tier' },\n { ref: 'contactSales', kind: LabelKind.BUTTON, purpose: 'Call-to-action for enterprise/custom-quote plans' },\n { ref: 'priceOnRequest', kind: LabelKind.LABEL, purpose: 'Shown in place of a price for a plan whose price is quoted on request rather than listed' },\n { ref: 'startingAtPrefix', kind: LabelKind.LABEL, purpose: 'Word placed before a plan price that is only a starting price, because part of the total is quoted (for example \"From\")' },\n { ref: 'comingSoon', kind: LabelKind.BUTTON, purpose: 'Disabled action on a plan that is announced but cannot be bought yet' },\n { ref: 'freePlanLabel', kind: LabelKind.LABEL, purpose: 'Price label shown for a no-cost plan tier' },\n { ref: 'featuresIncluded', kind: LabelKind.HEADING, purpose: \"Heading above a plan's list of included features\" },\n {\n ref: 'everythingInPlan',\n kind: LabelKind.LABEL,\n purpose: 'Lead-in noting a tier inherits all features of the plan below it',\n params: [{ key: 'plan', meaning: 'name of the lower plan whose features are inherited' }],\n },\n {\n ref: 'priceDisplay',\n kind: LabelKind.LABEL,\n purpose: 'Formats the headline price for a plan tier',\n params: [\n { key: 'amount', meaning: 'plan price amount' },\n { key: 'currency', meaning: 'ISO currency code of the price' },\n ],\n },\n {\n ref: 'limitDisplay',\n kind: LabelKind.LABEL,\n purpose: 'Formats a numeric quota/limit for a plan feature',\n params: [{ key: 'value', meaning: 'numeric limit for the feature' }],\n },\n { ref: 'unlimited', kind: LabelKind.LABEL, purpose: 'Shown in place of a number when a feature has no quota cap' },\n { ref: 'intervalToggleLabel', kind: LabelKind.LABEL, purpose: 'Accessible label for the monthly/yearly billing toggle' },\n {\n ref: 'trialDays',\n kind: LabelKind.LABEL,\n purpose: 'Notes the length of the free trial offered with a plan',\n params: [{ key: 'days', meaning: 'number of free trial days' }],\n },\n];\nregisterComponentLabels(FrontendComponentType.LOW_LEVEL_BILLING_PRICING_TABLE, LowLevelBillingPricingTableLabels);\n"]}
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
11
|
import { SubscriptionStatusProps } from '@wildo-ai/saas-frontend-lib';
|
|
12
|
-
export declare function SubscriptionStatus({ status, planName, providerName, currentPeriodEnd, cancelAtPeriodEnd, trialEnd, nextPayment, onManageBilling, isLoading, error, }: SubscriptionStatusProps): React.JSX.Element | null;
|
|
12
|
+
export declare function SubscriptionStatus({ status, planName, providerName, currentPeriodEnd, cancelAtPeriodEnd, trialEnd, nextPayment, onManageBilling, isLoading, error, unavailable, }: SubscriptionStatusProps): React.JSX.Element | null;
|
|
13
13
|
//# sourceMappingURL=billing-subscription-status.d.ts.map
|