@wildo-ai/presets-components 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/actions/action-bar.d.ts.map +1 -1
- package/dist/esm/components/actions/action-bar.js +65 -8
- package/dist/esm/components/actions/action-bar.js.map +1 -1
- package/dist/esm/components/actions/action-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.d.ts.map +1 -1
- package/dist/esm/components/actions/action-button.js +3 -3
- package/dist/esm/components/actions/action-button.js.map +1 -1
- package/dist/esm/components/actions/action-button.labels.d.ts.map +1 -1
- package/dist/esm/components/actions/button-group.d.ts.map +1 -1
- package/dist/esm/components/actions/button.d.ts.map +1 -1
- package/dist/esm/components/actions/button.js +62 -3
- package/dist/esm/components/actions/button.js.map +1 -1
- package/dist/esm/components/actions/button.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact-browser.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/artifact.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.js +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.js.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/code-block.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts +4 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.js +165 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.js.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts +3 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js +63 -0
- package/dist/esm/components/ai-elements/artifacts/diff-block.labels.js.map +1 -0
- package/dist/esm/components/ai-elements/artifacts/image.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/image.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/shiki-highlighter-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/shiki-highlighter.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/web-preview.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/artifacts/web-preview.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/conversation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/conversation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/message.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/message.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/prompt-input.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/prompt-input.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/sources.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/sources.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.js +8 -1
- package/dist/esm/components/ai-elements/chat/suggestion.js.map +1 -1
- package/dist/esm/components/ai-elements/chat/suggestion.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts +68 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.d.ts.map +1 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.js +208 -0
- package/dist/esm/components/ai-elements/decision/approval-argument-fields.js.map +1 -0
- package/dist/esm/components/ai-elements/decision/approval.d.ts +124 -17
- package/dist/esm/components/ai-elements/decision/approval.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/approval.js +105 -13
- package/dist/esm/components/ai-elements/decision/approval.js.map +1 -1
- package/dist/esm/components/ai-elements/decision/decision-request.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/decision/decision-request.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/confirmation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/confirmation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/queue.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/queue.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.js +1 -1
- package/dist/esm/components/ai-elements/execution/task.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/task.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.js +8 -1
- package/dist/esm/components/ai-elements/execution/tool.js.map +1 -1
- package/dist/esm/components/ai-elements/execution/tool.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/canvas.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/connection.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/connection.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/controls.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/controls.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/edge.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/edge.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts +3 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.js +3 -1
- package/dist/esm/components/ai-elements/graph/graph-runtime.js.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/graph.lazy.js +15 -15
- package/dist/esm/components/ai-elements/graph/graph.lazy.js.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/node.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/panel.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/panel.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/toolbar.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/graph/toolbar.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/agent.d.ts +0 -1
- package/dist/esm/components/ai-elements/meta/agent.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/agent.js +23 -18
- package/dist/esm/components/ai-elements/meta/agent.js.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.lazy.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/context.lazy.js +13 -11
- package/dist/esm/components/ai-elements/meta/context.lazy.js.map +1 -1
- package/dist/esm/components/ai-elements/meta/model-selector.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/model-selector.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/open-in-chat.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/meta/open-in-chat.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/loader.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/loader.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/shimmer.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/shared/shimmer.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/stream/execution-stream.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/stream/execution-stream.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts +6 -0
- package/dist/esm/components/ai-elements/trace/chain-of-thought.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.js +13 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.js.map +1 -1
- package/dist/esm/components/ai-elements/trace/chain-of-thought.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/checkpoint.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/checkpoint.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/inline-citation.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/inline-citation.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/plan.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/plan.labels.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/reasoning.d.ts.map +1 -1
- package/dist/esm/components/ai-elements/trace/reasoning.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-consent-gate.d.ts +23 -0
- package/dist/esm/components/app/app-layout-consent-gate.d.ts.map +1 -0
- package/dist/esm/components/app/app-layout-consent-gate.js +133 -0
- package/dist/esm/components/app/app-layout-consent-gate.js.map +1 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts +19 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.d.ts.map +1 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.js +56 -0
- package/dist/esm/components/app/app-layout-document-acceptance-gate.js.map +1 -0
- package/dist/esm/components/app/app-layout-main-container.d.ts +9 -0
- package/dist/esm/components/app/app-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.js +17 -23
- package/dist/esm/components/app/app-layout-main-container.js.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/app-layout-main-container.labels.js +48 -0
- package/dist/esm/components/app/app-layout-main-container.labels.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts +1 -1
- package/dist/esm/components/app/public-layout-main-container.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.js +9 -8
- package/dist/esm/components/app/public-layout-main-container.js.map +1 -1
- package/dist/esm/components/app/public-layout-main-container.labels.d.ts.map +1 -1
- package/dist/esm/components/app/public-layout-terms.d.ts +46 -0
- package/dist/esm/components/app/public-layout-terms.d.ts.map +1 -0
- package/dist/esm/components/app/public-layout-terms.js +137 -0
- package/dist/esm/components/app/public-layout-terms.js.map +1 -0
- package/dist/esm/components/billing/billing-format.utils.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.d.ts +1 -1
- package/dist/esm/components/billing/billing-invoice-history.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.js +3 -1
- package/dist/esm/components/billing/billing-invoice-history.js.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-invoice-history.labels.js +1 -0
- package/dist/esm/components/billing/billing-invoice-history.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-plan-change-preview.d.ts +5 -0
- package/dist/esm/components/billing/billing-plan-change-preview.d.ts.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.js +25 -0
- package/dist/esm/components/billing/billing-plan-change-preview.js.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts +3 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.d.ts.map +1 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js +22 -0
- package/dist/esm/components/billing/billing-plan-change-preview.labels.js.map +1 -0
- package/dist/esm/components/billing/billing-portal-link.d.ts +1 -1
- package/dist/esm/components/billing/billing-portal-link.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.js +3 -1
- package/dist/esm/components/billing/billing-portal-link.js.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-portal-link.labels.js +1 -0
- package/dist/esm/components/billing/billing-portal-link.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts +1 -1
- package/dist/esm/components/billing/billing-pricing-table.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.js +10 -4
- package/dist/esm/components/billing/billing-pricing-table.js.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.js +8 -1
- package/dist/esm/components/billing/billing-pricing-table.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.d.ts +1 -1
- package/dist/esm/components/billing/billing-subscription-status.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.js +3 -1
- package/dist/esm/components/billing/billing-subscription-status.js.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-subscription-status.labels.js +1 -0
- package/dist/esm/components/billing/billing-subscription-status.labels.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.js +10 -7
- package/dist/esm/components/billing/billing-usage-dashboard.js.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.d.ts.map +1 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js +4 -1
- package/dist/esm/components/billing/billing-usage-dashboard.labels.js.map +1 -1
- package/dist/esm/components/data-display/avatar.d.ts.map +1 -1
- package/dist/esm/components/data-display/avatar.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/badge.d.ts.map +1 -1
- package/dist/esm/components/data-display/badge.js +16 -15
- package/dist/esm/components/data-display/badge.js.map +1 -1
- package/dist/esm/components/data-display/badge.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.d.ts +2 -1
- package/dist/esm/components/data-display/description-list.d.ts.map +1 -1
- package/dist/esm/components/data-display/description-list.js +24 -8
- package/dist/esm/components/data-display/description-list.js.map +1 -1
- package/dist/esm/components/data-display/description-list.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/duration.d.ts +15 -0
- package/dist/esm/components/data-display/duration.d.ts.map +1 -0
- package/dist/esm/components/data-display/duration.js +50 -0
- package/dist/esm/components/data-display/duration.js.map +1 -0
- package/dist/esm/components/data-display/duration.labels.d.ts +15 -0
- package/dist/esm/components/data-display/duration.labels.d.ts.map +1 -0
- package/dist/esm/components/data-display/duration.labels.js +35 -0
- package/dist/esm/components/data-display/duration.labels.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.d.ts +21 -0
- package/dist/esm/components/data-display/formatters/display-field-address.d.ts.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.js +75 -0
- package/dist/esm/components/data-display/formatters/display-field-address.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts +3 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.d.ts.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.js +13 -0
- package/dist/esm/components/data-display/formatters/display-field-address.labels.js.map +1 -0
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js +6 -2
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-bigdecimal.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-boolean.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-boolean.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.js +2 -2
- package/dist/esm/components/data-display/formatters/display-field-code.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-code.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.d.ts +3 -3
- package/dist/esm/components/data-display/formatters/display-field-date.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.js +17 -4
- package/dist/esm/components/data-display/formatters/display-field-date.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-date.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts +3 -3
- package/dist/esm/components/data-display/formatters/display-field-datetime.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.js +17 -4
- package/dist/esm/components/data-display/formatters/display-field-datetime.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-datetime.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-duration.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-duration.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.js +29 -11
- package/dist/esm/components/data-display/formatters/display-field-enum.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-enum.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.js +2 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-audio.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts +4 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.js +18 -5
- package/dist/esm/components/data-display/formatters/display-field-file-document.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js +20 -0
- package/dist/esm/components/data-display/formatters/display-field-file-document.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-gallery.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-gallery.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.js +3 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-image.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-video.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file-video.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.js +14 -15
- package/dist/esm/components/data-display/formatters/display-field-file.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js +2 -0
- package/dist/esm/components/data-display/formatters/display-field-file.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-format.utils.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-i18n.utils.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-money.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-money.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.js +8 -3
- package/dist/esm/components/data-display/formatters/display-field-number.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-number.labels.js +5 -2
- package/dist/esm/components/data-display/formatters/display-field-number.labels.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-phone.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-phone.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-bigdecimal.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-date.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-date.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-datetime.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-datetime.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-money.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-money.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-number.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-number.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-time.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-range-time.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.js +129 -15
- package/dist/esm/components/data-display/formatters/display-field-string.js.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-string.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-time.d.ts.map +1 -1
- package/dist/esm/components/data-display/formatters/display-field-time.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/identifier.d.ts +19 -0
- package/dist/esm/components/data-display/identifier.d.ts.map +1 -0
- package/dist/esm/components/data-display/identifier.js +21 -0
- package/dist/esm/components/data-display/identifier.js.map +1 -0
- package/dist/esm/components/data-display/kbd.d.ts +17 -0
- package/dist/esm/components/data-display/kbd.d.ts.map +1 -0
- package/dist/esm/components/data-display/kbd.js +18 -0
- package/dist/esm/components/data-display/kbd.js.map +1 -0
- package/dist/esm/components/data-display/markdown-content.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream-runtime.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream.lazy.d.ts.map +1 -1
- package/dist/esm/components/data-display/markdown-stream.lazy.js +13 -2
- package/dist/esm/components/data-display/markdown-stream.lazy.js.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.d.ts.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.js +3 -11
- package/dist/esm/components/data-display/notification-indicator.js.map +1 -1
- package/dist/esm/components/data-display/notification-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts +63 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.d.ts.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js +75 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.js.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts +32 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.d.ts.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js +36 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer-worker.vite.js.map +1 -0
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts +46 -6
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js +70 -46
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.js.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts +12 -2
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.d.ts.map +1 -1
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js +3 -2
- package/dist/esm/components/data-display/pdf-viewer/pdf-viewer.lazy.js.map +1 -1
- package/dist/esm/components/data-display/timeline.d.ts +3 -0
- package/dist/esm/components/data-display/timeline.d.ts.map +1 -0
- package/dist/esm/components/data-display/timeline.js +92 -0
- package/dist/esm/components/data-display/timeline.js.map +1 -0
- package/dist/esm/components/data-display/untrusted-html-content.d.ts +55 -0
- package/dist/esm/components/data-display/untrusted-html-content.d.ts.map +1 -0
- package/dist/esm/components/data-display/untrusted-html-content.js +67 -0
- package/dist/esm/components/data-display/untrusted-html-content.js.map +1 -0
- package/dist/esm/components/feedback/celebration-overlay.d.ts +13 -4
- package/dist/esm/components/feedback/celebration-overlay.d.ts.map +1 -1
- package/dist/esm/components/feedback/celebration-overlay.js +146 -22
- package/dist/esm/components/feedback/celebration-overlay.js.map +1 -1
- package/dist/esm/components/feedback/celebration-overlay.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/danger-zone.d.ts.map +1 -1
- package/dist/esm/components/feedback/danger-zone.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/empty-state.d.ts.map +1 -1
- package/dist/esm/components/feedback/empty-state.js.map +1 -1
- package/dist/esm/components/feedback/empty-state.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/error-display.d.ts.map +1 -1
- package/dist/esm/components/feedback/error-display.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-limit-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-lock-badge.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-lock-badge.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-dialog.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.d.ts.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.js.map +1 -1
- package/dist/esm/components/feedback/features/feature-unavailable-prompt.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-overlay.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-overlay.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-spinner.d.ts.map +1 -1
- package/dist/esm/components/feedback/loading-spinner.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/notification-center.d.ts.map +1 -1
- package/dist/esm/components/feedback/notification-center.js +5 -5
- package/dist/esm/components/feedback/notification-center.js.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.d.ts.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.js +9 -7
- package/dist/esm/components/feedback/operations-confirm-critical.js.map +1 -1
- package/dist/esm/components/feedback/operations-confirm-critical.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/progress.d.ts.map +1 -1
- package/dist/esm/components/feedback/progress.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/skeleton.d.ts.map +1 -1
- package/dist/esm/components/feedback/skeleton.labels.d.ts.map +1 -1
- package/dist/esm/components/feedback/toast.d.ts.map +1 -1
- package/dist/esm/components/feedback/toast.labels.d.ts.map +1 -1
- package/dist/esm/components/form/autosave-indicator.d.ts.map +1 -1
- package/dist/esm/components/form/autosave-indicator.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/field.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/field.js +11 -3
- package/dist/esm/components/form/chromes/field.js.map +1 -1
- package/dist/esm/components/form/chromes/field.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.d.ts.map +1 -1
- package/dist/esm/components/form/chromes/form-primitive.labels.js +37 -0
- package/dist/esm/components/form/chromes/form-primitive.labels.js.map +1 -1
- package/dist/esm/components/form/combobox.d.ts.map +1 -1
- package/dist/esm/components/form/combobox.js +14 -13
- package/dist/esm/components/form/combobox.js.map +1 -1
- package/dist/esm/components/form/combobox.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts +42 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.d.ts.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js +120 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.adapter.js.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts +16 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.d.ts.map +1 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js +8 -0
- package/dist/esm/components/form/controls/address/providers/google-places-address-lookup.js.map +1 -0
- package/dist/esm/components/form/controls/boolean/checkbox.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.js +2 -2
- package/dist/esm/components/form/controls/boolean/checkbox.js.map +1 -1
- package/dist/esm/components/form/controls/boolean/checkbox.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/switch.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/switch.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle-group-boolean.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle-group-boolean.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle.d.ts.map +1 -1
- package/dist/esm/components/form/controls/boolean/toggle.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor-appearance.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js +11 -2
- package/dist/esm/components/form/controls/code-editor/cm6-editor.lazy.js.map +1 -1
- package/dist/esm/components/form/controls/code-editor/form-field-code.d.ts.map +1 -1
- package/dist/esm/components/form/controls/code-editor/markdown-editor.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/calendar.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/calendar.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/date-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datepicker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js +11 -2
- package/dist/esm/components/form/controls/date-time/datetime-range-picker.labels.js.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js +11 -2
- package/dist/esm/components/form/controls/date-time/time-range-picker.labels.js.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.d.ts +1 -1
- package/dist/esm/components/form/controls/enum/radio.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.js +13 -12
- package/dist/esm/components/form/controls/enum/radio.js.map +1 -1
- package/dist/esm/components/form/controls/enum/radio.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.js +5 -3
- package/dist/esm/components/form/controls/enum/select-multiple.js.map +1 -1
- package/dist/esm/components/form/controls/enum/select-multiple.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/select.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.js +96 -5
- package/dist/esm/components/form/controls/enum/toggle-group.js.map +1 -1
- package/dist/esm/components/form/controls/enum/toggle-group.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/file-upload.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/file-upload.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/image-crop.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/image-crop.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts +44 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.js +137 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts +22 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.d.ts.map +1 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js +27 -0
- package/dist/esm/components/form/controls/file/providers/dropbox-picker.lazy.js.map +1 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts +3 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js +3 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.js.map +1 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts +6 -0
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js +8 -1
- package/dist/esm/components/form/controls/file/providers/google-drive-picker.lazy.js.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts +6 -2
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js +6 -2
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.js.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts +6 -0
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.d.ts.map +1 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js +8 -1
- package/dist/esm/components/form/controls/file/providers/onedrive-picker.lazy.js.map +1 -1
- package/dist/esm/components/form/controls/input-group.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input-group.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/number/slider.labels.js +9 -2
- package/dist/esm/components/form/controls/number/slider.labels.js.map +1 -1
- package/dist/esm/components/form/controls/string/color-input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-picker-surface.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/color-picker-surface.js.map +1 -1
- package/dist/esm/components/form/controls/string/inline-edit-text.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/input-otp.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/input-otp.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.labels.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/password-input.labels.js +9 -2
- package/dist/esm/components/form/controls/string/password-input.labels.js.map +1 -1
- package/dist/esm/components/form/controls/string/textarea.d.ts.map +1 -1
- package/dist/esm/components/form/controls/string/textarea.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/aspect-ratio.d.ts.map +1 -1
- package/dist/esm/components/layout/aspect-ratio.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/carousel.d.ts.map +1 -1
- package/dist/esm/components/layout/carousel.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/divider.d.ts.map +1 -1
- package/dist/esm/components/layout/divider.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/resizable.d.ts.map +1 -1
- package/dist/esm/components/layout/resizable.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/scroll-area.d.ts.map +1 -1
- package/dist/esm/components/layout/scroll-area.labels.d.ts.map +1 -1
- package/dist/esm/components/layout/separator.d.ts.map +1 -1
- package/dist/esm/components/layout/separator.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.js +2 -2
- package/dist/esm/components/navigation/app-level/activity-bar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/activity-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.js +2 -2
- package/dist/esm/components/navigation/app-level/command-menu.js.map +1 -1
- package/dist/esm/components/navigation/app-level/command-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/control-panel.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/control-panel.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.js +10 -4
- package/dist/esm/components/navigation/app-level/menu-user-org.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.js +7 -0
- package/dist/esm/components/navigation/app-level/menu-user-org.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.js +36 -14
- package/dist/esm/components/navigation/app-level/menubar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/menubar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.js +31 -5
- package/dist/esm/components/navigation/app-level/navigation-back.js.map +1 -1
- package/dist/esm/components/navigation/app-level/navigation-back.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.js.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/notification-center.labels.js +15 -0
- package/dist/esm/components/navigation/app-level/notification-center.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.js +4 -0
- package/dist/esm/components/navigation/app-level/quick-action-button.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-switcher.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/quick-switcher.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.js +41 -25
- package/dist/esm/components/navigation/app-level/sidebar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/sidebar.labels.js +1 -0
- package/dist/esm/components/navigation/app-level/sidebar.labels.js.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.js +2 -2
- package/dist/esm/components/navigation/app-level/status-bar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/status-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.js +2 -2
- package/dist/esm/components/navigation/app-level/toolbar.js.map +1 -1
- package/dist/esm/components/navigation/app-level/toolbar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.js +24 -6
- package/dist/esm/components/navigation/app-level/utility-panel.js.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/app-level/utility-panel.labels.js.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.d.ts.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.js +1 -1
- package/dist/esm/components/navigation/breadcrumb.js.map +1 -1
- package/dist/esm/components/navigation/breadcrumb.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/command.d.ts.map +1 -1
- package/dist/esm/components/navigation/command.js +2 -2
- package/dist/esm/components/navigation/command.js.map +1 -1
- package/dist/esm/components/navigation/command.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/menu-bar.d.ts.map +1 -1
- package/dist/esm/components/navigation/menu-bar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/navbar.d.ts.map +1 -1
- package/dist/esm/components/navigation/navbar.labels.d.ts.map +1 -1
- package/dist/esm/components/navigation/sidebar.d.ts.map +1 -1
- package/dist/esm/components/navigation/sidebar.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.js +11 -1
- package/dist/esm/components/overlays/containers/alert-dialog.js.map +1 -1
- package/dist/esm/components/overlays/containers/alert-dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/alert.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.js +11 -1
- package/dist/esm/components/overlays/containers/dialog.js.map +1 -1
- package/dist/esm/components/overlays/containers/dialog.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/drawer.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/drawer.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.d.ts.map +1 -1
- package/dist/esm/components/overlays/containers/sheet.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/context-menu.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/context-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/dropdown-menu.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/hover-card.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/hover-card.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/popover.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/popover.labels.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/tooltip.d.ts.map +1 -1
- package/dist/esm/components/overlays/floating/tooltip.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.d.ts.map +1 -1
- package/dist/esm/components/sections/accordion.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/card.d.ts.map +1 -1
- package/dist/esm/components/sections/card.js +71 -6
- package/dist/esm/components/sections/card.js.map +1 -1
- package/dist/esm/components/sections/card.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.d.ts.map +1 -1
- package/dist/esm/components/sections/collapsible.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.d.ts.map +1 -1
- package/dist/esm/components/sections/content-section.js +36 -6
- package/dist/esm/components/sections/content-section.js.map +1 -1
- package/dist/esm/components/sections/disclosure-nesting.d.ts.map +1 -1
- package/dist/esm/components/sections/option-gesture.d.ts +15 -0
- package/dist/esm/components/sections/option-gesture.d.ts.map +1 -0
- package/dist/esm/components/sections/option-gesture.js +66 -0
- package/dist/esm/components/sections/option-gesture.js.map +1 -0
- package/dist/esm/components/sections/pagination.d.ts.map +1 -1
- package/dist/esm/components/sections/pagination.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/stacked-layout.d.ts.map +1 -1
- package/dist/esm/components/sections/stacked-layout.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.d.ts.map +1 -1
- package/dist/esm/components/sections/stepper.js +5 -3
- package/dist/esm/components/sections/stepper.js.map +1 -1
- package/dist/esm/components/sections/stepper.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/table.d.ts.map +1 -1
- package/dist/esm/components/sections/table.labels.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.d.ts.map +1 -1
- package/dist/esm/components/sections/tabs.js +60 -15
- package/dist/esm/components/sections/tabs.js.map +1 -1
- package/dist/esm/components/sections/tabs.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/heading.d.ts.map +1 -1
- package/dist/esm/components/typography/heading.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/label.d.ts.map +1 -1
- package/dist/esm/components/typography/label.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/link.d.ts.map +1 -1
- package/dist/esm/components/typography/link.js +9 -3
- package/dist/esm/components/typography/link.js.map +1 -1
- package/dist/esm/components/typography/link.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/text.d.ts +1 -1
- package/dist/esm/components/typography/text.d.ts.map +1 -1
- package/dist/esm/components/typography/text.js +3 -2
- package/dist/esm/components/typography/text.js.map +1 -1
- package/dist/esm/components/typography/text.labels.d.ts.map +1 -1
- package/dist/esm/components/typography/truncated-text.d.ts.map +1 -1
- package/dist/esm/config/billing-shell.presets.d.ts.map +1 -1
- package/dist/esm/config/index.d.ts.map +1 -1
- package/dist/esm/config/preset-design-system.d.ts.map +1 -1
- package/dist/esm/config/preset-design-system.js +37 -60
- package/dist/esm/config/preset-design-system.js.map +1 -1
- package/dist/esm/config/preset-error-pages.d.ts.map +1 -1
- package/dist/esm/config/preset-kits.d.ts.map +1 -1
- package/dist/esm/config/preset-navigation.d.ts.map +1 -1
- package/dist/esm/config/preset-navigation.js +23 -7
- package/dist/esm/config/preset-navigation.js.map +1 -1
- package/dist/esm/config/preset-resources.d.ts.map +1 -1
- package/dist/esm/config/preset-shell.d.ts.map +1 -1
- package/dist/esm/config/preset-utils.d.ts.map +1 -1
- package/dist/esm/config/presets.d.ts.map +1 -1
- package/dist/esm/config/resources/agent-work.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/agent-work.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/agent-work.resource-presets.js +115 -0
- package/dist/esm/config/resources/agent-work.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/api-key-rotation-window.d.ts +22 -0
- package/dist/esm/config/resources/api-key-rotation-window.d.ts.map +1 -0
- package/dist/esm/config/resources/api-key-rotation-window.js +45 -0
- package/dist/esm/config/resources/api-key-rotation-window.js.map +1 -0
- package/dist/esm/config/resources/application.resource-presets.d.ts +2 -0
- package/dist/esm/config/resources/application.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/application.resource-presets.js +268 -26
- package/dist/esm/config/resources/application.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.d.ts +4 -3
- package/dist/esm/config/resources/billing.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/billing.resource-presets.js +241 -111
- package/dist/esm/config/resources/billing.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.js +105 -0
- package/dist/esm/config/resources/conversation-threads.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/guidance.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/guidance.resource-presets.js +39 -16
- package/dist/esm/config/resources/guidance.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.d.ts +0 -13
- package/dist/esm/config/resources/identity.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/identity.resource-presets.js +71 -17
- package/dist/esm/config/resources/identity.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts +6 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.js +112 -0
- package/dist/esm/config/resources/inbound-deliveries.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.js +182 -0
- package/dist/esm/config/resources/inbound-email.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/index.d.ts.map +1 -1
- package/dist/esm/config/resources/index.js +9 -2
- package/dist/esm/config/resources/index.js.map +1 -1
- package/dist/esm/config/resources/legal-holds.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.js +76 -0
- package/dist/esm/config/resources/legal-holds.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/organizations.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/organizations.resource-presets.js +216 -35
- package/dist/esm/config/resources/organizations.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.d.ts +20 -0
- package/dist/esm/config/resources/resource.config.utils.d.ts.map +1 -1
- package/dist/esm/config/resources/resource.config.utils.js +20 -0
- package/dist/esm/config/resources/resource.config.utils.js.map +1 -1
- package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts +5 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.js +74 -0
- package/dist/esm/config/resources/retention-enforcement.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/security.resource-presets.d.ts +11 -3
- package/dist/esm/config/resources/security.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/security.resource-presets.js +685 -99
- package/dist/esm/config/resources/security.resource-presets.js.map +1 -1
- package/dist/esm/config/resources/service-providers.resource-presets.d.ts +4 -0
- package/dist/esm/config/resources/service-providers.resource-presets.d.ts.map +1 -0
- package/dist/esm/config/resources/service-providers.resource-presets.js +321 -0
- package/dist/esm/config/resources/service-providers.resource-presets.js.map +1 -0
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts +4 -3
- package/dist/esm/config/resources/webhooks.resource-presets.d.ts.map +1 -1
- package/dist/esm/config/resources/webhooks.resource-presets.js +102 -26
- package/dist/esm/config/resources/webhooks.resource-presets.js.map +1 -1
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lottie/lottie.content.definitions.d.ts.map +1 -1
- package/dist/esm/lottie/lottie.definitions.d.ts.map +1 -1
- package/dist/esm/mermaid-stub.d.ts.map +1 -1
- package/dist/esm/registration/register-common-enums.d.ts.map +1 -1
- package/dist/esm/registration/register-common-enums.js +63 -34
- package/dist/esm/registration/register-common-enums.js.map +1 -1
- package/dist/esm/registration/register-default-animations.d.ts.map +1 -1
- package/dist/esm/registration/register-default-icons.d.ts.map +1 -1
- package/dist/esm/registration/register-default-icons.js +3 -1
- package/dist/esm/registration/register-default-icons.js.map +1 -1
- package/dist/esm/registration/register-default-presets.d.ts.map +1 -1
- package/dist/esm/registration/register-default-presets.js +32 -4
- package/dist/esm/registration/register-default-presets.js.map +1 -1
- package/dist/esm/registration/register-provider-components.d.ts.map +1 -1
- package/dist/esm/registration/register-provider-components.js +11 -0
- package/dist/esm/registration/register-provider-components.js.map +1 -1
- package/dist/esm/shiki-subset.d.ts +11 -3
- package/dist/esm/shiki-subset.d.ts.map +1 -1
- package/dist/esm/shiki-subset.js +10 -2
- package/dist/esm/shiki-subset.js.map +1 -1
- package/dist/esm/theme-exports.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.d.ts.map +1 -1
- package/dist/esm/themes/cozy.theme.js +19 -5
- package/dist/esm/themes/cozy.theme.js.map +1 -1
- package/dist/esm/themes/dense.theme.d.ts.map +1 -1
- package/dist/esm/themes/dense.theme.js +76 -10
- package/dist/esm/themes/dense.theme.js.map +1 -1
- package/dist/esm/themes/editorial.theme.d.ts.map +1 -1
- package/dist/esm/themes/editorial.theme.js +19 -5
- package/dist/esm/themes/editorial.theme.js.map +1 -1
- package/dist/esm/themes/glass.theme.d.ts.map +1 -1
- package/dist/esm/themes/glass.theme.js +5 -1
- package/dist/esm/themes/glass.theme.js.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.d.ts.map +1 -1
- package/dist/esm/themes/neo-brutalist.theme.js +9 -2
- package/dist/esm/themes/neo-brutalist.theme.js.map +1 -1
- package/dist/esm/themes/terminal.theme.d.ts.map +1 -1
- package/dist/esm/themes/terminal.theme.js +19 -5
- package/dist/esm/themes/terminal.theme.js.map +1 -1
- package/dist/esm/themes/trading.theme.d.ts.map +1 -1
- package/dist/esm/themes/trading.theme.js +22 -6
- package/dist/esm/themes/trading.theme.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +31 -45
- package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts +0 -16
- package/dist/esm/components/form/controls/form-field-checkbox-group.d.ts.map +0 -1
- package/dist/esm/components/form/controls/form-field-checkbox-group.js +0 -143
- package/dist/esm/components/form/controls/form-field-checkbox-group.js.map +0 -1
|
@@ -1,39 +1,67 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Security & Compliance — Resource frontend presets
|
|
4
|
+
*
|
|
5
|
+
* Domain: ORG_API_KEYS, OAUTH_CLIENTS_ORGANIZATION, AUDIT_LOGS, SIEM (polymorphic),
|
|
6
|
+
* SSO_CONFIG (poly), SSO_CONNECTIONS (poly), SCIM_PROVISIONING (poly), SCIM_TOKENS (poly)
|
|
7
|
+
*
|
|
8
|
+
* SIEM layout JSX lives in this file next to `layout.refs` + `fields` so section chrome
|
|
9
|
+
* and primitive UI params stay co-located with the preset. Edit/display templates are
|
|
10
|
+
* inlined as arrow functions so `useFormTemplateContext` / `useDisplayTemplateContext`
|
|
11
|
+
* are immediately available for future conditional rendering. The scope-level CONFIGURATION records
|
|
12
|
+
* here — SIEM export, SSO config, SCIM provisioning — declare the full settings chrome
|
|
13
|
+
* (`display` + `summary` + `edit`), because each is reached as a READ inside the Settings Hub and is
|
|
14
|
+
* opened to confirm a value far more often than to change one; only sections that differ (e.g. the
|
|
15
|
+
* status toggle) set `chromeMode` explicitly. The COLLECTIONS beside them (SSO connections, the SIEM
|
|
16
|
+
* dead-letter queue, SCIM tokens) declare none on purpose: a list has no label/value rows for the
|
|
17
|
+
* treatment to apply to.
|
|
18
|
+
* Other resources here use field-level UI only until they need custom sections; enum badges use
|
|
19
|
+
* `showDescription: true` like billing.
|
|
20
|
+
*/
|
|
21
|
+
import React from 'react';
|
|
22
|
+
import { resolveVocabularyWordKey } from '@wildo-ai/presets-components-models';
|
|
23
|
+
import { resourceUIBehavior, resourceUIBehaviorFrom, polymorphicResourceUIBehavior, polymorphicResourceUIBehaviorFrom, StandardIconReference, ResourceOperationActionScope, ActionVisibility, ResourceLayoutInlineEditDefault, CollectionDisplayMode, useFlowsActorsSafe, unresolvedLabel, } from '@wildo-ai/saas-frontend-lib';
|
|
24
|
+
import { DisplayField, DisplayLayout, FormField, FormLayout, ObjectScope, Section, SummaryLayout, useFormTemplateContext, useDisplayTemplateContext, ResourceLayoutPreset_Create_SamlWizard, ResourceLayoutPreset_Read_SsoSaml, SummaryFlow, SummaryMeta, SummaryTitle, ResourceHeaderTitle, } from '@wildo-ai/saas-frontend-lib';
|
|
25
|
+
import { BadgeSemanticVariant, BooleanDisplayMode, BooleanEditMode, BooleanLabellingValue, SectionMode, DisplayChromeMode, EditChromeMode, EnumDisplayMode, ShowWhenOperator, StringDisplayMode, StringEditMode, } from '@wildo-ai/zod-decorators';
|
|
26
|
+
import { Key, ShieldCheck, Globe, Unlink, Fingerprint, UserCog, KeyRound, Radio, AlertTriangle, RotateCw, RefreshCw, PowerOff, Power, CalendarPlus, ChartColumn, Download, Trash2, PlugZap, Search, ShieldX, Bot, } from 'lucide-react';
|
|
27
|
+
import { CoreResourceType as R, CoreResourceOperation as Op, ApiKeyStatus, OrgApiKeys_Operations, AuditLogs_Operations, SiemDeliveryDlq_Operations, SsoConnection_Operations, ScimTokens_Operations, orgApiKeysResourceConfiguration_InitializationFactory as orgApiKeysFactory, orgOAuthClientsResourceConfiguration_InitializationFactory as orgOAuthClientsFactory, OAuthClientOrganizationSchema, OAuthClientStatus, OrgOAuthClients_Operations, orgProviderCredentialsResourceConfiguration_InitializationFactory as orgProviderCredentialsFactory, OrganizationProviderCredentialSchema, userProviderCredentialsResourceConfiguration_InitializationFactory as userProviderCredentialsFactory, UserProviderCredentialSchema, ProviderCredentialValidationState, auditLogsResourceConfiguration_InitializationFactory as auditLogsFactory, applicationAuditLogsResourceConfiguration_InitializationFactory as applicationAuditLogsFactory, siemExportConfigPolymorphicFactories, siemDeliveryDlqPolymorphicFactories, ssoConfigPolymorphicFactories, SsoConfig_Operations, ssoConnectionPolymorphicFactories, scimProvisioningConfigPolymorphicFactories, scimTokensPolymorphicFactories, ApiKeyOrganizationSchema, AuditableEvent_BaseSchema, AuditEventSeverity, SiemExportConfigBaseSchema, SiemDeliveryDlqBaseSchema, SiemDeliveryDlqStatus, SsoConfigBaseSchema, SsoConnectionBaseSchema, ScimProvisioningConfigBaseSchema, ScimTokenBaseSchema, SsoProtocol, SIEMAuthMethod, EngineOpenVocabulary, } from '@wildo-ai/saas-models';
|
|
28
|
+
import { ApiKeyRotationWindowRows } from './api-key-rotation-window.js';
|
|
29
|
+
import { addressable, notAddressable, ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE } from './resource.config.utils.js';
|
|
30
|
+
/*
|
|
31
|
+
* A registry — keys, connections, tokens — is comparable rows, so it renders as a TABLE with the headers written
|
|
32
|
+
* once, and cards stay one click away for a narrow screen. Named once because the admin lane restates each
|
|
33
|
+
* registry's LIST view and must not lose it.
|
|
34
|
+
*/
|
|
35
|
+
const REGISTRY_TABLE = {
|
|
36
|
+
displayMode: CollectionDisplayMode.TABLE,
|
|
37
|
+
userSwitchableDisplayMode: true,
|
|
38
|
+
};
|
|
8
39
|
// ── SIEM export config — field overrides (shared across polymorphic variants) ─
|
|
9
40
|
const siemExportFieldOverrides = {
|
|
41
|
+
// Field descriptions are an EDIT aid — they say what to type. On the read pane, which an operator opens to
|
|
42
|
+
// confirm a value, they were a sentence under every row ("Controls whether event deliveries are sent." under
|
|
43
|
+
// "Enabled"), so `display` no longer asks for them; the form keeps them.
|
|
44
|
+
//
|
|
45
|
+
// On the card the value reads bare, and a bare checkmark says nothing about WHAT is true — so the summary
|
|
46
|
+
// renders the word ("Enabled" / "Disabled") instead of a label and a tick.
|
|
10
47
|
enabled: (schema) => schema.shape.enabled.booleanUI({
|
|
11
48
|
labellingValue: BooleanLabellingValue.ENABLED_DISABLED,
|
|
12
|
-
display: { displayMode: BooleanDisplayMode.CHECKMARK
|
|
49
|
+
display: { displayMode: BooleanDisplayMode.CHECKMARK },
|
|
50
|
+
summaryOverride: { displayMode: BooleanDisplayMode.RAW },
|
|
13
51
|
edit: { editMode: BooleanEditMode.SWITCH, showDescription: true },
|
|
14
52
|
}),
|
|
15
53
|
webhookUrl: (schema) => schema.shape.webhookUrl.stringUI({
|
|
16
|
-
display: { displayMode: StringDisplayMode.COPY
|
|
54
|
+
display: { displayMode: StringDisplayMode.COPY },
|
|
17
55
|
edit: { showDescription: true },
|
|
18
56
|
}),
|
|
19
57
|
authMethod: (schema) => schema.shape.authMethod.enumUI({
|
|
20
|
-
display: { displayMode: EnumDisplayMode.BADGE
|
|
58
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
21
59
|
edit: { showDescription: true, tooltip: true },
|
|
22
60
|
}),
|
|
23
61
|
eventFormat: (schema) => schema.shape.eventFormat.enumUI({
|
|
24
|
-
display: { displayMode: EnumDisplayMode.BADGE
|
|
62
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
25
63
|
edit: { showDescription: true },
|
|
26
64
|
}),
|
|
27
|
-
includeRawEventData: (schema) => schema.shape.includeRawEventData.booleanUI({
|
|
28
|
-
labellingValue: BooleanLabellingValue.YES_NO,
|
|
29
|
-
display: { displayMode: BooleanDisplayMode.CHECKMARK, showDescription: true },
|
|
30
|
-
edit: { editMode: BooleanEditMode.SWITCH, showDescription: true },
|
|
31
|
-
}),
|
|
32
|
-
includeDeviceContext: (schema) => schema.shape.includeDeviceContext.booleanUI({
|
|
33
|
-
labellingValue: BooleanLabellingValue.YES_NO,
|
|
34
|
-
display: { displayMode: BooleanDisplayMode.CHECKMARK, showDescription: true },
|
|
35
|
-
edit: { editMode: BooleanEditMode.SWITCH, showDescription: true },
|
|
36
|
-
}),
|
|
37
65
|
authCredential: (schema) => schema.shape.authCredential.showWhen({
|
|
38
66
|
conditions: { field: 'authMethod', value: SIEMAuthMethod.NONE, operator: ShowWhenOperator.NOT_EQUALS },
|
|
39
67
|
}),
|
|
@@ -41,71 +69,341 @@ const siemExportFieldOverrides = {
|
|
|
41
69
|
conditions: { field: 'authMethod', value: SIEMAuthMethod.API_KEY_HEADER },
|
|
42
70
|
}),
|
|
43
71
|
};
|
|
72
|
+
/*
|
|
73
|
+
* An API key is read to decide whether to rotate, extend or retire it. The header is its NAME and its STATUS
|
|
74
|
+
* badge, so neither is a row below it. `scope` is not rendered anywhere: the organization schema fixes it to one
|
|
75
|
+
* literal, so on this screen it can only ever say "organization" — it rendered as an empty "Scope: —" on every
|
|
76
|
+
* card. The first card has no heading (it would restate the header) and no read section carries a description.
|
|
77
|
+
*
|
|
78
|
+
* `access` is gone as a section: it held the roles and the description, and a heading over the one row that
|
|
79
|
+
* matters ("Access" above "Roles") was a heading per field. Both now sit in the first card, beside the prefix.
|
|
80
|
+
*/
|
|
81
|
+
function OrgApiKeyHeader() {
|
|
82
|
+
return (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "status", hideLabel: true, hideDescription: true, className: "w-auto" })] }));
|
|
83
|
+
}
|
|
44
84
|
function OrgApiKeyDisplayTemplate() {
|
|
45
|
-
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD,
|
|
85
|
+
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "keyPrefix" }), _jsx(DisplayField, { name: "roles" }), _jsx(DisplayField, { name: "description" })] }), _jsxs(Section, { name: "lifecycle", hideDescription: true, children: [_jsx(DisplayField, { name: "expiresAt" }), _jsx(DisplayField, { name: "lastUsedAt" }), _jsx(DisplayField, { name: "createdAt" }), _jsx(ApiKeyRotationWindowRows, {})] })] }));
|
|
46
86
|
}
|
|
87
|
+
/*
|
|
88
|
+
* The CREATE form (this resource has no UPDATE: a key changes through its own verbs — rotate, deactivate,
|
|
89
|
+
* extend). One column, no headings: five fields do not need grouping, and a heading over two of them named
|
|
90
|
+
* the page. The name first and focused; the description is prose, so a textarea; status last, since a new key
|
|
91
|
+
* is active unless somebody deliberately says otherwise.
|
|
92
|
+
*/
|
|
47
93
|
function OrgApiKeyEditTemplate() {
|
|
48
|
-
return (_jsxs(FormLayout, { children: [
|
|
94
|
+
return (_jsxs(FormLayout, { children: [_jsx(FormField, { name: "name", autoFocus: true }), _jsx(FormField, { name: "description" }), _jsx(FormField, { name: "roles" }), _jsx(FormField, { name: "expiresAt" }), _jsx(FormField, { name: "status" })] }));
|
|
95
|
+
}
|
|
96
|
+
/*
|
|
97
|
+
* The autonomous agents a client may run as are the ones the APPLICATION declares (#1611), and the backend refuses
|
|
98
|
+
* any other ref — so the binding field offers exactly those, read from `/flows-actors/frontend-info`, instead of a
|
|
99
|
+
* free-text list an administrator fills from memory (#1812). Until the declaration arrives, or where the flows-actors
|
|
100
|
+
* plane is absent, the choice is empty rather than free text: there is nothing it would be honest to accept.
|
|
101
|
+
*
|
|
102
|
+
* Values are the refs themselves. They are identifiers the application names, not a closed engine vocabulary with
|
|
103
|
+
* words in the label tree, so a ref is what an administrator sees — and what every audit row records.
|
|
104
|
+
*/
|
|
105
|
+
function DeclaredAutonomousAgentsFormField() {
|
|
106
|
+
const flowsActors = useFlowsActorsSafe();
|
|
107
|
+
// Asked for explicitly: the provider bootstraps the declaration only when the application configures a chat view,
|
|
108
|
+
// and an application with none (the scaffold, Wonder CRM) would otherwise offer an empty choice (#1812 review).
|
|
109
|
+
const requestAutonomousAgents = flowsActors?.requestAutonomousAgents;
|
|
110
|
+
React.useEffect(() => {
|
|
111
|
+
requestAutonomousAgents?.();
|
|
112
|
+
}, [requestAutonomousAgents]);
|
|
113
|
+
const declaredAutonomousAgentRefs = (flowsActors?.autonomousAgents ?? []).map((agent) => agent.ref);
|
|
114
|
+
return _jsx(FormField, { name: "autonomousAgentRefs", allowedValues: declaredAutonomousAgentRefs });
|
|
49
115
|
}
|
|
116
|
+
/*
|
|
117
|
+
* ONE flat form for every operation of an organization OAuth client, like an API key's. A field the operation does
|
|
118
|
+
* not accept hides itself, so CREATE shows the registration fields and `setAutonomousAgents` shows only the agent
|
|
119
|
+
* list (`autonomousAgentRefs` is excluded from CREATE: a client is registered first, then bound). Sections were
|
|
120
|
+
* rejected here: a section renders its heading whether or not anything under it survives, so the binding form would
|
|
121
|
+
* have carried "Access" and "Redirects" headings over nothing.
|
|
122
|
+
*/
|
|
123
|
+
function OrgOAuthClientEditTemplate() {
|
|
124
|
+
return (_jsxs(FormLayout, { children: [_jsx(FormField, { name: "name", autoFocus: true }), _jsx(FormField, { name: "description" }), _jsx(FormField, { name: "expiresAt" }), _jsx(FormField, { name: "allowedGrants" }), _jsx(FormField, { name: "allowedScopes" }), _jsx(FormField, { name: "roles" }), _jsx(FormField, { name: "tokenEndpointAuthMethod" }), _jsx(FormField, { name: "requiresConsent" }), _jsx(FormField, { name: "redirectUris" }), _jsx(FormField, { name: "postLogoutRedirectUris" }), _jsx(DeclaredAutonomousAgentsFormField, {})] }));
|
|
125
|
+
}
|
|
126
|
+
/*
|
|
127
|
+
* A card: the name, then the status as a badge and the key's visible prefix. The prefix keeps its label — a
|
|
128
|
+
* bare "wkprobeB" beside a badge reads as a second name, not as the first characters of the secret.
|
|
129
|
+
*/
|
|
50
130
|
function OrgApiKeySummaryTemplate() {
|
|
51
|
-
return (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "name" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "
|
|
131
|
+
return (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "name" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "status" }), _jsx(DisplayField, { name: "keyPrefix" })] })] }));
|
|
52
132
|
}
|
|
133
|
+
/*
|
|
134
|
+
* An audit event, read once for what happened and once for who did it. The header is its NAME — the event type
|
|
135
|
+
* and the instant, in the viewer's date-time format — so neither is a row below it, and the overview card has no
|
|
136
|
+
* heading of its own (it would restate the header). No read section carries a description: "Review all
|
|
137
|
+
* application activity" and "See who performed each action" were prompts, on a page that already shows it.
|
|
138
|
+
* Every actor row hides when empty — most events have one actor, and a column of dashes said nothing.
|
|
139
|
+
*/
|
|
53
140
|
function AuditLogDisplayTemplate() {
|
|
54
|
-
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD,
|
|
141
|
+
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "eventCategory" }), _jsx(DisplayField, { name: "severity" }), _jsx(DisplayField, { name: "riskLevel" })] }), _jsxs(Section, { name: "actors", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "actorKind" }), _jsx(DisplayField, { name: "userId" }), _jsx(DisplayField, { name: "agentActor" }), _jsx(DisplayField, { name: "delegatingClientId" }), _jsx(DisplayField, { name: "principalCredentialId" }), _jsx(DisplayField, { name: "actingViaServiceProviderRelationshipId" }), _jsx(DisplayField, { name: "providerOrganizationId" }), _jsx(DisplayField, { name: "organizationId" })] }), _jsx(Section, { name: "payload", appearance: SectionMode.CARD, chromeMode: DisplayChromeMode.HIDDEN, hideDescription: true, children: _jsx(DisplayField, { name: "eventData" }) })] }));
|
|
55
142
|
}
|
|
143
|
+
/*
|
|
144
|
+
* A card in a list grouped by DAY: the event type, then its severity as a badge and who acted, bare. The date is
|
|
145
|
+
* the group heading above it, so the card does not repeat it; the exact instant is the read page's name.
|
|
146
|
+
*/
|
|
56
147
|
function AuditLogSummaryTemplate() {
|
|
57
|
-
return (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "eventType" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "
|
|
148
|
+
return (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "eventType" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "severity" }), _jsx(DisplayField, { name: "eventCategory" }), _jsx(DisplayField, { name: "actorKind" })] })] }));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* An audit event's name, shared by both audit doors: the WORD for its type (`system_enums.CoreAuditableEventType.<type>`,
|
|
152
|
+
* #1791) and the instant it happened, in the viewer's date-time format — many events share a day, so the time is part
|
|
153
|
+
* of the name. `eventType` used to be printed raw (`user_login`); an event type with no word still shows its value,
|
|
154
|
+
* which is a missing label looking missing. `eventType` is required on every event.
|
|
155
|
+
*/
|
|
156
|
+
function auditEventName({ currentObject, t, formatDateTime }) {
|
|
157
|
+
const wordKey = resolveVocabularyWordKey(EngineOpenVocabulary.CORE_AUDITABLE_EVENT_TYPE, currentObject.eventType);
|
|
158
|
+
const word = t(wordKey);
|
|
159
|
+
const type = word === wordKey ? unresolvedLabel(currentObject.eventType) : word;
|
|
160
|
+
return currentObject.createdAt ? `${type} — ${formatDateTime(currentObject.createdAt)}` : type;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Chrome and field decorators shared by both audit doors (tenant and application-wide): one object, one reading.
|
|
164
|
+
* Settings rows on the read page, bare values on a card, empty actor rows hidden, severity as a coloured badge.
|
|
165
|
+
*/
|
|
166
|
+
function auditLogPresentation(schemaShape) {
|
|
167
|
+
const hideWhenEmpty = { display: { hideWhenEmpty: true } };
|
|
168
|
+
return {
|
|
169
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
|
|
170
|
+
fields: {
|
|
171
|
+
severity: schemaShape.severity.enumUI({
|
|
172
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
173
|
+
values: {
|
|
174
|
+
[AuditEventSeverity.INFO]: { color: BadgeSemanticVariant.SECONDARY },
|
|
175
|
+
[AuditEventSeverity.WARNING]: { color: BadgeSemanticVariant.WARNING },
|
|
176
|
+
[AuditEventSeverity.CRITICAL]: { color: BadgeSemanticVariant.DESTRUCTIVE },
|
|
177
|
+
},
|
|
178
|
+
}),
|
|
179
|
+
userId: schemaShape.userId.stringUI(hideWhenEmpty),
|
|
180
|
+
agentActor: schemaShape.agentActor.objectUI(hideWhenEmpty),
|
|
181
|
+
delegatingClientId: schemaShape.delegatingClientId.stringUI(hideWhenEmpty),
|
|
182
|
+
principalCredentialId: schemaShape.principalCredentialId.stringUI(hideWhenEmpty),
|
|
183
|
+
actingViaServiceProviderRelationshipId: schemaShape.actingViaServiceProviderRelationshipId.stringUI(hideWhenEmpty),
|
|
184
|
+
providerOrganizationId: schemaShape.providerOrganizationId.stringUI(hideWhenEmpty),
|
|
185
|
+
organizationId: schemaShape.organizationId.stringUI(hideWhenEmpty),
|
|
186
|
+
},
|
|
187
|
+
};
|
|
58
188
|
}
|
|
59
189
|
function SiemExportSummaryTemplate() {
|
|
60
190
|
return (_jsx(SummaryLayout, { flow: SummaryFlow.ROW, children: _jsx(DisplayField, { name: "enabled" }) }));
|
|
61
191
|
}
|
|
192
|
+
/*
|
|
193
|
+
* A failed delivery is named by its failure reason and carries its status badge beside it, so the old
|
|
194
|
+
* `overview` card — which held exactly those two — is gone rather than repeating the header. What is left is
|
|
195
|
+
* the attempt record and the payload. The payload card's heading names the data, so the data itself carries no
|
|
196
|
+
* label (the audit trail's `payload` card, for the same reason).
|
|
197
|
+
*/
|
|
198
|
+
function SiemDlqHeader() {
|
|
199
|
+
return (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "status", hideLabel: true, hideDescription: true, className: "w-auto" })] }));
|
|
200
|
+
}
|
|
62
201
|
function SiemDlqDisplayTemplate() {
|
|
63
|
-
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "
|
|
202
|
+
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "delivery", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "eventId" }), _jsx(DisplayField, { name: "failureCount" }), _jsx(DisplayField, { name: "lastAttemptAt" }), _jsx(DisplayField, { name: "nextRetryAt" })] }), _jsx(Section, { name: "payload", appearance: SectionMode.CARD, chromeMode: DisplayChromeMode.HIDDEN, hideDescription: true, children: _jsx(DisplayField, { name: "eventPayload" }) })] }));
|
|
64
203
|
}
|
|
65
204
|
function SiemDlqSummaryTemplate() {
|
|
66
205
|
return (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "failureReason" }), _jsx(SummaryMeta, { children: _jsx(DisplayField, { name: "status" }) })] }));
|
|
67
206
|
}
|
|
68
207
|
function SsoConfigDisplayTemplate() {
|
|
69
|
-
return (_jsxs(DisplayLayout, { children: [_jsx(Section, { name: "enforcement",
|
|
208
|
+
return (_jsxs(DisplayLayout, { children: [_jsx(Section, { name: "enforcement", children: _jsxs(ObjectScope, { name: "enforcement", children: [_jsx(DisplayField, { name: "requireSSO" }), _jsx(DisplayField, { name: "allowPasswordFallback" }), _jsx(DisplayField, { name: "graceLoginAttempts" })] }) }), _jsx(Section, { name: "domains", children: _jsxs(ObjectScope, { name: "domains", children: [_jsx(DisplayField, { name: "verifiedDomains" }), _jsx(DisplayField, { name: "ssoEnabledDomains" }), _jsx(DisplayField, { name: "domainVerificationStatus" })] }) }), _jsx(Section, { name: "session", children: _jsx(ObjectScope, { name: "sessionSettings", children: _jsx(DisplayField, { name: "singleLogoutEnabled" }) }) }), _jsx(Section, { name: "emergency", children: _jsxs(ObjectScope, { name: "emergencyAccess", children: [_jsx(DisplayField, { name: "enabled" }), _jsx(DisplayField, { name: "breakGlassAccounts" })] }) }), _jsxs(Section, { name: "oauth", children: [_jsxs(ObjectScope, { name: "oauth2ProviderRestrictions", children: [_jsx(DisplayField, { name: "allowedProviders" }), _jsx(DisplayField, { name: "blockedProviders" }), _jsx(DisplayField, { name: "requireEnterpriseSSOOnly" })] }), _jsx(DisplayField, { name: "socialCredentialOverrides" })] })] }));
|
|
70
209
|
}
|
|
71
210
|
function SsoConfigSummaryTemplate() {
|
|
72
211
|
return (_jsx(SummaryLayout, { flow: SummaryFlow.ROW, children: _jsx(ObjectScope, { name: "enforcement", children: _jsx(DisplayField, { name: "requireSSO" }) }) }));
|
|
73
212
|
}
|
|
213
|
+
/*
|
|
214
|
+
* A connection is named by its display name and carries its protocol badge beside it, so neither is a row; the
|
|
215
|
+
* first card, which held both, keeps only what the header does not say and loses its heading. Only the section
|
|
216
|
+
* of the connection's OWN protocol renders: an OIDC connection showed a whole SAML section of empty rows (and
|
|
217
|
+
* the reverse), which read as unfinished configuration rather than as not applicable. No read section carries a
|
|
218
|
+
* description.
|
|
219
|
+
*/
|
|
220
|
+
function SsoConnectionHeader() {
|
|
221
|
+
return (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "protocol", hideLabel: true, hideDescription: true, className: "w-auto" })] }));
|
|
222
|
+
}
|
|
74
223
|
function SsoConnectionDisplayTemplate() {
|
|
75
|
-
|
|
224
|
+
const { data } = useDisplayTemplateContext();
|
|
225
|
+
const protocol = data?.protocol;
|
|
226
|
+
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "enabled" }), _jsx(DisplayField, { name: "isDefault" }), _jsx(DisplayField, { name: "externalProviderId" })] }), protocol !== SsoProtocol.SAML && (_jsx(Section, { name: "oidc", hideDescription: true, children: _jsxs(ObjectScope, { name: "oidc", children: [_jsx(DisplayField, { name: "templateMode" }), _jsx(DisplayField, { name: "discoveryUrl" }), _jsx(DisplayField, { name: "issuer" }), _jsx(DisplayField, { name: "authorizationEndpoint" }), _jsx(DisplayField, { name: "tokenEndpoint" }), _jsx(DisplayField, { name: "userInfoEndpoint" }), _jsx(DisplayField, { name: "jwksUri" }), _jsx(DisplayField, { name: "endSessionEndpoint" }), _jsx(DisplayField, { name: "clientId" }), _jsx(DisplayField, { name: "scopes" }), _jsx(DisplayField, { name: "responseType" }), _jsx(DisplayField, { name: "responseMode" }), _jsx(DisplayField, { name: "pkceEnabled" }), _jsx(DisplayField, { name: "pkceMethod" }), _jsx(DisplayField, { name: "prompt" }), _jsx(DisplayField, { name: "acrValues" }), _jsx(DisplayField, { name: "maxAge" }), _jsx(DisplayField, { name: "claimsMapping" })] }) })), protocol !== SsoProtocol.OIDC && (_jsx(Section, { name: "saml", hideDescription: true, children: _jsxs(ObjectScope, { name: "saml", children: [_jsx(DisplayField, { name: "entityId" }), _jsx(DisplayField, { name: "ssoUrl" }), _jsx(DisplayField, { name: "sloUrl" }), _jsx(DisplayField, { name: "x509CertificatePem" }), _jsx(DisplayField, { name: "attributeMapping" }), _jsx(DisplayField, { name: "signRequests" }), _jsx(DisplayField, { name: "wantAssertionsSigned" }), _jsx(DisplayField, { name: "allowedClockDrift" }), _jsx(DisplayField, { name: "forceAuthn" }), _jsx(DisplayField, { name: "maxAuthAge" }), _jsx(DisplayField, { name: "nameIdFormat" }), _jsx(DisplayField, { name: "allowIdpInitiated" })] }) })), _jsxs(Section, { name: "provisioning", hideDescription: true, children: [_jsx(DisplayField, { name: "autoCreateUsers" }), _jsx(DisplayField, { name: "defaultRole" }), _jsx(DisplayField, { name: "allowedDomains" }), _jsx(DisplayField, { name: "roleMapping" }), _jsx(DisplayField, { name: "groupMapping" })] })] }));
|
|
76
227
|
}
|
|
228
|
+
/* A card: the name, then the protocol badge and whether the connection is on — the latter as the word, see `enabled`. */
|
|
77
229
|
function SsoConnectionSummaryTemplate() {
|
|
78
230
|
return (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "displayName" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "protocol" }), _jsx(DisplayField, { name: "enabled" })] })] }));
|
|
79
231
|
}
|
|
232
|
+
/*
|
|
233
|
+
* The pane's header already names it ("SCIM provisioning"), so its groups carry no headings: the first card's
|
|
234
|
+
* was "Overview" — a name for the page, not for a part of it — the second's put "Attribute mapping" over a single
|
|
235
|
+
* row labelled "Attribute mapping", and the third's called two record timestamps "User lifecycle", which is what
|
|
236
|
+
* the FIRST card governs. No section carries a description on read.
|
|
237
|
+
*/
|
|
80
238
|
function ScimProvisioningDisplayTemplate() {
|
|
81
|
-
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, children: [_jsx(DisplayField, { name: "autoCreateUsers" }), _jsx(DisplayField, { name: "autoVerifyEmail" }), _jsx(DisplayField, { name: "autoDeactivateUsers" }), _jsx(DisplayField, { name: "defaultRole" })] }), _jsx(Section, { name: "mapping", children: _jsx(DisplayField, { name: "attributeMapping" }) }), _jsxs(Section, { name: "lifecycle", children: [_jsx(DisplayField, { name: "createdAt" }), _jsx(DisplayField, { name: "updatedAt" })] })] }));
|
|
239
|
+
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "autoCreateUsers" }), _jsx(DisplayField, { name: "autoVerifyEmail" }), _jsx(DisplayField, { name: "autoDeactivateUsers" }), _jsx(DisplayField, { name: "defaultRole" })] }), _jsx(Section, { name: "mapping", hideTitle: true, hideDescription: true, children: _jsx(DisplayField, { name: "attributeMapping" }) }), _jsxs(Section, { name: "lifecycle", hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "createdAt" }), _jsx(DisplayField, { name: "updatedAt" })] })] }));
|
|
82
240
|
}
|
|
83
241
|
function ScimProvisioningSummaryTemplate() {
|
|
84
242
|
return (_jsx(SummaryLayout, { flow: SummaryFlow.ROW, children: _jsx(DisplayField, { name: "autoCreateUsers" }) }));
|
|
85
243
|
}
|
|
244
|
+
/*
|
|
245
|
+
* A token is named by its display name (the header), so the first card keeps whether it is active and who
|
|
246
|
+
* created it, without a heading of its own. No section carries a description on read.
|
|
247
|
+
*/
|
|
86
248
|
function ScimTokenDisplayTemplate() {
|
|
87
|
-
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD,
|
|
249
|
+
return (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "isActive" }), _jsx(DisplayField, { name: "createdByUserId" })] }), _jsxs(Section, { name: "lifecycle", hideDescription: true, children: [_jsx(DisplayField, { name: "lastUsedAt" }), _jsx(DisplayField, { name: "expiresAt" }), _jsx(DisplayField, { name: "createdAt" })] })] }));
|
|
88
250
|
}
|
|
89
251
|
function ScimTokenSummaryTemplate() {
|
|
90
252
|
return (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "displayName" }), _jsx(SummaryMeta, { children: _jsx(DisplayField, { name: "isActive" }) })] }));
|
|
91
253
|
}
|
|
254
|
+
/*
|
|
255
|
+
* A stored third-party credential, at either owner scope (the tenant's, or a person's own). Its NAME is
|
|
256
|
+
* `provider · slot` and its validation state is the badge beside it, so neither the provider, the slot nor the
|
|
257
|
+
* state is a row: the card showed "asana · ASANA_API_KEY", then "Provider: asana", then "Secret key:
|
|
258
|
+
* ASANA_API_KEY" — the title, twice more.
|
|
259
|
+
*
|
|
260
|
+
* No `<Section>` anywhere, so no `layout.refs`: a section is a contract the specification has to document slot
|
|
261
|
+
* for slot, and a credential is a handful of facts that no heading would group better than the rows do. Every
|
|
262
|
+
* optional fact hides when empty — a credential nobody has validated or used yet is the ordinary case, and a
|
|
263
|
+
* column of dashes under it said nothing.
|
|
264
|
+
*/
|
|
265
|
+
function ProviderCredentialHeader() {
|
|
266
|
+
return (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "validationState", hideLabel: true, hideDescription: true, className: "w-auto" })] }));
|
|
267
|
+
}
|
|
268
|
+
/** `setByUserId` exists on the tenant's credential only: a person's own is, by construction, set by them. */
|
|
269
|
+
function providerCredentialDisplayTemplate(includeSetBy) {
|
|
270
|
+
return function ProviderCredentialDisplayTemplate() {
|
|
271
|
+
return (_jsxs(DisplayLayout, { children: [_jsx(DisplayField, { name: "enabled" }), _jsx(DisplayField, { name: "description" }), _jsx(DisplayField, { name: "validationError" }), _jsx(DisplayField, { name: "lastValidatedAt" }), _jsx(DisplayField, { name: "lastUsedAt" }), _jsx(DisplayField, { name: "secretSetAt" }), includeSetBy && _jsx(DisplayField, { name: "setByUserId" }), _jsx(DisplayField, { name: "connectionFacts" }), _jsx(DisplayField, { name: "createdAt" })] }));
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/*
|
|
275
|
+
* The form a person reaches from a credential's Edit action: replace the secret, switch it off, or note what
|
|
276
|
+
* it is for. The secret first and focused, since replacing it is why the form is usually opened. The provider
|
|
277
|
+
* and slot are not offered — they are the credential's identity and cannot change — except on the API's CREATE,
|
|
278
|
+
* which these screens hide (#1040) and which would otherwise have no way to name them.
|
|
279
|
+
*/
|
|
280
|
+
function ProviderCredentialEditTemplate() {
|
|
281
|
+
const { isExisting } = useFormTemplateContext();
|
|
282
|
+
return (_jsxs(FormLayout, { children: [!isExisting && _jsx(FormField, { name: "providerRef" }), !isExisting && _jsx(FormField, { name: "secretSlug" }), _jsx(FormField, { name: "secretValue", autoFocus: true }), _jsx(FormField, { name: "enabled" }), _jsx(FormField, { name: "description" })] }));
|
|
283
|
+
}
|
|
284
|
+
/* A card: the name (`provider · slot`), then the validation badge and whether the credential is on, as the word. */
|
|
285
|
+
function ProviderCredentialSummaryTemplate() {
|
|
286
|
+
return (_jsx(SummaryLayout, { children: _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "validationState" }), _jsx(DisplayField, { name: "enabled" })] }) }));
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Chrome and field decorators shared by both provider-credential scopes. Settings rows on read (a credential is
|
|
290
|
+
* inspected one fact at a time), bare values on a card, a stacked form. `enabled` reads as the word on a card —
|
|
291
|
+
* a bare checkmark there says nothing about WHAT is true.
|
|
292
|
+
*/
|
|
293
|
+
function providerCredentialPresentation(schemaShape) {
|
|
294
|
+
const hideWhenEmpty = { display: { hideWhenEmpty: true } };
|
|
295
|
+
return {
|
|
296
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },
|
|
297
|
+
fields: {
|
|
298
|
+
enabled: schemaShape.enabled.booleanUI({
|
|
299
|
+
labellingValue: BooleanLabellingValue.ENABLED_DISABLED,
|
|
300
|
+
summaryOverride: { displayMode: BooleanDisplayMode.RAW },
|
|
301
|
+
}),
|
|
302
|
+
description: schemaShape.description.stringUI({
|
|
303
|
+
...hideWhenEmpty,
|
|
304
|
+
edit: { editMode: StringEditMode.TEXTAREA },
|
|
305
|
+
}),
|
|
306
|
+
validationError: schemaShape.validationError.stringUI(hideWhenEmpty),
|
|
307
|
+
lastValidatedAt: schemaShape.lastValidatedAt.dateUI(hideWhenEmpty),
|
|
308
|
+
lastUsedAt: schemaShape.lastUsedAt.dateUI(hideWhenEmpty),
|
|
309
|
+
secretSetAt: schemaShape.secretSetAt.dateUI(hideWhenEmpty),
|
|
310
|
+
connectionFacts: schemaShape.connectionFacts.objectUI(hideWhenEmpty),
|
|
311
|
+
},
|
|
312
|
+
};
|
|
313
|
+
}
|
|
92
314
|
export function buildSecurityMainPresets() {
|
|
93
315
|
return {
|
|
316
|
+
/**
|
|
317
|
+
* An organization's OAuth clients — the machine credentials it registers for itself, and the ones an autonomous
|
|
318
|
+
* agent runs as (#1611). Until #1812 they had no screen, so creating, rotating or ending a client — and binding an
|
|
319
|
+
* agent to one — was REST only.
|
|
320
|
+
*
|
|
321
|
+
* The application-scope preset (`application.resource-presets.tsx`) is the model, section for section, because the
|
|
322
|
+
* two are one credential type at two scopes. Two differences, each for the resource's own reason:
|
|
323
|
+
* - an `autonomousAgents` section: which agents this client runs is a grant of standing authority to act
|
|
324
|
+
* unattended, so it is on the page rather than behind the action that changes it;
|
|
325
|
+
* - the Settings Hub chrome of an API key (stacked form, table registry), because this is where it sits — beside
|
|
326
|
+
* API keys, in the organization's settings — rather than on the application's administration page.
|
|
327
|
+
*
|
|
328
|
+
* `EXPIRE` is the expiry sweep's (INTERNAL_CALL) and carries no view. The secret is never laid out: the hashes
|
|
329
|
+
* are backend-only, and `secretPrefix` is the part a person uses to tell which credential a log line names.
|
|
330
|
+
*/
|
|
331
|
+
[R.OAUTH_CLIENTS_ORGANIZATION]: resourceUIBehavior(orgOAuthClientsFactory, OAuthClientOrganizationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
|
|
332
|
+
icon: KeyRound,
|
|
333
|
+
layout: {
|
|
334
|
+
refs: {
|
|
335
|
+
sections: ['overview', 'access', 'redirects', 'autonomousAgents', 'lifecycle'],
|
|
336
|
+
},
|
|
337
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },
|
|
338
|
+
// The identity line: the client's name (the page title) and its status beside it. Neither is repeated below.
|
|
339
|
+
header: () => (_jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-field", children: [_jsx(ResourceHeaderTitle, {}), _jsx(DisplayField, { name: "status", hideLabel: true, hideDescription: true, className: "w-auto" })] })),
|
|
340
|
+
display: () => (_jsxs(DisplayLayout, { children: [_jsxs(Section, { name: "overview", appearance: SectionMode.CARD, hideTitle: true, hideDescription: true, children: [_jsx(DisplayField, { name: "_id" }), _jsx(DisplayField, { name: "secretPrefix" }), _jsx(DisplayField, { name: "description" })] }), _jsxs(Section, { name: "access", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "allowedGrants" }), _jsx(DisplayField, { name: "allowedScopes" }), _jsx(DisplayField, { name: "roles" }), _jsx(DisplayField, { name: "tokenEndpointAuthMethod" }), _jsx(DisplayField, { name: "requiresConsent" })] }), _jsxs(Section, { name: "redirects", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "redirectUris" }), _jsx(DisplayField, { name: "postLogoutRedirectUris" })] }), _jsx(Section, { name: "autonomousAgents", appearance: SectionMode.CARD, children: _jsx(DisplayField, { name: "autonomousAgentRefs" }) }), _jsxs(Section, { name: "lifecycle", appearance: SectionMode.CARD, hideDescription: true, children: [_jsx(DisplayField, { name: "expiresAt" }), _jsx(DisplayField, { name: "lastUsedAt" }), _jsx(DisplayField, { name: "previousSecretPrefix" }), _jsx(DisplayField, { name: "previousSecretInvalidationDate" }), _jsx(DisplayField, { name: "createdAt" })] })] })),
|
|
341
|
+
summary: () => (_jsxs(SummaryLayout, { children: [_jsx(SummaryTitle, { name: "name" }), _jsxs(SummaryMeta, { children: [_jsx(DisplayField, { name: "status" }), _jsx(DisplayField, { name: "secretPrefix" }), _jsx(DisplayField, { name: "autonomousAgentRefs" })] })] })),
|
|
342
|
+
edit: OrgOAuthClientEditTemplate,
|
|
343
|
+
},
|
|
344
|
+
fields: {
|
|
345
|
+
// The application client's states and colours, because they mean the same things.
|
|
346
|
+
status: schemaShape.status.enumUI({
|
|
347
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
348
|
+
edit: { showDescription: true },
|
|
349
|
+
values: {
|
|
350
|
+
[OAuthClientStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },
|
|
351
|
+
[OAuthClientStatus.INACTIVE]: { color: BadgeSemanticVariant.SECONDARY },
|
|
352
|
+
[OAuthClientStatus.EXPIRED]: { color: BadgeSemanticVariant.WARNING },
|
|
353
|
+
},
|
|
354
|
+
}),
|
|
355
|
+
// The prefix keeps its label on a card — bare, it reads as a second name.
|
|
356
|
+
secretPrefix: schemaShape.secretPrefix.stringUI({ summaryOverride: { chromeMode: DisplayChromeMode.INLINE } }),
|
|
357
|
+
description: schemaShape.description.stringUI({
|
|
358
|
+
display: { hideWhenEmpty: true },
|
|
359
|
+
edit: { editMode: StringEditMode.TEXTAREA },
|
|
360
|
+
}),
|
|
361
|
+
postLogoutRedirectUris: schemaShape.postLogoutRedirectUris.arrayUI({ display: { hideWhenEmpty: true } }),
|
|
362
|
+
// On a card only when the client runs an agent: most clients run none, and "Autonomous agents: —" on every
|
|
363
|
+
// card said nothing.
|
|
364
|
+
autonomousAgentRefs: schemaShape.autonomousAgentRefs.arrayUI({
|
|
365
|
+
summaryOverride: { chromeMode: DisplayChromeMode.INLINE, hideWhenEmpty: true },
|
|
366
|
+
}),
|
|
367
|
+
expiresAt: schemaShape.expiresAt.dateUI({ display: { hideWhenEmpty: true } }),
|
|
368
|
+
lastUsedAt: schemaShape.lastUsedAt.dateUI({ display: { hideWhenEmpty: true } }),
|
|
369
|
+
// The rotation window, shown only while the previous secret still authenticates.
|
|
370
|
+
previousSecretPrefix: schemaShape.previousSecretPrefix.stringUI({ display: { hideWhenEmpty: true, showDescription: true } }),
|
|
371
|
+
previousSecretInvalidationDate: schemaShape.previousSecretInvalidationDate.dateUI({ display: { hideWhenEmpty: true } }),
|
|
372
|
+
},
|
|
373
|
+
getFrontendResourceLabel: ({ currentObject }) => currentObject.name,
|
|
374
|
+
views: [
|
|
375
|
+
[Op.READ, notAddressable()],
|
|
376
|
+
[Op.LIST, addressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
377
|
+
// Creating a client returns its one-time `plainSecret` (`.isEphemeral()`), shown once by the reveal dialog.
|
|
378
|
+
[Op.CREATE, notAddressable()],
|
|
379
|
+
[Op.SEARCH, notAddressable()],
|
|
380
|
+
[Op.DELETE, notAddressable()],
|
|
381
|
+
[OrgOAuthClients_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
382
|
+
[OrgOAuthClients_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
383
|
+
[OrgOAuthClients_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
384
|
+
[OrgOAuthClients_Operations.REACTIVATE, notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
385
|
+
[OrgOAuthClients_Operations.SET_AUTONOMOUS_AGENTS, notAddressable({ iconOverride: Bot, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
386
|
+
],
|
|
387
|
+
})),
|
|
94
388
|
[R.ORG_API_KEYS]: resourceUIBehavior(orgApiKeysFactory, ApiKeyOrganizationSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
|
|
95
389
|
icon: Key,
|
|
96
390
|
layout: {
|
|
97
391
|
refs: {
|
|
98
|
-
sections: ['overview', '
|
|
392
|
+
sections: ['overview', 'lifecycle'],
|
|
99
393
|
},
|
|
100
|
-
// Settings
|
|
101
|
-
|
|
394
|
+
// Settings rows on the read page (Settings Hub → API keys), bare values on a card, and a stacked
|
|
395
|
+
// create form: a key is authored once — a name, what it is for, what it may do — not tuned row by row.
|
|
396
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.STACKED },
|
|
397
|
+
header: OrgApiKeyHeader,
|
|
102
398
|
display: OrgApiKeyDisplayTemplate,
|
|
103
399
|
summary: OrgApiKeySummaryTemplate,
|
|
104
400
|
edit: OrgApiKeyEditTemplate,
|
|
105
401
|
},
|
|
106
402
|
fields: {
|
|
403
|
+
// A badge with no sentence under it. "Determines whether the key can authenticate traffic." printed
|
|
404
|
+
// under every card's status is the field's EDIT help — the form keeps it.
|
|
107
405
|
status: schemaShape.status.enumUI({
|
|
108
|
-
display: { displayMode: EnumDisplayMode.BADGE
|
|
406
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
109
407
|
edit: { showDescription: true },
|
|
110
408
|
values: {
|
|
111
409
|
[ApiKeyStatus.ACTIVE]: { color: BadgeSemanticVariant.SUCCESS },
|
|
@@ -113,16 +411,35 @@ export function buildSecurityMainPresets() {
|
|
|
113
411
|
[ApiKeyStatus.EXPIRED]: { color: BadgeSemanticVariant.WARNING },
|
|
114
412
|
},
|
|
115
413
|
}),
|
|
414
|
+
// The one card value that keeps its label: bare, a prefix reads as a second name — see the summary.
|
|
415
|
+
keyPrefix: schemaShape.keyPrefix.stringUI({ summaryOverride: { chromeMode: DisplayChromeMode.INLINE } }),
|
|
416
|
+
description: schemaShape.description.stringUI({
|
|
417
|
+
display: { hideWhenEmpty: true },
|
|
418
|
+
edit: { editMode: StringEditMode.TEXTAREA },
|
|
419
|
+
}),
|
|
420
|
+
// A key with no expiry, or one never used, is ordinary — a dash on those rows said nothing.
|
|
421
|
+
expiresAt: schemaShape.expiresAt.dateUI({ display: { hideWhenEmpty: true } }),
|
|
422
|
+
lastUsedAt: schemaShape.lastUsedAt.dateUI({ display: { hideWhenEmpty: true } }),
|
|
423
|
+
// The rotation window, rendered only while the previous secret still authenticates (`ApiKeyRotationWindowRows`).
|
|
424
|
+
// The prefix row says what an empty end date means — after a regenerate the old secret has none and keeps
|
|
425
|
+
// working — so it carries its description; the end-date row hides itself when there is no date.
|
|
426
|
+
previousKeyPrefix: schemaShape.previousKeyPrefix.stringUI({ display: { hideWhenEmpty: true, showDescription: true } }),
|
|
427
|
+
previousKeyInvalidationDate: schemaShape.previousKeyInvalidationDate.dateUI({ display: { hideWhenEmpty: true } }),
|
|
116
428
|
},
|
|
117
429
|
getFrontendResourceLabel: ({ currentObject }) => currentObject.name,
|
|
118
430
|
// The empty state's primary action is Create — surfaced because CREATE
|
|
119
431
|
// declares a (non-addressable, overlay) view below. Creating a key returns
|
|
120
432
|
// its one-time `plainKey` (`.isEphemeral()` on the CREATE response DTO) →
|
|
121
433
|
// the ephemeral reveal dialog shows the secret exactly once.
|
|
122
|
-
emptyState: { primaryAction: Op.CREATE },
|
|
123
434
|
views: [
|
|
124
435
|
[Op.READ, notAddressable()],
|
|
125
|
-
|
|
436
|
+
// A key registry: name, status, prefix, expiry, last use. Comparable rows.
|
|
437
|
+
// CARDS is the framework default and nothing had ever declared otherwise, so every
|
|
438
|
+
// collection in the product rendered as stacked cards — ~150px per row, four people to a
|
|
439
|
+
// viewport, with each field's help text and label repeated on every card. TABLE writes the
|
|
440
|
+
// headers once. `userSwitchableDisplayMode` keeps cards one click away rather than removing
|
|
441
|
+
// a rendering somebody may prefer on a narrow screen.
|
|
442
|
+
[Op.LIST, addressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
126
443
|
// CREATE has a view but is NOT URL-addressable — surface EMBEDDED; the create
|
|
127
444
|
// form opens as a drill-in within the Settings Hub panel, not a routed page.
|
|
128
445
|
// Its Create button still shows: action visibility is governed by the op
|
|
@@ -130,11 +447,11 @@ export function buildSecurityMainPresets() {
|
|
|
130
447
|
[Op.CREATE, notAddressable()],
|
|
131
448
|
[Op.SEARCH, notAddressable()],
|
|
132
449
|
[Op.DELETE, notAddressable()],
|
|
133
|
-
[OrgApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw })],
|
|
134
|
-
[OrgApiKeys_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw })],
|
|
135
|
-
[OrgApiKeys_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff })],
|
|
136
|
-
[OrgApiKeys_Operations.REACTIVATE, notAddressable({ iconOverride: Power })],
|
|
137
|
-
[OrgApiKeys_Operations.EXTEND_EXPIRY, notAddressable({ iconOverride: CalendarPlus })],
|
|
450
|
+
[OrgApiKeys_Operations.ROTATE, notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
451
|
+
[OrgApiKeys_Operations.REGENERATE, notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
452
|
+
[OrgApiKeys_Operations.DEACTIVATE, notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
453
|
+
[OrgApiKeys_Operations.REACTIVATE, notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
454
|
+
[OrgApiKeys_Operations.EXTEND_EXPIRY, notAddressable({ iconOverride: CalendarPlus, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
138
455
|
[OrgApiKeys_Operations.USAGE_STATS, notAddressable({ iconOverride: ChartColumn })],
|
|
139
456
|
],
|
|
140
457
|
})),
|
|
@@ -149,8 +466,8 @@ export function buildSecurityMainPresets() {
|
|
|
149
466
|
* ## No layout refs, deliberately
|
|
150
467
|
*
|
|
151
468
|
* Declaring `layout.refs.sections` creates a contract the resource SPECIFICATION has to document
|
|
152
|
-
* slot for slot, validated at load; this resource has
|
|
153
|
-
* earn that coupling.
|
|
469
|
+
* slot for slot, validated at load; this resource has a handful of visible facts and no section would
|
|
470
|
+
* earn that coupling. Its templates, shared with the person-scope sibling, are flat rows under a header.
|
|
154
471
|
*
|
|
155
472
|
* ## What the administrator can see, and what they cannot
|
|
156
473
|
*
|
|
@@ -160,9 +477,19 @@ export function buildSecurityMainPresets() {
|
|
|
160
477
|
*/
|
|
161
478
|
[R.ORG_PROVIDER_CREDENTIALS]: resourceUIBehavior(orgProviderCredentialsFactory, OrganizationProviderCredentialSchema, ({ schemaShape }) => ({
|
|
162
479
|
icon: KeyRound,
|
|
480
|
+
layout: {
|
|
481
|
+
defaultChromeMode: providerCredentialPresentation(schemaShape).defaultChromeMode,
|
|
482
|
+
header: ProviderCredentialHeader,
|
|
483
|
+
display: providerCredentialDisplayTemplate(true),
|
|
484
|
+
summary: ProviderCredentialSummaryTemplate,
|
|
485
|
+
edit: ProviderCredentialEditTemplate,
|
|
486
|
+
},
|
|
163
487
|
fields: {
|
|
488
|
+
...providerCredentialPresentation(schemaShape).fields,
|
|
489
|
+
// Absent for a credential the system stored rather than a person — a dash there said nothing.
|
|
490
|
+
setByUserId: schemaShape.setByUserId.stringUI({ display: { hideWhenEmpty: true } }),
|
|
164
491
|
validationState: schemaShape.validationState.enumUI({
|
|
165
|
-
display: { displayMode: EnumDisplayMode.BADGE
|
|
492
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
166
493
|
edit: { showDescription: true },
|
|
167
494
|
values: {
|
|
168
495
|
// UNVALIDATED is the honest default and is not a warning: storing a credential proves
|
|
@@ -176,24 +503,36 @@ export function buildSecurityMainPresets() {
|
|
|
176
503
|
}),
|
|
177
504
|
},
|
|
178
505
|
getFrontendResourceLabel: ({ currentObject }) => `${currentObject.providerRef} · ${currentObject.secretSlug}`,
|
|
179
|
-
|
|
506
|
+
// No Create call to action, and no Create on the list either (#1040). A credential is pasted through the Connect
|
|
507
|
+
// tab beside this list, which offers only declared providers and each provider's declared slots. This list's
|
|
508
|
+
// CREATE form took both as free text, so a value could be stored in a slot nothing reads, and the refusal naming
|
|
509
|
+
// the valid slots never reached the person. The API's CREATE stays for callers that are not these screens.
|
|
510
|
+
emptyState: { primaryAction: false },
|
|
180
511
|
views: [
|
|
181
512
|
[Op.READ, notAddressable()],
|
|
182
513
|
[Op.LIST, addressable()],
|
|
183
|
-
[Op.CREATE, notAddressable()],
|
|
514
|
+
[Op.CREATE, notAddressable({ actionVisibility: ActionVisibility.HIDDEN })],
|
|
184
515
|
[Op.UPDATE, notAddressable()],
|
|
185
516
|
[Op.DELETE, notAddressable()],
|
|
186
517
|
],
|
|
187
518
|
})),
|
|
188
519
|
[R.USER_PROVIDER_CREDENTIALS]: resourceUIBehavior(userProviderCredentialsFactory, UserProviderCredentialSchema, ({ schemaShape }) => ({
|
|
189
520
|
icon: KeyRound,
|
|
521
|
+
layout: {
|
|
522
|
+
defaultChromeMode: providerCredentialPresentation(schemaShape).defaultChromeMode,
|
|
523
|
+
header: ProviderCredentialHeader,
|
|
524
|
+
display: providerCredentialDisplayTemplate(false),
|
|
525
|
+
summary: ProviderCredentialSummaryTemplate,
|
|
526
|
+
edit: ProviderCredentialEditTemplate,
|
|
527
|
+
},
|
|
190
528
|
fields: {
|
|
529
|
+
...providerCredentialPresentation(schemaShape).fields,
|
|
191
530
|
// The same three states as the tenant's, coloured identically on purpose: a person reading
|
|
192
531
|
// their own connections and an administrator reading the tenant's are answering the same
|
|
193
532
|
// question, and two colour languages for one vocabulary is how a reader learns to distrust
|
|
194
533
|
// both. The WORDS come from the enum's i18n entry, authored once for every surface.
|
|
195
534
|
validationState: schemaShape.validationState.enumUI({
|
|
196
|
-
display: { displayMode: EnumDisplayMode.BADGE
|
|
535
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
197
536
|
edit: { showDescription: true },
|
|
198
537
|
values: {
|
|
199
538
|
// UNVALIDATED is the honest default and is not a warning: storing a credential proves
|
|
@@ -208,28 +547,35 @@ export function buildSecurityMainPresets() {
|
|
|
208
547
|
}),
|
|
209
548
|
},
|
|
210
549
|
getFrontendResourceLabel: ({ currentObject }) => `${currentObject.providerRef} · ${currentObject.secretSlug}`,
|
|
211
|
-
|
|
212
|
-
//
|
|
213
|
-
//
|
|
214
|
-
//
|
|
550
|
+
// No Create call to action, and no Create on the list either (#1040). A credential is pasted through the Connect
|
|
551
|
+
// tab beside this list, which offers only declared providers and each provider's declared slots. This list's
|
|
552
|
+
// CREATE form took both as free text, so a value could be stored in a slot nothing reads, and the refusal naming
|
|
553
|
+
// the valid slots never reached the person. The API's CREATE stays for callers that are not these screens.
|
|
554
|
+
emptyState: { primaryAction: false },
|
|
555
|
+
// No `layout.refs`, matching the tenant sibling: the templates use no `<Section>`, this resource
|
|
556
|
+
// declares no layout sections in its specification, and a preset naming refs the specification does
|
|
557
|
+
// not document fails the structural-slot validator at import time and crash-loops the companion.
|
|
215
558
|
views: [
|
|
216
559
|
[Op.READ, notAddressable()],
|
|
217
560
|
[Op.LIST, addressable()],
|
|
218
|
-
[Op.CREATE, notAddressable()],
|
|
561
|
+
[Op.CREATE, notAddressable({ actionVisibility: ActionVisibility.HIDDEN })],
|
|
219
562
|
[Op.UPDATE, notAddressable()],
|
|
220
563
|
[Op.DELETE, notAddressable()],
|
|
221
564
|
],
|
|
222
565
|
})),
|
|
223
566
|
[R.AUDIT_LOGS]: resourceUIBehavior(auditLogsFactory, AuditableEvent_BaseSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
|
|
224
567
|
icon: ShieldCheck,
|
|
225
|
-
|
|
568
|
+
// An audit event is named by its type's word and the instant it happened — see `auditEventName`.
|
|
569
|
+
getFrontendResourceLabel: auditEventName,
|
|
226
570
|
layout: {
|
|
227
571
|
refs: {
|
|
228
572
|
sections: ['overview', 'actors', 'payload'],
|
|
229
573
|
},
|
|
574
|
+
defaultChromeMode: auditLogPresentation(schemaShape).defaultChromeMode,
|
|
230
575
|
display: AuditLogDisplayTemplate,
|
|
231
576
|
summary: AuditLogSummaryTemplate,
|
|
232
577
|
},
|
|
578
|
+
fields: auditLogPresentation(schemaShape).fields,
|
|
233
579
|
views: [
|
|
234
580
|
[Op.READ, notAddressable()],
|
|
235
581
|
// Audit-trail review dashboard: severity quick tabs (All/Info/Warning/…)
|
|
@@ -257,16 +603,28 @@ export function buildSecurityMainPresets() {
|
|
|
257
603
|
refs: {
|
|
258
604
|
sections: ['status', 'destination', 'authentication', 'format', 'advanced'],
|
|
259
605
|
},
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
606
|
+
// `display` and `summary` joined `edit` on 2026-09-18. Only the form carried the settings
|
|
607
|
+
// treatment, so the READ an operator actually opens rendered with the stacked default while
|
|
608
|
+
// its own edit form used rows — the same record, two shapes, depending on which verb you
|
|
609
|
+
// reached it by. The card is bare: its one value reads as the word ("Enabled"), see `enabled`.
|
|
610
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
|
|
611
|
+
// SIEM export configuration — a scope-level configuration record. A settings pane is a list of decisions an operator came to TAKE, so its
|
|
612
|
+
// writable fields are offered in place rather than behind a whole-pane edit mode. The set is
|
|
613
|
+
// DERIVED (not primary key, not excludeFromUpdate, not hidden, not opted out), so a field
|
|
614
|
+
// added to this schema tomorrow is covered without anyone remembering to decorate it.
|
|
615
|
+
defaultInlineEdit: ResourceLayoutInlineEditDefault.WRITABLE_FIELDS,
|
|
616
|
+
// And its empty rows say WHICH emptiness they are — "None yet" for a list with no members,
|
|
617
|
+
// "Not available" for a computed value, "No value" for a field awaiting input — instead of one
|
|
618
|
+
// em dash standing for all three. The surface policy's dash is right where a reader is scanning;
|
|
619
|
+
// on a settings row, which is read one at a time to decide something, it is an answer that
|
|
620
|
+
// refuses to answer.
|
|
621
|
+
defaultEmptyValue: 'placeholder',
|
|
263
622
|
edit: () => {
|
|
264
|
-
|
|
265
|
-
return (_jsxs(FormLayout, { children: [_jsx(Section, { name: "status", appearance: SectionMode.CARD, chromeMode: EditChromeMode.INLINE, children: _jsx(FormField, { name: "enabled" }) }), _jsx(Section, { name: "destination", appearance: SectionMode.CARD, children: _jsx(FormField, { name: "webhookUrl" }) }), _jsxs(Section, { name: "authentication", children: [_jsx(FormField, { name: "authMethod" }), _jsx(FormField, { name: "authCredential" }), _jsx(FormField, { name: "authHeaderName" })] }), _jsxs(Section, { name: "format", children: [_jsx(FormField, { name: "eventFormat" }), _jsxs(ObjectScope, { name: "eventFilter", children: [_jsx(FormField, { name: "categories" }), _jsx(FormField, { name: "severityMinimum" }), _jsx(FormField, { name: "specificEventTypes" })] })] }), _jsxs(Section, { name: "advanced", appearance: SectionMode.COLLAPSIBLE, defaultFocus: false, children: [_jsxs(ObjectScope, { name: "delivery", children: [_jsx(FormField, { name: "batchSize" }), _jsx(FormField, { name: "batchWindowSeconds" }), _jsx(FormField, { name: "retryAttempts" }), _jsx(FormField, { name: "retryBackoffSeconds" }), _jsx(FormField, { name: "timeoutSeconds" })] }), _jsx(FormField, { name: "customHeaders" }), _jsx(FormField, { name: "includeRawEventData" }), _jsx(FormField, { name: "includeDeviceContext" })] })] }));
|
|
623
|
+
return (_jsxs(FormLayout, { children: [_jsx(Section, { name: "status", appearance: SectionMode.CARD, chromeMode: EditChromeMode.INLINE, hideTitle: true, children: _jsx(FormField, { name: "enabled" }) }), _jsx(Section, { name: "destination", appearance: SectionMode.CARD, hideTitle: true, children: _jsx(FormField, { name: "webhookUrl" }) }), _jsxs(Section, { name: "authentication", children: [_jsx(FormField, { name: "authMethod" }), _jsx(FormField, { name: "authCredential" }), _jsx(FormField, { name: "authHeaderName" })] }), _jsxs(Section, { name: "format", children: [_jsx(FormField, { name: "eventFormat" }), _jsxs(ObjectScope, { name: "eventFilter", children: [_jsx(FormField, { name: "categories" }), _jsx(FormField, { name: "severityMinimum" }), _jsx(FormField, { name: "specificEventTypes" })] }), _jsxs(ObjectScope, { name: "exportProjection", children: [_jsx(FormField, { name: "disclosedTiers" }), _jsx(FormField, { name: "disclosedEventDataClasses" })] })] }), _jsxs(Section, { name: "advanced", appearance: SectionMode.COLLAPSIBLE, defaultFocus: false, children: [_jsxs(ObjectScope, { name: "delivery", children: [_jsx(FormField, { name: "retryAttempts" }), _jsx(FormField, { name: "retryBackoffSeconds" }), _jsx(FormField, { name: "timeoutSeconds" })] }), _jsx(FormField, { name: "customHeaders" })] })] }));
|
|
266
624
|
},
|
|
267
625
|
display: () => {
|
|
268
626
|
const { data, isLoading } = useDisplayTemplateContext();
|
|
269
|
-
return (_jsxs(DisplayLayout, { children: [_jsx(Section, { name: "status", appearance: SectionMode.CARD, children: _jsx(DisplayField, { name: "enabled" }) }), _jsx(Section, { name: "destination", appearance: SectionMode.CARD, children: _jsx(DisplayField, { name: "webhookUrl" }) }), _jsxs(Section, { name: "authentication", children: [_jsx(DisplayField, { name: "authMethod" }), _jsx(DisplayField, { name: "authCredential" }), _jsx(DisplayField, { name: "authHeaderName" })] }), _jsxs(Section, { name: "format", children: [_jsx(DisplayField, { name: "eventFormat" }), _jsxs(ObjectScope, { name: "eventFilter", children: [_jsx(DisplayField, { name: "categories" }), _jsx(DisplayField, { name: "severityMinimum" }), _jsx(DisplayField, { name: "specificEventTypes" })] })
|
|
627
|
+
return (_jsxs(DisplayLayout, { children: [_jsx(Section, { name: "status", appearance: SectionMode.CARD, hideTitle: true, children: _jsx(DisplayField, { name: "enabled" }) }), _jsx(Section, { name: "destination", appearance: SectionMode.CARD, hideTitle: true, children: _jsx(DisplayField, { name: "webhookUrl" }) }), _jsxs(Section, { name: "authentication", hideDescription: true, children: [_jsx(DisplayField, { name: "authMethod" }), _jsx(DisplayField, { name: "authCredential" }), _jsx(DisplayField, { name: "authHeaderName" })] }), _jsxs(Section, { name: "format", hideDescription: true, children: [_jsx(DisplayField, { name: "eventFormat" }), _jsxs(ObjectScope, { name: "eventFilter", children: [_jsx(DisplayField, { name: "categories" }), _jsx(DisplayField, { name: "severityMinimum" }), _jsx(DisplayField, { name: "specificEventTypes" })] }), _jsxs(ObjectScope, { name: "exportProjection", children: [_jsx(DisplayField, { name: "disclosedTiers" }), _jsx(DisplayField, { name: "disclosedEventDataClasses" })] })] }), _jsxs(Section, { name: "advanced", appearance: SectionMode.COLLAPSIBLE, defaultFocus: false, hideDescription: true, children: [_jsxs(ObjectScope, { name: "delivery", children: [_jsx(DisplayField, { name: "retryAttempts" }), _jsx(DisplayField, { name: "retryBackoffSeconds" }), _jsx(DisplayField, { name: "timeoutSeconds" })] }), _jsx(DisplayField, { name: "customHeaders" })] })] }));
|
|
270
628
|
},
|
|
271
629
|
summary: SiemExportSummaryTemplate,
|
|
272
630
|
},
|
|
@@ -275,13 +633,14 @@ export function buildSecurityMainPresets() {
|
|
|
275
633
|
webhookUrl: siemExportFieldOverrides.webhookUrl(schema),
|
|
276
634
|
authMethod: siemExportFieldOverrides.authMethod(schema),
|
|
277
635
|
eventFormat: siemExportFieldOverrides.eventFormat(schema),
|
|
278
|
-
includeRawEventData: siemExportFieldOverrides.includeRawEventData(schema),
|
|
279
|
-
includeDeviceContext: siemExportFieldOverrides.includeDeviceContext(schema),
|
|
280
636
|
authCredential: siemExportFieldOverrides.authCredential(schema),
|
|
281
637
|
authHeaderName: siemExportFieldOverrides.authHeaderName(schema),
|
|
282
638
|
},
|
|
283
639
|
views: [
|
|
284
640
|
[Op.READ, addressable()],
|
|
641
|
+
// The edit this preset's form was always rendering, and nothing could save (#953): UPDATE became
|
|
642
|
+
// the administrator's API_CALL door. Not addressable — it opens from the READ view.
|
|
643
|
+
[Op.UPDATE, notAddressable()],
|
|
285
644
|
],
|
|
286
645
|
variantOverrides: {
|
|
287
646
|
[R.APPLICATION]: { views: [] },
|
|
@@ -296,15 +655,18 @@ export function buildSecurityMainPresets() {
|
|
|
296
655
|
icon: AlertTriangle,
|
|
297
656
|
layout: {
|
|
298
657
|
refs: {
|
|
299
|
-
sections: ['
|
|
658
|
+
sections: ['delivery', 'payload'],
|
|
300
659
|
},
|
|
660
|
+
// Settings rows on read, bare values on a card: the card is the failure reason and its status badge.
|
|
661
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
|
|
662
|
+
header: SiemDlqHeader,
|
|
301
663
|
display: SiemDlqDisplayTemplate,
|
|
302
664
|
summary: SiemDlqSummaryTemplate,
|
|
303
665
|
},
|
|
304
666
|
fields: {
|
|
305
|
-
//
|
|
667
|
+
// A badge with no sentence under it on read; the enum's description is edit help.
|
|
306
668
|
status: schema.shape.status.enumUI({
|
|
307
|
-
display: { displayMode: EnumDisplayMode.BADGE
|
|
669
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
308
670
|
edit: { showDescription: true },
|
|
309
671
|
values: {
|
|
310
672
|
[SiemDeliveryDlqStatus.PENDING_RETRY]: { color: BadgeSemanticVariant.WARNING },
|
|
@@ -312,6 +674,8 @@ export function buildSecurityMainPresets() {
|
|
|
312
674
|
[SiemDeliveryDlqStatus.DELIVERED]: { color: BadgeSemanticVariant.SUCCESS },
|
|
313
675
|
},
|
|
314
676
|
}),
|
|
677
|
+
// Empty once the row is terminal (exhausted or delivered) — a dash there said nothing.
|
|
678
|
+
nextRetryAt: schema.shape.nextRetryAt.dateUI({ display: { hideWhenEmpty: true } }),
|
|
315
679
|
},
|
|
316
680
|
getFrontendResourceLabel: ({ currentObject }) => currentObject.failureReason,
|
|
317
681
|
views: [
|
|
@@ -342,28 +706,84 @@ export function buildSecurityMainPresets() {
|
|
|
342
706
|
{ parentResourceType: R.ORGANIZATIONS, resourceType: R.ORGANIZATION_SSO_CONFIG },
|
|
343
707
|
{ parentResourceType: R.APPLICATION, resourceType: R.APPLICATION_SSO_CONFIG },
|
|
344
708
|
],
|
|
345
|
-
}, ssoConfigPolymorphicFactories[R.ORGANIZATION_SSO_CONFIG], SsoConfigBaseSchema, ({ schema, schemaShape, opsVariantResolver }) =>
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
709
|
+
}, ssoConfigPolymorphicFactories[R.ORGANIZATION_SSO_CONFIG], SsoConfigBaseSchema, ({ schema, schemaShape, opsVariantResolver }) => {
|
|
710
|
+
/*
|
|
711
|
+
* The one sentence on this pane that is a warning rather than a restatement: each break-glass address is a
|
|
712
|
+
* standing way in with a password alone, so the list is kept short and reviewed. It belongs to the field it
|
|
713
|
+
* warns about, on the row an administrator edits in place and in the form — the pane's vertical tabs render
|
|
714
|
+
* no section description. Its words are the `whyItMatters` the SSO policy specification declares on this
|
|
715
|
+
* nested leaf (the labeller reads a nested field's spec under its dotted path). Without that declaration the
|
|
716
|
+
* generated description restated the label ("Break-glass accounts" under "Break-glass accounts").
|
|
717
|
+
* spec-cite: N/A — the quoted words are this application's own generated label, and "specification" is our
|
|
718
|
+
* SSO policy resource specification, not an external standard.
|
|
719
|
+
*
|
|
720
|
+
* Decorated here rather than through `fields`, whose keys are top-level: a decorator writes the nested
|
|
721
|
+
* declaration's own metadata in place, which is what `fields` relies on for top-level fields too.
|
|
722
|
+
*/
|
|
723
|
+
schema.shape.emergencyAccess.shape.breakGlassAccounts.arrayUI({
|
|
724
|
+
display: { showDescription: true },
|
|
725
|
+
edit: { showDescription: true },
|
|
726
|
+
});
|
|
727
|
+
return {
|
|
728
|
+
icon: StandardIconReference.LOCK,
|
|
729
|
+
layout: {
|
|
730
|
+
// Settings-page chrome (Settings Hub): label-left / value-right rows. A scope-level
|
|
731
|
+
// configuration record is READ far more often than it is edited — an operator opens it to
|
|
732
|
+
// confirm a value — so the DISPLAY side needs the row treatment at least as much as the form.
|
|
733
|
+
// The card stays INLINE on purpose: it is ONE boolean (`enforcement.requireSSO`), and a bare checkmark
|
|
734
|
+
// says nothing about what is required. The value is nested, so a field-level `summaryOverride` cannot
|
|
735
|
+
// reach it — the layout default is the only place to keep its label.
|
|
736
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.INLINE, edit: EditChromeMode.SETTINGS_ROW },
|
|
737
|
+
// SSO policy — a scope-level configuration record; every field here is a decision. A settings pane is a list of decisions an operator came to TAKE, so its
|
|
738
|
+
// writable fields are offered in place rather than behind a whole-pane edit mode. The set is
|
|
739
|
+
// DERIVED (not primary key, not excludeFromUpdate, not hidden, not opted out), so a field
|
|
740
|
+
// added to this schema tomorrow is covered without anyone remembering to decorate it.
|
|
741
|
+
defaultInlineEdit: ResourceLayoutInlineEditDefault.WRITABLE_FIELDS,
|
|
742
|
+
// And its empty rows say WHICH emptiness they are — "None yet" for a list with no members,
|
|
743
|
+
// "Not available" for a computed value, "No value" for a field awaiting input — instead of one
|
|
744
|
+
// em dash standing for all three. The surface policy's dash is right where a reader is scanning;
|
|
745
|
+
// on a settings row, which is read one at a time to decide something, it is an answer that
|
|
746
|
+
// refuses to answer.
|
|
747
|
+
defaultEmptyValue: 'placeholder',
|
|
748
|
+
// Seven groups of decisions — enforcement, domains, provisioning, session, audit,
|
|
749
|
+
// emergency access, OAuth restrictions — and thirty fields between them. Stacked, the pane
|
|
750
|
+
// is a scroll in which the thing you came to change is below the fold and the six you did
|
|
751
|
+
// not is what you read on the way. Vertical tabs is what a settings surface of this size
|
|
752
|
+
// does: one group at a time, all of them named and reachable in one click, and the rail
|
|
753
|
+
// doubles as the answer to "what else does SSO decide here".
|
|
754
|
+
//
|
|
755
|
+
// Declared on the LAYOUT rather than on the seven sections: the section grouping keys on
|
|
756
|
+
// `(mode, its mode-specific props)` over consecutive siblings, so per-section it is an
|
|
757
|
+
// agreement N authors must keep, and a member that slips renders a second rail rather than
|
|
758
|
+
// failing. It is also what lets the Settings Hub know the pane carries a rail of its own
|
|
759
|
+
// and give it the wider frame — a prop inside a React template cannot be read by anything
|
|
760
|
+
// that has to size the surface around it.
|
|
761
|
+
defaultDisplaySectionAppearance: SectionMode.VERTICAL_TABS,
|
|
762
|
+
refs: {
|
|
763
|
+
sections: ['enforcement', 'domains', 'session', 'emergency', 'oauth'],
|
|
764
|
+
},
|
|
765
|
+
display: SsoConfigDisplayTemplate,
|
|
766
|
+
summary: SsoConfigSummaryTemplate,
|
|
350
767
|
},
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
768
|
+
views: [
|
|
769
|
+
[Op.READ, addressable()],
|
|
770
|
+
// The edit an administrator opens this pane to make, which until now nothing could save: the
|
|
771
|
+
// literal UPDATE was INTERNAL_CALL, so no route existed and the frontend's update resolution
|
|
772
|
+
// fell through to whichever custom verb below borrowed UPDATE semantics. Not addressable — it
|
|
773
|
+
// opens from the READ view, like SIEM export config's (#953).
|
|
774
|
+
[Op.UPDATE, notAddressable()],
|
|
775
|
+
// Domain ownership is the one publicly mutable part of this policy row (#424). The three
|
|
776
|
+
// actions live beside the `domains` section: claim returns a DNS record to copy, verify
|
|
777
|
+
// resolves it, revoke releases the domain for another scope to verify.
|
|
778
|
+
[SsoConfig_Operations.CLAIM_DOMAIN, notAddressable({ iconOverride: Globe })],
|
|
779
|
+
[SsoConfig_Operations.VERIFY_DOMAIN, notAddressable({ iconOverride: ShieldCheck })],
|
|
780
|
+
[SsoConfig_Operations.REVOKE_DOMAIN, notAddressable({ iconOverride: Unlink })],
|
|
781
|
+
],
|
|
782
|
+
variantOverrides: {
|
|
783
|
+
[R.APPLICATION]: { views: [] },
|
|
784
|
+
},
|
|
785
|
+
};
|
|
786
|
+
}),
|
|
367
787
|
...polymorphicResourceUIBehavior({
|
|
368
788
|
variants: [
|
|
369
789
|
{ parentResourceType: R.ORGANIZATIONS, resourceType: R.ORGANIZATION_SSO_CONNECTIONS },
|
|
@@ -375,22 +795,40 @@ export function buildSecurityMainPresets() {
|
|
|
375
795
|
refs: {
|
|
376
796
|
sections: ['overview', 'oidc', 'saml', 'provisioning'],
|
|
377
797
|
},
|
|
798
|
+
// Settings rows on read, bare values on a card (the name, the protocol badge, on/off as the word).
|
|
799
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
|
|
800
|
+
header: SsoConnectionHeader,
|
|
378
801
|
display: SsoConnectionDisplayTemplate,
|
|
379
802
|
summary: SsoConnectionSummaryTemplate,
|
|
380
803
|
},
|
|
381
804
|
fields: {
|
|
805
|
+
// A badge with no sentence under it on read ("Selects the authentication protocol…" sat under every
|
|
806
|
+
// card); the enum's description is edit help.
|
|
382
807
|
protocol: schema.shape.protocol.enumUI({
|
|
383
|
-
display: { displayMode: EnumDisplayMode.BADGE
|
|
808
|
+
display: { displayMode: EnumDisplayMode.BADGE },
|
|
384
809
|
edit: { showDescription: true },
|
|
385
810
|
values: {
|
|
386
811
|
[SsoProtocol.OIDC]: { color: BadgeSemanticVariant.INFO },
|
|
387
812
|
[SsoProtocol.SAML]: { color: BadgeSemanticVariant.SECONDARY },
|
|
388
813
|
},
|
|
389
814
|
}),
|
|
815
|
+
// On a card the value reads bare, and a bare checkmark says nothing about WHAT is true — so the card
|
|
816
|
+
// says the word ("Enabled" / "Disabled"); the read page keeps the labelled row and its checkmark.
|
|
817
|
+
enabled: schema.shape.enabled.booleanUI({
|
|
818
|
+
labellingValue: BooleanLabellingValue.ENABLED_DISABLED,
|
|
819
|
+
summaryOverride: { displayMode: BooleanDisplayMode.RAW },
|
|
820
|
+
}),
|
|
821
|
+
externalProviderId: schema.shape.externalProviderId.stringUI({ display: { hideWhenEmpty: true } }),
|
|
390
822
|
},
|
|
391
823
|
getFrontendResourceLabel: ({ currentObject }) => currentObject.displayName,
|
|
392
824
|
views: [
|
|
393
|
-
|
|
825
|
+
// A connection registry: provider, protocol, status. Comparable rows.
|
|
826
|
+
// CARDS is the framework default and nothing had ever declared otherwise, so every
|
|
827
|
+
// collection in the product rendered as stacked cards — ~150px per row, four people to a
|
|
828
|
+
// viewport, with each field's help text and label repeated on every card. TABLE writes the
|
|
829
|
+
// headers once. `userSwitchableDisplayMode` keeps cards one click away rather than removing
|
|
830
|
+
// a rendering somebody may prefer on a narrow screen.
|
|
831
|
+
[Op.LIST, addressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
394
832
|
[SsoConnection_Operations.TEST_CONNECTION, addressable({
|
|
395
833
|
iconOverride: PlugZap,
|
|
396
834
|
customView: ResourceLayoutPreset_Read_SsoSaml,
|
|
@@ -412,14 +850,38 @@ export function buildSecurityMainPresets() {
|
|
|
412
850
|
}, scimProvisioningConfigPolymorphicFactories[R.ORGANIZATION_SCIM_PROVISIONING_CONFIG], ScimProvisioningConfigBaseSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
|
|
413
851
|
icon: UserCog,
|
|
414
852
|
layout: {
|
|
853
|
+
// Settings-page chrome (Settings Hub): label-left / value-right rows. A scope-level
|
|
854
|
+
// configuration record is READ far more often than it is edited — an operator opens it to
|
|
855
|
+
// confirm a value — so the DISPLAY side needs the row treatment at least as much as the form.
|
|
856
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
|
|
857
|
+
// SCIM provisioning policy — a scope-level configuration record. A settings pane is a list of decisions an operator came to TAKE, so its
|
|
858
|
+
// writable fields are offered in place rather than behind a whole-pane edit mode. The set is
|
|
859
|
+
// DERIVED (not primary key, not excludeFromUpdate, not hidden, not opted out), so a field
|
|
860
|
+
// added to this schema tomorrow is covered without anyone remembering to decorate it.
|
|
861
|
+
defaultInlineEdit: ResourceLayoutInlineEditDefault.WRITABLE_FIELDS,
|
|
862
|
+
// And its empty rows say WHICH emptiness they are — "None yet" for a list with no members,
|
|
863
|
+
// "Not available" for a computed value, "No value" for a field awaiting input — instead of one
|
|
864
|
+
// em dash standing for all three. The surface policy's dash is right where a reader is scanning;
|
|
865
|
+
// on a settings row, which is read one at a time to decide something, it is an answer that
|
|
866
|
+
// refuses to answer.
|
|
867
|
+
defaultEmptyValue: 'placeholder',
|
|
415
868
|
refs: {
|
|
416
869
|
sections: ['overview', 'mapping', 'lifecycle'],
|
|
417
870
|
},
|
|
418
871
|
display: ScimProvisioningDisplayTemplate,
|
|
419
872
|
summary: ScimProvisioningSummaryTemplate,
|
|
420
873
|
},
|
|
874
|
+
fields: {
|
|
875
|
+
// The card's one value keeps its label: a bare checkmark says nothing about WHAT is switched on.
|
|
876
|
+
autoCreateUsers: schema.shape.autoCreateUsers.booleanUI({ summaryOverride: { chromeMode: DisplayChromeMode.INLINE } }),
|
|
877
|
+
},
|
|
421
878
|
views: [
|
|
422
879
|
[Op.READ, addressable()],
|
|
880
|
+
// The four decisions on this row — create users, verify their email, deactivate on
|
|
881
|
+
// deprovision, and the role they land with — are what an operator opens SCIM settings to set,
|
|
882
|
+
// and none of them was settable: the literal UPDATE was INTERNAL_CALL. Not addressable — it
|
|
883
|
+
// opens from the READ view, like SIEM export config's (#953).
|
|
884
|
+
[Op.UPDATE, notAddressable()],
|
|
423
885
|
],
|
|
424
886
|
variantOverrides: {
|
|
425
887
|
[R.APPLICATION]: { views: [] },
|
|
@@ -436,11 +898,29 @@ export function buildSecurityMainPresets() {
|
|
|
436
898
|
refs: {
|
|
437
899
|
sections: ['overview', 'lifecycle'],
|
|
438
900
|
},
|
|
901
|
+
// Settings rows on read, bare values on a card (the name, then active or not as the word).
|
|
902
|
+
defaultChromeMode: { display: DisplayChromeMode.SETTINGS_ROW, summary: DisplayChromeMode.HIDDEN, edit: EditChromeMode.SETTINGS_ROW },
|
|
439
903
|
display: ScimTokenDisplayTemplate,
|
|
440
904
|
summary: ScimTokenSummaryTemplate,
|
|
441
905
|
},
|
|
906
|
+
fields: {
|
|
907
|
+
// "Active: ✓" on the card becomes the word: a bare checkmark says nothing about what is true.
|
|
908
|
+
isActive: schema.shape.isActive.booleanUI({
|
|
909
|
+
labellingValue: BooleanLabellingValue.ACTIVE_INACTIVE,
|
|
910
|
+
summaryOverride: { displayMode: BooleanDisplayMode.RAW },
|
|
911
|
+
}),
|
|
912
|
+
// A token never used, or with no expiry, is ordinary — a dash on those rows said nothing.
|
|
913
|
+
lastUsedAt: schema.shape.lastUsedAt.dateUI({ display: { hideWhenEmpty: true } }),
|
|
914
|
+
expiresAt: schema.shape.expiresAt.dateUI({ display: { hideWhenEmpty: true } }),
|
|
915
|
+
},
|
|
442
916
|
views: [
|
|
443
|
-
|
|
917
|
+
// A token registry: name, status, last used, expiry. Comparable rows.
|
|
918
|
+
// CARDS is the framework default and nothing had ever declared otherwise, so every
|
|
919
|
+
// collection in the product rendered as stacked cards — ~150px per row, four people to a
|
|
920
|
+
// viewport, with each field's help text and label repeated on every card. TABLE writes the
|
|
921
|
+
// headers once. `userSwitchableDisplayMode` keeps cards one click away rather than removing
|
|
922
|
+
// a rendering somebody may prefer on a narrow screen.
|
|
923
|
+
[Op.LIST, addressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
444
924
|
[ScimTokens_Operations.GENERATE_TOKEN, notAddressable({ iconOverride: KeyRound })],
|
|
445
925
|
[ScimTokens_Operations.REVOKE_TOKEN, notAddressable({ iconOverride: ShieldX })],
|
|
446
926
|
[ScimTokens_Operations.ROTATE_TOKEN, notAddressable({ iconOverride: RotateCw })],
|
|
@@ -450,6 +930,50 @@ export function buildSecurityMainPresets() {
|
|
|
450
930
|
}
|
|
451
931
|
export function buildSecurityAdminPresets(main) {
|
|
452
932
|
return {
|
|
933
|
+
/**
|
|
934
|
+
* The APPLICATION-wide audit trail — the same rows the organization door serves, read across
|
|
935
|
+
* every tenant instead of inside one.
|
|
936
|
+
*
|
|
937
|
+
* A separate resource rather than a polymorphic variant of `AUDIT_LOGS`, which is why this is a
|
|
938
|
+
* second entry and not a `variantOverrides` block: the two doors differ in what a read MEANS, not
|
|
939
|
+
* only in scope. Every read here is a declared crossing (`admitsCrossTenantPlatformAdministration`)
|
|
940
|
+
* and emits one crossing event per tenant reached, and under an `INDEPENDENT_APPROVAL` audit
|
|
941
|
+
* policy it additionally needs a two-person `applicationAccessGrants` window. None of that is true
|
|
942
|
+
* of the tenant door.
|
|
943
|
+
*
|
|
944
|
+
* It shares `AuditableEvent_BaseSchema` and therefore both templates verbatim: an audit event is
|
|
945
|
+
* the same object whichever door served it, and giving the operator a differently-shaped row would
|
|
946
|
+
* be a difference with no meaning behind it.
|
|
947
|
+
*
|
|
948
|
+
* NO `EXPORT_AUDIT_LOGS`: the application factory declares READ, LIST and SEARCH and no custom
|
|
949
|
+
* operation, so naming the export here would name an operation that does not exist.
|
|
950
|
+
*/
|
|
951
|
+
[R.APPLICATION_AUDIT_LOGS]: resourceUIBehavior(applicationAuditLogsFactory, AuditableEvent_BaseSchema, ({ schema, schemaShape, opsVariantResolver }) => ({
|
|
952
|
+
icon: ShieldCheck,
|
|
953
|
+
// An audit event is named by its type's word and the instant it happened — see `auditEventName`.
|
|
954
|
+
getFrontendResourceLabel: auditEventName,
|
|
955
|
+
layout: {
|
|
956
|
+
refs: {
|
|
957
|
+
sections: ['overview', 'actors', 'payload'],
|
|
958
|
+
},
|
|
959
|
+
defaultChromeMode: auditLogPresentation(schemaShape).defaultChromeMode,
|
|
960
|
+
display: AuditLogDisplayTemplate,
|
|
961
|
+
summary: AuditLogSummaryTemplate,
|
|
962
|
+
},
|
|
963
|
+
fields: auditLogPresentation(schemaShape).fields,
|
|
964
|
+
views: [
|
|
965
|
+
[Op.READ, notAddressable()],
|
|
966
|
+
// Same dashboard capabilities as the tenant door — `severity` is in this operation's own
|
|
967
|
+
// declared `filterFields` and `createdAt` is a summary field, so both cues resolve here too.
|
|
968
|
+
[Op.LIST, addressable({
|
|
969
|
+
collectionDisplayConfig: {
|
|
970
|
+
quickFilterField: 'severity',
|
|
971
|
+
temporalGroupField: 'createdAt',
|
|
972
|
+
},
|
|
973
|
+
})],
|
|
974
|
+
[Op.SEARCH, addressable()],
|
|
975
|
+
],
|
|
976
|
+
})),
|
|
453
977
|
...polymorphicResourceUIBehaviorFrom({
|
|
454
978
|
variants: [
|
|
455
979
|
{ parentResourceType: R.ORGANIZATIONS, resourceType: R.ORGANIZATION_SIEM_EXPORT_CONFIG },
|
|
@@ -461,6 +985,11 @@ export function buildSecurityAdminPresets(main) {
|
|
|
461
985
|
fields: base.fields,
|
|
462
986
|
views: [
|
|
463
987
|
[Op.READ, addressable()],
|
|
988
|
+
// The admin app's own edit door for the APP-scope row. The `main` preset above declares
|
|
989
|
+
// the same view for the ORG-scope pane; this block is the SECOND lane, and the two carry
|
|
990
|
+
// the same operation set for a reason — an app super-administrator reading a
|
|
991
|
+
// configuration record here is reading it to change it.
|
|
992
|
+
[Op.UPDATE, notAddressable()],
|
|
464
993
|
],
|
|
465
994
|
variantOverrides: {
|
|
466
995
|
[R.ORGANIZATIONS]: {
|
|
@@ -519,6 +1048,11 @@ export function buildSecurityAdminPresets(main) {
|
|
|
519
1048
|
layout: base.layout,
|
|
520
1049
|
views: [
|
|
521
1050
|
[Op.READ, addressable()],
|
|
1051
|
+
// The admin app's own edit door for the APP-scope row. The `main` preset above declares
|
|
1052
|
+
// the same view for the ORG-scope pane; this block is the SECOND lane, and the two carry
|
|
1053
|
+
// the same operation set for a reason — an app super-administrator reading a
|
|
1054
|
+
// configuration record here is reading it to change it.
|
|
1055
|
+
[Op.UPDATE, notAddressable()],
|
|
522
1056
|
[SsoConfig_Operations.CLAIM_DOMAIN, notAddressable({ iconOverride: Globe })],
|
|
523
1057
|
[SsoConfig_Operations.VERIFY_DOMAIN, notAddressable({ iconOverride: ShieldCheck })],
|
|
524
1058
|
[SsoConfig_Operations.REVOKE_DOMAIN, notAddressable({ iconOverride: Unlink })],
|
|
@@ -539,8 +1073,9 @@ export function buildSecurityAdminPresets(main) {
|
|
|
539
1073
|
layout: base.layout,
|
|
540
1074
|
fields: base.fields,
|
|
541
1075
|
getFrontendResourceLabel: base.getFrontendResourceLabel,
|
|
1076
|
+
// The main lane's registry TABLE, for the reason given on SCIM tokens below.
|
|
542
1077
|
views: [
|
|
543
|
-
[Op.LIST, addressable()],
|
|
1078
|
+
[Op.LIST, addressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
544
1079
|
[SsoConnection_Operations.TEST_CONNECTION, addressable({
|
|
545
1080
|
iconOverride: PlugZap,
|
|
546
1081
|
customView: ResourceLayoutPreset_Read_SsoSaml,
|
|
@@ -554,7 +1089,7 @@ export function buildSecurityAdminPresets(main) {
|
|
|
554
1089
|
[R.ORGANIZATIONS]: {
|
|
555
1090
|
views: [
|
|
556
1091
|
[Op.READ, notAddressable()],
|
|
557
|
-
[Op.LIST, notAddressable()],
|
|
1092
|
+
[Op.LIST, notAddressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
558
1093
|
],
|
|
559
1094
|
},
|
|
560
1095
|
},
|
|
@@ -567,8 +1102,14 @@ export function buildSecurityAdminPresets(main) {
|
|
|
567
1102
|
}, scimProvisioningConfigPolymorphicFactories[R.ORGANIZATION_SCIM_PROVISIONING_CONFIG], main, ({ base }) => ({
|
|
568
1103
|
icon: base.icon,
|
|
569
1104
|
layout: base.layout,
|
|
1105
|
+
fields: base.fields,
|
|
570
1106
|
views: [
|
|
571
1107
|
[Op.READ, addressable()],
|
|
1108
|
+
// The admin app's own edit door for the APP-scope row. The `main` preset above declares
|
|
1109
|
+
// the same view for the ORG-scope pane; this block is the SECOND lane, and the two carry
|
|
1110
|
+
// the same operation set for a reason — an app super-administrator reading a
|
|
1111
|
+
// configuration record here is reading it to change it.
|
|
1112
|
+
[Op.UPDATE, notAddressable()],
|
|
572
1113
|
],
|
|
573
1114
|
variantOverrides: {
|
|
574
1115
|
[R.ORGANIZATIONS]: {
|
|
@@ -583,9 +1124,12 @@ export function buildSecurityAdminPresets(main) {
|
|
|
583
1124
|
}, scimTokensPolymorphicFactories[R.ORGANIZATION_SCIM_TOKENS], main, ({ base }) => ({
|
|
584
1125
|
icon: base.icon,
|
|
585
1126
|
layout: base.layout,
|
|
1127
|
+
fields: base.fields,
|
|
586
1128
|
getFrontendResourceLabel: base.getFrontendResourceLabel,
|
|
1129
|
+
// The same registry TABLE the main lane declares: this lane REPLACES the main entry in an application
|
|
1130
|
+
// that composes both scopes, so leaving it out rendered the inventory as stacked cards there.
|
|
587
1131
|
views: [
|
|
588
|
-
[Op.LIST, addressable()],
|
|
1132
|
+
[Op.LIST, addressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
589
1133
|
[ScimTokens_Operations.GENERATE_TOKEN, notAddressable({ iconOverride: KeyRound })],
|
|
590
1134
|
[ScimTokens_Operations.REVOKE_TOKEN, notAddressable({ iconOverride: ShieldX })],
|
|
591
1135
|
[ScimTokens_Operations.ROTATE_TOKEN, notAddressable({ iconOverride: RotateCw })],
|
|
@@ -594,28 +1138,67 @@ export function buildSecurityAdminPresets(main) {
|
|
|
594
1138
|
[R.ORGANIZATIONS]: {
|
|
595
1139
|
views: [
|
|
596
1140
|
[Op.READ, notAddressable()],
|
|
597
|
-
[Op.LIST, notAddressable()],
|
|
1141
|
+
[Op.LIST, notAddressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
598
1142
|
],
|
|
599
1143
|
},
|
|
600
1144
|
},
|
|
601
1145
|
})),
|
|
1146
|
+
/**
|
|
1147
|
+
* The application operator's lane onto an organization's OAuth clients: every verb the main lane has, on its
|
|
1148
|
+
* `admin` variant — except `setAutonomousAgents`, which has none. Binding an agent grants a credential standing
|
|
1149
|
+
* authority to act unattended INSIDE a tenant, so only that tenant's own administrator may do it (#1611); the
|
|
1150
|
+
* operator can still see what a client runs, and end the client.
|
|
1151
|
+
*
|
|
1152
|
+
* It ALSO carries the main lane's views. An application that serves tenants and operators from one frontend
|
|
1153
|
+
* composes both lanes, and this entry REPLACES the main one there — so without the default-variant views the
|
|
1154
|
+
* tenant administrator's own Settings pane (which runs the DEFAULT variants) would have no Create and no binding
|
|
1155
|
+
* action at all. In a split operator-only deployment they are role-gated like everywhere else (the tenant
|
|
1156
|
+
* lane's operations admit tenant roles only), but note the main LIST view is ADDRESSABLE: such a frontend
|
|
1157
|
+
* registers an organization-scoped list route that an operator who is also a member of an organization can
|
|
1158
|
+
* reach. No operator-only deployment exists yet; if one is built, mark the spread LIST not addressable here.
|
|
1159
|
+
*/
|
|
1160
|
+
[R.OAUTH_CLIENTS_ORGANIZATION]: resourceUIBehaviorFrom(orgOAuthClientsFactory, main[R.OAUTH_CLIENTS_ORGANIZATION], ({ base, opsVariantResolver }) => ({
|
|
1161
|
+
icon: base.icon,
|
|
1162
|
+
layout: base.layout,
|
|
1163
|
+
getFrontendResourceLabel: base.getFrontendResourceLabel,
|
|
1164
|
+
fields: base.fields,
|
|
1165
|
+
views: [
|
|
1166
|
+
...(base.views ?? []),
|
|
1167
|
+
[opsVariantResolver(Op.READ, 'admin'), notAddressable()],
|
|
1168
|
+
[opsVariantResolver(Op.LIST, 'admin'), notAddressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
1169
|
+
[opsVariantResolver(Op.SEARCH, 'admin'), notAddressable()],
|
|
1170
|
+
[opsVariantResolver(Op.CREATE, 'admin'), notAddressable()],
|
|
1171
|
+
[opsVariantResolver(Op.DELETE, 'admin'), notAddressable()],
|
|
1172
|
+
[opsVariantResolver(OrgOAuthClients_Operations.ROTATE, 'admin'), notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1173
|
+
[opsVariantResolver(OrgOAuthClients_Operations.REGENERATE, 'admin'), notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1174
|
+
[opsVariantResolver(OrgOAuthClients_Operations.DEACTIVATE, 'admin'), notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1175
|
+
[opsVariantResolver(OrgOAuthClients_Operations.REACTIVATE, 'admin'), notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1176
|
+
],
|
|
1177
|
+
})),
|
|
602
1178
|
[R.ORG_API_KEYS]: resourceUIBehaviorFrom(orgApiKeysFactory, main[R.ORG_API_KEYS], ({ base, opsVariantResolver }) => ({
|
|
603
1179
|
icon: base.icon,
|
|
604
1180
|
layout: base.layout,
|
|
605
1181
|
getFrontendResourceLabel: base.getFrontendResourceLabel,
|
|
606
1182
|
fields: base.fields,
|
|
607
1183
|
views: [
|
|
1184
|
+
// The tenant administrator's own views, kept. In an application composing both lanes this entry replaces the
|
|
1185
|
+
// main one, and the Settings pane runs the DEFAULT variants: with only the `admin` keys below, the organization's
|
|
1186
|
+
// API keys rendered with no Create and no declared list shape (#1812 measured it beside the OAuth clients).
|
|
1187
|
+
...(base.views ?? []),
|
|
608
1188
|
[opsVariantResolver(Op.READ, 'admin'), notAddressable()],
|
|
609
|
-
|
|
1189
|
+
// The registry TABLE and the action icons the main lane declares. This lane REPLACES the main entry in an
|
|
1190
|
+
// application that composes both scopes, so without them the list rendered as stacked cards and every
|
|
1191
|
+
// row action showed the missing-icon placeholder.
|
|
1192
|
+
[opsVariantResolver(Op.LIST, 'admin'), notAddressable({ collectionDisplayConfig: REGISTRY_TABLE })],
|
|
610
1193
|
[opsVariantResolver(Op.SEARCH, 'admin'), notAddressable()],
|
|
611
1194
|
[opsVariantResolver(Op.CREATE, 'admin'), notAddressable()],
|
|
612
1195
|
[opsVariantResolver(Op.DELETE, 'admin'), notAddressable()],
|
|
613
|
-
[opsVariantResolver(OrgApiKeys_Operations.ROTATE, 'admin'), notAddressable()],
|
|
614
|
-
[opsVariantResolver(OrgApiKeys_Operations.REGENERATE, 'admin'), notAddressable()],
|
|
615
|
-
[opsVariantResolver(OrgApiKeys_Operations.DEACTIVATE, 'admin'), notAddressable()],
|
|
616
|
-
[opsVariantResolver(OrgApiKeys_Operations.REACTIVATE, 'admin'), notAddressable()],
|
|
617
|
-
[opsVariantResolver(OrgApiKeys_Operations.EXTEND_EXPIRY, 'admin'), notAddressable()],
|
|
618
|
-
[opsVariantResolver(OrgApiKeys_Operations.USAGE_STATS, 'admin'), notAddressable()],
|
|
1196
|
+
[opsVariantResolver(OrgApiKeys_Operations.ROTATE, 'admin'), notAddressable({ iconOverride: RotateCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1197
|
+
[opsVariantResolver(OrgApiKeys_Operations.REGENERATE, 'admin'), notAddressable({ iconOverride: RefreshCw, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1198
|
+
[opsVariantResolver(OrgApiKeys_Operations.DEACTIVATE, 'admin'), notAddressable({ iconOverride: PowerOff, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1199
|
+
[opsVariantResolver(OrgApiKeys_Operations.REACTIVATE, 'admin'), notAddressable({ iconOverride: Power, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1200
|
+
[opsVariantResolver(OrgApiKeys_Operations.EXTEND_EXPIRY, 'admin'), notAddressable({ iconOverride: CalendarPlus, ...ROW_VERB_ON_RESOURCE_WITHOUT_UPDATE })],
|
|
1201
|
+
[opsVariantResolver(OrgApiKeys_Operations.USAGE_STATS, 'admin'), notAddressable({ iconOverride: ChartColumn })],
|
|
619
1202
|
],
|
|
620
1203
|
})),
|
|
621
1204
|
};
|
|
@@ -624,5 +1207,8 @@ export const securityMainPresets = buildSecurityMainPresets();
|
|
|
624
1207
|
export const securityAdminPresets = buildSecurityAdminPresets(securityMainPresets);
|
|
625
1208
|
export const orgApiKeysMainResourceUIBehavior = securityMainPresets[R.ORG_API_KEYS];
|
|
626
1209
|
export const orgApiKeysAdminResourceUIBehavior = securityAdminPresets[R.ORG_API_KEYS];
|
|
1210
|
+
export const orgOAuthClientsMainResourceUIBehavior = securityMainPresets[R.OAUTH_CLIENTS_ORGANIZATION];
|
|
1211
|
+
export const orgOAuthClientsAdminResourceUIBehavior = securityAdminPresets[R.OAUTH_CLIENTS_ORGANIZATION];
|
|
627
1212
|
export const auditLogsMainResourceUIBehavior = securityMainPresets[R.AUDIT_LOGS];
|
|
1213
|
+
export const applicationAuditLogsAdminResourceUIBehavior = securityAdminPresets[R.APPLICATION_AUDIT_LOGS];
|
|
628
1214
|
//# sourceMappingURL=security.resource-presets.js.map
|