@mastra/playground-ui 62.0.0-alpha.2 → 62.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/dist/{activity-maXCNWZp.js → activity-BsrB5ADa.js} +7 -5
- package/dist/activity-BsrB5ADa.js.map +1 -0
- package/dist/{activity-pXCpwxxi.cjs → activity-CaFdLiPz.cjs} +6 -4
- package/dist/activity-CaFdLiPz.cjs.map +1 -0
- package/dist/app-shell.css +7 -0
- package/dist/{ask-user-card-C14RGsoO.cjs → ask-user-card-BHIYyRdy.cjs} +2 -2
- package/dist/{ask-user-card-C14RGsoO.cjs.map → ask-user-card-BHIYyRdy.cjs.map} +1 -1
- package/dist/{ask-user-card-C01JQ7bo.js → ask-user-card-BaaCfWFs.js} +2 -2
- package/dist/{ask-user-card-C01JQ7bo.js.map → ask-user-card-BaaCfWFs.js.map} +1 -1
- package/dist/{collapsible-BzlQAuym.cjs → collapsible-C6BZhVRG.cjs} +2 -10
- package/dist/collapsible-C6BZhVRG.cjs.map +1 -0
- package/dist/{collapsible-8h5KBZPX.js → collapsible-DglEffBF.js} +2 -10
- package/dist/collapsible-DglEffBF.js.map +1 -0
- package/dist/{combobox-8_JEWMYs.js → combobox-CMu7NDj6.js} +10 -2
- package/dist/combobox-CMu7NDj6.js.map +1 -0
- package/dist/{combobox-Csiduxme.cjs → combobox-DW7-4bGp.cjs} +10 -2
- package/dist/combobox-DW7-4bGp.cjs.map +1 -0
- package/dist/{command-C-i5cx8D.js → command-BW5Jyad6.js} +4 -2
- package/dist/command-BW5Jyad6.js.map +1 -0
- package/dist/{command-Cq-K24jI.cjs → command-Bv53_kMY.cjs} +4 -2
- package/dist/command-Bv53_kMY.cjs.map +1 -0
- package/dist/components/ClampedText.cjs.js +2 -2
- package/dist/components/ClampedText.cjs.js.map +1 -1
- package/dist/components/ClampedText.es.js +2 -2
- package/dist/components/ClampedText.es.js.map +1 -1
- package/dist/components/Collapsible.cjs.js +1 -1
- package/dist/components/Collapsible.es.js +1 -1
- package/dist/components/Combobox.cjs.js +1 -1
- package/dist/components/Combobox.es.js +1 -1
- 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 +1 -1
- package/dist/components/Comment.es.js +1 -1
- package/dist/components/Composer.cjs.js +1 -1
- package/dist/components/Composer.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataList.cjs.js +3 -3
- package/dist/components/DataList.es.js +4 -4
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +1 -1
- package/dist/components/DateTimePicker.es.js +1 -1
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/DisclosureChevron.cjs.js +10 -0
- package/dist/components/DisclosureChevron.cjs.js.map +1 -0
- package/dist/components/DisclosureChevron.d.ts +2 -0
- package/dist/components/DisclosureChevron.es.js +2 -0
- package/dist/components/DisclosureChevron.es.js.map +1 -0
- package/dist/components/EnvironmentVariablesEditor.cjs.js +2 -2
- package/dist/components/EnvironmentVariablesEditor.es.js +2 -2
- package/dist/components/FilterBar.cjs.js +3 -1
- package/dist/components/FilterBar.cjs.js.map +1 -1
- package/dist/components/FilterBar.es.js +4 -2
- package/dist/components/FilterBar.es.js.map +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +1 -1
- package/dist/components/FormFieldBlocks.es.js +1 -1
- package/dist/components/Input.cjs.js +1 -1
- package/dist/components/Input.es.js +1 -1
- package/dist/components/InputGroup.cjs.js +1 -1
- package/dist/components/InputGroup.es.js +1 -1
- package/dist/components/InputNumber.cjs.js +5 -3
- package/dist/components/InputNumber.cjs.js.map +1 -1
- package/dist/components/InputNumber.es.js +5 -3
- package/dist/components/InputNumber.es.js.map +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +1 -1
- package/dist/components/JSONSchemaForm.es.js +1 -1
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +3 -3
- package/dist/components/LogsDataList.es.js +3 -3
- 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/PropertyFilter.cjs.js +2 -2
- package/dist/components/PropertyFilter.es.js +3 -3
- package/dist/components/RuleBuilder.cjs.js +1 -1
- package/dist/components/RuleBuilder.es.js +1 -1
- package/dist/components/SavedViews.cjs.js +3 -1
- package/dist/components/SavedViews.cjs.js.map +1 -1
- package/dist/components/SavedViews.es.js +3 -1
- package/dist/components/SavedViews.es.js.map +1 -1
- package/dist/components/SearchInput.cjs.js +1 -1
- package/dist/components/SearchInput.es.js +1 -1
- package/dist/components/Sidebar.cjs.js +5 -4
- package/dist/components/Sidebar.cjs.js.map +1 -1
- package/dist/components/Sidebar.es.js +5 -4
- package/dist/components/Sidebar.es.js.map +1 -1
- package/dist/components/Tree.cjs.js +1 -1
- package/dist/components/Tree.es.js +1 -1
- package/dist/components/Workflow.cjs.js +1 -1
- package/dist/components/Workflow.es.js +1 -1
- package/dist/components/ai/activity.cjs.js +4 -4
- package/dist/components/ai/activity.es.js +4 -4
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.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 +1 -1
- package/dist/components/ai/tool-call.es.js +1 -1
- package/dist/{composer-DhxSetWI.cjs → composer-Cg5bXN1r.cjs} +5 -3
- package/dist/composer-Cg5bXN1r.cjs.map +1 -0
- package/dist/{composer-CIfMr8q5.js → composer-CxmOOUX8.js} +5 -3
- package/dist/composer-CxmOOUX8.js.map +1 -0
- package/dist/{data-code-section-CvLs4lM8.js → data-code-section-B1dGZ0ds.js} +2 -2
- package/dist/{data-code-section-CvLs4lM8.js.map → data-code-section-B1dGZ0ds.js.map} +1 -1
- package/dist/{data-code-section-D0NR1REP.cjs → data-code-section-BTZPG2zM.cjs} +2 -2
- package/dist/{data-code-section-D0NR1REP.cjs.map → data-code-section-BTZPG2zM.cjs.map} +1 -1
- package/dist/{data-list-BfepBJLG.js → data-list-4UMxoFNU.js} +192 -11
- package/dist/data-list-4UMxoFNU.js.map +1 -0
- package/dist/{data-list-oQsJVUa6.cjs → data-list-CqVYt2aN.cjs} +191 -10
- package/dist/data-list-CqVYt2aN.cjs.map +1 -0
- package/dist/{data-list-skeleton-BE7yRNks.cjs → data-list-skeleton-BMGppDAy.cjs} +3 -3
- package/dist/data-list-skeleton-BMGppDAy.cjs.map +1 -0
- package/dist/{data-list-skeleton-DnVnqTGL.js → data-list-skeleton-DGNzfd4Y.js} +3 -3
- package/dist/data-list-skeleton-DGNzfd4Y.js.map +1 -0
- package/dist/{data-panel-BLk0mZe6.js → data-panel-VYp4slDb.js} +2 -2
- package/dist/{data-panel-BLk0mZe6.js.map → data-panel-VYp4slDb.js.map} +1 -1
- package/dist/{data-panel-BaqnMzRn.cjs → data-panel-r1LYHphg.cjs} +2 -2
- package/dist/{data-panel-BaqnMzRn.cjs.map → data-panel-r1LYHphg.cjs.map} +1 -1
- package/dist/date-time-range-picker-BBbF3LWF.cjs +210 -0
- package/dist/date-time-range-picker-BBbF3LWF.cjs.map +1 -0
- package/dist/date-time-range-picker-CUUg0sIl.js +208 -0
- package/dist/date-time-range-picker-CUUg0sIl.js.map +1 -0
- package/dist/disclosure-chevron-BWZ8Alz1.js +33 -0
- package/dist/disclosure-chevron-BWZ8Alz1.js.map +1 -0
- package/dist/disclosure-chevron-B_gmYFR5.cjs +35 -0
- package/dist/disclosure-chevron-B_gmYFR5.cjs.map +1 -0
- package/dist/domains/chat/attachments/composer-attachment-list.cjs.js +1 -1
- package/dist/domains/chat/attachments/composer-attachment-list.es.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/context/chat-context.cjs.js.map +1 -1
- package/dist/domains/chat/context/chat-context.es.js.map +1 -1
- package/dist/domains/chat/messages/message-row.cjs.js +2 -2
- package/dist/domains/chat/messages/message-row.es.js +2 -2
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +16 -8
- package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +17 -9
- package/dist/domains/chat/messages/renderers/message-text.es.js.map +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/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/skill-message.cjs.js +2 -2
- package/dist/domains/chat/messages/skill-message.es.js +2 -2
- package/dist/domains/chat/messages/system-reminder-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/system-reminder-badge.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 +1 -1
- package/dist/domains/chat/tools/badges/agent-badge.es.js +1 -1
- 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/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/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/workflow-badge.cjs.js +1 -2
- package/dist/domains/chat/tools/badges/workflow-badge.cjs.js.map +1 -1
- package/dist/domains/chat/tools/badges/workflow-badge.es.js +1 -2
- package/dist/domains/chat/tools/badges/workflow-badge.es.js.map +1 -1
- 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/logs/components/log-data-panel.cjs.js +1 -1
- package/dist/domains/logs/components/log-data-panel.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +3 -3
- package/dist/domains/logs/components/logs-list-view.es.js +3 -3
- 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/metrics/components/agent-runs-card.cjs.js +0 -1
- package/dist/domains/metrics/components/agent-runs-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js +0 -1
- package/dist/domains/metrics/components/agent-runs-card.es.js.map +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 +2 -1
- package/dist/domains/metrics/components/failure-rate-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js +2 -1
- package/dist/domains/metrics/components/failure-rate-card.es.js.map +1 -1
- package/dist/domains/metrics/components/latency-card.cjs.js +0 -1
- package/dist/domains/metrics/components/latency-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card.es.js +0 -1
- package/dist/domains/metrics/components/latency-card.es.js.map +1 -1
- package/dist/domains/metrics/components/scores-card.cjs.js +0 -1
- package/dist/domains/metrics/components/scores-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card.es.js +0 -1
- package/dist/domains/metrics/components/scores-card.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js +0 -1
- package/dist/domains/metrics/components/token-usage-card.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-card.es.js +0 -1
- package/dist/domains/metrics/components/token-usage-card.es.js.map +1 -1
- package/dist/domains/scores/components/score-data-panel.cjs.js +13 -11
- package/dist/domains/scores/components/score-data-panel.cjs.js.map +1 -1
- package/dist/domains/scores/components/score-data-panel.es.js +13 -11
- package/dist/domains/scores/components/score-data-panel.es.js.map +1 -1
- package/dist/domains/scores/components/span-scoring.cjs.js +1 -1
- package/dist/domains/scores/components/span-scoring.es.js +1 -1
- package/dist/domains/scores/components/trace-scores-tab.cjs.js +5 -21
- package/dist/domains/scores/components/trace-scores-tab.cjs.js.map +1 -1
- package/dist/domains/scores/components/trace-scores-tab.es.js +5 -21
- package/dist/domains/scores/components/trace-scores-tab.es.js.map +1 -1
- package/dist/domains/traces/components/feedback-thread.cjs.js +1 -1
- package/dist/domains/traces/components/feedback-thread.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +1 -1
- package/dist/domains/traces/components/span-data-panel-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 +3 -3
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +3 -3
- 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-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- 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-view-by-trace.cjs.js +0 -1
- 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 +0 -1
- package/dist/domains/traces/components/thread-view-by-trace.es.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +56 -21
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +57 -22
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.cjs.js +4 -5
- package/dist/domains/traces/components/trace-data-panel.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel.es.js +4 -5
- 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-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-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-view.cjs.js +126 -112
- package/dist/domains/traces/components/traces-list-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +127 -113
- package/dist/domains/traces/components/traces-list-view.es.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.es.js +2 -2
- package/dist/domains/traces/trace-list-columns.cjs.js +15 -0
- package/dist/domains/traces/trace-list-columns.cjs.js.map +1 -1
- package/dist/domains/traces/trace-list-columns.es.js +15 -1
- package/dist/domains/traces/trace-list-columns.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 +3 -2
- package/dist/domains/workflows/components/workflow-information.cjs.js.map +1 -1
- package/dist/domains/workflows/components/workflow-information.es.js +4 -3
- package/dist/domains/workflows/components/workflow-information.es.js.map +1 -1
- package/dist/domains/workflows/components/workflow-step-detail.cjs.js +2 -2
- package/dist/domains/workflows/components/workflow-step-detail.es.js +2 -2
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js +4 -3
- package/dist/domains/workflows/components/workflows-list/workflows-list.cjs.js.map +1 -1
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js +5 -4
- package/dist/domains/workflows/components/workflows-list/workflows-list.es.js.map +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js +3 -3
- package/dist/domains/workflows/runs/workflow-run-list.cjs.js.map +1 -1
- package/dist/domains/workflows/runs/workflow-run-list.es.js +3 -3
- package/dist/domains/workflows/runs/workflow-run-list.es.js.map +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-card.cjs.js +13 -11
- package/dist/domains/workflows/workflow/workflow-card.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-card.es.js +13 -11
- package/dist/domains/workflows/workflow/workflow-card.es.js.map +1 -1
- 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 +3 -2
- package/dist/domains/workflows/workflow/workflow-input-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-input-data.es.js +4 -3
- package/dist/domains/workflows/workflow/workflow-input-data.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-nested-graph.cjs.js +2 -2
- package/dist/domains/workflows/workflow/workflow-nested-graph.es.js +2 -2
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js +3 -2
- package/dist/domains/workflows/workflow/workflow-run-data.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-run-data.es.js +4 -3
- package/dist/domains/workflows/workflow/workflow-run-data.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js +3 -9
- package/dist/domains/workflows/workflow/workflow-suspended-steps.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js +4 -10
- package/dist/domains/workflows/workflow/workflow-suspended-steps.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js +3 -2
- package/dist/domains/workflows/workflow/workflow-time-travel-form.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js +4 -3
- package/dist/domains/workflows/workflow/workflow-time-travel-form.es.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js +3 -8
- package/dist/domains/workflows/workflow/workflow-timeline.cjs.js.map +1 -1
- package/dist/domains/workflows/workflow/workflow-timeline.es.js +4 -9
- package/dist/domains/workflows/workflow/workflow-timeline.es.js.map +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-add-skill-dialog.es.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.cjs.js +1 -1
- package/dist/domains/workspace/components/workspace-create-directory.es.js +1 -1
- 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 +1 -1
- package/dist/domains/workspace/components/workspace-tree.es.js +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +3 -3
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +3 -3
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +1 -1
- package/dist/ee/signals/signal-lifelines.cjs.js +2 -8
- package/dist/ee/signals/signal-lifelines.cjs.js.map +1 -1
- package/dist/ee/signals/signal-lifelines.es.js +2 -8
- package/dist/ee/signals/signal-lifelines.es.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +2 -2
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +2 -2
- package/dist/{filter-bar-chip-BBPHw-rX.cjs → filter-bar-chip-BUlEVUgT.cjs} +3 -1
- package/dist/filter-bar-chip-BUlEVUgT.cjs.map +1 -0
- package/dist/{filter-bar-chip-SX3vDA7h.js → filter-bar-chip-DBjcrQFh.js} +3 -1
- package/dist/filter-bar-chip-DBjcrQFh.js.map +1 -0
- package/dist/hooks/use-local-storage-state.es.js +1 -1
- package/dist/{input-vi0ICZHe.js → input-DQFUjtnh.js} +4 -2
- package/dist/input-DQFUjtnh.js.map +1 -0
- package/dist/{input-group-C7WC6xGL.js → input-group-C_2SrLdX.js} +4 -2
- package/dist/input-group-C_2SrLdX.js.map +1 -0
- package/dist/{input-group-CGbhXsmd.cjs → input-group-Cxfp0mxQ.cjs} +4 -2
- package/dist/input-group-Cxfp0mxQ.cjs.map +1 -0
- package/dist/{input-HPE241gI.cjs → input-zdqTky_C.cjs} +4 -2
- package/dist/input-zdqTky_C.cjs.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +3 -3
- package/dist/layout/tabbed-container.es.js +3 -3
- package/dist/lib/form/components/array-element-wrapper.cjs.js +3 -2
- package/dist/lib/form/components/array-element-wrapper.cjs.js.map +1 -1
- package/dist/lib/form/components/array-element-wrapper.es.js +4 -3
- package/dist/lib/form/components/array-element-wrapper.es.js.map +1 -1
- package/dist/lib/form/components/number-field.cjs.js +1 -1
- package/dist/lib/form/components/number-field.es.js +1 -1
- package/dist/lib/form/components/object-wrapper.cjs.js +3 -2
- package/dist/lib/form/components/object-wrapper.cjs.js.map +1 -1
- package/dist/lib/form/components/object-wrapper.es.js +4 -3
- package/dist/lib/form/components/object-wrapper.es.js.map +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/{list-search-DTVH9Fbj.cjs → list-search-CA5w3QHa.cjs} +2 -2
- package/dist/{list-search-DTVH9Fbj.cjs.map → list-search-CA5w3QHa.cjs.map} +1 -1
- package/dist/{list-search-CTZVTRUd.js → list-search-Ce89eOzO.js} +2 -2
- package/dist/{list-search-CTZVTRUd.js.map → list-search-Ce89eOzO.js.map} +1 -1
- package/dist/{logs-data-list-BgFT_0qi.cjs → logs-data-list-C5UGLFo1.cjs} +2 -2
- package/dist/{logs-data-list-BgFT_0qi.cjs.map → logs-data-list-C5UGLFo1.cjs.map} +1 -1
- package/dist/{logs-data-list-C-F2jh04.js → logs-data-list-CgrUlafS.js} +2 -2
- package/dist/{logs-data-list-C-F2jh04.js.map → logs-data-list-CgrUlafS.js.map} +1 -1
- package/dist/new/layout/app-shell.cjs.js +1 -1
- package/dist/new/layout/app-shell.cjs.js.map +1 -1
- package/dist/new/layout/app-shell.es.js +1 -1
- package/dist/new/layout/app-shell.es.js.map +1 -1
- package/dist/{notification-activity-Bz0h5LOR.cjs → notification-activity-C2AcNOyq.cjs} +2 -2
- package/dist/{notification-activity-Bz0h5LOR.cjs.map → notification-activity-C2AcNOyq.cjs.map} +1 -1
- package/dist/{notification-activity-DTXzghFr.js → notification-activity-DquzIOZw.js} +2 -2
- package/dist/{notification-activity-DTXzghFr.js.map → notification-activity-DquzIOZw.js.map} +1 -1
- package/dist/primitives/chart-frame.cjs.js +1 -1
- package/dist/primitives/chart-frame.cjs.js.map +1 -1
- package/dist/primitives/chart-frame.es.js +1 -1
- package/dist/primitives/chart-frame.es.js.map +1 -1
- package/dist/primitives/password-manager-autofill.cjs.js +34 -0
- package/dist/primitives/password-manager-autofill.cjs.js.map +1 -0
- package/dist/primitives/password-manager-autofill.d.ts +2 -0
- package/dist/primitives/password-manager-autofill.es.js +28 -0
- package/dist/primitives/password-manager-autofill.es.js.map +1 -0
- package/dist/primitives/textarea-control.cjs.js +12 -2
- package/dist/primitives/textarea-control.cjs.js.map +1 -1
- package/dist/primitives/textarea-control.es.js +12 -2
- package/dist/primitives/textarea-control.es.js.map +1 -1
- package/dist/{property-filter-applied-7dHzckeW.cjs → property-filter-applied-ACNa3kYG.cjs} +4 -2
- package/dist/property-filter-applied-ACNa3kYG.cjs.map +1 -0
- package/dist/{property-filter-applied-CdbOixsW.js → property-filter-applied-e0Vg1895.js} +4 -2
- package/dist/property-filter-applied-e0Vg1895.js.map +1 -0
- package/dist/{reasoning-activity-D2sXBAxE.cjs → reasoning-activity-Cl7kaqgZ.cjs} +2 -2
- package/dist/{reasoning-activity-D2sXBAxE.cjs.map → reasoning-activity-Cl7kaqgZ.cjs.map} +1 -1
- package/dist/{reasoning-activity-Cpp4iYTw.js → reasoning-activity-D8AF1htp.js} +2 -2
- package/dist/{reasoning-activity-Cpp4iYTw.js.map → reasoning-activity-D8AF1htp.js.map} +1 -1
- package/dist/{search-input-CUGl4cVg.cjs → search-input-BHF2RziH.cjs} +2 -2
- package/dist/{search-input-CUGl4cVg.cjs.map → search-input-BHF2RziH.cjs.map} +1 -1
- package/dist/{search-input-iS3IW0Qo.js → search-input-BgVjoPtF.js} +2 -2
- package/dist/{search-input-iS3IW0Qo.js.map → search-input-BgVjoPtF.js.map} +1 -1
- package/dist/{signal-activity-CtSExTzh.js → signal-activity-BiWlOFhu.js} +2 -2
- package/dist/{signal-activity-CtSExTzh.js.map → signal-activity-BiWlOFhu.js.map} +1 -1
- package/dist/{signal-activity-Rh1YO0x6.cjs → signal-activity-aXcUgxDg.cjs} +2 -2
- package/dist/{signal-activity-Rh1YO0x6.cjs.map → signal-activity-aXcUgxDg.cjs.map} +1 -1
- package/dist/{span-payload-primitives-wxQ0IDhF.js → span-payload-primitives-D_Z6D-Aj.js} +6 -6
- package/dist/span-payload-primitives-D_Z6D-Aj.js.map +1 -0
- package/dist/{span-payload-primitives-DqZn_Q29.cjs → span-payload-primitives-XZgE4FGT.cjs} +6 -6
- package/dist/span-payload-primitives-XZgE4FGT.cjs.map +1 -0
- package/dist/src/domains/chat/context/chat-context.d.ts +5 -1
- package/dist/src/domains/traces/components/traces-list-view.d.ts +3 -1
- package/dist/src/domains/traces/trace-list-columns.d.ts +2 -0
- package/dist/src/ds/components/DataList/data-list-column-order.d.ts +22 -0
- package/dist/src/ds/components/DataList/data-list-reorder-context.d.ts +9 -0
- package/dist/src/ds/components/DataList/data-list-root.d.ts +16 -1
- package/dist/src/ds/components/DateTimeRangePicker/custom-range-editor.d.ts +12 -0
- package/dist/src/ds/components/DisclosureChevron/disclosure-chevron.d.ts +13 -0
- package/dist/src/ds/components/DisclosureChevron/index.d.ts +1 -0
- package/dist/src/ds/components/Input/input.d.ts +12 -1
- package/dist/src/ds/components/InputGroup/input-group.d.ts +1 -1
- package/dist/src/ds/components/InputNumber/input-number.d.ts +1 -1
- package/dist/src/ds/components/Tree/tree-context.d.ts +1 -0
- package/dist/src/ds/primitives/chart-frame.d.ts +4 -1
- package/dist/src/ds/primitives/password-manager-autofill.d.ts +29 -0
- package/dist/src/ds/primitives/textarea-control.d.ts +1 -1
- package/dist/style.css +18 -23
- package/dist/{tool-approval-CWOuZz47.cjs → tool-approval-DEfU8dPG.cjs} +2 -2
- package/dist/{tool-approval-CWOuZz47.cjs.map → tool-approval-DEfU8dPG.cjs.map} +1 -1
- package/dist/{tool-approval-BabMPJSL.js → tool-approval-DM8lvaCK.js} +2 -2
- package/dist/{tool-approval-BabMPJSL.js.map → tool-approval-DM8lvaCK.js.map} +1 -1
- package/dist/{tool-call-group-BPQTXJST.cjs → tool-call-group-CFpdexuw.cjs} +2 -2
- package/dist/{tool-call-group-BPQTXJST.cjs.map → tool-call-group-CFpdexuw.cjs.map} +1 -1
- package/dist/{tool-call-group-bE2C2hCK.js → tool-call-group-CZBqGjMh.js} +2 -2
- package/dist/{tool-call-group-bE2C2hCK.js.map → tool-call-group-CZBqGjMh.js.map} +1 -1
- package/dist/{tool-card-D-w1SgXq.js → tool-card-B0HX-uhD.js} +2 -2
- package/dist/tool-card-B0HX-uhD.js.map +1 -0
- package/dist/{tool-card-LNK49o-E.cjs → tool-card-CHyHNezE.cjs} +2 -2
- package/dist/tool-card-CHyHNezE.cjs.map +1 -0
- package/dist/{traces-data-list-DRSy_7KT.cjs → traces-data-list-DCa7QLQ3.cjs} +2 -2
- package/dist/{traces-data-list-DRSy_7KT.cjs.map → traces-data-list-DCa7QLQ3.cjs.map} +1 -1
- package/dist/{traces-data-list-C89IFLf8.js → traces-data-list-Dig7T40-.js} +2 -2
- package/dist/{traces-data-list-C89IFLf8.js.map → traces-data-list-Dig7T40-.js.map} +1 -1
- package/dist/{tree-DyVaMIwA.js → tree-BodKFJWV.js} +8 -5
- package/dist/tree-BodKFJWV.js.map +1 -0
- package/dist/{tree-JtAQw7a7.cjs → tree-vhKmzihm.cjs} +7 -4
- package/dist/tree-vhKmzihm.cjs.map +1 -0
- package/dist/{use-workflow-graph-runtime-FHoQYtWa.cjs → use-workflow-graph-runtime-B_ihs9Ev.cjs} +2 -2
- package/dist/{use-workflow-graph-runtime-FHoQYtWa.cjs.map → use-workflow-graph-runtime-B_ihs9Ev.cjs.map} +1 -1
- package/dist/{use-workflow-graph-runtime-XT_aoo-Z.js → use-workflow-graph-runtime-OyDXm_6V.js} +2 -2
- package/dist/{use-workflow-graph-runtime-XT_aoo-Z.js.map → use-workflow-graph-runtime-OyDXm_6V.js.map} +1 -1
- package/dist/{workflow-condition-card-Dy-0c_PT.cjs → workflow-condition-card-BF0PmJDV.cjs} +5 -4
- package/dist/workflow-condition-card-BF0PmJDV.cjs.map +1 -0
- package/dist/{workflow-condition-card-D30tufXt.js → workflow-condition-card-BVnfl6Zi.js} +5 -4
- package/dist/workflow-condition-card-BVnfl6Zi.js.map +1 -0
- package/package.json +9 -9
- package/dist/activity-maXCNWZp.js.map +0 -1
- package/dist/activity-pXCpwxxi.cjs.map +0 -1
- package/dist/collapsible-8h5KBZPX.js.map +0 -1
- package/dist/collapsible-BzlQAuym.cjs.map +0 -1
- package/dist/combobox-8_JEWMYs.js.map +0 -1
- package/dist/combobox-Csiduxme.cjs.map +0 -1
- package/dist/command-C-i5cx8D.js.map +0 -1
- package/dist/command-Cq-K24jI.cjs.map +0 -1
- package/dist/composer-CIfMr8q5.js.map +0 -1
- package/dist/composer-DhxSetWI.cjs.map +0 -1
- package/dist/data-list-BfepBJLG.js.map +0 -1
- package/dist/data-list-oQsJVUa6.cjs.map +0 -1
- package/dist/data-list-skeleton-BE7yRNks.cjs.map +0 -1
- package/dist/data-list-skeleton-DnVnqTGL.js.map +0 -1
- package/dist/date-time-range-picker-BA3e2LFA.js +0 -180
- package/dist/date-time-range-picker-BA3e2LFA.js.map +0 -1
- package/dist/date-time-range-picker-BNepacnP.cjs +0 -182
- package/dist/date-time-range-picker-BNepacnP.cjs.map +0 -1
- package/dist/filter-bar-chip-BBPHw-rX.cjs.map +0 -1
- package/dist/filter-bar-chip-SX3vDA7h.js.map +0 -1
- package/dist/input-HPE241gI.cjs.map +0 -1
- package/dist/input-group-C7WC6xGL.js.map +0 -1
- package/dist/input-group-CGbhXsmd.cjs.map +0 -1
- package/dist/input-vi0ICZHe.js.map +0 -1
- package/dist/property-filter-applied-7dHzckeW.cjs.map +0 -1
- package/dist/property-filter-applied-CdbOixsW.js.map +0 -1
- package/dist/span-payload-primitives-DqZn_Q29.cjs.map +0 -1
- package/dist/span-payload-primitives-wxQ0IDhF.js.map +0 -1
- package/dist/tool-card-D-w1SgXq.js.map +0 -1
- package/dist/tool-card-LNK49o-E.cjs.map +0 -1
- package/dist/tree-DyVaMIwA.js.map +0 -1
- package/dist/tree-JtAQw7a7.cjs.map +0 -1
- package/dist/workflow-condition-card-D30tufXt.js.map +0 -1
- package/dist/workflow-condition-card-Dy-0c_PT.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-frame.cjs.js","sources":["../../src/ds/primitives/chart-frame.tsx"],"sourcesContent":["import { XAxis, YAxis } from 'recharts';\nimport { chartYTickCount, pickTimeTicks } from './chart-axes';\nimport type { ChartSize, ChartXLabels } from './chart-axes';\nimport { CHART_AXIS_FONT_SIZE, X_AXIS_HEIGHT } from './chart-layout';\nimport { ChartTimeTick } from './chart-time-tick';\nimport type { ChartTimeTickProps } from './chart-time-tick';\nimport { CHART_LABEL_COLOR } from '@/ds/tokens';\n\n/** A chart's height: pixels, or `fill` to grow with its parent (a flex column, e.g. a card). */\nexport type ChartHeight = number | 'fill';\n\nexport const compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport const CHART_TICK = { fontSize: CHART_AXIS_FONT_SIZE, fill: CHART_LABEL_COLOR };\n\n/** The x-axis of a time series: labels from `xKey`, placed on clock times from `timestampKey`. */\nexport function timeXAxis({\n data,\n xKey,\n timestampKey,\n xLabels,\n plotWidth,\n}: {\n data: Record<string, unknown>[];\n xKey: string;\n timestampKey: string;\n xLabels: ChartXLabels;\n plotWidth: number;\n}) {\n const labels = data.map(row => String(row[xKey] ?? ''));\n const timestamps = data.map(row => {\n const t = row[timestampKey];\n return typeof t === 'number' ? t : undefined;\n });\n const picked = pickTimeTicks(timestamps, labels, plotWidth, xLabels);\n return (\n <XAxis\n dataKey={xKey}\n height={X_AXIS_HEIGHT}\n tick={(props: Omit<ChartTimeTickProps, 'picked' | 'count' | 'plotWidth'>) => (\n <ChartTimeTick {...props} picked={picked} count={data.length} plotWidth={plotWidth} />\n )}\n tickLine={false}\n axisLine={false}\n tickMargin={6}\n // Render every tick slot; ChartTimeTick decides which ones print a label.\n interval={0}\n />\n );\n}\n\n
|
|
1
|
+
{"version":3,"file":"chart-frame.cjs.js","sources":["../../src/ds/primitives/chart-frame.tsx"],"sourcesContent":["import { XAxis, YAxis } from 'recharts';\nimport { chartYTickCount, pickTimeTicks } from './chart-axes';\nimport type { ChartSize, ChartXLabels } from './chart-axes';\nimport { CHART_AXIS_FONT_SIZE, X_AXIS_HEIGHT } from './chart-layout';\nimport { ChartTimeTick } from './chart-time-tick';\nimport type { ChartTimeTickProps } from './chart-time-tick';\nimport { CHART_LABEL_COLOR } from '@/ds/tokens';\n\n/** A chart's height: pixels, or `fill` to grow with its parent (a flex column, e.g. a card). */\nexport type ChartHeight = number | 'fill';\n\nexport const compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport const CHART_TICK = { fontSize: CHART_AXIS_FONT_SIZE, fill: CHART_LABEL_COLOR };\n\n/** The x-axis of a time series: labels from `xKey`, placed on clock times from `timestampKey`. */\nexport function timeXAxis({\n data,\n xKey,\n timestampKey,\n xLabels,\n plotWidth,\n}: {\n data: Record<string, unknown>[];\n xKey: string;\n timestampKey: string;\n xLabels: ChartXLabels;\n plotWidth: number;\n}) {\n const labels = data.map(row => String(row[xKey] ?? ''));\n const timestamps = data.map(row => {\n const t = row[timestampKey];\n return typeof t === 'number' ? t : undefined;\n });\n const picked = pickTimeTicks(timestamps, labels, plotWidth, xLabels);\n return (\n <XAxis\n dataKey={xKey}\n height={X_AXIS_HEIGHT}\n tick={(props: Omit<ChartTimeTickProps, 'picked' | 'count' | 'plotWidth'>) => (\n <ChartTimeTick {...props} picked={picked} count={data.length} plotWidth={plotWidth} />\n )}\n tickLine={false}\n axisLine={false}\n tickMargin={6}\n // Render every tick slot; ChartTimeTick decides which ones print a label.\n interval={0}\n />\n );\n}\n\n/**\n * Room the y-axis labels take at most. The axis itself is as wide as its longest label, so the\n * labels line up with the card's content; this only sizes the plot for spacing the x labels.\n */\nexport const Y_AXIS_WIDTH = 44;\n\nexport function valueYAxis({\n id = 0,\n show,\n size,\n formatter,\n domain,\n right = false,\n}: {\n id?: string | number;\n show: boolean;\n size: ChartSize;\n formatter: (value: number) => string;\n domain?: [number, number];\n right?: boolean;\n}) {\n return (\n <YAxis\n yAxisId={id}\n hide={!show}\n orientation={right ? 'right' : 'left'}\n tick={CHART_TICK}\n tickLine={false}\n axisLine={false}\n width=\"auto\"\n tickMargin={4}\n tickFormatter={formatter}\n domain={domain}\n tickCount={chartYTickCount(size.height)}\n />\n );\n}\n"],"names":["CHART_AXIS_FONT_SIZE","CHART_LABEL_COLOR","pickTimeTicks","jsx","XAxis","X_AXIS_HEIGHT","ChartTimeTick","YAxis","chartYTickCount"],"mappings":";;;;;;;;;;;AAWO,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,EAAE,QAAA,EAAU,SAAA,EAAW,qBAAA,EAAuB,CAAA,EAAG;AAEnG,MAAM,UAAA,GAAa,EAAE,QAAA,EAAUA,2CAAA,EAAsB,MAAMC,wBAAA;AAG3D,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,CAAA,GAAA,KAAO,OAAO,GAAA,CAAI,IAAI,CAAA,IAAK,EAAE,CAAC,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO;AACjC,IAAA,MAAM,CAAA,GAAI,IAAI,YAAY,CAAA;AAC1B,IAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,MAAA;AAAA,EACrC,CAAC,CAAA;AACD,EAAA,MAAM,MAAA,GAASC,kCAAA,CAAc,UAAA,EAAY,MAAA,EAAQ,WAAW,OAAO,CAAA;AACnE,EAAA,uBACEC,cAAA;AAAA,IAACC,cAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQC,oCAAA;AAAA,MACR,IAAA,EAAM,CAAC,KAAA,qBACLF,cAAA,CAACG,sCAAA,EAAA,EAAe,GAAG,KAAA,EAAO,MAAA,EAAgB,KAAA,EAAO,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAsB,CAAA;AAAA,MAEtF,QAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY,CAAA;AAAA,MAEZ,QAAA,EAAU;AAAA;AAAA,GACZ;AAEJ;AAMO,MAAM,YAAA,GAAe;AAErB,SAAS,UAAA,CAAW;AAAA,EACzB,EAAA,GAAK,CAAA;AAAA,EACL,IAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAOG;AACD,EAAA,uBACEH,cAAA;AAAA,IAACI,cAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,EAAA;AAAA,MACT,MAAM,CAAC,IAAA;AAAA,MACP,WAAA,EAAa,QAAQ,OAAA,GAAU,MAAA;AAAA,MAC/B,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAU,KAAA;AAAA,MACV,KAAA,EAAM,MAAA;AAAA,MACN,UAAA,EAAY,CAAA;AAAA,MACZ,aAAA,EAAe,SAAA;AAAA,MACf,MAAA;AAAA,MACA,SAAA,EAAWC,oCAAA,CAAgB,IAAA,CAAK,MAAM;AAAA;AAAA,GACxC;AAEJ;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart-frame.es.js","sources":["../../src/ds/primitives/chart-frame.tsx"],"sourcesContent":["import { XAxis, YAxis } from 'recharts';\nimport { chartYTickCount, pickTimeTicks } from './chart-axes';\nimport type { ChartSize, ChartXLabels } from './chart-axes';\nimport { CHART_AXIS_FONT_SIZE, X_AXIS_HEIGHT } from './chart-layout';\nimport { ChartTimeTick } from './chart-time-tick';\nimport type { ChartTimeTickProps } from './chart-time-tick';\nimport { CHART_LABEL_COLOR } from '@/ds/tokens';\n\n/** A chart's height: pixels, or `fill` to grow with its parent (a flex column, e.g. a card). */\nexport type ChartHeight = number | 'fill';\n\nexport const compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport const CHART_TICK = { fontSize: CHART_AXIS_FONT_SIZE, fill: CHART_LABEL_COLOR };\n\n/** The x-axis of a time series: labels from `xKey`, placed on clock times from `timestampKey`. */\nexport function timeXAxis({\n data,\n xKey,\n timestampKey,\n xLabels,\n plotWidth,\n}: {\n data: Record<string, unknown>[];\n xKey: string;\n timestampKey: string;\n xLabels: ChartXLabels;\n plotWidth: number;\n}) {\n const labels = data.map(row => String(row[xKey] ?? ''));\n const timestamps = data.map(row => {\n const t = row[timestampKey];\n return typeof t === 'number' ? t : undefined;\n });\n const picked = pickTimeTicks(timestamps, labels, plotWidth, xLabels);\n return (\n <XAxis\n dataKey={xKey}\n height={X_AXIS_HEIGHT}\n tick={(props: Omit<ChartTimeTickProps, 'picked' | 'count' | 'plotWidth'>) => (\n <ChartTimeTick {...props} picked={picked} count={data.length} plotWidth={plotWidth} />\n )}\n tickLine={false}\n axisLine={false}\n tickMargin={6}\n // Render every tick slot; ChartTimeTick decides which ones print a label.\n interval={0}\n />\n );\n}\n\n
|
|
1
|
+
{"version":3,"file":"chart-frame.es.js","sources":["../../src/ds/primitives/chart-frame.tsx"],"sourcesContent":["import { XAxis, YAxis } from 'recharts';\nimport { chartYTickCount, pickTimeTicks } from './chart-axes';\nimport type { ChartSize, ChartXLabels } from './chart-axes';\nimport { CHART_AXIS_FONT_SIZE, X_AXIS_HEIGHT } from './chart-layout';\nimport { ChartTimeTick } from './chart-time-tick';\nimport type { ChartTimeTickProps } from './chart-time-tick';\nimport { CHART_LABEL_COLOR } from '@/ds/tokens';\n\n/** A chart's height: pixels, or `fill` to grow with its parent (a flex column, e.g. a card). */\nexport type ChartHeight = number | 'fill';\n\nexport const compactNumber = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\nexport const CHART_TICK = { fontSize: CHART_AXIS_FONT_SIZE, fill: CHART_LABEL_COLOR };\n\n/** The x-axis of a time series: labels from `xKey`, placed on clock times from `timestampKey`. */\nexport function timeXAxis({\n data,\n xKey,\n timestampKey,\n xLabels,\n plotWidth,\n}: {\n data: Record<string, unknown>[];\n xKey: string;\n timestampKey: string;\n xLabels: ChartXLabels;\n plotWidth: number;\n}) {\n const labels = data.map(row => String(row[xKey] ?? ''));\n const timestamps = data.map(row => {\n const t = row[timestampKey];\n return typeof t === 'number' ? t : undefined;\n });\n const picked = pickTimeTicks(timestamps, labels, plotWidth, xLabels);\n return (\n <XAxis\n dataKey={xKey}\n height={X_AXIS_HEIGHT}\n tick={(props: Omit<ChartTimeTickProps, 'picked' | 'count' | 'plotWidth'>) => (\n <ChartTimeTick {...props} picked={picked} count={data.length} plotWidth={plotWidth} />\n )}\n tickLine={false}\n axisLine={false}\n tickMargin={6}\n // Render every tick slot; ChartTimeTick decides which ones print a label.\n interval={0}\n />\n );\n}\n\n/**\n * Room the y-axis labels take at most. The axis itself is as wide as its longest label, so the\n * labels line up with the card's content; this only sizes the plot for spacing the x labels.\n */\nexport const Y_AXIS_WIDTH = 44;\n\nexport function valueYAxis({\n id = 0,\n show,\n size,\n formatter,\n domain,\n right = false,\n}: {\n id?: string | number;\n show: boolean;\n size: ChartSize;\n formatter: (value: number) => string;\n domain?: [number, number];\n right?: boolean;\n}) {\n return (\n <YAxis\n yAxisId={id}\n hide={!show}\n orientation={right ? 'right' : 'left'}\n tick={CHART_TICK}\n tickLine={false}\n axisLine={false}\n width=\"auto\"\n tickMargin={4}\n tickFormatter={formatter}\n domain={domain}\n tickCount={chartYTickCount(size.height)}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,MAAM,aAAA,GAAgB,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,EAAM,EAAE,QAAA,EAAU,SAAA,EAAW,qBAAA,EAAuB,CAAA,EAAG;AAEnG,MAAM,UAAA,GAAa,EAAE,QAAA,EAAU,oBAAA,EAAsB,MAAM,iBAAA;AAG3D,SAAS,SAAA,CAAU;AAAA,EACxB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,CAAA,GAAA,KAAO,OAAO,GAAA,CAAI,IAAI,CAAA,IAAK,EAAE,CAAC,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,CAAA,GAAA,KAAO;AACjC,IAAA,MAAM,CAAA,GAAI,IAAI,YAAY,CAAA;AAC1B,IAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,MAAA;AAAA,EACrC,CAAC,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,aAAA,CAAc,UAAA,EAAY,MAAA,EAAQ,WAAW,OAAO,CAAA;AACnE,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ,aAAA;AAAA,MACR,IAAA,EAAM,CAAC,KAAA,qBACL,GAAA,CAAC,aAAA,EAAA,EAAe,GAAG,KAAA,EAAO,MAAA,EAAgB,KAAA,EAAO,IAAA,CAAK,MAAA,EAAQ,SAAA,EAAsB,CAAA;AAAA,MAEtF,QAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAU,KAAA;AAAA,MACV,UAAA,EAAY,CAAA;AAAA,MAEZ,QAAA,EAAU;AAAA;AAAA,GACZ;AAEJ;AAMO,MAAM,YAAA,GAAe;AAErB,SAAS,UAAA,CAAW;AAAA,EACzB,EAAA,GAAK,CAAA;AAAA,EACL,IAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA,GAAQ;AACV,CAAA,EAOG;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,EAAA;AAAA,MACT,MAAM,CAAC,IAAA;AAAA,MACP,WAAA,EAAa,QAAQ,OAAA,GAAU,MAAA;AAAA,MAC/B,IAAA,EAAM,UAAA;AAAA,MACN,QAAA,EAAU,KAAA;AAAA,MACV,QAAA,EAAU,KAAA;AAAA,MACV,KAAA,EAAM,MAAA;AAAA,MACN,UAAA,EAAY,CAAA;AAAA,MACZ,aAAA,EAAe,SAAA;AAAA,MACf,MAAA;AAAA,MACA,SAAA,EAAW,eAAA,CAAgB,IAAA,CAAK,MAAM;AAAA;AAAA,GACxC;AAEJ;;;;"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const passwordManagerIgnoreAttributes = {
|
|
6
|
+
// 1Password: https://www.1password.dev/web/compatible-website-design/
|
|
7
|
+
"data-1p-ignore": "true",
|
|
8
|
+
// LastPass: https://support.lastpass.com (Prevent fields from being filled automatically)
|
|
9
|
+
"data-lpignore": "true",
|
|
10
|
+
// Bitwarden: apps/browser/src/autofill/services/collect-autofill-content.service.ts in
|
|
11
|
+
// bitwarden/clients. Since browser v2026.9.3 it is only honoured when the user enables
|
|
12
|
+
// "Allow websites to exclude fields to autofill", which is off by default.
|
|
13
|
+
"data-bwignore": "true",
|
|
14
|
+
// Dashlane: field-level `other` in the SAWF spec, https://dashlane.github.io/SAWF/
|
|
15
|
+
"data-form-type": "other",
|
|
16
|
+
// Proton Pass: `attrIgnored` in utils/flags of @protontech/autofill, the detector the
|
|
17
|
+
// extension ships. Proton's own apps set it on fields they don't want filled.
|
|
18
|
+
"data-protonpass-ignore": "true"
|
|
19
|
+
};
|
|
20
|
+
const passwordManagerOptOutProps = {
|
|
21
|
+
autoComplete: "off",
|
|
22
|
+
...passwordManagerIgnoreAttributes
|
|
23
|
+
};
|
|
24
|
+
function textFieldAutofillProps(autoComplete) {
|
|
25
|
+
if (autoComplete === void 0) return passwordManagerOptOutProps;
|
|
26
|
+
const token = autoComplete.trim().toLowerCase();
|
|
27
|
+
if (token === "" || token === "off") return passwordManagerOptOutProps;
|
|
28
|
+
return { autoComplete };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
exports.passwordManagerIgnoreAttributes = passwordManagerIgnoreAttributes;
|
|
32
|
+
exports.passwordManagerOptOutProps = passwordManagerOptOutProps;
|
|
33
|
+
exports.textFieldAutofillProps = textFieldAutofillProps;
|
|
34
|
+
//# sourceMappingURL=password-manager-autofill.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-manager-autofill.cjs.js","sources":["../../src/ds/primitives/password-manager-autofill.ts"],"sourcesContent":["// Password managers decide which fields to decorate from heuristics, not from intent: a\n// field labelled \"Name\" reads as the user's name, so a dataset or agent name field gets an\n// identity popup that covers the rest of the form. Most of them also ignore\n// `autocomplete=\"off\"`, so every DS text field opts out by default with each manager's own\n// ignore attribute, and a credential form opts back in by passing a real autofill token\n// (`email`, `username`, `current-password`, `new-password`, `one-time-code`, ...).\n//\n// Each manager reads its own attribute by presence, except LastPass which wants \"true\".\nexport const passwordManagerIgnoreAttributes = {\n // 1Password: https://www.1password.dev/web/compatible-website-design/\n 'data-1p-ignore': 'true',\n // LastPass: https://support.lastpass.com (Prevent fields from being filled automatically)\n 'data-lpignore': 'true',\n // Bitwarden: apps/browser/src/autofill/services/collect-autofill-content.service.ts in\n // bitwarden/clients. Since browser v2026.9.3 it is only honoured when the user enables\n // \"Allow websites to exclude fields to autofill\", which is off by default.\n 'data-bwignore': 'true',\n // Dashlane: field-level `other` in the SAWF spec, https://dashlane.github.io/SAWF/\n 'data-form-type': 'other',\n // Proton Pass: `attrIgnored` in utils/flags of @protontech/autofill, the detector the\n // extension ships. Proton's own apps set it on fields they don't want filled.\n 'data-protonpass-ignore': 'true',\n} as const;\n\n/**\n * Props that keep browser autofill and the common password managers off a field. Spread\n * them on a text field that never takes a credential (a search box, a rename input).\n */\nexport const passwordManagerOptOutProps = {\n autoComplete: 'off',\n ...passwordManagerIgnoreAttributes,\n} as const;\n\nexport type TextFieldAutofillProps = typeof passwordManagerOptOutProps | { autoComplete: string };\n\n/**\n * Autofill props for a DS text field. With no `autoComplete` (or `\"off\"`), the field opts\n * out of browser autofill and of the common password managers. Any other value is an\n * explicit autofill token and is passed through untouched, with no ignore hints.\n * Spread it after the caller's props so the opt-out reaches the DOM.\n */\nexport function textFieldAutofillProps(autoComplete: string | undefined): TextFieldAutofillProps {\n if (autoComplete === undefined) return passwordManagerOptOutProps;\n const token = autoComplete.trim().toLowerCase();\n if (token === '' || token === 'off') return passwordManagerOptOutProps;\n return { autoComplete };\n}\n"],"names":[],"mappings":";;;;AAQO,MAAM,+BAAA,GAAkC;AAAA;AAAA,EAE7C,gBAAA,EAAkB,MAAA;AAAA;AAAA,EAElB,eAAA,EAAiB,MAAA;AAAA;AAAA;AAAA;AAAA,EAIjB,eAAA,EAAiB,MAAA;AAAA;AAAA,EAEjB,gBAAA,EAAkB,OAAA;AAAA;AAAA;AAAA,EAGlB,wBAAA,EAA0B;AAC5B;AAMO,MAAM,0BAAA,GAA6B;AAAA,EACxC,YAAA,EAAc,KAAA;AAAA,EACd,GAAG;AACL;AAUO,SAAS,uBAAuB,YAAA,EAA0D;AAC/F,EAAA,IAAI,YAAA,KAAiB,QAAW,OAAO,0BAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,EAAK,CAAE,WAAA,EAAY;AAC9C,EAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,KAAA,EAAO,OAAO,0BAAA;AAC5C,EAAA,OAAO,EAAE,YAAA,EAAa;AACxB;;;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const passwordManagerIgnoreAttributes = {
|
|
2
|
+
// 1Password: https://www.1password.dev/web/compatible-website-design/
|
|
3
|
+
"data-1p-ignore": "true",
|
|
4
|
+
// LastPass: https://support.lastpass.com (Prevent fields from being filled automatically)
|
|
5
|
+
"data-lpignore": "true",
|
|
6
|
+
// Bitwarden: apps/browser/src/autofill/services/collect-autofill-content.service.ts in
|
|
7
|
+
// bitwarden/clients. Since browser v2026.9.3 it is only honoured when the user enables
|
|
8
|
+
// "Allow websites to exclude fields to autofill", which is off by default.
|
|
9
|
+
"data-bwignore": "true",
|
|
10
|
+
// Dashlane: field-level `other` in the SAWF spec, https://dashlane.github.io/SAWF/
|
|
11
|
+
"data-form-type": "other",
|
|
12
|
+
// Proton Pass: `attrIgnored` in utils/flags of @protontech/autofill, the detector the
|
|
13
|
+
// extension ships. Proton's own apps set it on fields they don't want filled.
|
|
14
|
+
"data-protonpass-ignore": "true"
|
|
15
|
+
};
|
|
16
|
+
const passwordManagerOptOutProps = {
|
|
17
|
+
autoComplete: "off",
|
|
18
|
+
...passwordManagerIgnoreAttributes
|
|
19
|
+
};
|
|
20
|
+
function textFieldAutofillProps(autoComplete) {
|
|
21
|
+
if (autoComplete === void 0) return passwordManagerOptOutProps;
|
|
22
|
+
const token = autoComplete.trim().toLowerCase();
|
|
23
|
+
if (token === "" || token === "off") return passwordManagerOptOutProps;
|
|
24
|
+
return { autoComplete };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { passwordManagerIgnoreAttributes, passwordManagerOptOutProps, textFieldAutofillProps };
|
|
28
|
+
//# sourceMappingURL=password-manager-autofill.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-manager-autofill.es.js","sources":["../../src/ds/primitives/password-manager-autofill.ts"],"sourcesContent":["// Password managers decide which fields to decorate from heuristics, not from intent: a\n// field labelled \"Name\" reads as the user's name, so a dataset or agent name field gets an\n// identity popup that covers the rest of the form. Most of them also ignore\n// `autocomplete=\"off\"`, so every DS text field opts out by default with each manager's own\n// ignore attribute, and a credential form opts back in by passing a real autofill token\n// (`email`, `username`, `current-password`, `new-password`, `one-time-code`, ...).\n//\n// Each manager reads its own attribute by presence, except LastPass which wants \"true\".\nexport const passwordManagerIgnoreAttributes = {\n // 1Password: https://www.1password.dev/web/compatible-website-design/\n 'data-1p-ignore': 'true',\n // LastPass: https://support.lastpass.com (Prevent fields from being filled automatically)\n 'data-lpignore': 'true',\n // Bitwarden: apps/browser/src/autofill/services/collect-autofill-content.service.ts in\n // bitwarden/clients. Since browser v2026.9.3 it is only honoured when the user enables\n // \"Allow websites to exclude fields to autofill\", which is off by default.\n 'data-bwignore': 'true',\n // Dashlane: field-level `other` in the SAWF spec, https://dashlane.github.io/SAWF/\n 'data-form-type': 'other',\n // Proton Pass: `attrIgnored` in utils/flags of @protontech/autofill, the detector the\n // extension ships. Proton's own apps set it on fields they don't want filled.\n 'data-protonpass-ignore': 'true',\n} as const;\n\n/**\n * Props that keep browser autofill and the common password managers off a field. Spread\n * them on a text field that never takes a credential (a search box, a rename input).\n */\nexport const passwordManagerOptOutProps = {\n autoComplete: 'off',\n ...passwordManagerIgnoreAttributes,\n} as const;\n\nexport type TextFieldAutofillProps = typeof passwordManagerOptOutProps | { autoComplete: string };\n\n/**\n * Autofill props for a DS text field. With no `autoComplete` (or `\"off\"`), the field opts\n * out of browser autofill and of the common password managers. Any other value is an\n * explicit autofill token and is passed through untouched, with no ignore hints.\n * Spread it after the caller's props so the opt-out reaches the DOM.\n */\nexport function textFieldAutofillProps(autoComplete: string | undefined): TextFieldAutofillProps {\n if (autoComplete === undefined) return passwordManagerOptOutProps;\n const token = autoComplete.trim().toLowerCase();\n if (token === '' || token === 'off') return passwordManagerOptOutProps;\n return { autoComplete };\n}\n"],"names":[],"mappings":"AAQO,MAAM,+BAAA,GAAkC;AAAA;AAAA,EAE7C,gBAAA,EAAkB,MAAA;AAAA;AAAA,EAElB,eAAA,EAAiB,MAAA;AAAA;AAAA;AAAA;AAAA,EAIjB,eAAA,EAAiB,MAAA;AAAA;AAAA,EAEjB,gBAAA,EAAkB,OAAA;AAAA;AAAA;AAAA,EAGlB,wBAAA,EAA0B;AAC5B;AAMO,MAAM,0BAAA,GAA6B;AAAA,EACxC,YAAA,EAAc,KAAA;AAAA,EACd,GAAG;AACL;AAUO,SAAS,uBAAuB,YAAA,EAA0D;AAC/F,EAAA,IAAI,YAAA,KAAiB,QAAW,OAAO,0BAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,IAAA,EAAK,CAAE,WAAA,EAAY;AAC9C,EAAA,IAAI,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,KAAA,EAAO,OAAO,0BAAA;AAC5C,EAAA,OAAO,EAAE,YAAA,EAAa;AACxB;;;;"}
|
|
@@ -6,8 +6,9 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
const field = require('@base-ui/react/field');
|
|
7
7
|
const mergeProps = require('@base-ui/react/merge-props');
|
|
8
8
|
const fieldControlAria = require('../field-control-aria-WzMGs0A4.cjs');
|
|
9
|
+
const primitives_passwordManagerAutofill = require('./password-manager-autofill.cjs.js');
|
|
9
10
|
|
|
10
|
-
function TextareaControl({ id, name, disabled, ref, ...props }) {
|
|
11
|
+
function TextareaControl({ id, name, disabled, ref, autoComplete, ...props }) {
|
|
11
12
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12
13
|
field.Field.Control,
|
|
13
14
|
{
|
|
@@ -15,7 +16,16 @@ function TextareaControl({ id, name, disabled, ref, ...props }) {
|
|
|
15
16
|
id,
|
|
16
17
|
name,
|
|
17
18
|
disabled,
|
|
18
|
-
render: (controlProps) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
19
|
+
render: (controlProps) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
20
|
+
"textarea",
|
|
21
|
+
{
|
|
22
|
+
...mergeProps.mergeProps(controlProps, {
|
|
23
|
+
...props,
|
|
24
|
+
...primitives_passwordManagerAutofill.textFieldAutofillProps(autoComplete),
|
|
25
|
+
...fieldControlAria.keepOwnAccessibleName(props)
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
)
|
|
19
29
|
}
|
|
20
30
|
);
|
|
21
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-control.cjs.js","sources":["../../src/ds/primitives/textarea-control.tsx"],"sourcesContent":["import { Field as FieldPrimitive } from '@base-ui/react/field';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport type * as React from 'react';\n\nimport { keepOwnAccessibleName } from '@/ds/components/Field/field-control-aria';\n\nexport type TextareaControlProps = React.ComponentProps<'textarea'>;\n\nexport function TextareaControl({ id, name, disabled, ref, ...props }: TextareaControlProps) {\n return (\n <FieldPrimitive.Control\n ref={ref}\n id={id}\n name={name}\n disabled={disabled}\n render={controlProps => (\n <textarea
|
|
1
|
+
{"version":3,"file":"textarea-control.cjs.js","sources":["../../src/ds/primitives/textarea-control.tsx"],"sourcesContent":["import { Field as FieldPrimitive } from '@base-ui/react/field';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport type * as React from 'react';\n\nimport { keepOwnAccessibleName } from '@/ds/components/Field/field-control-aria';\nimport { textFieldAutofillProps } from '@/ds/primitives/password-manager-autofill';\n\nexport type TextareaControlProps = React.ComponentProps<'textarea'>;\n\nexport function TextareaControl({ id, name, disabled, ref, autoComplete, ...props }: TextareaControlProps) {\n return (\n <FieldPrimitive.Control\n ref={ref}\n id={id}\n name={name}\n disabled={disabled}\n render={controlProps => (\n <textarea\n {...mergeProps<'textarea'>(controlProps, {\n ...props,\n ...textFieldAutofillProps(autoComplete),\n ...keepOwnAccessibleName(props),\n })}\n />\n )}\n />\n );\n}\n"],"names":["jsx","FieldPrimitive","mergeProps","textFieldAutofillProps","keepOwnAccessibleName"],"mappings":";;;;;;;;;;AASO,SAAS,eAAA,CAAgB,EAAE,EAAA,EAAI,IAAA,EAAM,UAAU,GAAA,EAAK,YAAA,EAAc,GAAG,KAAA,EAAM,EAAyB;AACzG,EAAA,uBACEA,cAAA;AAAA,IAACC,WAAA,CAAe,OAAA;AAAA,IAAf;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAQ,CAAA,YAAA,qBACND,cAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACE,GAAGE,sBAAuB,YAAA,EAAc;AAAA,YACvC,GAAG,KAAA;AAAA,YACH,GAAGC,0DAAuB,YAAY,CAAA;AAAA,YACtC,GAAGC,uCAAsB,KAAK;AAAA,WAC/B;AAAA;AAAA;AACH;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -2,8 +2,9 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { Field } from '@base-ui/react/field';
|
|
3
3
|
import { mergeProps } from '@base-ui/react/merge-props';
|
|
4
4
|
import { k as keepOwnAccessibleName } from '../field-control-aria-DB6y41tQ.js';
|
|
5
|
+
import { textFieldAutofillProps } from './password-manager-autofill.es.js';
|
|
5
6
|
|
|
6
|
-
function TextareaControl({ id, name, disabled, ref, ...props }) {
|
|
7
|
+
function TextareaControl({ id, name, disabled, ref, autoComplete, ...props }) {
|
|
7
8
|
return /* @__PURE__ */ jsx(
|
|
8
9
|
Field.Control,
|
|
9
10
|
{
|
|
@@ -11,7 +12,16 @@ function TextareaControl({ id, name, disabled, ref, ...props }) {
|
|
|
11
12
|
id,
|
|
12
13
|
name,
|
|
13
14
|
disabled,
|
|
14
|
-
render: (controlProps) => /* @__PURE__ */ jsx(
|
|
15
|
+
render: (controlProps) => /* @__PURE__ */ jsx(
|
|
16
|
+
"textarea",
|
|
17
|
+
{
|
|
18
|
+
...mergeProps(controlProps, {
|
|
19
|
+
...props,
|
|
20
|
+
...textFieldAutofillProps(autoComplete),
|
|
21
|
+
...keepOwnAccessibleName(props)
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
)
|
|
15
25
|
}
|
|
16
26
|
);
|
|
17
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea-control.es.js","sources":["../../src/ds/primitives/textarea-control.tsx"],"sourcesContent":["import { Field as FieldPrimitive } from '@base-ui/react/field';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport type * as React from 'react';\n\nimport { keepOwnAccessibleName } from '@/ds/components/Field/field-control-aria';\n\nexport type TextareaControlProps = React.ComponentProps<'textarea'>;\n\nexport function TextareaControl({ id, name, disabled, ref, ...props }: TextareaControlProps) {\n return (\n <FieldPrimitive.Control\n ref={ref}\n id={id}\n name={name}\n disabled={disabled}\n render={controlProps => (\n <textarea
|
|
1
|
+
{"version":3,"file":"textarea-control.es.js","sources":["../../src/ds/primitives/textarea-control.tsx"],"sourcesContent":["import { Field as FieldPrimitive } from '@base-ui/react/field';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport type * as React from 'react';\n\nimport { keepOwnAccessibleName } from '@/ds/components/Field/field-control-aria';\nimport { textFieldAutofillProps } from '@/ds/primitives/password-manager-autofill';\n\nexport type TextareaControlProps = React.ComponentProps<'textarea'>;\n\nexport function TextareaControl({ id, name, disabled, ref, autoComplete, ...props }: TextareaControlProps) {\n return (\n <FieldPrimitive.Control\n ref={ref}\n id={id}\n name={name}\n disabled={disabled}\n render={controlProps => (\n <textarea\n {...mergeProps<'textarea'>(controlProps, {\n ...props,\n ...textFieldAutofillProps(autoComplete),\n ...keepOwnAccessibleName(props),\n })}\n />\n )}\n />\n );\n}\n"],"names":["FieldPrimitive"],"mappings":";;;;;;AASO,SAAS,eAAA,CAAgB,EAAE,EAAA,EAAI,IAAA,EAAM,UAAU,GAAA,EAAK,YAAA,EAAc,GAAG,KAAA,EAAM,EAAyB;AACzG,EAAA,uBACE,GAAA;AAAA,IAACA,KAAA,CAAe,OAAA;AAAA,IAAf;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAQ,CAAA,YAAA,qBACN,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAuB,YAAA,EAAc;AAAA,YACvC,GAAG,KAAA;AAAA,YACH,GAAG,uBAAuB,YAAY,CAAA;AAAA,YACtC,GAAG,sBAAsB,KAAK;AAAA,WAC/B;AAAA;AAAA;AACH;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -10,8 +10,9 @@ const tooltip = require('./tooltip-C4txPRSa.cjs');
|
|
|
10
10
|
const spinner = require('./spinner-BW4nHg_A.cjs');
|
|
11
11
|
const primitives_fluidMenu = require('./primitives/fluid-menu.cjs.js');
|
|
12
12
|
const primitives_menuItem = require('./primitives/menu-item.cjs.js');
|
|
13
|
+
const primitives_passwordManagerAutofill = require('./primitives/password-manager-autofill.cjs.js');
|
|
13
14
|
const utils_cn = require('./cn-TqD01zH-.cjs');
|
|
14
|
-
const input = require('./input-
|
|
15
|
+
const input = require('./input-zdqTky_C.cjs');
|
|
15
16
|
const popover = require('./popover-CWHYNPp8.cjs');
|
|
16
17
|
|
|
17
18
|
function PropertyFilterActions({
|
|
@@ -103,6 +104,7 @@ function PickMultiPanel({ field, tokens, onChange }) {
|
|
|
103
104
|
onChange: (e) => setQuery(e.target.value),
|
|
104
105
|
placeholder: `Search ${field.label.toLowerCase()}...`,
|
|
105
106
|
className: primitives_menuItem.menuSearchClasses.input,
|
|
107
|
+
...primitives_passwordManagerAutofill.passwordManagerOptOutProps,
|
|
106
108
|
onKeyDown: (e) => {
|
|
107
109
|
if (e.key !== "ArrowDown") return;
|
|
108
110
|
const panel = e.currentTarget.closest("[data-pick-multi-panel]");
|
|
@@ -338,4 +340,4 @@ function PropertyFilterApplied({
|
|
|
338
340
|
exports.PickMultiPanel = PickMultiPanel;
|
|
339
341
|
exports.PropertyFilterActions = PropertyFilterActions;
|
|
340
342
|
exports.PropertyFilterApplied = PropertyFilterApplied;
|
|
341
|
-
//# sourceMappingURL=property-filter-applied-
|
|
343
|
+
//# sourceMappingURL=property-filter-applied-ACNa3kYG.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-filter-applied-ACNa3kYG.cjs","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear} icon={<XIcon />}>\n Clear\n </Button>\n )}\n\n {hasMenuItems && (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button disabled={disabled} size=\"md\" aria-label=\"More filter actions\">\n <EllipsisVerticalIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {onRemoveAll && (\n <DropdownMenu.Item onSelect={() => onRemoveAll()}>\n <XIcon />\n Remove all filters\n </DropdownMenu.Item>\n )}\n {onRemoveAll && (onSave || onRemoveSaved) && <DropdownMenu.Separator />}\n {onSave && (\n <DropdownMenu.Item onSelect={() => onSave()}>\n <SaveIcon />\n Save filters for next time\n </DropdownMenu.Item>\n )}\n {onRemoveSaved && (\n <DropdownMenu.Item onSelect={() => onRemoveSaved()}>\n <Trash2Icon />\n Remove saved filters\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","import { CheckIcon, SearchIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { menuEmptyClass, menuItemCheckClass, menuItemClass, menuSearchClasses } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\n// Same rendering as Combobox items: no visible control, a trailing check when selected.\n// Focus is on the item itself (roving via [data-pick-multi-item]): the fluid highlight follows it.\nconst pickMultiItemClass = cn(menuItemClass, 'min-w-0 focus:text-foreground');\n\nfunction PickMultiItem({\n role,\n checked,\n label,\n onClick,\n}: {\n role: 'checkbox' | 'radio';\n checked: boolean;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n ref={useFluidMenuItemRef<HTMLButtonElement>()}\n type=\"button\"\n role={role}\n aria-checked={checked}\n data-selected={checked || undefined}\n data-pick-multi-item=\"\"\n title={label}\n className={pickMultiItemClass}\n onClick={onClick}\n >\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {checked && (\n <span className={menuItemCheckClass}>\n <CheckIcon />\n </span>\n )}\n </button>\n );\n}\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n /** Always carries a value: an empty list is how the panel says \"nothing selected\". */\n onChange: (fieldId: string, value: string | string[]) => void;\n};\n\n/**\n * Reusable body for a pick-multi side popover: optional search input plus a\n * radio group (single-select) or checkbox list (when `field.multi` is true).\n * Shared between the Filter Creator's property-picker side popover and the\n * PropertyFilterApplied pill's inline editor so both surfaces use the exact same UI.\n */\nexport function PickMultiPanel({ field, tokens, onChange }: PickMultiPanelProps) {\n const [query, setQuery] = useState('');\n const menu = useFluidMenu<HTMLDivElement>();\n const listProps = {\n className: cn('max-h-[80dvh] overflow-auto p-1', menu.containerClassName),\n ...menu.getContainerProps({}),\n };\n\n const filteredOptions = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(o => o.label.toLowerCase().includes(q));\n }, [field.options, query]);\n\n const token = useMemo(() => tokens.find(t => t.fieldId === field.id), [tokens, field.id]);\n // Fall back to `defaultValue` when no token exists — lets view-toggle fields (e.g. List mode)\n // show their default option pre-selected before the user explicitly picks one.\n const selectedValue = typeof token?.value === 'string' ? token.value : !field.multi ? field.defaultValue : undefined;\n const selectedValues = useMemo<string[]>(() => {\n const value = token?.value;\n if (Array.isArray(value)) return value;\n if (typeof value === 'string') return [value];\n return [];\n }, [token]);\n\n return (\n <>\n {field.searchable !== false && (\n <div className={menuSearchClasses.container}>\n <SearchIcon className={menuSearchClasses.icon} />\n <input\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className={menuSearchClasses.input}\n {...passwordManagerOptOutProps}\n onKeyDown={e => {\n if (e.key !== 'ArrowDown') return;\n const panel = e.currentTarget.closest<HTMLElement>('[data-pick-multi-panel]');\n const first = panel?.querySelector<HTMLElement>('[data-pick-multi-item]:not([disabled])');\n if (!first) return;\n e.preventDefault();\n e.stopPropagation();\n first.focus();\n }}\n />\n </div>\n )}\n\n {field.isLoading ? (\n <div className={cn(menuEmptyClass, 'm-1')}>\n <Spinner size=\"sm\" className=\"size-3 text-muted-foreground\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={cn(menuEmptyClass, 'm-1')}>{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <PickMultiItem\n key={option.value}\n role=\"checkbox\"\n checked={checked}\n label={option.label}\n onClick={() =>\n onChange(\n field.id,\n checked ? selectedValues.filter(v => v !== option.value) : [...selectedValues, option.value],\n )\n }\n />\n );\n })}\n </FluidMenuItems>\n </div>\n ) : (\n <div role=\"radiogroup\" {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => (\n <PickMultiItem\n key={option.value}\n role=\"radio\"\n checked={selectedValue === option.value}\n label={option.label}\n onClick={() => onChange(field.id, option.value)}\n />\n ))}\n {!field.omitAnyOption && (\n <PickMultiItem\n role=\"radio\"\n checked={selectedValue === 'Any'}\n label=\"Any\"\n onClick={() => onChange(field.id, 'Any')}\n />\n )}\n </FluidMenuItems>\n </div>\n )}\n </>\n );\n}\n","import { LockIcon, XIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { ButtonsGroup, ButtonsGroupText } from '../ButtonsGroup';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip';\nimport { PickMultiPanel } from './pick-multi-panel';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover/popover';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\n\nexport type PropertyFilterAppliedProps = {\n fields: PropertyFilterField[];\n tokens: PropertyFilterToken[];\n onTokensChange: (tokens: PropertyFilterToken[]) => void;\n disabled?: boolean;\n /**\n * Field id that was just added via the Creator — rendered pill auto-focuses\n * its input so the user can start typing immediately.\n */\n autoFocusFieldId?: string;\n /**\n * Field ids whose pills must remain visible and read-only — value stays\n * displayed but cannot be edited or removed. Use when an upstream context\n * (e.g. agent-scoped traces tab) pre-applies a filter that the user must\n * not be able to clear.\n */\n lockedFieldIds?: readonly string[];\n /** Tooltip content shown on hover/focus of any locked pill. */\n lockedTooltipContent?: ReactNode;\n};\n\nfunction stringifyTokenValue(value: string | string[]) {\n if (Array.isArray(value)) return value.length === 0 ? 'Any' : value.join(', ');\n return value;\n}\n\nconst DEFAULT_LOCKED_TOOLTIP = 'This filter is set by the current context and cannot be removed here.';\n\nfunction lookupOptionLabel(field: PropertyFilterField, value: string | string[]): string {\n if (field.kind === 'pick-multi' && field.options) {\n if (Array.isArray(value)) {\n if (value.length === 0) return 'Any';\n return value.map(v => field.options.find(o => o.value === v)?.label ?? v).join(', ');\n }\n return field.options.find(o => o.value === value)?.label ?? value;\n }\n return stringifyTokenValue(value);\n}\n\ntype LockedTokenPillProps = {\n field: PropertyFilterField;\n value: string | string[];\n tooltipContent: ReactNode;\n};\n\nfunction LockedTokenPill({ field, value, tooltipContent }: LockedTokenPillProps) {\n const display = lookupOptionLabel(field, value);\n const lockA11yLabel = `${field.label} filter is locked by context`;\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ButtonsGroup\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{display}</ButtonsGroupText>\n <ButtonsGroupText>\n <LockIcon />\n </ButtonsGroupText>\n </ButtonsGroup>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\ntype TextTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'text' }>;\n value: string;\n onChange: (value: string) => void;\n onRemove: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n};\n\nfunction TextTokenPill({ field, value, onChange, onRemove, disabled, autoFocus }: TextTokenPillProps) {\n // Local draft keeps the caret stable when the URL round-trip trims the\n // stored value (e.g. trailing spaces). We only re-sync from the prop when\n // the external value is genuinely different from our current (trimmed) draft.\n const [draft, setDraft] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (draft.trim() !== value) setDraft(value);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (autoFocus) inputRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Input\n ref={inputRef}\n disabled={disabled}\n value={draft}\n placeholder={field.placeholder ?? `Enter ${field.label}`}\n onChange={e => {\n const next = e.target.value;\n setDraft(next);\n // Apply live — URL and traces query update on every keystroke.\n // Empty values persist as empty-value tokens so the pill stays visible.\n if (next.trim() !== value) onChange(next);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = draft.trim();\n if (trimmed !== value) onChange(trimmed);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setDraft(value);\n e.currentTarget.blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onMouseDown={e => e.preventDefault()}\n onClick={onRemove}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\ntype PickMultiTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n token: PropertyFilterToken;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[]) => void;\n onRemove: () => void;\n disabled?: boolean;\n};\n\nfunction PickMultiTokenPill({ field, token, tokens, onChange, onRemove, disabled }: PickMultiTokenPillProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled}>\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={MENU_SIDE_OFFSET} className=\"w-64 p-0\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button type=\"button\" disabled={disabled} aria-label={`Remove ${field.label} filter`} onClick={onRemove}>\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\n/**\n * Applied filter pills. Text/id-style tokens render with an always-active\n * input so the user can edit the value inline (and an empty token is valid —\n * it persists in the URL until the user explicitly removes it via ×).\n * Pick-multi tokens render with a clickable value that opens the same side\n * popover as the Filter Creator so the user can update selections in place.\n * Creation lives in a separate component (PropertyFilterCreator).\n */\nexport function PropertyFilterApplied({\n fields,\n tokens,\n onTokensChange,\n disabled,\n autoFocusFieldId,\n lockedFieldIds,\n lockedTooltipContent = DEFAULT_LOCKED_TOOLTIP,\n}: PropertyFilterAppliedProps) {\n if (tokens.length === 0) return null;\n\n const lockedSet = new Set(lockedFieldIds ?? []);\n\n const replaceTokenAt = (index: number, next: PropertyFilterToken) => {\n const copy = [...tokens];\n copy[index] = next;\n onTokensChange(copy);\n };\n\n const removeTokenAt = (index: number) => {\n onTokensChange(tokens.filter((_, i) => i !== index));\n };\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n {tokens.map((token, index) => {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return null;\n\n if (lockedSet.has(token.fieldId)) {\n return (\n <LockedTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n tooltipContent={lockedTooltipContent}\n />\n );\n }\n\n if (field.kind === 'text' && !Array.isArray(token.value)) {\n return (\n <TextTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n disabled={disabled}\n autoFocus={autoFocusFieldId === token.fieldId}\n onChange={nextValue => replaceTokenAt(index, { fieldId: token.fieldId, value: nextValue })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n if (field.kind === 'pick-multi') {\n return (\n <PickMultiTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n token={token}\n tokens={tokens}\n disabled={disabled}\n // Unselecting everything (empty array) keeps the pill alive in a\n // neutral state — the user explicitly removes it via ×. This lets\n // the page-level Reset neutralize values without dropping the pill.\n onChange={(fieldId, value) => replaceTokenAt(index, { fieldId, value })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":["jsxs","jsx","Button","XIcon","DropdownMenu","EllipsisVerticalIcon","SaveIcon","Trash2Icon","cn","menuItemClass","useFluidMenuItemRef","menuItemCheckClass","CheckIcon","useState","useFluidMenu","useMemo","Fragment","menuSearchClasses","SearchIcon","passwordManagerOptOutProps","menuEmptyClass","Spinner","FluidMenuItems","TooltipProvider","Tooltip","TooltipTrigger","ButtonsGroup","ButtonsGroupText","LockIcon","TooltipContent","useRef","useEffect","Input","Popover","PopoverTrigger","PopoverContent","MENU_SIDE_OFFSET"],"mappings":"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"}
|
|
@@ -8,8 +8,9 @@ import { b as TooltipProvider, T as Tooltip, c as TooltipTrigger, a as TooltipCo
|
|
|
8
8
|
import { S as Spinner } from './spinner-CFtgt3oI.js';
|
|
9
9
|
import { useFluidMenu, FluidMenuItems, useFluidMenuItemRef } from './primitives/fluid-menu.es.js';
|
|
10
10
|
import { menuSearchClasses, menuEmptyClass, menuItemCheckClass, menuItemClass, MENU_SIDE_OFFSET } from './primitives/menu-item.es.js';
|
|
11
|
+
import { passwordManagerOptOutProps } from './primitives/password-manager-autofill.es.js';
|
|
11
12
|
import { c as cn } from './cn-coERSHz5.js';
|
|
12
|
-
import { I as Input } from './input-
|
|
13
|
+
import { I as Input } from './input-DQFUjtnh.js';
|
|
13
14
|
import { P as Popover, b as PopoverTrigger, a as PopoverContent } from './popover-Jf2UUdQ1.js';
|
|
14
15
|
|
|
15
16
|
function PropertyFilterActions({
|
|
@@ -101,6 +102,7 @@ function PickMultiPanel({ field, tokens, onChange }) {
|
|
|
101
102
|
onChange: (e) => setQuery(e.target.value),
|
|
102
103
|
placeholder: `Search ${field.label.toLowerCase()}...`,
|
|
103
104
|
className: menuSearchClasses.input,
|
|
105
|
+
...passwordManagerOptOutProps,
|
|
104
106
|
onKeyDown: (e) => {
|
|
105
107
|
if (e.key !== "ArrowDown") return;
|
|
106
108
|
const panel = e.currentTarget.closest("[data-pick-multi-panel]");
|
|
@@ -334,4 +336,4 @@ function PropertyFilterApplied({
|
|
|
334
336
|
}
|
|
335
337
|
|
|
336
338
|
export { PropertyFilterApplied as P, PropertyFilterActions as a, PickMultiPanel as b };
|
|
337
|
-
//# sourceMappingURL=property-filter-applied-
|
|
339
|
+
//# sourceMappingURL=property-filter-applied-e0Vg1895.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"property-filter-applied-e0Vg1895.js","sources":["../src/ds/components/PropertyFilter/property-filter-actions.tsx","../src/ds/components/PropertyFilter/pick-multi-panel.tsx","../src/ds/components/PropertyFilter/property-filter-applied.tsx"],"sourcesContent":["import { EllipsisVerticalIcon, SaveIcon, Trash2Icon, XIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button/Button';\nimport { DropdownMenu } from '@/ds/components/DropdownMenu/dropdown-menu';\n\nexport type PropertyFilterActionsProps = {\n disabled?: boolean;\n /** Neutralize each pill's value (keep pills, clear values). Shown as a button, not a menu item. */\n onClear?: () => void;\n /** Fully remove all active filters. Rendered as \"Remove all filters\" inside the overflow menu. */\n onRemoveAll?: () => void;\n /** Persist the current filter set (typically to localStorage) for later restoration. */\n onSave?: () => void;\n /** Drop a previously-saved filter set. Wire only when a saved set actually exists. */\n onRemoveSaved?: () => void;\n};\n\n/**\n * Shared action bar for filter-driven pages (traces, logs, …). Renders a\n * Clear button and an overflow menu with Remove all / Save / Remove saved actions.\n */\nexport function PropertyFilterActions({\n disabled,\n onClear,\n onRemoveAll,\n onSave,\n onRemoveSaved,\n}: PropertyFilterActionsProps) {\n const hasMenuItems = !!(onRemoveAll || onSave || onRemoveSaved);\n if (!onClear && !hasMenuItems) return null;\n\n return (\n <div className=\"flex items-center gap-2\">\n {onClear && (\n <Button disabled={disabled} size=\"md\" onClick={onClear} icon={<XIcon />}>\n Clear\n </Button>\n )}\n\n {hasMenuItems && (\n <DropdownMenu>\n <DropdownMenu.Trigger asChild>\n <Button disabled={disabled} size=\"md\" aria-label=\"More filter actions\">\n <EllipsisVerticalIcon />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {onRemoveAll && (\n <DropdownMenu.Item onSelect={() => onRemoveAll()}>\n <XIcon />\n Remove all filters\n </DropdownMenu.Item>\n )}\n {onRemoveAll && (onSave || onRemoveSaved) && <DropdownMenu.Separator />}\n {onSave && (\n <DropdownMenu.Item onSelect={() => onSave()}>\n <SaveIcon />\n Save filters for next time\n </DropdownMenu.Item>\n )}\n {onRemoveSaved && (\n <DropdownMenu.Item onSelect={() => onRemoveSaved()}>\n <Trash2Icon />\n Remove saved filters\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Content>\n </DropdownMenu>\n )}\n </div>\n );\n}\n","import { CheckIcon, SearchIcon } from 'lucide-react';\nimport { useMemo, useState } from 'react';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { menuEmptyClass, menuItemCheckClass, menuItemClass, menuSearchClasses } from '@/ds/primitives/menu-item';\nimport { passwordManagerOptOutProps } from '@/ds/primitives/password-manager-autofill';\nimport { cn } from '@/lib/utils';\n\n// Same rendering as Combobox items: no visible control, a trailing check when selected.\n// Focus is on the item itself (roving via [data-pick-multi-item]): the fluid highlight follows it.\nconst pickMultiItemClass = cn(menuItemClass, 'min-w-0 focus:text-foreground');\n\nfunction PickMultiItem({\n role,\n checked,\n label,\n onClick,\n}: {\n role: 'checkbox' | 'radio';\n checked: boolean;\n label: string;\n onClick: () => void;\n}) {\n return (\n <button\n ref={useFluidMenuItemRef<HTMLButtonElement>()}\n type=\"button\"\n role={role}\n aria-checked={checked}\n data-selected={checked || undefined}\n data-pick-multi-item=\"\"\n title={label}\n className={pickMultiItemClass}\n onClick={onClick}\n >\n <span className=\"min-w-0 flex-1 truncate\">{label}</span>\n {checked && (\n <span className={menuItemCheckClass}>\n <CheckIcon />\n </span>\n )}\n </button>\n );\n}\n\ntype PickMultiField = Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n\nexport type PickMultiPanelProps = {\n field: PickMultiField;\n tokens: PropertyFilterToken[];\n /** Always carries a value: an empty list is how the panel says \"nothing selected\". */\n onChange: (fieldId: string, value: string | string[]) => void;\n};\n\n/**\n * Reusable body for a pick-multi side popover: optional search input plus a\n * radio group (single-select) or checkbox list (when `field.multi` is true).\n * Shared between the Filter Creator's property-picker side popover and the\n * PropertyFilterApplied pill's inline editor so both surfaces use the exact same UI.\n */\nexport function PickMultiPanel({ field, tokens, onChange }: PickMultiPanelProps) {\n const [query, setQuery] = useState('');\n const menu = useFluidMenu<HTMLDivElement>();\n const listProps = {\n className: cn('max-h-[80dvh] overflow-auto p-1', menu.containerClassName),\n ...menu.getContainerProps({}),\n };\n\n const filteredOptions = useMemo(() => {\n const q = query.trim().toLowerCase();\n if (!q) return field.options;\n return field.options.filter(o => o.label.toLowerCase().includes(q));\n }, [field.options, query]);\n\n const token = useMemo(() => tokens.find(t => t.fieldId === field.id), [tokens, field.id]);\n // Fall back to `defaultValue` when no token exists — lets view-toggle fields (e.g. List mode)\n // show their default option pre-selected before the user explicitly picks one.\n const selectedValue = typeof token?.value === 'string' ? token.value : !field.multi ? field.defaultValue : undefined;\n const selectedValues = useMemo<string[]>(() => {\n const value = token?.value;\n if (Array.isArray(value)) return value;\n if (typeof value === 'string') return [value];\n return [];\n }, [token]);\n\n return (\n <>\n {field.searchable !== false && (\n <div className={menuSearchClasses.container}>\n <SearchIcon className={menuSearchClasses.icon} />\n <input\n type=\"text\"\n value={query}\n onChange={e => setQuery(e.target.value)}\n placeholder={`Search ${field.label.toLowerCase()}...`}\n className={menuSearchClasses.input}\n {...passwordManagerOptOutProps}\n onKeyDown={e => {\n if (e.key !== 'ArrowDown') return;\n const panel = e.currentTarget.closest<HTMLElement>('[data-pick-multi-panel]');\n const first = panel?.querySelector<HTMLElement>('[data-pick-multi-item]:not([disabled])');\n if (!first) return;\n e.preventDefault();\n e.stopPropagation();\n first.focus();\n }}\n />\n </div>\n )}\n\n {field.isLoading ? (\n <div className={cn(menuEmptyClass, 'm-1')}>\n <Spinner size=\"sm\" className=\"size-3 text-muted-foreground\" />\n Loading options…\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={cn(menuEmptyClass, 'm-1')}>{field.emptyText ?? 'No option found.'}</div>\n ) : field.multi ? (\n <div {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => {\n const checked = selectedValues.includes(option.value);\n return (\n <PickMultiItem\n key={option.value}\n role=\"checkbox\"\n checked={checked}\n label={option.label}\n onClick={() =>\n onChange(\n field.id,\n checked ? selectedValues.filter(v => v !== option.value) : [...selectedValues, option.value],\n )\n }\n />\n );\n })}\n </FluidMenuItems>\n </div>\n ) : (\n <div role=\"radiogroup\" {...listProps}>\n <FluidMenuItems menu={menu}>\n {filteredOptions.map(option => (\n <PickMultiItem\n key={option.value}\n role=\"radio\"\n checked={selectedValue === option.value}\n label={option.label}\n onClick={() => onChange(field.id, option.value)}\n />\n ))}\n {!field.omitAnyOption && (\n <PickMultiItem\n role=\"radio\"\n checked={selectedValue === 'Any'}\n label=\"Any\"\n onClick={() => onChange(field.id, 'Any')}\n />\n )}\n </FluidMenuItems>\n </div>\n )}\n </>\n );\n}\n","import { LockIcon, XIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { Button } from '../Button';\nimport { ButtonsGroup, ButtonsGroupText } from '../ButtonsGroup';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../Tooltip';\nimport { PickMultiPanel } from './pick-multi-panel';\nimport type { PropertyFilterField, PropertyFilterToken } from './types';\nimport { Input } from '@/ds/components/Input';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/ds/components/Popover/popover';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\n\nexport type PropertyFilterAppliedProps = {\n fields: PropertyFilterField[];\n tokens: PropertyFilterToken[];\n onTokensChange: (tokens: PropertyFilterToken[]) => void;\n disabled?: boolean;\n /**\n * Field id that was just added via the Creator — rendered pill auto-focuses\n * its input so the user can start typing immediately.\n */\n autoFocusFieldId?: string;\n /**\n * Field ids whose pills must remain visible and read-only — value stays\n * displayed but cannot be edited or removed. Use when an upstream context\n * (e.g. agent-scoped traces tab) pre-applies a filter that the user must\n * not be able to clear.\n */\n lockedFieldIds?: readonly string[];\n /** Tooltip content shown on hover/focus of any locked pill. */\n lockedTooltipContent?: ReactNode;\n};\n\nfunction stringifyTokenValue(value: string | string[]) {\n if (Array.isArray(value)) return value.length === 0 ? 'Any' : value.join(', ');\n return value;\n}\n\nconst DEFAULT_LOCKED_TOOLTIP = 'This filter is set by the current context and cannot be removed here.';\n\nfunction lookupOptionLabel(field: PropertyFilterField, value: string | string[]): string {\n if (field.kind === 'pick-multi' && field.options) {\n if (Array.isArray(value)) {\n if (value.length === 0) return 'Any';\n return value.map(v => field.options.find(o => o.value === v)?.label ?? v).join(', ');\n }\n return field.options.find(o => o.value === value)?.label ?? value;\n }\n return stringifyTokenValue(value);\n}\n\ntype LockedTokenPillProps = {\n field: PropertyFilterField;\n value: string | string[];\n tooltipContent: ReactNode;\n};\n\nfunction LockedTokenPill({ field, value, tooltipContent }: LockedTokenPillProps) {\n const display = lookupOptionLabel(field, value);\n const lockA11yLabel = `${field.label} filter is locked by context`;\n\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <ButtonsGroup\n data-locked-field-id={field.id}\n data-property-filter-pill=\"locked\"\n tabIndex={0}\n aria-label={lockA11yLabel}\n >\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{display}</ButtonsGroupText>\n <ButtonsGroupText>\n <LockIcon />\n </ButtonsGroupText>\n </ButtonsGroup>\n </TooltipTrigger>\n <TooltipContent>{tooltipContent}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\ntype TextTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'text' }>;\n value: string;\n onChange: (value: string) => void;\n onRemove: () => void;\n disabled?: boolean;\n autoFocus?: boolean;\n};\n\nfunction TextTokenPill({ field, value, onChange, onRemove, disabled, autoFocus }: TextTokenPillProps) {\n // Local draft keeps the caret stable when the URL round-trip trims the\n // stored value (e.g. trailing spaces). We only re-sync from the prop when\n // the external value is genuinely different from our current (trimmed) draft.\n const [draft, setDraft] = useState(value);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (draft.trim() !== value) setDraft(value);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n useEffect(() => {\n if (autoFocus) inputRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Input\n ref={inputRef}\n disabled={disabled}\n value={draft}\n placeholder={field.placeholder ?? `Enter ${field.label}`}\n onChange={e => {\n const next = e.target.value;\n setDraft(next);\n // Apply live — URL and traces query update on every keystroke.\n // Empty values persist as empty-value tokens so the pill stays visible.\n if (next.trim() !== value) onChange(next);\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n const trimmed = draft.trim();\n if (trimmed !== value) onChange(trimmed);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setDraft(value);\n e.currentTarget.blur();\n }\n }}\n />\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onMouseDown={e => e.preventDefault()}\n onClick={onRemove}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\ntype PickMultiTokenPillProps = {\n field: Extract<PropertyFilterField, { kind: 'pick-multi' }>;\n token: PropertyFilterToken;\n tokens: PropertyFilterToken[];\n onChange: (fieldId: string, value: string | string[]) => void;\n onRemove: () => void;\n disabled?: boolean;\n};\n\nfunction PickMultiTokenPill({ field, token, tokens, onChange, onRemove, disabled }: PickMultiTokenPillProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <ButtonsGroup>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button type=\"button\" disabled={disabled}>\n {stringifyTokenValue(token.value)}\n </Button>\n </PopoverTrigger>\n <PopoverContent align=\"start\" sideOffset={MENU_SIDE_OFFSET} className=\"w-64 p-0\" data-pick-multi-panel>\n <PickMultiPanel field={field} tokens={tokens} onChange={onChange} />\n </PopoverContent>\n </Popover>\n <Button type=\"button\" disabled={disabled} aria-label={`Remove ${field.label} filter`} onClick={onRemove}>\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n}\n\n/**\n * Applied filter pills. Text/id-style tokens render with an always-active\n * input so the user can edit the value inline (and an empty token is valid —\n * it persists in the URL until the user explicitly removes it via ×).\n * Pick-multi tokens render with a clickable value that opens the same side\n * popover as the Filter Creator so the user can update selections in place.\n * Creation lives in a separate component (PropertyFilterCreator).\n */\nexport function PropertyFilterApplied({\n fields,\n tokens,\n onTokensChange,\n disabled,\n autoFocusFieldId,\n lockedFieldIds,\n lockedTooltipContent = DEFAULT_LOCKED_TOOLTIP,\n}: PropertyFilterAppliedProps) {\n if (tokens.length === 0) return null;\n\n const lockedSet = new Set(lockedFieldIds ?? []);\n\n const replaceTokenAt = (index: number, next: PropertyFilterToken) => {\n const copy = [...tokens];\n copy[index] = next;\n onTokensChange(copy);\n };\n\n const removeTokenAt = (index: number) => {\n onTokensChange(tokens.filter((_, i) => i !== index));\n };\n\n return (\n <div className=\"flex flex-wrap items-center gap-2\">\n {tokens.map((token, index) => {\n const field = fields.find(f => f.id === token.fieldId);\n if (!field) return null;\n\n if (lockedSet.has(token.fieldId)) {\n return (\n <LockedTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n tooltipContent={lockedTooltipContent}\n />\n );\n }\n\n if (field.kind === 'text' && !Array.isArray(token.value)) {\n return (\n <TextTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n value={token.value}\n disabled={disabled}\n autoFocus={autoFocusFieldId === token.fieldId}\n onChange={nextValue => replaceTokenAt(index, { fieldId: token.fieldId, value: nextValue })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n if (field.kind === 'pick-multi') {\n return (\n <PickMultiTokenPill\n key={`${token.fieldId}-${index}`}\n field={field}\n token={token}\n tokens={tokens}\n disabled={disabled}\n // Unselecting everything (empty array) keeps the pill alive in a\n // neutral state — the user explicitly removes it via ×. This lets\n // the page-level Reset neutralize values without dropping the pill.\n onChange={(fieldId, value) => replaceTokenAt(index, { fieldId, value })}\n onRemove={() => removeTokenAt(index)}\n />\n );\n }\n\n return (\n <ButtonsGroup key={`${token.fieldId}-${index}`}>\n <ButtonsGroupText>{field.label}</ButtonsGroupText>\n <ButtonsGroupText>is</ButtonsGroupText>\n <ButtonsGroupText>{stringifyTokenValue(token.value)}</ButtonsGroupText>\n <Button\n type=\"button\"\n disabled={disabled}\n aria-label={`Remove ${field.label} filter`}\n onClick={() => removeTokenAt(index)}\n >\n <XIcon />\n </Button>\n </ButtonsGroup>\n );\n })}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
const lucideReact = require('lucide-react');
|
|
5
|
-
const activity = require('./activity-
|
|
5
|
+
const activity = require('./activity-CaFdLiPz.cjs');
|
|
6
6
|
const reasoningVisibility = require('./reasoning-visibility-DXho4jGC.cjs');
|
|
7
7
|
const markdownRenderer = require('./markdown-renderer-B2RV53gr.cjs');
|
|
8
8
|
|
|
@@ -31,4 +31,4 @@ function ReasoningActivity({ defaultOpen = true, ...content }) {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
exports.ReasoningActivity = ReasoningActivity;
|
|
34
|
-
//# sourceMappingURL=reasoning-activity-
|
|
34
|
+
//# sourceMappingURL=reasoning-activity-Cl7kaqgZ.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning-activity-
|
|
1
|
+
{"version":3,"file":"reasoning-activity-Cl7kaqgZ.cjs","sources":["../src/ds/components/ai/activity/presets/reasoning-activity.tsx"],"sourcesContent":["import { Brain } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n const { text, redacted, streaming } = content;\n const body = redacted ? 'Reasoning was redacted by the provider.' : text;\n\n return (\n <ActivityItem\n icon={<Brain aria-hidden />}\n label=\"Reasoning\"\n status={streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {body.trim().length > 0 && (\n <MarkdownRenderer\n className=\"text-caption text-muted-foreground [&_p]:my-0.5\"\n streaming={streaming && !redacted}\n >\n {body}\n </MarkdownRenderer>\n )}\n </ActivityItem>\n );\n}\n"],"names":["hasVisibleReasoning","jsx","ActivityItem","Brain","MarkdownRenderer"],"mappings":";;;;;;;;AAUO,SAAS,kBAAkB,EAAE,WAAA,GAAc,IAAA,EAAM,GAAG,SAAQ,EAA2B;AAC5F,EAAA,IAAI,CAACA,uCAAA,CAAoB,OAAO,CAAA,EAAG,OAAO,IAAA;AAE1C,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,GAAI,OAAA;AACtC,EAAA,MAAM,IAAA,GAAO,WAAW,yCAAA,GAA4C,IAAA;AAEpE,EAAA,uBACEC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAMD,cAAA,CAACE,iBAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,MACzB,KAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,YAAY,SAAA,GAAY,MAAA;AAAA,MAChC,WAAA;AAAA,MACA,YAAA,EAAW,WAAA;AAAA,MAEV,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,oBACpBF,cAAA;AAAA,QAACG,iCAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iDAAA;AAAA,UACV,SAAA,EAAW,aAAa,CAAC,QAAA;AAAA,UAExB,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Brain } from 'lucide-react';
|
|
3
|
-
import { g as ActivityItem } from './activity-
|
|
3
|
+
import { g as ActivityItem } from './activity-BsrB5ADa.js';
|
|
4
4
|
import { h as hasVisibleReasoning } from './reasoning-visibility-B9rA0AIj.js';
|
|
5
5
|
import { M as MarkdownRenderer } from './markdown-renderer-9YP7IIQd.js';
|
|
6
6
|
|
|
@@ -29,4 +29,4 @@ function ReasoningActivity({ defaultOpen = true, ...content }) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export { ReasoningActivity as R };
|
|
32
|
-
//# sourceMappingURL=reasoning-activity-
|
|
32
|
+
//# sourceMappingURL=reasoning-activity-D8AF1htp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reasoning-activity-
|
|
1
|
+
{"version":3,"file":"reasoning-activity-D8AF1htp.js","sources":["../src/ds/components/ai/activity/presets/reasoning-activity.tsx"],"sourcesContent":["import { Brain } from 'lucide-react';\nimport { ActivityItem } from '../activity';\nimport { hasVisibleReasoning } from './reasoning-visibility';\nimport type { ReasoningContent } from './reasoning-visibility';\nimport { MarkdownRenderer } from '@/ds/components/MarkdownRenderer';\n\nexport interface ReasoningActivityProps extends ReasoningContent {\n defaultOpen?: boolean;\n}\n\nexport function ReasoningActivity({ defaultOpen = true, ...content }: ReasoningActivityProps) {\n if (!hasVisibleReasoning(content)) return null;\n\n const { text, redacted, streaming } = content;\n const body = redacted ? 'Reasoning was redacted by the provider.' : text;\n\n return (\n <ActivityItem\n icon={<Brain aria-hidden />}\n label=\"Reasoning\"\n status={streaming ? 'running' : 'idle'}\n defaultOpen={defaultOpen}\n aria-label=\"Reasoning\"\n >\n {body.trim().length > 0 && (\n <MarkdownRenderer\n className=\"text-caption text-muted-foreground [&_p]:my-0.5\"\n streaming={streaming && !redacted}\n >\n {body}\n </MarkdownRenderer>\n )}\n </ActivityItem>\n );\n}\n"],"names":[],"mappings":";;;;;;AAUO,SAAS,kBAAkB,EAAE,WAAA,GAAc,IAAA,EAAM,GAAG,SAAQ,EAA2B;AAC5F,EAAA,IAAI,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG,OAAO,IAAA;AAE1C,EAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,GAAI,OAAA;AACtC,EAAA,MAAM,IAAA,GAAO,WAAW,yCAAA,GAA4C,IAAA;AAEpE,EAAA,uBACE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,IAAA,kBAAM,GAAA,CAAC,KAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,MACzB,KAAA,EAAM,WAAA;AAAA,MACN,MAAA,EAAQ,YAAY,SAAA,GAAY,MAAA;AAAA,MAChC,WAAA;AAAA,MACA,YAAA,EAAW,WAAA;AAAA,MAEV,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,oBACpB,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,iDAAA;AAAA,UACV,SAAA,EAAW,aAAa,CAAC,QAAA;AAAA,UAExB,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -5,7 +5,7 @@ const lucideReact = require('lucide-react');
|
|
|
5
5
|
const React = require('react');
|
|
6
6
|
const field = require('./field-D1SVMPMz.cjs');
|
|
7
7
|
require('./field-control-aria-WzMGs0A4.cjs');
|
|
8
|
-
const inputGroup = require('./input-group-
|
|
8
|
+
const inputGroup = require('./input-group-Cxfp0mxQ.cjs');
|
|
9
9
|
const mergeRefs = require('./merge-refs-BLbKe138.cjs');
|
|
10
10
|
|
|
11
11
|
function SearchInput({
|
|
@@ -47,4 +47,4 @@ function SearchInput({
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
exports.SearchInput = SearchInput;
|
|
50
|
-
//# sourceMappingURL=search-input-
|
|
50
|
+
//# sourceMappingURL=search-input-BHF2RziH.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-input-
|
|
1
|
+
{"version":3,"file":"search-input-BHF2RziH.cjs","sources":["../src/ds/components/SearchInput/search-input.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport type { Ref } from 'react';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupInputProps, InputGroupProps } from '@/ds/components/InputGroup';\nimport { mergeRefs } from '@/lib/merge-refs';\n\nexport type SearchInputProps = Omit<InputGroupInputProps, 'value' | 'onChange' | 'type' | 'ref' | 'error'> & {\n label: string;\n value: string;\n onValueChange: (value: string) => void;\n onClose?: () => void;\n size?: InputGroupProps['size'];\n className?: string;\n ref?: Ref<HTMLInputElement>;\n};\n\nexport function SearchInput({\n label,\n value,\n onValueChange,\n onClose,\n size,\n className,\n ref,\n ...inputProps\n}: SearchInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clear = () => {\n onValueChange('');\n inputRef.current?.focus();\n };\n\n const close = () => {\n onValueChange('');\n onClose?.();\n };\n\n return (\n <Field className={className}>\n <FieldLabel className=\"sr-only\">{label}</FieldLabel>\n <InputGroup size={size} className=\"min-w-0\">\n <InputGroupAddon>\n <SearchIcon />\n </InputGroupAddon>\n <InputGroupInput\n ref={mergeRefs(inputRef, ref)}\n value={value}\n onChange={event => onValueChange(event.target.value)}\n {...inputProps}\n type=\"search\"\n />\n {(onClose || value) && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton aria-label={onClose ? 'Close search' : 'Clear search'} onClick={onClose ? close : clear}>\n <XIcon />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n </Field>\n );\n}\n"],"names":["useRef","jsxs","Field","jsx","FieldLabel","InputGroup","InputGroupAddon","SearchIcon","InputGroupInput","mergeRefs","InputGroupButton","XIcon"],"mappings":";;;;;;;;;;AAkBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAA,GAAWA,aAAyB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,uBACEC,eAAA,CAACC,eAAM,SAAA,EACL,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvCH,eAAA,CAACI,qBAAA,EAAA,EAAW,IAAA,EAAY,SAAA,EAAU,SAAA,EAChC,QAAA,EAAA;AAAA,sBAAAF,cAAA,CAACG,0BAAA,EAAA,EACC,QAAA,kBAAAH,cAAA,CAACI,sBAAA,EAAA,EAAW,CAAA,EACd,CAAA;AAAA,sBACAJ,cAAA;AAAA,QAACK,0BAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAKC,mBAAA,CAAU,QAAA,EAAU,GAAG,CAAA;AAAA,UAC5B,KAAA;AAAA,UACA,QAAA,EAAU,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAClD,GAAG,UAAA;AAAA,UACJ,IAAA,EAAK;AAAA;AAAA,OACP;AAAA,MAAA,CACE,WAAW,KAAA,qBACXN,cAAA,CAACG,8BAAgB,KAAA,EAAM,YAAA,EACrB,yCAACI,2BAAA,EAAA,EAAiB,YAAA,EAAY,UAAU,cAAA,GAAiB,cAAA,EAAgB,SAAS,OAAA,GAAU,KAAA,GAAQ,OAClG,QAAA,kBAAAP,cAAA,CAACQ,iBAAA,EAAA,EAAM,GACT,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -3,7 +3,7 @@ import { SearchIcon, XIcon } from 'lucide-react';
|
|
|
3
3
|
import { useRef } from 'react';
|
|
4
4
|
import { F as Field, e as FieldLabel } from './field-B89BEZg4.js';
|
|
5
5
|
import './field-control-aria-DB6y41tQ.js';
|
|
6
|
-
import { I as InputGroup, a as InputGroupAddon, c as InputGroupInput, b as InputGroupButton } from './input-group-
|
|
6
|
+
import { I as InputGroup, a as InputGroupAddon, c as InputGroupInput, b as InputGroupButton } from './input-group-C_2SrLdX.js';
|
|
7
7
|
import { m as mergeRefs } from './merge-refs-DA1xt2OQ.js';
|
|
8
8
|
|
|
9
9
|
function SearchInput({
|
|
@@ -45,4 +45,4 @@ function SearchInput({
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
export { SearchInput as S };
|
|
48
|
-
//# sourceMappingURL=search-input-
|
|
48
|
+
//# sourceMappingURL=search-input-BgVjoPtF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-input-
|
|
1
|
+
{"version":3,"file":"search-input-BgVjoPtF.js","sources":["../src/ds/components/SearchInput/search-input.tsx"],"sourcesContent":["import { SearchIcon, XIcon } from 'lucide-react';\nimport { useRef } from 'react';\nimport type { Ref } from 'react';\nimport { Field, FieldLabel } from '@/ds/components/Field';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/ds/components/InputGroup';\nimport type { InputGroupInputProps, InputGroupProps } from '@/ds/components/InputGroup';\nimport { mergeRefs } from '@/lib/merge-refs';\n\nexport type SearchInputProps = Omit<InputGroupInputProps, 'value' | 'onChange' | 'type' | 'ref' | 'error'> & {\n label: string;\n value: string;\n onValueChange: (value: string) => void;\n onClose?: () => void;\n size?: InputGroupProps['size'];\n className?: string;\n ref?: Ref<HTMLInputElement>;\n};\n\nexport function SearchInput({\n label,\n value,\n onValueChange,\n onClose,\n size,\n className,\n ref,\n ...inputProps\n}: SearchInputProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const clear = () => {\n onValueChange('');\n inputRef.current?.focus();\n };\n\n const close = () => {\n onValueChange('');\n onClose?.();\n };\n\n return (\n <Field className={className}>\n <FieldLabel className=\"sr-only\">{label}</FieldLabel>\n <InputGroup size={size} className=\"min-w-0\">\n <InputGroupAddon>\n <SearchIcon />\n </InputGroupAddon>\n <InputGroupInput\n ref={mergeRefs(inputRef, ref)}\n value={value}\n onChange={event => onValueChange(event.target.value)}\n {...inputProps}\n type=\"search\"\n />\n {(onClose || value) && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton aria-label={onClose ? 'Close search' : 'Clear search'} onClick={onClose ? close : clear}>\n <XIcon />\n </InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n </Field>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAkBO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAqB;AACnB,EAAA,MAAM,QAAA,GAAW,OAAyB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,QAAA,CAAS,SAAS,KAAA,EAAM;AAAA,EAC1B,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAA,aAAA,CAAc,EAAE,CAAA;AAChB,IAAA,OAAA,IAAU;AAAA,EACZ,CAAA;AAEA,EAAA,uBACE,IAAA,CAAC,SAAM,SAAA,EACL,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvC,IAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAY,SAAA,EAAU,SAAA,EAChC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,CAAA,EACd,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,SAAA,CAAU,QAAA,EAAU,GAAG,CAAA;AAAA,UAC5B,KAAA;AAAA,UACA,QAAA,EAAU,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,UAClD,GAAG,UAAA;AAAA,UACJ,IAAA,EAAK;AAAA;AAAA,OACP;AAAA,MAAA,CACE,WAAW,KAAA,qBACX,GAAA,CAAC,mBAAgB,KAAA,EAAM,YAAA,EACrB,8BAAC,gBAAA,EAAA,EAAiB,YAAA,EAAY,UAAU,cAAA,GAAiB,cAAA,EAAgB,SAAS,OAAA,GAAU,KAAA,GAAQ,OAClG,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,GACT,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|