@mastra/playground-ui 55.0.0-alpha.5 → 55.0.0
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/{Button-BsHGVRjh.cjs → Button-BJOVwaxp.cjs} +13 -12
- package/dist/Button-BJOVwaxp.cjs.map +1 -0
- package/dist/{Button-DsTY88Xz.js → Button-BVGwYwHT.js} +14 -13
- package/dist/Button-BVGwYwHT.js.map +1 -0
- package/dist/{Notice-B5khVt-8.js → Notice-CMZ86f1g.js} +2 -2
- package/dist/{Notice-B5khVt-8.js.map → Notice-CMZ86f1g.js.map} +1 -1
- package/dist/{Notice-BUSAcuH-.cjs → Notice-D0Mvqvr0.cjs} +2 -2
- package/dist/{Notice-BUSAcuH-.cjs.map → Notice-D0Mvqvr0.cjs.map} +1 -1
- package/dist/{SessionExpired-C4w2ai5-.cjs → SessionExpired-CAOgb-6E.cjs} +2 -2
- package/dist/{SessionExpired-C4w2ai5-.cjs.map → SessionExpired-CAOgb-6E.cjs.map} +1 -1
- package/dist/{SessionExpired-oy5tS_51.js → SessionExpired-DSPFseGA.js} +2 -2
- package/dist/{SessionExpired-oy5tS_51.js.map → SessionExpired-DSPFseGA.js.map} +1 -1
- package/dist/{ask-user-DWUWXbS7.cjs → ask-user-DQGe7ZTv.cjs} +3 -3
- package/dist/{ask-user-DWUWXbS7.cjs.map → ask-user-DQGe7ZTv.cjs.map} +1 -1
- package/dist/{ask-user-D7MeXylO.js → ask-user-Dh9YowL4.js} +3 -3
- package/dist/{ask-user-D7MeXylO.js.map → ask-user-Dh9YowL4.js.map} +1 -1
- package/dist/{buttons-group-B5TBWfs6.js → buttons-group-CHyXDQBp.js} +5 -5
- package/dist/buttons-group-CHyXDQBp.js.map +1 -0
- package/dist/{buttons-group-PqYxKznc.cjs → buttons-group-jq7kUVlX.cjs} +5 -5
- package/dist/buttons-group-jq7kUVlX.cjs.map +1 -0
- package/dist/{checkbox-pvYvwDUy.js → checkbox-CC39oYEv.js} +5 -5
- package/dist/checkbox-CC39oYEv.js.map +1 -0
- package/dist/{checkbox-BNOCksit.cjs → checkbox-DWXCTy8y.cjs} +6 -6
- package/dist/checkbox-DWXCTy8y.cjs.map +1 -0
- package/dist/{code-block-CyHjdW02.js → code-block-BdzrmA-p.js} +5 -5
- package/dist/{code-block-CyHjdW02.js.map → code-block-BdzrmA-p.js.map} +1 -1
- package/dist/{code-block-I7b2Wt_Y.cjs → code-block-D1RequlX.cjs} +5 -5
- package/dist/{code-block-I7b2Wt_Y.cjs.map → code-block-D1RequlX.cjs.map} +1 -1
- package/dist/{code-editor-BeosH5J-.cjs → code-editor-CopnXVKT.cjs} +2 -2
- package/dist/{code-editor-BeosH5J-.cjs.map → code-editor-CopnXVKT.cjs.map} +1 -1
- package/dist/{code-editor-DPYAjQUV.js → code-editor-D7BftGSx.js} +2 -2
- package/dist/{code-editor-DPYAjQUV.js.map → code-editor-D7BftGSx.js.map} +1 -1
- package/dist/{combobox-Cg-7UwwL.cjs → combobox-DO__6QlF.cjs} +4 -5
- package/dist/combobox-DO__6QlF.cjs.map +1 -0
- package/dist/{combobox-8GoJaMs1.js → combobox-Ua6bvpM8.js} +3 -4
- package/dist/combobox-Ua6bvpM8.js.map +1 -0
- package/dist/{command-OXbUDxUu.js → command-CNKdcyyr.js} +4 -11
- package/dist/command-CNKdcyyr.js.map +1 -0
- package/dist/{command-C6cIgH_n.cjs → command-Cva4qgS9.cjs} +5 -12
- package/dist/command-Cva4qgS9.cjs.map +1 -0
- package/dist/components/AlertDialog.cjs.js +1 -1
- package/dist/components/AlertDialog.es.js +1 -1
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/ButtonsGroup.cjs.js +1 -1
- package/dist/components/ButtonsGroup.es.js +1 -1
- package/dist/components/Checkbox.cjs.js +1 -1
- package/dist/components/Checkbox.es.js +1 -1
- package/dist/components/ClampedText.cjs.js +1 -1
- package/dist/components/ClampedText.es.js +1 -1
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Columns.cjs.js +1 -1
- package/dist/components/Columns.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 +2 -2
- package/dist/components/Comment.es.js +2 -2
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +3 -3
- package/dist/components/DataDetailsPanel.es.js +3 -3
- package/dist/components/DataFilter.cjs.js +2 -2
- package/dist/components/DataFilter.es.js +2 -2
- package/dist/components/DataList.cjs.js +4 -4
- 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/DateRangeTimeline.cjs.js +1 -1
- package/dist/components/DateRangeTimeline.es.js +1 -1
- package/dist/components/DateTimePicker.cjs.js +3 -3
- package/dist/components/DateTimePicker.es.js +3 -3
- package/dist/components/DateTimeRangePicker.cjs.js +1 -1
- package/dist/components/DateTimeRangePicker.es.js +1 -1
- package/dist/components/Dialog.cjs.js +2 -2
- package/dist/components/Dialog.es.js +3 -3
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/DropdownMenu.cjs.js +1 -1
- package/dist/components/DropdownMenu.es.js +1 -1
- package/dist/components/EnvironmentVariablesEditor.cjs.js +4 -4
- package/dist/components/EnvironmentVariablesEditor.es.js +4 -4
- package/dist/components/ErrorBoundary.cjs.js +1 -1
- package/dist/components/ErrorBoundary.es.js +1 -1
- package/dist/components/FormFieldBlocks.cjs.js +3 -3
- package/dist/components/FormFieldBlocks.es.js +3 -3
- 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/IntegrationDialog.cjs.js +2 -2
- package/dist/components/IntegrationDialog.es.js +4 -4
- package/dist/components/IntegrationDialog.es.js.map +1 -1
- package/dist/components/JSONSchemaForm.cjs.js +4 -4
- package/dist/components/JSONSchemaForm.es.js +4 -4
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -4
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +2 -4
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MainSidebar.cjs.js +1 -1
- package/dist/components/MainSidebar.es.js +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/Notice.cjs.js +1 -1
- package/dist/components/Notice.es.js +1 -1
- package/dist/components/PageHeader.cjs.js +1 -1
- package/dist/components/PageHeader.es.js +1 -1
- package/dist/components/PrevNextNav.cjs.js +2 -2
- package/dist/components/PrevNextNav.es.js +2 -2
- package/dist/components/PropertyFilter.cjs.js +3 -3
- package/dist/components/PropertyFilter.es.js +4 -4
- package/dist/components/RadioGroup.cjs.js +4 -4
- package/dist/components/RadioGroup.cjs.js.map +1 -1
- package/dist/components/RadioGroup.es.js +3 -3
- package/dist/components/RadioGroup.es.js.map +1 -1
- package/dist/components/RuleBuilder.cjs.js +3 -3
- package/dist/components/RuleBuilder.es.js +3 -3
- package/dist/components/Select.cjs.js +1 -1
- package/dist/components/Select.es.js +1 -1
- package/dist/components/SessionExpired.cjs.js +1 -1
- package/dist/components/SessionExpired.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +4 -4
- package/dist/components/SideDialog.es.js +4 -4
- package/dist/components/Slider.cjs.js +1 -1
- package/dist/components/Slider.es.js +1 -1
- package/dist/components/Switch.cjs.js +1 -1
- package/dist/components/Switch.es.js +1 -1
- package/dist/components/Table.cjs.js +4 -3
- package/dist/components/Table.cjs.js.map +1 -1
- package/dist/components/Table.es.js +3 -2
- package/dist/components/Table.es.js.map +1 -1
- package/dist/components/Tabs.cjs.js +3 -3
- package/dist/components/Tabs.es.js +3 -3
- package/dist/components/Textarea.cjs.js +1 -1
- package/dist/components/Textarea.es.js +1 -1
- package/dist/components/ThreadList.cjs.js +1 -1
- package/dist/components/ThreadList.es.js +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/components/Workflow.cjs.js +6 -6
- package/dist/components/Workflow.es.js +6 -6
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.es.js +2 -2
- package/dist/components/ai/tool-call.cjs.js +16 -6
- package/dist/components/ai/tool-call.cjs.js.map +1 -1
- package/dist/components/ai/tool-call.es.js +17 -7
- package/dist/components/ai/tool-call.es.js.map +1 -1
- package/dist/{copy-button-BW1CfolI.js → copy-button-ChUCFd-x.js} +2 -2
- package/dist/{copy-button-BW1CfolI.js.map → copy-button-ChUCFd-x.js.map} +1 -1
- package/dist/{copy-button-CC4JTC90.cjs → copy-button-zLZfswrj.cjs} +2 -2
- package/dist/{copy-button-CC4JTC90.cjs.map → copy-button-zLZfswrj.cjs.map} +1 -1
- package/dist/{data-code-section-BWaPQ6JT.cjs → data-code-section-BLvh46xK.cjs} +6 -6
- package/dist/{data-code-section-BWaPQ6JT.cjs.map → data-code-section-BLvh46xK.cjs.map} +1 -1
- package/dist/{data-code-section-EmqjYVh1.js → data-code-section-DSelBhmP.js} +6 -6
- package/dist/{data-code-section-EmqjYVh1.js.map → data-code-section-DSelBhmP.js.map} +1 -1
- package/dist/{data-list-BSezaRoI.cjs → data-list-4_cVlINT.cjs} +3 -3
- package/dist/{data-list-BSezaRoI.cjs.map → data-list-4_cVlINT.cjs.map} +1 -1
- package/dist/{data-list-DJ7DgVuH.js → data-list-Bm70XKg_.js} +3 -3
- package/dist/{data-list-DJ7DgVuH.js.map → data-list-Bm70XKg_.js.map} +1 -1
- package/dist/{data-list-skeleton-BiletsX0.cjs → data-list-skeleton-B7flrjdA.cjs} +2 -2
- package/dist/{data-list-skeleton-BiletsX0.cjs.map → data-list-skeleton-B7flrjdA.cjs.map} +1 -1
- package/dist/{data-list-skeleton-QvifQhmC.js → data-list-skeleton-BJVs8rDE.js} +2 -2
- package/dist/{data-list-skeleton-QvifQhmC.js.map → data-list-skeleton-BJVs8rDE.js.map} +1 -1
- package/dist/{data-list-top-0BrqoQba.js → data-list-top-BeUxfGy2.js} +2 -2
- package/dist/{data-list-top-0BrqoQba.js.map → data-list-top-BeUxfGy2.js.map} +1 -1
- package/dist/{data-list-top-D8r8M8JA.cjs → data-list-top-D9zFnKEi.cjs} +2 -2
- package/dist/{data-list-top-D8r8M8JA.cjs.map → data-list-top-D9zFnKEi.cjs.map} +1 -1
- package/dist/{data-panel-C3FczohB.js → data-panel-5iuux0r_.js} +4 -4
- package/dist/{data-panel-C3FczohB.js.map → data-panel-5iuux0r_.js.map} +1 -1
- package/dist/{data-panel-KjzePv5_.cjs → data-panel-tSErqolu.cjs} +4 -4
- package/dist/{data-panel-KjzePv5_.cjs.map → data-panel-tSErqolu.cjs.map} +1 -1
- package/dist/{date-time-range-picker-DU4ynAjj.cjs → date-time-range-picker-C0J7p78l.cjs} +4 -4
- package/dist/{date-time-range-picker-DU4ynAjj.cjs.map → date-time-range-picker-C0J7p78l.cjs.map} +1 -1
- package/dist/{date-time-range-picker-CMzJwQ_s.js → date-time-range-picker-CcoU5-2_.js} +4 -4
- package/dist/{date-time-range-picker-CMzJwQ_s.js.map → date-time-range-picker-CcoU5-2_.js.map} +1 -1
- package/dist/{dialog-CUeeMxRo.cjs → dialog-B1DwyLJJ.cjs} +10 -26
- package/dist/dialog-B1DwyLJJ.cjs.map +1 -0
- package/dist/{dialog-KvPRmHPW.js → dialog-Dfrt_JCJ.js} +10 -26
- package/dist/dialog-Dfrt_JCJ.js.map +1 -0
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -2
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -2
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/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/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/assistant-text-part-renderer.cjs.js +9 -1
- package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.es.js +9 -1
- package/dist/domains/chat/messages/renderers/assistant-text-part-renderer.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +12 -4
- package/dist/domains/chat/messages/renderers/message-text.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +12 -4
- package/dist/domains/chat/messages/renderers/message-text.es.js.map +1 -1
- package/dist/domains/chat/messages/renderers/status-renderers.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/status-renderers.es.js +1 -1
- package/dist/domains/chat/messages/renderers/tool-part.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/tool-part.cjs.js.map +1 -1
- package/dist/domains/chat/messages/renderers/tool-part.es.js +1 -1
- package/dist/domains/chat/messages/renderers/tool-part.es.js.map +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.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/code-mode-badge.cjs.js +2 -2
- package/dist/domains/chat/tools/badges/code-mode-badge.es.js +2 -2
- package/dist/domains/chat/tools/badges/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-renderer.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-renderer.es.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/tool-approval-buttons.es.js +1 -1
- package/dist/domains/logs/components/log-details-view.cjs.js +3 -3
- package/dist/domains/logs/components/log-details-view.es.js +3 -3
- package/dist/domains/logs/components/logs-error-content.cjs.js +1 -1
- package/dist/domains/logs/components/logs-error-content.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +2 -2
- package/dist/domains/logs/components/logs-list-view.es.js +2 -2
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +1 -1
- package/dist/domains/logs/components/no-logs-info.es.js +1 -1
- package/dist/domains/memory/components/flame-graph.cjs.js +1 -1
- package/dist/domains/memory/components/flame-graph.es.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.cjs.js +1 -1
- package/dist/domains/memory/components/memory-studio-panel.es.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.cjs.js +1 -1
- package/dist/domains/memory/components/observation-detail-view.es.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.cjs.js +1 -1
- package/dist/domains/metrics/components/card-action-buttons.es.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.cjs.js +1 -1
- package/dist/domains/metrics/components/date-range-selector.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +3 -3
- package/dist/domains/metrics/components/latency-card-view.es.js +3 -3
- package/dist/domains/metrics/components/memory-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/memory-card-view.es.js +4 -4
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/scores-card-view.es.js +4 -4
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +3 -3
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +3 -3
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +3 -3
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +3 -3
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +3 -3
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +3 -3
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +6 -6
- package/dist/domains/traces/components/span-data-panel-view.es.js +6 -6
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +4 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +4 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-spans-tab.cjs.js +2 -2
- package/dist/domains/traces/components/thread-trace/thread-trace-spans-tab.es.js +2 -2
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +9 -9
- package/dist/domains/traces/components/trace-data-panel-view.es.js +9 -9
- 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/traces-error-content.cjs.js +1 -1
- package/dist/domains/traces/components/traces-error-content.es.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +2 -2
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +2 -2
- package/dist/domains/traces/components/traces-list-view.cjs.js +3 -3
- package/dist/domains/traces/components/traces-list-view.es.js +3 -3
- package/dist/domains/traces/components/traces-toolbar.cjs.js +1 -1
- package/dist/domains/traces/components/traces-toolbar.es.js +1 -1
- package/dist/{drawer-BXOkhFYI.cjs → drawer-Bq7j_MiM.cjs} +2 -2
- package/dist/{drawer-BXOkhFYI.cjs.map → drawer-Bq7j_MiM.cjs.map} +1 -1
- package/dist/{drawer-DUhKiF6i.js → drawer-D1m2faHU.js} +2 -2
- package/dist/{drawer-DUhKiF6i.js.map → drawer-D1m2faHU.js.map} +1 -1
- package/dist/{dropdown-menu-Bj9vR0Md.cjs → dropdown-menu-Bfh5ROWe.cjs} +6 -5
- package/dist/dropdown-menu-Bfh5ROWe.cjs.map +1 -0
- package/dist/{dropdown-menu-GAD50kMK.js → dropdown-menu-C853KwJJ.js} +5 -4
- package/dist/dropdown-menu-C853KwJJ.js.map +1 -0
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -3
- package/dist/ee/signals/components/entity-index-list.cjs.js.map +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -3
- package/dist/ee/signals/components/entity-index-list.es.js.map +1 -1
- package/dist/ee/signals/components/signals-empty-state.cjs.js +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +6 -7
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +6 -7
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/signals/examples-pager.cjs.js +1 -1
- package/dist/ee/signals/examples-pager.es.js +1 -1
- package/dist/ee/signals/noise-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/noise-detail-panel.es.js +1 -1
- package/dist/ee/signals/sankey-signals.cjs.js +1 -1
- package/dist/ee/signals/sankey-signals.es.js +1 -1
- package/dist/ee/signals/settings/signal-definition-form-dialog.cjs.js +4 -4
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +4 -4
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +3 -3
- package/dist/ee/signals/settings/trace-signal-settings.es.js +3 -3
- package/dist/ee/signals/signals-error-state.cjs.js +1 -1
- package/dist/ee/signals/signals-error-state.es.js +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +1 -1
- package/dist/ee/signals/theme-detail-panel.cjs.js +1 -1
- package/dist/ee/signals/theme-detail-panel.es.js +1 -1
- package/dist/ee/signals/theme-filter-banner.cjs.js +1 -1
- package/dist/ee/signals/theme-filter-banner.es.js +1 -1
- package/dist/ee/signals/trace-insight-view.cjs.js +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +1 -1
- package/dist/ee/signals/view-mode-tab.cjs.js +1 -1
- package/dist/ee/signals/view-mode-tab.es.js +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js +3 -3
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +3 -3
- package/dist/hooks/use-local-storage-state.cjs.js +35 -0
- package/dist/hooks/use-local-storage-state.cjs.js.map +1 -0
- package/dist/hooks/use-local-storage-state.d.ts +2 -0
- package/dist/hooks/use-local-storage-state.es.js +31 -0
- package/dist/hooks/use-local-storage-state.es.js.map +1 -0
- package/dist/{input-BXl_-87K.cjs → input-D3SUXvgI.cjs} +9 -10
- package/dist/input-D3SUXvgI.cjs.map +1 -0
- package/dist/{input-KNga7Y7g.js → input-DinpgQXj.js} +8 -9
- package/dist/input-DinpgQXj.js.map +1 -0
- package/dist/{input-group-BW3PBfmX.cjs → input-group-CBuqhxnJ.cjs} +30 -11
- package/dist/input-group-CBuqhxnJ.cjs.map +1 -0
- package/dist/{input-group-CC3FsOEL.js → input-group-Dv1YsFDZ.js} +30 -11
- package/dist/input-group-Dv1YsFDZ.js.map +1 -0
- package/dist/layout/tabbed-container.cjs.js +6 -6
- package/dist/layout/tabbed-container.es.js +6 -6
- package/dist/{list-search-D_Q34jSU.cjs → list-search-BwcO9d9M.cjs} +2 -2
- package/dist/{list-search-D_Q34jSU.cjs.map → list-search-BwcO9d9M.cjs.map} +1 -1
- package/dist/{list-search-C9wdyGVJ.js → list-search-C8FBcDpo.js} +2 -2
- package/dist/{list-search-C9wdyGVJ.js.map → list-search-C8FBcDpo.js.map} +1 -1
- package/dist/{logs-data-list-CBCCnmWl.cjs → logs-data-list-B0hzHq0b.cjs} +2 -2
- package/dist/{logs-data-list-CBCCnmWl.cjs.map → logs-data-list-B0hzHq0b.cjs.map} +1 -1
- package/dist/{logs-data-list-BEC39Y_v.js → logs-data-list-CWu83qI7.js} +2 -2
- package/dist/{logs-data-list-BEC39Y_v.js.map → logs-data-list-CWu83qI7.js.map} +1 -1
- package/dist/{markdown-renderer-Wmdi_oR8.js → markdown-renderer-Dp1fJwUB.js} +175 -8
- package/dist/markdown-renderer-Dp1fJwUB.js.map +1 -0
- package/dist/{markdown-renderer-Ds3PaLdR.cjs → markdown-renderer-hBiN_N_-.cjs} +174 -7
- package/dist/markdown-renderer-hBiN_N_-.cjs.map +1 -0
- package/dist/new/layout/app-shell.cjs.js +53 -0
- package/dist/new/layout/app-shell.cjs.js.map +1 -0
- package/dist/new/layout/app-shell.d.ts +2 -0
- package/dist/new/layout/app-shell.es.js +49 -0
- package/dist/new/layout/app-shell.es.js.map +1 -0
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/{page-header-ComQfwIQ.js → page-header-CGRV1f_f.js} +11 -7
- package/dist/page-header-CGRV1f_f.js.map +1 -0
- package/dist/{page-header-hRxyKAlN.cjs → page-header-CTdBcOWK.cjs} +11 -7
- package/dist/page-header-CTdBcOWK.cjs.map +1 -0
- package/dist/primitives/control-size.cjs.js +1 -1
- package/dist/primitives/control-size.cjs.js.map +1 -1
- package/dist/primitives/control-size.es.js +1 -1
- package/dist/primitives/control-size.es.js.map +1 -1
- package/dist/primitives/form-element.cjs.js +8 -21
- package/dist/primitives/form-element.cjs.js.map +1 -1
- package/dist/primitives/form-element.es.js +8 -20
- package/dist/primitives/form-element.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +7 -10
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +7 -10
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-CTcWC5Hv.js → property-filter-applied-CF-InSu-.js} +5 -5
- package/dist/{property-filter-applied-CTcWC5Hv.js.map → property-filter-applied-CF-InSu-.js.map} +1 -1
- package/dist/{property-filter-applied-DCffRXYU.cjs → property-filter-applied-D35zWa7S.cjs} +5 -5
- package/dist/{property-filter-applied-DCffRXYU.cjs.map → property-filter-applied-D35zWa7S.cjs.map} +1 -1
- package/dist/resize/panel-drawer.cjs.js +1 -1
- package/dist/resize/panel-drawer.es.js +1 -1
- package/dist/{search-field-block-BH_zDJIt.js → search-field-block-DhgD7NhZ.js} +3 -3
- package/dist/{search-field-block-BH_zDJIt.js.map → search-field-block-DhgD7NhZ.js.map} +1 -1
- package/dist/{search-field-block-WP6PODTo.cjs → search-field-block-DnJYUEGi.cjs} +3 -3
- package/dist/{search-field-block-WP6PODTo.cjs.map → search-field-block-DnJYUEGi.cjs.map} +1 -1
- package/dist/{select-VqANzntV.js → select-3GcRJGtd.js} +5 -3
- package/dist/select-3GcRJGtd.js.map +1 -0
- package/dist/{select-Dhox-EJ2.cjs → select-4dVGVp0V.cjs} +6 -4
- package/dist/select-4dVGVp0V.cjs.map +1 -0
- package/dist/{select-field-block-C3OTHj2n.js → select-field-block-BEyjBDiB.js} +2 -2
- package/dist/{select-field-block-C3OTHj2n.js.map → select-field-block-BEyjBDiB.js.map} +1 -1
- package/dist/{select-field-block-DBv-cFoz.cjs → select-field-block-By8NfJoe.cjs} +2 -2
- package/dist/{select-field-block-DBv-cFoz.cjs.map → select-field-block-By8NfJoe.cjs.map} +1 -1
- package/dist/{slider-Cx_ZwlQU.js → slider-AfRJ3a4W.js} +2 -7
- package/dist/slider-AfRJ3a4W.js.map +1 -0
- package/dist/{slider-DyNnS3a7.cjs → slider-BXYQmaQy.cjs} +3 -8
- package/dist/slider-BXYQmaQy.cjs.map +1 -0
- package/dist/src/domains/chat/context/chat-context.d.ts +2 -0
- package/dist/src/domains/chat/messages/renderers/message-text.d.ts +2 -1
- package/dist/src/domains/chat/stories/messages.stories.d.ts +1 -1
- package/dist/src/ds/components/Button/Button.d.ts +1 -1
- package/dist/src/ds/components/Checkbox/checkbox.d.ts +10 -1
- package/dist/src/ds/components/Combobox/combobox.d.ts +3 -2
- package/dist/src/ds/components/DropdownMenu/dropdown-menu.d.ts +9 -1
- package/dist/src/ds/components/DropdownMenu/dropdown-menu.stories.d.ts +1 -0
- package/dist/src/ds/components/MarkdownRenderer/markdown-renderer.d.ts +3 -1
- package/dist/src/ds/components/MarkdownRenderer/markdown-table.d.ts +3 -0
- package/dist/src/ds/components/MarkdownRenderer/table-csv.d.ts +2 -0
- package/dist/src/ds/components/MarkdownRenderer/table-markdown.d.ts +5 -0
- package/dist/src/ds/components/Select/select.d.ts +24 -2
- package/dist/src/ds/components/Slider/slider.d.ts +1 -1
- package/dist/src/ds/components/Table/Table.d.ts +1 -1
- package/dist/src/ds/components/ai/tool-call/tool-call-group.d.ts +2 -0
- package/dist/src/ds/new/layout/app-shell/app-shell.d.ts +13 -0
- package/dist/src/ds/new/layout/app-shell/app-shell.stories.d.ts +22 -0
- package/dist/src/ds/new/layout/app-shell/index.d.ts +1 -0
- package/dist/src/ds/primitives/form-element.d.ts +5 -6
- package/dist/src/ds/primitives/menu-item.d.ts +1 -0
- package/dist/src/hooks/use-local-storage-state.d.ts +10 -0
- package/dist/style.css +144 -35
- package/dist/{switch-CRgSw0D1.js → switch-A-j7GDcX.js} +3 -4
- package/dist/switch-A-j7GDcX.js.map +1 -0
- package/dist/{switch-CsnP5CNn.cjs → switch-BROLIeGF.cjs} +3 -4
- package/dist/switch-BROLIeGF.cjs.map +1 -0
- package/dist/{tabs-content-Bf28p8Au.cjs → tabs-content-CV7YrtD1.cjs} +4 -4
- package/dist/tabs-content-CV7YrtD1.cjs.map +1 -0
- package/dist/{tabs-content-vrO_NM42.js → tabs-content-CW6RtAEV.js} +3 -3
- package/dist/tabs-content-CW6RtAEV.js.map +1 -0
- package/dist/{tabs-root-B4G-ywup.js → tabs-root-BAy8m6GO.js} +2 -2
- package/dist/{tabs-root-B4G-ywup.js.map → tabs-root-BAy8m6GO.js.map} +1 -1
- package/dist/{tabs-root-BAJYWOrk.cjs → tabs-root-Dw7gHsnZ.cjs} +2 -2
- package/dist/{tabs-root-BAJYWOrk.cjs.map → tabs-root-Dw7gHsnZ.cjs.map} +1 -1
- package/dist/{tabs-tab-Br-jck-B.cjs → tabs-tab-CP-kzlvB.cjs} +5 -6
- package/dist/tabs-tab-CP-kzlvB.cjs.map +1 -0
- package/dist/{tabs-tab-CvlCl9kD.js → tabs-tab-K5mQhs7r.js} +6 -7
- package/dist/tabs-tab-K5mQhs7r.js.map +1 -0
- package/dist/{text-field-block-BVhQGWYw.js → text-field-block-CUN9gL4j.js} +2 -2
- package/dist/{text-field-block-BVhQGWYw.js.map → text-field-block-CUN9gL4j.js.map} +1 -1
- package/dist/{text-field-block-DBEXulUE.cjs → text-field-block-WuwrSNEX.cjs} +2 -2
- package/dist/{text-field-block-DBEXulUE.cjs.map → text-field-block-WuwrSNEX.cjs.map} +1 -1
- package/dist/{textarea-BcaFNmji.js → textarea-BCVPeJzr.js} +7 -3
- package/dist/textarea-BCVPeJzr.js.map +1 -0
- package/dist/{textarea-C_saJE6T.cjs → textarea-D9XsLoN5.cjs} +8 -4
- package/dist/textarea-D9XsLoN5.cjs.map +1 -0
- package/dist/{time-picker-CMUki2R2.cjs → time-picker-BKpmCbXS.cjs} +2 -2
- package/dist/{time-picker-CMUki2R2.cjs.map → time-picker-BKpmCbXS.cjs.map} +1 -1
- package/dist/{time-picker-CfdcBPyS.js → time-picker-SgrQvt0V.js} +2 -2
- package/dist/{time-picker-CfdcBPyS.js.map → time-picker-SgrQvt0V.js.map} +1 -1
- package/dist/{tool-call-DfLe6Hu5.js → tool-call-BlKbOYRH.js} +2 -2
- package/dist/{tool-call-DfLe6Hu5.js.map → tool-call-BlKbOYRH.js.map} +1 -1
- package/dist/{tool-call-Pi3V0LP3.cjs → tool-call-DVh_yWov.cjs} +2 -2
- package/dist/{tool-call-Pi3V0LP3.cjs.map → tool-call-DVh_yWov.cjs.map} +1 -1
- package/dist/{traces-data-list-BPrExzSX.cjs → traces-data-list-0WfYCKdc.cjs} +3 -3
- package/dist/{traces-data-list-BPrExzSX.cjs.map → traces-data-list-0WfYCKdc.cjs.map} +1 -1
- package/dist/{traces-data-list-CfW_M5yW.js → traces-data-list-BOiAOwYM.js} +3 -3
- package/dist/{traces-data-list-CfW_M5yW.js.map → traces-data-list-BOiAOwYM.js.map} +1 -1
- package/package.json +18 -8
- package/theme.css +12 -0
- package/dist/Button-BsHGVRjh.cjs.map +0 -1
- package/dist/Button-DsTY88Xz.js.map +0 -1
- package/dist/buttons-group-B5TBWfs6.js.map +0 -1
- package/dist/buttons-group-PqYxKznc.cjs.map +0 -1
- package/dist/checkbox-BNOCksit.cjs.map +0 -1
- package/dist/checkbox-pvYvwDUy.js.map +0 -1
- package/dist/combobox-8GoJaMs1.js.map +0 -1
- package/dist/combobox-Cg-7UwwL.cjs.map +0 -1
- package/dist/command-C6cIgH_n.cjs.map +0 -1
- package/dist/command-OXbUDxUu.js.map +0 -1
- package/dist/dialog-CUeeMxRo.cjs.map +0 -1
- package/dist/dialog-KvPRmHPW.js.map +0 -1
- package/dist/dropdown-menu-Bj9vR0Md.cjs.map +0 -1
- package/dist/dropdown-menu-GAD50kMK.js.map +0 -1
- package/dist/focus.css +0 -176
- package/dist/input-BXl_-87K.cjs.map +0 -1
- package/dist/input-KNga7Y7g.js.map +0 -1
- package/dist/input-group-BW3PBfmX.cjs.map +0 -1
- package/dist/input-group-CC3FsOEL.js.map +0 -1
- package/dist/markdown-renderer-Ds3PaLdR.cjs.map +0 -1
- package/dist/markdown-renderer-Wmdi_oR8.js.map +0 -1
- package/dist/page-header-ComQfwIQ.js.map +0 -1
- package/dist/page-header-hRxyKAlN.cjs.map +0 -1
- package/dist/select-Dhox-EJ2.cjs.map +0 -1
- package/dist/select-VqANzntV.js.map +0 -1
- package/dist/slider-Cx_ZwlQU.js.map +0 -1
- package/dist/slider-DyNnS3a7.cjs.map +0 -1
- package/dist/switch-CRgSw0D1.js.map +0 -1
- package/dist/switch-CsnP5CNn.cjs.map +0 -1
- package/dist/tabs-content-Bf28p8Au.cjs.map +0 -1
- package/dist/tabs-content-vrO_NM42.js.map +0 -1
- package/dist/tabs-tab-Br-jck-B.cjs.map +0 -1
- package/dist/tabs-tab-CvlCl9kD.js.map +0 -1
- package/dist/textarea-BcaFNmji.js.map +0 -1
- package/dist/textarea-C_saJE6T.cjs.map +0 -1
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
const index = require('./index-BxcigDwC.cjs');
|
|
5
5
|
const React = require('react');
|
|
6
6
|
const tooltip = require('./tooltip-BsSNtmxl.cjs');
|
|
7
7
|
const icons_Icon = require('./icons/Icon.cjs.js');
|
|
8
8
|
const primitives_controlSize = require('./primitives/control-size.cjs.js');
|
|
9
|
-
;/* empty css */
|
|
10
9
|
const primitives_formElement = require('./primitives/form-element.cjs.js');
|
|
11
10
|
const utils_cn = require('./cn-DnbTIGXa.cjs');
|
|
12
11
|
|
|
@@ -30,23 +29,25 @@ const buttonVariants = index.cva(
|
|
|
30
29
|
{
|
|
31
30
|
variants: {
|
|
32
31
|
variant: {
|
|
33
|
-
default: "border border-
|
|
32
|
+
default: "border border-button-default-border bg-button-default-bg font-medium text-neutral6 hover:bg-button-default-bg-hover hover:text-neutral6 active:bg-button-default-bg-active",
|
|
34
33
|
primary: "border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80",
|
|
35
34
|
destructive: "border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80",
|
|
36
35
|
"destructive-ghost": "border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15",
|
|
37
36
|
ghost: "border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10",
|
|
38
|
-
outline: "border border-
|
|
37
|
+
outline: "border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6"
|
|
39
38
|
},
|
|
40
39
|
size: {
|
|
41
40
|
xs: utils_cn.cn(primitives_controlSize.controlSizeClasses.xs, "px-[.8em]", TEXT_MODE_ADORNMENTS),
|
|
42
41
|
sm: utils_cn.cn(primitives_controlSize.controlSizeClasses.sm, "px-[.9em]", TEXT_MODE_ADORNMENTS),
|
|
43
42
|
md: utils_cn.cn(primitives_controlSize.controlSizeClasses.md, "px-[.9em]", TEXT_MODE_ADORNMENTS),
|
|
44
43
|
lg: utils_cn.cn(primitives_controlSize.controlSizeClasses.lg, "px-[1em]", TEXT_MODE_ADORNMENTS),
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"icon-
|
|
44
|
+
// Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant
|
|
45
|
+
// (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.
|
|
46
|
+
// `icon-lg` is intentionally 32px (larger than text-mode `lg`, which shares the 28px `md` height).
|
|
47
|
+
"icon-xs": utils_cn.cn(primitives_controlSize.controlHeight.xs, "w-form-xs rounded-full"),
|
|
48
|
+
"icon-sm": utils_cn.cn(primitives_controlSize.controlHeight.sm, "w-form-sm rounded-full"),
|
|
49
|
+
"icon-md": utils_cn.cn(primitives_controlSize.controlHeight.md, "w-form-md rounded-full"),
|
|
50
|
+
"icon-lg": "size-8 rounded-full"
|
|
50
51
|
}
|
|
51
52
|
},
|
|
52
53
|
defaultVariants: {
|
|
@@ -83,7 +84,7 @@ function isIconOnly(children) {
|
|
|
83
84
|
return flat.length > 0 && flat.every((child) => React.isValidElement(child));
|
|
84
85
|
}
|
|
85
86
|
function isIconButtonSize(size) {
|
|
86
|
-
return
|
|
87
|
+
return size?.startsWith("icon-") ?? false;
|
|
87
88
|
}
|
|
88
89
|
const Button = React.forwardRef(
|
|
89
90
|
({
|
|
@@ -103,7 +104,7 @@ const Button = React.forwardRef(
|
|
|
103
104
|
const resolvedSize = size ?? "md";
|
|
104
105
|
const isLabelless = !iconMode && isIconOnly(children);
|
|
105
106
|
const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip$1 === "string" ? tooltip$1 : void 0);
|
|
106
|
-
const content =
|
|
107
|
+
const content = iconMode ? /* @__PURE__ */ jsxRuntime.jsx(icons_Icon.Icon, { size: iconChildSizeMap[size], children }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
107
108
|
icon ? /* @__PURE__ */ jsxRuntime.jsx(icons_Icon.Icon, { "data-slot": "button-icon", size: textIconSizeMap[resolvedSize], children: icon }) : null,
|
|
108
109
|
children
|
|
109
110
|
] });
|
|
@@ -133,4 +134,4 @@ Button.displayName = "Button";
|
|
|
133
134
|
exports.Button = Button;
|
|
134
135
|
exports.buttonVariants = buttonVariants;
|
|
135
136
|
exports.isIconButtonSize = isIconButtonSize;
|
|
136
|
-
//# sourceMappingURL=Button-
|
|
137
|
+
//# sourceMappingURL=Button-BJOVwaxp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button-BJOVwaxp.cjs","sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport { controlFocusBorderVisible, sharedFormElementDisabledStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Adornments for text-mode buttons: gap between icon+label and larger radius.\n// - `[data-slot=button-icon]` styles the `<Icon>` wrapper rendered by the `icon` prop — the only\n// supported way to pair an icon with a label (always on the left, fixed gap).\n// - `[&>svg]` only remains for label-less text-mode buttons (e.g. CopyButton) that pass a bare\n// SVG as children.\n// Excluded from icon-mode because icon-mode wraps children in `<Icon>` and uses its own\n// `rounded-full` (circle).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'gap-[.75em] rounded-full',\n '[&>[data-slot=button-icon]]:-ml-[.3em] [&>[data-slot=button-icon]]:opacity-50',\n '[&:hover>[data-slot=button-icon]]:opacity-100',\n '[&>[data-slot=button-icon]]:transition-opacity [&>[data-slot=button-icon]]:duration-normal',\n '[&>[data-slot=button-icon]]:ease-out-custom',\n '[&>svg]:mx-[-.3em] [&>svg]:size-[1.1em]',\n '[&:hover>svg]:opacity-100 [&>svg]:opacity-50',\n '[&>svg]:transition-opacity [&>svg]:duration-normal [&>svg]:ease-out-custom',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center leading-0',\n 'transition-all duration-normal ease-out-custom',\n sharedFormElementDisabledStyle,\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n default:\n 'border border-button-default-border bg-button-default-bg font-medium text-neutral6 hover:bg-button-default-bg-hover hover:text-neutral6 active:bg-button-default-bg-active',\n primary:\n 'border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80',\n destructive:\n 'border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80',\n 'destructive-ghost':\n 'border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15',\n ghost:\n 'border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n outline:\n 'border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6',\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.8em]', TEXT_MODE_ADORNMENTS),\n sm: cn(controlSizeClasses.sm, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.lg, 'px-[1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.\n // `icon-lg` is intentionally 32px (larger than text-mode `lg`, which shares the 28px `md` height).\n 'icon-xs': cn(controlHeight.xs, 'w-form-xs rounded-full'),\n 'icon-sm': cn(controlHeight.sm, 'w-form-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-form-md rounded-full'),\n 'icon-lg': 'size-8 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n as?: React.ElementType;\n className?: string;\n href?: string;\n to?: string;\n prefetch?: boolean | null;\n children: React.ReactNode;\n /** Leading icon, always rendered on the left of the label inside `<Icon>`. Ignored in icon-mode sizes. */\n icon?: React.ReactNode;\n tooltip?: React.ReactNode;\n target?: string;\n type?: 'button' | 'submit' | 'reset';\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\n// Button's icon-* sizes don't match `<Icon>`'s own size scale (`sm | default | lg`).\nconst iconChildSizeMap: Record<IconButtonSize, 'sm' | 'default' | 'lg'> = {\n 'icon-xs': 'sm',\n 'icon-sm': 'sm',\n 'icon-md': 'default',\n 'icon-lg': 'lg',\n};\n\n// `<Icon>` size for the `icon` prop in text-mode, keyed by button size.\nconst textIconSizeMap: Record<TextButtonSize, 'sm' | 'default'> = {\n xs: 'sm',\n sm: 'sm',\n md: 'default',\n lg: 'default',\n};\n\n// Walks React children, expanding `<></>` fragments so `isIconOnly` can inspect the real\n// elements inside. `<Button><><Icon/></></Button>` should still count as icon-only.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = [];\n React.Children.forEach(children, child => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment) {\n result.push(...flattenChildren(child.props.children));\n } else {\n result.push(child);\n }\n });\n return result;\n}\n\n// True when every child is a React element (no text/label). Used in text-mode to brighten the\n// SVG of label-less buttons so the glyph reads stronger.\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize` so consumers (e.g. `iconChildSizeMap`)\n// can index into icon-only structures without a cast.\n// eslint-disable-next-line react-refresh/only-export-components -- shared with Combobox's icon-only trigger\nexport function isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return size?.startsWith('icon-') ?? false;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n as,\n size,\n variant = 'default',\n disabled,\n children,\n icon,\n tooltip,\n 'aria-label': ariaLabelProp,\n ...props\n },\n ref,\n ) => {\n const Component = as || 'button';\n const iconMode = isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const isLabelless = !iconMode && isIconOnly(children);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? (\n <Icon size={iconChildSizeMap[size]}>{children}</Icon>\n ) : (\n <>\n {icon ? (\n <Icon data-slot=\"button-icon\" size={textIconSizeMap[resolvedSize as TextButtonSize]}>\n {icon}\n </Icon>\n ) : null}\n {children}\n </>\n );\n\n const button = (\n <Component\n ref={ref}\n disabled={disabled}\n aria-label={ariaLabel}\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.tsx).\n data-variant={variant}\n className={cn(buttonVariants({ variant, size: resolvedSize }), isLabelless && '[&>svg]:opacity-75', className)}\n {...props}\n >\n {content}\n </Component>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["cn","cva","sharedFormElementDisabledStyle","controlFocusBorderVisible","controlSizeClasses","controlHeight","tooltip","jsx","Icon","jsxs","Fragment","Tooltip","TooltipTrigger","TooltipContent"],"mappings":";;;;;;;;;;;AAgBA,MAAM,oBAAA,GAAuBA,WAAA;AAAA,EAC3B,0BAAA;AAAA,EACA,+EAAA;AAAA,EACA,+CAAA;AAAA,EACA,4FAAA;AAAA,EACA,6CAAA;AAAA,EACA,yCAAA;AAAA,EACA,8CAAA;AAAA,EACA;AACF,CAAA;AAGO,MAAM,cAAA,GAAiBC,SAAA;AAAA,EAC5BD,WAAA;AAAA,IACE,kEAAA;AAAA,IACA,gDAAA;AAAA,IACAE,qDAAA;AAAA,IACAC;AAAA,GACF;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EACE,4KAAA;AAAA,QACF,OAAA,EACE,4GAAA;AAAA,QACF,WAAA,EACE,sGAAA;AAAA,QACF,mBAAA,EACE,mHAAA;AAAA,QACF,KAAA,EACE,sHAAA;AAAA,QACF,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,EAAA,EAAIH,WAAA,CAAGI,yCAAA,CAAmB,EAAA,EAAI,aAAa,oBAAoB,CAAA;AAAA,QAC/D,EAAA,EAAIJ,WAAA,CAAGI,yCAAA,CAAmB,EAAA,EAAI,aAAa,oBAAoB,CAAA;AAAA,QAC/D,EAAA,EAAIJ,WAAA,CAAGI,yCAAA,CAAmB,EAAA,EAAI,aAAa,oBAAoB,CAAA;AAAA,QAC/D,EAAA,EAAIJ,WAAA,CAAGI,yCAAA,CAAmB,EAAA,EAAI,YAAY,oBAAoB,CAAA;AAAA;AAAA;AAAA;AAAA,QAI9D,SAAA,EAAWJ,WAAA,CAAGK,oCAAA,CAAc,EAAA,EAAI,wBAAwB,CAAA;AAAA,QACxD,SAAA,EAAWL,WAAA,CAAGK,oCAAA,CAAc,EAAA,EAAI,wBAAwB,CAAA;AAAA,QACxD,SAAA,EAAWL,WAAA,CAAGK,oCAAA,CAAc,EAAA,EAAI,wBAAwB,CAAA;AAAA,QACxD,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ;AA2BA,MAAM,gBAAA,GAAoE;AAAA,EACxE,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,IAAA;AAAA,EACX,SAAA,EAAW,SAAA;AAAA,EACX,SAAA,EAAW;AACb,CAAA;AAGA,MAAM,eAAA,GAA4D;AAAA,EAChE,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,IAAA;AAAA,EACJ,EAAA,EAAI,SAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAIA,SAAS,gBAAgB,QAAA,EAA8C;AACrE,EAAA,MAAM,SAA4B,EAAC;AACnC,EAAA,KAAA,CAAM,QAAA,CAAS,OAAA,CAAQ,QAAA,EAAU,CAAA,KAAA,KAAS;AACxC,IAAA,IAAI,MAAM,cAAA,CAA+C,KAAK,KAAK,KAAA,CAAM,IAAA,KAAS,MAAM,QAAA,EAAU;AAChG,MAAA,MAAA,CAAO,KAAK,GAAG,eAAA,CAAgB,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,IACtD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,IACnB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT;AAIA,SAAS,WAAW,QAAA,EAAoC;AACtD,EAAA,MAAM,IAAA,GAAO,gBAAgB,QAAQ,CAAA;AACrC,EAAA,OAAO,IAAA,CAAK,SAAS,CAAA,IAAK,IAAA,CAAK,MAAM,CAAA,KAAA,KAAS,KAAA,CAAM,cAAA,CAAe,KAAK,CAAC,CAAA;AAC3E;AAKO,SAAS,iBAAiB,IAAA,EAA6D;AAC5F,EAAA,OAAO,IAAA,EAAM,UAAA,CAAW,OAAO,CAAA,IAAK,KAAA;AACtC;AAEO,MAAM,SAAS,KAAA,CAAM,UAAA;AAAA,EAC1B,CACE;AAAA,IACE,SAAA;AAAA,IACA,EAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA,GAAU,SAAA;AAAA,IACV,QAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,aACAC,SAAA;AAAA,IACA,YAAA,EAAc,aAAA;AAAA,IACd,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,YAAY,EAAA,IAAM,QAAA;AACxB,IAAA,MAAM,QAAA,GAAW,iBAAiB,IAAI,CAAA;AACtC,IAAA,MAAM,eAA2B,IAAA,IAAQ,IAAA;AACzC,IAAA,MAAM,WAAA,GAAc,CAAC,QAAA,IAAY,UAAA,CAAW,QAAQ,CAAA;AAGpD,IAAA,MAAM,YAAY,aAAA,KAAA,CAAmB,QAAA,IAAY,gBAAgB,OAAOA,SAAA,KAAY,WAAWA,SAAA,GAAU,MAAA,CAAA;AAEzG,IAAA,MAAM,OAAA,GAAU,QAAA,mBACdC,cAAA,CAACC,eAAA,EAAA,EAAK,IAAA,EAAM,iBAAiB,IAAI,CAAA,EAAI,QAAA,EAAS,CAAA,mBAE9CC,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,IAAA,mBACCH,cAAA,CAACC,mBAAK,WAAA,EAAU,aAAA,EAAc,MAAM,eAAA,CAAgB,YAA8B,CAAA,EAC/E,QAAA,EAAA,IAAA,EACH,CAAA,GACE,IAAA;AAAA,MACH;AAAA,KAAA,EACH,CAAA;AAGF,IAAA,MAAM,MAAA,mBACJD,cAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA,EAAY,SAAA;AAAA,QAIZ,cAAA,EAAc,OAAA;AAAA,QACd,SAAA,EAAWP,WAAA,CAAG,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,CAAA,EAAG,WAAA,IAAe,oBAAA,EAAsB,SAAS,CAAA;AAAA,QAC5G,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA;AAAA,KACH;AAGF,IAAA,IAAIM,SAAA,EAAS;AACX,MAAA,uCACGK,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAJ,cAAA,CAACK,sBAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,wBAChCL,cAAA,CAACM,0BAAgB,QAAA,EAAAP,SAAA,EAAQ;AAAA,OAAA,EAC3B,CAAA;AAAA,IAEJ;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;;;;;;"}
|
|
@@ -4,8 +4,7 @@ import React__default from 'react';
|
|
|
4
4
|
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-Vj_jjcxE.js';
|
|
5
5
|
import { Icon } from './icons/Icon.es.js';
|
|
6
6
|
import { controlHeight, controlSizeClasses } from './primitives/control-size.es.js';
|
|
7
|
-
import './
|
|
8
|
-
import { controlFocusBorderVisible as controlFocusStyle, sharedFormElementDisabledStyle } from './primitives/form-element.es.js';
|
|
7
|
+
import { controlFocusBorderVisible, sharedFormElementDisabledStyle } from './primitives/form-element.es.js';
|
|
9
8
|
import { c as cn } from './cn-ByEbywDh.js';
|
|
10
9
|
|
|
11
10
|
const TEXT_MODE_ADORNMENTS = cn(
|
|
@@ -23,28 +22,30 @@ const buttonVariants = cva(
|
|
|
23
22
|
"inline-flex cursor-pointer items-center justify-center leading-0",
|
|
24
23
|
"transition-all duration-normal ease-out-custom",
|
|
25
24
|
sharedFormElementDisabledStyle,
|
|
26
|
-
|
|
25
|
+
controlFocusBorderVisible
|
|
27
26
|
),
|
|
28
27
|
{
|
|
29
28
|
variants: {
|
|
30
29
|
variant: {
|
|
31
|
-
default: "border border-
|
|
30
|
+
default: "border border-button-default-border bg-button-default-bg font-medium text-neutral6 hover:bg-button-default-bg-hover hover:text-neutral6 active:bg-button-default-bg-active",
|
|
32
31
|
primary: "border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80",
|
|
33
32
|
destructive: "border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80",
|
|
34
33
|
"destructive-ghost": "border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15",
|
|
35
34
|
ghost: "border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10",
|
|
36
|
-
outline: "border border-
|
|
35
|
+
outline: "border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6"
|
|
37
36
|
},
|
|
38
37
|
size: {
|
|
39
38
|
xs: cn(controlSizeClasses.xs, "px-[.8em]", TEXT_MODE_ADORNMENTS),
|
|
40
39
|
sm: cn(controlSizeClasses.sm, "px-[.9em]", TEXT_MODE_ADORNMENTS),
|
|
41
40
|
md: cn(controlSizeClasses.md, "px-[.9em]", TEXT_MODE_ADORNMENTS),
|
|
42
41
|
lg: cn(controlSizeClasses.lg, "px-[1em]", TEXT_MODE_ADORNMENTS),
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"icon-
|
|
42
|
+
// Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant
|
|
43
|
+
// (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.
|
|
44
|
+
// `icon-lg` is intentionally 32px (larger than text-mode `lg`, which shares the 28px `md` height).
|
|
45
|
+
"icon-xs": cn(controlHeight.xs, "w-form-xs rounded-full"),
|
|
46
|
+
"icon-sm": cn(controlHeight.sm, "w-form-sm rounded-full"),
|
|
47
|
+
"icon-md": cn(controlHeight.md, "w-form-md rounded-full"),
|
|
48
|
+
"icon-lg": "size-8 rounded-full"
|
|
48
49
|
}
|
|
49
50
|
},
|
|
50
51
|
defaultVariants: {
|
|
@@ -81,7 +82,7 @@ function isIconOnly(children) {
|
|
|
81
82
|
return flat.length > 0 && flat.every((child) => React__default.isValidElement(child));
|
|
82
83
|
}
|
|
83
84
|
function isIconButtonSize(size) {
|
|
84
|
-
return
|
|
85
|
+
return size?.startsWith("icon-") ?? false;
|
|
85
86
|
}
|
|
86
87
|
const Button = React__default.forwardRef(
|
|
87
88
|
({
|
|
@@ -101,7 +102,7 @@ const Button = React__default.forwardRef(
|
|
|
101
102
|
const resolvedSize = size ?? "md";
|
|
102
103
|
const isLabelless = !iconMode && isIconOnly(children);
|
|
103
104
|
const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip === "string" ? tooltip : void 0);
|
|
104
|
-
const content =
|
|
105
|
+
const content = iconMode ? /* @__PURE__ */ jsx(Icon, { size: iconChildSizeMap[size], children }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
105
106
|
icon ? /* @__PURE__ */ jsx(Icon, { "data-slot": "button-icon", size: textIconSizeMap[resolvedSize], children: icon }) : null,
|
|
106
107
|
children
|
|
107
108
|
] });
|
|
@@ -129,4 +130,4 @@ const Button = React__default.forwardRef(
|
|
|
129
130
|
Button.displayName = "Button";
|
|
130
131
|
|
|
131
132
|
export { Button as B, buttonVariants as b, isIconButtonSize as i };
|
|
132
|
-
//# sourceMappingURL=Button-
|
|
133
|
+
//# sourceMappingURL=Button-BVGwYwHT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button-BVGwYwHT.js","sources":["../src/ds/components/Button/Button.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\nimport React from 'react';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { Icon } from '@/ds/icons/Icon';\nimport { controlHeight, controlSizeClasses } from '@/ds/primitives/control-size';\nimport { controlFocusBorderVisible, sharedFormElementDisabledStyle } from '@/ds/primitives/form-element';\nimport { cn } from '@/lib/utils';\n\n// Adornments for text-mode buttons: gap between icon+label and larger radius.\n// - `[data-slot=button-icon]` styles the `<Icon>` wrapper rendered by the `icon` prop — the only\n// supported way to pair an icon with a label (always on the left, fixed gap).\n// - `[&>svg]` only remains for label-less text-mode buttons (e.g. CopyButton) that pass a bare\n// SVG as children.\n// Excluded from icon-mode because icon-mode wraps children in `<Icon>` and uses its own\n// `rounded-full` (circle).\nconst TEXT_MODE_ADORNMENTS = cn(\n 'gap-[.75em] rounded-full',\n '[&>[data-slot=button-icon]]:-ml-[.3em] [&>[data-slot=button-icon]]:opacity-50',\n '[&:hover>[data-slot=button-icon]]:opacity-100',\n '[&>[data-slot=button-icon]]:transition-opacity [&>[data-slot=button-icon]]:duration-normal',\n '[&>[data-slot=button-icon]]:ease-out-custom',\n '[&>svg]:mx-[-.3em] [&>svg]:size-[1.1em]',\n '[&:hover>svg]:opacity-100 [&>svg]:opacity-50',\n '[&>svg]:transition-opacity [&>svg]:duration-normal [&>svg]:ease-out-custom',\n);\n\n// eslint-disable-next-line react-refresh/only-export-components -- exported variant helper is part of Button's public API\nexport const buttonVariants = cva(\n cn(\n 'inline-flex cursor-pointer items-center justify-center leading-0',\n 'transition-all duration-normal ease-out-custom',\n sharedFormElementDisabledStyle,\n controlFocusBorderVisible,\n ),\n {\n variants: {\n variant: {\n default:\n 'border border-button-default-border bg-button-default-bg font-medium text-neutral6 hover:bg-button-default-bg-hover hover:text-neutral6 active:bg-button-default-bg-active',\n primary:\n 'border border-transparent bg-neutral6 font-medium text-surface1 hover:bg-neutral6/90 active:bg-neutral6/80',\n destructive:\n 'border border-transparent bg-accent2 font-medium text-white hover:bg-accent2/90 active:bg-accent2/80',\n 'destructive-ghost':\n 'border border-transparent bg-transparent text-accent2 hover:bg-accent2/10 hover:text-accent2 active:bg-accent2/15',\n ghost:\n 'border border-transparent bg-transparent text-neutral4 hover:bg-neutral6/5 hover:text-neutral6 active:bg-neutral6/10',\n outline:\n 'border border-border2 bg-surface3 text-neutral6 hover:bg-surface5 hover:text-neutral6 active:bg-surface6',\n },\n size: {\n xs: cn(controlSizeClasses.xs, 'px-[.8em]', TEXT_MODE_ADORNMENTS),\n sm: cn(controlSizeClasses.sm, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n md: cn(controlSizeClasses.md, 'px-[.9em]', TEXT_MODE_ADORNMENTS),\n lg: cn(controlSizeClasses.lg, 'px-[1em]', TEXT_MODE_ADORNMENTS),\n // Icon sizes: square dimensions, fully rounded → circle. Active state inherits from variant\n // (e.g. `active:bg-surface5`) — same press feedback as text-mode for consistency.\n // `icon-lg` is intentionally 32px (larger than text-mode `lg`, which shares the 28px `md` height).\n 'icon-xs': cn(controlHeight.xs, 'w-form-xs rounded-full'),\n 'icon-sm': cn(controlHeight.sm, 'w-form-sm rounded-full'),\n 'icon-md': cn(controlHeight.md, 'w-form-md rounded-full'),\n 'icon-lg': 'size-8 rounded-full',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'md',\n },\n },\n);\n\n// Public types derived from cva — single source of truth. Adding a variant or size to\n// `buttonVariants` automatically updates these unions.\ntype ButtonVariantsProps = VariantProps<typeof buttonVariants>;\nexport type ButtonVariant = NonNullable<ButtonVariantsProps['variant']>;\nexport type ButtonSize = NonNullable<ButtonVariantsProps['size']>;\nexport type IconButtonSize = Extract<ButtonSize, `icon-${string}`>;\nexport type TextButtonSize = Exclude<ButtonSize, IconButtonSize>;\n\nexport interface ButtonProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'children'>, ButtonVariantsProps {\n as?: React.ElementType;\n className?: string;\n href?: string;\n to?: string;\n prefetch?: boolean | null;\n children: React.ReactNode;\n /** Leading icon, always rendered on the left of the label inside `<Icon>`. Ignored in icon-mode sizes. */\n icon?: React.ReactNode;\n tooltip?: React.ReactNode;\n target?: string;\n type?: 'button' | 'submit' | 'reset';\n onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\n// Button's icon-* sizes don't match `<Icon>`'s own size scale (`sm | default | lg`).\nconst iconChildSizeMap: Record<IconButtonSize, 'sm' | 'default' | 'lg'> = {\n 'icon-xs': 'sm',\n 'icon-sm': 'sm',\n 'icon-md': 'default',\n 'icon-lg': 'lg',\n};\n\n// `<Icon>` size for the `icon` prop in text-mode, keyed by button size.\nconst textIconSizeMap: Record<TextButtonSize, 'sm' | 'default'> = {\n xs: 'sm',\n sm: 'sm',\n md: 'default',\n lg: 'default',\n};\n\n// Walks React children, expanding `<></>` fragments so `isIconOnly` can inspect the real\n// elements inside. `<Button><><Icon/></></Button>` should still count as icon-only.\nfunction flattenChildren(children: React.ReactNode): React.ReactNode[] {\n const result: React.ReactNode[] = [];\n React.Children.forEach(children, child => {\n if (React.isValidElement<{ children?: React.ReactNode }>(child) && child.type === React.Fragment) {\n result.push(...flattenChildren(child.props.children));\n } else {\n result.push(child);\n }\n });\n return result;\n}\n\n// True when every child is a React element (no text/label). Used in text-mode to brighten the\n// SVG of label-less buttons so the glyph reads stronger.\nfunction isIconOnly(children: React.ReactNode): boolean {\n const flat = flattenChildren(children);\n return flat.length > 0 && flat.every(child => React.isValidElement(child));\n}\n\n// Type guard: narrows `ButtonSize` to `IconButtonSize` so consumers (e.g. `iconChildSizeMap`)\n// can index into icon-only structures without a cast.\n// eslint-disable-next-line react-refresh/only-export-components -- shared with Combobox's icon-only trigger\nexport function isIconButtonSize(size: ButtonSize | null | undefined): size is IconButtonSize {\n return size?.startsWith('icon-') ?? false;\n}\n\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n as,\n size,\n variant = 'default',\n disabled,\n children,\n icon,\n tooltip,\n 'aria-label': ariaLabelProp,\n ...props\n },\n ref,\n ) => {\n const Component = as || 'button';\n const iconMode = isIconButtonSize(size);\n const resolvedSize: ButtonSize = size ?? 'md';\n const isLabelless = !iconMode && isIconOnly(children);\n\n // Icon-only buttons need an a11y label. If a string tooltip is provided, reuse it.\n const ariaLabel = ariaLabelProp ?? ((iconMode || isLabelless) && typeof tooltip === 'string' ? tooltip : undefined);\n\n const content = iconMode ? (\n <Icon size={iconChildSizeMap[size]}>{children}</Icon>\n ) : (\n <>\n {icon ? (\n <Icon data-slot=\"button-icon\" size={textIconSizeMap[resolvedSize as TextButtonSize]}>\n {icon}\n </Icon>\n ) : null}\n {children}\n </>\n );\n\n const button = (\n <Component\n ref={ref}\n disabled={disabled}\n aria-label={ariaLabel}\n // Expose the variant so a parent ButtonsGroup can detect FILLED segments in CSS\n // (filled buttons have an opaque background that hides a border seam, so the group\n // paints their divider as an inset box-shadow instead — see buttons-group.tsx).\n data-variant={variant}\n className={cn(buttonVariants({ variant, size: resolvedSize }), isLabelless && '[&>svg]:opacity-75', className)}\n {...props}\n >\n {content}\n </Component>\n );\n\n if (tooltip) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n\n return button;\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { B as Button } from './Button-
|
|
2
|
+
import { B as Button } from './Button-BVGwYwHT.js';
|
|
3
3
|
import { c as cn } from './cn-ByEbywDh.js';
|
|
4
4
|
import { FileTextIcon, InfoIcon, TriangleAlertIcon, OctagonAlertIcon, LightbulbIcon } from 'lucide-react';
|
|
5
5
|
|
|
@@ -86,4 +86,4 @@ const Notice = Object.assign(NoticeRoot, {
|
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
export { Notice as N };
|
|
89
|
-
//# sourceMappingURL=Notice-
|
|
89
|
+
//# sourceMappingURL=Notice-CMZ86f1g.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Notice-
|
|
1
|
+
{"version":3,"file":"Notice-CMZ86f1g.js","sources":["../src/ds/components/Notice/notice-button.tsx","../src/ds/components/Notice/notice-message.tsx","../src/ds/components/Notice/notice-root.tsx","../src/ds/components/Notice/Notice.tsx"],"sourcesContent":["import type { ButtonProps } from '../Button';\nimport { Button } from '../Button';\n\nexport function NoticeButton(props: ButtonProps) {\n return <Button size=\"sm\" variant=\"ghost\" {...props} />;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface NoticeMessageProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeMessage({ children, className }: NoticeMessageProps) {\n return <div className={cn('text-ui-md leading-ui-md', className)}>{children}</div>;\n}\n","import { FileTextIcon, InfoIcon, LightbulbIcon, OctagonAlertIcon, TriangleAlertIcon } from 'lucide-react';\nimport React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type NoticeVariant = 'warning' | 'destructive' | 'success' | 'info' | 'note';\n\nconst variantConfig: Record<NoticeVariant, { icon: React.ReactNode; classes: string }> = {\n success: {\n icon: <LightbulbIcon />,\n classes: 'bg-notice-success/20 border-notice-success/20 text-notice-success-fg',\n },\n destructive: {\n icon: <OctagonAlertIcon />,\n classes: 'bg-notice-destructive/20 border-notice-destructive/20 text-notice-destructive-fg',\n },\n warning: {\n icon: <TriangleAlertIcon />,\n classes: 'bg-notice-warning/20 border-notice-warning/20 text-notice-warning-fg',\n },\n info: {\n icon: <InfoIcon />,\n classes: 'bg-notice-info/20 border-notice-info/20 text-notice-info-fg',\n },\n note: {\n icon: <FileTextIcon />,\n classes: 'bg-notice-note border-border1 text-notice-note-fg',\n },\n};\n\nexport interface NoticeRootProps {\n variant: NoticeVariant;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeRoot({ variant, title, icon, action, children, className }: NoticeRootProps) {\n const { icon: defaultIcon, classes } = variantConfig[variant];\n const resolvedIcon = icon ?? defaultIcon;\n\n if (!title) {\n return (\n <div\n className={cn(\n '@container relative rounded-2xl border p-3 text-ui-md leading-ui-md',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex flex-col gap-3 @md:flex-row @md:items-start @md:gap-2\">\n <div className=\"flex min-w-0 flex-1 items-start gap-2 [&>svg]:size-4\">\n <span className=\"flex h-[1lh] shrink-0 items-center [&>svg]:size-4\">{resolvedIcon}</span>\n {/* wrap-anywhere — messages carry URLs and tokens with no break opportunity */}\n {children && <div className=\"min-w-0 flex-1 wrap-anywhere\">{children}</div>}\n </div>\n {action && <div className=\"@md:-my-1 [&>button]:w-full @md:[&>button]:w-auto\">{action}</div>}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n '@container relative flex flex-col gap-3 rounded-2xl border p-3',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex h-4 min-w-0 items-center gap-2 [&>svg]:size-4\">\n {resolvedIcon}\n {/* truncate, not wrap — the row is 1rem tall, a wrapped title would spill out of it */}\n <span className=\"text-ui-sm truncate leading-none font-medium tracking-wide uppercase\">{title}</span>\n </div>\n {action && <div className=\"absolute top-2 right-2 hidden @md:block\">{action}</div>}\n {(children || action) && (\n <div className=\"flex min-w-0 flex-col gap-3 wrap-anywhere\">\n {children}\n {action && <div className=\"self-start @md:hidden\">{action}</div>}\n </div>\n )}\n </div>\n );\n}\n","import { NoticeButton } from './notice-button';\nimport { NoticeMessage } from './notice-message';\nimport { NoticeRoot } from './notice-root';\n\nexport { type NoticeVariant, type NoticeRootProps } from './notice-root';\nexport { type NoticeMessageProps } from './notice-message';\n\nexport const Notice = Object.assign(NoticeRoot, {\n Message: NoticeMessage,\n Button: NoticeButton,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
const Button = require('./Button-
|
|
4
|
+
const Button = require('./Button-BJOVwaxp.cjs');
|
|
5
5
|
const utils_cn = require('./cn-DnbTIGXa.cjs');
|
|
6
6
|
const lucideReact = require('lucide-react');
|
|
7
7
|
|
|
@@ -88,4 +88,4 @@ const Notice = Object.assign(NoticeRoot, {
|
|
|
88
88
|
});
|
|
89
89
|
|
|
90
90
|
exports.Notice = Notice;
|
|
91
|
-
//# sourceMappingURL=Notice-
|
|
91
|
+
//# sourceMappingURL=Notice-D0Mvqvr0.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Notice-
|
|
1
|
+
{"version":3,"file":"Notice-D0Mvqvr0.cjs","sources":["../src/ds/components/Notice/notice-button.tsx","../src/ds/components/Notice/notice-message.tsx","../src/ds/components/Notice/notice-root.tsx","../src/ds/components/Notice/Notice.tsx"],"sourcesContent":["import type { ButtonProps } from '../Button';\nimport { Button } from '../Button';\n\nexport function NoticeButton(props: ButtonProps) {\n return <Button size=\"sm\" variant=\"ghost\" {...props} />;\n}\n","import { cn } from '@/lib/utils';\n\nexport interface NoticeMessageProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeMessage({ children, className }: NoticeMessageProps) {\n return <div className={cn('text-ui-md leading-ui-md', className)}>{children}</div>;\n}\n","import { FileTextIcon, InfoIcon, LightbulbIcon, OctagonAlertIcon, TriangleAlertIcon } from 'lucide-react';\nimport React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type NoticeVariant = 'warning' | 'destructive' | 'success' | 'info' | 'note';\n\nconst variantConfig: Record<NoticeVariant, { icon: React.ReactNode; classes: string }> = {\n success: {\n icon: <LightbulbIcon />,\n classes: 'bg-notice-success/20 border-notice-success/20 text-notice-success-fg',\n },\n destructive: {\n icon: <OctagonAlertIcon />,\n classes: 'bg-notice-destructive/20 border-notice-destructive/20 text-notice-destructive-fg',\n },\n warning: {\n icon: <TriangleAlertIcon />,\n classes: 'bg-notice-warning/20 border-notice-warning/20 text-notice-warning-fg',\n },\n info: {\n icon: <InfoIcon />,\n classes: 'bg-notice-info/20 border-notice-info/20 text-notice-info-fg',\n },\n note: {\n icon: <FileTextIcon />,\n classes: 'bg-notice-note border-border1 text-notice-note-fg',\n },\n};\n\nexport interface NoticeRootProps {\n variant: NoticeVariant;\n title?: React.ReactNode;\n icon?: React.ReactNode;\n action?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport function NoticeRoot({ variant, title, icon, action, children, className }: NoticeRootProps) {\n const { icon: defaultIcon, classes } = variantConfig[variant];\n const resolvedIcon = icon ?? defaultIcon;\n\n if (!title) {\n return (\n <div\n className={cn(\n '@container relative rounded-2xl border p-3 text-ui-md leading-ui-md',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex flex-col gap-3 @md:flex-row @md:items-start @md:gap-2\">\n <div className=\"flex min-w-0 flex-1 items-start gap-2 [&>svg]:size-4\">\n <span className=\"flex h-[1lh] shrink-0 items-center [&>svg]:size-4\">{resolvedIcon}</span>\n {/* wrap-anywhere — messages carry URLs and tokens with no break opportunity */}\n {children && <div className=\"min-w-0 flex-1 wrap-anywhere\">{children}</div>}\n </div>\n {action && <div className=\"@md:-my-1 [&>button]:w-full @md:[&>button]:w-auto\">{action}</div>}\n </div>\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n '@container relative flex flex-col gap-3 rounded-2xl border p-3',\n 'animate-in duration-200 fade-in-0 slide-in-from-top-2',\n classes,\n className,\n )}\n >\n <div className=\"flex h-4 min-w-0 items-center gap-2 [&>svg]:size-4\">\n {resolvedIcon}\n {/* truncate, not wrap — the row is 1rem tall, a wrapped title would spill out of it */}\n <span className=\"text-ui-sm truncate leading-none font-medium tracking-wide uppercase\">{title}</span>\n </div>\n {action && <div className=\"absolute top-2 right-2 hidden @md:block\">{action}</div>}\n {(children || action) && (\n <div className=\"flex min-w-0 flex-col gap-3 wrap-anywhere\">\n {children}\n {action && <div className=\"self-start @md:hidden\">{action}</div>}\n </div>\n )}\n </div>\n );\n}\n","import { NoticeButton } from './notice-button';\nimport { NoticeMessage } from './notice-message';\nimport { NoticeRoot } from './notice-root';\n\nexport { type NoticeVariant, type NoticeRootProps } from './notice-root';\nexport { type NoticeMessageProps } from './notice-message';\n\nexport const Notice = Object.assign(NoticeRoot, {\n Message: NoticeMessage,\n Button: NoticeButton,\n});\n"],"names":["Button","cn","LightbulbIcon","OctagonAlertIcon","TriangleAlertIcon","InfoIcon","FileTextIcon","jsx","jsxs"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ const react = require('@mastra/react');
|
|
|
5
5
|
const lucideReact = require('lucide-react');
|
|
6
6
|
const React = require('react');
|
|
7
7
|
const icons_Icon = require('./icons/Icon.cjs.js');
|
|
8
|
-
const Button = require('./Button-
|
|
8
|
+
const Button = require('./Button-BJOVwaxp.cjs');
|
|
9
9
|
const EmptyState = require('./EmptyState--bOUm8JU.cjs');
|
|
10
10
|
|
|
11
11
|
function SessionExpired({ title, description, className }) {
|
|
@@ -44,4 +44,4 @@ function SessionExpired({ title, description, className }) {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
exports.SessionExpired = SessionExpired;
|
|
47
|
-
//# sourceMappingURL=SessionExpired-
|
|
47
|
+
//# sourceMappingURL=SessionExpired-CAOgb-6E.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionExpired-
|
|
1
|
+
{"version":3,"file":"SessionExpired-CAOgb-6E.cjs","sources":["../src/ds/components/SessionExpired/SessionExpired.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { LogIn } from 'lucide-react';\nimport { useState, useCallback } from 'react';\n\nimport { Icon } from '../../icons/Icon';\nimport { Button } from '../Button';\nimport { EmptyState } from '../EmptyState';\n\nexport interface SessionExpiredProps {\n /** Custom title override */\n title?: string;\n /** Custom description override */\n description?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function SessionExpired({ title, description, className }: SessionExpiredProps) {\n const [isPending, setIsPending] = useState(false);\n const client = useMastraClient();\n\n const handleLogin = useCallback(async () => {\n try {\n setIsPending(true);\n const { baseUrl = '', apiPrefix } = (client as any).options || {};\n const raw = (apiPrefix || '/api').trim();\n const prefix = (raw.startsWith('/') ? raw : `/${raw}`).replace(/\\/$/, '');\n const params = new URLSearchParams({ redirect_uri: window.location.href });\n const url = `${baseUrl}${prefix}/auth/sso/login?${params}`;\n\n const response = await fetch(url, {\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (response.ok) {\n const data = await response.json();\n window.location.href = data.url;\n }\n } finally {\n setIsPending(false);\n }\n }, [client]);\n\n return (\n <EmptyState\n className={className}\n iconSlot={\n <Icon size=\"lg\" className=\"text-neutral3\">\n <LogIn />\n </Icon>\n }\n titleSlot={title ?? 'Session Expired'}\n descriptionSlot={description ?? 'Your session has expired. Please log in again to continue.'}\n actionSlot={\n <Button icon={<LogIn />} variant=\"default\" onClick={handleLogin} disabled={isPending}>\n {isPending ? 'Redirecting...' : 'Log in'}\n </Button>\n }\n />\n );\n}\n"],"names":["useState","useMastraClient","useCallback","jsx","EmptyState","Icon","LogIn","Button"],"mappings":";;;;;;;;;;AAiBO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,WAAA,EAAa,WAAU,EAAwB;AACrF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,SAASC,qBAAA,EAAgB;AAE/B,EAAA,MAAM,WAAA,GAAcC,kBAAY,YAAY;AAC1C,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,MAAM,EAAE,OAAA,GAAU,EAAA,EAAI,WAAU,GAAK,MAAA,CAAe,WAAW,EAAC;AAChE,MAAA,MAAM,GAAA,GAAA,CAAO,SAAA,IAAa,MAAA,EAAQ,IAAA,EAAK;AACvC,MAAA,MAAM,MAAA,GAAA,CAAU,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,GAAI,GAAA,GAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACxE,MAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,EAAE,cAAc,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AACzE,MAAA,MAAM,MAAM,CAAA,EAAG,OAAO,CAAA,EAAG,MAAM,mBAAmB,MAAM,CAAA,CAAA;AAExD,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAChC,WAAA,EAAa,SAAA;AAAA,QACb,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAC/C,CAAA;AAED,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,QAAA,MAAA,CAAO,QAAA,CAAS,OAAO,IAAA,CAAK,GAAA;AAAA,MAC9B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACEC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,QAAA,iCACGC,eAAA,EAAA,EAAK,IAAA,EAAK,MAAK,SAAA,EAAU,eAAA,EACxB,QAAA,kBAAAF,cAAA,CAACG,iBAAA,EAAA,EAAM,CAAA,EACT,CAAA;AAAA,MAEF,WAAW,KAAA,IAAS,iBAAA;AAAA,MACpB,iBAAiB,WAAA,IAAe,4DAAA;AAAA,MAChC,UAAA,kBACEH,cAAA,CAACI,aAAA,EAAA,EAAO,IAAA,iCAAOD,iBAAA,EAAA,EAAM,CAAA,EAAI,OAAA,EAAQ,SAAA,EAAU,SAAS,WAAA,EAAa,QAAA,EAAU,SAAA,EACxE,QAAA,EAAA,SAAA,GAAY,mBAAmB,QAAA,EAClC;AAAA;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -3,7 +3,7 @@ import { useMastraClient } from '@mastra/react';
|
|
|
3
3
|
import { LogIn } from 'lucide-react';
|
|
4
4
|
import { useState, useCallback } from 'react';
|
|
5
5
|
import { Icon } from './icons/Icon.es.js';
|
|
6
|
-
import { B as Button } from './Button-
|
|
6
|
+
import { B as Button } from './Button-BVGwYwHT.js';
|
|
7
7
|
import { E as EmptyState } from './EmptyState-CLoSRKxC.js';
|
|
8
8
|
|
|
9
9
|
function SessionExpired({ title, description, className }) {
|
|
@@ -42,4 +42,4 @@ function SessionExpired({ title, description, className }) {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
export { SessionExpired as S };
|
|
45
|
-
//# sourceMappingURL=SessionExpired-
|
|
45
|
+
//# sourceMappingURL=SessionExpired-DSPFseGA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionExpired-
|
|
1
|
+
{"version":3,"file":"SessionExpired-DSPFseGA.js","sources":["../src/ds/components/SessionExpired/SessionExpired.tsx"],"sourcesContent":["import { useMastraClient } from '@mastra/react';\nimport { LogIn } from 'lucide-react';\nimport { useState, useCallback } from 'react';\n\nimport { Icon } from '../../icons/Icon';\nimport { Button } from '../Button';\nimport { EmptyState } from '../EmptyState';\n\nexport interface SessionExpiredProps {\n /** Custom title override */\n title?: string;\n /** Custom description override */\n description?: string;\n /** Additional CSS classes */\n className?: string;\n}\n\nexport function SessionExpired({ title, description, className }: SessionExpiredProps) {\n const [isPending, setIsPending] = useState(false);\n const client = useMastraClient();\n\n const handleLogin = useCallback(async () => {\n try {\n setIsPending(true);\n const { baseUrl = '', apiPrefix } = (client as any).options || {};\n const raw = (apiPrefix || '/api').trim();\n const prefix = (raw.startsWith('/') ? raw : `/${raw}`).replace(/\\/$/, '');\n const params = new URLSearchParams({ redirect_uri: window.location.href });\n const url = `${baseUrl}${prefix}/auth/sso/login?${params}`;\n\n const response = await fetch(url, {\n credentials: 'include',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (response.ok) {\n const data = await response.json();\n window.location.href = data.url;\n }\n } finally {\n setIsPending(false);\n }\n }, [client]);\n\n return (\n <EmptyState\n className={className}\n iconSlot={\n <Icon size=\"lg\" className=\"text-neutral3\">\n <LogIn />\n </Icon>\n }\n titleSlot={title ?? 'Session Expired'}\n descriptionSlot={description ?? 'Your session has expired. Please log in again to continue.'}\n actionSlot={\n <Button icon={<LogIn />} variant=\"default\" onClick={handleLogin} disabled={isPending}>\n {isPending ? 'Redirecting...' : 'Log in'}\n </Button>\n }\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAiBO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAO,WAAA,EAAa,WAAU,EAAwB;AACrF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,SAAS,eAAA,EAAgB;AAE/B,EAAA,MAAM,WAAA,GAAc,YAAY,YAAY;AAC1C,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,MAAM,EAAE,OAAA,GAAU,EAAA,EAAI,WAAU,GAAK,MAAA,CAAe,WAAW,EAAC;AAChE,MAAA,MAAM,GAAA,GAAA,CAAO,SAAA,IAAa,MAAA,EAAQ,IAAA,EAAK;AACvC,MAAA,MAAM,MAAA,GAAA,CAAU,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,GAAI,GAAA,GAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACxE,MAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,EAAE,cAAc,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AACzE,MAAA,MAAM,MAAM,CAAA,EAAG,OAAO,CAAA,EAAG,MAAM,mBAAmB,MAAM,CAAA,CAAA;AAExD,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAChC,WAAA,EAAa,SAAA;AAAA,QACb,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA;AAAmB,OAC/C,CAAA;AAED,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,QAAA,MAAA,CAAO,QAAA,CAAS,OAAO,IAAA,CAAK,GAAA;AAAA,MAC9B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,QAAA,sBACG,IAAA,EAAA,EAAK,IAAA,EAAK,MAAK,SAAA,EAAU,eAAA,EACxB,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAM,CAAA,EACT,CAAA;AAAA,MAEF,WAAW,KAAA,IAAS,iBAAA;AAAA,MACpB,iBAAiB,WAAA,IAAe,4DAAA;AAAA,MAChC,UAAA,kBACE,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,sBAAO,KAAA,EAAA,EAAM,CAAA,EAAI,OAAA,EAAQ,SAAA,EAAU,SAAS,WAAA,EAAa,QAAA,EAAU,SAAA,EACxE,QAAA,EAAA,SAAA,GAAY,mBAAmB,QAAA,EAClC;AAAA;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -4,8 +4,8 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
const lucideReact = require('lucide-react');
|
|
5
5
|
const React = require('react');
|
|
6
6
|
const Badge = require('./Badge-B-LKnrNk.cjs');
|
|
7
|
-
const Button = require('./Button-
|
|
8
|
-
const input = require('./input-
|
|
7
|
+
const Button = require('./Button-BJOVwaxp.cjs');
|
|
8
|
+
const input = require('./input-D3SUXvgI.cjs');
|
|
9
9
|
const utils_cn = require('./cn-DnbTIGXa.cjs');
|
|
10
10
|
|
|
11
11
|
const AskUserContainer = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils_cn.cn("rounded-lg border border-border1 bg-surface2 p-3 text-ui-md", className), ...props });
|
|
@@ -143,4 +143,4 @@ exports.AskUserOutput = AskUserOutput;
|
|
|
143
143
|
exports.AskUserPending = AskUserPending;
|
|
144
144
|
exports.AskUserQuestion = AskUserQuestion;
|
|
145
145
|
exports.AskUserSubmit = AskUserSubmit;
|
|
146
|
-
//# sourceMappingURL=ask-user-
|
|
146
|
+
//# sourceMappingURL=ask-user-DQGe7ZTv.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-user-DWUWXbS7.cjs","sources":["../src/ds/components/ai/ask-user/ask-user.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport type { ComponentProps, KeyboardEvent, ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { Input } from '@/ds/components/Input';\nimport { cn } from '@/lib/utils';\n\nexport type AskUserSelectionMode = 'single_select' | 'multi_select';\nexport type AskUserAnswer = string | string[];\n\nexport interface AskUserOption {\n label: string;\n description?: string;\n}\n\nexport interface AskUserPayload {\n question: string;\n options?: AskUserOption[];\n selectionMode?: AskUserSelectionMode;\n}\n\nexport interface AskUserResult {\n content: string;\n isError?: boolean;\n}\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div className={cn('rounded-lg border border-border1 bg-surface2 p-3 text-ui-md', className)} {...props} />\n);\n\nexport const AskUserQuestion = ({ className, ...props }: ComponentProps<'legend'>) => (\n <legend className={cn('mb-3 font-medium text-neutral6', className)} {...props} />\n);\n\nexport const AskUserOptionDescription = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('block text-ui-xs font-normal text-neutral3', className)} {...props} />\n);\n\ninterface AskUserOptionControlProps extends Omit<ComponentProps<'input'>, 'type'> {\n type: 'radio' | 'checkbox';\n label: string;\n description?: string;\n}\n\nexport const AskUserOptionControl = ({ type, label, description, className, ...props }: AskUserOptionControlProps) => (\n <label\n className={cn(\n 'flex cursor-pointer items-start gap-2 rounded-md border border-border1 bg-surface3 px-3 py-2 text-neutral5 transition-colors hover:bg-surface4 has-[:checked]:border-border2 has-[:checked]:bg-surface4 has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50',\n className,\n )}\n >\n <input type={type} className=\"mt-0.5 accent-current\" {...props} />\n <span>\n <span className=\"block\">{label}</span>\n {description ? <AskUserOptionDescription>{description}</AskUserOptionDescription> : null}\n </span>\n </label>\n);\n\nexport const AskUserSubmit = ({ children = 'Submit answer', ...props }: ComponentProps<typeof Button>) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', className, ...props }: ComponentProps<'span'>) => (\n <span role=\"status\" className={cn('text-ui-xs text-neutral3', className)} {...props}>\n {children}\n </span>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n role={result.isError ? 'alert' : 'status'}\n className={cn('space-y-2 rounded-md bg-surface3 p-3 text-neutral5', result.isError && 'text-error', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'red' : 'green'}>\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <p>{result.content}</p>\n </div>\n);\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nconst validOptions = (options: AskUserPayload['options']): AskUserOption[] =>\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? [];\n\ninterface AskUserInputProps extends AskUserProps {\n options: AskUserOption[];\n}\n\nconst AskUserInput = ({\n payload,\n options,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserInputProps) => {\n const inputId = useId();\n const [text, setText] = useState('');\n const [selected, setSelected] = useState<string[]>([]);\n\n if (result || isAnswered) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <p className=\"text-neutral6 mb-2 font-medium\">{payload.question}</p>\n {result ? <AskUserOutput result={result} /> : <Badge variant=\"green\">Answered</Badge>}\n </AskUserContainer>\n );\n }\n\n const submitText = () => {\n const answer = text.trim();\n if (answer && !isSubmitting) onSubmit(answer);\n };\n\n const handleTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n submitText();\n }\n };\n\n if (options.length === 0) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <label className=\"text-neutral6 mb-2 block font-medium\" htmlFor={inputId}>\n {payload.question}\n </label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={inputId}\n value={text}\n onChange={event => setText(event.target.value)}\n onKeyDown={handleTextKeyDown}\n placeholder=\"Type your answer...\"\n disabled={isSubmitting}\n size=\"sm\"\n />\n <AskUserSubmit aria-label=\"Submit answer\" disabled={isSubmitting || !text.trim()} onClick={submitText}>\n Submit\n </AskUserSubmit>\n </div>\n {isSubmitting ? <AskUserPending className=\"mt-2 block\" /> : null}\n {footer}\n </AskUserContainer>\n );\n }\n\n const isMulti = payload.selectionMode === 'multi_select';\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <fieldset disabled={isSubmitting} className=\"space-y-2\">\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n {options.map(option => {\n const checked = selected.includes(option.label);\n return (\n <AskUserOptionControl\n key={option.label}\n type={isMulti ? 'checkbox' : 'radio'}\n name={inputId}\n label={option.label}\n description={option.description}\n disabled={isSubmitting}\n checked={checked}\n onChange={() => {\n if (isSubmitting) return;\n if (!isMulti) {\n setSelected([option.label]);\n onSubmit(option.label);\n return;\n }\n setSelected(current =>\n current.includes(option.label)\n ? current.filter(selectedLabel => selectedLabel !== option.label)\n : [...current, option.label],\n );\n }}\n />\n );\n })}\n {isMulti ? (\n <AskUserSubmit disabled={isSubmitting || selected.length === 0} onClick={() => onSubmit(selected)}>\n Submit answer\n </AskUserSubmit>\n ) : null}\n {isSubmitting ? <AskUserPending /> : null}\n {footer}\n </fieldset>\n </AskUserContainer>\n );\n};\n\nexport const AskUser = ({ payload, ...props }: AskUserProps) => {\n const options = validOptions(payload.options);\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n\n return <AskUserInput key={payloadKey} payload={payload} options={options} {...props} />;\n};\n"],"names":["jsx","cn","jsxs","Button","Check","Badge","useId","useState","Input"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ask-user-DQGe7ZTv.cjs","sources":["../src/ds/components/ai/ask-user/ask-user.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport type { ComponentProps, KeyboardEvent, ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { Input } from '@/ds/components/Input';\nimport { cn } from '@/lib/utils';\n\nexport type AskUserSelectionMode = 'single_select' | 'multi_select';\nexport type AskUserAnswer = string | string[];\n\nexport interface AskUserOption {\n label: string;\n description?: string;\n}\n\nexport interface AskUserPayload {\n question: string;\n options?: AskUserOption[];\n selectionMode?: AskUserSelectionMode;\n}\n\nexport interface AskUserResult {\n content: string;\n isError?: boolean;\n}\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div className={cn('rounded-lg border border-border1 bg-surface2 p-3 text-ui-md', className)} {...props} />\n);\n\nexport const AskUserQuestion = ({ className, ...props }: ComponentProps<'legend'>) => (\n <legend className={cn('mb-3 font-medium text-neutral6', className)} {...props} />\n);\n\nexport const AskUserOptionDescription = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('block text-ui-xs font-normal text-neutral3', className)} {...props} />\n);\n\ninterface AskUserOptionControlProps extends Omit<ComponentProps<'input'>, 'type'> {\n type: 'radio' | 'checkbox';\n label: string;\n description?: string;\n}\n\nexport const AskUserOptionControl = ({ type, label, description, className, ...props }: AskUserOptionControlProps) => (\n <label\n className={cn(\n 'flex cursor-pointer items-start gap-2 rounded-md border border-border1 bg-surface3 px-3 py-2 text-neutral5 transition-colors hover:bg-surface4 has-[:checked]:border-border2 has-[:checked]:bg-surface4 has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50',\n className,\n )}\n >\n <input type={type} className=\"mt-0.5 accent-current\" {...props} />\n <span>\n <span className=\"block\">{label}</span>\n {description ? <AskUserOptionDescription>{description}</AskUserOptionDescription> : null}\n </span>\n </label>\n);\n\nexport const AskUserSubmit = ({ children = 'Submit answer', ...props }: ComponentProps<typeof Button>) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', className, ...props }: ComponentProps<'span'>) => (\n <span role=\"status\" className={cn('text-ui-xs text-neutral3', className)} {...props}>\n {children}\n </span>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n role={result.isError ? 'alert' : 'status'}\n className={cn('space-y-2 rounded-md bg-surface3 p-3 text-neutral5', result.isError && 'text-error', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'red' : 'green'}>\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <p>{result.content}</p>\n </div>\n);\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nconst validOptions = (options: AskUserPayload['options']): AskUserOption[] =>\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? [];\n\ninterface AskUserInputProps extends AskUserProps {\n options: AskUserOption[];\n}\n\nconst AskUserInput = ({\n payload,\n options,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserInputProps) => {\n const inputId = useId();\n const [text, setText] = useState('');\n const [selected, setSelected] = useState<string[]>([]);\n\n if (result || isAnswered) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <p className=\"text-neutral6 mb-2 font-medium\">{payload.question}</p>\n {result ? <AskUserOutput result={result} /> : <Badge variant=\"green\">Answered</Badge>}\n </AskUserContainer>\n );\n }\n\n const submitText = () => {\n const answer = text.trim();\n if (answer && !isSubmitting) onSubmit(answer);\n };\n\n const handleTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n submitText();\n }\n };\n\n if (options.length === 0) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <label className=\"text-neutral6 mb-2 block font-medium\" htmlFor={inputId}>\n {payload.question}\n </label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={inputId}\n value={text}\n onChange={event => setText(event.target.value)}\n onKeyDown={handleTextKeyDown}\n placeholder=\"Type your answer...\"\n disabled={isSubmitting}\n size=\"sm\"\n />\n <AskUserSubmit aria-label=\"Submit answer\" disabled={isSubmitting || !text.trim()} onClick={submitText}>\n Submit\n </AskUserSubmit>\n </div>\n {isSubmitting ? <AskUserPending className=\"mt-2 block\" /> : null}\n {footer}\n </AskUserContainer>\n );\n }\n\n const isMulti = payload.selectionMode === 'multi_select';\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <fieldset disabled={isSubmitting} className=\"space-y-2\">\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n {options.map(option => {\n const checked = selected.includes(option.label);\n return (\n <AskUserOptionControl\n key={option.label}\n type={isMulti ? 'checkbox' : 'radio'}\n name={inputId}\n label={option.label}\n description={option.description}\n disabled={isSubmitting}\n checked={checked}\n onChange={() => {\n if (isSubmitting) return;\n if (!isMulti) {\n setSelected([option.label]);\n onSubmit(option.label);\n return;\n }\n setSelected(current =>\n current.includes(option.label)\n ? current.filter(selectedLabel => selectedLabel !== option.label)\n : [...current, option.label],\n );\n }}\n />\n );\n })}\n {isMulti ? (\n <AskUserSubmit disabled={isSubmitting || selected.length === 0} onClick={() => onSubmit(selected)}>\n Submit answer\n </AskUserSubmit>\n ) : null}\n {isSubmitting ? <AskUserPending /> : null}\n {footer}\n </fieldset>\n </AskUserContainer>\n );\n};\n\nexport const AskUser = ({ payload, ...props }: AskUserProps) => {\n const options = validOptions(payload.options);\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n\n return <AskUserInput key={payloadKey} payload={payload} options={options} {...props} />;\n};\n"],"names":["jsx","cn","jsxs","Button","Check","Badge","useId","useState","Input"],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { Check } from 'lucide-react';
|
|
3
3
|
import { useId, useState } from 'react';
|
|
4
4
|
import { B as Badge } from './Badge-BqVBVHGc.js';
|
|
5
|
-
import { B as Button } from './Button-
|
|
6
|
-
import { I as Input } from './input-
|
|
5
|
+
import { B as Button } from './Button-BVGwYwHT.js';
|
|
6
|
+
import { I as Input } from './input-DinpgQXj.js';
|
|
7
7
|
import { c as cn } from './cn-ByEbywDh.js';
|
|
8
8
|
|
|
9
9
|
const AskUserContainer = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("rounded-lg border border-border1 bg-surface2 p-3 text-ui-md", className), ...props });
|
|
@@ -134,4 +134,4 @@ const AskUser = ({ payload, ...props }) => {
|
|
|
134
134
|
};
|
|
135
135
|
|
|
136
136
|
export { AskUser as A, AskUserContainer as a, AskUserOptionControl as b, AskUserOptionDescription as c, AskUserOutput as d, AskUserPending as e, AskUserQuestion as f, AskUserSubmit as g };
|
|
137
|
-
//# sourceMappingURL=ask-user-
|
|
137
|
+
//# sourceMappingURL=ask-user-Dh9YowL4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-user-D7MeXylO.js","sources":["../src/ds/components/ai/ask-user/ask-user.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport type { ComponentProps, KeyboardEvent, ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { Input } from '@/ds/components/Input';\nimport { cn } from '@/lib/utils';\n\nexport type AskUserSelectionMode = 'single_select' | 'multi_select';\nexport type AskUserAnswer = string | string[];\n\nexport interface AskUserOption {\n label: string;\n description?: string;\n}\n\nexport interface AskUserPayload {\n question: string;\n options?: AskUserOption[];\n selectionMode?: AskUserSelectionMode;\n}\n\nexport interface AskUserResult {\n content: string;\n isError?: boolean;\n}\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div className={cn('rounded-lg border border-border1 bg-surface2 p-3 text-ui-md', className)} {...props} />\n);\n\nexport const AskUserQuestion = ({ className, ...props }: ComponentProps<'legend'>) => (\n <legend className={cn('mb-3 font-medium text-neutral6', className)} {...props} />\n);\n\nexport const AskUserOptionDescription = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('block text-ui-xs font-normal text-neutral3', className)} {...props} />\n);\n\ninterface AskUserOptionControlProps extends Omit<ComponentProps<'input'>, 'type'> {\n type: 'radio' | 'checkbox';\n label: string;\n description?: string;\n}\n\nexport const AskUserOptionControl = ({ type, label, description, className, ...props }: AskUserOptionControlProps) => (\n <label\n className={cn(\n 'flex cursor-pointer items-start gap-2 rounded-md border border-border1 bg-surface3 px-3 py-2 text-neutral5 transition-colors hover:bg-surface4 has-[:checked]:border-border2 has-[:checked]:bg-surface4 has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50',\n className,\n )}\n >\n <input type={type} className=\"mt-0.5 accent-current\" {...props} />\n <span>\n <span className=\"block\">{label}</span>\n {description ? <AskUserOptionDescription>{description}</AskUserOptionDescription> : null}\n </span>\n </label>\n);\n\nexport const AskUserSubmit = ({ children = 'Submit answer', ...props }: ComponentProps<typeof Button>) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', className, ...props }: ComponentProps<'span'>) => (\n <span role=\"status\" className={cn('text-ui-xs text-neutral3', className)} {...props}>\n {children}\n </span>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n role={result.isError ? 'alert' : 'status'}\n className={cn('space-y-2 rounded-md bg-surface3 p-3 text-neutral5', result.isError && 'text-error', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'red' : 'green'}>\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <p>{result.content}</p>\n </div>\n);\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nconst validOptions = (options: AskUserPayload['options']): AskUserOption[] =>\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? [];\n\ninterface AskUserInputProps extends AskUserProps {\n options: AskUserOption[];\n}\n\nconst AskUserInput = ({\n payload,\n options,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserInputProps) => {\n const inputId = useId();\n const [text, setText] = useState('');\n const [selected, setSelected] = useState<string[]>([]);\n\n if (result || isAnswered) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <p className=\"text-neutral6 mb-2 font-medium\">{payload.question}</p>\n {result ? <AskUserOutput result={result} /> : <Badge variant=\"green\">Answered</Badge>}\n </AskUserContainer>\n );\n }\n\n const submitText = () => {\n const answer = text.trim();\n if (answer && !isSubmitting) onSubmit(answer);\n };\n\n const handleTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n submitText();\n }\n };\n\n if (options.length === 0) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <label className=\"text-neutral6 mb-2 block font-medium\" htmlFor={inputId}>\n {payload.question}\n </label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={inputId}\n value={text}\n onChange={event => setText(event.target.value)}\n onKeyDown={handleTextKeyDown}\n placeholder=\"Type your answer...\"\n disabled={isSubmitting}\n size=\"sm\"\n />\n <AskUserSubmit aria-label=\"Submit answer\" disabled={isSubmitting || !text.trim()} onClick={submitText}>\n Submit\n </AskUserSubmit>\n </div>\n {isSubmitting ? <AskUserPending className=\"mt-2 block\" /> : null}\n {footer}\n </AskUserContainer>\n );\n }\n\n const isMulti = payload.selectionMode === 'multi_select';\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <fieldset disabled={isSubmitting} className=\"space-y-2\">\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n {options.map(option => {\n const checked = selected.includes(option.label);\n return (\n <AskUserOptionControl\n key={option.label}\n type={isMulti ? 'checkbox' : 'radio'}\n name={inputId}\n label={option.label}\n description={option.description}\n disabled={isSubmitting}\n checked={checked}\n onChange={() => {\n if (isSubmitting) return;\n if (!isMulti) {\n setSelected([option.label]);\n onSubmit(option.label);\n return;\n }\n setSelected(current =>\n current.includes(option.label)\n ? current.filter(selectedLabel => selectedLabel !== option.label)\n : [...current, option.label],\n );\n }}\n />\n );\n })}\n {isMulti ? (\n <AskUserSubmit disabled={isSubmitting || selected.length === 0} onClick={() => onSubmit(selected)}>\n Submit answer\n </AskUserSubmit>\n ) : null}\n {isSubmitting ? <AskUserPending /> : null}\n {footer}\n </fieldset>\n </AskUserContainer>\n );\n};\n\nexport const AskUser = ({ payload, ...props }: AskUserProps) => {\n const options = validOptions(payload.options);\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n\n return <AskUserInput key={payloadKey} payload={payload} options={options} {...props} />;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ask-user-Dh9YowL4.js","sources":["../src/ds/components/ai/ask-user/ask-user.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport { useId, useState } from 'react';\nimport type { ComponentProps, KeyboardEvent, ReactNode } from 'react';\nimport { Badge } from '@/ds/components/Badge';\nimport { Button } from '@/ds/components/Button';\nimport { Input } from '@/ds/components/Input';\nimport { cn } from '@/lib/utils';\n\nexport type AskUserSelectionMode = 'single_select' | 'multi_select';\nexport type AskUserAnswer = string | string[];\n\nexport interface AskUserOption {\n label: string;\n description?: string;\n}\n\nexport interface AskUserPayload {\n question: string;\n options?: AskUserOption[];\n selectionMode?: AskUserSelectionMode;\n}\n\nexport interface AskUserResult {\n content: string;\n isError?: boolean;\n}\n\nexport const AskUserContainer = ({ className, ...props }: ComponentProps<'div'>) => (\n <div className={cn('rounded-lg border border-border1 bg-surface2 p-3 text-ui-md', className)} {...props} />\n);\n\nexport const AskUserQuestion = ({ className, ...props }: ComponentProps<'legend'>) => (\n <legend className={cn('mb-3 font-medium text-neutral6', className)} {...props} />\n);\n\nexport const AskUserOptionDescription = ({ className, ...props }: ComponentProps<'span'>) => (\n <span className={cn('block text-ui-xs font-normal text-neutral3', className)} {...props} />\n);\n\ninterface AskUserOptionControlProps extends Omit<ComponentProps<'input'>, 'type'> {\n type: 'radio' | 'checkbox';\n label: string;\n description?: string;\n}\n\nexport const AskUserOptionControl = ({ type, label, description, className, ...props }: AskUserOptionControlProps) => (\n <label\n className={cn(\n 'flex cursor-pointer items-start gap-2 rounded-md border border-border1 bg-surface3 px-3 py-2 text-neutral5 transition-colors hover:bg-surface4 has-[:checked]:border-border2 has-[:checked]:bg-surface4 has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50',\n className,\n )}\n >\n <input type={type} className=\"mt-0.5 accent-current\" {...props} />\n <span>\n <span className=\"block\">{label}</span>\n {description ? <AskUserOptionDescription>{description}</AskUserOptionDescription> : null}\n </span>\n </label>\n);\n\nexport const AskUserSubmit = ({ children = 'Submit answer', ...props }: ComponentProps<typeof Button>) => (\n <Button icon={<Check />} type=\"button\" size=\"sm\" variant=\"primary\" {...props}>\n {children}\n </Button>\n);\n\nexport const AskUserPending = ({ children = 'Submitting…', className, ...props }: ComponentProps<'span'>) => (\n <span role=\"status\" className={cn('text-ui-xs text-neutral3', className)} {...props}>\n {children}\n </span>\n);\n\nexport interface AskUserOutputProps extends ComponentProps<'div'> {\n result: AskUserResult;\n}\n\nexport const AskUserOutput = ({ result, className, ...props }: AskUserOutputProps) => (\n <div\n role={result.isError ? 'alert' : 'status'}\n className={cn('space-y-2 rounded-md bg-surface3 p-3 text-neutral5', result.isError && 'text-error', className)}\n {...props}\n >\n <Badge size=\"xs\" variant={result.isError ? 'red' : 'green'}>\n {result.isError ? 'Error' : 'Answered'}\n </Badge>\n <p>{result.content}</p>\n </div>\n);\n\nexport interface AskUserProps extends Omit<ComponentProps<typeof AskUserContainer>, 'children' | 'onSubmit'> {\n payload: AskUserPayload;\n result?: AskUserResult;\n isAnswered?: boolean;\n isSubmitting?: boolean;\n onSubmit: (answer: AskUserAnswer) => void;\n footer?: ReactNode;\n}\n\nconst validOptions = (options: AskUserPayload['options']): AskUserOption[] =>\n options?.filter((option): option is AskUserOption =>\n Boolean(option && typeof option.label === 'string' && option.label),\n ) ?? [];\n\ninterface AskUserInputProps extends AskUserProps {\n options: AskUserOption[];\n}\n\nconst AskUserInput = ({\n payload,\n options,\n result,\n isAnswered = false,\n isSubmitting = false,\n onSubmit,\n footer,\n ...props\n}: AskUserInputProps) => {\n const inputId = useId();\n const [text, setText] = useState('');\n const [selected, setSelected] = useState<string[]>([]);\n\n if (result || isAnswered) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <p className=\"text-neutral6 mb-2 font-medium\">{payload.question}</p>\n {result ? <AskUserOutput result={result} /> : <Badge variant=\"green\">Answered</Badge>}\n </AskUserContainer>\n );\n }\n\n const submitText = () => {\n const answer = text.trim();\n if (answer && !isSubmitting) onSubmit(answer);\n };\n\n const handleTextKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n submitText();\n }\n };\n\n if (options.length === 0) {\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <label className=\"text-neutral6 mb-2 block font-medium\" htmlFor={inputId}>\n {payload.question}\n </label>\n <div className=\"flex items-center gap-2\">\n <Input\n id={inputId}\n value={text}\n onChange={event => setText(event.target.value)}\n onKeyDown={handleTextKeyDown}\n placeholder=\"Type your answer...\"\n disabled={isSubmitting}\n size=\"sm\"\n />\n <AskUserSubmit aria-label=\"Submit answer\" disabled={isSubmitting || !text.trim()} onClick={submitText}>\n Submit\n </AskUserSubmit>\n </div>\n {isSubmitting ? <AskUserPending className=\"mt-2 block\" /> : null}\n {footer}\n </AskUserContainer>\n );\n }\n\n const isMulti = payload.selectionMode === 'multi_select';\n return (\n <AskUserContainer data-testid=\"ask-user\" {...props}>\n <fieldset disabled={isSubmitting} className=\"space-y-2\">\n <AskUserQuestion>{payload.question}</AskUserQuestion>\n {options.map(option => {\n const checked = selected.includes(option.label);\n return (\n <AskUserOptionControl\n key={option.label}\n type={isMulti ? 'checkbox' : 'radio'}\n name={inputId}\n label={option.label}\n description={option.description}\n disabled={isSubmitting}\n checked={checked}\n onChange={() => {\n if (isSubmitting) return;\n if (!isMulti) {\n setSelected([option.label]);\n onSubmit(option.label);\n return;\n }\n setSelected(current =>\n current.includes(option.label)\n ? current.filter(selectedLabel => selectedLabel !== option.label)\n : [...current, option.label],\n );\n }}\n />\n );\n })}\n {isMulti ? (\n <AskUserSubmit disabled={isSubmitting || selected.length === 0} onClick={() => onSubmit(selected)}>\n Submit answer\n </AskUserSubmit>\n ) : null}\n {isSubmitting ? <AskUserPending /> : null}\n {footer}\n </fieldset>\n </AskUserContainer>\n );\n};\n\nexport const AskUser = ({ payload, ...props }: AskUserProps) => {\n const options = validOptions(payload.options);\n const payloadKey = JSON.stringify([payload.question, options.map(option => option.label), payload.selectionMode]);\n\n return <AskUserInput key={payloadKey} payload={payload} options={options} {...props} />;\n};\n"],"names":[],"mappings":"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"}
|