@mastra/playground-ui 63.0.0-alpha.2 → 63.0.0-alpha.4
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/README.md +98 -0
- package/dist/{Avatar-D6ybWljK.cjs → Avatar-0u68PVfu.cjs} +34 -42
- package/dist/Avatar-0u68PVfu.cjs.map +1 -0
- package/dist/{Avatar-C2Sz53u5.js → Avatar-BwkyFiED.js} +20 -28
- package/dist/Avatar-BwkyFiED.js.map +1 -0
- package/dist/{Button-C8QDEN9j.js → Button-60jVnaHt.js} +10 -4
- package/dist/Button-60jVnaHt.js.map +1 -0
- package/dist/{Button-BfZzgZrA.cjs → Button-CAVPKK09.cjs} +10 -4
- package/dist/Button-CAVPKK09.cjs.map +1 -0
- package/dist/{ErrorBoundary-3wDeQWo0.js → ErrorBoundary-BqNfJHRT.js} +2 -2
- package/dist/{ErrorBoundary-3wDeQWo0.js.map → ErrorBoundary-BqNfJHRT.js.map} +1 -1
- package/dist/{ErrorBoundary-BLsO6xv6.cjs → ErrorBoundary-SRNDrd4h.cjs} +2 -2
- package/dist/{ErrorBoundary-BLsO6xv6.cjs.map → ErrorBoundary-SRNDrd4h.cjs.map} +1 -1
- package/dist/{alert-dialog-j626w-Qb.cjs → alert-dialog-C-ODvRWT.cjs} +3 -3
- package/dist/{alert-dialog-j626w-Qb.cjs.map → alert-dialog-C-ODvRWT.cjs.map} +1 -1
- package/dist/{alert-dialog-R9z2SJLl.js → alert-dialog-DVAC9zdj.js} +3 -3
- package/dist/{alert-dialog-R9z2SJLl.js.map → alert-dialog-DVAC9zdj.js.map} +1 -1
- package/dist/{ask-user-card-40a18Qea.cjs → ask-user-card-BMiCYmFY.cjs} +2 -2
- package/dist/{ask-user-card-40a18Qea.cjs.map → ask-user-card-BMiCYmFY.cjs.map} +1 -1
- package/dist/{ask-user-card-xR8YiiQa.js → ask-user-card-CmfZg1wt.js} +2 -2
- package/dist/{ask-user-card-xR8YiiQa.js.map → ask-user-card-CmfZg1wt.js.map} +1 -1
- package/dist/avatar-size-CNR0U-LW.js +27 -0
- package/dist/avatar-size-CNR0U-LW.js.map +1 -0
- package/dist/avatar-size-DxStOo5A.cjs +32 -0
- package/dist/avatar-size-DxStOo5A.cjs.map +1 -0
- package/dist/{code-block-DQJ3NHRf.cjs → code-block-BuGosknt.cjs} +4 -4
- package/dist/{code-block-DQJ3NHRf.cjs.map → code-block-BuGosknt.cjs.map} +1 -1
- package/dist/{code-block-BQZUoOfS.js → code-block-vvYFcnqm.js} +4 -4
- package/dist/{code-block-BQZUoOfS.js.map → code-block-vvYFcnqm.js.map} +1 -1
- package/dist/{code-editor-D69saH4C.js → code-editor-B_v1EfzX.js} +2 -2
- package/dist/{code-editor-D69saH4C.js.map → code-editor-B_v1EfzX.js.map} +1 -1
- package/dist/{code-editor-Dg6Y6Q8z.cjs → code-editor-CH8c-KF1.cjs} +2 -2
- package/dist/{code-editor-Dg6Y6Q8z.cjs.map → code-editor-CH8c-KF1.cjs.map} +1 -1
- package/dist/{collapsible-box-B7YQWv7L.js → collapsible-box-CMmJEn3f.js} +2 -2
- package/dist/{collapsible-box-B7YQWv7L.js.map → collapsible-box-CMmJEn3f.js.map} +1 -1
- package/dist/{collapsible-box-Bu2jHdsK.cjs → collapsible-box-oUO65pxW.cjs} +2 -2
- package/dist/{collapsible-box-Bu2jHdsK.cjs.map → collapsible-box-oUO65pxW.cjs.map} +1 -1
- package/dist/{combobox-D9CFzzx8.cjs → combobox-fEMKH9nJ.cjs} +3 -3
- package/dist/{combobox-D9CFzzx8.cjs.map → combobox-fEMKH9nJ.cjs.map} +1 -1
- package/dist/{combobox-DDUIREaG.js → combobox-so2V71F7.js} +3 -3
- package/dist/{combobox-DDUIREaG.js.map → combobox-so2V71F7.js.map} +1 -1
- package/dist/{combobox-styles-BGCZADLP.cjs → combobox-styles-BJPT0TpQ.cjs} +2 -2
- package/dist/{combobox-styles-BGCZADLP.cjs.map → combobox-styles-BJPT0TpQ.cjs.map} +1 -1
- package/dist/{combobox-styles-wLpeTjOR.js → combobox-styles-BQnNIOpr.js} +2 -2
- package/dist/{combobox-styles-wLpeTjOR.js.map → combobox-styles-BQnNIOpr.js.map} +1 -1
- package/dist/{command-DbZ6CSAy.cjs → command-B_C36ppQ.cjs} +2 -2
- package/dist/{command-DbZ6CSAy.cjs.map → command-B_C36ppQ.cjs.map} +1 -1
- package/dist/{command-DtIlcv-t.js → command-DMqzDhzs.js} +2 -2
- package/dist/{command-DtIlcv-t.js.map → command-DMqzDhzs.js.map} +1 -1
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Avatar.cjs.js +1 -1
- package/dist/components/Avatar.es.js +1 -1
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/CollapsibleBox.cjs.js +1 -1
- package/dist/components/CollapsibleBox.es.js +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +1 -1
- package/dist/components/CommandPalette.es.js +1 -1
- package/dist/components/Comment.cjs.js +2 -2
- package/dist/components/Comment.es.js +2 -2
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +2 -2
- package/dist/components/DataDetailsPanel.es.js +2 -2
- package/dist/components/DataList.cjs.js +15 -17
- package/dist/components/DataList.cjs.js.map +1 -1
- package/dist/components/DataList.es.js +4 -5
- package/dist/components/DataList.es.js.map +1 -1
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +2 -2
- package/dist/components/DateTimePicker.es.js +2 -2
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +2 -2
- package/dist/components/Dialog.es.js +2 -2
- package/dist/components/DisabledFeatureButton.cjs.js +1 -1
- package/dist/components/DisabledFeatureButton.es.js +1 -1
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +3 -3
- package/dist/components/EnvironmentVariablesEditor.es.js +3 -3
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.es.js +1 -1
- package/dist/components/FilterBar.cjs.js +3 -3
- package/dist/components/FilterBar.es.js +4 -4
- package/dist/components/FormFieldBlocks.cjs.js +2 -2
- package/dist/components/FormFieldBlocks.es.js +2 -2
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +2 -2
- package/dist/components/InputNumber.es.js +2 -2
- package/dist/components/JSONSchemaForm.cjs.js +2 -2
- package/dist/components/JSONSchemaForm.es.js +2 -2
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +5 -2
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +5 -2
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/Message.cjs.js +1 -1
- package/dist/components/Message.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/PageHeader.cjs.js +1 -1
- package/dist/components/PageHeader.es.js +1 -1
- package/dist/components/PageLayout.cjs.js +1 -1
- package/dist/components/PageLayout.cjs.js.map +1 -1
- package/dist/components/PageLayout.es.js +1 -1
- package/dist/components/PageLayout.es.js.map +1 -1
- package/dist/components/Pagination.cjs.js +17 -0
- package/dist/components/Pagination.cjs.js.map +1 -0
- package/dist/components/Pagination.d.ts +2 -0
- package/dist/components/Pagination.es.js +2 -0
- package/dist/components/Pagination.es.js.map +1 -0
- package/dist/components/PrevNextNav.cjs.js +1 -1
- package/dist/components/PrevNextNav.es.js +1 -1
- package/dist/components/ProductAvatar.cjs.js +19 -2
- package/dist/components/ProductAvatar.cjs.js.map +1 -1
- package/dist/components/ProductAvatar.es.js +19 -2
- package/dist/components/ProductAvatar.es.js.map +1 -1
- package/dist/components/PropertyFilter.cjs.js +3 -3
- package/dist/components/PropertyFilter.es.js +4 -4
- package/dist/components/RuleBuilder.cjs.js +2 -2
- package/dist/components/RuleBuilder.es.js +2 -2
- package/dist/components/SavedViews.cjs.js +2 -2
- package/dist/components/SavedViews.es.js +2 -2
- package/dist/components/SearchInput.cjs.js +1 -1
- package/dist/components/SearchInput.es.js +1 -1
- package/dist/components/Select.cjs.js +1 -1
- package/dist/components/Select.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +3 -3
- package/dist/components/Sidebar.es.js +3 -3
- package/dist/components/Table.cjs.js +286 -47
- package/dist/components/Table.cjs.js.map +1 -1
- package/dist/components/Table.es.js +284 -49
- package/dist/components/Table.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +1 -1
- package/dist/components/Tabs.es.js +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Workflow.cjs.js +6 -6
- package/dist/components/Workflow.es.js +6 -6
- package/dist/components/ai/activity.cjs.js +1 -1
- package/dist/components/ai/activity.es.js +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +3 -3
- package/dist/components/ai/tool-call.es.js +3 -3
- package/dist/{copy-button-CUVxXN4H.cjs → copy-button-5tVWqoTk.cjs} +2 -2
- package/dist/{copy-button-CUVxXN4H.cjs.map → copy-button-5tVWqoTk.cjs.map} +1 -1
- package/dist/{copy-button-CDyuUYUr.js → copy-button-Af_Qt7G1.js} +2 -2
- package/dist/{copy-button-CDyuUYUr.js.map → copy-button-Af_Qt7G1.js.map} +1 -1
- package/dist/{data-code-section-B2Ea7FwM.cjs → data-code-section-Bs8sHDux.cjs} +5 -5
- package/dist/{data-code-section-B2Ea7FwM.cjs.map → data-code-section-Bs8sHDux.cjs.map} +1 -1
- package/dist/{data-code-section-DrJYy1dR.js → data-code-section-CqdjmClK.js} +5 -5
- package/dist/{data-code-section-DrJYy1dR.js.map → data-code-section-CqdjmClK.js.map} +1 -1
- package/dist/{data-list-top-BJCC62oy.js → data-list-B2ArWwsJ.js} +332 -5
- package/dist/data-list-B2ArWwsJ.js.map +1 -0
- package/dist/{data-list-top-Ds-NWyPO.cjs → data-list-BLfHObw8.cjs} +339 -13
- package/dist/data-list-BLfHObw8.cjs.map +1 -0
- package/dist/{data-list-skeleton-CfVsXhx1.cjs → data-list-skeleton-BGJD4qMF.cjs} +6 -6
- package/dist/{data-list-skeleton-CfVsXhx1.cjs.map → data-list-skeleton-BGJD4qMF.cjs.map} +1 -1
- package/dist/{data-list-skeleton-BmsDYJrA.js → data-list-skeleton-BNsWWamC.js} +2 -2
- package/dist/{data-list-skeleton-BmsDYJrA.js.map → data-list-skeleton-BNsWWamC.js.map} +1 -1
- package/dist/{data-panel-COU5dbUJ.js → data-panel-BdCw3F_h.js} +46 -23
- package/dist/data-panel-BdCw3F_h.js.map +1 -0
- package/dist/{data-panel-CTqb-0qN.cjs → data-panel-Wjgbl6zx.cjs} +45 -22
- package/dist/data-panel-Wjgbl6zx.cjs.map +1 -0
- package/dist/{date-time-range-picker-BvRPfy1i.cjs → date-time-range-picker-ByNvjYuV.cjs} +3 -3
- package/dist/{date-time-range-picker-BvRPfy1i.cjs.map → date-time-range-picker-ByNvjYuV.cjs.map} +1 -1
- package/dist/{date-time-range-picker-CIfaXUuy.js → date-time-range-picker-SU1Q1h1h.js} +3 -3
- package/dist/{date-time-range-picker-CIfaXUuy.js.map → date-time-range-picker-SU1Q1h1h.js.map} +1 -1
- package/dist/{dialog-DQI9ChYf.cjs → dialog-B5nLi0ER.cjs} +3 -3
- package/dist/{dialog-DQI9ChYf.cjs.map → dialog-B5nLi0ER.cjs.map} +1 -1
- package/dist/{dialog-DlZmNahd.js → dialog-Jz2ZfO-z.js} +3 -3
- package/dist/{dialog-DlZmNahd.js.map → dialog-Jz2ZfO-z.js.map} +1 -1
- package/dist/{dialog-action-c4nfPomF.js → dialog-action-BxXhAz-P.js} +3 -3
- package/dist/{dialog-action-c4nfPomF.js.map → dialog-action-BxXhAz-P.js.map} +1 -1
- package/dist/{dialog-action-gdo9CwUv.cjs → dialog-action-DdkbsKfP.cjs} +3 -3
- package/dist/{dialog-action-gdo9CwUv.cjs.map → dialog-action-DdkbsKfP.cjs.map} +1 -1
- package/dist/domains/auth/components/session-expired.cjs.js +1 -1
- package/dist/domains/auth/components/session-expired.es.js +1 -1
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
- package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/messages/assistant-message-actions.cjs.js +2 -2
- package/dist/domains/chat/messages/assistant-message-actions.es.js +2 -2
- package/dist/domains/chat/messages/dataset-save-action.cjs.js +6 -5
- package/dist/domains/chat/messages/dataset-save-action.cjs.js.map +1 -1
- package/dist/domains/chat/messages/dataset-save-action.es.js +6 -5
- package/dist/domains/chat/messages/dataset-save-action.es.js.map +1 -1
- package/dist/domains/chat/messages/message-row.cjs.js +3 -3
- package/dist/domains/chat/messages/message-row.es.js +3 -3
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/reasoning-part-renderer.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +1 -1
- package/dist/domains/chat/messages/skill-message.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge-wrapper.es.js +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.cjs.js +4 -4
- package/dist/domains/chat/tools/badges/agent-badge.es.js +4 -4
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/background-task-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/tools/badges/code-mode-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/file-tree-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-details.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-details.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/sandbox-execution-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-badge.cjs.js +3 -3
- package/dist/domains/chat/tools/badges/tool-badge.es.js +3 -3
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js +5 -4
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +5 -4
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- package/dist/domains/chat/tools/submit-plan-tool.cjs.js +2 -2
- package/dist/domains/chat/tools/submit-plan-tool.es.js +2 -2
- package/dist/domains/chat/tools/tool-card.cjs.js +1 -1
- package/dist/domains/chat/tools/tool-card.es.js +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js +11 -6
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.cjs.js.map +1 -1
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js +11 -6
- package/dist/domains/datasets/components/save-as-dataset-item-dialog.es.js.map +1 -1
- package/dist/domains/logs/components/log-data-panel.cjs.js +3 -3
- package/dist/domains/logs/components/log-data-panel.es.js +3 -3
- package/dist/domains/logs/components/logs-list-view.cjs.js +3 -2
- package/dist/domains/logs/components/logs-list-view.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +3 -2
- package/dist/domains/logs/components/logs-list-view.es.js.map +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.cjs.js +1 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
- package/dist/domains/metrics/components/chart-area.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-area.es.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card-error.es.js +1 -1
- package/dist/domains/metrics/components/chart-card.cjs.js +1 -1
- package/dist/domains/metrics/components/chart-card.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js +1 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js +1 -1
- package/dist/domains/metrics/components/latency-card.cjs.js +1 -1
- package/dist/domains/metrics/components/latency-card.es.js +1 -1
- package/dist/domains/metrics/components/scores-card.cjs.js +1 -1
- package/dist/domains/metrics/components/scores-card.es.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js +1 -1
- package/dist/domains/metrics/components/token-usage-card.es.js +1 -1
- package/dist/domains/metrics/components/trace-volume-card.cjs.js +1 -1
- package/dist/domains/metrics/components/trace-volume-card.es.js +1 -1
- package/dist/domains/metrics/components/usage-card.cjs.js +1 -1
- package/dist/domains/metrics/components/usage-card.es.js +1 -1
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js +5 -4
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.cjs.js.map +1 -1
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js +5 -4
- package/dist/domains/observability/components/add-trace-mocks-to-item-dialog.es.js.map +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +2 -2
- package/dist/domains/scores/components/score-data-panel.es.js +2 -2
- package/dist/domains/scores/components/span-scoring.cjs.js +3 -3
- package/dist/domains/scores/components/span-scoring.es.js +3 -3
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +2 -1
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +2 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.cjs.js +4 -4
- package/dist/domains/traces/components/feedback-thread.es.js +4 -4
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +3 -3
- package/dist/domains/traces/components/span-data-panel-view.es.js +3 -3
- package/dist/domains/traces/components/span-details-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +2 -2
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js +1 -2
- package/dist/domains/traces/components/thread-view-by-trace.cjs.js.map +1 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js +1 -2
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +4 -4
- package/dist/domains/traces/components/trace-data-panel-view.es.js +4 -4
- package/dist/domains/traces/components/trace-data-panel.cjs.js +4 -3
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +4 -3
- package/dist/domains/traces/components/trace-data-panel.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-span-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-item-view.es.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.cjs.js +1 -1
- package/dist/domains/traces/components/trace-thread-panel.es.js +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
- package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
- package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +4 -5
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +3 -4
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +4 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +4 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-combobox.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-combobox.es.js +1 -1
- package/dist/domains/workflows/components/workflow-information.cjs.js +1 -1
- package/dist/domains/workflows/components/workflow-information.es.js +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +3 -3
- package/dist/domains/workflows/components/workflow-step-detail.es.js +3 -3
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.cjs.js +1 -1
- package/dist/domains/workflows/components/workflows-list/no-workflows-info.es.js +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +2 -2
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +2 -2
- package/dist/domains/workflows/runs/workflow-run-list.es.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-button.es.js +1 -1
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.cjs.js +2 -2
- package/dist/domains/workflows/workflow/data/workflow-data-inspector.es.js +2 -2
- package/dist/domains/workflows/workflow/input/workflow-json-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-json-input.es.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.cjs.js +1 -1
- package/dist/domains/workflows/workflow/input/workflow-processor-input.es.js +1 -1
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.cjs.js +2 -2
- package/dist/domains/workflows/workflow/use-workflow-graph-runtime.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-body-graph.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-body-graph.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-cancel-button.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-data-edge.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-debug-step-controls.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-graph-boundary.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-boundary.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-graph-inner.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-inner.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-node.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-graph-node.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-map-config-dialog.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-run-header.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-run-header.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-status.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-step-action-bar.cjs.js +3 -3
- package/dist/domains/workflows/workflow/workflow-step-action-bar.es.js +3 -3
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline-row.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline-row.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-form.es.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.cjs.js +1 -1
- package/dist/domains/workflows/workflow/workflow-trigger-header.es.js +1 -1
- package/dist/domains/workspace/components/workspace-active-file.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-active-file.es.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +5 -5
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +5 -5
- package/dist/domains/workspace/components/workspace-add-skill.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-create-directory.es.js +2 -2
- package/dist/domains/workspace/components/workspace-markdown-preview.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-markdown-preview.es.js +2 -2
- package/dist/domains/workspace/components/workspace-search.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-search.es.js +1 -1
- package/dist/domains/workspace/components/workspace-tree.cjs.js +2 -2
- package/dist/domains/workspace/components/workspace-tree.es.js +2 -2
- package/dist/{drawer-CeUYCG-S.cjs → drawer-C6PBqg__.cjs} +2 -2
- package/dist/{drawer-CeUYCG-S.cjs.map → drawer-C6PBqg__.cjs.map} +1 -1
- package/dist/{drawer-CZlqOjd2.js → drawer-CwVDeB8H.js} +2 -2
- package/dist/{drawer-CZlqOjd2.js.map → drawer-CwVDeB8H.js.map} +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +4 -6
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +6 -8
- package/dist/ee/signals/components/entity-index-compact-grid.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +33 -32
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +35 -34
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-model.cjs.js +7 -0
- package/dist/ee/signals/components/entity-index-model.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-model.es.js +7 -1
- package/dist/ee/signals/components/entity-index-model.es.js.map +1 -1
- package/dist/ee/signals/components/entity-index-status.cjs.js +26 -0
- package/dist/ee/signals/components/entity-index-status.cjs.js.map +1 -0
- package/dist/ee/signals/components/entity-index-status.d.ts +2 -0
- package/dist/ee/signals/components/entity-index-status.es.js +22 -0
- package/dist/ee/signals/components/entity-index-status.es.js.map +1 -0
- package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +15 -13
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +15 -13
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/signals/examples-pager.cjs.js +1 -1
- package/dist/ee/signals/examples-pager.es.js +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +2 -2
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +2 -2
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
- package/dist/ee/signals/signals-error-state.cjs.js +1 -1
- package/dist/ee/signals/signals-error-state.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
- package/dist/{filter-bar-chip-C_371aon.cjs → filter-bar-chip-BBErw_aR.cjs} +3 -3
- package/dist/{filter-bar-chip-C_371aon.cjs.map → filter-bar-chip-BBErw_aR.cjs.map} +1 -1
- package/dist/{filter-bar-chip-Dc6phYqZ.js → filter-bar-chip-DvRTWRwT.js} +3 -3
- package/dist/{filter-bar-chip-Dc6phYqZ.js.map → filter-bar-chip-DvRTWRwT.js.map} +1 -1
- package/dist/{input-group-BWsGYnES.js → input-group-CIIwoggO.js} +2 -2
- package/dist/{input-group-BWsGYnES.js.map → input-group-CIIwoggO.js.map} +1 -1
- package/dist/{input-group-Cy7k5JRg.cjs → input-group-DQuyC9Pz.cjs} +2 -2
- package/dist/{input-group-Cy7k5JRg.cjs.map → input-group-DQuyC9Pz.cjs.map} +1 -1
- package/dist/layout/tabbed-container.cjs.js +4 -4
- package/dist/layout/tabbed-container.es.js +4 -4
- package/dist/lib/form/components/array-element-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +1 -1
- package/dist/lib/form/components/array-wrapper.cjs.js +1 -1
- package/dist/lib/form/components/array-wrapper.es.js +1 -1
- package/dist/lib/form/components/date-field.cjs.js +1 -1
- package/dist/lib/form/components/date-field.es.js +1 -1
- package/dist/lib/form/components/form-submit-row.cjs.js +1 -1
- package/dist/lib/form/components/form-submit-row.es.js +1 -1
- package/dist/lib/form/components/record-field.cjs.js +1 -1
- package/dist/lib/form/components/record-field.es.js +1 -1
- package/dist/lib/form/components/select-field.cjs.js +1 -1
- package/dist/lib/form/components/select-field.es.js +1 -1
- package/dist/lib/form/components/submit-button.cjs.js +1 -1
- package/dist/lib/form/components/submit-button.es.js +1 -1
- package/dist/{list-search-xHadeMHl.cjs → list-search-C5j3HYkb.cjs} +2 -2
- package/dist/{list-search-xHadeMHl.cjs.map → list-search-C5j3HYkb.cjs.map} +1 -1
- package/dist/{list-search-BNnMwbpv.js → list-search-Cwp-OPvC.js} +2 -2
- package/dist/{list-search-BNnMwbpv.js.map → list-search-Cwp-OPvC.js.map} +1 -1
- package/dist/{logs-data-list-C262Be3o.js → logs-data-list-B-gmgU74.js} +2 -3
- package/dist/{logs-data-list-C262Be3o.js.map → logs-data-list-B-gmgU74.js.map} +1 -1
- package/dist/{logs-data-list-DfuVMd6f.cjs → logs-data-list-CaXnNnC5.cjs} +21 -22
- package/dist/{logs-data-list-DfuVMd6f.cjs.map → logs-data-list-CaXnNnC5.cjs.map} +1 -1
- package/dist/{markdown-renderer-DaXAim8y.cjs → markdown-renderer-BXTNiZbz.cjs} +3 -3
- package/dist/{markdown-renderer-DaXAim8y.cjs.map → markdown-renderer-BXTNiZbz.cjs.map} +1 -1
- package/dist/{markdown-renderer-D5Wjk1Cs.js → markdown-renderer-Ct-q_KTF.js} +3 -3
- package/dist/{markdown-renderer-D5Wjk1Cs.js.map → markdown-renderer-Ct-q_KTF.js.map} +1 -1
- package/dist/{message-copy-button-CREuo4t5.cjs → message-copy-button-Cni-zv0j.cjs} +2 -2
- package/dist/{message-copy-button-CREuo4t5.cjs.map → message-copy-button-Cni-zv0j.cjs.map} +1 -1
- package/dist/{message-copy-button-BlwQej7y.js → message-copy-button-DDgqbtbv.js} +2 -2
- package/dist/{message-copy-button-BlwQej7y.js.map → message-copy-button-DDgqbtbv.js.map} +1 -1
- package/dist/{metrics-card-oEbbYDo7.js → metrics-card-C33VsuXf.js} +2 -2
- package/dist/{metrics-card-oEbbYDo7.js.map → metrics-card-C33VsuXf.js.map} +1 -1
- package/dist/{metrics-card-Bv2A5G41.cjs → metrics-card-CxOVpP1t.cjs} +2 -2
- package/dist/{metrics-card-Bv2A5G41.cjs.map → metrics-card-CxOVpP1t.cjs.map} +1 -1
- package/dist/new/layout/app-shell.cjs.js +9 -4
- package/dist/new/layout/app-shell.cjs.js.map +1 -1
- package/dist/new/layout/app-shell.es.js +10 -5
- package/dist/new/layout/app-shell.es.js.map +1 -1
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/{page-header-CLxPq7T5.cjs → page-header-9Q9vOrh-.cjs} +3 -9
- package/dist/page-header-9Q9vOrh-.cjs.map +1 -0
- package/dist/{page-header-Bf0zLkyY.js → page-header-d2cK2zOg.js} +3 -9
- package/dist/page-header-d2cK2zOg.js.map +1 -0
- package/dist/pagination-range-BlUsZjqD.js +191 -0
- package/dist/pagination-range-BlUsZjqD.js.map +1 -0
- package/dist/pagination-range-C0i6gunh.cjs +200 -0
- package/dist/pagination-range-C0i6gunh.cjs.map +1 -0
- package/dist/{plan-CdtX72kw.cjs → plan-CL-lbDuy.cjs} +4 -4
- package/dist/{plan-CdtX72kw.cjs.map → plan-CL-lbDuy.cjs.map} +1 -1
- package/dist/{plan-Cl3-JgbI.js → plan-TXWANP1R.js} +4 -4
- package/dist/{plan-Cl3-JgbI.js.map → plan-TXWANP1R.js.map} +1 -1
- package/dist/primitives/menu-item.cjs.js +1 -1
- package/dist/primitives/menu-item.es.js +1 -1
- package/dist/primitives/raised-surface.cjs.js +2 -0
- package/dist/primitives/raised-surface.cjs.js.map +1 -1
- package/dist/primitives/raised-surface.es.js +2 -1
- package/dist/primitives/raised-surface.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-BeLCh3zo.cjs → property-filter-applied-BBvaTC4B.cjs} +2 -2
- package/dist/{property-filter-applied-BeLCh3zo.cjs.map → property-filter-applied-BBvaTC4B.cjs.map} +1 -1
- package/dist/{property-filter-applied-CZLzY0OH.js → property-filter-applied-Ru3OQoGo.js} +2 -2
- package/dist/{property-filter-applied-CZLzY0OH.js.map → property-filter-applied-Ru3OQoGo.js.map} +1 -1
- package/dist/{reasoning-activity-DehWtcyc.cjs → reasoning-activity-CFEaSv4J.cjs} +2 -2
- package/dist/{reasoning-activity-DehWtcyc.cjs.map → reasoning-activity-CFEaSv4J.cjs.map} +1 -1
- package/dist/{reasoning-activity-CIuVSAGA.js → reasoning-activity-CHlEe011.js} +2 -2
- package/dist/{reasoning-activity-CIuVSAGA.js.map → reasoning-activity-CHlEe011.js.map} +1 -1
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/{search-input-UtTJMjJu.cjs → search-input-2DhcUIvn.cjs} +2 -2
- package/dist/{search-input-UtTJMjJu.cjs.map → search-input-2DhcUIvn.cjs.map} +1 -1
- package/dist/{search-input-fqSrRTLU.js → search-input-RybUdqzg.js} +2 -2
- package/dist/{search-input-fqSrRTLU.js.map → search-input-RybUdqzg.js.map} +1 -1
- package/dist/{select-N2lgBRsg.js → select-BvYdi3X0.js} +2 -2
- package/dist/{select-N2lgBRsg.js.map → select-BvYdi3X0.js.map} +1 -1
- package/dist/{select-Cdz5I0A5.cjs → select-D5cu0K7R.cjs} +2 -2
- package/dist/{select-Cdz5I0A5.cjs.map → select-D5cu0K7R.cjs.map} +1 -1
- package/dist/{side-dialog-DldgOJIk.cjs → side-dialog-CUQGSSLs.cjs} +4 -4
- package/dist/{side-dialog-DldgOJIk.cjs.map → side-dialog-CUQGSSLs.cjs.map} +1 -1
- package/dist/{side-dialog-CWQL33WR.js → side-dialog-DSxU1To7.js} +4 -4
- package/dist/{side-dialog-CWQL33WR.js.map → side-dialog-DSxU1To7.js.map} +1 -1
- package/dist/{span-payload-primitives-sEGOgFlX.cjs → span-payload-primitives-DIxmotnO.cjs} +2 -2
- package/dist/{span-payload-primitives-sEGOgFlX.cjs.map → span-payload-primitives-DIxmotnO.cjs.map} +1 -1
- package/dist/{span-payload-primitives-WqYTBiGx.js → span-payload-primitives-dTs5UrjA.js} +2 -2
- package/dist/{span-payload-primitives-WqYTBiGx.js.map → span-payload-primitives-dTs5UrjA.js.map} +1 -1
- package/dist/src/ds/components/Avatar/avatar-group.d.ts +1 -1
- package/dist/src/ds/components/DataPanel/data-panel-context.d.ts +3 -0
- package/dist/src/ds/components/DataPanel/data-panel-root.d.ts +28 -9
- package/dist/src/ds/components/DataPanel/index.d.ts +1 -1
- package/dist/src/ds/components/Pagination/index.d.ts +2 -0
- package/dist/src/ds/components/Pagination/pagination-context.d.ts +10 -0
- package/dist/src/ds/components/Pagination/pagination-range.d.ts +8 -0
- package/dist/src/ds/components/Pagination/pagination.d.ts +23 -0
- package/dist/src/ds/components/ProductAvatar/ProductAvatar.d.ts +3 -1
- package/dist/src/ds/components/ProductAvatar/product-avatar-size.d.ts +3 -0
- package/dist/src/ds/components/Table/Cells.d.ts +6 -2
- package/dist/src/ds/components/Table/Table.d.ts +30 -7
- package/dist/src/ds/components/Table/index.d.ts +10 -0
- package/dist/src/ds/components/Table/table-align.d.ts +7 -0
- package/dist/src/ds/components/Table/table-context.d.ts +4 -0
- package/dist/src/ds/components/Table/table-pagination.d.ts +7 -0
- package/dist/src/ds/components/Table/table-row-button.d.ts +3 -0
- package/dist/src/ds/components/Table/table-row-link.d.ts +3 -0
- package/dist/src/ds/components/Table/table-row-target.d.ts +2 -0
- package/dist/src/ds/components/Table/table-sort-button.d.ts +6 -0
- package/dist/src/ds/primitives/raised-surface.d.ts +5 -0
- package/dist/src/ee/signals/components/entity-index-model.d.ts +5 -0
- package/dist/src/ee/signals/components/entity-index-status.d.ts +4 -0
- package/dist/style.css +200 -24
- package/dist/{tabs-tab-D9ndsGQu.cjs → tabs-tab-CqcY4tHE.cjs} +2 -2
- package/dist/{tabs-tab-D9ndsGQu.cjs.map → tabs-tab-CqcY4tHE.cjs.map} +1 -1
- package/dist/{tabs-tab-BchiQf0E.js → tabs-tab-CzpXzpf-.js} +2 -2
- package/dist/{tabs-tab-BchiQf0E.js.map → tabs-tab-CzpXzpf-.js.map} +1 -1
- package/dist/{thread-list-D6tyuO1M.cjs → thread-list-D-VuTZnC.cjs} +2 -2
- package/dist/{thread-list-D6tyuO1M.cjs.map → thread-list-D-VuTZnC.cjs.map} +1 -1
- package/dist/{thread-list-2YHnS82L.js → thread-list-Duf5N74Z.js} +2 -2
- package/dist/{thread-list-2YHnS82L.js.map → thread-list-Duf5N74Z.js.map} +1 -1
- package/dist/{time-picker-J7GaNaEd.js → time-picker-CF6_miti.js} +2 -2
- package/dist/{time-picker-J7GaNaEd.js.map → time-picker-CF6_miti.js.map} +1 -1
- package/dist/{time-picker-D7hr3X0_.cjs → time-picker-DbDeIg8E.cjs} +2 -2
- package/dist/{time-picker-D7hr3X0_.cjs.map → time-picker-DbDeIg8E.cjs.map} +1 -1
- package/dist/{tool-approval-BpskZTWy.cjs → tool-approval-S6ml_xyU.cjs} +3 -3
- package/dist/{tool-approval-BpskZTWy.cjs.map → tool-approval-S6ml_xyU.cjs.map} +1 -1
- package/dist/{tool-approval-nsbG8-qI.js → tool-approval-TB8r2U_c.js} +3 -3
- package/dist/{tool-approval-nsbG8-qI.js.map → tool-approval-TB8r2U_c.js.map} +1 -1
- package/dist/{tool-call-arguments-RKyYP3xh.js → tool-call-arguments-CCkJ1btR.js} +3 -3
- package/dist/{tool-call-arguments-RKyYP3xh.js.map → tool-call-arguments-CCkJ1btR.js.map} +1 -1
- package/dist/{tool-call-arguments-Bj2MA4SW.cjs → tool-call-arguments-DyukJmhY.cjs} +3 -3
- package/dist/{tool-call-arguments-Bj2MA4SW.cjs.map → tool-call-arguments-DyukJmhY.cjs.map} +1 -1
- package/dist/{tool-call-mono-BAYC7OZl.js → tool-call-mono-CASKyxNt.js} +2 -2
- package/dist/{tool-call-mono-BAYC7OZl.js.map → tool-call-mono-CASKyxNt.js.map} +1 -1
- package/dist/{tool-call-mono-C42l0zrM.cjs → tool-call-mono-D8XffwXR.cjs} +2 -2
- package/dist/{tool-call-mono-C42l0zrM.cjs.map → tool-call-mono-D8XffwXR.cjs.map} +1 -1
- package/dist/{tool-call-output-CO6lqtGh.js → tool-call-output-qgqn19KC.js} +2 -2
- package/dist/{tool-call-output-CO6lqtGh.js.map → tool-call-output-qgqn19KC.js.map} +1 -1
- package/dist/{tool-call-output-BDua5O1z.cjs → tool-call-output-xx1drXqO.cjs} +2 -2
- package/dist/{tool-call-output-BDua5O1z.cjs.map → tool-call-output-xx1drXqO.cjs.map} +1 -1
- package/dist/{tool-card-BtPh44u6.js → tool-card-BftktBoV.js} +4 -4
- package/dist/{tool-card-BtPh44u6.js.map → tool-card-BftktBoV.js.map} +1 -1
- package/dist/{tool-card-C0pNVEva.cjs → tool-card-NFkMpChW.cjs} +4 -4
- package/dist/{tool-card-C0pNVEva.cjs.map → tool-card-NFkMpChW.cjs.map} +1 -1
- package/dist/{traces-data-list-_mFOMw0U.js → traces-data-list-1X6UBM6Y.js} +2 -4
- package/dist/{traces-data-list-_mFOMw0U.js.map → traces-data-list-1X6UBM6Y.js.map} +1 -1
- package/dist/{traces-data-list-Cf_PpmSN.cjs → traces-data-list-BXSXW3E6.cjs} +17 -19
- package/dist/{traces-data-list-Cf_PpmSN.cjs.map → traces-data-list-BXSXW3E6.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-CwDL7DzY.cjs → use-workflow-graph-runtime-C8TkqjvM.cjs} +3 -3
- package/dist/{use-workflow-graph-runtime-CwDL7DzY.cjs.map → use-workflow-graph-runtime-C8TkqjvM.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js → use-workflow-graph-runtime-DX56livO.js} +3 -3
- package/dist/{use-workflow-graph-runtime-CAyNWN_Z.js.map → use-workflow-graph-runtime-DX56livO.js.map} +1 -1
- package/dist/{workflow-code-dialog-content-CNDoMFAV.js → workflow-code-dialog-content-DG-Lmvgu.js} +3 -3
- package/dist/{workflow-code-dialog-content-CNDoMFAV.js.map → workflow-code-dialog-content-DG-Lmvgu.js.map} +1 -1
- package/dist/{workflow-code-dialog-content-B7YU2kfe.cjs → workflow-code-dialog-content-vC_ddCYp.cjs} +3 -3
- package/dist/{workflow-code-dialog-content-B7YU2kfe.cjs.map → workflow-code-dialog-content-vC_ddCYp.cjs.map} +1 -1
- package/dist/{workflow-condition-card-DnSlcZ2s.js → workflow-condition-card-DMkPh5TM.js} +3 -3
- package/dist/{workflow-condition-card-DnSlcZ2s.js.map → workflow-condition-card-DMkPh5TM.js.map} +1 -1
- package/dist/{workflow-condition-card-CbaDpVa_.cjs → workflow-condition-card-bn5mrwKe.cjs} +3 -3
- package/dist/{workflow-condition-card-CbaDpVa_.cjs.map → workflow-condition-card-bn5mrwKe.cjs.map} +1 -1
- package/dist/{workflow-data-edge-view-BaA6YJye.js → workflow-data-edge-view-De0xCrVu.js} +2 -2
- package/dist/{workflow-data-edge-view-BaA6YJye.js.map → workflow-data-edge-view-De0xCrVu.js.map} +1 -1
- package/dist/{workflow-data-edge-view-BHvpuvmp.cjs → workflow-data-edge-view-kmB6j-ui.cjs} +2 -2
- package/dist/{workflow-data-edge-view-BHvpuvmp.cjs.map → workflow-data-edge-view-kmB6j-ui.cjs.map} +1 -1
- package/dist/{workflow-debug-controls-h7Q-RlJ2.js → workflow-debug-controls-CJTqoarc.js} +2 -2
- package/dist/{workflow-debug-controls-h7Q-RlJ2.js.map → workflow-debug-controls-CJTqoarc.js.map} +1 -1
- package/dist/{workflow-debug-controls-D9rmMeH-.cjs → workflow-debug-controls-CqaM7s-K.cjs} +2 -2
- package/dist/{workflow-debug-controls-D9rmMeH-.cjs.map → workflow-debug-controls-CqaM7s-K.cjs.map} +1 -1
- package/dist/{workflow-edge-data-button-6EDXzRxr.js → workflow-edge-data-button-CXbj67U9.js} +4 -4
- package/dist/{workflow-edge-data-button-6EDXzRxr.js.map → workflow-edge-data-button-CXbj67U9.js.map} +1 -1
- package/dist/{workflow-edge-data-button-Cz2rcoDr.cjs → workflow-edge-data-button-av1zCMfP.cjs} +4 -4
- package/dist/{workflow-edge-data-button-Cz2rcoDr.cjs.map → workflow-edge-data-button-av1zCMfP.cjs.map} +1 -1
- package/dist/{workflow-step-action-DmUW2AMM.js → workflow-step-action-AG05Ly8P.js} +2 -2
- package/dist/{workflow-step-action-DmUW2AMM.js.map → workflow-step-action-AG05Ly8P.js.map} +1 -1
- package/dist/{workflow-step-action-Ssz6Z2t5.cjs → workflow-step-action-BsBZk7j6.cjs} +2 -2
- package/dist/{workflow-step-action-Ssz6Z2t5.cjs.map → workflow-step-action-BsBZk7j6.cjs.map} +1 -1
- package/package.json +11 -11
- package/dist/Avatar-C2Sz53u5.js.map +0 -1
- package/dist/Avatar-D6ybWljK.cjs.map +0 -1
- package/dist/Button-BfZzgZrA.cjs.map +0 -1
- package/dist/Button-C8QDEN9j.js.map +0 -1
- package/dist/data-list-DkVOwk8l.cjs +0 -142
- package/dist/data-list-DkVOwk8l.cjs.map +0 -1
- package/dist/data-list-Dv2lP-dU.js +0 -138
- package/dist/data-list-Dv2lP-dU.js.map +0 -1
- package/dist/data-list-spacer-DEMquKp9.js +0 -209
- package/dist/data-list-spacer-DEMquKp9.js.map +0 -1
- package/dist/data-list-spacer-pXP8xDlg.cjs +0 -218
- package/dist/data-list-spacer-pXP8xDlg.cjs.map +0 -1
- package/dist/data-list-top-BJCC62oy.js.map +0 -1
- package/dist/data-list-top-Ds-NWyPO.cjs.map +0 -1
- package/dist/data-panel-COU5dbUJ.js.map +0 -1
- package/dist/data-panel-CTqb-0qN.cjs.map +0 -1
- package/dist/page-header-Bf0zLkyY.js.map +0 -1
- package/dist/page-header-CLxPq7T5.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-user-card-xR8YiiQa.js","sources":["../src/ds/components/ai/ask-user/ask-user-context.ts","../src/ds/components/ai/ask-user/ask-user-layout.tsx","../src/ds/components/ai/ask-user/ask-user-controls.tsx","../src/ds/components/ai/ask-user/ask-user-root.tsx","../src/ds/components/ai/ask-user/ask-user-card.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { AskUserSelectionMode } from './ask-user-types';\n\ninterface AskUserContextValue {\n questionId: string;\n selectionMode: AskUserSelectionMode;\n disabled: boolean;\n answerText: string;\n selectedOptionLabels: string[];\n isCustomAnswerSelected: boolean;\n canSubmitAnswer: boolean;\n selectOption: (optionLabel: string) => void;\n setCustomAnswerSelected: (selected: boolean) => void;\n changeAnswerText: (text: string) => void;\n unselectEmptyCustomAnswer: () => void;\n submitAnswer: () => void;\n}\n\nexport const AskUserContext = createContext<AskUserContextValue | undefined>(undefined);\n\nexport function useOptionalAskUserContext() {\n return useContext(AskUserContext);\n}\n\nexport function useAskUserContext() {\n const context = useOptionalAskUserContext();\n if (!context) throw new Error('AskUser controls must be rendered inside AskUser.Root.');\n return context;\n}\n","import { Check, MessageCircleQuestion } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useOptionalAskUserContext } from './ask-user-context';\nimport type { AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { FieldItem, FieldLabel } from '@/ds/components/Field';\nimport type { FieldLabelProps } from '@/ds/components/Field';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot=\"ask-user\"\n className={cn(raisedSurfaceStyle, 'w-full overflow-hidden rounded-xl', className)}\n {...props}\n />\n);\n\nexport const AskUserLabel = ({ children = 'Question', className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-label\" className={cn('flex min-h-10 items-center gap-2 px-4 pt-3', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <MessageCircleQuestion />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n);\n\nexport const AskUserBody = ({ className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-body\" className={cn('p-4', className)} {...props} />\n);\n\nconst AskUserQuestionTitle = ({ children }: { children: ReactNode }) => (\n <span className=\"flex items-start gap-2\">\n <Icon size=\"xs\" className={cn('mt-1 shrink-0', 'text-muted-foreground')} aria-hidden>\n <MessageCircleQuestion />\n </Icon>\n <span className=\"min-w-0\">{children}</span>\n </span>\n);\n\nexport const AskUserQuestion = ({ children, className, ...props }: ComponentProps<typeof Txt>) => {\n const context = useOptionalAskUserContext();\n return (\n <Txt\n as=\"p\"\n variant=\"subheading\"\n tone=\"ink\"\n {...props}\n id={context?.questionId ?? props.id}\n className={cn('mb-3', className)}\n >\n <AskUserQuestionTitle>{children}</AskUserQuestionTitle>\n </Txt>\n );\n};\n\nexport interface AskUserOptionRowProps extends Omit<FieldLabelProps, 'children'> {\n control: ReactNode;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n}\n\nexport const AskUserOptionRow = ({\n control,\n label,\n description,\n disabled = false,\n className,\n ...props\n}: AskUserOptionRowProps) => (\n <FieldItem disabled={disabled} className=\"contents\">\n <FieldLabel\n // state-layer's wash only stops at :disabled/aria-disabled, and a <label> is neither\n aria-disabled={disabled || undefined}\n className={cn('state-layer flex items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50', className)}\n {...props}\n >\n {control}\n <span className=\"grid gap-0.5\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n {description ? (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {description}\n </Txt>\n ) : null}\n </span>\n </FieldLabel>\n </FieldItem>\n);\n\nexport type AskUserSubmitButtonProps = Omit<ComponentProps<typeof Button>, 'children'> & { children?: ReactNode };\n\nexport const AskUserSubmitButton = ({ children = 'Submit answer', ...props }: AskUserSubmitButtonProps) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', ...props }: ComponentProps<typeof Txt>) => (\n <Txt as=\"span\" role=\"status\" variant=\"caption\" tone=\"muted\" {...props}>\n {children}\n </Txt>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n data-slot=\"ask-user-output\"\n role={result.isError ? 'alert' : 'status'}\n className={cn('grid gap-2 rounded-lg bg-fill p-3', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'destructive' : 'success'} className=\"justify-self-start\">\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <Txt as=\"p\" variant=\"body\" tone=\"ink\" className={cn(result.isError && 'text-destructive-foreground')}>\n {result.content}\n </Txt>\n </div>\n);\n","import type { ChangeEvent, ComponentProps, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useAskUserContext, useOptionalAskUserContext } from './ask-user-context';\nimport { AskUserOptionRow, AskUserSubmitButton } from './ask-user-layout';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { FieldItem, FieldLabel, Fieldset } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { RadioGroup, RadioGroupItem } from '@/ds/components/RadioGroup';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\n// Keep the UI-only custom choice separate from suggested answer values.\nconst customAnswerValue = 'custom';\nconst optionValuePrefix = 'option:';\n\nfunction getOptionRadioValue(optionLabel: string): string {\n return `${optionValuePrefix}${optionLabel}`;\n}\n\nexport function AskUserOptions({ children, className, ...props }: ComponentProps<typeof Fieldset>) {\n const context = useAskUserContext();\n\n const handleSingleSelectChange = (radioValue: unknown) => {\n if (radioValue === customAnswerValue) {\n context.setCustomAnswerSelected(true);\n return;\n }\n if (typeof radioValue !== 'string' || !radioValue.startsWith(optionValuePrefix)) return;\n context.selectOption(radioValue.slice(optionValuePrefix.length));\n };\n\n if (context.selectionMode === 'multi_select') {\n return (\n <Fieldset aria-label=\"Answer options\" {...props} className={cn('gap-2', className)}>\n {children}\n </Fieldset>\n );\n }\n\n const selectedOptionLabel = context.selectedOptionLabels[0];\n const selectedOptionValue = selectedOptionLabel === undefined ? '' : getOptionRadioValue(selectedOptionLabel);\n const selectedRadioValue = context.isCustomAnswerSelected ? customAnswerValue : selectedOptionValue;\n\n return (\n <Fieldset\n {...props}\n className={cn('gap-2', className)}\n render={\n <RadioGroup\n aria-labelledby={context.questionId}\n disabled={context.disabled}\n value={selectedRadioValue}\n onValueChange={handleSingleSelectChange}\n />\n }\n >\n {children}\n </Fieldset>\n );\n}\n\nexport interface AskUserOptionItemProps {\n value: string;\n children: ReactNode;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function AskUserOptionItem({\n value,\n children,\n description,\n disabled = false,\n className,\n}: AskUserOptionItemProps) {\n const context = useAskUserContext();\n const isDisabled = context.disabled || disabled;\n\n const handleOptionToggle = () => {\n if (!isDisabled) context.selectOption(value);\n };\n\n return (\n <AskUserOptionRow\n label={children}\n description={description}\n disabled={isDisabled}\n className={className}\n control={\n context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n disabled={isDisabled}\n checked={context.selectedOptionLabels.includes(value)}\n onCheckedChange={handleOptionToggle}\n />\n ) : (\n <RadioGroupItem className=\"mt-0.5\" disabled={isDisabled} value={getOptionRadioValue(value)} />\n )\n }\n />\n );\n}\n\nexport type AskUserTextAnswerProps = Omit<\n ComponentProps<typeof Input>,\n 'value' | 'defaultValue' | 'onChange' | 'onKeyDown'\n>;\n\nexport function AskUserTextAnswer({ disabled = false, ...props }: AskUserTextAnswerProps) {\n const context = useAskUserContext();\n\n const handleAnswerTextChange = (event: ChangeEvent<HTMLInputElement>) => {\n context.changeAnswerText(event.target.value);\n };\n\n const handleAnswerTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n context.submitAnswer();\n }\n };\n\n return (\n <Input\n type=\"text\"\n aria-labelledby={props['aria-label'] ? undefined : context.questionId}\n placeholder=\"Type your answer...\"\n size=\"sm\"\n {...props}\n disabled={context.disabled || disabled}\n value={context.answerText}\n onChange={handleAnswerTextChange}\n onKeyDown={handleAnswerTextKeyDown}\n />\n );\n}\n\nexport interface AskUserCustomAnswerProps {\n className?: string;\n label?: string;\n inputLabel?: string;\n}\n\nexport function AskUserCustomAnswer({\n className,\n label = 'Other…',\n inputLabel = 'Your answer',\n}: AskUserCustomAnswerProps) {\n const context = useAskUserContext();\n\n const handleRowClick = (event: MouseEvent<HTMLDivElement>) => {\n if (context.disabled || event.target !== event.currentTarget) return;\n if (context.isCustomAnswerSelected) {\n event.currentTarget.querySelector<HTMLInputElement>('input[type=\"text\"]')?.focus();\n return;\n }\n event.currentTarget.querySelector<HTMLElement>('[role=\"radio\"], [role=\"checkbox\"]')?.click();\n };\n\n const handleControlMouseDown = (event: MouseEvent<HTMLSpanElement>) => {\n // Let the checkbox click unselect it before blur resets its controlled value.\n if (context.isCustomAnswerSelected && !context.answerText.trim()) event.preventDefault();\n };\n\n return (\n <FieldItem\n role=\"group\"\n aria-label=\"Custom answer\"\n aria-disabled={context.disabled || undefined}\n disabled={context.disabled}\n onClick={handleRowClick}\n className={cn(\n 'items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50',\n !context.isCustomAnswerSelected && 'state-layer',\n className,\n )}\n >\n {context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n aria-label={label}\n disabled={context.disabled}\n checked={context.isCustomAnswerSelected}\n onMouseDown={handleControlMouseDown}\n onCheckedChange={context.setCustomAnswerSelected}\n />\n ) : (\n <RadioGroupItem aria-label={label} className=\"mt-0.5\" value={customAnswerValue} />\n )}\n {context.isCustomAnswerSelected ? (\n <AskUserTextAnswer\n aria-label={inputLabel}\n onBlur={context.unselectEmptyCustomAnswer}\n placeholder={label}\n variant=\"unstyled\"\n className={cn('h-auto min-w-0 flex-1 px-0', 'text-body')}\n autoFocus\n />\n ) : (\n <FieldLabel className=\"flex-1\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n </FieldLabel>\n )}\n </FieldItem>\n );\n}\n\nexport type AskUserSubmitProps = ComponentProps<typeof AskUserSubmitButton> & {\n when?: 'always' | 'custom-answer';\n};\n\nexport function AskUserSubmit({ when = 'always', disabled = false, onClick, ...props }: AskUserSubmitProps) {\n const context = useOptionalAskUserContext();\n\n const handleSubmitClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && !disabled) context?.submitAnswer();\n };\n\n if (when === 'custom-answer' && !context?.isCustomAnswerSelected) return null;\n\n return (\n <AskUserSubmitButton\n {...props}\n disabled={disabled || (context !== undefined && !context.canSubmitAnswer)}\n onClick={handleSubmitClick}\n />\n );\n}\n","import { useId, useState } from 'react';\nimport type { ComponentProps } from 'react';\nimport { AskUserContext } from './ask-user-context';\nimport { AskUserContainer } from './ask-user-layout';\nimport type { AskUserAnswer, AskUserSelectionMode } from './ask-user-types';\n\nexport interface AskUserRootProps extends Omit<ComponentProps<typeof AskUserContainer>, 'onSubmit'> {\n selectionMode?: AskUserSelectionMode;\n disabled?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n}\n\ninterface AskUserAnswerDraft {\n answerText: string;\n selectedOptionLabels: string[];\n selectionMode: AskUserSelectionMode;\n isCustomAnswerSelected: boolean;\n}\n\nfunction getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n}: AskUserAnswerDraft): AskUserAnswer | undefined {\n const trimmedAnswerText = answerText.trim();\n if (isCustomAnswerSelected && !trimmedAnswerText) return undefined;\n if (selectionMode === 'single_select') {\n // Suggested single-select answers already submit when selected.\n if (!isCustomAnswerSelected && selectedOptionLabels.length > 0) return undefined;\n return trimmedAnswerText || undefined;\n }\n\n const answerLabels = isCustomAnswerSelected ? [...selectedOptionLabels, trimmedAnswerText] : selectedOptionLabels;\n return answerLabels.length > 0 ? answerLabels : undefined;\n}\n\nfunction toggleSelectedOptionLabel(selectedOptionLabels: string[], optionLabel: string): string[] {\n if (selectedOptionLabels.includes(optionLabel)) {\n return selectedOptionLabels.filter(selectedLabel => selectedLabel !== optionLabel);\n }\n return [...selectedOptionLabels, optionLabel];\n}\n\nexport function AskUserRoot({\n selectionMode = 'single_select',\n disabled = false,\n onSubmit,\n children,\n ...props\n}: AskUserRootProps) {\n const questionId = useId();\n const [answerText, setAnswerText] = useState('');\n const [selectedOptionLabels, setSelectedOptionLabels] = useState<string[]>([]);\n const [isCustomAnswerSelected, setIsCustomAnswerSelected] = useState(false);\n const answerToSubmit = getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n });\n const canSubmitAnswer = !disabled && answerToSubmit !== undefined;\n\n const selectOption = (optionLabel: string) => {\n if (disabled) return;\n if (selectionMode === 'multi_select') {\n setSelectedOptionLabels(currentLabels => toggleSelectedOptionLabel(currentLabels, optionLabel));\n return;\n }\n setIsCustomAnswerSelected(false);\n setSelectedOptionLabels([optionLabel]);\n onSubmit(optionLabel);\n };\n\n const setCustomAnswerSelected = (selected: boolean) => {\n if (disabled) return;\n setIsCustomAnswerSelected(selected);\n if (selected && selectionMode === 'single_select') setSelectedOptionLabels([]);\n };\n\n const changeAnswerText = (text: string) => {\n if (!disabled) setAnswerText(text);\n };\n\n const unselectEmptyCustomAnswer = () => {\n if (!disabled && !answerText.trim()) setIsCustomAnswerSelected(false);\n };\n\n const submitAnswer = () => {\n if (disabled || answerToSubmit === undefined) return;\n onSubmit(answerToSubmit);\n };\n\n return (\n <AskUserContext.Provider\n value={{\n questionId,\n selectionMode,\n disabled,\n answerText,\n selectedOptionLabels,\n isCustomAnswerSelected,\n canSubmitAnswer,\n selectOption,\n setCustomAnswerSelected,\n changeAnswerText,\n unselectEmptyCustomAnswer,\n submitAnswer,\n }}\n >\n <AskUserContainer role=\"group\" aria-labelledby={questionId} {...props}>\n {children}\n </AskUserContainer>\n </AskUserContext.Provider>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { useAskUserContext } from './ask-user-context';\nimport {\n AskUserCustomAnswer,\n AskUserOptionItem,\n AskUserOptions,\n AskUserSubmit,\n AskUserTextAnswer,\n} from './ask-user-controls';\nimport { AskUserBody, AskUserContainer, AskUserOutput, AskUserPending, AskUserQuestion } from './ask-user-layout';\nimport { AskUserRoot } from './ask-user-root';\nimport type { AskUserAnswer, AskUserOption, AskUserPayload, AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nfunction getValidOptions(options: AskUserPayload['options']): AskUserOption[] {\n return (\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? []\n );\n}\n\nfunction AskUserAnswerControls({ options }: { options: AskUserOption[] }) {\n const { selectionMode } = useAskUserContext();\n const isMultiSelect = selectionMode === 'multi_select';\n if (options.length === 0) {\n return (\n <div className=\"flex items-center gap-2\">\n <AskUserTextAnswer />\n <AskUserSubmit className=\"shrink-0 whitespace-nowrap\" />\n </div>\n );\n }\n\n return (\n <>\n <AskUserOptions>\n {options.map(option => (\n <AskUserOptionItem key={option.label} value={option.label} description={option.description}>\n {option.label}\n </AskUserOptionItem>\n ))}\n <AskUserCustomAnswer />\n {isMultiSelect ? <AskUserSubmit className=\"mt-1 justify-self-start\" /> : null}\n </AskUserOptions>\n {!isMultiSelect ? <AskUserSubmit when=\"custom-answer\" className=\"mt-2\" /> : null}\n </>\n );\n}\n\ninterface AskUserCardContentProps extends Pick<AskUserProps, 'result' | 'isAnswered' | 'isSubmitting' | 'footer'> {\n options: AskUserOption[];\n}\n\nfunction AskUserCardContent({ result, isAnswered, isSubmitting, options, footer }: AskUserCardContentProps) {\n if (result) return <AskUserOutput result={result} />;\n if (isAnswered) return <Badge variant=\"success\">Answered</Badge>;\n\n return (\n <>\n <AskUserAnswerControls options={options} />\n {isSubmitting ? <AskUserPending className=\"mt-3 block\" /> : null}\n {footer}\n </>\n );\n}\n\nexport function AskUser({\n payload,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserProps) {\n const options = getValidOptions(payload.options);\n const isMultiSelect = options.length > 0 && payload.selectionMode === 'multi_select';\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n const hasAnswer = result !== undefined || isAnswered;\n\n return (\n <AskUserRoot\n key={payloadKey}\n data-testid=\"ask-user\"\n selectionMode={isMultiSelect ? 'multi_select' : 'single_select'}\n disabled={isSubmitting || hasAnswer}\n onSubmit={onSubmit}\n {...props}\n >\n <AskUserBody>\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n <AskUserCardContent\n result={result}\n isAnswered={isAnswered}\n isSubmitting={isSubmitting}\n options={options}\n footer={footer}\n />\n </AskUserBody>\n </AskUserRoot>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ask-user-card-CmfZg1wt.js","sources":["../src/ds/components/ai/ask-user/ask-user-context.ts","../src/ds/components/ai/ask-user/ask-user-layout.tsx","../src/ds/components/ai/ask-user/ask-user-controls.tsx","../src/ds/components/ai/ask-user/ask-user-root.tsx","../src/ds/components/ai/ask-user/ask-user-card.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { AskUserSelectionMode } from './ask-user-types';\n\ninterface AskUserContextValue {\n questionId: string;\n selectionMode: AskUserSelectionMode;\n disabled: boolean;\n answerText: string;\n selectedOptionLabels: string[];\n isCustomAnswerSelected: boolean;\n canSubmitAnswer: boolean;\n selectOption: (optionLabel: string) => void;\n setCustomAnswerSelected: (selected: boolean) => void;\n changeAnswerText: (text: string) => void;\n unselectEmptyCustomAnswer: () => void;\n submitAnswer: () => void;\n}\n\nexport const AskUserContext = createContext<AskUserContextValue | undefined>(undefined);\n\nexport function useOptionalAskUserContext() {\n return useContext(AskUserContext);\n}\n\nexport function useAskUserContext() {\n const context = useOptionalAskUserContext();\n if (!context) throw new Error('AskUser controls must be rendered inside AskUser.Root.');\n return context;\n}\n","import { Check, MessageCircleQuestion } from 'lucide-react';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useOptionalAskUserContext } from './ask-user-context';\nimport type { AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { FieldItem, FieldLabel } from '@/ds/components/Field';\nimport type { FieldLabelProps } from '@/ds/components/Field';\nimport { Txt } from '@/ds/components/Txt';\nimport { Icon } from '@/ds/icons/Icon';\nimport { raisedSurfaceStyle } from '@/ds/primitives/raised-surface';\nimport { cn } from '@/lib/utils';\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div\n data-slot=\"ask-user\"\n className={cn(raisedSurfaceStyle, 'w-full overflow-hidden rounded-xl', className)}\n {...props}\n />\n);\n\nexport const AskUserLabel = ({ children = 'Question', className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-label\" className={cn('flex min-h-10 items-center gap-2 px-4 pt-3', className)} {...props}>\n <Icon size=\"xs\" className=\"text-muted-foreground\">\n <MessageCircleQuestion />\n </Icon>\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {children}\n </Txt>\n </div>\n);\n\nexport const AskUserBody = ({ className, ...props }: ComponentProps<'div'>) => (\n <div data-slot=\"ask-user-body\" className={cn('p-4', className)} {...props} />\n);\n\nconst AskUserQuestionTitle = ({ children }: { children: ReactNode }) => (\n <span className=\"flex items-start gap-2\">\n <Icon size=\"xs\" className={cn('mt-1 shrink-0', 'text-muted-foreground')} aria-hidden>\n <MessageCircleQuestion />\n </Icon>\n <span className=\"min-w-0\">{children}</span>\n </span>\n);\n\nexport const AskUserQuestion = ({ children, className, ...props }: ComponentProps<typeof Txt>) => {\n const context = useOptionalAskUserContext();\n return (\n <Txt\n as=\"p\"\n variant=\"subheading\"\n tone=\"ink\"\n {...props}\n id={context?.questionId ?? props.id}\n className={cn('mb-3', className)}\n >\n <AskUserQuestionTitle>{children}</AskUserQuestionTitle>\n </Txt>\n );\n};\n\nexport interface AskUserOptionRowProps extends Omit<FieldLabelProps, 'children'> {\n control: ReactNode;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n}\n\nexport const AskUserOptionRow = ({\n control,\n label,\n description,\n disabled = false,\n className,\n ...props\n}: AskUserOptionRowProps) => (\n <FieldItem disabled={disabled} className=\"contents\">\n <FieldLabel\n // state-layer's wash only stops at :disabled/aria-disabled, and a <label> is neither\n aria-disabled={disabled || undefined}\n className={cn('state-layer flex items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50', className)}\n {...props}\n >\n {control}\n <span className=\"grid gap-0.5\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n {description ? (\n <Txt as=\"span\" variant=\"caption\" tone=\"muted\">\n {description}\n </Txt>\n ) : null}\n </span>\n </FieldLabel>\n </FieldItem>\n);\n\nexport type AskUserSubmitButtonProps = Omit<ComponentProps<typeof Button>, 'children'> & { children?: ReactNode };\n\nexport const AskUserSubmitButton = ({ children = 'Submit answer', ...props }: AskUserSubmitButtonProps) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', ...props }: ComponentProps<typeof Txt>) => (\n <Txt as=\"span\" role=\"status\" variant=\"caption\" tone=\"muted\" {...props}>\n {children}\n </Txt>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n data-slot=\"ask-user-output\"\n role={result.isError ? 'alert' : 'status'}\n className={cn('grid gap-2 rounded-lg bg-fill p-3', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'destructive' : 'success'} className=\"justify-self-start\">\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <Txt as=\"p\" variant=\"body\" tone=\"ink\" className={cn(result.isError && 'text-destructive-foreground')}>\n {result.content}\n </Txt>\n </div>\n);\n","import type { ChangeEvent, ComponentProps, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { useAskUserContext, useOptionalAskUserContext } from './ask-user-context';\nimport { AskUserOptionRow, AskUserSubmitButton } from './ask-user-layout';\nimport { Checkbox } from '@/ds/components/Checkbox';\nimport { FieldItem, FieldLabel, Fieldset } from '@/ds/components/Field';\nimport { Input } from '@/ds/components/Input';\nimport { RadioGroup, RadioGroupItem } from '@/ds/components/RadioGroup';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\n// Keep the UI-only custom choice separate from suggested answer values.\nconst customAnswerValue = 'custom';\nconst optionValuePrefix = 'option:';\n\nfunction getOptionRadioValue(optionLabel: string): string {\n return `${optionValuePrefix}${optionLabel}`;\n}\n\nexport function AskUserOptions({ children, className, ...props }: ComponentProps<typeof Fieldset>) {\n const context = useAskUserContext();\n\n const handleSingleSelectChange = (radioValue: unknown) => {\n if (radioValue === customAnswerValue) {\n context.setCustomAnswerSelected(true);\n return;\n }\n if (typeof radioValue !== 'string' || !radioValue.startsWith(optionValuePrefix)) return;\n context.selectOption(radioValue.slice(optionValuePrefix.length));\n };\n\n if (context.selectionMode === 'multi_select') {\n return (\n <Fieldset aria-label=\"Answer options\" {...props} className={cn('gap-2', className)}>\n {children}\n </Fieldset>\n );\n }\n\n const selectedOptionLabel = context.selectedOptionLabels[0];\n const selectedOptionValue = selectedOptionLabel === undefined ? '' : getOptionRadioValue(selectedOptionLabel);\n const selectedRadioValue = context.isCustomAnswerSelected ? customAnswerValue : selectedOptionValue;\n\n return (\n <Fieldset\n {...props}\n className={cn('gap-2', className)}\n render={\n <RadioGroup\n aria-labelledby={context.questionId}\n disabled={context.disabled}\n value={selectedRadioValue}\n onValueChange={handleSingleSelectChange}\n />\n }\n >\n {children}\n </Fieldset>\n );\n}\n\nexport interface AskUserOptionItemProps {\n value: string;\n children: ReactNode;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nexport function AskUserOptionItem({\n value,\n children,\n description,\n disabled = false,\n className,\n}: AskUserOptionItemProps) {\n const context = useAskUserContext();\n const isDisabled = context.disabled || disabled;\n\n const handleOptionToggle = () => {\n if (!isDisabled) context.selectOption(value);\n };\n\n return (\n <AskUserOptionRow\n label={children}\n description={description}\n disabled={isDisabled}\n className={className}\n control={\n context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n disabled={isDisabled}\n checked={context.selectedOptionLabels.includes(value)}\n onCheckedChange={handleOptionToggle}\n />\n ) : (\n <RadioGroupItem className=\"mt-0.5\" disabled={isDisabled} value={getOptionRadioValue(value)} />\n )\n }\n />\n );\n}\n\nexport type AskUserTextAnswerProps = Omit<\n ComponentProps<typeof Input>,\n 'value' | 'defaultValue' | 'onChange' | 'onKeyDown'\n>;\n\nexport function AskUserTextAnswer({ disabled = false, ...props }: AskUserTextAnswerProps) {\n const context = useAskUserContext();\n\n const handleAnswerTextChange = (event: ChangeEvent<HTMLInputElement>) => {\n context.changeAnswerText(event.target.value);\n };\n\n const handleAnswerTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n context.submitAnswer();\n }\n };\n\n return (\n <Input\n type=\"text\"\n aria-labelledby={props['aria-label'] ? undefined : context.questionId}\n placeholder=\"Type your answer...\"\n size=\"sm\"\n {...props}\n disabled={context.disabled || disabled}\n value={context.answerText}\n onChange={handleAnswerTextChange}\n onKeyDown={handleAnswerTextKeyDown}\n />\n );\n}\n\nexport interface AskUserCustomAnswerProps {\n className?: string;\n label?: string;\n inputLabel?: string;\n}\n\nexport function AskUserCustomAnswer({\n className,\n label = 'Other…',\n inputLabel = 'Your answer',\n}: AskUserCustomAnswerProps) {\n const context = useAskUserContext();\n\n const handleRowClick = (event: MouseEvent<HTMLDivElement>) => {\n if (context.disabled || event.target !== event.currentTarget) return;\n if (context.isCustomAnswerSelected) {\n event.currentTarget.querySelector<HTMLInputElement>('input[type=\"text\"]')?.focus();\n return;\n }\n event.currentTarget.querySelector<HTMLElement>('[role=\"radio\"], [role=\"checkbox\"]')?.click();\n };\n\n const handleControlMouseDown = (event: MouseEvent<HTMLSpanElement>) => {\n // Let the checkbox click unselect it before blur resets its controlled value.\n if (context.isCustomAnswerSelected && !context.answerText.trim()) event.preventDefault();\n };\n\n return (\n <FieldItem\n role=\"group\"\n aria-label=\"Custom answer\"\n aria-disabled={context.disabled || undefined}\n disabled={context.disabled}\n onClick={handleRowClick}\n className={cn(\n 'items-start gap-2.5 rounded-lg px-3 py-2 data-disabled:opacity-50',\n !context.isCustomAnswerSelected && 'state-layer',\n className,\n )}\n >\n {context.selectionMode === 'multi_select' ? (\n <Checkbox\n className=\"mt-0.5\"\n aria-label={label}\n disabled={context.disabled}\n checked={context.isCustomAnswerSelected}\n onMouseDown={handleControlMouseDown}\n onCheckedChange={context.setCustomAnswerSelected}\n />\n ) : (\n <RadioGroupItem aria-label={label} className=\"mt-0.5\" value={customAnswerValue} />\n )}\n {context.isCustomAnswerSelected ? (\n <AskUserTextAnswer\n aria-label={inputLabel}\n onBlur={context.unselectEmptyCustomAnswer}\n placeholder={label}\n variant=\"unstyled\"\n className={cn('h-auto min-w-0 flex-1 px-0', 'text-body')}\n autoFocus\n />\n ) : (\n <FieldLabel className=\"flex-1\">\n <Txt as=\"span\" variant=\"body\" tone=\"ink\">\n {label}\n </Txt>\n </FieldLabel>\n )}\n </FieldItem>\n );\n}\n\nexport type AskUserSubmitProps = ComponentProps<typeof AskUserSubmitButton> & {\n when?: 'always' | 'custom-answer';\n};\n\nexport function AskUserSubmit({ when = 'always', disabled = false, onClick, ...props }: AskUserSubmitProps) {\n const context = useOptionalAskUserContext();\n\n const handleSubmitClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && !disabled) context?.submitAnswer();\n };\n\n if (when === 'custom-answer' && !context?.isCustomAnswerSelected) return null;\n\n return (\n <AskUserSubmitButton\n {...props}\n disabled={disabled || (context !== undefined && !context.canSubmitAnswer)}\n onClick={handleSubmitClick}\n />\n );\n}\n","import { useId, useState } from 'react';\nimport type { ComponentProps } from 'react';\nimport { AskUserContext } from './ask-user-context';\nimport { AskUserContainer } from './ask-user-layout';\nimport type { AskUserAnswer, AskUserSelectionMode } from './ask-user-types';\n\nexport interface AskUserRootProps extends Omit<ComponentProps<typeof AskUserContainer>, 'onSubmit'> {\n selectionMode?: AskUserSelectionMode;\n disabled?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n}\n\ninterface AskUserAnswerDraft {\n answerText: string;\n selectedOptionLabels: string[];\n selectionMode: AskUserSelectionMode;\n isCustomAnswerSelected: boolean;\n}\n\nfunction getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n}: AskUserAnswerDraft): AskUserAnswer | undefined {\n const trimmedAnswerText = answerText.trim();\n if (isCustomAnswerSelected && !trimmedAnswerText) return undefined;\n if (selectionMode === 'single_select') {\n // Suggested single-select answers already submit when selected.\n if (!isCustomAnswerSelected && selectedOptionLabels.length > 0) return undefined;\n return trimmedAnswerText || undefined;\n }\n\n const answerLabels = isCustomAnswerSelected ? [...selectedOptionLabels, trimmedAnswerText] : selectedOptionLabels;\n return answerLabels.length > 0 ? answerLabels : undefined;\n}\n\nfunction toggleSelectedOptionLabel(selectedOptionLabels: string[], optionLabel: string): string[] {\n if (selectedOptionLabels.includes(optionLabel)) {\n return selectedOptionLabels.filter(selectedLabel => selectedLabel !== optionLabel);\n }\n return [...selectedOptionLabels, optionLabel];\n}\n\nexport function AskUserRoot({\n selectionMode = 'single_select',\n disabled = false,\n onSubmit,\n children,\n ...props\n}: AskUserRootProps) {\n const questionId = useId();\n const [answerText, setAnswerText] = useState('');\n const [selectedOptionLabels, setSelectedOptionLabels] = useState<string[]>([]);\n const [isCustomAnswerSelected, setIsCustomAnswerSelected] = useState(false);\n const answerToSubmit = getAnswerToSubmit({\n answerText,\n selectedOptionLabels,\n selectionMode,\n isCustomAnswerSelected,\n });\n const canSubmitAnswer = !disabled && answerToSubmit !== undefined;\n\n const selectOption = (optionLabel: string) => {\n if (disabled) return;\n if (selectionMode === 'multi_select') {\n setSelectedOptionLabels(currentLabels => toggleSelectedOptionLabel(currentLabels, optionLabel));\n return;\n }\n setIsCustomAnswerSelected(false);\n setSelectedOptionLabels([optionLabel]);\n onSubmit(optionLabel);\n };\n\n const setCustomAnswerSelected = (selected: boolean) => {\n if (disabled) return;\n setIsCustomAnswerSelected(selected);\n if (selected && selectionMode === 'single_select') setSelectedOptionLabels([]);\n };\n\n const changeAnswerText = (text: string) => {\n if (!disabled) setAnswerText(text);\n };\n\n const unselectEmptyCustomAnswer = () => {\n if (!disabled && !answerText.trim()) setIsCustomAnswerSelected(false);\n };\n\n const submitAnswer = () => {\n if (disabled || answerToSubmit === undefined) return;\n onSubmit(answerToSubmit);\n };\n\n return (\n <AskUserContext.Provider\n value={{\n questionId,\n selectionMode,\n disabled,\n answerText,\n selectedOptionLabels,\n isCustomAnswerSelected,\n canSubmitAnswer,\n selectOption,\n setCustomAnswerSelected,\n changeAnswerText,\n unselectEmptyCustomAnswer,\n submitAnswer,\n }}\n >\n <AskUserContainer role=\"group\" aria-labelledby={questionId} {...props}>\n {children}\n </AskUserContainer>\n </AskUserContext.Provider>\n );\n}\n","import type { ComponentProps, ReactNode } from 'react';\nimport { useAskUserContext } from './ask-user-context';\nimport {\n AskUserCustomAnswer,\n AskUserOptionItem,\n AskUserOptions,\n AskUserSubmit,\n AskUserTextAnswer,\n} from './ask-user-controls';\nimport { AskUserBody, AskUserContainer, AskUserOutput, AskUserPending, AskUserQuestion } from './ask-user-layout';\nimport { AskUserRoot } from './ask-user-root';\nimport type { AskUserAnswer, AskUserOption, AskUserPayload, AskUserResult } from './ask-user-types';\nimport { Badge } from '@/ds/components/Badge';\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nfunction getValidOptions(options: AskUserPayload['options']): AskUserOption[] {\n return (\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? []\n );\n}\n\nfunction AskUserAnswerControls({ options }: { options: AskUserOption[] }) {\n const { selectionMode } = useAskUserContext();\n const isMultiSelect = selectionMode === 'multi_select';\n if (options.length === 0) {\n return (\n <div className=\"flex items-center gap-2\">\n <AskUserTextAnswer />\n <AskUserSubmit className=\"shrink-0 whitespace-nowrap\" />\n </div>\n );\n }\n\n return (\n <>\n <AskUserOptions>\n {options.map(option => (\n <AskUserOptionItem key={option.label} value={option.label} description={option.description}>\n {option.label}\n </AskUserOptionItem>\n ))}\n <AskUserCustomAnswer />\n {isMultiSelect ? <AskUserSubmit className=\"mt-1 justify-self-start\" /> : null}\n </AskUserOptions>\n {!isMultiSelect ? <AskUserSubmit when=\"custom-answer\" className=\"mt-2\" /> : null}\n </>\n );\n}\n\ninterface AskUserCardContentProps extends Pick<AskUserProps, 'result' | 'isAnswered' | 'isSubmitting' | 'footer'> {\n options: AskUserOption[];\n}\n\nfunction AskUserCardContent({ result, isAnswered, isSubmitting, options, footer }: AskUserCardContentProps) {\n if (result) return <AskUserOutput result={result} />;\n if (isAnswered) return <Badge variant=\"success\">Answered</Badge>;\n\n return (\n <>\n <AskUserAnswerControls options={options} />\n {isSubmitting ? <AskUserPending className=\"mt-3 block\" /> : null}\n {footer}\n </>\n );\n}\n\nexport function AskUser({\n payload,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserProps) {\n const options = getValidOptions(payload.options);\n const isMultiSelect = options.length > 0 && payload.selectionMode === 'multi_select';\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n const hasAnswer = result !== undefined || isAnswered;\n\n return (\n <AskUserRoot\n key={payloadKey}\n data-testid=\"ask-user\"\n selectionMode={isMultiSelect ? 'multi_select' : 'single_select'}\n disabled={isSubmitting || hasAnswer}\n onSubmit={onSubmit}\n {...props}\n >\n <AskUserBody>\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n <AskUserCardContent\n result={result}\n isAnswered={isAnswered}\n isSubmitting={isSubmitting}\n options={options}\n footer={footer}\n />\n </AskUserBody>\n </AskUserRoot>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
|
|
3
|
+
const avatarSizeClasses = {
|
|
4
|
+
xs: "size-icon-xs",
|
|
5
|
+
sm: "size-avatar-sm",
|
|
6
|
+
md: "size-avatar-md",
|
|
7
|
+
lg: "size-avatar-lg",
|
|
8
|
+
control: "size-control-md"
|
|
9
|
+
};
|
|
10
|
+
const avatarTextClasses = {
|
|
11
|
+
xs: "text-meta",
|
|
12
|
+
sm: "text-caption",
|
|
13
|
+
md: "text-body-sm",
|
|
14
|
+
lg: "text-body",
|
|
15
|
+
control: "text-body-sm"
|
|
16
|
+
};
|
|
17
|
+
const avatarIconClasses = {
|
|
18
|
+
xs: "[&>svg]:hidden",
|
|
19
|
+
sm: "[&>svg]:size-icon-xs",
|
|
20
|
+
md: "[&>svg]:size-icon-sm",
|
|
21
|
+
lg: "[&>svg]:size-icon-sm",
|
|
22
|
+
control: "[&>svg]:size-icon-sm"
|
|
23
|
+
};
|
|
24
|
+
const AvatarSizeContext = createContext(void 0);
|
|
25
|
+
|
|
26
|
+
export { AvatarSizeContext as A, avatarSizeClasses as a, avatarIconClasses as b, avatarTextClasses as c };
|
|
27
|
+
//# sourceMappingURL=avatar-size-CNR0U-LW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-size-CNR0U-LW.js","sources":["../src/ds/components/Avatar/avatar-size.ts"],"sourcesContent":["import { createContext } from 'react';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'control';\n\nexport const avatarSizeClasses: Record<AvatarSize, string> = {\n xs: 'size-icon-xs',\n sm: 'size-avatar-sm',\n md: 'size-avatar-md',\n lg: 'size-avatar-lg',\n control: 'size-control-md',\n};\n\nexport const avatarTextClasses: Record<AvatarSize, string> = {\n xs: 'text-meta',\n sm: 'text-caption',\n md: 'text-body-sm',\n lg: 'text-body',\n control: 'text-body-sm',\n};\n\nexport const avatarIconClasses: Record<AvatarSize, string> = {\n xs: '[&>svg]:hidden',\n sm: '[&>svg]:size-icon-xs',\n md: '[&>svg]:size-icon-sm',\n lg: '[&>svg]:size-icon-sm',\n control: '[&>svg]:size-icon-sm',\n};\n\nexport const AvatarSizeContext = createContext<AvatarSize | undefined>(undefined);\n"],"names":[],"mappings":";;AAIO,MAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAAS;AACX;AAEO,MAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,OAAA,EAAS;AACX;AAEO,MAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,sBAAA;AAAA,EACJ,EAAA,EAAI,sBAAA;AAAA,EACJ,EAAA,EAAI,sBAAA;AAAA,EACJ,OAAA,EAAS;AACX;AAEO,MAAM,iBAAA,GAAoB,cAAsC,MAAS;;;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const React = require('react');
|
|
4
|
+
|
|
5
|
+
const avatarSizeClasses = {
|
|
6
|
+
xs: "size-icon-xs",
|
|
7
|
+
sm: "size-avatar-sm",
|
|
8
|
+
md: "size-avatar-md",
|
|
9
|
+
lg: "size-avatar-lg",
|
|
10
|
+
control: "size-control-md"
|
|
11
|
+
};
|
|
12
|
+
const avatarTextClasses = {
|
|
13
|
+
xs: "text-meta",
|
|
14
|
+
sm: "text-caption",
|
|
15
|
+
md: "text-body-sm",
|
|
16
|
+
lg: "text-body",
|
|
17
|
+
control: "text-body-sm"
|
|
18
|
+
};
|
|
19
|
+
const avatarIconClasses = {
|
|
20
|
+
xs: "[&>svg]:hidden",
|
|
21
|
+
sm: "[&>svg]:size-icon-xs",
|
|
22
|
+
md: "[&>svg]:size-icon-sm",
|
|
23
|
+
lg: "[&>svg]:size-icon-sm",
|
|
24
|
+
control: "[&>svg]:size-icon-sm"
|
|
25
|
+
};
|
|
26
|
+
const AvatarSizeContext = React.createContext(void 0);
|
|
27
|
+
|
|
28
|
+
exports.AvatarSizeContext = AvatarSizeContext;
|
|
29
|
+
exports.avatarIconClasses = avatarIconClasses;
|
|
30
|
+
exports.avatarSizeClasses = avatarSizeClasses;
|
|
31
|
+
exports.avatarTextClasses = avatarTextClasses;
|
|
32
|
+
//# sourceMappingURL=avatar-size-DxStOo5A.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-size-DxStOo5A.cjs","sources":["../src/ds/components/Avatar/avatar-size.ts"],"sourcesContent":["import { createContext } from 'react';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'control';\n\nexport const avatarSizeClasses: Record<AvatarSize, string> = {\n xs: 'size-icon-xs',\n sm: 'size-avatar-sm',\n md: 'size-avatar-md',\n lg: 'size-avatar-lg',\n control: 'size-control-md',\n};\n\nexport const avatarTextClasses: Record<AvatarSize, string> = {\n xs: 'text-meta',\n sm: 'text-caption',\n md: 'text-body-sm',\n lg: 'text-body',\n control: 'text-body-sm',\n};\n\nexport const avatarIconClasses: Record<AvatarSize, string> = {\n xs: '[&>svg]:hidden',\n sm: '[&>svg]:size-icon-xs',\n md: '[&>svg]:size-icon-sm',\n lg: '[&>svg]:size-icon-sm',\n control: '[&>svg]:size-icon-sm',\n};\n\nexport const AvatarSizeContext = createContext<AvatarSize | undefined>(undefined);\n"],"names":["createContext"],"mappings":";;;;AAIO,MAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,gBAAA;AAAA,EACJ,OAAA,EAAS;AACX;AAEO,MAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,WAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,cAAA;AAAA,EACJ,EAAA,EAAI,WAAA;AAAA,EACJ,OAAA,EAAS;AACX;AAEO,MAAM,iBAAA,GAAgD;AAAA,EAC3D,EAAA,EAAI,gBAAA;AAAA,EACJ,EAAA,EAAI,sBAAA;AAAA,EACJ,EAAA,EAAI,sBAAA;AAAA,EACJ,EAAA,EAAI,sBAAA;AAAA,EACJ,OAAA,EAAS;AACX;AAEO,MAAM,iBAAA,GAAoBA,oBAAsC,MAAS;;;;;;;"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
const code = require('./code-Dcah35Gp.cjs');
|
|
5
|
-
const copyButton = require('./copy-button-
|
|
6
|
-
const select = require('./select-
|
|
5
|
+
const copyButton = require('./copy-button-5tVWqoTk.cjs');
|
|
6
|
+
const select = require('./select-D5cu0K7R.cjs');
|
|
7
7
|
const tabsList = require('./tabs-list-xikY_dug.cjs');
|
|
8
8
|
const tabsRoot = require('./tabs-root-Phsi-P1b.cjs');
|
|
9
|
-
const tabsTab = require('./tabs-tab-
|
|
9
|
+
const tabsTab = require('./tabs-tab-CqcY4tHE.cjs');
|
|
10
10
|
const primitives_transitions = require('./primitives/transitions.cjs.js');
|
|
11
11
|
const utils_cn = require('./cn-TqD01zH-.cjs');
|
|
12
12
|
|
|
@@ -86,4 +86,4 @@ function CodeBlock({
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
exports.CodeBlock = CodeBlock;
|
|
89
|
-
//# sourceMappingURL=code-block-
|
|
89
|
+
//# sourceMappingURL=code-block-BuGosknt.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-block-
|
|
1
|
+
{"version":3,"file":"code-block-BuGosknt.cjs","sources":["../src/ds/components/CodeBlock/code-block.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Code } from '../Code/code';\nimport { CopyButton } from '../CopyButton/copy-button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../Select/select';\nimport { TabList } from '../Tabs/tabs-list';\nimport { Tabs } from '../Tabs/tabs-root';\nimport { Tab } from '../Tabs/tabs-tab';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type CodeBlockSelector = 'select' | 'tabs';\n\nexport type CodeBlockOverflow = 'wrap' | 'scroll';\n\nexport interface CodeBlockOption {\n label: string;\n value: string;\n}\n\nexport interface CodeBlockProps {\n code: string;\n options?: CodeBlockOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n selector?: CodeBlockSelector;\n fileName?: string;\n lang?: string;\n /** `wrap` (default) breaks long lines — best for commands and snippets.\n * `scroll` preserves columns behind a horizontal scroll — best for source code. */\n overflow?: CodeBlockOverflow;\n copyMessage?: string;\n copyTooltip?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n options,\n value,\n onValueChange,\n selector = 'select',\n fileName,\n lang,\n overflow = 'wrap',\n copyMessage,\n copyTooltip,\n actions,\n className,\n}: CodeBlockProps) {\n const hasOptions = options && options.length > 0;\n const useTabs = hasOptions && selector === 'tabs';\n const useSelect = hasOptions && selector === 'select';\n const firstOption = options?.[0];\n const activeValue = value ?? firstOption?.value;\n\n return (\n <figure\n // A scrolling `pre` still reports its longest line as an intrinsic width, which\n // grows every ancestor; containment keeps the block inside the width it is given.\n className={cn(\n 'group relative flex w-full flex-col overflow-hidden rounded-2xl border border-border bg-background [contain:inline-size]',\n className,\n )}\n >\n {useTabs && firstOption && (\n <Tabs defaultTab={firstOption.value} value={activeValue} onValueChange={onValueChange ?? (() => {})}>\n <div className=\"flex items-stretch\">\n <div className=\"min-w-0 flex-1\">\n <TabList>\n {options.map(opt => (\n <Tab key={opt.value} value={opt.value}>\n {opt.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {actions && <div className=\"flex shrink-0 items-center border-b border-border pr-2 pl-3\">{actions}</div>}\n </div>\n </Tabs>\n )}\n\n {useSelect && options && (\n <div className=\"flex items-center border-b border-border px-2 py-1.5\">\n <Select value={activeValue} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" variant=\"ghost\" className=\"w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && fileName && (\n <div className=\"flex items-center border-b border-border px-4 py-2\">\n <figcaption className=\"font-mono text-caption text-muted-foreground\">{fileName}</figcaption>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && !fileName && actions && (\n <div className=\"flex items-center justify-end border-b border-border px-2 py-1.5\">{actions}</div>\n )}\n\n <div className=\"relative\">\n <Code\n code={code}\n lang={lang}\n className={cn(\n 'px-4 py-3 font-mono text-caption text-foreground',\n overflow === 'scroll' ? 'overflow-x-auto whitespace-pre' : 'break-all whitespace-pre-wrap',\n )}\n />\n <CopyButton\n content={code}\n copyMessage={copyMessage}\n tooltip={copyTooltip}\n size=\"sm\"\n className={cn(\n 'absolute top-2 right-2 opacity-100 group-focus-within:opacity-100 group-hover:opacity-100 pointer-fine:opacity-0',\n transitions.opacity,\n )}\n />\n </div>\n </figure>\n );\n}\n"],"names":["code","jsxs","cn","jsx","Tabs","TabList","Tab","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Code","CopyButton","transitions"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { C as Code } from './code-DAXWNzvf.js';
|
|
3
|
-
import { C as CopyButton } from './copy-button-
|
|
4
|
-
import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from './select-
|
|
3
|
+
import { C as CopyButton } from './copy-button-Af_Qt7G1.js';
|
|
4
|
+
import { S as Select, d as SelectTrigger, e as SelectValue, a as SelectContent, c as SelectItem } from './select-BvYdi3X0.js';
|
|
5
5
|
import { T as TabList } from './tabs-list-DY_hziv7.js';
|
|
6
6
|
import { T as Tabs } from './tabs-root-CvGhdNKc.js';
|
|
7
|
-
import { T as Tab } from './tabs-tab-
|
|
7
|
+
import { T as Tab } from './tabs-tab-CzpXzpf-.js';
|
|
8
8
|
import { transitions } from './primitives/transitions.es.js';
|
|
9
9
|
import { c as cn } from './cn-coERSHz5.js';
|
|
10
10
|
|
|
@@ -84,4 +84,4 @@ function CodeBlock({
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
export { CodeBlock as C };
|
|
87
|
-
//# sourceMappingURL=code-block-
|
|
87
|
+
//# sourceMappingURL=code-block-vvYFcnqm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-block-
|
|
1
|
+
{"version":3,"file":"code-block-vvYFcnqm.js","sources":["../src/ds/components/CodeBlock/code-block.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Code } from '../Code/code';\nimport { CopyButton } from '../CopyButton/copy-button';\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../Select/select';\nimport { TabList } from '../Tabs/tabs-list';\nimport { Tabs } from '../Tabs/tabs-root';\nimport { Tab } from '../Tabs/tabs-tab';\nimport { transitions } from '@/ds/primitives/transitions';\nimport { cn } from '@/lib/utils';\n\nexport type CodeBlockSelector = 'select' | 'tabs';\n\nexport type CodeBlockOverflow = 'wrap' | 'scroll';\n\nexport interface CodeBlockOption {\n label: string;\n value: string;\n}\n\nexport interface CodeBlockProps {\n code: string;\n options?: CodeBlockOption[];\n value?: string;\n onValueChange?: (value: string) => void;\n selector?: CodeBlockSelector;\n fileName?: string;\n lang?: string;\n /** `wrap` (default) breaks long lines — best for commands and snippets.\n * `scroll` preserves columns behind a horizontal scroll — best for source code. */\n overflow?: CodeBlockOverflow;\n copyMessage?: string;\n copyTooltip?: string;\n actions?: ReactNode;\n className?: string;\n}\n\nexport function CodeBlock({\n code,\n options,\n value,\n onValueChange,\n selector = 'select',\n fileName,\n lang,\n overflow = 'wrap',\n copyMessage,\n copyTooltip,\n actions,\n className,\n}: CodeBlockProps) {\n const hasOptions = options && options.length > 0;\n const useTabs = hasOptions && selector === 'tabs';\n const useSelect = hasOptions && selector === 'select';\n const firstOption = options?.[0];\n const activeValue = value ?? firstOption?.value;\n\n return (\n <figure\n // A scrolling `pre` still reports its longest line as an intrinsic width, which\n // grows every ancestor; containment keeps the block inside the width it is given.\n className={cn(\n 'group relative flex w-full flex-col overflow-hidden rounded-2xl border border-border bg-background [contain:inline-size]',\n className,\n )}\n >\n {useTabs && firstOption && (\n <Tabs defaultTab={firstOption.value} value={activeValue} onValueChange={onValueChange ?? (() => {})}>\n <div className=\"flex items-stretch\">\n <div className=\"min-w-0 flex-1\">\n <TabList>\n {options.map(opt => (\n <Tab key={opt.value} value={opt.value}>\n {opt.label}\n </Tab>\n ))}\n </TabList>\n </div>\n {actions && <div className=\"flex shrink-0 items-center border-b border-border pr-2 pl-3\">{actions}</div>}\n </div>\n </Tabs>\n )}\n\n {useSelect && options && (\n <div className=\"flex items-center border-b border-border px-2 py-1.5\">\n <Select value={activeValue} onValueChange={onValueChange}>\n <SelectTrigger size=\"sm\" variant=\"ghost\" className=\"w-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && fileName && (\n <div className=\"flex items-center border-b border-border px-4 py-2\">\n <figcaption className=\"font-mono text-caption text-muted-foreground\">{fileName}</figcaption>\n {actions && <div className=\"ml-auto flex items-center\">{actions}</div>}\n </div>\n )}\n\n {!hasOptions && !fileName && actions && (\n <div className=\"flex items-center justify-end border-b border-border px-2 py-1.5\">{actions}</div>\n )}\n\n <div className=\"relative\">\n <Code\n code={code}\n lang={lang}\n className={cn(\n 'px-4 py-3 font-mono text-caption text-foreground',\n overflow === 'scroll' ? 'overflow-x-auto whitespace-pre' : 'break-all whitespace-pre-wrap',\n )}\n />\n <CopyButton\n content={code}\n copyMessage={copyMessage}\n tooltip={copyTooltip}\n size=\"sm\"\n className={cn(\n 'absolute top-2 right-2 opacity-100 group-focus-within:opacity-100 group-hover:opacity-100 pointer-fine:opacity-0',\n transitions.opacity,\n )}\n />\n </div>\n </figure>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import CodeMirror from '@uiw/react-codemirror';
|
|
|
10
10
|
import { c as cva } from './index-D_f78K7e.js';
|
|
11
11
|
import { useMemo, forwardRef } from 'react';
|
|
12
12
|
import { autocompletion } from '@codemirror/autocomplete';
|
|
13
|
-
import { C as CopyButton } from './copy-button-
|
|
13
|
+
import { C as CopyButton } from './copy-button-Af_Qt7G1.js';
|
|
14
14
|
import { u as useFieldControlAria } from './field-control-aria-DB6y41tQ.js';
|
|
15
15
|
import { u as useTheme } from './theme-provider-BbMYMtxP.js';
|
|
16
16
|
import { fieldErrorRimWithin, inputSurfaceAndFocusWithinStyle } from './primitives/form-element.es.js';
|
|
@@ -507,4 +507,4 @@ const CodeEditor = forwardRef(
|
|
|
507
507
|
);
|
|
508
508
|
|
|
509
509
|
export { CodeEditor as C, VARIABLE_PATTERN as V, createVariableAutocomplete as a, codeLanguages as c, flattenSchemaToVariables as f, useCodemirrorTheme as u, variableHighlight as v };
|
|
510
|
-
//# sourceMappingURL=code-editor-
|
|
510
|
+
//# sourceMappingURL=code-editor-B_v1EfzX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-editor-D69saH4C.js","sources":["../src/ds/components/CodeEditor/code-languages.ts","../src/ds/components/CodeEditor/schema-to-variables.ts","../src/ds/components/CodeEditor/variable-autocomplete-extension.ts","../src/ds/components/CodeEditor/variable-highlight-extension.ts","../src/ds/components/CodeEditor/code-editor.tsx"],"sourcesContent":["import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser: Parameters<typeof StreamLanguage.define>[0]) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\n\n/**\n * A minimal subset of CodeMirror language descriptions used for fenced code\n * blocks inside markdown. Mirrors the relevant entries from\n * `@codemirror/language-data` but only the languages we actually support, so\n * bundlers don't have to emit a chunk for every known language.\n */\nexport const codeLanguages = [\n LanguageDescription.of({\n name: 'JavaScript',\n alias: ['ecmascript', 'js', 'node'],\n extensions: ['js', 'mjs', 'cjs'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n },\n }),\n LanguageDescription.of({\n name: 'JSON',\n alias: ['json5'],\n extensions: ['json', 'map'],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n },\n }),\n LanguageDescription.of({\n name: 'JSX',\n extensions: ['jsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Markdown',\n extensions: ['md', 'markdown', 'mkd'],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n },\n }),\n LanguageDescription.of({\n name: 'TSX',\n extensions: ['tsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'TypeScript',\n alias: ['ts'],\n extensions: ['ts', 'mts', 'cts'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Shell',\n alias: ['bash', 'sh', 'zsh'],\n extensions: ['sh', 'ksh', 'bash'],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n },\n }),\n];\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\n/**\n * Represents a variable completion option derived from a schema\n */\nexport interface VariableCompletion {\n /** The dot-notation path (e.g., \"user.name\") */\n path: string;\n /** Display label for the autocomplete */\n label: string;\n /** Description from the schema, if available */\n description?: string;\n /** The type of the property */\n type?: string;\n}\n\n/**\n * Flattens a JSON Schema into a list of variable completions for autocomplete.\n * Recursively extracts property paths using dot-notation.\n *\n * @param schema - The JSON Schema to flatten\n * @param maxDepth - Maximum recursion depth (default: 5)\n * @returns Array of variable completions\n *\n * @example\n * ```ts\n * const schema = {\n * type: 'object',\n * properties: {\n * user: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * email: { type: 'string' }\n * }\n * }\n * }\n * };\n *\n * flattenSchemaToVariables(schema);\n * // Returns:\n * // [\n * // { path: 'user', label: 'user', type: 'object' },\n * // { path: 'user.name', label: 'user.name', type: 'string' },\n * // { path: 'user.email', label: 'user.email', type: 'string' }\n * // ]\n * ```\n */\nexport function flattenSchemaToVariables(schema: JsonSchema | undefined, maxDepth = 5): VariableCompletion[] {\n if (!schema?.properties) {\n return [];\n }\n\n const results: VariableCompletion[] = [];\n\n function processProperty(property: JsonSchemaProperty, path: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n const type = Array.isArray(property.type) ? property.type.join(' | ') : property.type;\n\n results.push({\n path,\n label: path,\n description: property.description ?? property.title,\n type,\n });\n\n // Recurse into nested object properties\n if (property.properties) {\n for (const [key, nestedProperty] of Object.entries(property.properties)) {\n processProperty(nestedProperty, `${path}.${key}`, depth + 1);\n }\n }\n\n // Handle array items if they have properties (array of objects)\n if (property.items?.properties) {\n // Add a placeholder for array item access (e.g., items[0].name)\n for (const [key, itemProperty] of Object.entries(property.items.properties)) {\n processProperty(itemProperty, `${path}[].${key}`, depth + 1);\n }\n }\n }\n\n for (const [key, property] of Object.entries(schema.properties)) {\n processProperty(property, key, 1);\n }\n\n return results;\n}\n","import { autocompletion } from '@codemirror/autocomplete';\nimport type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport type { Extension } from '@codemirror/state';\nimport { flattenSchemaToVariables } from './schema-to-variables';\nimport type { VariableCompletion } from './schema-to-variables';\nimport type { JsonSchema } from '@/lib/json-schema';\n\n/**\n * Creates a CodeMirror autocomplete extension for {{variable}} placeholders.\n * Triggers when the user types `{{` and shows suggestions derived from the schema.\n *\n * @param schema - JSON Schema to derive variable suggestions from\n * @returns CodeMirror Extension that provides variable autocomplete\n *\n * @example\n * ```tsx\n * const schema = {\n * type: 'object',\n * properties: {\n * user: { type: 'object', properties: { name: { type: 'string' } } }\n * }\n * };\n *\n * <CodeMirror extensions={[createVariableAutocomplete(schema)]} />\n * // Typing \"{{\" will show: user, user.name\n * ```\n */\nexport function createVariableAutocomplete(schema: JsonSchema | undefined): Extension {\n const variables = flattenSchemaToVariables(schema);\n\n return autocompletion({\n override: [createVariableCompletionSource(variables)],\n defaultKeymap: true,\n closeOnBlur: true,\n icons: false,\n });\n}\n\n/**\n * Creates a completion source function for CodeMirror's autocompletion.\n */\nexport function createVariableCompletionSource(\n variables: VariableCompletion[],\n): (context: CompletionContext) => CompletionResult | null {\n return (context: CompletionContext): CompletionResult | null => {\n // Look for {{ pattern before cursor\n const beforeCursor = context.state.sliceDoc(Math.max(0, context.pos - 50), context.pos);\n const match = beforeCursor.match(/\\{\\{([a-zA-Z0-9_.\\[\\]]*)?$/);\n\n if (!match) {\n return null;\n }\n\n // The text after {{ that we're matching against\n const prefix = match[1] ?? '';\n const startPos = context.pos - prefix.length;\n\n // Filter variables based on what the user has typed\n const filteredVariables = prefix\n ? variables.filter(v => v.path.toLowerCase().startsWith(prefix.toLowerCase()))\n : variables;\n\n if (filteredVariables.length === 0) {\n return null;\n }\n\n const completions: Completion[] = filteredVariables.map(variable => ({\n label: variable.path,\n displayLabel: variable.path,\n detail: variable.type,\n info: variable.description,\n apply: (view, completion, from, to) => {\n // Inside an existing placeholder, replace the rest of the identifier and reuse its closing }}\n const rest = view.state.sliceDoc(to);\n const identifierEnd = to + (rest.match(/^[a-zA-Z0-9_.\\[\\]]*/)?.[0].length ?? 0);\n const hasClosingBraces = view.state.sliceDoc(identifierEnd, identifierEnd + 2) === '}}';\n const end = hasClosingBraces ? identifierEnd : to;\n\n const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;\n\n view.dispatch({\n changes: { from, to: end, insert: insertText },\n selection: { anchor: from + insertText.length },\n });\n },\n }));\n\n return {\n from: startPos,\n options: completions,\n validFor: /^[a-zA-Z0-9_.\\[\\]]*$/,\n };\n };\n}\n","import type { DecorationSet, EditorView, ViewUpdate } from '@codemirror/view';\nimport { Decoration, MatchDecorator, ViewPlugin } from '@codemirror/view';\n\n/**\n * Regex pattern to match variable placeholders like {{variableName}} or {{user.name}}\n * Matches: {{ followed by a valid identifier path (with optional dot notation), then }}\n */\nexport const VARIABLE_PATTERN = /\\{\\{([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)\\}\\}/g;\n\nconst variableDecoration = Decoration.mark({\n class: 'cm-variable-highlight',\n});\n\nconst variableMatcher = new MatchDecorator({\n regexp: VARIABLE_PATTERN,\n decoration: () => variableDecoration,\n});\n\nconst variableHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = variableMatcher.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n this.decorations = variableMatcher.updateDeco(update, this.decorations);\n }\n },\n {\n decorations: v => v.decorations,\n },\n);\n\n/**\n * CodeMirror extension that highlights {{variableName}} patterns\n * with orange color and semibold weight\n */\nexport const variableHighlight = variableHighlightPlugin;\n","import { jsonLanguage } from '@codemirror/lang-json';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, Prec } from '@codemirror/state';\nimport type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { draculaInit } from '@uiw/codemirror-theme-dracula';\nimport CodeMirror from '@uiw/react-codemirror';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useMemo } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { codeLanguages } from './code-languages';\nimport { createVariableAutocomplete } from './variable-autocomplete-extension';\nimport { variableHighlight } from './variable-highlight-extension';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { useFieldControlAria } from '@/ds/components/Field/field-control-aria';\nimport { useTheme } from '@/ds/components/ThemeProvider';\nimport { fieldErrorRimWithin, inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport type { JsonSchema } from '@/lib/json-schema';\nimport { cn } from '@/lib/utils';\n\nexport type CodeEditorLanguage = 'json' | 'markdown';\ntype CodeEditorFont = 'body' | 'mono';\n\n/** Original dark theme — draculaInit + custom overrides. Unchanged from before light mode work. */\nfunction buildDarkTheme(font: CodeEditorFont): Extension {\n const baseTheme = draculaInit({\n settings: {\n fontFamily: `var(--font-${font})`,\n fontSize: 'var(--text-body-sm)',\n lineHighlight: 'transparent',\n gutterBackground: 'transparent',\n gutterForeground: 'var(--placeholder)',\n background: 'transparent',\n foreground: 'var(--foreground)',\n caret: 'var(--foreground)',\n },\n styles: [\n { tag: [t.className, t.propertyName], color: 'var(--foreground)' },\n { tag: t.heading, color: 'var(--info-indicator)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--info-indicator)',\n fontWeight: 'bold',\n },\n { tag: t.emphasis, fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: t.strong, fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--info-indicator)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--info-indicator)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: t.quote, fontStyle: 'italic', color: 'var(--placeholder)' },\n ],\n });\n\n const customLineNumberTheme = EditorView.theme({\n '.cm-editor': {\n backgroundColor: 'transparent',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '.cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: 'var(--info-subtle)',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n return [baseTheme, customLineNumberTheme];\n}\n\nfunction buildLightTheme(font: CodeEditorFont): Extension {\n const editorTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--foreground)',\n fontSize: 'var(--text-body-sm)',\n },\n '&.cm-editor .cm-scroller': {\n fontFamily: `var(--font-${font})`,\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n color: 'var(--placeholder)',\n borderRight: 'none',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n backgroundColor: 'transparent',\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '&.cm-focused .cm-selectionBackground, & .cm-line::selection, & .cm-selectionLayer .cm-selectionBackground, .cm-content ::selection':\n {\n background: 'var(--info-edge) !important',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n const highlightStyle = HighlightStyle.define([\n { tag: [t.comment, t.bracket], color: 'var(--placeholder)' },\n { tag: [t.string, t.meta, t.regexp], color: 'var(--syntax-string)' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: 'var(--syntax-literal)' },\n { tag: [t.keyword, t.operator, t.tagName], color: 'var(--syntax-keyword)' },\n { tag: [t.function(t.propertyName), t.propertyName], color: 'var(--syntax-name)' },\n {\n tag: [t.definition(t.variableName), t.function(t.variableName), t.className, t.attributeName],\n color: 'var(--syntax-link)',\n },\n { tag: [t.variableName, t.number], color: 'var(--syntax-name)' },\n { tag: [t.name, t.quote], color: 'var(--syntax-string)' },\n { tag: t.heading, color: 'var(--syntax-link)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--syntax-link)',\n fontWeight: 'bold',\n },\n { tag: [t.emphasis], fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: [t.strong], fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--syntax-link)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--syntax-link)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: [t.deleted], color: 'var(--syntax-keyword)' },\n { tag: t.invalid, color: 'var(--destructive-foreground)' },\n { tag: [t.standard(t.tagName)], color: 'var(--syntax-string)' },\n ]);\n\n return [editorTheme, syntaxHighlighting(highlightStyle)];\n}\n\n// eslint-disable-next-line react-refresh/only-export-components -- shared hook intentionally co-located with the editor it themes\nexport const useCodemirrorTheme = (font: CodeEditorFont = 'mono'): Extension => {\n const isDark = useTheme().resolvedTheme === 'dark';\n return useMemo(() => (isDark ? buildDarkTheme(font) : buildLightTheme(font)), [isDark, font]);\n};\n\nconst codeEditorVariants = cva(\n cn(\n 'relative overflow-hidden font-mono outline-hidden focus-within:outline-hidden focus:outline-hidden',\n 'transition-colors duration-normal ease-out-custom',\n ),\n {\n variants: {\n variant: {\n default: cn(inputSurfaceAndFocusWithinStyle, 'rounded-md p-1', fieldErrorRimWithin),\n embedded: 'rounded-none border-none bg-transparent p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst editorFocusAttributes = Prec.highest(\n EditorView.editorAttributes.of({\n style: 'outline: none',\n }),\n);\n\nconst editorFocusTheme = Prec.highest(\n EditorView.theme({\n '&': {\n outline: 'none',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n outline: 'none',\n },\n '.cm-content': {\n outline: 'none',\n },\n '.cm-content:focus': {\n outline: 'none',\n },\n }),\n);\n\nconst editorFocusExtensions: Extension[] = [editorFocusAttributes, editorFocusTheme];\n\ntype CodeEditorContentAttributes = {\n 'aria-label': string;\n id?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: string;\n};\n\nexport type CodeEditorProps = {\n /** Prose editors can opt into the body face; code stays monospace by default. */\n font?: CodeEditorFont;\n data?: Record<string, unknown> | Array<Record<string, unknown>>;\n value?: string;\n onChange?: (value: string) => void;\n showCopyButton?: boolean;\n className?: string;\n highlightVariables?: boolean;\n language?: CodeEditorLanguage;\n placeholder?: string;\n /** JSON Schema to enable variable autocomplete for {{variable}} placeholders (markdown only) */\n schema?: JsonSchema;\n autoFocus?: boolean;\n /** Show line numbers in the gutter (default: true) */\n lineNumbers?: boolean;\n /** Wrap long lines within the editor viewport (default: true) */\n lineWrapping?: boolean;\n /** When false, makes the editor read-only */\n editable?: boolean;\n} & VariantProps<typeof codeEditorVariants> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport const CodeEditor = forwardRef<ReactCodeMirrorRef, CodeEditorProps>(\n (\n {\n data,\n value,\n onChange,\n showCopyButton = true,\n className,\n language = 'json',\n font = 'mono',\n highlightVariables = false,\n placeholder,\n schema,\n autoFocus,\n lineNumbers = true,\n lineWrapping = true,\n editable,\n variant,\n id,\n 'aria-label': ariaLabelProp,\n 'aria-labelledby': ariaLabelledByProp,\n 'aria-describedby': ariaDescribedByProp,\n 'aria-invalid': ariaInvalidProp,\n ...props\n },\n ref,\n ) => {\n const fieldAria = useFieldControlAria({ 'aria-label': ariaLabelProp });\n const ariaLabel = ariaLabelProp ?? 'Code editor';\n const controlId = id ?? fieldAria.id;\n const ariaLabelledBy = ariaLabelledByProp ?? fieldAria['aria-labelledby'];\n const ariaDescribedBy = ariaDescribedByProp ?? fieldAria['aria-describedby'];\n const ariaInvalid = ariaInvalidProp ?? fieldAria['aria-invalid'];\n const theme = useCodemirrorTheme(font);\n const formattedCode = data ? JSON.stringify(data, null, 2) : (value ?? '');\n\n const extensions = useMemo(() => {\n const contentAttributes: CodeEditorContentAttributes = { 'aria-label': ariaLabel };\n if (controlId) contentAttributes.id = controlId;\n if (ariaLabelledBy) contentAttributes['aria-labelledby'] = ariaLabelledBy;\n if (ariaDescribedBy) contentAttributes['aria-describedby'] = ariaDescribedBy;\n if (ariaInvalid !== undefined) contentAttributes['aria-invalid'] = String(ariaInvalid);\n\n const exts: Extension[] = [...editorFocusExtensions, EditorView.contentAttributes.of(contentAttributes)];\n\n if (lineWrapping) {\n exts.push(EditorView.lineWrapping);\n }\n\n if (language === 'json') {\n exts.push(jsonLanguage);\n } else if (language === 'markdown') {\n exts.push(markdown({ base: markdownLanguage, codeLanguages }));\n }\n\n if (highlightVariables && language === 'markdown') {\n exts.push(variableHighlight);\n }\n\n if (schema && language === 'markdown') {\n exts.push(createVariableAutocomplete(schema));\n }\n\n if (editable === false) {\n exts.push(EditorState.readOnly.of(true));\n }\n\n return exts;\n }, [\n language,\n highlightVariables,\n schema,\n editable,\n lineWrapping,\n controlId,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n ariaInvalid,\n ]);\n\n return (\n <div className={cn(codeEditorVariants({ variant }), className)} {...props}>\n {showCopyButton && <CopyButton content={formattedCode} className=\"absolute top-2 right-2 z-20\" />}\n <CodeMirror\n ref={ref}\n value={formattedCode}\n theme={theme}\n extensions={extensions}\n onChange={onChange}\n editable={editable}\n aria-label={ariaLabel}\n placeholder={placeholder}\n height=\"100%\"\n style={{ height: '100%' }}\n autoFocus={autoFocus}\n basicSetup={{ lineNumbers }}\n />\n </div>\n );\n },\n);\n"],"names":["t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"code-editor-B_v1EfzX.js","sources":["../src/ds/components/CodeEditor/code-languages.ts","../src/ds/components/CodeEditor/schema-to-variables.ts","../src/ds/components/CodeEditor/variable-autocomplete-extension.ts","../src/ds/components/CodeEditor/variable-highlight-extension.ts","../src/ds/components/CodeEditor/code-editor.tsx"],"sourcesContent":["import { LanguageDescription, LanguageSupport, StreamLanguage } from '@codemirror/language';\n\nfunction legacy(parser: Parameters<typeof StreamLanguage.define>[0]) {\n return new LanguageSupport(StreamLanguage.define(parser));\n}\n\n/**\n * A minimal subset of CodeMirror language descriptions used for fenced code\n * blocks inside markdown. Mirrors the relevant entries from\n * `@codemirror/language-data` but only the languages we actually support, so\n * bundlers don't have to emit a chunk for every known language.\n */\nexport const codeLanguages = [\n LanguageDescription.of({\n name: 'JavaScript',\n alias: ['ecmascript', 'js', 'node'],\n extensions: ['js', 'mjs', 'cjs'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript());\n },\n }),\n LanguageDescription.of({\n name: 'JSON',\n alias: ['json5'],\n extensions: ['json', 'map'],\n load() {\n return import('@codemirror/lang-json').then(m => m.json());\n },\n }),\n LanguageDescription.of({\n name: 'JSX',\n extensions: ['jsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Markdown',\n extensions: ['md', 'markdown', 'mkd'],\n load() {\n return import('@codemirror/lang-markdown').then(m => m.markdown());\n },\n }),\n LanguageDescription.of({\n name: 'TSX',\n extensions: ['tsx'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ jsx: true, typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'TypeScript',\n alias: ['ts'],\n extensions: ['ts', 'mts', 'cts'],\n load() {\n return import('@codemirror/lang-javascript').then(m => m.javascript({ typescript: true }));\n },\n }),\n LanguageDescription.of({\n name: 'Shell',\n alias: ['bash', 'sh', 'zsh'],\n extensions: ['sh', 'ksh', 'bash'],\n filename: /^PKGBUILD$/,\n load() {\n return import('@codemirror/legacy-modes/mode/shell').then(m => legacy(m.shell));\n },\n }),\n];\n","import type { JsonSchema, JsonSchemaProperty } from '@/lib/json-schema';\n\n/**\n * Represents a variable completion option derived from a schema\n */\nexport interface VariableCompletion {\n /** The dot-notation path (e.g., \"user.name\") */\n path: string;\n /** Display label for the autocomplete */\n label: string;\n /** Description from the schema, if available */\n description?: string;\n /** The type of the property */\n type?: string;\n}\n\n/**\n * Flattens a JSON Schema into a list of variable completions for autocomplete.\n * Recursively extracts property paths using dot-notation.\n *\n * @param schema - The JSON Schema to flatten\n * @param maxDepth - Maximum recursion depth (default: 5)\n * @returns Array of variable completions\n *\n * @example\n * ```ts\n * const schema = {\n * type: 'object',\n * properties: {\n * user: {\n * type: 'object',\n * properties: {\n * name: { type: 'string' },\n * email: { type: 'string' }\n * }\n * }\n * }\n * };\n *\n * flattenSchemaToVariables(schema);\n * // Returns:\n * // [\n * // { path: 'user', label: 'user', type: 'object' },\n * // { path: 'user.name', label: 'user.name', type: 'string' },\n * // { path: 'user.email', label: 'user.email', type: 'string' }\n * // ]\n * ```\n */\nexport function flattenSchemaToVariables(schema: JsonSchema | undefined, maxDepth = 5): VariableCompletion[] {\n if (!schema?.properties) {\n return [];\n }\n\n const results: VariableCompletion[] = [];\n\n function processProperty(property: JsonSchemaProperty, path: string, depth: number): void {\n if (depth > maxDepth) {\n return;\n }\n\n const type = Array.isArray(property.type) ? property.type.join(' | ') : property.type;\n\n results.push({\n path,\n label: path,\n description: property.description ?? property.title,\n type,\n });\n\n // Recurse into nested object properties\n if (property.properties) {\n for (const [key, nestedProperty] of Object.entries(property.properties)) {\n processProperty(nestedProperty, `${path}.${key}`, depth + 1);\n }\n }\n\n // Handle array items if they have properties (array of objects)\n if (property.items?.properties) {\n // Add a placeholder for array item access (e.g., items[0].name)\n for (const [key, itemProperty] of Object.entries(property.items.properties)) {\n processProperty(itemProperty, `${path}[].${key}`, depth + 1);\n }\n }\n }\n\n for (const [key, property] of Object.entries(schema.properties)) {\n processProperty(property, key, 1);\n }\n\n return results;\n}\n","import { autocompletion } from '@codemirror/autocomplete';\nimport type { Completion, CompletionContext, CompletionResult } from '@codemirror/autocomplete';\nimport type { Extension } from '@codemirror/state';\nimport { flattenSchemaToVariables } from './schema-to-variables';\nimport type { VariableCompletion } from './schema-to-variables';\nimport type { JsonSchema } from '@/lib/json-schema';\n\n/**\n * Creates a CodeMirror autocomplete extension for {{variable}} placeholders.\n * Triggers when the user types `{{` and shows suggestions derived from the schema.\n *\n * @param schema - JSON Schema to derive variable suggestions from\n * @returns CodeMirror Extension that provides variable autocomplete\n *\n * @example\n * ```tsx\n * const schema = {\n * type: 'object',\n * properties: {\n * user: { type: 'object', properties: { name: { type: 'string' } } }\n * }\n * };\n *\n * <CodeMirror extensions={[createVariableAutocomplete(schema)]} />\n * // Typing \"{{\" will show: user, user.name\n * ```\n */\nexport function createVariableAutocomplete(schema: JsonSchema | undefined): Extension {\n const variables = flattenSchemaToVariables(schema);\n\n return autocompletion({\n override: [createVariableCompletionSource(variables)],\n defaultKeymap: true,\n closeOnBlur: true,\n icons: false,\n });\n}\n\n/**\n * Creates a completion source function for CodeMirror's autocompletion.\n */\nexport function createVariableCompletionSource(\n variables: VariableCompletion[],\n): (context: CompletionContext) => CompletionResult | null {\n return (context: CompletionContext): CompletionResult | null => {\n // Look for {{ pattern before cursor\n const beforeCursor = context.state.sliceDoc(Math.max(0, context.pos - 50), context.pos);\n const match = beforeCursor.match(/\\{\\{([a-zA-Z0-9_.\\[\\]]*)?$/);\n\n if (!match) {\n return null;\n }\n\n // The text after {{ that we're matching against\n const prefix = match[1] ?? '';\n const startPos = context.pos - prefix.length;\n\n // Filter variables based on what the user has typed\n const filteredVariables = prefix\n ? variables.filter(v => v.path.toLowerCase().startsWith(prefix.toLowerCase()))\n : variables;\n\n if (filteredVariables.length === 0) {\n return null;\n }\n\n const completions: Completion[] = filteredVariables.map(variable => ({\n label: variable.path,\n displayLabel: variable.path,\n detail: variable.type,\n info: variable.description,\n apply: (view, completion, from, to) => {\n // Inside an existing placeholder, replace the rest of the identifier and reuse its closing }}\n const rest = view.state.sliceDoc(to);\n const identifierEnd = to + (rest.match(/^[a-zA-Z0-9_.\\[\\]]*/)?.[0].length ?? 0);\n const hasClosingBraces = view.state.sliceDoc(identifierEnd, identifierEnd + 2) === '}}';\n const end = hasClosingBraces ? identifierEnd : to;\n\n const insertText = hasClosingBraces ? completion.label : `${completion.label}}}`;\n\n view.dispatch({\n changes: { from, to: end, insert: insertText },\n selection: { anchor: from + insertText.length },\n });\n },\n }));\n\n return {\n from: startPos,\n options: completions,\n validFor: /^[a-zA-Z0-9_.\\[\\]]*$/,\n };\n };\n}\n","import type { DecorationSet, EditorView, ViewUpdate } from '@codemirror/view';\nimport { Decoration, MatchDecorator, ViewPlugin } from '@codemirror/view';\n\n/**\n * Regex pattern to match variable placeholders like {{variableName}} or {{user.name}}\n * Matches: {{ followed by a valid identifier path (with optional dot notation), then }}\n */\nexport const VARIABLE_PATTERN = /\\{\\{([a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*)\\}\\}/g;\n\nconst variableDecoration = Decoration.mark({\n class: 'cm-variable-highlight',\n});\n\nconst variableMatcher = new MatchDecorator({\n regexp: VARIABLE_PATTERN,\n decoration: () => variableDecoration,\n});\n\nconst variableHighlightPlugin = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = variableMatcher.createDeco(view);\n }\n\n update(update: ViewUpdate) {\n this.decorations = variableMatcher.updateDeco(update, this.decorations);\n }\n },\n {\n decorations: v => v.decorations,\n },\n);\n\n/**\n * CodeMirror extension that highlights {{variableName}} patterns\n * with orange color and semibold weight\n */\nexport const variableHighlight = variableHighlightPlugin;\n","import { jsonLanguage } from '@codemirror/lang-json';\nimport { markdown, markdownLanguage } from '@codemirror/lang-markdown';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { EditorState, Prec } from '@codemirror/state';\nimport type { Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { tags as t } from '@lezer/highlight';\nimport { draculaInit } from '@uiw/codemirror-theme-dracula';\nimport CodeMirror from '@uiw/react-codemirror';\nimport type { ReactCodeMirrorRef } from '@uiw/react-codemirror';\nimport { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport { forwardRef, useMemo } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport { codeLanguages } from './code-languages';\nimport { createVariableAutocomplete } from './variable-autocomplete-extension';\nimport { variableHighlight } from './variable-highlight-extension';\nimport { CopyButton } from '@/ds/components/CopyButton';\nimport { useFieldControlAria } from '@/ds/components/Field/field-control-aria';\nimport { useTheme } from '@/ds/components/ThemeProvider';\nimport { fieldErrorRimWithin, inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport type { JsonSchema } from '@/lib/json-schema';\nimport { cn } from '@/lib/utils';\n\nexport type CodeEditorLanguage = 'json' | 'markdown';\ntype CodeEditorFont = 'body' | 'mono';\n\n/** Original dark theme — draculaInit + custom overrides. Unchanged from before light mode work. */\nfunction buildDarkTheme(font: CodeEditorFont): Extension {\n const baseTheme = draculaInit({\n settings: {\n fontFamily: `var(--font-${font})`,\n fontSize: 'var(--text-body-sm)',\n lineHighlight: 'transparent',\n gutterBackground: 'transparent',\n gutterForeground: 'var(--placeholder)',\n background: 'transparent',\n foreground: 'var(--foreground)',\n caret: 'var(--foreground)',\n },\n styles: [\n { tag: [t.className, t.propertyName], color: 'var(--foreground)' },\n { tag: t.heading, color: 'var(--info-indicator)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--info-indicator)',\n fontWeight: 'bold',\n },\n { tag: t.emphasis, fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: t.strong, fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--info-indicator)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--info-indicator)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: t.quote, fontStyle: 'italic', color: 'var(--placeholder)' },\n ],\n });\n\n const customLineNumberTheme = EditorView.theme({\n '.cm-editor': {\n backgroundColor: 'transparent',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '.cm-selectionBackground, .cm-content ::selection': {\n backgroundColor: 'var(--info-subtle)',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n return [baseTheme, customLineNumberTheme];\n}\n\nfunction buildLightTheme(font: CodeEditorFont): Extension {\n const editorTheme = EditorView.theme({\n '&': {\n backgroundColor: 'transparent',\n color: 'var(--foreground)',\n fontSize: 'var(--text-body-sm)',\n },\n '&.cm-editor .cm-scroller': {\n fontFamily: `var(--font-${font})`,\n },\n '.cm-gutters': {\n backgroundColor: 'transparent',\n color: 'var(--placeholder)',\n borderRight: 'none',\n },\n '.cm-content': {\n color: 'var(--foreground)',\n caretColor: 'var(--foreground)',\n },\n '.cm-activeLine': {\n backgroundColor: 'transparent',\n },\n '.cm-lineNumbers .cm-gutterElement': {\n color: 'var(--placeholder)',\n },\n '.cm-activeLineGutter': {\n backgroundColor: 'transparent',\n color: 'var(--muted-foreground)',\n },\n '.cm-cursor, .cm-dropCursor': {\n borderLeftColor: 'var(--foreground)',\n },\n '&.cm-focused .cm-selectionBackground, & .cm-line::selection, & .cm-selectionLayer .cm-selectionBackground, .cm-content ::selection':\n {\n background: 'var(--info-edge) !important',\n },\n '.cm-tooltip-autocomplete': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n borderRadius: '6px',\n boxShadow: 'var(--elevation-overlay)',\n },\n '.cm-tooltip-autocomplete > ul': {\n fontFamily: 'var(--font-mono)',\n },\n '.cm-completionLabel': {\n color: 'var(--foreground)',\n },\n '.cm-completionDetail': {\n color: 'var(--muted-foreground)',\n fontSize: 'var(--text-caption)',\n marginLeft: 'auto',\n paddingLeft: '12px',\n },\n '.cm-completionInfo': {\n backgroundColor: 'var(--background)',\n border: '1px solid var(--border)',\n color: 'var(--muted-foreground)',\n padding: '8px 12px',\n },\n '.cm-completionIcon': {\n display: 'none',\n },\n 'ul.cm-completionList li[aria-selected]': {\n backgroundColor: 'var(--fill-hover)',\n color: 'var(--foreground)',\n },\n '.cm-line .cm-variable-highlight': {\n color: 'var(--warning-foreground) !important',\n fontWeight: '500',\n },\n });\n\n const highlightStyle = HighlightStyle.define([\n { tag: [t.comment, t.bracket], color: 'var(--placeholder)' },\n { tag: [t.string, t.meta, t.regexp], color: 'var(--syntax-string)' },\n { tag: [t.atom, t.bool, t.special(t.variableName)], color: 'var(--syntax-literal)' },\n { tag: [t.keyword, t.operator, t.tagName], color: 'var(--syntax-keyword)' },\n { tag: [t.function(t.propertyName), t.propertyName], color: 'var(--syntax-name)' },\n {\n tag: [t.definition(t.variableName), t.function(t.variableName), t.className, t.attributeName],\n color: 'var(--syntax-link)',\n },\n { tag: [t.variableName, t.number], color: 'var(--syntax-name)' },\n { tag: [t.name, t.quote], color: 'var(--syntax-string)' },\n { tag: t.heading, color: 'var(--syntax-link)', fontWeight: 'bold' },\n {\n tag: [t.heading1, t.heading2, t.heading3, t.heading4, t.heading5, t.heading6],\n color: 'var(--syntax-link)',\n fontWeight: 'bold',\n },\n { tag: [t.emphasis], fontStyle: 'italic', color: 'var(--foreground)' },\n { tag: [t.strong], fontWeight: 'bold', color: 'var(--foreground)' },\n { tag: t.link, color: 'var(--syntax-link)', textDecoration: 'underline' },\n { tag: t.url, color: 'var(--syntax-link)' },\n { tag: t.monospace, color: 'var(--foreground)' },\n { tag: t.strikethrough, textDecoration: 'line-through' },\n { tag: [t.deleted], color: 'var(--syntax-keyword)' },\n { tag: t.invalid, color: 'var(--destructive-foreground)' },\n { tag: [t.standard(t.tagName)], color: 'var(--syntax-string)' },\n ]);\n\n return [editorTheme, syntaxHighlighting(highlightStyle)];\n}\n\n// eslint-disable-next-line react-refresh/only-export-components -- shared hook intentionally co-located with the editor it themes\nexport const useCodemirrorTheme = (font: CodeEditorFont = 'mono'): Extension => {\n const isDark = useTheme().resolvedTheme === 'dark';\n return useMemo(() => (isDark ? buildDarkTheme(font) : buildLightTheme(font)), [isDark, font]);\n};\n\nconst codeEditorVariants = cva(\n cn(\n 'relative overflow-hidden font-mono outline-hidden focus-within:outline-hidden focus:outline-hidden',\n 'transition-colors duration-normal ease-out-custom',\n ),\n {\n variants: {\n variant: {\n default: cn(inputSurfaceAndFocusWithinStyle, 'rounded-md p-1', fieldErrorRimWithin),\n embedded: 'rounded-none border-none bg-transparent p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst editorFocusAttributes = Prec.highest(\n EditorView.editorAttributes.of({\n style: 'outline: none',\n }),\n);\n\nconst editorFocusTheme = Prec.highest(\n EditorView.theme({\n '&': {\n outline: 'none',\n },\n '&.cm-focused': {\n outline: 'none',\n },\n '.cm-scroller': {\n outline: 'none',\n },\n '.cm-content': {\n outline: 'none',\n },\n '.cm-content:focus': {\n outline: 'none',\n },\n }),\n);\n\nconst editorFocusExtensions: Extension[] = [editorFocusAttributes, editorFocusTheme];\n\ntype CodeEditorContentAttributes = {\n 'aria-label': string;\n id?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-invalid'?: string;\n};\n\nexport type CodeEditorProps = {\n /** Prose editors can opt into the body face; code stays monospace by default. */\n font?: CodeEditorFont;\n data?: Record<string, unknown> | Array<Record<string, unknown>>;\n value?: string;\n onChange?: (value: string) => void;\n showCopyButton?: boolean;\n className?: string;\n highlightVariables?: boolean;\n language?: CodeEditorLanguage;\n placeholder?: string;\n /** JSON Schema to enable variable autocomplete for {{variable}} placeholders (markdown only) */\n schema?: JsonSchema;\n autoFocus?: boolean;\n /** Show line numbers in the gutter (default: true) */\n lineNumbers?: boolean;\n /** Wrap long lines within the editor viewport (default: true) */\n lineWrapping?: boolean;\n /** When false, makes the editor read-only */\n editable?: boolean;\n} & VariantProps<typeof codeEditorVariants> &\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>;\n\nexport const CodeEditor = forwardRef<ReactCodeMirrorRef, CodeEditorProps>(\n (\n {\n data,\n value,\n onChange,\n showCopyButton = true,\n className,\n language = 'json',\n font = 'mono',\n highlightVariables = false,\n placeholder,\n schema,\n autoFocus,\n lineNumbers = true,\n lineWrapping = true,\n editable,\n variant,\n id,\n 'aria-label': ariaLabelProp,\n 'aria-labelledby': ariaLabelledByProp,\n 'aria-describedby': ariaDescribedByProp,\n 'aria-invalid': ariaInvalidProp,\n ...props\n },\n ref,\n ) => {\n const fieldAria = useFieldControlAria({ 'aria-label': ariaLabelProp });\n const ariaLabel = ariaLabelProp ?? 'Code editor';\n const controlId = id ?? fieldAria.id;\n const ariaLabelledBy = ariaLabelledByProp ?? fieldAria['aria-labelledby'];\n const ariaDescribedBy = ariaDescribedByProp ?? fieldAria['aria-describedby'];\n const ariaInvalid = ariaInvalidProp ?? fieldAria['aria-invalid'];\n const theme = useCodemirrorTheme(font);\n const formattedCode = data ? JSON.stringify(data, null, 2) : (value ?? '');\n\n const extensions = useMemo(() => {\n const contentAttributes: CodeEditorContentAttributes = { 'aria-label': ariaLabel };\n if (controlId) contentAttributes.id = controlId;\n if (ariaLabelledBy) contentAttributes['aria-labelledby'] = ariaLabelledBy;\n if (ariaDescribedBy) contentAttributes['aria-describedby'] = ariaDescribedBy;\n if (ariaInvalid !== undefined) contentAttributes['aria-invalid'] = String(ariaInvalid);\n\n const exts: Extension[] = [...editorFocusExtensions, EditorView.contentAttributes.of(contentAttributes)];\n\n if (lineWrapping) {\n exts.push(EditorView.lineWrapping);\n }\n\n if (language === 'json') {\n exts.push(jsonLanguage);\n } else if (language === 'markdown') {\n exts.push(markdown({ base: markdownLanguage, codeLanguages }));\n }\n\n if (highlightVariables && language === 'markdown') {\n exts.push(variableHighlight);\n }\n\n if (schema && language === 'markdown') {\n exts.push(createVariableAutocomplete(schema));\n }\n\n if (editable === false) {\n exts.push(EditorState.readOnly.of(true));\n }\n\n return exts;\n }, [\n language,\n highlightVariables,\n schema,\n editable,\n lineWrapping,\n controlId,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n ariaInvalid,\n ]);\n\n return (\n <div className={cn(codeEditorVariants({ variant }), className)} {...props}>\n {showCopyButton && <CopyButton content={formattedCode} className=\"absolute top-2 right-2 z-20\" />}\n <CodeMirror\n ref={ref}\n value={formattedCode}\n theme={theme}\n extensions={extensions}\n onChange={onChange}\n editable={editable}\n aria-label={ariaLabel}\n placeholder={placeholder}\n height=\"100%\"\n style={{ height: '100%' }}\n autoFocus={autoFocus}\n basicSetup={{ lineNumbers }}\n />\n </div>\n );\n },\n);\n"],"names":["t"],"mappings":"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"}
|