@wildo-ai/presets-components 1.1.3 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
- package/dist/esm/components/actions/action-bar.js +61 -7
- package/dist/esm/components/actions/action-bar.js.map +1 -1
- package/dist/esm/components/actions/action-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.js +3 -3
- package/dist/esm/components/actions/action-button.js.map +1 -1
- package/dist/esm/components/actions/action-button.labels.d.ts.map +1 -1
- package/dist/esm/components/actions/button-group.d.ts.map +1 -1
- package/dist/esm/components/actions/button.d.ts.map +1 -1
- package/dist/esm/components/actions/button.js +62 -3
- package/dist/esm/components/actions/button.js.map +1 -1
- package/dist/esm/components/actions/button.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.js +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.js.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts +4 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.js +165 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.js.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts +3 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js +63 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/image.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/shiki-highlighter-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/shiki-highlighter.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/web-preview.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/conversation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/message.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/prompt-input.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/sources.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
- package/dist/esm/components/ai-elements/decision/approval.d.ts +36 -4
- package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.js +77 -7
- package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
- package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.js +1 -1
- package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.js +8 -1
- package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
- package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
- package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/agent.js +23 -18
- package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
- package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
- package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
- package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
- package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
- package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
- package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
- package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.js +21 -0
- package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.js +9 -8
- package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
- package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
- package/dist/esm/components/app/public-layout-terms.js +137 -0
- package/dist/esm/components/app/public-layout-terms.js.map +1 -0
- package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
- package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.js +3 -1
- package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
- package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
- package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.js +22 -0
- package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js +19 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
- package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
- package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.js +3 -1
- package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
- package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.js +4 -2
- package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.js +1 -0
- package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
- package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.js +3 -1
- package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
- package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.js +4 -4
- package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js +2 -0
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
- package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
- package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/badge.d.ts.map +1 -1
- package/dist/esm/components/data-display/badge.js +16 -15
- package/dist/esm/components/data-display/badge.js.map +1 -1
- package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.d.ts +2 -1
- package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.js +24 -8
- package/dist/esm/components/data-display/description-list.js.map +1 -1
- package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/duration.d.ts +15 -0
- package/dist/esm/components/data-display/duration.d.ts.map +1 -0
- package/dist/esm/components/data-display/duration.js +50 -0
- package/dist/esm/components/data-display/duration.js.map +1 -0
- package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
- package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
- package/dist/esm/components/data-display/duration.labels.js +35 -0
- package/dist/esm/components/data-display/duration.labels.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
- package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
- package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
- package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
- package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
- package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
- package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.js +12 -8
- package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
- package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js +1 -0
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.js +82 -7
- package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/identifier.d.ts +19 -0
- package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
- package/dist/esm/components/data-display/identifier.js +21 -0
- package/dist/esm/components/data-display/identifier.js.map +1 -0
- package/dist/esm/components/data-display/kbd.d.ts +17 -0
- package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
- package/dist/esm/components/data-display/kbd.js +18 -0
- package/dist/esm/components/data-display/kbd.js.map +1 -0
- package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
- package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.js +3 -11
- package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
- package/dist/esm/components/data-display/timeline.d.ts +3 -0
- package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
- package/dist/esm/components/data-display/timeline.js +92 -0
- package/dist/esm/components/data-display/timeline.js.map +1 -0
- package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
- package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
- package/dist/esm/components/feedback/celebration-overlay.js +146 -22
- package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
- package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
- package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
- package/dist/esm/components/feedback/empty-state.js +11 -1
- package/dist/esm/components/feedback/empty-state.js.map +1 -1
- package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
- package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
- package/dist/esm/components/feedback/notification-center.js +6 -6
- package/dist/esm/components/feedback/notification-center.js.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
- package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/progress.d.ts.map +1 -1
- package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
- package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/toast.d.ts.map +1 -1
- package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
- package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
- package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/field.js +11 -3
- package/dist/esm/components/form/chromes/field.js.map +1 -1
- package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.js +28 -0
- package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
- package/dist/esm/components/form/combobox.d.ts.map +1 -1
- package/dist/esm/components/form/combobox.js +4 -3
- package/dist/esm/components/form/combobox.js.map +1 -1
- package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
- package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
- package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
- package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.js +13 -12
- package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
- package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
- package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +54 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +159 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +22 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +27 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +41 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +129 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +22 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +27 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -0
- package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
- package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
- package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
- package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
- package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
- package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
- package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/carousel.d.ts.map +1 -1
- package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/divider.d.ts.map +1 -1
- package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/resizable.d.ts.map +1 -1
- package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
- package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/separator.d.ts.map +1 -1
- package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
- package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.js +35 -13
- package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.js +10 -2
- package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
- package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.js +38 -22
- package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
- package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.js +30 -5
- package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/command.d.ts.map +1 -1
- package/dist/esm/components/navigation/command.js +2 -2
- package/dist/esm/components/navigation/command.js.map +1 -1
- package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
- package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
- package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.js +11 -1
- package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/card.d.ts.map +1 -1
- package/dist/esm/components/sections/card.js +71 -6
- package/dist/esm/components/sections/card.js.map +1 -1
- package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.js +36 -6
- package/dist/esm/components/sections/content-section.js.map +1 -1
- package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
- package/dist/esm/components/sections/option-gesture.d.ts +15 -0
- package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
- package/dist/esm/components/sections/option-gesture.js +66 -0
- package/dist/esm/components/sections/option-gesture.js.map +1 -0
- package/dist/esm/components/sections/pagination.d.ts.map +1 -1
- package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
- package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/table.d.ts.map +1 -1
- package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.js +64 -15
- package/dist/esm/components/sections/tabs.js.map +1 -1
- package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/heading.d.ts.map +1 -1
- package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/label.d.ts.map +1 -1
- package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/link.d.ts.map +1 -1
- package/dist/esm/components/typography/link.js +9 -3
- package/dist/esm/components/typography/link.js.map +1 -1
- package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/text.d.ts +1 -1
- package/dist/esm/components/typography/text.d.ts.map +1 -1
- package/dist/esm/components/typography/text.js +3 -2
- package/dist/esm/components/typography/text.js.map +1 -1
- package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
- package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/preset-design-system.d.ts.map +1 -1
- package/dist/esm/config/preset-design-system.js +37 -60
- package/dist/esm/config/preset-design-system.js.map +1 -1
- package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
- package/dist/esm/config/preset-kits.d.ts.map +1 -1
- package/dist/esm/config/preset-navigation.d.ts.map +1 -1
- package/dist/esm/config/preset-navigation.js +0 -5
- package/dist/esm/config/preset-navigation.js.map +1 -1
- package/dist/esm/config/preset-resources.d.ts.map +1 -1
- package/dist/esm/config/preset-shell.d.ts.map +1 -1
- package/dist/esm/config/preset-utils.d.ts.map +1 -1
- package/dist/esm/config/presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
- package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.js +163 -7
- package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.js +1 -0
- package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.js +21 -5
- package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.js +25 -3
- package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/index.d.ts.map +1 -1
- package/dist/esm/config/resources/index.js.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.js +90 -12
- package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.d.ts +8 -2
- package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.js +185 -29
- package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/webhooks.resource-presets.js +27 -2
- package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
- package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
- package/dist/esm/mermaid-stub.d.ts.map +1 -1
- package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
- package/dist/esm/registration/register-common-enums.js +48 -34
- package/dist/esm/registration/register-common-enums.js.map +1 -1
- package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
- package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
- package/dist/esm/registration/register-default-icons.js +3 -1
- package/dist/esm/registration/register-default-icons.js.map +1 -1
- package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
- package/dist/esm/registration/register-default-presets.js +36 -4
- package/dist/esm/registration/register-default-presets.js.map +1 -1
- package/dist/esm/registration/register-provider-components.d.ts +31 -0
- package/dist/esm/registration/register-provider-components.d.ts.map +1 -0
- package/dist/esm/registration/register-provider-components.js +50 -0
- package/dist/esm/registration/register-provider-components.js.map +1 -0
- package/dist/esm/shiki-subset.d.ts +11 -3
- package/dist/esm/shiki-subset.d.ts.map +1 -1
- package/dist/esm/shiki-subset.js +10 -2
- package/dist/esm/shiki-subset.js.map +1 -1
- package/dist/esm/theme-exports.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.js +19 -5
- package/dist/esm/themes/cozy.theme.js.map +1 -1
- package/dist/esm/themes/dense.theme.d.ts.map +1 -1
- package/dist/esm/themes/dense.theme.js +56 -10
- package/dist/esm/themes/dense.theme.js.map +1 -1
- package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
- package/dist/esm/themes/editorial.theme.js +19 -5
- package/dist/esm/themes/editorial.theme.js.map +1 -1
- package/dist/esm/themes/glass.theme.d.ts.map +1 -1
- package/dist/esm/themes/glass.theme.js +5 -1
- package/dist/esm/themes/glass.theme.js.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.js +9 -2
- package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
- package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
- package/dist/esm/themes/terminal.theme.js +19 -5
- package/dist/esm/themes/terminal.theme.js.map +1 -1
- package/dist/esm/themes/trading.theme.d.ts.map +1 -1
- package/dist/esm/themes/trading.theme.js +22 -6
- package/dist/esm/themes/trading.theme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +29 -44
- package/dist/esm/.native.tsbuildinfo +0 -1
- package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
- package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
- package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
- package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { CheckboxRoot, InputRoot, SelectContent, SelectItem, SelectRoot, SelectTrigger, SelectValue, TextareaRoot, } from '@wildo-ai/saas-frontend-lib';
|
|
5
|
+
//===============================================================
|
|
6
|
+
// Approval argument fields (#587)
|
|
7
|
+
//
|
|
8
|
+
// A field editor over a gated tool call's arguments, generated from the tool's input-schema
|
|
9
|
+
// descriptor, used by `AI_ApprovalRequest` when an approver edits the call.
|
|
10
|
+
//
|
|
11
|
+
// ## Why not the automated-form pipeline
|
|
12
|
+
//
|
|
13
|
+
// The issue pointed at `AutomatedForm`. It was checked against this surface and rejected on three
|
|
14
|
+
// counts. Its default label resolution humanizes field names, while a tool's argument keys must
|
|
15
|
+
// render VERBATIM — they carry no i18n entry, and turning `renameTodo` into "Rename Todo" is invented
|
|
16
|
+
// display text. It owns a submit lifecycle, while an approval is decided by the Approve / Deny actions
|
|
17
|
+
// beside it. And its field registry assumes a resource-aware form context an agent's tool does not
|
|
18
|
+
// have. This surface needs something narrower — one control per argument, seeded from the proposed
|
|
19
|
+
// call, reporting a value — so it is built from the same preset controls instead.
|
|
20
|
+
//
|
|
21
|
+
// ## A convenience, never the control
|
|
22
|
+
//
|
|
23
|
+
// The descriptor drops refinements (length, range, pattern) by construction, and nothing here
|
|
24
|
+
// validates beyond "does this JSON parse". The server re-validates the edit against the tool's live
|
|
25
|
+
// schema and refuses a violation with a message naming the argument; that refusal is what protects
|
|
26
|
+
// the call.
|
|
27
|
+
//
|
|
28
|
+
// ## Anything a field cannot express is edited as JSON, per argument
|
|
29
|
+
//
|
|
30
|
+
// Lists, records, unions, dates and unknown shapes each keep a small JSON editor of their own, so one
|
|
31
|
+
// awkward argument never forces the whole call back into a blob — and a descriptor with nothing a
|
|
32
|
+
// field can express is not offered as fields at all (see `fieldsEditableArgumentsSchema`).
|
|
33
|
+
//===============================================================
|
|
34
|
+
/** Which editor an approver is authoring a call in. */
|
|
35
|
+
export var ApprovalArgumentEditorMode;
|
|
36
|
+
(function (ApprovalArgumentEditorMode) {
|
|
37
|
+
/** One field per argument, generated from the tool's input-schema descriptor. */
|
|
38
|
+
ApprovalArgumentEditorMode["FIELDS"] = "fields";
|
|
39
|
+
/** The arguments as one JSON object — always reachable, and the fallback for shapes fields cannot express. */
|
|
40
|
+
ApprovalArgumentEditorMode["JSON"] = "json";
|
|
41
|
+
})(ApprovalArgumentEditorMode || (ApprovalArgumentEditorMode = {}));
|
|
42
|
+
/** How one argument is edited. A closed vocabulary: the editor switches on it exhaustively. */
|
|
43
|
+
export var ApprovalArgumentEditorKind;
|
|
44
|
+
(function (ApprovalArgumentEditorKind) {
|
|
45
|
+
/** A free-text string. */
|
|
46
|
+
ApprovalArgumentEditorKind["TEXT"] = "text";
|
|
47
|
+
/** A number. */
|
|
48
|
+
ApprovalArgumentEditorKind["NUMBER"] = "number";
|
|
49
|
+
/** A boolean. */
|
|
50
|
+
ApprovalArgumentEditorKind["BOOLEAN"] = "boolean";
|
|
51
|
+
/** One of a fixed set of string values — an enum, or a string literal. */
|
|
52
|
+
ApprovalArgumentEditorKind["CHOICE"] = "choice";
|
|
53
|
+
/** A nested object, edited as a group of its own arguments. */
|
|
54
|
+
ApprovalArgumentEditorKind["GROUP"] = "group";
|
|
55
|
+
/** Any shape a single field cannot express — edited as that argument's own JSON text. */
|
|
56
|
+
ApprovalArgumentEditorKind["JSON"] = "json";
|
|
57
|
+
})(ApprovalArgumentEditorKind || (ApprovalArgumentEditorKind = {}));
|
|
58
|
+
/**
|
|
59
|
+
* The editor for one argument's descriptor.
|
|
60
|
+
*
|
|
61
|
+
* semantic-literal-boundary: `SerializableZodSchema.type` is a type-level union declared by
|
|
62
|
+
* `@wildo-ai/zod-decorators` with no runtime enum to compare against; this switch is where that
|
|
63
|
+
* external vocabulary is translated into {@link ApprovalArgumentEditorKind}.
|
|
64
|
+
*/
|
|
65
|
+
export function classifyArgumentDescriptor(descriptor) {
|
|
66
|
+
switch (descriptor.type) {
|
|
67
|
+
case "string":
|
|
68
|
+
return ApprovalArgumentEditorKind.TEXT;
|
|
69
|
+
case "number":
|
|
70
|
+
return ApprovalArgumentEditorKind.NUMBER;
|
|
71
|
+
case "boolean":
|
|
72
|
+
return ApprovalArgumentEditorKind.BOOLEAN;
|
|
73
|
+
case "enum":
|
|
74
|
+
return ApprovalArgumentEditorKind.CHOICE;
|
|
75
|
+
case "literal":
|
|
76
|
+
return typeof descriptor.value === "string" ? ApprovalArgumentEditorKind.CHOICE : ApprovalArgumentEditorKind.JSON;
|
|
77
|
+
case "object":
|
|
78
|
+
return ApprovalArgumentEditorKind.GROUP;
|
|
79
|
+
default:
|
|
80
|
+
return ApprovalArgumentEditorKind.JSON;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The descriptor as fields, or `undefined` when fields would add nothing.
|
|
85
|
+
*
|
|
86
|
+
* Fields are offered only for an OBJECT whose properties include at least one argument a field can
|
|
87
|
+
* express. A root that is not an object, or an object made only of JSON-edited shapes, would be a JSON
|
|
88
|
+
* editor wearing a form's clothes — the raw editor is the honest answer there.
|
|
89
|
+
*/
|
|
90
|
+
export function fieldsEditableArgumentsSchema(descriptor) {
|
|
91
|
+
if (!descriptor || typeof descriptor !== "object")
|
|
92
|
+
return undefined;
|
|
93
|
+
const candidate = descriptor;
|
|
94
|
+
if (candidate.type !== "object" || !candidate.properties || typeof candidate.properties !== "object")
|
|
95
|
+
return undefined;
|
|
96
|
+
const offersAField = Object.values(candidate.properties)
|
|
97
|
+
.some((property) => classifyArgumentDescriptor(property) !== ApprovalArgumentEditorKind.JSON);
|
|
98
|
+
return offersAField ? candidate : undefined;
|
|
99
|
+
}
|
|
100
|
+
function readAtPath(value, path) {
|
|
101
|
+
return path.reduce((current, key) => (current !== null && typeof current === "object" ? current[key] : undefined), value);
|
|
102
|
+
}
|
|
103
|
+
/** Immutable write; writing `undefined` REMOVES the argument, because an omitted argument and an empty one differ. */
|
|
104
|
+
function writeAtPath(value, path, next) {
|
|
105
|
+
const [head, ...rest] = path;
|
|
106
|
+
if (head === undefined)
|
|
107
|
+
return value;
|
|
108
|
+
const copy = { ...value };
|
|
109
|
+
if (rest.length === 0) {
|
|
110
|
+
if (next === undefined)
|
|
111
|
+
delete copy[head];
|
|
112
|
+
else
|
|
113
|
+
copy[head] = next;
|
|
114
|
+
return copy;
|
|
115
|
+
}
|
|
116
|
+
const child = copy[head];
|
|
117
|
+
copy[head] = writeAtPath(child !== null && typeof child === "object" && !Array.isArray(child) ? child : {}, rest, next);
|
|
118
|
+
return copy;
|
|
119
|
+
}
|
|
120
|
+
const draftKeyOf = (path) => JSON.stringify(path);
|
|
121
|
+
function collectJsonPaths(schema, prefix = []) {
|
|
122
|
+
return Object.entries(schema.properties).flatMap(([key, child]) => {
|
|
123
|
+
const path = [...prefix, key];
|
|
124
|
+
const kind = classifyArgumentDescriptor(child);
|
|
125
|
+
if (kind === ApprovalArgumentEditorKind.GROUP)
|
|
126
|
+
return collectJsonPaths(child, path);
|
|
127
|
+
return kind === ApprovalArgumentEditorKind.JSON ? [path] : [];
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The arguments the approver has AUTHORED: the field values, with every JSON-edited argument parsed
|
|
132
|
+
* back in. `value` is `undefined` whenever any of those texts does not parse — the approval must not be
|
|
133
|
+
* submittable then, or it would silently send the model's value for an argument the approver believes
|
|
134
|
+
* they changed. An emptied JSON text omits that argument.
|
|
135
|
+
*/
|
|
136
|
+
export function composeEditedArguments(schema, values, jsonDrafts) {
|
|
137
|
+
let composed = values;
|
|
138
|
+
const invalidDraftKeys = [];
|
|
139
|
+
for (const path of collectJsonPaths(schema)) {
|
|
140
|
+
const key = draftKeyOf(path);
|
|
141
|
+
const draft = jsonDrafts[key];
|
|
142
|
+
if (draft === undefined)
|
|
143
|
+
continue;
|
|
144
|
+
if (draft.trim() === "") {
|
|
145
|
+
composed = writeAtPath(composed, path, undefined);
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
composed = writeAtPath(composed, path, JSON.parse(draft));
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
invalidDraftKeys.push(key);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return { value: invalidDraftKeys.length > 0 ? undefined : composed, invalidDraftKeys };
|
|
156
|
+
}
|
|
157
|
+
export function ApprovalArgumentFields({ schema, initialValue, disabled, invalidJsonMessage, onChange, }) {
|
|
158
|
+
const [values, setValues] = React.useState(initialValue);
|
|
159
|
+
const [jsonDrafts, setJsonDrafts] = React.useState(() => Object.fromEntries(collectJsonPaths(schema).map((path) => {
|
|
160
|
+
const current = readAtPath(initialValue, path);
|
|
161
|
+
return [draftKeyOf(path), current === undefined ? "" : JSON.stringify(current, null, 2)];
|
|
162
|
+
})));
|
|
163
|
+
const composed = React.useMemo(() => composeEditedArguments(schema, values, jsonDrafts), [schema, values, jsonDrafts]);
|
|
164
|
+
// Held in a ref so a parent that does not memoize its handler cannot turn this report into a render loop.
|
|
165
|
+
const onChangeRef = React.useRef(onChange);
|
|
166
|
+
onChangeRef.current = onChange;
|
|
167
|
+
React.useEffect(() => {
|
|
168
|
+
onChangeRef.current({ value: composed.value, invalid: composed.invalidDraftKeys.length > 0 });
|
|
169
|
+
}, [composed]);
|
|
170
|
+
const renderGroup = (group, prefix) => Object.entries(group.properties).map(([key, descriptor]) => {
|
|
171
|
+
const path = [...prefix, key];
|
|
172
|
+
const id = `approval-argument-${path.join("-")}`;
|
|
173
|
+
const required = !descriptor.optional && !descriptor.nullable;
|
|
174
|
+
const current = readAtPath(values, path);
|
|
175
|
+
const set = (next) => setValues((previous) => writeAtPath(previous, path, next));
|
|
176
|
+
// Keys render VERBATIM: they are the tool's own parameter names and carry no i18n entry.
|
|
177
|
+
const label = _jsx("label", { htmlFor: id, className: "font-mono text-2xs text-muted-foreground", children: key });
|
|
178
|
+
const kind = classifyArgumentDescriptor(descriptor);
|
|
179
|
+
switch (kind) {
|
|
180
|
+
case ApprovalArgumentEditorKind.TEXT:
|
|
181
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [label, _jsx(InputRoot, { id: id, value: typeof current === "string" ? current : "", required: required, disabled: disabled, className: "font-mono text-2xs",
|
|
182
|
+
// Emptying an OPTIONAL string omits it; a required one stays an empty string, which the
|
|
183
|
+
// server's validation then names if the tool refuses it.
|
|
184
|
+
onChange: (event) => set(event.target.value === "" && !required ? undefined : event.target.value) })] }, id));
|
|
185
|
+
case ApprovalArgumentEditorKind.NUMBER:
|
|
186
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [label, _jsx(InputRoot, { id: id, type: "number", value: typeof current === "number" ? String(current) : "", required: required, disabled: disabled, className: "font-mono text-2xs", onChange: (event) => set(event.target.value === "" ? undefined : Number(event.target.value)) })] }, id));
|
|
187
|
+
case ApprovalArgumentEditorKind.BOOLEAN:
|
|
188
|
+
return (_jsxs("div", { className: "flex items-center gap-element", children: [_jsx(CheckboxRoot, { id: id, checked: current === true, disabled: disabled, onCheckedChange: (checked) => set(checked === true) }), label] }, id));
|
|
189
|
+
case ApprovalArgumentEditorKind.CHOICE: {
|
|
190
|
+
// The values are the tool's own identifiers and render as authored, for the same reason as the keys.
|
|
191
|
+
const options = descriptor.type === "enum" ? descriptor.values : [String(descriptor.value)];
|
|
192
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [label, _jsxs(SelectRoot, { value: typeof current === "string" ? current : undefined, onValueChange: (next) => set(next), disabled: disabled, required: required, children: [_jsx(SelectTrigger, { id: id, className: "font-mono text-2xs", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: options.map((option) => (_jsx(SelectItem, { value: option, children: option }, option))) })] })] }, id));
|
|
193
|
+
}
|
|
194
|
+
case ApprovalArgumentEditorKind.GROUP:
|
|
195
|
+
return (_jsxs("fieldset", { className: "flex min-w-0 flex-col gap-element rounded-md border p-2", children: [_jsx("legend", { className: "font-mono text-2xs text-muted-foreground", children: key }), renderGroup(descriptor, path)] }, id));
|
|
196
|
+
case ApprovalArgumentEditorKind.JSON: {
|
|
197
|
+
const draftKey = draftKeyOf(path);
|
|
198
|
+
const invalid = composed.invalidDraftKeys.includes(draftKey);
|
|
199
|
+
return (_jsxs("div", { className: "flex flex-col gap-0.5", children: [label, _jsx(TextareaRoot, { id: id, rows: 3, value: jsonDrafts[draftKey] ?? "", disabled: disabled, className: "font-mono text-2xs", "aria-invalid": invalid || undefined, onChange: (event) => {
|
|
200
|
+
const text = event.target.value;
|
|
201
|
+
setJsonDrafts((previous) => ({ ...previous, [draftKey]: text }));
|
|
202
|
+
} }), invalid && _jsx("span", { className: "text-2xs text-destructive", children: invalidJsonMessage })] }, id));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
return _jsx("div", { className: "flex flex-col gap-element", children: renderGroup(schema, []) });
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=approval-argument-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-argument-fields.js","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/decision/approval-argument-fields.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n CheckboxRoot,\n InputRoot,\n SelectContent,\n SelectItem,\n SelectRoot,\n SelectTrigger,\n SelectValue,\n TextareaRoot,\n} from '@wildo-ai/saas-frontend-lib';\nimport type { SerializableZodSchema } from '@wildo-ai/zod-decorators';\n\n//===============================================================\n// Approval argument fields (#587)\n//\n// A field editor over a gated tool call's arguments, generated from the tool's input-schema\n// descriptor, used by `AI_ApprovalRequest` when an approver edits the call.\n//\n// ## Why not the automated-form pipeline\n//\n// The issue pointed at `AutomatedForm`. It was checked against this surface and rejected on three\n// counts. Its default label resolution humanizes field names, while a tool's argument keys must\n// render VERBATIM — they carry no i18n entry, and turning `renameTodo` into \"Rename Todo\" is invented\n// display text. It owns a submit lifecycle, while an approval is decided by the Approve / Deny actions\n// beside it. And its field registry assumes a resource-aware form context an agent's tool does not\n// have. This surface needs something narrower — one control per argument, seeded from the proposed\n// call, reporting a value — so it is built from the same preset controls instead.\n//\n// ## A convenience, never the control\n//\n// The descriptor drops refinements (length, range, pattern) by construction, and nothing here\n// validates beyond \"does this JSON parse\". The server re-validates the edit against the tool's live\n// schema and refuses a violation with a message naming the argument; that refusal is what protects\n// the call.\n//\n// ## Anything a field cannot express is edited as JSON, per argument\n//\n// Lists, records, unions, dates and unknown shapes each keep a small JSON editor of their own, so one\n// awkward argument never forces the whole call back into a blob — and a descriptor with nothing a\n// field can express is not offered as fields at all (see `fieldsEditableArgumentsSchema`).\n//===============================================================\n\n/** Which editor an approver is authoring a call in. */\nexport enum ApprovalArgumentEditorMode {\n /** One field per argument, generated from the tool's input-schema descriptor. */\n FIELDS = \"fields\",\n /** The arguments as one JSON object — always reachable, and the fallback for shapes fields cannot express. */\n JSON = \"json\",\n}\n\n/** How one argument is edited. A closed vocabulary: the editor switches on it exhaustively. */\nexport enum ApprovalArgumentEditorKind {\n /** A free-text string. */\n TEXT = \"text\",\n /** A number. */\n NUMBER = \"number\",\n /** A boolean. */\n BOOLEAN = \"boolean\",\n /** One of a fixed set of string values — an enum, or a string literal. */\n CHOICE = \"choice\",\n /** A nested object, edited as a group of its own arguments. */\n GROUP = \"group\",\n /** Any shape a single field cannot express — edited as that argument's own JSON text. */\n JSON = \"json\",\n}\n\nexport type ApprovalArgumentsObjectDescriptor = Extract<SerializableZodSchema, { type: \"object\" }>;\ntype ArgumentPath = readonly string[];\n\n/**\n * The editor for one argument's descriptor.\n *\n * semantic-literal-boundary: `SerializableZodSchema.type` is a type-level union declared by\n * `@wildo-ai/zod-decorators` with no runtime enum to compare against; this switch is where that\n * external vocabulary is translated into {@link ApprovalArgumentEditorKind}.\n */\nexport function classifyArgumentDescriptor(descriptor: SerializableZodSchema): ApprovalArgumentEditorKind {\n switch (descriptor.type) {\n case \"string\":\n return ApprovalArgumentEditorKind.TEXT;\n case \"number\":\n return ApprovalArgumentEditorKind.NUMBER;\n case \"boolean\":\n return ApprovalArgumentEditorKind.BOOLEAN;\n case \"enum\":\n return ApprovalArgumentEditorKind.CHOICE;\n case \"literal\":\n return typeof descriptor.value === \"string\" ? ApprovalArgumentEditorKind.CHOICE : ApprovalArgumentEditorKind.JSON;\n case \"object\":\n return ApprovalArgumentEditorKind.GROUP;\n default:\n return ApprovalArgumentEditorKind.JSON;\n }\n}\n\n/**\n * The descriptor as fields, or `undefined` when fields would add nothing.\n *\n * Fields are offered only for an OBJECT whose properties include at least one argument a field can\n * express. A root that is not an object, or an object made only of JSON-edited shapes, would be a JSON\n * editor wearing a form's clothes — the raw editor is the honest answer there.\n */\nexport function fieldsEditableArgumentsSchema(descriptor: unknown): ApprovalArgumentsObjectDescriptor | undefined {\n if (!descriptor || typeof descriptor !== \"object\") return undefined;\n const candidate = descriptor as SerializableZodSchema;\n if (candidate.type !== \"object\" || !candidate.properties || typeof candidate.properties !== \"object\") return undefined;\n const offersAField = Object.values(candidate.properties)\n .some((property) => classifyArgumentDescriptor(property) !== ApprovalArgumentEditorKind.JSON);\n return offersAField ? candidate : undefined;\n}\n\nfunction readAtPath(value: unknown, path: ArgumentPath): unknown {\n return path.reduce<unknown>(\n (current, key) => (current !== null && typeof current === \"object\" ? (current as Record<string, unknown>)[key] : undefined),\n value,\n );\n}\n\n/** Immutable write; writing `undefined` REMOVES the argument, because an omitted argument and an empty one differ. */\nfunction writeAtPath(value: Record<string, unknown>, path: ArgumentPath, next: unknown): Record<string, unknown> {\n const [head, ...rest] = path;\n if (head === undefined) return value;\n const copy: Record<string, unknown> = { ...value };\n if (rest.length === 0) {\n if (next === undefined) delete copy[head];\n else copy[head] = next;\n return copy;\n }\n const child = copy[head];\n copy[head] = writeAtPath(\n child !== null && typeof child === \"object\" && !Array.isArray(child) ? (child as Record<string, unknown>) : {},\n rest,\n next,\n );\n return copy;\n}\n\nconst draftKeyOf = (path: ArgumentPath): string => JSON.stringify(path);\n\nfunction collectJsonPaths(schema: ApprovalArgumentsObjectDescriptor, prefix: ArgumentPath = []): ArgumentPath[] {\n return Object.entries(schema.properties).flatMap(([key, child]) => {\n const path = [...prefix, key];\n const kind = classifyArgumentDescriptor(child);\n if (kind === ApprovalArgumentEditorKind.GROUP) return collectJsonPaths(child as ApprovalArgumentsObjectDescriptor, path);\n return kind === ApprovalArgumentEditorKind.JSON ? [path] : [];\n });\n}\n\n/**\n * The arguments the approver has AUTHORED: the field values, with every JSON-edited argument parsed\n * back in. `value` is `undefined` whenever any of those texts does not parse — the approval must not be\n * submittable then, or it would silently send the model's value for an argument the approver believes\n * they changed. An emptied JSON text omits that argument.\n */\nexport function composeEditedArguments(\n schema: ApprovalArgumentsObjectDescriptor,\n values: Record<string, unknown>,\n jsonDrafts: Readonly<Record<string, string>>,\n): { value: Record<string, unknown> | undefined; invalidDraftKeys: readonly string[] } {\n let composed = values;\n const invalidDraftKeys: string[] = [];\n for (const path of collectJsonPaths(schema)) {\n const key = draftKeyOf(path);\n const draft = jsonDrafts[key];\n if (draft === undefined) continue;\n if (draft.trim() === \"\") {\n composed = writeAtPath(composed, path, undefined);\n continue;\n }\n try {\n composed = writeAtPath(composed, path, JSON.parse(draft) as unknown);\n } catch {\n invalidDraftKeys.push(key);\n }\n }\n return { value: invalidDraftKeys.length > 0 ? undefined : composed, invalidDraftKeys };\n}\n\nexport type ApprovalArgumentFieldsProps = {\n schema: ApprovalArgumentsObjectDescriptor;\n /** The arguments to start from — so the approver changes one value rather than retyping the call. */\n initialValue: Record<string, unknown>;\n disabled?: boolean;\n /** Shown under a JSON-edited argument whose text does not parse. */\n invalidJsonMessage: string;\n /** Called with the authored arguments whenever they change; `invalid` while any JSON text does not parse. */\n onChange: (next: { value: Record<string, unknown> | undefined; invalid: boolean }) => void;\n};\n\nexport function ApprovalArgumentFields({\n schema,\n initialValue,\n disabled,\n invalidJsonMessage,\n onChange,\n}: ApprovalArgumentFieldsProps): React.JSX.Element {\n const [values, setValues] = React.useState<Record<string, unknown>>(initialValue);\n const [jsonDrafts, setJsonDrafts] = React.useState<Record<string, string>>(() =>\n Object.fromEntries(collectJsonPaths(schema).map((path) => {\n const current = readAtPath(initialValue, path);\n return [draftKeyOf(path), current === undefined ? \"\" : JSON.stringify(current, null, 2)];\n })),\n );\n const composed = React.useMemo(() => composeEditedArguments(schema, values, jsonDrafts), [schema, values, jsonDrafts]);\n\n // Held in a ref so a parent that does not memoize its handler cannot turn this report into a render loop.\n const onChangeRef = React.useRef(onChange);\n onChangeRef.current = onChange;\n React.useEffect(() => {\n onChangeRef.current({ value: composed.value, invalid: composed.invalidDraftKeys.length > 0 });\n }, [composed]);\n\n const renderGroup = (group: ApprovalArgumentsObjectDescriptor, prefix: ArgumentPath): React.ReactNode =>\n Object.entries(group.properties).map(([key, descriptor]) => {\n const path = [...prefix, key];\n const id = `approval-argument-${path.join(\"-\")}`;\n const required = !descriptor.optional && !descriptor.nullable;\n const current = readAtPath(values, path);\n const set = (next: unknown): void => setValues((previous) => writeAtPath(previous, path, next));\n // Keys render VERBATIM: they are the tool's own parameter names and carry no i18n entry.\n const label = <label htmlFor={id} className=\"font-mono text-2xs text-muted-foreground\">{key}</label>;\n const kind = classifyArgumentDescriptor(descriptor);\n\n switch (kind) {\n case ApprovalArgumentEditorKind.TEXT:\n return (\n <div key={id} className=\"flex flex-col gap-0.5\">\n {label}\n <InputRoot\n id={id}\n value={typeof current === \"string\" ? current : \"\"}\n required={required}\n disabled={disabled}\n className=\"font-mono text-2xs\"\n // Emptying an OPTIONAL string omits it; a required one stays an empty string, which the\n // server's validation then names if the tool refuses it.\n onChange={(event) => set(event.target.value === \"\" && !required ? undefined : event.target.value)}\n />\n </div>\n );\n case ApprovalArgumentEditorKind.NUMBER:\n return (\n <div key={id} className=\"flex flex-col gap-0.5\">\n {label}\n <InputRoot\n id={id}\n type=\"number\"\n value={typeof current === \"number\" ? String(current) : \"\"}\n required={required}\n disabled={disabled}\n className=\"font-mono text-2xs\"\n onChange={(event) => set(event.target.value === \"\" ? undefined : Number(event.target.value))}\n />\n </div>\n );\n case ApprovalArgumentEditorKind.BOOLEAN:\n return (\n <div key={id} className=\"flex items-center gap-element\">\n <CheckboxRoot\n id={id}\n checked={current === true}\n disabled={disabled}\n onCheckedChange={(checked) => set(checked === true)}\n />\n {label}\n </div>\n );\n case ApprovalArgumentEditorKind.CHOICE: {\n // The values are the tool's own identifiers and render as authored, for the same reason as the keys.\n const options = descriptor.type === \"enum\" ? descriptor.values : [String((descriptor as { value: unknown }).value)];\n return (\n <div key={id} className=\"flex flex-col gap-0.5\">\n {label}\n <SelectRoot\n value={typeof current === \"string\" ? current : undefined}\n onValueChange={(next) => set(next)}\n disabled={disabled}\n required={required}\n >\n <SelectTrigger id={id} className=\"font-mono text-2xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map((option) => (\n <SelectItem key={option} value={option}>{option}</SelectItem>\n ))}\n </SelectContent>\n </SelectRoot>\n </div>\n );\n }\n case ApprovalArgumentEditorKind.GROUP:\n return (\n <fieldset key={id} className=\"flex min-w-0 flex-col gap-element rounded-md border p-2\">\n <legend className=\"font-mono text-2xs text-muted-foreground\">{key}</legend>\n {renderGroup(descriptor as ApprovalArgumentsObjectDescriptor, path)}\n </fieldset>\n );\n case ApprovalArgumentEditorKind.JSON: {\n const draftKey = draftKeyOf(path);\n const invalid = composed.invalidDraftKeys.includes(draftKey);\n return (\n <div key={id} className=\"flex flex-col gap-0.5\">\n {label}\n <TextareaRoot\n id={id}\n rows={3}\n value={jsonDrafts[draftKey] ?? \"\"}\n disabled={disabled}\n className=\"font-mono text-2xs\"\n aria-invalid={invalid || undefined}\n onChange={(event) => {\n const text = event.target.value;\n setJsonDrafts((previous) => ({ ...previous, [draftKey]: text }));\n }}\n />\n {invalid && <span className=\"text-2xs text-destructive\">{invalidJsonMessage}</span>}\n </div>\n );\n }\n }\n });\n\n return <div className=\"flex flex-col gap-element\">{renderGroup(schema, [])}</div>;\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { Alert } from '@wildo-ai/saas-frontend-lib';
|
|
3
|
+
import type { SerializableZodSchema } from '@wildo-ai/zod-decorators';
|
|
3
4
|
import type { ComponentProps } from "react";
|
|
4
5
|
export type AI_ApprovalRequestProps = ComponentProps<typeof Alert> & {
|
|
5
6
|
approvalId: string;
|
|
@@ -24,23 +25,54 @@ export type AI_ApprovalRequestProps = ComponentProps<typeof Alert> & {
|
|
|
24
25
|
*/
|
|
25
26
|
toolName?: string;
|
|
26
27
|
executionContext?: Record<string, unknown>;
|
|
27
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Offer the approver an EDITOR over the proposed arguments (#566).
|
|
30
|
+
*
|
|
31
|
+
* Off by default, and it is not a styling preference: turning it on changes what an approval MEANS
|
|
32
|
+
* — the approver stops assenting to the agent's call and starts authoring one. A surface that
|
|
33
|
+
* shows the editor must be wired to a decision path that carries the result, or it collects a
|
|
34
|
+
* change and drops it, which is the failure #537 refused to ship.
|
|
35
|
+
*
|
|
36
|
+
* The editor offers the tool's FIELDS when `argumentsSchema` describes a shape they can express
|
|
37
|
+
* (#587), and raw JSON otherwise; the raw editor stays one click away in both cases. Neither is the
|
|
38
|
+
* control: the server re-validates the edit against the tool's live schema and refuses a violation
|
|
39
|
+
* with a readable message, which is why a field editor that drops refinements is still honest.
|
|
40
|
+
*/
|
|
41
|
+
allowArgumentModification?: boolean;
|
|
42
|
+
/** The gated tool's input-schema descriptor (#587). Absent, or a shape fields cannot express, means raw JSON. */
|
|
43
|
+
argumentsSchema?: SerializableZodSchema;
|
|
44
|
+
/**
|
|
45
|
+
* Why the last submitted edit was refused (#587), as LOCALIZED text. The approval is still pending: the
|
|
46
|
+
* editor reopens on the refused arguments and shows this reason beside them. The engine wrapper renders it
|
|
47
|
+
* from the approval's own labels, one per refusal reason, naming the tool and the offending arguments
|
|
48
|
+
* (#1186) — a direct consumer must pass words the reader can read, never a server's sentence.
|
|
49
|
+
*/
|
|
50
|
+
argumentModificationError?: string;
|
|
51
|
+
/** What the approver submitted when that edit was refused (#587) — the reopened editor starts from it. */
|
|
52
|
+
rejectedArguments?: Record<string, unknown>;
|
|
53
|
+
/**
|
|
54
|
+
* `modifiedToolArgs` is present only when the approver EDITED the arguments. Absent means "run the
|
|
55
|
+
* call as proposed", which is what every approval meant before this parameter existed.
|
|
56
|
+
*/
|
|
57
|
+
onApprove?: (approvalId: string, comment?: string, modifiedToolArgs?: Record<string, unknown>) => void;
|
|
28
58
|
onDeny?: (approvalId: string, comment?: string) => void;
|
|
29
59
|
onEscalate?: (approvalId: string, comment?: string) => void;
|
|
30
60
|
isProcessing?: boolean;
|
|
31
61
|
createdAt?: Date;
|
|
32
62
|
};
|
|
33
|
-
export declare const AI_ApprovalRequest: ({ approvalId, actionDescription, riskLevel, executionId, systemRef, expiresAt, requiredRoles, toolName, executionContext, onApprove, onDeny, onEscalate, isProcessing, createdAt, className, ...props }: AI_ApprovalRequestProps) => React.JSX.Element | null;
|
|
63
|
+
export declare const AI_ApprovalRequest: ({ approvalId, actionDescription, riskLevel, executionId, systemRef, expiresAt, requiredRoles, toolName, executionContext, allowArgumentModification, argumentsSchema, argumentModificationError, rejectedArguments, onApprove, onDeny, onEscalate, isProcessing, createdAt, className, ...props }: AI_ApprovalRequestProps) => React.JSX.Element | null;
|
|
34
64
|
export type AI_ApprovalActionsProps = ComponentProps<"div"> & {
|
|
35
65
|
approvalId: string;
|
|
36
66
|
riskLevel?: "low" | "medium" | "high" | "critical";
|
|
37
|
-
|
|
67
|
+
/** Present only while the approver has the argument editor open with a parseable draft (#566). */
|
|
68
|
+
modifiedToolArgs?: Record<string, unknown>;
|
|
69
|
+
onApprove?: (approvalId: string, comment?: string, modifiedToolArgs?: Record<string, unknown>) => void;
|
|
38
70
|
onDeny?: (approvalId: string, comment?: string) => void;
|
|
39
71
|
onEscalate?: (approvalId: string, comment?: string) => void;
|
|
40
72
|
isProcessing?: boolean;
|
|
41
73
|
disabled?: boolean;
|
|
42
74
|
};
|
|
43
|
-
export declare const AI_ApprovalActions: ({ approvalId, riskLevel, onApprove, onDeny, onEscalate, isProcessing, disabled, className, ...props }: AI_ApprovalActionsProps) => React.JSX.Element | null;
|
|
75
|
+
export declare const AI_ApprovalActions: ({ approvalId, riskLevel, modifiedToolArgs, onApprove, onDeny, onEscalate, isProcessing, disabled, className, ...props }: AI_ApprovalActionsProps) => React.JSX.Element | null;
|
|
44
76
|
export type AI_ApprovalQueueItem = {
|
|
45
77
|
approvalId: string;
|
|
46
78
|
executionId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../../../../src/components/ai-elements/decision/approval.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, Badge, Button, ButtonVariants_Variant, ScrollArea, TextareaRoot, cn, useI18n, Surface, } from '@wildo-ai/saas-frontend-lib';
|
|
5
5
|
import { FrontendComponentType, ButtonSize, SurfaceVariant } from "@wildo-ai/presets-components-models";
|
|
6
|
+
import { ApprovalArgumentEditorMode, ApprovalArgumentFields, fieldsEditableArgumentsSchema } from "./approval-argument-fields.js";
|
|
6
7
|
const CT = FrontendComponentType.LOW_LEVEL_AI_APPROVAL;
|
|
7
8
|
//===============================================================
|
|
8
9
|
// Human-in-the-Loop Approval Components
|
|
@@ -40,25 +41,94 @@ function useCountdown(expiresAt) {
|
|
|
40
41
|
: `${seconds}s`;
|
|
41
42
|
return { remaining, isExpired: false };
|
|
42
43
|
}
|
|
43
|
-
export const AI_ApprovalRequest = ({ approvalId, actionDescription, riskLevel, executionId, systemRef, expiresAt, requiredRoles, toolName, executionContext, onApprove, onDeny, onEscalate, isProcessing, createdAt, className, ...props }) => {
|
|
44
|
+
export const AI_ApprovalRequest = ({ approvalId, actionDescription, riskLevel, executionId, systemRef, expiresAt, requiredRoles, toolName, executionContext, allowArgumentModification, argumentsSchema, argumentModificationError, rejectedArguments, onApprove, onDeny, onEscalate, isProcessing, createdAt, className, ...props }) => {
|
|
44
45
|
const { tComponent, isReady } = useI18n({ component: CT });
|
|
45
46
|
const { remaining, isExpired } = useCountdown(expiresAt);
|
|
46
47
|
const variant = riskLevel === "critical" || riskLevel === "high" ? "destructive" : "default";
|
|
48
|
+
/*
|
|
49
|
+
* The argument editor's state (#566).
|
|
50
|
+
*
|
|
51
|
+
* `draft` is `null` while the approver is reading rather than editing — distinct from an empty
|
|
52
|
+
* string, which is a draft they have cleared. Opening the editor seeds it from the PROPOSED
|
|
53
|
+
* arguments, so the starting point is the call the agent asked for and an approver changes one
|
|
54
|
+
* value rather than retyping the object.
|
|
55
|
+
*/
|
|
56
|
+
const fieldsSchema = React.useMemo(() => fieldsEditableArgumentsSchema(argumentsSchema), [argumentsSchema]);
|
|
57
|
+
/*
|
|
58
|
+
* A refused edit reopens on what the approver SUBMITTED (#587). The request unmounted while its
|
|
59
|
+
* decision was in flight, so without this the approver would land back on the model's proposal and
|
|
60
|
+
* lose the change the server has just explained.
|
|
61
|
+
*/
|
|
62
|
+
const reopenedOn = argumentModificationError !== undefined ? (rejectedArguments ?? executionContext) : undefined;
|
|
63
|
+
const [editorMode, setEditorMode] = React.useState(() => reopenedOn === undefined ? null : fieldsSchema ? ApprovalArgumentEditorMode.FIELDS : ApprovalArgumentEditorMode.JSON);
|
|
64
|
+
// The value the field editor (re)mounts on — replaced when the approver switches back from JSON.
|
|
65
|
+
const [fieldsSeed, setFieldsSeed] = React.useState(() => reopenedOn ?? executionContext ?? {});
|
|
66
|
+
const [fieldsEdit, setFieldsEdit] = React.useState({
|
|
67
|
+
value: undefined,
|
|
68
|
+
invalid: false,
|
|
69
|
+
});
|
|
70
|
+
const handleFieldsChange = React.useCallback((next) => setFieldsEdit(next), []);
|
|
71
|
+
const [draft, setDraft] = React.useState(() => JSON.stringify(reopenedOn ?? executionContext ?? {}, null, 2));
|
|
72
|
+
const parsedDraft = React.useMemo(() => {
|
|
73
|
+
try {
|
|
74
|
+
const value = JSON.parse(draft);
|
|
75
|
+
// An array or a scalar is valid JSON and cannot be a tool's arguments. Refusing it HERE spares
|
|
76
|
+
// the round trip; the server refuses it too, which is what actually protects the call.
|
|
77
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
78
|
+
return { value: undefined, invalid: true };
|
|
79
|
+
return { value: value, invalid: false };
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return { value: undefined, invalid: true };
|
|
83
|
+
}
|
|
84
|
+
}, [draft]);
|
|
47
85
|
if (!isReady)
|
|
48
86
|
return null;
|
|
49
|
-
return (_jsxs(Alert, { variant: variant, className: cn("flex flex-col gap-card-sm", className), ...props, children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("div", { className: "flex items-center gap-element", children: [riskLevel && (_jsx(Badge, { variant: riskLevel === "critical" || riskLevel === "high" ? "destructive" : "outline", className: "text-2xs", children: tComponent(CT, `risk${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)}`) })), systemRef && (_jsx("span", { className: "text-2xs text-muted-foreground", children: systemRef }))] }), remaining && (_jsx(Badge, { variant: "secondary", className: "text-2xs tabular-nums", children: tComponent(CT, "expiresCountdown", { time: remaining }) })), isExpired && (_jsx(Badge, { variant: "destructive", className: "text-2xs", children: tComponent(CT, "expired") }))] }), _jsx(AlertDescription, { className: "text-sm", children: actionDescription }), requiredRoles && requiredRoles.length > 0 && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "requiredRoles"), ":"] }), _jsx("div", { className: "flex gap-1", children: requiredRoles.map((role) => (_jsx(Badge, { variant: "outline", className: "text-2xs", children: role }, role))) })] })), toolName !== undefined && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolCall"), ":"] }), _jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-2xs font-mono", children: toolName })] })), executionContext && Object.keys(executionContext).length > 0 && (_jsxs("div", { className: "flex flex-col gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolArguments"), ":"] }),
|
|
87
|
+
return (_jsxs(Alert, { variant: variant, className: cn("flex flex-col gap-card-sm", className), ...props, children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("div", { className: "flex items-center gap-element", children: [riskLevel && (_jsx(Badge, { variant: riskLevel === "critical" || riskLevel === "high" ? "destructive" : "outline", className: "text-2xs", children: tComponent(CT, `risk${riskLevel.charAt(0).toUpperCase()}${riskLevel.slice(1)}`) })), systemRef && (_jsx("span", { className: "text-2xs text-muted-foreground", children: systemRef }))] }), remaining && (_jsx(Badge, { variant: "secondary", className: "text-2xs tabular-nums", children: tComponent(CT, "expiresCountdown", { time: remaining }) })), isExpired && (_jsx(Badge, { variant: "destructive", className: "text-2xs", children: tComponent(CT, "expired") }))] }), _jsx(AlertDescription, { className: "text-sm", children: actionDescription }), requiredRoles && requiredRoles.length > 0 && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "requiredRoles"), ":"] }), _jsx("div", { className: "flex gap-1", children: requiredRoles.map((role) => (_jsx(Badge, { variant: "outline", className: "text-2xs", children: role }, role))) })] })), toolName !== undefined && (_jsxs("div", { className: "flex items-center gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolCall"), ":"] }), _jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-2xs font-mono", children: toolName })] })), executionContext && Object.keys(executionContext).length > 0 && (_jsxs("div", { className: "flex flex-col gap-element", children: [_jsxs("div", { className: "flex items-center justify-between gap-element", children: [_jsxs("span", { className: "text-2xs text-muted-foreground", children: [tComponent(CT, "toolArguments"), ":"] }), allowArgumentModification && (_jsxs("div", { className: "flex items-center gap-1", children: [editorMode !== null && fieldsSchema && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing || isExpired || (editorMode === ApprovalArgumentEditorMode.JSON && parsedDraft.invalid), onClick: () => {
|
|
88
|
+
if (editorMode === ApprovalArgumentEditorMode.FIELDS) {
|
|
89
|
+
setDraft(JSON.stringify(fieldsEdit.value ?? fieldsSeed, null, 2));
|
|
90
|
+
setEditorMode(ApprovalArgumentEditorMode.JSON);
|
|
91
|
+
}
|
|
92
|
+
else if (parsedDraft.value) {
|
|
93
|
+
setFieldsSeed(parsedDraft.value);
|
|
94
|
+
setEditorMode(ApprovalArgumentEditorMode.FIELDS);
|
|
95
|
+
}
|
|
96
|
+
}, children: tComponent(CT, editorMode === ApprovalArgumentEditorMode.FIELDS ? "editArgumentsAsJson" : "editArgumentsAsFields") })), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.GHOST, size: ButtonSize.SM, disabled: isProcessing || isExpired, onClick: () => {
|
|
97
|
+
if (editorMode !== null) {
|
|
98
|
+
setEditorMode(null);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Opening always starts from the call the agent PROPOSED.
|
|
102
|
+
const proposed = executionContext ?? {};
|
|
103
|
+
setFieldsSeed(proposed);
|
|
104
|
+
setDraft(JSON.stringify(proposed, null, 2));
|
|
105
|
+
setEditorMode(fieldsSchema ? ApprovalArgumentEditorMode.FIELDS : ApprovalArgumentEditorMode.JSON);
|
|
106
|
+
}, children: tComponent(CT, editorMode === null ? "editArguments" : "discardArgumentEdits") })] }))] }), argumentModificationError !== undefined && editorMode !== null && (_jsxs("span", { className: "text-2xs text-destructive", children: [tComponent(CT, "argumentModificationRefused"), ": ", argumentModificationError] })), editorMode === null ? (_jsx(Surface, { asChild: true, emitPolicyVars: false, variant: SurfaceVariant.INSET, children: _jsx("dl", { className: "grid grid-cols-[auto_1fr] gap-x-element gap-y-0.5 rounded-md bg-muted p-2 text-2xs", children: Object.entries(executionContext).map(([key, value]) => (_jsxs(React.Fragment, { children: [_jsx("dt", { className: "font-mono text-muted-foreground", children: key }), _jsx("dd", { className: "min-w-0 break-words font-mono", children: typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
50
107
|
? String(value)
|
|
51
|
-
: JSON.stringify(value) })] }, key))) }) })] })), _jsx(AI_ApprovalActions, { approvalId: approvalId, riskLevel: riskLevel, onApprove: onApprove, onDeny: onDeny, onEscalate: onEscalate, isProcessing: isProcessing,
|
|
108
|
+
: JSON.stringify(value) })] }, key))) }) })) : editorMode === ApprovalArgumentEditorMode.FIELDS && fieldsSchema ? (_jsx(ApprovalArgumentFields, { schema: fieldsSchema, initialValue: fieldsSeed, disabled: isProcessing || isExpired, invalidJsonMessage: tComponent(CT, "argumentValueNotValidJson"), onChange: handleFieldsChange })) : (_jsxs(_Fragment, { children: [_jsx(TextareaRoot, { rows: Math.min(12, Object.keys(executionContext).length + 3), value: draft, onChange: (e) => setDraft(e.target.value), className: "font-mono text-2xs", disabled: isProcessing || isExpired, "aria-invalid": parsedDraft.invalid || undefined, "aria-label": tComponent(CT, "editArguments") }), parsedDraft.invalid && (_jsx("span", { className: "text-2xs text-destructive", children: tComponent(CT, "argumentsNotValidJson") }))] }))] })), _jsx(AI_ApprovalActions, { approvalId: approvalId, riskLevel: riskLevel, onApprove: onApprove, onDeny: onDeny, onEscalate: onEscalate, isProcessing: isProcessing,
|
|
109
|
+
// Approving with unparseable text would send nothing and silently run the model's own
|
|
110
|
+
// arguments — a change collected and dropped, which is the one outcome this feature exists
|
|
111
|
+
// to prevent. The button is unavailable until the draft is an object.
|
|
112
|
+
disabled: isExpired
|
|
113
|
+
|| (editorMode === ApprovalArgumentEditorMode.FIELDS && fieldsEdit.invalid)
|
|
114
|
+
|| (editorMode === ApprovalArgumentEditorMode.JSON && parsedDraft.invalid),
|
|
115
|
+
// Whatever the approver is authoring in — and `undefined` whenever the editor is closed, which is
|
|
116
|
+
// what "run the call as proposed" means on the wire.
|
|
117
|
+
modifiedToolArgs: editorMode === ApprovalArgumentEditorMode.FIELDS
|
|
118
|
+
? fieldsEdit.value
|
|
119
|
+
: editorMode === ApprovalArgumentEditorMode.JSON
|
|
120
|
+
? parsedDraft.value
|
|
121
|
+
: undefined })] }));
|
|
52
122
|
};
|
|
53
|
-
export const AI_ApprovalActions = ({ approvalId, riskLevel, onApprove, onDeny, onEscalate, isProcessing, disabled, className, ...props }) => {
|
|
123
|
+
export const AI_ApprovalActions = ({ approvalId, riskLevel, modifiedToolArgs, onApprove, onDeny, onEscalate, isProcessing, disabled, className, ...props }) => {
|
|
54
124
|
const { tComponent, isReady } = useI18n({ component: CT });
|
|
55
125
|
const [comment, setComment] = React.useState("");
|
|
56
126
|
const isHighRisk = riskLevel === "high" || riskLevel === "critical";
|
|
57
127
|
const actionsDisabled = isProcessing || disabled;
|
|
58
128
|
if (!isReady)
|
|
59
129
|
return null;
|
|
60
|
-
const approveButton = (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.DEFAULT, size: ButtonSize.SM, disabled: actionsDisabled, onClick: isHighRisk ? undefined : () => onApprove?.(approvalId, comment || undefined), children: isProcessing ? tComponent(CT, "processing") : tComponent(CT, "approve") }));
|
|
61
|
-
return (_jsxs("div", { className: cn("flex flex-col gap-2", className), ...props, children: [_jsx(TextareaRoot, { rows: 2, value: comment, onChange: (e) => setComment(e.target.value), placeholder: tComponent(CT, "commentPlaceholder"), className: "text-xs", disabled: actionsDisabled }), _jsxs("div", { className: "flex items-center gap-element", children: [isHighRisk ? (_jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: approveButton }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: tComponent(CT, "confirmTitle") }), _jsx(AlertDialogDescription, { children: tComponent(CT, "confirmDescription") })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: tComponent(CT, "confirmCancel") }), _jsx(AlertDialogAction, { onClick: () => onApprove?.(approvalId, comment || undefined), children: tComponent(CT, "confirmProceed") })] })] })] })) : (approveButton), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.OUTLINE, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => onDeny?.(approvalId, comment || undefined), children: tComponent(CT, "deny") }), onEscalate && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => onEscalate?.(approvalId, comment || undefined), children: tComponent(CT, "escalate") }))] })] }));
|
|
130
|
+
const approveButton = (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.DEFAULT, size: ButtonSize.SM, disabled: actionsDisabled, onClick: isHighRisk ? undefined : () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs), children: isProcessing ? tComponent(CT, "processing") : tComponent(CT, "approve") }));
|
|
131
|
+
return (_jsxs("div", { className: cn("flex flex-col gap-2", className), ...props, children: [_jsx(TextareaRoot, { rows: 2, value: comment, onChange: (e) => setComment(e.target.value), placeholder: tComponent(CT, "commentPlaceholder"), className: "text-xs", disabled: actionsDisabled }), _jsxs("div", { className: "flex items-center gap-element", children: [isHighRisk ? (_jsxs(AlertDialog, { children: [_jsx(AlertDialogTrigger, { asChild: true, children: approveButton }), _jsxs(AlertDialogContent, { children: [_jsxs(AlertDialogHeader, { children: [_jsx(AlertDialogTitle, { children: tComponent(CT, "confirmTitle") }), _jsx(AlertDialogDescription, { children: tComponent(CT, "confirmDescription") })] }), _jsxs(AlertDialogFooter, { children: [_jsx(AlertDialogCancel, { children: tComponent(CT, "confirmCancel") }), _jsx(AlertDialogAction, { onClick: () => onApprove?.(approvalId, comment || undefined, modifiedToolArgs), children: tComponent(CT, "confirmProceed") })] })] })] })) : (approveButton), _jsx(Button, { type: "button", variant: ButtonVariants_Variant.OUTLINE, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => onDeny?.(approvalId, comment || undefined), children: tComponent(CT, "deny") }), onEscalate && (_jsx(Button, { type: "button", variant: ButtonVariants_Variant.SECONDARY, size: ButtonSize.SM, disabled: actionsDisabled, onClick: () => onEscalate?.(approvalId, comment || undefined), children: tComponent(CT, "escalate") }))] })] }));
|
|
62
132
|
};
|
|
63
133
|
//===============================================================
|
|
64
134
|
// AI_ApprovalQueue
|