@mastra/playground-ui 57.0.0 → 58.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/dist/{Button-KUj0U-5I.js → Button-B8nF87ai.js} +2 -8
- package/dist/Button-B8nF87ai.js.map +1 -0
- package/dist/{Button-MMZPEb_q.cjs → Button-BAMnPqos.cjs} +1 -7
- package/dist/Button-BAMnPqos.cjs.map +1 -0
- package/dist/{Card-DwGasv0K.cjs → Card-BbwF20OW.cjs} +3 -3
- package/dist/Card-BbwF20OW.cjs.map +1 -0
- package/dist/{Card-B_buJ5yF.js → Card-DmT57Pve.js} +3 -3
- package/dist/Card-DmT57Pve.js.map +1 -0
- package/dist/{EmptyState-DiSP6UIy.cjs → EmptyState-2XQgeju6.cjs} +12 -3
- package/dist/EmptyState-2XQgeju6.cjs.map +1 -0
- package/dist/{EmptyState-B6cyZw6m.js → EmptyState-Bc4nJ9QH.js} +13 -4
- package/dist/EmptyState-Bc4nJ9QH.js.map +1 -0
- package/dist/{Notice-CPyYcX5J.cjs → Notice-AUNd8fqT.cjs} +2 -2
- package/dist/{Notice-CPyYcX5J.cjs.map → Notice-AUNd8fqT.cjs.map} +1 -1
- package/dist/{Notice-KC18b8Nd.js → Notice-WT8G4OA6.js} +2 -2
- package/dist/{Notice-KC18b8Nd.js.map → Notice-WT8G4OA6.js.map} +1 -1
- package/dist/{ask-user-DaRRR4qQ.cjs → ask-user-BPpgiE7k.cjs} +3 -3
- package/dist/{ask-user-DaRRR4qQ.cjs.map → ask-user-BPpgiE7k.cjs.map} +1 -1
- package/dist/{ask-user-C4DTzEQF.js → ask-user-jDUt7hgT.js} +3 -3
- package/dist/{ask-user-C4DTzEQF.js.map → ask-user-jDUt7hgT.js.map} +1 -1
- package/dist/buttons-group.css +2 -14
- package/dist/{chat-notification-DeKD1Ifx.js → chat-notification-CmdRGO_D.js} +2 -2
- package/dist/{chat-notification-DeKD1Ifx.js.map → chat-notification-CmdRGO_D.js.map} +1 -1
- package/dist/{chat-notification-C5Ox5tuS.cjs → chat-notification-DJykWtoj.cjs} +2 -2
- package/dist/{chat-notification-C5Ox5tuS.cjs.map → chat-notification-DJykWtoj.cjs.map} +1 -1
- package/dist/{chat-signal-DiAHks6_.js → chat-signal-Vg8pGXwH.js} +2 -2
- package/dist/{chat-signal-DiAHks6_.js.map → chat-signal-Vg8pGXwH.js.map} +1 -1
- package/dist/{chat-signal-ClyJeml8.cjs → chat-signal-xs3FkPts.cjs} +2 -2
- package/dist/{chat-signal-ClyJeml8.cjs.map → chat-signal-xs3FkPts.cjs.map} +1 -1
- package/dist/{code-block-D37olB3O.js → code-block-BD2N5Yi2.js} +5 -5
- package/dist/{code-block-D37olB3O.js.map → code-block-BD2N5Yi2.js.map} +1 -1
- package/dist/{code-block-BoTq0TMr.cjs → code-block-fI67m2KV.cjs} +5 -5
- package/dist/{code-block-BoTq0TMr.cjs.map → code-block-fI67m2KV.cjs.map} +1 -1
- package/dist/{code-editor-BQTDma1I.js → code-editor-C-0srcj0.js} +4 -3
- package/dist/code-editor-C-0srcj0.js.map +1 -0
- package/dist/{code-editor-BfoJXq9l.cjs → code-editor-CFu_BYpQ.cjs} +4 -3
- package/dist/code-editor-CFu_BYpQ.cjs.map +1 -0
- package/dist/{combobox-Bn_uyUSB.cjs → combobox-BoSB-muq.cjs} +17 -9
- package/dist/combobox-BoSB-muq.cjs.map +1 -0
- package/dist/{combobox-Cykfy5wc.js → combobox-Cd0JPUQW.js} +17 -9
- package/dist/combobox-Cd0JPUQW.js.map +1 -0
- package/dist/{combobox-styles-iuJUkJEQ.js → combobox-styles-BhUqhOvz.js} +4 -2
- package/dist/combobox-styles-BhUqhOvz.js.map +1 -0
- package/dist/{combobox-styles-CSsS2LEx.cjs → combobox-styles-LHrC0tU0.cjs} +4 -2
- package/dist/combobox-styles-LHrC0tU0.cjs.map +1 -0
- package/dist/{command-B7H-emho.cjs → command-AVQzLcYR.cjs} +2 -2
- package/dist/{command-B7H-emho.cjs.map → command-AVQzLcYR.cjs.map} +1 -1
- package/dist/{command-Bmy4PznC.js → command-DhiJvyMM.js} +2 -2
- package/dist/{command-Bmy4PznC.js.map → command-DhiJvyMM.js.map} +1 -1
- package/dist/components/AlertDialog.cjs.js +2 -2
- package/dist/components/AlertDialog.cjs.js.map +1 -1
- package/dist/components/AlertDialog.es.js +3 -3
- package/dist/components/AlertDialog.es.js.map +1 -1
- package/dist/components/Button.cjs.js +1 -1
- package/dist/components/Button.es.js +2 -2
- package/dist/components/Card.cjs.js +1 -1
- package/dist/components/Card.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 +2 -106
- package/dist/components/Columns.cjs.js.map +1 -1
- package/dist/components/Columns.es.js +4 -107
- package/dist/components/Columns.es.js.map +1 -1
- package/dist/components/Combobox.cjs.js +2 -2
- package/dist/components/Combobox.es.js +2 -2
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CommandPalette.cjs.js +1 -1
- package/dist/components/CommandPalette.es.js +1 -1
- package/dist/components/Comment.cjs.js +3 -3
- package/dist/components/Comment.cjs.js.map +1 -1
- package/dist/components/Comment.es.js +3 -3
- package/dist/components/Comment.es.js.map +1 -1
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +2 -2
- package/dist/components/DataDetailsPanel.es.js +2 -2
- package/dist/components/DataKeysAndValues.cjs.js +1 -1
- package/dist/components/DataKeysAndValues.es.js +1 -1
- package/dist/components/DataList.cjs.js +3 -3
- package/dist/components/DataList.es.js +3 -3
- 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 +10 -4
- package/dist/components/DateTimePicker.cjs.js.map +1 -1
- package/dist/components/DateTimePicker.es.js +10 -4
- package/dist/components/DateTimePicker.es.js.map +1 -1
- 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/DisabledFeatureButton.cjs.js +1 -1
- package/dist/components/DisabledFeatureButton.es.js +1 -1
- package/dist/components/Drawer.cjs.js +1 -1
- package/dist/components/Drawer.es.js +1 -1
- package/dist/components/EmptyState.cjs.js +1 -1
- package/dist/components/EmptyState.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/FilterBar.cjs.js +3 -3
- package/dist/components/FilterBar.es.js +4 -4
- package/dist/components/FormFieldBlocks.cjs.js +4 -4
- package/dist/components/FormFieldBlocks.es.js +4 -4
- 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/JSONSchemaForm.cjs.js +3 -3
- package/dist/components/JSONSchemaForm.es.js +3 -3
- package/dist/components/ListSearch.cjs.js +1 -1
- package/dist/components/ListSearch.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +1 -3
- package/dist/components/LogsDataList.cjs.js.map +1 -1
- package/dist/components/LogsDataList.es.js +1 -3
- package/dist/components/LogsDataList.es.js.map +1 -1
- package/dist/components/MainSidebar.cjs.js +125 -11
- package/dist/components/MainSidebar.cjs.js.map +1 -1
- package/dist/components/MainSidebar.es.js +120 -1
- package/dist/components/MainSidebar.es.js.map +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/Message.cjs.js +1 -1
- package/dist/components/Message.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsKpiCard.cjs.js +1 -1
- package/dist/components/MetricsKpiCard.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/PageLayout.cjs.js +26 -3
- package/dist/components/PageLayout.cjs.js.map +1 -1
- package/dist/components/PageLayout.es.js +27 -4
- package/dist/components/PageLayout.es.js.map +1 -1
- package/dist/components/PrevNextNav.cjs.js +1 -1
- package/dist/components/PrevNextNav.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +5 -5
- package/dist/components/PropertyFilter.cjs.js.map +1 -1
- package/dist/components/PropertyFilter.es.js +6 -6
- package/dist/components/PropertyFilter.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/SideDialog.cjs.js +3 -3
- package/dist/components/SideDialog.es.js +3 -3
- 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 +4 -4
- package/dist/components/Workflow.es.js +4 -4
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/chat-event.cjs.js +3 -3
- package/dist/components/ai/chat-event.es.js +4 -4
- package/dist/components/ai/plan.cjs.js +2 -2
- package/dist/components/ai/plan.es.js +2 -2
- package/dist/components/ai/tool-approval.cjs.js +1 -1
- package/dist/components/ai/tool-approval.es.js +1 -1
- package/dist/components/ai/tool-call.cjs.js +2 -2
- package/dist/components/ai/tool-call.es.js +3 -3
- package/dist/{copy-button-B5ZCtnTb.cjs → copy-button-D2MTGxq_.cjs} +2 -2
- package/dist/{copy-button-B5ZCtnTb.cjs.map → copy-button-D2MTGxq_.cjs.map} +1 -1
- package/dist/{copy-button-DZqxEuiE.js → copy-button-DcZ1mdw4.js} +2 -2
- package/dist/{copy-button-DZqxEuiE.js.map → copy-button-DcZ1mdw4.js.map} +1 -1
- package/dist/{data-code-section-DJRr65hS.js → data-code-section-C75shCII.js} +5 -5
- package/dist/{data-code-section-DJRr65hS.js.map → data-code-section-C75shCII.js.map} +1 -1
- package/dist/{data-code-section-iXzoOYMX.cjs → data-code-section-DzLc9O0B.cjs} +5 -5
- package/dist/{data-code-section-iXzoOYMX.cjs.map → data-code-section-DzLc9O0B.cjs.map} +1 -1
- package/dist/{data-keys-and-values-DhC4U4Yl.js → data-keys-and-values-BTYDB-K2.js} +3 -20
- package/dist/data-keys-and-values-BTYDB-K2.js.map +1 -0
- package/dist/{data-keys-and-values-BduKvvC5.cjs → data-keys-and-values-CMJ9zHKm.cjs} +3 -20
- package/dist/data-keys-and-values-CMJ9zHKm.cjs.map +1 -0
- package/dist/{data-list-DSbuTWLI.cjs → data-list-CH3HAhK5.cjs} +5 -5
- package/dist/data-list-CH3HAhK5.cjs.map +1 -0
- package/dist/{data-list-Cn0Ls4l2.js → data-list-DXjH5wkB.js} +5 -5
- package/dist/data-list-DXjH5wkB.js.map +1 -0
- package/dist/{data-list-spacer-C0YimRXC.js → data-list-spacer-BQ4_YeyT.js} +2 -2
- package/dist/{data-list-spacer-C0YimRXC.js.map → data-list-spacer-BQ4_YeyT.js.map} +1 -1
- package/dist/{data-list-spacer-DUBpzv_H.cjs → data-list-spacer-GIVW2hB1.cjs} +2 -2
- package/dist/{data-list-spacer-DUBpzv_H.cjs.map → data-list-spacer-GIVW2hB1.cjs.map} +1 -1
- package/dist/{data-panel-Bd_Xsz-W.cjs → data-panel-CIu6JToM.cjs} +3 -3
- package/dist/{data-panel-Bd_Xsz-W.cjs.map → data-panel-CIu6JToM.cjs.map} +1 -1
- package/dist/{data-panel-Y7wD0xlR.js → data-panel-CPZ2GuZN.js} +3 -3
- package/dist/{data-panel-Y7wD0xlR.js.map → data-panel-CPZ2GuZN.js.map} +1 -1
- package/dist/{date-time-range-picker-D2g3RU5B.cjs → date-time-range-picker-BCzvSYx3.cjs} +3 -3
- package/dist/{date-time-range-picker-D2g3RU5B.cjs.map → date-time-range-picker-BCzvSYx3.cjs.map} +1 -1
- package/dist/{date-time-range-picker-Cb86jLFc.js → date-time-range-picker-C-t3Kdpk.js} +3 -3
- package/dist/{date-time-range-picker-Cb86jLFc.js.map → date-time-range-picker-C-t3Kdpk.js.map} +1 -1
- package/dist/{dialog-DMOXPT0N.js → dialog-Dtfe1ylw.js} +5 -5
- package/dist/dialog-Dtfe1ylw.js.map +1 -0
- package/dist/{dialog-Bilo4jEU.cjs → dialog-Vvcjm0rZ.cjs} +4 -4
- package/dist/dialog-Vvcjm0rZ.cjs.map +1 -0
- package/dist/domains/auth/components/permission-denied.cjs.js +22 -0
- package/dist/domains/auth/components/permission-denied.cjs.js.map +1 -0
- package/dist/domains/auth/components/permission-denied.d.ts +2 -0
- package/dist/domains/auth/components/permission-denied.es.js +18 -0
- package/dist/domains/auth/components/permission-denied.es.js.map +1 -0
- package/dist/domains/auth/components/session-expired.cjs.js +40 -0
- package/dist/domains/auth/components/session-expired.cjs.js.map +1 -0
- package/dist/domains/auth/components/session-expired.d.ts +2 -0
- package/dist/domains/auth/components/session-expired.es.js +36 -0
- package/dist/domains/auth/components/session-expired.es.js.map +1 -0
- package/dist/domains/auth/services/sso-login.cjs.js +28 -0
- package/dist/domains/auth/services/sso-login.cjs.js.map +1 -0
- package/dist/domains/auth/services/sso-login.d.ts +2 -0
- package/dist/domains/auth/services/sso-login.es.js +24 -0
- package/dist/domains/auth/services/sso-login.es.js.map +1 -0
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js +2 -3
- package/dist/domains/chat/attachments/attachment-preview-dialog.cjs.js.map +1 -1
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js +2 -3
- package/dist/domains/chat/attachments/attachment-preview-dialog.es.js.map +1 -1
- package/dist/domains/chat/attachments/composer-attachment.cjs.js +1 -2
- package/dist/domains/chat/attachments/composer-attachment.cjs.js.map +1 -1
- package/dist/domains/chat/attachments/composer-attachment.es.js +1 -2
- package/dist/domains/chat/attachments/composer-attachment.es.js.map +1 -1
- package/dist/domains/chat/components/badge-wrapper.cjs.js +1 -1
- package/dist/domains/chat/components/badge-wrapper.es.js +1 -1
- package/dist/domains/chat/components/network-choice-metadata-dialog.cjs.js +3 -3
- package/dist/domains/chat/components/network-choice-metadata-dialog.es.js +3 -3
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/reasoning.cjs.js +1 -1
- package/dist/domains/chat/messages/reasoning.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +2 -2
- package/dist/domains/chat/messages/renderers/message-text.es.js +2 -2
- 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/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +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 +2 -2
- package/dist/domains/logs/components/log-details-view.es.js +2 -2
- package/dist/domains/logs/components/logs-error-content.cjs.js +6 -7
- package/dist/domains/logs/components/logs-error-content.cjs.js.map +1 -1
- package/dist/domains/logs/components/logs-error-content.es.js +4 -5
- package/dist/domains/logs/components/logs-error-content.es.js.map +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.cjs.js +1 -1
- package/dist/domains/logs/components/logs-toolbar.es.js +1 -1
- package/dist/domains/logs/components/no-logs-info.cjs.js +2 -2
- package/dist/domains/logs/components/no-logs-info.es.js +2 -2
- 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/kpi-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/latency-card-view.es.js +4 -4
- package/dist/domains/metrics/components/memory-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/memory-card-view.es.js +5 -5
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +2 -2
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +2 -2
- package/dist/domains/metrics/components/scores-card-view.cjs.js +5 -5
- package/dist/domains/metrics/components/scores-card-view.es.js +5 -5
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +4 -4
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +4 -4
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +4 -4
- package/dist/domains/traces/components/no-traces-info.cjs.js +1 -1
- package/dist/domains/traces/components/no-traces-info.es.js +1 -1
- package/dist/domains/traces/components/span-data-panel-view.cjs.js +19 -8
- package/dist/domains/traces/components/span-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-data-panel-view.es.js +20 -9
- package/dist/domains/traces/components/span-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/span-details-view.cjs.js +5 -3
- package/dist/domains/traces/components/span-details-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-details-view.es.js +6 -4
- package/dist/domains/traces/components/span-details-view.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-error-renderer.cjs.js +3 -3
- package/dist/domains/traces/components/span-payload/span-error-renderer.es.js +3 -3
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js +5 -3
- package/dist/domains/traces/components/span-payload/span-input-renderers.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js +5 -3
- package/dist/domains/traces/components/span-payload/span-input-renderers.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js +13 -12
- package/dist/domains/traces/components/span-payload/span-output-renderers.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js +7 -6
- package/dist/domains/traces/components/span-payload/span-output-renderers.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.cjs.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-messages.es.js +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-primitives.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-primitives.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js +79 -0
- package/dist/domains/traces/components/span-payload/span-payload-processor.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-payload/span-payload-processor.d.ts +2 -0
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js +75 -0
- package/dist/domains/traces/components/span-payload/span-payload-processor.es.js.map +1 -0
- package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js +2 -0
- package/dist/domains/traces/components/span-payload/span-payload-registry.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-registry.es.js +2 -1
- package/dist/domains/traces/components/span-payload/span-payload-registry.es.js.map +1 -1
- package/dist/domains/traces/components/span-payload/span-payload-section.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-section.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.cjs.js +2 -2
- package/dist/domains/traces/components/span-payload/span-payload-tool.es.js +2 -2
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js +85 -0
- package/dist/domains/traces/components/span-payload/span-processor-attributes.cjs.js.map +1 -0
- package/dist/domains/traces/components/span-payload/span-processor-attributes.d.ts +2 -0
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js +81 -0
- package/dist/domains/traces/components/span-payload/span-processor-attributes.es.js.map +1 -0
- package/dist/domains/traces/components/span-payload.cjs.js +4 -0
- package/dist/domains/traces/components/span-payload.cjs.js.map +1 -1
- package/dist/domains/traces/components/span-payload.es.js +2 -0
- package/dist/domains/traces/components/span-payload.es.js.map +1 -1
- package/dist/domains/traces/components/span-summary-description.cjs.js +1 -1
- package/dist/domains/traces/components/span-summary-description.es.js +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.cjs.js +1 -1
- package/dist/domains/traces/components/span-timing-hover-card.es.js +1 -1
- package/dist/domains/traces/components/span-token-usage.cjs.js +1 -1
- package/dist/domains/traces/components/span-token-usage.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-details.es.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.cjs.js +4 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-messages.es.js +4 -4
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.cjs.js +1 -1
- package/dist/domains/traces/components/thread-trace/thread-trace-spans.es.js +1 -1
- package/dist/domains/traces/components/trace-columns-menu.cjs.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-columns-menu.es.js +4 -4
- package/dist/domains/traces/components/trace-columns-menu.es.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js +12 -16
- package/dist/domains/traces/components/trace-data-panel-view.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-data-panel-view.es.js +12 -16
- package/dist/domains/traces/components/trace-data-panel-view.es.js.map +1 -1
- package/dist/domains/traces/components/trace-id-button.cjs.js +1 -1
- package/dist/domains/traces/components/trace-id-button.es.js +1 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js +8 -1
- package/dist/domains/traces/components/trace-summary-description.cjs.js.map +1 -1
- package/dist/domains/traces/components/trace-summary-description.es.js +8 -1
- package/dist/domains/traces/components/trace-summary-description.es.js.map +1 -1
- package/dist/domains/traces/components/trace-time-range-chip.cjs.js +2 -2
- package/dist/domains/traces/components/trace-time-range-chip.es.js +2 -2
- package/dist/domains/traces/components/traces-error-content.cjs.js +6 -6
- package/dist/domains/traces/components/traces-error-content.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-error-content.es.js +4 -4
- package/dist/domains/traces/components/traces-error-content.es.js.map +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.cjs.js +1 -1
- package/dist/domains/traces/components/traces-list-mode-toggle.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +2 -2
- package/dist/domains/traces/components/traces-list-view.es.js +2 -2
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js +0 -2
- package/dist/domains/traces/components/traces-page-skeleton.cjs.js.map +1 -1
- package/dist/domains/traces/components/traces-page-skeleton.es.js +0 -2
- package/dist/domains/traces/components/traces-page-skeleton.es.js.map +1 -1
- package/dist/domains/traces/components.cjs.js +4 -2
- package/dist/domains/traces/components.cjs.js.map +1 -1
- package/dist/domains/traces/components.es.js +2 -1
- package/dist/domains/traces/components.es.js.map +1 -1
- package/dist/domains/traces.cjs.js +4 -2
- package/dist/domains/traces.cjs.js.map +1 -1
- package/dist/domains/traces.es.js +2 -1
- package/dist/domains/traces.es.js.map +1 -1
- package/dist/{drawer-CnCsgToD.js → drawer-DZnqDb9H.js} +4 -4
- package/dist/drawer-DZnqDb9H.js.map +1 -0
- package/dist/{drawer-B6Ftum77.cjs → drawer-DpldATv1.cjs} +3 -3
- package/dist/drawer-DpldATv1.cjs.map +1 -0
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
- 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 +2 -3
- package/dist/ee/signals/components/signals-empty-state.cjs.js.map +1 -1
- package/dist/ee/signals/components/signals-empty-state.es.js +2 -3
- package/dist/ee/signals/components/signals-empty-state.es.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.cjs.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-detail.es.js +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js +11 -13
- package/dist/ee/signals/components/trace-intelligence-entity-index.cjs.js.map +1 -1
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js +9 -11
- package/dist/ee/signals/components/trace-intelligence-entity-index.es.js.map +1 -1
- package/dist/ee/signals/examples-pager.cjs.js +1 -3
- package/dist/ee/signals/examples-pager.cjs.js.map +1 -1
- package/dist/ee/signals/examples-pager.es.js +1 -3
- package/dist/ee/signals/examples-pager.es.js.map +1 -1
- package/dist/ee/signals/flow-card.cjs.js +1 -1
- package/dist/ee/signals/flow-card.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 +5 -5
- package/dist/ee/signals/settings/signal-definition-form-dialog.es.js +5 -5
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +2 -2
- package/dist/ee/signals/settings/trace-signal-settings.es.js +2 -2
- package/dist/ee/signals/signals-error-state.cjs.js +2 -2
- package/dist/ee/signals/signals-error-state.cjs.js.map +1 -1
- package/dist/ee/signals/signals-error-state.es.js +2 -2
- package/dist/ee/signals/signals-error-state.es.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.cjs.js +1 -2
- package/dist/ee/signals/snapshot-timeline.cjs.js.map +1 -1
- package/dist/ee/signals/snapshot-timeline.es.js +1 -2
- package/dist/ee/signals/snapshot-timeline.es.js.map +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 +3 -12
- package/dist/ee/signals/trace-insight-view.cjs.js.map +1 -1
- package/dist/ee/signals/trace-insight-view.es.js +3 -12
- package/dist/ee/signals/trace-insight-view.es.js.map +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 +10 -19
- package/dist/ee/topics/components/topic-trace-summary-list.cjs.js.map +1 -1
- package/dist/ee/topics/components/topic-trace-summary-list.es.js +10 -19
- package/dist/ee/topics/components/topic-trace-summary-list.es.js.map +1 -1
- package/dist/{filter-bar-chip-BlvuAPve.js → filter-bar-chip-7X4Aw_WH.js} +3 -3
- package/dist/{filter-bar-chip-BlvuAPve.js.map → filter-bar-chip-7X4Aw_WH.js.map} +1 -1
- package/dist/{filter-bar-chip-B_k_vbip.cjs → filter-bar-chip-BdZHI76J.cjs} +3 -3
- package/dist/{filter-bar-chip-B_k_vbip.cjs.map → filter-bar-chip-BdZHI76J.cjs.map} +1 -1
- package/dist/hooks/use-fluid-hover.cjs.js +2 -4
- package/dist/hooks/use-fluid-hover.cjs.js.map +1 -1
- package/dist/hooks/use-fluid-hover.es.js +2 -4
- package/dist/hooks/use-fluid-hover.es.js.map +1 -1
- package/dist/{input-B1RysHyq.js → input-CHghVv3k.js} +3 -3
- package/dist/input-CHghVv3k.js.map +1 -0
- package/dist/{input-CDLMprJS.cjs → input-bd223EJW.cjs} +2 -2
- package/dist/input-bd223EJW.cjs.map +1 -0
- package/dist/{input-group-DaIV9Orp.cjs → input-group-BfnJ0RIj.cjs} +3 -3
- package/dist/input-group-BfnJ0RIj.cjs.map +1 -0
- package/dist/{input-group-B-pskRGt.js → input-group-Jt7lZsN9.js} +4 -4
- package/dist/input-group-Jt7lZsN9.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-DK2yMiME.js → list-search-FJ1O5F3S.js} +2 -2
- package/dist/{list-search-DK2yMiME.js.map → list-search-FJ1O5F3S.js.map} +1 -1
- package/dist/{list-search-DhReauU5.cjs → list-search-S1mco9Bl.cjs} +2 -2
- package/dist/{list-search-DhReauU5.cjs.map → list-search-S1mco9Bl.cjs.map} +1 -1
- package/dist/{logs-data-list-DgoCLb6k.cjs → logs-data-list-BGJTRyO_.cjs} +2 -2
- package/dist/{logs-data-list-DgoCLb6k.cjs.map → logs-data-list-BGJTRyO_.cjs.map} +1 -1
- package/dist/{logs-data-list-B24gfDle.js → logs-data-list-XU1hCwI5.js} +2 -2
- package/dist/{logs-data-list-B24gfDle.js.map → logs-data-list-XU1hCwI5.js.map} +1 -1
- package/dist/{main-sidebar-Cf5G9iaC.js → main-sidebar-link-active-C9QPj3D6.js} +7 -119
- package/dist/main-sidebar-link-active-C9QPj3D6.js.map +1 -0
- package/dist/{main-sidebar-DYfRxFn4.cjs → main-sidebar-link-active-UEuukSeT.cjs} +5 -118
- package/dist/main-sidebar-link-active-UEuukSeT.cjs.map +1 -0
- package/dist/{markdown-renderer-BUqHHH4y.js → markdown-renderer-BBYgxsXL.js} +3 -3
- package/dist/{markdown-renderer-BUqHHH4y.js.map → markdown-renderer-BBYgxsXL.js.map} +1 -1
- package/dist/{markdown-renderer-CZLwgva-.cjs → markdown-renderer-Du_Zd1T-.cjs} +3 -3
- package/dist/{markdown-renderer-CZLwgva-.cjs.map → markdown-renderer-Du_Zd1T-.cjs.map} +1 -1
- package/dist/{metrics-card-CN4VRQQJ.js → metrics-card-Bzm6m1dy.js} +3 -3
- package/dist/{metrics-card-CN4VRQQJ.js.map → metrics-card-Bzm6m1dy.js.map} +1 -1
- package/dist/{metrics-card-DStXI6yn.cjs → metrics-card-DCCHIG-z.cjs} +3 -3
- package/dist/{metrics-card-DStXI6yn.cjs.map → metrics-card-DCCHIG-z.cjs.map} +1 -1
- package/dist/{metrics-kpi-card-CvOXyEGn.cjs → metrics-kpi-card-Bhb4R4z0.cjs} +2 -2
- package/dist/{metrics-kpi-card-CvOXyEGn.cjs.map → metrics-kpi-card-Bhb4R4z0.cjs.map} +1 -1
- package/dist/{metrics-kpi-card-C-XLN_Us.js → metrics-kpi-card-BrnFhFQm.js} +2 -2
- package/dist/{metrics-kpi-card-C-XLN_Us.js.map → metrics-kpi-card-BrnFhFQm.js.map} +1 -1
- package/dist/new/layout/app-shell.cjs.js +13 -0
- package/dist/new/layout/app-shell.cjs.js.map +1 -1
- package/dist/new/layout/app-shell.es.js +13 -1
- package/dist/new/layout/app-shell.es.js.map +1 -1
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/new/settings.cjs.js +42 -2
- package/dist/new/settings.cjs.js.map +1 -1
- package/dist/new/settings.es.js +43 -3
- package/dist/new/settings.es.js.map +1 -1
- package/dist/new/sidebar.cjs.js +33 -33
- package/dist/new/sidebar.cjs.js.map +1 -1
- package/dist/new/sidebar.es.js +3 -3
- package/dist/new/sidebar.es.js.map +1 -1
- package/dist/{page-header-CSigVThQ.js → page-header-CyXAezlZ.js} +25 -26
- package/dist/page-header-CyXAezlZ.js.map +1 -0
- package/dist/{page-header-DzEEkOca.cjs → page-header-Dk3s3XtC.cjs} +25 -26
- package/dist/page-header-Dk3s3XtC.cjs.map +1 -0
- package/dist/primitives/control-size.cjs.js +1 -2
- package/dist/primitives/control-size.cjs.js.map +1 -1
- package/dist/primitives/control-size.es.js +1 -2
- package/dist/primitives/control-size.es.js.map +1 -1
- package/dist/primitives/form-element.cjs.js +10 -5
- package/dist/primitives/form-element.cjs.js.map +1 -1
- package/dist/primitives/form-element.es.js +8 -5
- package/dist/primitives/form-element.es.js.map +1 -1
- package/dist/primitives/menu-item.cjs.js +1 -1
- package/dist/primitives/menu-item.cjs.js.map +1 -1
- package/dist/primitives/menu-item.es.js +1 -1
- package/dist/primitives/menu-item.es.js.map +1 -1
- package/dist/primitives/raised-surface.cjs.js +8 -3
- package/dist/primitives/raised-surface.cjs.js.map +1 -1
- package/dist/primitives/raised-surface.es.js +8 -4
- package/dist/primitives/raised-surface.es.js.map +1 -1
- package/dist/primitives/trigger-button.cjs.js +1 -1
- package/dist/primitives/trigger-button.es.js +1 -1
- package/dist/{property-filter-applied-uYr-sCdm.js → property-filter-applied-CYDiZtR7.js} +3 -3
- package/dist/{property-filter-applied-uYr-sCdm.js.map → property-filter-applied-CYDiZtR7.js.map} +1 -1
- package/dist/{property-filter-applied-DxSZN3Om.cjs → property-filter-applied-F6cN2lrX.cjs} +3 -3
- package/dist/{property-filter-applied-DxSZN3Om.cjs.map → property-filter-applied-F6cN2lrX.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-Bg9GPPaA.cjs → search-field-block-7-ufp4uG.cjs} +3 -3
- package/dist/{search-field-block-Bg9GPPaA.cjs.map → search-field-block-7-ufp4uG.cjs.map} +1 -1
- package/dist/{search-field-block-B0twxGWI.js → search-field-block-fU3tStmB.js} +3 -3
- package/dist/{search-field-block-B0twxGWI.js.map → search-field-block-fU3tStmB.js.map} +1 -1
- package/dist/{select-65j5NjtJ.cjs → select-BByMAS0L.cjs} +4 -2
- package/dist/select-BByMAS0L.cjs.map +1 -0
- package/dist/{select-BiY-SoMJ.js → select-Dkmx3L5p.js} +4 -2
- package/dist/select-Dkmx3L5p.js.map +1 -0
- package/dist/{select-field-block-D_b9N7od.js → select-field-block-BfiHq9t6.js} +2 -2
- package/dist/{select-field-block-D_b9N7od.js.map → select-field-block-BfiHq9t6.js.map} +1 -1
- package/dist/{select-field-block-CZbN1w__.cjs → select-field-block-DJo2cX9Y.cjs} +2 -2
- package/dist/{select-field-block-CZbN1w__.cjs.map → select-field-block-DJo2cX9Y.cjs.map} +1 -1
- package/dist/{span-payload-primitives-DlIOpCII.js → span-payload-primitives-CzLh6axt.js} +3 -3
- package/dist/{span-payload-primitives-DlIOpCII.js.map → span-payload-primitives-CzLh6axt.js.map} +1 -1
- package/dist/{span-payload-primitives-BjBTICfq.cjs → span-payload-primitives-KEXwIaeZ.cjs} +3 -3
- package/dist/{span-payload-primitives-BjBTICfq.cjs.map → span-payload-primitives-KEXwIaeZ.cjs.map} +1 -1
- package/dist/src/domains/auth/components/permission-denied.d.ts +6 -0
- package/dist/src/{ds/components/PermissionDenied → domains/auth/components}/permission-denied.stories.d.ts +1 -3
- package/dist/src/domains/auth/components/session-expired.d.ts +5 -0
- package/dist/src/{ds/components/SessionExpired → domains/auth/components}/session-expired.stories.d.ts +1 -2
- package/dist/src/domains/auth/services/sso-login.d.ts +7 -0
- package/dist/src/domains/logs/components/logs-error-content.d.ts +2 -2
- package/dist/src/domains/traces/components/index.d.ts +0 -1
- package/dist/src/domains/traces/components/span-payload/index.d.ts +2 -0
- package/dist/src/domains/traces/components/span-payload/span-payload-processor.d.ts +10 -0
- package/dist/src/domains/traces/components/span-payload/span-payload-registry.d.ts +1 -0
- package/dist/src/domains/traces/components/span-payload/span-payload.stories.d.ts +2 -0
- package/dist/src/domains/traces/components/span-payload/span-processor-attributes.d.ts +10 -0
- package/dist/src/domains/traces/components/trace-data-panel-view.stories.d.ts +94 -0
- package/dist/src/domains/traces/components/trace-summary-description.d.ts +1 -0
- package/dist/src/domains/traces/components/traces-error-content.d.ts +2 -2
- package/dist/src/ds/components/Button/Button.d.ts +1 -1
- package/dist/src/ds/components/ButtonsGroup/buttons-group.stories.d.ts +2 -2
- package/dist/src/ds/components/Columns/column-root.d.ts +1 -3
- package/dist/src/ds/components/Columns/columns.stories.d.ts +0 -1
- package/dist/src/ds/components/Columns/index.d.ts +0 -1
- package/dist/src/ds/components/Combobox/combobox-styles.d.ts +1 -2
- package/dist/src/ds/components/Combobox/combobox.d.ts +3 -0
- package/dist/src/ds/components/Combobox/combobox.stories.d.ts +1 -0
- package/dist/src/ds/components/DataKeysAndValues/data-keys-and-values-root.d.ts +1 -2
- package/dist/src/ds/components/DataKeysAndValues/data-keys-and-values.stories.d.ts +1 -2
- package/dist/src/ds/components/EmptyState/EmptyState.d.ts +6 -2
- package/dist/src/ds/components/EmptyState/empty-state.stories.d.ts +1 -0
- package/dist/src/ds/components/PageLayout/page-layout.d.ts +8 -3
- package/dist/src/ds/components/PageLayout/page-layout.stories.d.ts +3 -0
- package/dist/src/ds/components/Select/select.d.ts +3 -4
- package/dist/src/ds/components/Select/select.stories.d.ts +2 -2
- package/dist/src/ds/new/layout/app-shell/index.d.ts +1 -0
- package/dist/src/ds/new/layout/app-shell/main-card.d.ts +5 -0
- package/dist/src/ds/new/settings/index.d.ts +1 -1
- package/dist/src/ds/new/settings/settings.stories.d.ts +2 -0
- package/dist/src/ds/primitives/control-size.d.ts +1 -1
- package/dist/src/ds/primitives/fields-on-surfaces.stories.d.ts +6 -0
- package/dist/src/ds/primitives/form-element.d.ts +3 -1
- package/dist/src/ds/primitives/raised-surface.d.ts +4 -31
- package/dist/src/ds/tokens/colors.d.ts +3 -0
- package/dist/src/ds/tokens/shadows.d.ts +1 -0
- package/dist/src/{ds/components/IntegrationDialog/integration-dialog.stories.d.ts → hooks/stories/browser/use-autoscroll.stories.d.ts} +6 -8
- package/dist/src/hooks/stories/browser/use-copy-to-clipboard.stories.d.ts +22 -0
- package/dist/src/hooks/stories/browser/use-fluid-hover.stories.d.ts +17 -0
- package/dist/src/hooks/stories/browser/use-in-view.stories.d.ts +17 -0
- package/dist/src/hooks/stories/browser/use-is-apple-platform.stories.d.ts +17 -0
- package/dist/src/hooks/stories/browser/use-is-mobile.stories.d.ts +32 -0
- package/dist/src/hooks/stories/browser/use-isomorphic-layout-effect.stories.d.ts +32 -0
- package/dist/src/hooks/stories/browser/use-keyboard-shortcut-label.stories.d.ts +22 -0
- package/dist/src/hooks/stories/browser/use-register-fluid-hover-item.stories.d.ts +17 -0
- package/dist/src/hooks/stories/environment/use-custom-environment-variables-editor.stories.d.ts +17 -0
- package/dist/src/hooks/stories/environment/use-environment-variables-editor.stories.d.ts +17 -0
- package/dist/src/hooks/stories/state/use-debounced-value.stories.d.ts +32 -0
- package/dist/src/hooks/stories/state/use-expiring-local-storage-state.stories.d.ts +17 -0
- package/dist/src/hooks/stories/state/use-local-storage-state.stories.d.ts +17 -0
- package/dist/src/hooks/stories/text/use-is-clamped.stories.d.ts +17 -0
- package/dist/src/hooks/stories/text/use-measured-auto-height.stories.d.ts +17 -0
- package/dist/src/hooks/stories/text/use-scroll-to-first-highlight.stories.d.ts +17 -0
- package/dist/src/hooks/stories/text/use-text-highlight.stories.d.ts +17 -0
- package/dist/src/lib/keyboard/use-keyboard-scope-depth.stories.d.ts +17 -0
- package/dist/src/lib/keyboard/use-keyboard-shortcuts-context.stories.d.ts +17 -0
- package/dist/src/lib/keyboard/use-table-keydown.stories.d.ts +15 -0
- package/dist/style.css +147 -107
- package/dist/{tabs-content-DMrffE9p.js → tabs-content-7ODUUdQ0.js} +2 -2
- package/dist/{tabs-content-DMrffE9p.js.map → tabs-content-7ODUUdQ0.js.map} +1 -1
- package/dist/{tabs-content-CuUlcS67.cjs → tabs-content-DlCJoQUW.cjs} +2 -2
- package/dist/{tabs-content-CuUlcS67.cjs.map → tabs-content-DlCJoQUW.cjs.map} +1 -1
- package/dist/{tabs-root-DrK1hxeV.cjs → tabs-root-COCL6jcx.cjs} +2 -2
- package/dist/{tabs-root-DrK1hxeV.cjs.map → tabs-root-COCL6jcx.cjs.map} +1 -1
- package/dist/{tabs-root-B2sdkQ3A.js → tabs-root-UNPxoGhW.js} +2 -2
- package/dist/{tabs-root-B2sdkQ3A.js.map → tabs-root-UNPxoGhW.js.map} +1 -1
- package/dist/{tabs-tab-ClmulJmM.cjs → tabs-tab-DFmRMdi3.cjs} +2 -2
- package/dist/{tabs-tab-ClmulJmM.cjs.map → tabs-tab-DFmRMdi3.cjs.map} +1 -1
- package/dist/{tabs-tab-u6LS5twu.js → tabs-tab-DluwCnDF.js} +2 -2
- package/dist/{tabs-tab-u6LS5twu.js.map → tabs-tab-DluwCnDF.js.map} +1 -1
- package/dist/{text-field-block-Cihf0IRw.js → text-field-block-DGIM1i3Z.js} +2 -2
- package/dist/{text-field-block-Cihf0IRw.js.map → text-field-block-DGIM1i3Z.js.map} +1 -1
- package/dist/{text-field-block-BmWGMw3a.cjs → text-field-block-DePCgDOh.cjs} +2 -2
- package/dist/{text-field-block-BmWGMw3a.cjs.map → text-field-block-DePCgDOh.cjs.map} +1 -1
- package/dist/{textarea-DdnzLrI9.js → textarea-B6wvS_CQ.js} +3 -3
- package/dist/textarea-B6wvS_CQ.js.map +1 -0
- package/dist/{textarea-5b6XcMrq.cjs → textarea-gUBUqpol.cjs} +2 -2
- package/dist/textarea-gUBUqpol.cjs.map +1 -0
- package/dist/{time-picker-PXFCgAuR.cjs → time-picker-BNhe7Zpb.cjs} +2 -2
- package/dist/{time-picker-PXFCgAuR.cjs.map → time-picker-BNhe7Zpb.cjs.map} +1 -1
- package/dist/{time-picker-DMroqHbw.js → time-picker-kvCsW78V.js} +2 -2
- package/dist/{time-picker-DMroqHbw.js.map → time-picker-kvCsW78V.js.map} +1 -1
- package/dist/tokens.cjs.js +4 -0
- package/dist/tokens.cjs.js.map +1 -1
- package/dist/tokens.es.js +4 -0
- package/dist/tokens.es.js.map +1 -1
- package/dist/{tool-approval-DzOGIKRh.js → tool-approval-DXUFyrSl.js} +2 -2
- package/dist/{tool-approval-DzOGIKRh.js.map → tool-approval-DXUFyrSl.js.map} +1 -1
- package/dist/{tool-approval-DYX_ZNWc.cjs → tool-approval-LIy1nZZJ.cjs} +2 -2
- package/dist/{tool-approval-DYX_ZNWc.cjs.map → tool-approval-LIy1nZZJ.cjs.map} +1 -1
- package/dist/{tool-call-HNNRcirD.js → tool-call-Bs-9Cah5.js} +2 -2
- package/dist/{tool-call-HNNRcirD.js.map → tool-call-Bs-9Cah5.js.map} +1 -1
- package/dist/{tool-call-vZeZ5XT5.cjs → tool-call-C0JeHe8Z.cjs} +2 -2
- package/dist/{tool-call-vZeZ5XT5.cjs.map → tool-call-C0JeHe8Z.cjs.map} +1 -1
- package/dist/{traces-data-list-DHrC158-.js → traces-data-list-Cjy5a-1f.js} +3 -3
- package/dist/{traces-data-list-DHrC158-.js.map → traces-data-list-Cjy5a-1f.js.map} +1 -1
- package/dist/{traces-data-list-DNOtQze4.cjs → traces-data-list-DLeKSbaZ.cjs} +3 -3
- package/dist/{traces-data-list-DNOtQze4.cjs.map → traces-data-list-DLeKSbaZ.cjs.map} +1 -1
- package/package.json +13 -13
- package/theme/surfaces.css +8 -0
- package/theme.css +7 -0
- package/dist/Button-KUj0U-5I.js.map +0 -1
- package/dist/Button-MMZPEb_q.cjs.map +0 -1
- package/dist/Card-B_buJ5yF.js.map +0 -1
- package/dist/Card-DwGasv0K.cjs.map +0 -1
- package/dist/EmptyState-B6cyZw6m.js.map +0 -1
- package/dist/EmptyState-DiSP6UIy.cjs.map +0 -1
- package/dist/ErrorState-B0839u-q.cjs +0 -21
- package/dist/ErrorState-B0839u-q.cjs.map +0 -1
- package/dist/ErrorState-HyRJdaA2.js +0 -19
- package/dist/ErrorState-HyRJdaA2.js.map +0 -1
- package/dist/PermissionDenied-CTqnE57B.js +0 -27
- package/dist/PermissionDenied-CTqnE57B.js.map +0 -1
- package/dist/PermissionDenied-fdVmTjjf.cjs +0 -29
- package/dist/PermissionDenied-fdVmTjjf.cjs.map +0 -1
- package/dist/SessionExpired-B9e1Kx4I.js +0 -44
- package/dist/SessionExpired-B9e1Kx4I.js.map +0 -1
- package/dist/SessionExpired-GSQkcV9f.cjs +0 -46
- package/dist/SessionExpired-GSQkcV9f.cjs.map +0 -1
- package/dist/code-editor-BQTDma1I.js.map +0 -1
- package/dist/code-editor-BfoJXq9l.cjs.map +0 -1
- package/dist/combobox-Bn_uyUSB.cjs.map +0 -1
- package/dist/combobox-Cykfy5wc.js.map +0 -1
- package/dist/combobox-styles-CSsS2LEx.cjs.map +0 -1
- package/dist/combobox-styles-iuJUkJEQ.js.map +0 -1
- package/dist/components/DataFilter.cjs.js +0 -173
- package/dist/components/DataFilter.cjs.js.map +0 -1
- package/dist/components/DataFilter.d.ts +0 -2
- package/dist/components/DataFilter.es.js +0 -169
- package/dist/components/DataFilter.es.js.map +0 -1
- package/dist/components/ErrorState.cjs.js +0 -10
- package/dist/components/ErrorState.cjs.js.map +0 -1
- package/dist/components/ErrorState.d.ts +0 -2
- package/dist/components/ErrorState.es.js +0 -2
- package/dist/components/ErrorState.es.js.map +0 -1
- package/dist/components/IntegrationDialog.cjs.js +0 -104
- package/dist/components/IntegrationDialog.cjs.js.map +0 -1
- package/dist/components/IntegrationDialog.d.ts +0 -2
- package/dist/components/IntegrationDialog.es.js +0 -100
- package/dist/components/IntegrationDialog.es.js.map +0 -1
- package/dist/components/PermissionDenied.cjs.js +0 -10
- package/dist/components/PermissionDenied.cjs.js.map +0 -1
- package/dist/components/PermissionDenied.d.ts +0 -2
- package/dist/components/PermissionDenied.es.js +0 -2
- package/dist/components/PermissionDenied.es.js.map +0 -1
- package/dist/components/Sections.cjs.js +0 -13
- package/dist/components/Sections.cjs.js.map +0 -1
- package/dist/components/Sections.d.ts +0 -2
- package/dist/components/Sections.es.js +0 -9
- package/dist/components/Sections.es.js.map +0 -1
- package/dist/components/SessionExpired.cjs.js +0 -10
- package/dist/components/SessionExpired.cjs.js.map +0 -1
- package/dist/components/SessionExpired.d.ts +0 -2
- package/dist/components/SessionExpired.es.js +0 -2
- package/dist/components/SessionExpired.es.js.map +0 -1
- package/dist/components/SettingsLayout.cjs.js +0 -10
- package/dist/components/SettingsLayout.cjs.js.map +0 -1
- package/dist/components/SettingsLayout.d.ts +0 -2
- package/dist/components/SettingsLayout.es.js +0 -2
- package/dist/components/SettingsLayout.es.js.map +0 -1
- package/dist/data-keys-and-values-BduKvvC5.cjs.map +0 -1
- package/dist/data-keys-and-values-DhC4U4Yl.js.map +0 -1
- package/dist/data-list-Cn0Ls4l2.js.map +0 -1
- package/dist/data-list-DSbuTWLI.cjs.map +0 -1
- package/dist/dialog-Bilo4jEU.cjs.map +0 -1
- package/dist/dialog-DMOXPT0N.js.map +0 -1
- package/dist/domains/traces/components/trace-keys-and-values.cjs.js +0 -70
- package/dist/domains/traces/components/trace-keys-and-values.cjs.js.map +0 -1
- package/dist/domains/traces/components/trace-keys-and-values.d.ts +0 -2
- package/dist/domains/traces/components/trace-keys-and-values.es.js +0 -66
- package/dist/domains/traces/components/trace-keys-and-values.es.js.map +0 -1
- package/dist/drawer-B6Ftum77.cjs.map +0 -1
- package/dist/drawer-CnCsgToD.js.map +0 -1
- package/dist/input-B1RysHyq.js.map +0 -1
- package/dist/input-CDLMprJS.cjs.map +0 -1
- package/dist/input-group-B-pskRGt.js.map +0 -1
- package/dist/input-group-DaIV9Orp.cjs.map +0 -1
- package/dist/main-sidebar-Cf5G9iaC.js.map +0 -1
- package/dist/main-sidebar-DYfRxFn4.cjs.map +0 -1
- package/dist/page-header-CSigVThQ.js.map +0 -1
- package/dist/page-header-DzEEkOca.cjs.map +0 -1
- package/dist/select-65j5NjtJ.cjs.map +0 -1
- package/dist/select-BiY-SoMJ.js.map +0 -1
- package/dist/settings-layout-BGvMSClL.cjs +0 -49
- package/dist/settings-layout-BGvMSClL.cjs.map +0 -1
- package/dist/settings-layout-DA-JWqW3.js +0 -47
- package/dist/settings-layout-DA-JWqW3.js.map +0 -1
- package/dist/src/domains/traces/components/trace-keys-and-values.d.ts +0 -24
- package/dist/src/domains/traces/components/trace-keys-and-values.stories.d.ts +0 -28
- package/dist/src/ds/components/Columns/multi-column.d.ts +0 -7
- package/dist/src/ds/components/DataFilter/index.d.ts +0 -2
- package/dist/src/ds/components/DataFilter/select-data-filter.d.ts +0 -40
- package/dist/src/ds/components/DataFilter/select-data-filter.stories.d.ts +0 -8
- package/dist/src/ds/components/ErrorState/ErrorState.d.ts +0 -8
- package/dist/src/ds/components/ErrorState/error-state.stories.d.ts +0 -8
- package/dist/src/ds/components/ErrorState/index.d.ts +0 -2
- package/dist/src/ds/components/IntegrationDialog/__fixtures__/integrations-catalog.d.ts +0 -2
- package/dist/src/ds/components/IntegrationDialog/index.d.ts +0 -2
- package/dist/src/ds/components/IntegrationDialog/integration-dialog.d.ts +0 -28
- package/dist/src/ds/components/PermissionDenied/PermissionDenied.d.ts +0 -16
- package/dist/src/ds/components/PermissionDenied/index.d.ts +0 -2
- package/dist/src/ds/components/Sections/index.d.ts +0 -1
- package/dist/src/ds/components/Sections/sections.d.ts +0 -5
- package/dist/src/ds/components/Sections/sections.stories.d.ts +0 -8
- package/dist/src/ds/components/SessionExpired/SessionExpired.d.ts +0 -11
- package/dist/src/ds/components/SessionExpired/index.d.ts +0 -2
- package/dist/src/ds/components/SettingsLayout/index.d.ts +0 -1
- package/dist/src/ds/components/SettingsLayout/settings-layout.stories.d.ts +0 -52
- package/dist/textarea-5b6XcMrq.cjs.map +0 -1
- package/dist/textarea-DdnzLrI9.js.map +0 -1
- /package/dist/src/ds/{components/SettingsLayout → new/settings}/settings-layout.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-bar-chip-BlvuAPve.js","sources":["../src/ds/components/FilterBar/filter-bar-tree.ts","../src/ds/components/FilterBar/filter-bar-context.tsx","../src/ds/components/FilterBar/filter-bar-option-list.tsx","../src/ds/components/FilterBar/match-query.ts","../src/ds/components/FilterBar/use-value-suggestions.ts","../src/ds/components/FilterBar/use-value-step.ts","../src/ds/components/FilterBar/filter-bar-chip.tsx"],"sourcesContent":["import type { FilterBarExpression, FilterBarGroup, FilterBarItem, FilterBarLogic, FilterBarNode } from './types';\nimport { isFilterBarGroup } from './types';\n\nexport type FilterBarValueInput = FilterBarItem[] | FilterBarExpression;\n\nexport const ROOT_GROUP_ID = 'root';\n\nexport const normalize = (value: FilterBarValueInput): FilterBarExpression =>\n Array.isArray(value) ? { logic: 'and', nodes: value } : value;\n\n/** Hands back the shape the consumer gave us: flat arrays only ever contain items. */\nexport const denormalize = (expr: FilterBarExpression, flat: boolean): FilterBarValueInput =>\n flat ? expr.nodes.filter((node): node is FilterBarItem => !isFilterBarGroup(node)) : expr;\n\nexport type FlatEntry = { item: FilterBarItem; groupId?: string };\n\n/**\n * Items in document order (pre-order, depth-first), each tagged with the group it lives\n * in. A group's leaves sit where its advanced chip sits in the bar, so arrow navigation\n * walks the bar left to right.\n */\nexport const flattenItems = (expr: FilterBarExpression): FlatEntry[] => {\n const out: FlatEntry[] = [];\n const walk = (nodes: FilterBarNode[], groupId: string | undefined) => {\n for (const node of nodes) {\n if (isFilterBarGroup(node)) walk(node.nodes, node.id);\n else out.push(groupId ? { item: node, groupId } : { item: node });\n }\n };\n walk(expr.nodes, undefined);\n return out;\n};\n\nconst findGroupIn = (nodes: FilterBarNode[], groupId: string): FilterBarGroup | undefined => {\n for (const node of nodes) {\n if (!isFilterBarGroup(node)) continue;\n if (node.id === groupId) return node;\n const nested = findGroupIn(node.nodes, groupId);\n if (nested) return nested;\n }\n return undefined;\n};\n\nexport const findGroup = (expr: FilterBarExpression, groupId: string): FilterBarGroup | undefined =>\n findGroupIn(expr.nodes, groupId);\n\nexport const findItem = (expr: FilterBarExpression, itemId: string): FlatEntry | undefined =>\n flattenItems(expr).find(entry => entry.item.id === itemId);\n\n/** Nesting level of a group: root-level groups are at depth 1; `0` when not found. */\nexport const groupDepth = (expr: FilterBarExpression, groupId: string): number => {\n const walk = (nodes: FilterBarNode[], depth: number): number => {\n for (const node of nodes) {\n if (!isFilterBarGroup(node)) continue;\n if (node.id === groupId) return depth;\n const nested = walk(node.nodes, depth + 1);\n if (nested) return nested;\n }\n return 0;\n };\n return walk(expr.nodes, 1);\n};\n\n/** Number of leaf conditions under a group, at any depth. */\nexport const countLeaves = (group: FilterBarGroup): number =>\n group.nodes.reduce((sum, node) => sum + (isFilterBarGroup(node) ? countLeaves(node) : 1), 0);\n\n/** Ids of a group and every node below it. */\nexport const collectIds = (group: FilterBarGroup): string[] => [\n group.id,\n ...group.nodes.flatMap(node => (isFilterBarGroup(node) ? collectIds(node) : [node.id])),\n];\n\nconst mapGroup = (\n nodes: FilterBarNode[],\n groupId: string,\n fn: (group: FilterBarGroup) => FilterBarGroup,\n): FilterBarNode[] =>\n nodes.map(node => {\n if (!isFilterBarGroup(node)) return node;\n return node.id === groupId ? fn(node) : { ...node, nodes: mapGroup(node.nodes, groupId, fn) };\n });\n\nconst mapItems = (nodes: FilterBarNode[], fn: (item: FilterBarItem) => FilterBarItem): FilterBarNode[] =>\n nodes.map(node => (isFilterBarGroup(node) ? { ...node, nodes: mapItems(node.nodes, fn) } : fn(node)));\n\nconst filterNodes = (nodes: FilterBarNode[], keep: (node: FilterBarNode) => boolean): FilterBarNode[] =>\n nodes.filter(keep).map(node => (isFilterBarGroup(node) ? { ...node, nodes: filterNodes(node.nodes, keep) } : node));\n\nexport const updateItem = (\n expr: FilterBarExpression,\n itemId: string,\n patch: Partial<Omit<FilterBarItem, 'id'>>,\n): FilterBarExpression => ({\n ...expr,\n nodes: mapItems(expr.nodes, item => (item.id === itemId ? { ...item, ...patch } : item)),\n});\n\n/** Removes an item or a group by id at any depth. Groups left empty are kept (see `pruneEmptyGroups`). */\nexport const removeNode = (expr: FilterBarExpression, id: string): FilterBarExpression => ({\n ...expr,\n nodes: filterNodes(expr.nodes, node => node.id !== id),\n});\n\nexport const removeNodes = (expr: FilterBarExpression, ids: Iterable<string>): FilterBarExpression => {\n const drop = new Set(ids);\n return { ...expr, nodes: filterNodes(expr.nodes, node => !drop.has(node.id)) };\n};\n\nconst pruneNodes = (nodes: FilterBarNode[]): FilterBarNode[] =>\n nodes.flatMap((node): FilterBarNode[] => {\n if (!isFilterBarGroup(node)) return [node];\n const pruned = pruneNodes(node.nodes);\n return pruned.length === 0 ? [] : [{ ...node, nodes: pruned }];\n });\n\n/** Drops every group with no leaf left, bottom-up. */\nexport const pruneEmptyGroups = (expr: FilterBarExpression): FilterBarExpression => ({\n ...expr,\n nodes: pruneNodes(expr.nodes),\n});\n\nexport const insertItem = (\n expr: FilterBarExpression,\n groupId: string | undefined,\n item: FilterBarItem,\n): FilterBarExpression => {\n if (!groupId || groupId === ROOT_GROUP_ID) return { ...expr, nodes: [...expr.nodes, item] };\n return { ...expr, nodes: mapGroup(expr.nodes, groupId, group => ({ ...group, nodes: [...group.nodes, item] })) };\n};\n\nexport const setGroupLogic = (\n expr: FilterBarExpression,\n groupId: string,\n logic: FilterBarLogic,\n): FilterBarExpression => {\n if (groupId === ROOT_GROUP_ID) return { ...expr, logic };\n return { ...expr, nodes: mapGroup(expr.nodes, groupId, group => ({ ...group, logic })) };\n};\n\n/** Appends a group to the root, or inside `parentId`. */\nexport const createGroup = (\n expr: FilterBarExpression,\n parentId: string | undefined,\n group: FilterBarGroup,\n): FilterBarExpression => {\n if (!parentId || parentId === ROOT_GROUP_ID) return { ...expr, nodes: [...expr.nodes, group] };\n return { ...expr, nodes: mapGroup(expr.nodes, parentId, parent => ({ ...parent, nodes: [...parent.nodes, group] })) };\n};\n\n/** Drops removable items at any depth and every group that ends up empty; pinned items stay. */\nexport const clearRemovable = (expr: FilterBarExpression, pinned: ReadonlySet<string>): FilterBarExpression =>\n pruneEmptyGroups({\n ...expr,\n nodes: filterNodes(expr.nodes, node => isFilterBarGroup(node) || pinned.has(node.id)),\n });\n","/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport {\n clearRemovable,\n collectIds,\n createGroup,\n denormalize,\n findGroup,\n flattenItems,\n groupDepth,\n insertItem,\n normalize,\n pruneEmptyGroups,\n removeNode,\n setGroupLogic,\n updateItem as updateTreeItem,\n} from './filter-bar-tree';\nimport type { FilterBarValueInput } from './filter-bar-tree';\nimport { isFilterBarGroup } from './types';\nimport type {\n DraftStage,\n FilterBarCommit,\n FilterBarDraft,\n FilterBarExpression,\n FilterBarField,\n FilterBarGroup,\n FilterBarItem,\n FilterBarLogic,\n FilterBarNode,\n FilterBarOperator,\n FilterBarSegment,\n FilterBarValue,\n} from './types';\n\ntype SegmentKey = `${string}:${FilterBarSegment}`;\n\nconst SEGMENTS_LEFT_TO_RIGHT: FilterBarSegment[] = ['field', 'operator', 'value', 'remove'];\nconst SEGMENTS_RIGHT_TO_LEFT: FilterBarSegment[] = [...SEGMENTS_LEFT_TO_RIGHT].reverse();\n\n/** Default nesting bound for advanced-filter groups (root-level group = depth 1). */\nexport const DEFAULT_MAX_GROUP_DEPTH = 3;\n\n/**\n * Marks a focus scope: the bar and each open advanced-filter popover. Arrow navigation\n * never crosses scopes, so ←/→ inside a popover cannot land back in the bar.\n */\nexport const FILTER_BAR_SCOPE_ATTR = 'data-filter-bar-scope';\n\nconst scopeOf = (el: Element | null | undefined) => el?.closest(`[${FILTER_BAR_SCOPE_ATTR}]`) ?? null;\n\nconst stageOf = (draft: FilterBarDraft | null): DraftStage => {\n if (!draft) return 'none';\n return draft.operatorId ? 'operator' : 'field';\n};\n\nexport type FilterBarContextValue = {\n fields: FilterBarField[];\n operators: FilterBarOperator[];\n /** Every rendered item in visual order (groups flattened), including leaving ones. */\n items: FilterBarItem[];\n /** The rendered tree, including the pending commit and leaving nodes. */\n expression: FilterBarExpression;\n /** False when the consumer passed a flat `FilterBarItem[]`: no groups are offered. */\n groupsEnabled: boolean;\n /** Deepest allowed group nesting (root-level group = 1). */\n maxDepth: number;\n /** Filter under construction in the input, once a field is picked; `null` otherwise. */\n draft: FilterBarDraft | null;\n /** Progress or reset the draft. Its id is assigned on first field pick and kept afterwards. */\n setDraft: (next: Omit<FilterBarDraft, 'id' | 'from' | 'groupId'> | null) => void;\n /** Append an item for the draft, reusing its id so the draft chip becomes the item's chip. */\n commitDraft: (next: Required<Omit<FilterBarDraft, 'id' | 'from' | 'groupId'>>, value: FilterBarValue) => void;\n /** The draft that just became an item, until its chip has glinted or the bar moves on. */\n lastCommit: FilterBarCommit | null;\n settleCommit: () => void;\n updateItem: (id: string, patch: Partial<Omit<FilterBarItem, 'id'>>) => void;\n /** Removes a leaf. Its group stays, even empty, until the popover closes (see `setOpenGroup`). */\n removeItem: (id: string) => void;\n /** Ids of removed items and groups still rendered while their chip plays its exit animation. */\n leaving: ReadonlySet<string>;\n /** Called by a leaving chip once its exit animation has finished (or when nothing animates). */\n settleRemove: (id: string) => void;\n /** Removes every removable item (chips rendered with `removable={false}` stay) and every group left empty. */\n clear: () => void;\n /** Whether at least one item can be removed, i.e. whether Clear has anything to do. */\n hasRemovableItems: boolean;\n /** Called by chips so `clear` and the Clear button know which items are pinned. */\n registerNonRemovable: (itemId: string, nonRemovable: boolean) => void;\n /** Appends an empty group to the root (`undefined`) or inside `parentId`, and points the input at it. */\n addGroup: (parentId: string | undefined, logic: FilterBarLogic) => string;\n /** Removes a group and everything below it. */\n removeGroup: (groupId: string) => void;\n setLogic: (groupId: string, logic: FilterBarLogic) => void;\n /** Nesting level of a group (root-level = 1); 0 when unknown. */\n getGroupDepth: (groupId: string) => number;\n /** Root group whose advanced-filter popover is open. */\n openGroupId: string | null;\n /** Open a root group's popover, or close it with `null` (empty groups are pruned on close). */\n setOpenGroup: (groupId: string | null) => void;\n /** Group the input commits into; `undefined` = root. */\n inputTarget: string | undefined;\n /** Point the input at a group (or back at the root with `undefined`) and focus it. */\n openGroupInput: (groupId: string | undefined) => void;\n getField: (fieldId: string) => FilterBarField | undefined;\n getOperator: (operatorId: string) => FilterBarOperator | undefined;\n /** Operators allowed for a field (`field.operators` or every root operator). */\n getFieldOperators: (field: FilterBarField) => FilterBarOperator[];\n registerSegment: (itemId: string, segment: FilterBarSegment, el: HTMLElement | null) => void;\n registerInput: (el: HTMLInputElement | null) => void;\n /**\n * Focus a segment of the nearest editable chip starting at `fromIndex` and\n * walking in `direction` (read-only chips register no segments and are skipped).\n * Never leaves the focus scope of the currently focused element. Returns false if\n * nothing was focused.\n */\n focusChip: (fromIndex: number, direction: -1 | 1, segment: FilterBarSegment) => boolean;\n focusInput: () => void;\n /** Called by chips to move focus after a removal. */\n focusAfterRemove: (removedIndex: number) => void;\n announce: (message: string) => void;\n announcement: string;\n ariaLabel: string;\n};\n\nconst FilterBarContext = createContext<FilterBarContextValue | null>(null);\n\nexport function useFilterBarContext(): FilterBarContextValue {\n const ctx = useContext(FilterBarContext);\n if (!ctx) throw new Error('FilterBar compound components must be rendered inside <FilterBar>.');\n return ctx;\n}\n\nlet idCounter = 0;\nexport function createFilterId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n idCounter += 1;\n return `filter-${idCounter}`;\n}\n\nexport function emptyValueFor(operator: FilterBarOperator | undefined): string | string[] {\n return operator?.arity === 'many' ? [] : '';\n}\n\nexport type FilterBarProviderProps = {\n fields: FilterBarField[];\n operators: FilterBarOperator[];\n value: FilterBarValueInput;\n /** Receives the same shape as `value` (method syntax so flat-only handlers stay assignable). */\n onValueChange(value: FilterBarValueInput): void;\n /** Derives ids for root-level items only; items inside groups always get a random id\n * because a group may hold several conditions on the same field. */\n createItemId?: (fieldId: string) => string;\n /** Deepest allowed group nesting (root-level group = 1). Defaults to 3. */\n maxDepth?: number;\n ariaLabel: string;\n children: ReactNode;\n};\n\nconst idsOf = (nodes: FilterBarNode[], out = new Set<string>()): Set<string> => {\n for (const node of nodes) {\n out.add(node.id);\n if (isFilterBarGroup(node)) idsOf(node.nodes, out);\n }\n return out;\n};\n\n/**\n * The previously rendered tree with the consumer's new `value` folded in: nodes still\n * present take their new version (in their old position), leaving nodes stay where they\n * were, and nodes the consumer added are appended. Once nothing is leaving the result is\n * exactly `next`, so consumer reorders are only deferred, never lost.\n */\nconst mergeNodes = (prev: FilterBarNode[], next: FilterBarNode[], leaving: ReadonlySet<string>): FilterBarNode[] => {\n const nextById = new Map(next.map(node => [node.id, node]));\n const seen = new Set<string>();\n const out: FilterBarNode[] = [];\n for (const old of prev) {\n const fresh = nextById.get(old.id);\n if (fresh) {\n seen.add(old.id);\n out.push(\n isFilterBarGroup(fresh) && isFilterBarGroup(old)\n ? { ...fresh, nodes: mergeNodes(old.nodes, fresh.nodes, leaving) }\n : fresh,\n );\n } else if (leaving.has(old.id)) {\n out.push(old);\n }\n }\n for (const node of next) if (!seen.has(node.id)) out.push(node);\n return out;\n};\n\nexport function FilterBarProvider({\n fields,\n operators,\n value,\n onValueChange,\n createItemId,\n maxDepth = DEFAULT_MAX_GROUP_DEPTH,\n ariaLabel,\n children,\n}: FilterBarProviderProps) {\n const segments = useRef(new Map<SegmentKey, HTMLElement>());\n const inputRef = useRef<HTMLInputElement | null>(null);\n const flat = Array.isArray(value);\n const expression = useMemo(() => normalize(value), [value]);\n const exprRef = useRef(expression);\n exprRef.current = expression;\n const [announcement, setAnnouncement] = useState('');\n const [nonRemovableIds, setNonRemovableIds] = useState<ReadonlySet<string>>(() => new Set());\n const [inputTarget, setInputTarget] = useState<string | undefined>(undefined);\n const [openGroupId, setOpenGroupId] = useState<string | null>(null);\n\n const emit = useCallback(\n (next: FilterBarExpression) => onValueChange(denormalize(next, flat)),\n [onValueChange, flat],\n );\n\n const getField = useCallback((fieldId: string) => fields.find(f => f.id === fieldId), [fields]);\n const getOperator = useCallback((operatorId: string) => operators.find(o => o.id === operatorId), [operators]);\n const getFieldOperators = useCallback(\n (field: FilterBarField) => {\n if (!field.operators) return operators;\n const allowed = new Set(field.operators);\n return operators.filter(o => allowed.has(o.id));\n },\n [operators],\n );\n\n const announce = useCallback((message: string) => setAnnouncement(message), []);\n\n const [draft, setDraftState] = useState<FilterBarDraft | null>(null);\n const draftRef = useRef(draft);\n draftRef.current = draft;\n const [lastCommit, setLastCommit] = useState<FilterBarCommit | null>(null);\n const settleCommit = useCallback(() => setLastCommit(prev => (prev ? { ...prev, glint: false } : null)), []);\n // Removed nodes stay rendered at their old position until their chip has animated out.\n const [leavingIds, setLeavingIds] = useState<ReadonlySet<string>>(() => new Set());\n const settleRemove = useCallback((id: string) => {\n setLeavingIds(prev => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n const markLeaving = useCallback((ids: Iterable<string>) => {\n const list = [...ids];\n if (list.length === 0) return;\n setLeavingIds(prev => new Set([...prev, ...list]));\n }, []);\n\n // Until the consumer reflects the commit in `value`, the committed item is ours to show;\n // nodes on their way out keep their place in the previously rendered tree.\n const renderedTreeRef = useRef<FilterBarNode[]>(expression.nodes);\n const { rendered, items, leaving, rootGroupOf } = useMemo(() => {\n const present = idsOf(expression.nodes);\n let rendered: FilterBarExpression =\n leavingIds.size === 0\n ? expression\n : { ...expression, nodes: mergeNodes(renderedTreeRef.current, expression.nodes, leavingIds) };\n if (lastCommit && !present.has(lastCommit.item.id)) {\n rendered = insertItem(rendered, lastCommit.groupId, lastCommit.item);\n }\n renderedTreeRef.current = rendered.nodes;\n const shown = idsOf(rendered.nodes);\n const leaving = new Set([...leavingIds].filter(id => shown.has(id) && !present.has(id)));\n // Each leaf's root-level group: arrow navigation lands on that group's advanced chip\n // when the leaf itself is unmounted (closed popover).\n const rootGroupOf = new Map<string, string>();\n for (const node of rendered.nodes) {\n if (isFilterBarGroup(node))\n for (const { item } of flattenItems({ logic: 'and', nodes: [node] })) rootGroupOf.set(item.id, node.id);\n }\n return { rendered, items: flattenItems(rendered).map(e => e.item), leaving, rootGroupOf };\n }, [expression, lastCommit, leavingIds]);\n\n // The draft chip is keyed by the id the committed item will carry, so React keeps the same\n // element through the commit. Consumers who derive ids themselves supply `createItemId` so\n // the id we hand back in `onValueChange` is the one they'll hand back in `value`.\n const newItemId = useCallback(\n (fieldId: string) => (createItemId && inputTarget === undefined ? createItemId(fieldId) : createFilterId()),\n [createItemId, inputTarget],\n );\n\n const setDraft = useCallback(\n (next: Omit<FilterBarDraft, 'id' | 'from' | 'groupId'> | null) => {\n setLastCommit(null);\n setDraftState(prev =>\n next\n ? {\n ...next,\n id: prev?.fieldId === next.fieldId ? prev.id : newItemId(next.fieldId),\n from: stageOf(prev),\n groupId: inputTarget,\n }\n : null,\n );\n },\n [newItemId, inputTarget],\n );\n\n const commitDraft = useCallback(\n ({ fieldId, operatorId }: Required<Omit<FilterBarDraft, 'id' | 'from' | 'groupId'>>, value: FilterBarValue) => {\n // Operators without a value commit straight from the operator step, before a draft exists.\n const id = draftRef.current?.id ?? newItemId(fieldId);\n const groupId = draftRef.current?.groupId ?? inputTarget;\n const item = { id, fieldId, operatorId, value };\n emit(insertItem(exprRef.current, groupId, item));\n setLastCommit({ item, from: stageOf(draftRef.current), glint: true, groupId });\n setDraftState(null);\n announce('Filter added');\n },\n [emit, announce, newItemId, inputTarget],\n );\n\n const updateItem = useCallback(\n (id: string, patch: Partial<Omit<FilterBarItem, 'id'>>) => {\n emit(updateTreeItem(exprRef.current, id, patch));\n },\n [emit],\n );\n\n const removeItem = useCallback(\n (id: string) => {\n markLeaving([id]);\n emit(removeNode(exprRef.current, id));\n setLastCommit(null);\n announce('Filter removed');\n },\n [emit, announce, markLeaving],\n );\n\n const releaseInputTarget = useCallback((gone: ReadonlySet<string>) => {\n setInputTarget(prev => (prev && gone.has(prev) ? undefined : prev));\n }, []);\n\n const removeGroup = useCallback(\n (groupId: string) => {\n const expr = exprRef.current;\n const group = findGroup(expr, groupId);\n const gone = new Set(group ? collectIds(group) : [groupId]);\n markLeaving(gone);\n emit(removeNode(expr, groupId));\n setLastCommit(null);\n setDraftState(null);\n releaseInputTarget(gone);\n setOpenGroupId(prev => (prev === groupId ? null : prev));\n announce('Advanced filter removed');\n },\n [emit, announce, markLeaving, releaseInputTarget],\n );\n\n const addGroup = useCallback(\n (parentId: string | undefined, logic: FilterBarLogic) => {\n const group: FilterBarGroup = { id: createFilterId(), kind: 'group', logic, nodes: [] };\n emit(createGroup(exprRef.current, parentId, group));\n setLastCommit(null);\n setDraftState(null);\n setInputTarget(group.id);\n announce(parentId ? 'Nested group added' : 'Advanced filter added');\n return group.id;\n },\n [emit, announce],\n );\n\n const setLogic = useCallback(\n (groupId: string, logic: FilterBarLogic) => {\n emit(setGroupLogic(exprRef.current, groupId, logic));\n announce(`Conditions joined with ${logic}`);\n },\n [emit, announce],\n );\n\n const getGroupDepth = useCallback((groupId: string) => groupDepth(exprRef.current, groupId), []);\n\n const setOpenGroup = useCallback(\n (groupId: string | null) => {\n setOpenGroupId(groupId);\n if (groupId !== null) return;\n // Closing the editor: whatever was left empty goes away, and the input returns to the bar.\n const expr = exprRef.current;\n const pruned = pruneEmptyGroups(expr);\n const kept = idsOf(pruned.nodes);\n const gone = new Set([...idsOf(expr.nodes)].filter(id => !kept.has(id)));\n if (gone.size > 0) {\n markLeaving(gone);\n emit(pruned);\n }\n setDraftState(null);\n setInputTarget(undefined);\n },\n [emit, markLeaving],\n );\n\n const focusInput = useCallback(() => {\n inputRef.current?.focus();\n }, []);\n\n const openGroupInput = useCallback(\n (groupId: string | undefined) => {\n setInputTarget(groupId);\n setDraftState(null);\n // The input for a group mounts with the next render and focuses itself.\n if (groupId === undefined) focusInput();\n },\n [focusInput],\n );\n\n const clear = useCallback(() => {\n const expr = exprRef.current;\n const next = clearRemovable(expr, nonRemovableIds);\n const kept = idsOf(next.nodes);\n const gone = new Set([...idsOf(expr.nodes)].filter(id => !kept.has(id)));\n markLeaving(gone);\n emit(next);\n setLastCommit(null);\n setDraftState(null);\n setInputTarget(undefined);\n setOpenGroupId(null);\n announce('All filters removed');\n }, [emit, announce, nonRemovableIds, markLeaving]);\n\n const hasRemovableItems = flattenItems(expression).some(({ item }) => !nonRemovableIds.has(item.id));\n\n const registerNonRemovable = useCallback((itemId: string, nonRemovable: boolean) => {\n setNonRemovableIds(prev => {\n if (prev.has(itemId) === nonRemovable) return prev;\n const next = new Set(prev);\n if (nonRemovable) next.add(itemId);\n else next.delete(itemId);\n return next;\n });\n }, []);\n\n const registerSegment = useCallback((itemId: string, segment: FilterBarSegment, el: HTMLElement | null) => {\n const key: SegmentKey = `${itemId}:${segment}`;\n if (el) segments.current.set(key, el);\n else segments.current.delete(key);\n }, []);\n\n const registerInput = useCallback((el: HTMLInputElement | null) => {\n // An unmounting input must not clear the ref if another input already took over.\n if (el) inputRef.current = el;\n else if (!inputRef.current?.isConnected) inputRef.current = null;\n }, []);\n\n // Chip indices refer to the rendered list (which may still hold leaving chips), not `value`.\n const renderedRef = useRef(items);\n renderedRef.current = items;\n\n const rootGroupRef = useRef(rootGroupOf);\n rootGroupRef.current = rootGroupOf;\n\n const focusChip = useCallback((fromIndex: number, direction: -1 | 1, segment: FilterBarSegment) => {\n const items = renderedRef.current;\n const rootGroupOf = rootGroupRef.current;\n // Stay within the scope of the focused element, or (after a mouse click, which does not\n // move focus) of the chip we navigate away from. Unknown scope: any chip qualifies.\n const origin = items[fromIndex - direction];\n const originEl = origin\n ? [...SEGMENTS_LEFT_TO_RIGHT].map(s => segments.current.get(`${origin.id}:${s}`)).find(Boolean)\n : null;\n const scope =\n scopeOf(typeof document === 'undefined' ? null : document.activeElement) ?? scopeOf(originEl) ?? undefined;\n // Custom chips may register only some segments (e.g. just `value`): when the\n // requested one is missing, land on the chip's outermost segment on the side\n // we arrive from.\n const fallbacks: FilterBarSegment[] = direction === -1 ? SEGMENTS_RIGHT_TO_LEFT : SEGMENTS_LEFT_TO_RIGHT;\n for (let i = fromIndex; i >= 0 && i < items.length; i += direction) {\n const item = items[i];\n if (!item) break;\n // A leaf inside a closed popover has no segments: land on its advanced chip instead.\n const ownerIds = [item.id, rootGroupOf.get(item.id)].filter((id): id is string => id !== undefined);\n for (const ownerId of ownerIds) {\n for (const candidate of [segment, ...fallbacks]) {\n const el = segments.current.get(`${ownerId}:${candidate}`);\n if (el && (scope === undefined || scopeOf(el) === scope)) {\n el.focus();\n return true;\n }\n }\n }\n }\n return false;\n }, []);\n\n const focusAfterRemove = useCallback(\n (removedIndex: number) => {\n // Called synchronously after `removeItem`, before React re-renders: the rendered list\n // still holds the removed chip and every neighbour's DOM node is still mounted.\n // Leaving neighbours register no segments, so they are skipped over.\n if (focusChip(removedIndex + 1, 1, 'value') || focusChip(removedIndex - 1, -1, 'value')) return;\n focusInput();\n },\n [focusChip, focusInput],\n );\n\n const ctx = useMemo<FilterBarContextValue>(\n () => ({\n fields,\n operators,\n items,\n expression: rendered,\n groupsEnabled: !flat,\n maxDepth,\n draft,\n setDraft,\n commitDraft,\n lastCommit,\n settleCommit,\n updateItem,\n removeItem,\n leaving,\n settleRemove,\n clear,\n hasRemovableItems,\n registerNonRemovable,\n addGroup,\n removeGroup,\n setLogic,\n getGroupDepth,\n openGroupId,\n setOpenGroup,\n inputTarget,\n openGroupInput,\n getField,\n getOperator,\n getFieldOperators,\n registerSegment,\n registerInput,\n focusChip,\n focusInput,\n focusAfterRemove,\n announce,\n announcement,\n ariaLabel,\n }),\n [\n fields,\n operators,\n items,\n rendered,\n flat,\n maxDepth,\n draft,\n setDraft,\n commitDraft,\n lastCommit,\n settleCommit,\n updateItem,\n removeItem,\n leaving,\n settleRemove,\n clear,\n hasRemovableItems,\n registerNonRemovable,\n addGroup,\n removeGroup,\n setLogic,\n getGroupDepth,\n openGroupId,\n setOpenGroup,\n inputTarget,\n openGroupInput,\n getField,\n getOperator,\n getFieldOperators,\n registerSegment,\n registerInput,\n focusChip,\n focusInput,\n focusAfterRemove,\n announce,\n announcement,\n ariaLabel,\n ],\n );\n\n return <FilterBarContext.Provider value={ctx}>{children}</FilterBarContext.Provider>;\n}\n","import { CheckIcon } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport type { ReactNode } from 'react';\nimport type { FilterBarOption } from './types';\nimport { ComboboxPrimitive, comboboxStyles } from '@/ds/components/Combobox';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { cn } from '@/lib/utils';\n\nexport type FilterBarOptionListProps<T> = {\n getKey: (option: T) => string;\n renderOption: (option: T) => ReactNode;\n /** Explicit check mark, used where Base UI's selection state is not the source of truth (multi-value step). */\n isSelected?: (option: T) => boolean;\n isLoading?: boolean;\n error?: unknown;\n emptyText?: string;\n 'aria-label': string;\n 'aria-multiselectable'?: boolean;\n};\n\n/** Default value row: the option's leading node (avatar, swatch…) followed by its label. */\nexport function FilterBarOptionLabel({ option }: { option: FilterBarOption }) {\n return (\n <>\n {option.start}\n <span className=\"min-w-0 truncate\">{option.label ?? option.value}</span>\n </>\n );\n}\n\nconst FluidItem = forwardRef<HTMLDivElement, ComboboxPrimitive.Item.Props>((props, ref) => (\n <ComboboxPrimitive.Item ref={useFluidMenuItemRef(ref)} {...props} />\n));\nFluidItem.displayName = 'FilterBarOptionItem';\n\n/**\n * List/status/empty rows for a `ComboboxPrimitive.Root`, laid out like the DS\n * `Combobox` popup (fluid hover highlight, scroller around the list). Items come\n * from the root's `items`; highlight and keyboard navigation are owned by Base UI.\n */\nexport function FilterBarOptionList<T>({\n getKey,\n renderOption,\n isSelected,\n isLoading,\n error,\n emptyText = 'No results.',\n 'aria-label': ariaLabel,\n 'aria-multiselectable': multiselectable,\n}: FilterBarOptionListProps<T>) {\n const idle = !isLoading && error === undefined;\n const menu = useFluidMenu<HTMLDivElement>();\n return (\n <>\n {isLoading && (\n <ComboboxPrimitive.Status className={comboboxStyles.empty}>\n <Spinner size=\"sm\" />\n <span>Loading…</span>\n </ComboboxPrimitive.Status>\n )}\n {!isLoading && error !== undefined && (\n <ComboboxPrimitive.Status className={comboboxStyles.empty}>Couldn't load values.</ComboboxPrimitive.Status>\n )}\n <ComboboxPrimitive.Empty className={comboboxStyles.empty}>{idle ? emptyText : null}</ComboboxPrimitive.Empty>\n <div\n className={cn(\n comboboxStyles.listScroller,\n 'max-h-[min(var(--spacing-dropdown),60dvh)]',\n menu.containerClassName,\n )}\n {...menu.getContainerProps({})}\n >\n <FluidMenuItems menu={menu}>\n <ComboboxPrimitive.List\n aria-label={ariaLabel}\n aria-multiselectable={multiselectable}\n className={comboboxStyles.list}\n >\n {(option: T) => {\n const selected = isSelected?.(option) ?? false;\n return (\n <FluidItem\n key={getKey(option)}\n value={option}\n data-selected={selected || undefined}\n className={cn(comboboxStyles.item, 'min-w-0')}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-1.5 truncate\">{renderOption(option)}</span>\n <span className={comboboxStyles.itemRightSlot}>\n <span className={comboboxStyles.checkContainer}>\n {isSelected ? (\n selected && <CheckIcon className={comboboxStyles.checkIcon} />\n ) : (\n <ComboboxPrimitive.ItemIndicator>\n <CheckIcon className={comboboxStyles.checkIcon} />\n </ComboboxPrimitive.ItemIndicator>\n )}\n </span>\n </span>\n </FluidItem>\n );\n }}\n </ComboboxPrimitive.List>\n </FluidMenuItems>\n </div>\n </>\n );\n}\n","/** Every whitespace-separated term of `query` must appear in `text` (case-insensitive). */\nexport function matchesQuery(text: string, query: string): boolean {\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean);\n if (terms.length === 0) return true;\n const haystack = text.toLowerCase();\n return terms.every(term => haystack.includes(term));\n}\n\n/** Base UI `filter` for `ComboboxPrimitive.Root`, matching on the item label. */\nexport function matchesQueryFilter<T>(item: T, query: string, itemToString?: (item: T) => string): boolean {\n return matchesQuery(itemToString ? itemToString(item) : String(item), query);\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { matchesQuery } from './match-query';\nimport type { FilterBarField, FilterBarOption } from './types';\n\nconst DEBOUNCE_MS = 150;\n\nconst BOOLEAN_OPTIONS: FilterBarOption[] = [\n { value: 'true', label: 'True' },\n { value: 'false', label: 'False' },\n];\n\n/** The field's suggestions, defaulting to True/False for boolean fields. */\nexport const getFieldSuggestions = (field: FilterBarField | undefined) =>\n field?.suggestions ?? (field?.type === 'boolean' ? BOOLEAN_OPTIONS : undefined);\n\nexport type UseValueSuggestionsOptions = {\n field: FilterBarField | undefined;\n operatorId: string;\n query: string;\n /** Resolver only runs while true (the value editor is open). */\n enabled: boolean;\n};\n\nexport type UseValueSuggestionsResult = {\n options: FilterBarOption[];\n isLoading: boolean;\n error: unknown;\n /** True when the field has any suggestions (static or lazy). */\n hasSuggestions: boolean;\n};\n\n/**\n * Value suggestions for a field. Static lists are filtered locally. Lazy\n * resolvers run only while `enabled`, are debounced on `query`, receive an\n * AbortSignal, and only the latest response is applied.\n */\nexport function useValueSuggestions({\n field,\n operatorId,\n query,\n enabled,\n}: UseValueSuggestionsOptions): UseValueSuggestionsResult {\n const suggestions = getFieldSuggestions(field);\n const resolver = typeof suggestions === 'function' ? suggestions : undefined;\n const staticOptions = Array.isArray(suggestions) ? suggestions : undefined;\n\n const [remote, setRemote] = useState<FilterBarOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<unknown>(undefined);\n const requestId = useRef(0);\n // Consumers typically define the resolver inline; a new identity must not refire (and abort) the request.\n const resolverRef = useRef(resolver);\n resolverRef.current = resolver;\n const hasResolver = Boolean(resolver);\n\n useEffect(() => {\n if (!hasResolver || !enabled) {\n setRemote([]);\n setIsLoading(false);\n setError(undefined);\n return;\n }\n\n const id = ++requestId.current;\n const controller = new AbortController();\n setIsLoading(true);\n\n const timer = setTimeout(() => {\n Promise.resolve()\n .then(() => resolverRef.current?.({ query, operatorId, signal: controller.signal }) ?? [])\n .then(result => {\n if (id !== requestId.current) return;\n setRemote(result);\n setError(undefined);\n setIsLoading(false);\n })\n .catch(err => {\n if (id !== requestId.current || controller.signal.aborted) return;\n setError(err);\n setIsLoading(false);\n });\n }, DEBOUNCE_MS);\n\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [hasResolver, enabled, query, operatorId]);\n\n const options = useMemo(() => {\n if (staticOptions) return staticOptions.filter(o => matchesQuery(o.label ?? o.value, query));\n return remote;\n }, [staticOptions, remote, query]);\n\n return {\n options,\n isLoading: Boolean(resolver) && isLoading,\n error,\n hasSuggestions: Boolean(suggestions),\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { KeyboardEvent } from 'react';\nimport type { FilterBarField, FilterBarOperator, FilterBarOption, FilterBarValue } from './types';\nimport { parseFieldValue } from './types';\nimport { useValueSuggestions } from './use-value-suggestions';\n\nexport type UseValueStepOptions = {\n field: FilterBarField | undefined;\n operator: FilterBarOperator | undefined;\n query: string;\n enabled: boolean;\n initialValue?: FilterBarValue;\n onCommit: (value: FilterBarValue) => void;\n};\n\nconst toStrings = (value: FilterBarValue | undefined): string[] => (Array.isArray(value) ? value.map(String) : []);\n\n/**\n * Shared value-editing logic for the typeahead value step and the chip value\n * editor. Single arity: picking an option (or Enter on free text) commits.\n * Many arity: Enter/click toggles the highlighted option; Ctrl/Meta+Enter (or\n * `commitSelection`) commits the selection. List navigation itself is owned by\n * the surrounding `ComboboxPrimitive.Root`.\n */\nexport function useValueStep({ field, operator, query, enabled, initialValue, onCommit }: UseValueStepOptions) {\n const isMany = operator?.arity === 'many';\n // Selection is tracked as option strings; values are parsed to the field type on commit.\n const [selected, setSelected] = useState<string[]>(() => toStrings(initialValue));\n const initialValueRef = useRef(initialValue);\n initialValueRef.current = initialValue;\n\n // The editor stays mounted across opens: re-seed from the current value each time it opens.\n useEffect(() => {\n setSelected(enabled ? toStrings(initialValueRef.current) : []);\n }, [enabled]);\n\n const suggestions = useValueSuggestions({ field, operatorId: operator?.id ?? '', query, enabled });\n const type = field?.type;\n const allowFreeText = !field?.strict && type !== 'boolean';\n\n const toggle = useCallback((value: string) => {\n setSelected(current => (current.includes(value) ? current.filter(v => v !== value) : [...current, value]));\n }, []);\n\n const commit = useCallback(\n (values: string | string[]) =>\n onCommit(Array.isArray(values) ? values.map(v => parseFieldValue(type, v)) : parseFieldValue(type, values)),\n [onCommit, type],\n );\n\n const handleSelect = useCallback(\n (option: FilterBarOption) => {\n if (isMany) toggle(option.value);\n else commit(option.value);\n },\n [isMany, toggle, commit],\n );\n\n const commitSelection = useCallback(() => {\n if (selected.length === 0) return false;\n commit(selected);\n return true;\n }, [selected, commit]);\n\n const canCommitFreeText = useCallback(\n (text: string) => allowFreeText && text.length > 0 && (type !== 'number' || Number.isFinite(Number(text))),\n [allowFreeText, type],\n );\n\n const commitFreeText = useCallback(() => {\n const text = query.trim();\n if (!canCommitFreeText(text)) return false;\n commit(isMany ? (selected.includes(text) ? selected : [...selected, text]) : text);\n return true;\n }, [canCommitFreeText, query, isMany, selected, commit]);\n\n /**\n * Enter handling that Base UI does not cover: Ctrl/Meta+Enter commits a\n * multi-selection; plain Enter with nothing highlighted commits free text.\n * Returns `true` when the event was consumed.\n */\n const handleKeyDown = useCallback(\n (event: KeyboardEvent, highlighted: FilterBarOption | null): boolean => {\n if (event.key !== 'Enter') return false;\n if (isMany && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n return commitSelection() || commitFreeText();\n }\n if (highlighted === null) {\n event.preventDefault();\n return commitFreeText();\n }\n return false;\n },\n [isMany, commitSelection, commitFreeText],\n );\n\n return {\n isMany,\n selected,\n toggle,\n options: suggestions.options,\n isLoading: suggestions.isLoading,\n error: suggestions.error,\n hasSuggestions: suggestions.hasSuggestions,\n allowFreeText,\n /** True when the current query can be committed as free text (non-empty, numeric when the field is a number). */\n canCommitQuery: canCommitFreeText(query.trim()),\n handleSelect,\n handleKeyDown,\n commitSelection,\n commitFreeText,\n };\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport type { BaseUIEvent } from '@base-ui/react/types';\nimport { LockIcon, PencilIcon, SearchIcon, XIcon } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { AnimationEvent, CSSProperties, ComponentProps, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { emptyValueFor, useFilterBarContext } from './filter-bar-context';\nimport { FilterBarOptionLabel, FilterBarOptionList } from './filter-bar-option-list';\nimport { matchesQueryFilter } from './match-query';\nimport type {\n DraftStage,\n FilterBarField,\n FilterBarFieldType,\n FilterBarItem,\n FilterBarOperator,\n FilterBarOption,\n FilterBarScalar,\n FilterBarSegment,\n FilterBarValue,\n} from './types';\nimport { useValueStep } from './use-value-step';\nimport { getFieldSuggestions } from './use-value-suggestions';\nimport { Button } from '@/ds/components/Button/Button';\nimport { ComboboxPrimitive, comboboxStyles } from '@/ds/components/Combobox';\nimport { Kbd } from '@/ds/components/Kbd/kbd';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport { inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport './filter-bar-chip.css';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { useIsApplePlatform } from '@/hooks/use-keyboard-shortcut-label';\nimport { cn } from '@/lib/utils';\n\n// `filter-bar-segment` carries the left-to-right entrance (see filter-bar-chip.css).\n// No `first:`/`last:` rounding here: a segment is not reliably the first or last child.\n// Base UI interleaves a hidden input after every combobox and wraps an open trigger in\n// focus guards, so the rounded end would silently drop the moment a popup opened and the\n// segment's own state fill — the one state a chip has — would paint square corners\n// straight through the chip's pill edge. The chip clips instead (see `chipClass`).\nexport const segmentClass = cn(\n 'filter-bar-segment flex max-w-48 min-w-0 items-center gap-1 overflow-hidden px-2 text-label whitespace-nowrap outline-none',\n);\n\n// A filter bar is a dense row: it sits above a list, carries many chips at once, and never\n// competes with the page's own controls. Chip and typeahead pill read this one rung so they\n// stay the same height by construction rather than by two call sites agreeing.\nexport const FILTER_BAR_CONTROL_SIZE: ControlSize = 'sm';\n\n// A chip is a field whose value is edited in place, so it wears the field material rather than a\n// fill rung: on a light canvas a `bg-fill` chip read as a grey slab beside the white typeahead\n// pill it belongs to. The segments layer their own state over that card, which is why the chip\n// keeps `divide-border` for the internal seams and takes its outer edge from the material's rim.\n// `overflow-hidden` is what gives every segment its end cap: the chip is the only node that\n// knows where the pill ends, and it keeps knowing it while a framework injects children.\nexport const chipClass = cn(\n 'filter-bar-chip relative flex max-w-full items-stretch divide-x divide-border overflow-hidden rounded-full',\n inputSurfaceAndFocusWithinStyle,\n controlHeight[FILTER_BAR_CONTROL_SIZE],\n);\n\nexport const editableSegmentClass = cn(\n segmentClass,\n 'cursor-pointer hover:bg-fill-subtle hover:text-foreground',\n 'focus-visible:bg-fill-hover focus-visible:text-foreground data-[popup-open]:bg-fill-hover data-[popup-open]:text-foreground',\n);\n\n/** Field label with its optional leading icon — used by chips, the draft chip and field option lists. */\nexport function FilterBarFieldLabel({ field, label }: { field: FilterBarField | undefined; label?: string }) {\n const Icon = field?.icon;\n return (\n <>\n {Icon && <Icon className=\"size-[1.1em] shrink-0\" aria-hidden />}\n <span className=\"truncate\">{label ?? field?.label}</span>\n </>\n );\n}\n\n/** Inline style carrying a field's accent onto its field segment (text + icon). */\nexport const fieldSegmentAccentStyle = (field: FilterBarField | undefined) =>\n field?.color ? { color: field.color } : undefined;\n\n/** Segments a chip already showed before its latest step, given how far its draft had got. */\nconst settledSegments = (from: DraftStage, operatorImplied: boolean): number => {\n if (from === 'none') return 0;\n if (from === 'field' || operatorImplied) return 1;\n return 2;\n};\n\nexport const formatValue = (value: FilterBarValue, field: FilterBarField | undefined): string => {\n const suggestions = getFieldSuggestions(field);\n const options = Array.isArray(suggestions) ? suggestions : undefined;\n const label = (v: FilterBarScalar) => options?.find(o => o.value === String(v))?.label ?? String(v);\n return Array.isArray(value) ? value.map(label).join(', ') : label(value);\n};\n\ntype ChipContext = {\n item: FilterBarItem;\n index: number;\n field: FilterBarField | undefined;\n operator: FilterBarOperator | undefined;\n openSegment: FilterBarSegment | null;\n setOpenSegment: (segment: FilterBarSegment | null) => void;\n readOnly: boolean;\n /** Filter still being built in the input: segments are inert labels. */\n draft: boolean;\n /** Filter already removed from the value, playing its exit: segments are inert labels. */\n leaving: boolean;\n /** The field allows a single operator, so the operator segment is not shown. */\n operatorImplied: boolean;\n};\n\nconst ChipContext = createContext<ChipContext | null>(null);\nconst useChip = () => {\n const chip = useContext(ChipContext);\n if (!chip) throw new Error('FilterBarChip segments must be rendered inside <FilterBarChip>.');\n return chip;\n};\n\nexport type FilterBarChipProps = {\n item: FilterBarItem;\n /** Locked chip: plain labels, no editors, no remove button. */\n readOnly?: boolean;\n /** `false` keeps the chip editable but drops the remove button and ignores Backspace/Delete. */\n removable?: boolean;\n /**\n * Render the filter being built in the input (see `FilterBarContextValue.draft`): only\n * the picked segments show, as inert labels. Keyed by the draft id, the same element\n * carries on as the editable chip once the value is committed.\n */\n draft?: boolean;\n className?: string;\n /** Custom segment composition; defaults to Field · Operator · Value · Remove. */\n children?: ReactNode;\n};\n\nfunction isInsidePopup(target: EventTarget | null) {\n return target instanceof Element && Boolean(target.closest('[data-slot=\"filter-bar-editor\"]'));\n}\n\nexport function FilterBarChip({\n item,\n readOnly = false,\n removable = true,\n draft = false,\n className,\n children,\n}: FilterBarChipProps) {\n const ctx = useFilterBarContext();\n const [openSegment, setOpenSegment] = useState<FilterBarSegment | null>(null);\n const field = ctx.getField(item.fieldId);\n const operator = ctx.getOperator(item.operatorId);\n const index = ctx.items.findIndex(i => i.id === item.id);\n const rootRef = useRef<HTMLDivElement>(null);\n const leaving = ctx.leaving.has(item.id);\n\n const pinned = !draft && (readOnly || !removable);\n const { registerNonRemovable, settleRemove } = ctx;\n useEffect(() => {\n registerNonRemovable(item.id, pinned);\n return () => registerNonRemovable(item.id, false);\n }, [registerNonRemovable, item.id, pinned]);\n\n // A leaving chip is released once its exit animation has finished. With nothing to\n // animate (no `interpolate-size`, reduced motion, jsdom) it is released straight away.\n useEffect(() => {\n const root = rootRef.current;\n if (!leaving || !root) return;\n const animations = typeof root.getAnimations === 'function' ? root.getAnimations({ subtree: true }) : [];\n if (animations.length === 0) {\n settleRemove(item.id);\n return;\n }\n let cancelled = false;\n Promise.all(animations.map(animation => animation.finished))\n .then(() => {\n if (!cancelled) settleRemove(item.id);\n })\n // Animations cancelled by an unmount reject `finished`; nothing left to settle.\n .catch(() => {});\n return () => {\n cancelled = true;\n };\n }, [leaving, item.id, settleRemove]);\n\n const operatorImplied = field ? ctx.getFieldOperators(field).length === 1 : false;\n const label = [\n field?.label ?? item.fieldId,\n operatorImplied ? '' : (operator?.label ?? item.operatorId),\n draft ? '' : formatValue(item.value, field),\n ]\n .filter(Boolean)\n .join(' ');\n\n // The provider records where each draft step (and the final commit) started from, so\n // the entrance stagger resumes after the segments already on screen and the chip\n // glints once when it lands as a filter (see filter-bar-chip.css).\n const commit = !draft && ctx.lastCommit?.item.id === item.id ? ctx.lastCommit : null;\n const from = draft ? (ctx.draft?.from ?? 'none') : (commit?.from ?? 'none');\n const settled = settledSegments(from, operatorImplied);\n const shine = commit?.glint ?? false;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (readOnly || draft || leaving || isInsidePopup(event.target)) return;\n const segments = Array.from(rootRef.current?.querySelectorAll<HTMLElement>('[data-filter-bar-segment]') ?? []);\n const current = segments.findIndex(el => el === event.target);\n\n switch (event.key) {\n case 'ArrowRight': {\n event.preventDefault();\n const next = segments[current + 1];\n if (next) next.focus();\n else if (!ctx.focusChip(index + 1, 1, 'field')) ctx.focusInput();\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const prev = segments[current - 1];\n if (prev) prev.focus();\n else ctx.focusChip(index - 1, -1, 'remove');\n return;\n }\n case 'Delete':\n case 'Backspace':\n if (!removable) return;\n event.preventDefault();\n ctx.removeItem(item.id);\n ctx.focusAfterRemove(index);\n return;\n default:\n }\n },\n [readOnly, draft, leaving, removable, ctx, index, item.id],\n );\n\n const chipValue = useMemo<ChipContext>(\n () => ({ item, index, field, operator, openSegment, setOpenSegment, readOnly, draft, leaving, operatorImplied }),\n [item, index, field, operator, openSegment, readOnly, draft, leaving, operatorImplied],\n );\n const content = children ?? (\n <>\n <FilterBarChipField />\n <FilterBarChipOperator />\n <FilterBarChipValue />\n {removable && <FilterBarChipRemove />}\n </>\n );\n return (\n <ChipContext.Provider value={chipValue}>\n <div\n ref={rootRef}\n role=\"group\"\n aria-label={label}\n // The input already announces the draft's progress through its placeholder.\n aria-hidden={draft || leaving || undefined}\n data-slot=\"filter-bar-chip\"\n data-draft={draft || undefined}\n data-readonly={readOnly || undefined}\n data-leaving={leaving || undefined}\n data-shine={(shine && !leaving) || undefined}\n className={cn(chipClass, leaving && 'pointer-events-none', className)}\n style={\n {\n '--filter-bar-segments-settled': settled,\n '--filter-bar-chip-shine': field?.color ?? 'currentColor',\n } as CSSProperties\n }\n onKeyDown={handleKeyDown}\n onClick={(event: MouseEvent) => event.stopPropagation()}\n onAnimationEnd={(event: AnimationEvent) => {\n if (event.animationName === 'filter-bar-chip-shine') ctx.settleCommit();\n }}\n >\n {readOnly && (\n <span\n className={cn(segmentClass, 'pr-0 text-muted-foreground [--filter-bar-segment-padding:0.5rem_0]')}\n title=\"This filter is locked\"\n >\n <LockIcon className=\"size-[1.1em]\" />\n </span>\n )}\n {content}\n </div>\n </ChipContext.Provider>\n );\n}\n\ntype SegmentComboboxProps<T> = {\n segment: Exclude<FilterBarSegment, 'remove'>;\n label: string;\n ariaLabel: string;\n items: readonly T[];\n itemToString: (item: T) => string;\n /** `null` when `items` are already filtered. */\n filter: null | ((item: T, query: string, itemToString?: (item: T) => string) => boolean);\n /** Current selection, surfaced through Base UI's `ItemIndicator`. */\n value?: T | null;\n query: string;\n onQueryChange: (query: string) => void;\n onSelect: (item: T) => void;\n onOpen?: () => void;\n /** Popup content: typically a `SegmentSearchInput` followed by a `FilterBarOptionList`. */\n children: ReactNode;\n};\n\n// Highlighted item of the enclosing SegmentCombobox, for popup inputs that route Enter.\nconst SegmentPopupContext = createContext<{ highlighted: unknown }>({ highlighted: null });\n\ntype SegmentSearchInputProps<T> = {\n placeholder: string;\n /** Leading icon. Defaults to a search glass; free-text editing uses a pencil. */\n icon?: LucideIcon;\n inputMode?: ComponentProps<'input'>['inputMode'];\n onKeyDown?: (event: BaseUIEvent<KeyboardEvent<HTMLInputElement>>, highlighted: T | null) => void;\n};\n\n/** The search/free-text input at the top of a segment popup. */\nfunction SegmentSearchInput<T>({\n placeholder,\n icon: Icon = SearchIcon,\n inputMode,\n onKeyDown,\n}: SegmentSearchInputProps<T>) {\n const { highlighted } = useContext(SegmentPopupContext);\n return (\n <div className={comboboxStyles.searchContainer}>\n <Icon className={comboboxStyles.searchIcon} />\n <ComboboxPrimitive.Input\n className={comboboxStyles.searchInput}\n placeholder={placeholder}\n inputMode={inputMode}\n onKeyDown={event => onKeyDown?.(event, highlighted as T | null)}\n />\n </div>\n );\n}\n\n/**\n * A chip segment: a button trigger that opens an option popup. The editor\n * owning the segment supplies items, filtering, selection routing and the\n * popup content.\n */\nfunction SegmentCombobox<T>({\n segment,\n label,\n ariaLabel,\n items,\n itemToString,\n filter,\n value = null,\n query,\n onQueryChange,\n onSelect,\n onOpen,\n children,\n}: SegmentComboboxProps<T>) {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const container = usePortalContainer();\n const open = chip.openSegment === segment;\n const [highlighted, setHighlighted] = useState<T | null>(null);\n\n const isField = segment === 'field';\n const content = isField ? (\n <FilterBarFieldLabel field={chip.field} label={label} />\n ) : (\n <span className=\"truncate\">{label}</span>\n );\n\n if (chip.readOnly || chip.draft || chip.leaving) {\n return (\n <span\n className={cn(segmentClass, isField && 'text-foreground')}\n style={isField ? fieldSegmentAccentStyle(chip.field) : undefined}\n title={label}\n >\n {content}\n </span>\n );\n }\n\n return (\n <ComboboxPrimitive.Root<T>\n items={items}\n itemToStringLabel={itemToString}\n filter={filter}\n value={value}\n onValueChange={(item, details) => {\n // The editor decides what a pick means (and when to close); Base UI must not keep it.\n details.cancel();\n if (item !== null) onSelect(item);\n }}\n inputValue={query}\n onInputValueChange={(next, details) => {\n if (details.reason === 'input-change') onQueryChange(next);\n }}\n onItemHighlighted={item => setHighlighted(item ?? null)}\n open={open}\n onOpenChange={next => {\n if (next) onOpen?.();\n else onQueryChange('');\n chip.setOpenSegment(next ? segment : null);\n }}\n // See FilterBarInput: the runtime supports 'always' although ComboboxRoot types it as boolean.\n autoHighlight={'always' as unknown as boolean}\n modal={false}\n >\n <ComboboxPrimitive.Trigger\n ref={el => ctx.registerSegment(chip.item.id, segment, el)}\n render={\n <button\n type=\"button\"\n data-filter-bar-segment=\"\"\n tabIndex={segment === 'value' ? 0 : -1}\n aria-label={`${ariaLabel}: ${label}`}\n title={label}\n className={cn(editableSegmentClass, isField && 'text-foreground')}\n style={isField ? fieldSegmentAccentStyle(chip.field) : undefined}\n />\n }\n >\n {content}\n </ComboboxPrimitive.Trigger>\n <ComboboxPrimitive.Portal container={container}>\n <ComboboxPrimitive.Positioner\n align=\"start\"\n sideOffset={MENU_SIDE_OFFSET}\n positionMethod={FLOATING_POSITION_METHOD}\n className={comboboxStyles.positioner}\n >\n <ComboboxPrimitive.Popup className={cn(comboboxStyles.popup, 'min-w-44')} data-slot=\"filter-bar-editor\">\n <SegmentPopupContext.Provider value={{ highlighted }}>{children}</SegmentPopupContext.Provider>\n </ComboboxPrimitive.Popup>\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n </ComboboxPrimitive.Root>\n );\n}\n\nconst fieldLabel = (field: FilterBarField) => field.label;\nconst operatorLabel = (operator: FilterBarOperator) => operator.label;\nconst optionLabel = (option: FilterBarOption) => option.label ?? option.value;\n\nfunction FieldEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const [query, setQuery] = useState('');\n\n const onSelect = useCallback(\n (field: FilterBarField) => {\n const allowed = ctx.getFieldOperators(field);\n const nextOperator = allowed.find(o => o.id === chip.item.operatorId) ?? allowed[0];\n const arityChanged = nextOperator?.arity !== chip.operator?.arity;\n ctx.updateItem(chip.item.id, {\n fieldId: field.id,\n operatorId: nextOperator?.id ?? chip.item.operatorId,\n value: arityChanged || field.id !== chip.item.fieldId ? emptyValueFor(nextOperator) : chip.item.value,\n });\n chip.setOpenSegment(null);\n },\n [ctx, chip],\n );\n\n return (\n <SegmentCombobox<FilterBarField>\n segment=\"field\"\n ariaLabel=\"Field\"\n label={chip.field?.label ?? chip.item.fieldId}\n items={ctx.fields}\n itemToString={fieldLabel}\n filter={matchesQueryFilter}\n value={chip.field}\n query={query}\n onQueryChange={setQuery}\n onSelect={onSelect}\n >\n <SegmentSearchInput placeholder=\"Change field…\" />\n <FilterBarOptionList<FilterBarField>\n aria-label=\"Fields\"\n getKey={f => f.id}\n renderOption={f => <FilterBarFieldLabel field={f} />}\n emptyText=\"No matching field.\"\n />\n </SegmentCombobox>\n );\n}\n\nfunction OperatorEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const [query, setQuery] = useState('');\n const options = useMemo(() => (chip.field ? ctx.getFieldOperators(chip.field) : ctx.operators), [ctx, chip.field]);\n\n const onSelect = useCallback(\n (operator: FilterBarOperator) => {\n const arityChanged = (operator.arity ?? 'one') !== (chip.operator?.arity ?? 'one');\n ctx.updateItem(chip.item.id, {\n operatorId: operator.id,\n value: arityChanged ? emptyValueFor(operator) : chip.item.value,\n });\n chip.setOpenSegment(null);\n },\n [ctx, chip],\n );\n\n return (\n <SegmentCombobox<FilterBarOperator>\n segment=\"operator\"\n ariaLabel=\"Operator\"\n label={chip.operator?.label ?? chip.item.operatorId}\n items={options}\n itemToString={operatorLabel}\n filter={matchesQueryFilter}\n value={chip.operator}\n query={query}\n onQueryChange={setQuery}\n onSelect={onSelect}\n >\n <SegmentSearchInput placeholder=\"Change operator…\" />\n <FilterBarOptionList<FilterBarOperator>\n aria-label=\"Operators\"\n getKey={o => o.id}\n renderOption={o => o.label}\n emptyText=\"No matching operator.\"\n />\n </SegmentCombobox>\n );\n}\n\nfunction ValueEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const open = chip.openSegment === 'value';\n const [query, setQuery] = useState('');\n\n const close = useCallback(() => chip.setOpenSegment(null), [chip]);\n const onCommit = useCallback(\n (value: FilterBarValue) => {\n ctx.updateItem(chip.item.id, { value });\n close();\n },\n [ctx, chip.item.id, close],\n );\n\n const step = useValueStep({\n field: chip.field,\n operator: chip.operator,\n query,\n enabled: open,\n initialValue: chip.item.value,\n onCommit,\n });\n\n const ValueInput = VALUE_INPUTS[chip.field?.type ?? 'text'];\n\n return (\n <SegmentCombobox<FilterBarOption>\n segment=\"value\"\n ariaLabel=\"Value\"\n label={formatValue(chip.item.value, chip.field) || '…'}\n items={step.options}\n itemToString={optionLabel}\n filter={null}\n query={query}\n onQueryChange={setQuery}\n onSelect={step.handleSelect}\n // Prefill free-text values only; with suggestions, the current value is shown as checked instead.\n onOpen={() =>\n setQuery(!Array.isArray(chip.item.value) && !chip.field?.suggestions ? String(chip.item.value) : '')\n }\n >\n <ValueInput step={step} onCancel={close} />\n </SegmentCombobox>\n );\n}\n\ntype ValueInputProps = {\n step: ReturnType<typeof useValueStep>;\n onCancel: () => void;\n};\n\n/** Suggestion list + multi-select footer, shared by every value input. */\nfunction ValueOptions({ step, onCancel }: ValueInputProps) {\n const chip = useChip();\n const modEnterLabel = useIsApplePlatform() ? '⌘↵' : 'Ctrl ↵';\n return (\n <>\n {step.hasSuggestions && (\n <FilterBarOptionList<FilterBarOption>\n aria-label=\"Values\"\n aria-multiselectable={step.isMany || undefined}\n getKey={o => o.value}\n renderOption={option => <FilterBarOptionLabel option={option} />}\n isSelected={o => (step.isMany ? step.selected.includes(o.value) : String(chip.item.value) === o.value)}\n isLoading={step.isLoading}\n error={step.error}\n emptyText={step.allowFreeText ? 'No suggestions — press Enter to use your text.' : 'No matching value.'}\n />\n )}\n {step.isMany && (\n <div className=\"flex items-center justify-end gap-1 border-t border-border p-1\">\n <Button size=\"sm\" variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"default\" onClick={() => step.commitSelection() || step.commitFreeText()}>\n Done\n <Kbd size=\"xs\">{modEnterLabel}</Kbd>\n </Button>\n </div>\n )}\n </>\n );\n}\n\n/** Free-text (optionally suggestion-backed) value input; text and number share it. */\nfunction FreeTextValueInput({\n step,\n onCancel,\n inputMode,\n noun,\n}: ValueInputProps & { inputMode?: ComponentProps<'input'>['inputMode']; noun: string }) {\n return (\n <>\n <SegmentSearchInput<FilterBarOption>\n icon={step.hasSuggestions ? SearchIcon : PencilIcon}\n inputMode={inputMode}\n placeholder={\n step.hasSuggestions\n ? step.allowFreeText\n ? `Search or type a ${noun}…`\n : `Search ${noun}s…`\n : `Type a ${noun}…`\n }\n onKeyDown={(event, highlighted) => {\n const highlightedOption = step.hasSuggestions ? highlighted : null;\n const handled = step.handleKeyDown(event, highlightedOption);\n // Base UI closes on Enter when nothing is highlighted; a rejected free-text value must keep the editor open.\n if (handled || (event.key === 'Enter' && highlightedOption === null)) event.preventBaseUIHandler();\n }}\n />\n <ValueOptions step={step} onCancel={onCancel} />\n </>\n );\n}\n\nfunction TextValueInput(props: ValueInputProps) {\n return <FreeTextValueInput {...props} noun=\"value\" />;\n}\n\nfunction NumberValueInput(props: ValueInputProps) {\n return <FreeTextValueInput {...props} inputMode=\"decimal\" noun=\"number\" />;\n}\n\n/** Select-like: no search input, just the True/False (or custom) options. */\nfunction BooleanValueInput(props: ValueInputProps) {\n return <ValueOptions {...props} />;\n}\n\nconst VALUE_INPUTS: Record<FilterBarFieldType, (props: ValueInputProps) => ReactNode> = {\n text: TextValueInput,\n number: NumberValueInput,\n boolean: BooleanValueInput,\n};\n\nexport function FilterBarChipField() {\n return <FieldEditor />;\n}\n\nexport function FilterBarChipOperator() {\n const chip = useChip();\n if (chip.operatorImplied) return null;\n if (chip.draft && !chip.operator) return null;\n return <OperatorEditor />;\n}\n\nexport function FilterBarChipValue() {\n const chip = useChip();\n if (chip.draft || (chip.operator?.arity ?? 'one') === 'none') return null;\n return <ValueEditor />;\n}\n\nexport function FilterBarChipRemove() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n if (chip.readOnly || chip.draft) return null;\n const removeClass = cn(editableSegmentClass, 'px-1.5 text-muted-foreground [--filter-bar-segment-padding:0.375rem]');\n if (chip.leaving) {\n // Keep the × on screen so it folds away with the other segments.\n return (\n <span className={removeClass}>\n <XIcon className=\"size-[1.1em]\" />\n </span>\n );\n }\n const label = `Remove ${chip.field?.label ?? chip.item.fieldId} filter`;\n return (\n <button\n type=\"button\"\n data-filter-bar-segment=\"\"\n tabIndex={-1}\n aria-label={label}\n title={label}\n ref={el => ctx.registerSegment(chip.item.id, 'remove', el)}\n className={removeClass}\n onClick={() => {\n ctx.removeItem(chip.item.id);\n ctx.focusAfterRemove(chip.index);\n }}\n >\n <XIcon className=\"size-[1.1em]\" />\n </button>\n );\n}\n\nFilterBarChip.Field = FilterBarChipField;\nFilterBarChip.Operator = FilterBarChipOperator;\nFilterBarChip.Value = FilterBarChipValue;\nFilterBarChip.Remove = FilterBarChipRemove;\n"],"names":["rendered","leaving","rootGroupOf","value","updateItem","updateTreeItem","items","ComboboxPrimitive"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filter-bar-chip-7X4Aw_WH.js","sources":["../src/ds/components/FilterBar/filter-bar-tree.ts","../src/ds/components/FilterBar/filter-bar-context.tsx","../src/ds/components/FilterBar/filter-bar-option-list.tsx","../src/ds/components/FilterBar/match-query.ts","../src/ds/components/FilterBar/use-value-suggestions.ts","../src/ds/components/FilterBar/use-value-step.ts","../src/ds/components/FilterBar/filter-bar-chip.tsx"],"sourcesContent":["import type { FilterBarExpression, FilterBarGroup, FilterBarItem, FilterBarLogic, FilterBarNode } from './types';\nimport { isFilterBarGroup } from './types';\n\nexport type FilterBarValueInput = FilterBarItem[] | FilterBarExpression;\n\nexport const ROOT_GROUP_ID = 'root';\n\nexport const normalize = (value: FilterBarValueInput): FilterBarExpression =>\n Array.isArray(value) ? { logic: 'and', nodes: value } : value;\n\n/** Hands back the shape the consumer gave us: flat arrays only ever contain items. */\nexport const denormalize = (expr: FilterBarExpression, flat: boolean): FilterBarValueInput =>\n flat ? expr.nodes.filter((node): node is FilterBarItem => !isFilterBarGroup(node)) : expr;\n\nexport type FlatEntry = { item: FilterBarItem; groupId?: string };\n\n/**\n * Items in document order (pre-order, depth-first), each tagged with the group it lives\n * in. A group's leaves sit where its advanced chip sits in the bar, so arrow navigation\n * walks the bar left to right.\n */\nexport const flattenItems = (expr: FilterBarExpression): FlatEntry[] => {\n const out: FlatEntry[] = [];\n const walk = (nodes: FilterBarNode[], groupId: string | undefined) => {\n for (const node of nodes) {\n if (isFilterBarGroup(node)) walk(node.nodes, node.id);\n else out.push(groupId ? { item: node, groupId } : { item: node });\n }\n };\n walk(expr.nodes, undefined);\n return out;\n};\n\nconst findGroupIn = (nodes: FilterBarNode[], groupId: string): FilterBarGroup | undefined => {\n for (const node of nodes) {\n if (!isFilterBarGroup(node)) continue;\n if (node.id === groupId) return node;\n const nested = findGroupIn(node.nodes, groupId);\n if (nested) return nested;\n }\n return undefined;\n};\n\nexport const findGroup = (expr: FilterBarExpression, groupId: string): FilterBarGroup | undefined =>\n findGroupIn(expr.nodes, groupId);\n\nexport const findItem = (expr: FilterBarExpression, itemId: string): FlatEntry | undefined =>\n flattenItems(expr).find(entry => entry.item.id === itemId);\n\n/** Nesting level of a group: root-level groups are at depth 1; `0` when not found. */\nexport const groupDepth = (expr: FilterBarExpression, groupId: string): number => {\n const walk = (nodes: FilterBarNode[], depth: number): number => {\n for (const node of nodes) {\n if (!isFilterBarGroup(node)) continue;\n if (node.id === groupId) return depth;\n const nested = walk(node.nodes, depth + 1);\n if (nested) return nested;\n }\n return 0;\n };\n return walk(expr.nodes, 1);\n};\n\n/** Number of leaf conditions under a group, at any depth. */\nexport const countLeaves = (group: FilterBarGroup): number =>\n group.nodes.reduce((sum, node) => sum + (isFilterBarGroup(node) ? countLeaves(node) : 1), 0);\n\n/** Ids of a group and every node below it. */\nexport const collectIds = (group: FilterBarGroup): string[] => [\n group.id,\n ...group.nodes.flatMap(node => (isFilterBarGroup(node) ? collectIds(node) : [node.id])),\n];\n\nconst mapGroup = (\n nodes: FilterBarNode[],\n groupId: string,\n fn: (group: FilterBarGroup) => FilterBarGroup,\n): FilterBarNode[] =>\n nodes.map(node => {\n if (!isFilterBarGroup(node)) return node;\n return node.id === groupId ? fn(node) : { ...node, nodes: mapGroup(node.nodes, groupId, fn) };\n });\n\nconst mapItems = (nodes: FilterBarNode[], fn: (item: FilterBarItem) => FilterBarItem): FilterBarNode[] =>\n nodes.map(node => (isFilterBarGroup(node) ? { ...node, nodes: mapItems(node.nodes, fn) } : fn(node)));\n\nconst filterNodes = (nodes: FilterBarNode[], keep: (node: FilterBarNode) => boolean): FilterBarNode[] =>\n nodes.filter(keep).map(node => (isFilterBarGroup(node) ? { ...node, nodes: filterNodes(node.nodes, keep) } : node));\n\nexport const updateItem = (\n expr: FilterBarExpression,\n itemId: string,\n patch: Partial<Omit<FilterBarItem, 'id'>>,\n): FilterBarExpression => ({\n ...expr,\n nodes: mapItems(expr.nodes, item => (item.id === itemId ? { ...item, ...patch } : item)),\n});\n\n/** Removes an item or a group by id at any depth. Groups left empty are kept (see `pruneEmptyGroups`). */\nexport const removeNode = (expr: FilterBarExpression, id: string): FilterBarExpression => ({\n ...expr,\n nodes: filterNodes(expr.nodes, node => node.id !== id),\n});\n\nexport const removeNodes = (expr: FilterBarExpression, ids: Iterable<string>): FilterBarExpression => {\n const drop = new Set(ids);\n return { ...expr, nodes: filterNodes(expr.nodes, node => !drop.has(node.id)) };\n};\n\nconst pruneNodes = (nodes: FilterBarNode[]): FilterBarNode[] =>\n nodes.flatMap((node): FilterBarNode[] => {\n if (!isFilterBarGroup(node)) return [node];\n const pruned = pruneNodes(node.nodes);\n return pruned.length === 0 ? [] : [{ ...node, nodes: pruned }];\n });\n\n/** Drops every group with no leaf left, bottom-up. */\nexport const pruneEmptyGroups = (expr: FilterBarExpression): FilterBarExpression => ({\n ...expr,\n nodes: pruneNodes(expr.nodes),\n});\n\nexport const insertItem = (\n expr: FilterBarExpression,\n groupId: string | undefined,\n item: FilterBarItem,\n): FilterBarExpression => {\n if (!groupId || groupId === ROOT_GROUP_ID) return { ...expr, nodes: [...expr.nodes, item] };\n return { ...expr, nodes: mapGroup(expr.nodes, groupId, group => ({ ...group, nodes: [...group.nodes, item] })) };\n};\n\nexport const setGroupLogic = (\n expr: FilterBarExpression,\n groupId: string,\n logic: FilterBarLogic,\n): FilterBarExpression => {\n if (groupId === ROOT_GROUP_ID) return { ...expr, logic };\n return { ...expr, nodes: mapGroup(expr.nodes, groupId, group => ({ ...group, logic })) };\n};\n\n/** Appends a group to the root, or inside `parentId`. */\nexport const createGroup = (\n expr: FilterBarExpression,\n parentId: string | undefined,\n group: FilterBarGroup,\n): FilterBarExpression => {\n if (!parentId || parentId === ROOT_GROUP_ID) return { ...expr, nodes: [...expr.nodes, group] };\n return { ...expr, nodes: mapGroup(expr.nodes, parentId, parent => ({ ...parent, nodes: [...parent.nodes, group] })) };\n};\n\n/** Drops removable items at any depth and every group that ends up empty; pinned items stay. */\nexport const clearRemovable = (expr: FilterBarExpression, pinned: ReadonlySet<string>): FilterBarExpression =>\n pruneEmptyGroups({\n ...expr,\n nodes: filterNodes(expr.nodes, node => isFilterBarGroup(node) || pinned.has(node.id)),\n });\n","/* eslint-disable react-refresh/only-export-components */\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport {\n clearRemovable,\n collectIds,\n createGroup,\n denormalize,\n findGroup,\n flattenItems,\n groupDepth,\n insertItem,\n normalize,\n pruneEmptyGroups,\n removeNode,\n setGroupLogic,\n updateItem as updateTreeItem,\n} from './filter-bar-tree';\nimport type { FilterBarValueInput } from './filter-bar-tree';\nimport { isFilterBarGroup } from './types';\nimport type {\n DraftStage,\n FilterBarCommit,\n FilterBarDraft,\n FilterBarExpression,\n FilterBarField,\n FilterBarGroup,\n FilterBarItem,\n FilterBarLogic,\n FilterBarNode,\n FilterBarOperator,\n FilterBarSegment,\n FilterBarValue,\n} from './types';\n\ntype SegmentKey = `${string}:${FilterBarSegment}`;\n\nconst SEGMENTS_LEFT_TO_RIGHT: FilterBarSegment[] = ['field', 'operator', 'value', 'remove'];\nconst SEGMENTS_RIGHT_TO_LEFT: FilterBarSegment[] = [...SEGMENTS_LEFT_TO_RIGHT].reverse();\n\n/** Default nesting bound for advanced-filter groups (root-level group = depth 1). */\nexport const DEFAULT_MAX_GROUP_DEPTH = 3;\n\n/**\n * Marks a focus scope: the bar and each open advanced-filter popover. Arrow navigation\n * never crosses scopes, so ←/→ inside a popover cannot land back in the bar.\n */\nexport const FILTER_BAR_SCOPE_ATTR = 'data-filter-bar-scope';\n\nconst scopeOf = (el: Element | null | undefined) => el?.closest(`[${FILTER_BAR_SCOPE_ATTR}]`) ?? null;\n\nconst stageOf = (draft: FilterBarDraft | null): DraftStage => {\n if (!draft) return 'none';\n return draft.operatorId ? 'operator' : 'field';\n};\n\nexport type FilterBarContextValue = {\n fields: FilterBarField[];\n operators: FilterBarOperator[];\n /** Every rendered item in visual order (groups flattened), including leaving ones. */\n items: FilterBarItem[];\n /** The rendered tree, including the pending commit and leaving nodes. */\n expression: FilterBarExpression;\n /** False when the consumer passed a flat `FilterBarItem[]`: no groups are offered. */\n groupsEnabled: boolean;\n /** Deepest allowed group nesting (root-level group = 1). */\n maxDepth: number;\n /** Filter under construction in the input, once a field is picked; `null` otherwise. */\n draft: FilterBarDraft | null;\n /** Progress or reset the draft. Its id is assigned on first field pick and kept afterwards. */\n setDraft: (next: Omit<FilterBarDraft, 'id' | 'from' | 'groupId'> | null) => void;\n /** Append an item for the draft, reusing its id so the draft chip becomes the item's chip. */\n commitDraft: (next: Required<Omit<FilterBarDraft, 'id' | 'from' | 'groupId'>>, value: FilterBarValue) => void;\n /** The draft that just became an item, until its chip has glinted or the bar moves on. */\n lastCommit: FilterBarCommit | null;\n settleCommit: () => void;\n updateItem: (id: string, patch: Partial<Omit<FilterBarItem, 'id'>>) => void;\n /** Removes a leaf. Its group stays, even empty, until the popover closes (see `setOpenGroup`). */\n removeItem: (id: string) => void;\n /** Ids of removed items and groups still rendered while their chip plays its exit animation. */\n leaving: ReadonlySet<string>;\n /** Called by a leaving chip once its exit animation has finished (or when nothing animates). */\n settleRemove: (id: string) => void;\n /** Removes every removable item (chips rendered with `removable={false}` stay) and every group left empty. */\n clear: () => void;\n /** Whether at least one item can be removed, i.e. whether Clear has anything to do. */\n hasRemovableItems: boolean;\n /** Called by chips so `clear` and the Clear button know which items are pinned. */\n registerNonRemovable: (itemId: string, nonRemovable: boolean) => void;\n /** Appends an empty group to the root (`undefined`) or inside `parentId`, and points the input at it. */\n addGroup: (parentId: string | undefined, logic: FilterBarLogic) => string;\n /** Removes a group and everything below it. */\n removeGroup: (groupId: string) => void;\n setLogic: (groupId: string, logic: FilterBarLogic) => void;\n /** Nesting level of a group (root-level = 1); 0 when unknown. */\n getGroupDepth: (groupId: string) => number;\n /** Root group whose advanced-filter popover is open. */\n openGroupId: string | null;\n /** Open a root group's popover, or close it with `null` (empty groups are pruned on close). */\n setOpenGroup: (groupId: string | null) => void;\n /** Group the input commits into; `undefined` = root. */\n inputTarget: string | undefined;\n /** Point the input at a group (or back at the root with `undefined`) and focus it. */\n openGroupInput: (groupId: string | undefined) => void;\n getField: (fieldId: string) => FilterBarField | undefined;\n getOperator: (operatorId: string) => FilterBarOperator | undefined;\n /** Operators allowed for a field (`field.operators` or every root operator). */\n getFieldOperators: (field: FilterBarField) => FilterBarOperator[];\n registerSegment: (itemId: string, segment: FilterBarSegment, el: HTMLElement | null) => void;\n registerInput: (el: HTMLInputElement | null) => void;\n /**\n * Focus a segment of the nearest editable chip starting at `fromIndex` and\n * walking in `direction` (read-only chips register no segments and are skipped).\n * Never leaves the focus scope of the currently focused element. Returns false if\n * nothing was focused.\n */\n focusChip: (fromIndex: number, direction: -1 | 1, segment: FilterBarSegment) => boolean;\n focusInput: () => void;\n /** Called by chips to move focus after a removal. */\n focusAfterRemove: (removedIndex: number) => void;\n announce: (message: string) => void;\n announcement: string;\n ariaLabel: string;\n};\n\nconst FilterBarContext = createContext<FilterBarContextValue | null>(null);\n\nexport function useFilterBarContext(): FilterBarContextValue {\n const ctx = useContext(FilterBarContext);\n if (!ctx) throw new Error('FilterBar compound components must be rendered inside <FilterBar>.');\n return ctx;\n}\n\nlet idCounter = 0;\nexport function createFilterId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') return crypto.randomUUID();\n idCounter += 1;\n return `filter-${idCounter}`;\n}\n\nexport function emptyValueFor(operator: FilterBarOperator | undefined): string | string[] {\n return operator?.arity === 'many' ? [] : '';\n}\n\nexport type FilterBarProviderProps = {\n fields: FilterBarField[];\n operators: FilterBarOperator[];\n value: FilterBarValueInput;\n /** Receives the same shape as `value` (method syntax so flat-only handlers stay assignable). */\n onValueChange(value: FilterBarValueInput): void;\n /** Derives ids for root-level items only; items inside groups always get a random id\n * because a group may hold several conditions on the same field. */\n createItemId?: (fieldId: string) => string;\n /** Deepest allowed group nesting (root-level group = 1). Defaults to 3. */\n maxDepth?: number;\n ariaLabel: string;\n children: ReactNode;\n};\n\nconst idsOf = (nodes: FilterBarNode[], out = new Set<string>()): Set<string> => {\n for (const node of nodes) {\n out.add(node.id);\n if (isFilterBarGroup(node)) idsOf(node.nodes, out);\n }\n return out;\n};\n\n/**\n * The previously rendered tree with the consumer's new `value` folded in: nodes still\n * present take their new version (in their old position), leaving nodes stay where they\n * were, and nodes the consumer added are appended. Once nothing is leaving the result is\n * exactly `next`, so consumer reorders are only deferred, never lost.\n */\nconst mergeNodes = (prev: FilterBarNode[], next: FilterBarNode[], leaving: ReadonlySet<string>): FilterBarNode[] => {\n const nextById = new Map(next.map(node => [node.id, node]));\n const seen = new Set<string>();\n const out: FilterBarNode[] = [];\n for (const old of prev) {\n const fresh = nextById.get(old.id);\n if (fresh) {\n seen.add(old.id);\n out.push(\n isFilterBarGroup(fresh) && isFilterBarGroup(old)\n ? { ...fresh, nodes: mergeNodes(old.nodes, fresh.nodes, leaving) }\n : fresh,\n );\n } else if (leaving.has(old.id)) {\n out.push(old);\n }\n }\n for (const node of next) if (!seen.has(node.id)) out.push(node);\n return out;\n};\n\nexport function FilterBarProvider({\n fields,\n operators,\n value,\n onValueChange,\n createItemId,\n maxDepth = DEFAULT_MAX_GROUP_DEPTH,\n ariaLabel,\n children,\n}: FilterBarProviderProps) {\n const segments = useRef(new Map<SegmentKey, HTMLElement>());\n const inputRef = useRef<HTMLInputElement | null>(null);\n const flat = Array.isArray(value);\n const expression = useMemo(() => normalize(value), [value]);\n const exprRef = useRef(expression);\n exprRef.current = expression;\n const [announcement, setAnnouncement] = useState('');\n const [nonRemovableIds, setNonRemovableIds] = useState<ReadonlySet<string>>(() => new Set());\n const [inputTarget, setInputTarget] = useState<string | undefined>(undefined);\n const [openGroupId, setOpenGroupId] = useState<string | null>(null);\n\n const emit = useCallback(\n (next: FilterBarExpression) => onValueChange(denormalize(next, flat)),\n [onValueChange, flat],\n );\n\n const getField = useCallback((fieldId: string) => fields.find(f => f.id === fieldId), [fields]);\n const getOperator = useCallback((operatorId: string) => operators.find(o => o.id === operatorId), [operators]);\n const getFieldOperators = useCallback(\n (field: FilterBarField) => {\n if (!field.operators) return operators;\n const allowed = new Set(field.operators);\n return operators.filter(o => allowed.has(o.id));\n },\n [operators],\n );\n\n const announce = useCallback((message: string) => setAnnouncement(message), []);\n\n const [draft, setDraftState] = useState<FilterBarDraft | null>(null);\n const draftRef = useRef(draft);\n draftRef.current = draft;\n const [lastCommit, setLastCommit] = useState<FilterBarCommit | null>(null);\n const settleCommit = useCallback(() => setLastCommit(prev => (prev ? { ...prev, glint: false } : null)), []);\n // Removed nodes stay rendered at their old position until their chip has animated out.\n const [leavingIds, setLeavingIds] = useState<ReadonlySet<string>>(() => new Set());\n const settleRemove = useCallback((id: string) => {\n setLeavingIds(prev => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n const markLeaving = useCallback((ids: Iterable<string>) => {\n const list = [...ids];\n if (list.length === 0) return;\n setLeavingIds(prev => new Set([...prev, ...list]));\n }, []);\n\n // Until the consumer reflects the commit in `value`, the committed item is ours to show;\n // nodes on their way out keep their place in the previously rendered tree.\n const renderedTreeRef = useRef<FilterBarNode[]>(expression.nodes);\n const { rendered, items, leaving, rootGroupOf } = useMemo(() => {\n const present = idsOf(expression.nodes);\n let rendered: FilterBarExpression =\n leavingIds.size === 0\n ? expression\n : { ...expression, nodes: mergeNodes(renderedTreeRef.current, expression.nodes, leavingIds) };\n if (lastCommit && !present.has(lastCommit.item.id)) {\n rendered = insertItem(rendered, lastCommit.groupId, lastCommit.item);\n }\n renderedTreeRef.current = rendered.nodes;\n const shown = idsOf(rendered.nodes);\n const leaving = new Set([...leavingIds].filter(id => shown.has(id) && !present.has(id)));\n // Each leaf's root-level group: arrow navigation lands on that group's advanced chip\n // when the leaf itself is unmounted (closed popover).\n const rootGroupOf = new Map<string, string>();\n for (const node of rendered.nodes) {\n if (isFilterBarGroup(node))\n for (const { item } of flattenItems({ logic: 'and', nodes: [node] })) rootGroupOf.set(item.id, node.id);\n }\n return { rendered, items: flattenItems(rendered).map(e => e.item), leaving, rootGroupOf };\n }, [expression, lastCommit, leavingIds]);\n\n // The draft chip is keyed by the id the committed item will carry, so React keeps the same\n // element through the commit. Consumers who derive ids themselves supply `createItemId` so\n // the id we hand back in `onValueChange` is the one they'll hand back in `value`.\n const newItemId = useCallback(\n (fieldId: string) => (createItemId && inputTarget === undefined ? createItemId(fieldId) : createFilterId()),\n [createItemId, inputTarget],\n );\n\n const setDraft = useCallback(\n (next: Omit<FilterBarDraft, 'id' | 'from' | 'groupId'> | null) => {\n setLastCommit(null);\n setDraftState(prev =>\n next\n ? {\n ...next,\n id: prev?.fieldId === next.fieldId ? prev.id : newItemId(next.fieldId),\n from: stageOf(prev),\n groupId: inputTarget,\n }\n : null,\n );\n },\n [newItemId, inputTarget],\n );\n\n const commitDraft = useCallback(\n ({ fieldId, operatorId }: Required<Omit<FilterBarDraft, 'id' | 'from' | 'groupId'>>, value: FilterBarValue) => {\n // Operators without a value commit straight from the operator step, before a draft exists.\n const id = draftRef.current?.id ?? newItemId(fieldId);\n const groupId = draftRef.current?.groupId ?? inputTarget;\n const item = { id, fieldId, operatorId, value };\n emit(insertItem(exprRef.current, groupId, item));\n setLastCommit({ item, from: stageOf(draftRef.current), glint: true, groupId });\n setDraftState(null);\n announce('Filter added');\n },\n [emit, announce, newItemId, inputTarget],\n );\n\n const updateItem = useCallback(\n (id: string, patch: Partial<Omit<FilterBarItem, 'id'>>) => {\n emit(updateTreeItem(exprRef.current, id, patch));\n },\n [emit],\n );\n\n const removeItem = useCallback(\n (id: string) => {\n markLeaving([id]);\n emit(removeNode(exprRef.current, id));\n setLastCommit(null);\n announce('Filter removed');\n },\n [emit, announce, markLeaving],\n );\n\n const releaseInputTarget = useCallback((gone: ReadonlySet<string>) => {\n setInputTarget(prev => (prev && gone.has(prev) ? undefined : prev));\n }, []);\n\n const removeGroup = useCallback(\n (groupId: string) => {\n const expr = exprRef.current;\n const group = findGroup(expr, groupId);\n const gone = new Set(group ? collectIds(group) : [groupId]);\n markLeaving(gone);\n emit(removeNode(expr, groupId));\n setLastCommit(null);\n setDraftState(null);\n releaseInputTarget(gone);\n setOpenGroupId(prev => (prev === groupId ? null : prev));\n announce('Advanced filter removed');\n },\n [emit, announce, markLeaving, releaseInputTarget],\n );\n\n const addGroup = useCallback(\n (parentId: string | undefined, logic: FilterBarLogic) => {\n const group: FilterBarGroup = { id: createFilterId(), kind: 'group', logic, nodes: [] };\n emit(createGroup(exprRef.current, parentId, group));\n setLastCommit(null);\n setDraftState(null);\n setInputTarget(group.id);\n announce(parentId ? 'Nested group added' : 'Advanced filter added');\n return group.id;\n },\n [emit, announce],\n );\n\n const setLogic = useCallback(\n (groupId: string, logic: FilterBarLogic) => {\n emit(setGroupLogic(exprRef.current, groupId, logic));\n announce(`Conditions joined with ${logic}`);\n },\n [emit, announce],\n );\n\n const getGroupDepth = useCallback((groupId: string) => groupDepth(exprRef.current, groupId), []);\n\n const setOpenGroup = useCallback(\n (groupId: string | null) => {\n setOpenGroupId(groupId);\n if (groupId !== null) return;\n // Closing the editor: whatever was left empty goes away, and the input returns to the bar.\n const expr = exprRef.current;\n const pruned = pruneEmptyGroups(expr);\n const kept = idsOf(pruned.nodes);\n const gone = new Set([...idsOf(expr.nodes)].filter(id => !kept.has(id)));\n if (gone.size > 0) {\n markLeaving(gone);\n emit(pruned);\n }\n setDraftState(null);\n setInputTarget(undefined);\n },\n [emit, markLeaving],\n );\n\n const focusInput = useCallback(() => {\n inputRef.current?.focus();\n }, []);\n\n const openGroupInput = useCallback(\n (groupId: string | undefined) => {\n setInputTarget(groupId);\n setDraftState(null);\n // The input for a group mounts with the next render and focuses itself.\n if (groupId === undefined) focusInput();\n },\n [focusInput],\n );\n\n const clear = useCallback(() => {\n const expr = exprRef.current;\n const next = clearRemovable(expr, nonRemovableIds);\n const kept = idsOf(next.nodes);\n const gone = new Set([...idsOf(expr.nodes)].filter(id => !kept.has(id)));\n markLeaving(gone);\n emit(next);\n setLastCommit(null);\n setDraftState(null);\n setInputTarget(undefined);\n setOpenGroupId(null);\n announce('All filters removed');\n }, [emit, announce, nonRemovableIds, markLeaving]);\n\n const hasRemovableItems = flattenItems(expression).some(({ item }) => !nonRemovableIds.has(item.id));\n\n const registerNonRemovable = useCallback((itemId: string, nonRemovable: boolean) => {\n setNonRemovableIds(prev => {\n if (prev.has(itemId) === nonRemovable) return prev;\n const next = new Set(prev);\n if (nonRemovable) next.add(itemId);\n else next.delete(itemId);\n return next;\n });\n }, []);\n\n const registerSegment = useCallback((itemId: string, segment: FilterBarSegment, el: HTMLElement | null) => {\n const key: SegmentKey = `${itemId}:${segment}`;\n if (el) segments.current.set(key, el);\n else segments.current.delete(key);\n }, []);\n\n const registerInput = useCallback((el: HTMLInputElement | null) => {\n // An unmounting input must not clear the ref if another input already took over.\n if (el) inputRef.current = el;\n else if (!inputRef.current?.isConnected) inputRef.current = null;\n }, []);\n\n // Chip indices refer to the rendered list (which may still hold leaving chips), not `value`.\n const renderedRef = useRef(items);\n renderedRef.current = items;\n\n const rootGroupRef = useRef(rootGroupOf);\n rootGroupRef.current = rootGroupOf;\n\n const focusChip = useCallback((fromIndex: number, direction: -1 | 1, segment: FilterBarSegment) => {\n const items = renderedRef.current;\n const rootGroupOf = rootGroupRef.current;\n // Stay within the scope of the focused element, or (after a mouse click, which does not\n // move focus) of the chip we navigate away from. Unknown scope: any chip qualifies.\n const origin = items[fromIndex - direction];\n const originEl = origin\n ? [...SEGMENTS_LEFT_TO_RIGHT].map(s => segments.current.get(`${origin.id}:${s}`)).find(Boolean)\n : null;\n const scope =\n scopeOf(typeof document === 'undefined' ? null : document.activeElement) ?? scopeOf(originEl) ?? undefined;\n // Custom chips may register only some segments (e.g. just `value`): when the\n // requested one is missing, land on the chip's outermost segment on the side\n // we arrive from.\n const fallbacks: FilterBarSegment[] = direction === -1 ? SEGMENTS_RIGHT_TO_LEFT : SEGMENTS_LEFT_TO_RIGHT;\n for (let i = fromIndex; i >= 0 && i < items.length; i += direction) {\n const item = items[i];\n if (!item) break;\n // A leaf inside a closed popover has no segments: land on its advanced chip instead.\n const ownerIds = [item.id, rootGroupOf.get(item.id)].filter((id): id is string => id !== undefined);\n for (const ownerId of ownerIds) {\n for (const candidate of [segment, ...fallbacks]) {\n const el = segments.current.get(`${ownerId}:${candidate}`);\n if (el && (scope === undefined || scopeOf(el) === scope)) {\n el.focus();\n return true;\n }\n }\n }\n }\n return false;\n }, []);\n\n const focusAfterRemove = useCallback(\n (removedIndex: number) => {\n // Called synchronously after `removeItem`, before React re-renders: the rendered list\n // still holds the removed chip and every neighbour's DOM node is still mounted.\n // Leaving neighbours register no segments, so they are skipped over.\n if (focusChip(removedIndex + 1, 1, 'value') || focusChip(removedIndex - 1, -1, 'value')) return;\n focusInput();\n },\n [focusChip, focusInput],\n );\n\n const ctx = useMemo<FilterBarContextValue>(\n () => ({\n fields,\n operators,\n items,\n expression: rendered,\n groupsEnabled: !flat,\n maxDepth,\n draft,\n setDraft,\n commitDraft,\n lastCommit,\n settleCommit,\n updateItem,\n removeItem,\n leaving,\n settleRemove,\n clear,\n hasRemovableItems,\n registerNonRemovable,\n addGroup,\n removeGroup,\n setLogic,\n getGroupDepth,\n openGroupId,\n setOpenGroup,\n inputTarget,\n openGroupInput,\n getField,\n getOperator,\n getFieldOperators,\n registerSegment,\n registerInput,\n focusChip,\n focusInput,\n focusAfterRemove,\n announce,\n announcement,\n ariaLabel,\n }),\n [\n fields,\n operators,\n items,\n rendered,\n flat,\n maxDepth,\n draft,\n setDraft,\n commitDraft,\n lastCommit,\n settleCommit,\n updateItem,\n removeItem,\n leaving,\n settleRemove,\n clear,\n hasRemovableItems,\n registerNonRemovable,\n addGroup,\n removeGroup,\n setLogic,\n getGroupDepth,\n openGroupId,\n setOpenGroup,\n inputTarget,\n openGroupInput,\n getField,\n getOperator,\n getFieldOperators,\n registerSegment,\n registerInput,\n focusChip,\n focusInput,\n focusAfterRemove,\n announce,\n announcement,\n ariaLabel,\n ],\n );\n\n return <FilterBarContext.Provider value={ctx}>{children}</FilterBarContext.Provider>;\n}\n","import { CheckIcon } from 'lucide-react';\nimport { forwardRef } from 'react';\nimport type { ReactNode } from 'react';\nimport type { FilterBarOption } from './types';\nimport { ComboboxPrimitive, comboboxStyles } from '@/ds/components/Combobox';\nimport { Spinner } from '@/ds/components/Spinner/spinner';\nimport { FluidMenuItems, useFluidMenu, useFluidMenuItemRef } from '@/ds/primitives/fluid-menu';\nimport { cn } from '@/lib/utils';\n\nexport type FilterBarOptionListProps<T> = {\n getKey: (option: T) => string;\n renderOption: (option: T) => ReactNode;\n /** Explicit check mark, used where Base UI's selection state is not the source of truth (multi-value step). */\n isSelected?: (option: T) => boolean;\n isLoading?: boolean;\n error?: unknown;\n emptyText?: string;\n 'aria-label': string;\n 'aria-multiselectable'?: boolean;\n};\n\n/** Default value row: the option's leading node (avatar, swatch…) followed by its label. */\nexport function FilterBarOptionLabel({ option }: { option: FilterBarOption }) {\n return (\n <>\n {option.start}\n <span className=\"min-w-0 truncate\">{option.label ?? option.value}</span>\n </>\n );\n}\n\nconst FluidItem = forwardRef<HTMLDivElement, ComboboxPrimitive.Item.Props>((props, ref) => (\n <ComboboxPrimitive.Item ref={useFluidMenuItemRef(ref)} {...props} />\n));\nFluidItem.displayName = 'FilterBarOptionItem';\n\n/**\n * List/status/empty rows for a `ComboboxPrimitive.Root`, laid out like the DS\n * `Combobox` popup (fluid hover highlight, scroller around the list). Items come\n * from the root's `items`; highlight and keyboard navigation are owned by Base UI.\n */\nexport function FilterBarOptionList<T>({\n getKey,\n renderOption,\n isSelected,\n isLoading,\n error,\n emptyText = 'No results.',\n 'aria-label': ariaLabel,\n 'aria-multiselectable': multiselectable,\n}: FilterBarOptionListProps<T>) {\n const idle = !isLoading && error === undefined;\n const menu = useFluidMenu<HTMLDivElement>();\n return (\n <>\n {isLoading && (\n <ComboboxPrimitive.Status className={comboboxStyles.empty}>\n <Spinner size=\"sm\" />\n <span>Loading…</span>\n </ComboboxPrimitive.Status>\n )}\n {!isLoading && error !== undefined && (\n <ComboboxPrimitive.Status className={comboboxStyles.empty}>Couldn't load values.</ComboboxPrimitive.Status>\n )}\n <ComboboxPrimitive.Empty className={comboboxStyles.empty}>{idle ? emptyText : null}</ComboboxPrimitive.Empty>\n <div\n className={cn(\n comboboxStyles.listScroller,\n 'max-h-[min(var(--spacing-dropdown),60dvh)]',\n menu.containerClassName,\n )}\n {...menu.getContainerProps({})}\n >\n <FluidMenuItems menu={menu}>\n <ComboboxPrimitive.List\n aria-label={ariaLabel}\n aria-multiselectable={multiselectable}\n className={comboboxStyles.list}\n >\n {(option: T) => {\n const selected = isSelected?.(option) ?? false;\n return (\n <FluidItem\n key={getKey(option)}\n value={option}\n data-selected={selected || undefined}\n className={cn(comboboxStyles.item, 'min-w-0')}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-1.5 truncate\">{renderOption(option)}</span>\n <span className={comboboxStyles.itemRightSlot}>\n <span className={comboboxStyles.checkContainer}>\n {isSelected ? (\n selected && <CheckIcon className={comboboxStyles.checkIcon} />\n ) : (\n <ComboboxPrimitive.ItemIndicator>\n <CheckIcon className={comboboxStyles.checkIcon} />\n </ComboboxPrimitive.ItemIndicator>\n )}\n </span>\n </span>\n </FluidItem>\n );\n }}\n </ComboboxPrimitive.List>\n </FluidMenuItems>\n </div>\n </>\n );\n}\n","/** Every whitespace-separated term of `query` must appear in `text` (case-insensitive). */\nexport function matchesQuery(text: string, query: string): boolean {\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean);\n if (terms.length === 0) return true;\n const haystack = text.toLowerCase();\n return terms.every(term => haystack.includes(term));\n}\n\n/** Base UI `filter` for `ComboboxPrimitive.Root`, matching on the item label. */\nexport function matchesQueryFilter<T>(item: T, query: string, itemToString?: (item: T) => string): boolean {\n return matchesQuery(itemToString ? itemToString(item) : String(item), query);\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { matchesQuery } from './match-query';\nimport type { FilterBarField, FilterBarOption } from './types';\n\nconst DEBOUNCE_MS = 150;\n\nconst BOOLEAN_OPTIONS: FilterBarOption[] = [\n { value: 'true', label: 'True' },\n { value: 'false', label: 'False' },\n];\n\n/** The field's suggestions, defaulting to True/False for boolean fields. */\nexport const getFieldSuggestions = (field: FilterBarField | undefined) =>\n field?.suggestions ?? (field?.type === 'boolean' ? BOOLEAN_OPTIONS : undefined);\n\nexport type UseValueSuggestionsOptions = {\n field: FilterBarField | undefined;\n operatorId: string;\n query: string;\n /** Resolver only runs while true (the value editor is open). */\n enabled: boolean;\n};\n\nexport type UseValueSuggestionsResult = {\n options: FilterBarOption[];\n isLoading: boolean;\n error: unknown;\n /** True when the field has any suggestions (static or lazy). */\n hasSuggestions: boolean;\n};\n\n/**\n * Value suggestions for a field. Static lists are filtered locally. Lazy\n * resolvers run only while `enabled`, are debounced on `query`, receive an\n * AbortSignal, and only the latest response is applied.\n */\nexport function useValueSuggestions({\n field,\n operatorId,\n query,\n enabled,\n}: UseValueSuggestionsOptions): UseValueSuggestionsResult {\n const suggestions = getFieldSuggestions(field);\n const resolver = typeof suggestions === 'function' ? suggestions : undefined;\n const staticOptions = Array.isArray(suggestions) ? suggestions : undefined;\n\n const [remote, setRemote] = useState<FilterBarOption[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<unknown>(undefined);\n const requestId = useRef(0);\n // Consumers typically define the resolver inline; a new identity must not refire (and abort) the request.\n const resolverRef = useRef(resolver);\n resolverRef.current = resolver;\n const hasResolver = Boolean(resolver);\n\n useEffect(() => {\n if (!hasResolver || !enabled) {\n setRemote([]);\n setIsLoading(false);\n setError(undefined);\n return;\n }\n\n const id = ++requestId.current;\n const controller = new AbortController();\n setIsLoading(true);\n\n const timer = setTimeout(() => {\n Promise.resolve()\n .then(() => resolverRef.current?.({ query, operatorId, signal: controller.signal }) ?? [])\n .then(result => {\n if (id !== requestId.current) return;\n setRemote(result);\n setError(undefined);\n setIsLoading(false);\n })\n .catch(err => {\n if (id !== requestId.current || controller.signal.aborted) return;\n setError(err);\n setIsLoading(false);\n });\n }, DEBOUNCE_MS);\n\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [hasResolver, enabled, query, operatorId]);\n\n const options = useMemo(() => {\n if (staticOptions) return staticOptions.filter(o => matchesQuery(o.label ?? o.value, query));\n return remote;\n }, [staticOptions, remote, query]);\n\n return {\n options,\n isLoading: Boolean(resolver) && isLoading,\n error,\n hasSuggestions: Boolean(suggestions),\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type { KeyboardEvent } from 'react';\nimport type { FilterBarField, FilterBarOperator, FilterBarOption, FilterBarValue } from './types';\nimport { parseFieldValue } from './types';\nimport { useValueSuggestions } from './use-value-suggestions';\n\nexport type UseValueStepOptions = {\n field: FilterBarField | undefined;\n operator: FilterBarOperator | undefined;\n query: string;\n enabled: boolean;\n initialValue?: FilterBarValue;\n onCommit: (value: FilterBarValue) => void;\n};\n\nconst toStrings = (value: FilterBarValue | undefined): string[] => (Array.isArray(value) ? value.map(String) : []);\n\n/**\n * Shared value-editing logic for the typeahead value step and the chip value\n * editor. Single arity: picking an option (or Enter on free text) commits.\n * Many arity: Enter/click toggles the highlighted option; Ctrl/Meta+Enter (or\n * `commitSelection`) commits the selection. List navigation itself is owned by\n * the surrounding `ComboboxPrimitive.Root`.\n */\nexport function useValueStep({ field, operator, query, enabled, initialValue, onCommit }: UseValueStepOptions) {\n const isMany = operator?.arity === 'many';\n // Selection is tracked as option strings; values are parsed to the field type on commit.\n const [selected, setSelected] = useState<string[]>(() => toStrings(initialValue));\n const initialValueRef = useRef(initialValue);\n initialValueRef.current = initialValue;\n\n // The editor stays mounted across opens: re-seed from the current value each time it opens.\n useEffect(() => {\n setSelected(enabled ? toStrings(initialValueRef.current) : []);\n }, [enabled]);\n\n const suggestions = useValueSuggestions({ field, operatorId: operator?.id ?? '', query, enabled });\n const type = field?.type;\n const allowFreeText = !field?.strict && type !== 'boolean';\n\n const toggle = useCallback((value: string) => {\n setSelected(current => (current.includes(value) ? current.filter(v => v !== value) : [...current, value]));\n }, []);\n\n const commit = useCallback(\n (values: string | string[]) =>\n onCommit(Array.isArray(values) ? values.map(v => parseFieldValue(type, v)) : parseFieldValue(type, values)),\n [onCommit, type],\n );\n\n const handleSelect = useCallback(\n (option: FilterBarOption) => {\n if (isMany) toggle(option.value);\n else commit(option.value);\n },\n [isMany, toggle, commit],\n );\n\n const commitSelection = useCallback(() => {\n if (selected.length === 0) return false;\n commit(selected);\n return true;\n }, [selected, commit]);\n\n const canCommitFreeText = useCallback(\n (text: string) => allowFreeText && text.length > 0 && (type !== 'number' || Number.isFinite(Number(text))),\n [allowFreeText, type],\n );\n\n const commitFreeText = useCallback(() => {\n const text = query.trim();\n if (!canCommitFreeText(text)) return false;\n commit(isMany ? (selected.includes(text) ? selected : [...selected, text]) : text);\n return true;\n }, [canCommitFreeText, query, isMany, selected, commit]);\n\n /**\n * Enter handling that Base UI does not cover: Ctrl/Meta+Enter commits a\n * multi-selection; plain Enter with nothing highlighted commits free text.\n * Returns `true` when the event was consumed.\n */\n const handleKeyDown = useCallback(\n (event: KeyboardEvent, highlighted: FilterBarOption | null): boolean => {\n if (event.key !== 'Enter') return false;\n if (isMany && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n return commitSelection() || commitFreeText();\n }\n if (highlighted === null) {\n event.preventDefault();\n return commitFreeText();\n }\n return false;\n },\n [isMany, commitSelection, commitFreeText],\n );\n\n return {\n isMany,\n selected,\n toggle,\n options: suggestions.options,\n isLoading: suggestions.isLoading,\n error: suggestions.error,\n hasSuggestions: suggestions.hasSuggestions,\n allowFreeText,\n /** True when the current query can be committed as free text (non-empty, numeric when the field is a number). */\n canCommitQuery: canCommitFreeText(query.trim()),\n handleSelect,\n handleKeyDown,\n commitSelection,\n commitFreeText,\n };\n}\n","/* eslint-disable react-refresh/only-export-components */\nimport type { BaseUIEvent } from '@base-ui/react/types';\nimport { LockIcon, PencilIcon, SearchIcon, XIcon } from 'lucide-react';\nimport type { LucideIcon } from 'lucide-react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport type { AnimationEvent, CSSProperties, ComponentProps, KeyboardEvent, MouseEvent, ReactNode } from 'react';\nimport { emptyValueFor, useFilterBarContext } from './filter-bar-context';\nimport { FilterBarOptionLabel, FilterBarOptionList } from './filter-bar-option-list';\nimport { matchesQueryFilter } from './match-query';\nimport type {\n DraftStage,\n FilterBarField,\n FilterBarFieldType,\n FilterBarItem,\n FilterBarOperator,\n FilterBarOption,\n FilterBarScalar,\n FilterBarSegment,\n FilterBarValue,\n} from './types';\nimport { useValueStep } from './use-value-step';\nimport { getFieldSuggestions } from './use-value-suggestions';\nimport { Button } from '@/ds/components/Button/Button';\nimport { ComboboxPrimitive, comboboxStyles } from '@/ds/components/Combobox';\nimport { Kbd } from '@/ds/components/Kbd/kbd';\nimport { controlHeight } from '@/ds/primitives/control-size';\nimport type { ControlSize } from '@/ds/primitives/control-size';\nimport { FLOATING_POSITION_METHOD } from '@/ds/primitives/floating';\nimport { inputSurfaceAndFocusWithinStyle } from '@/ds/primitives/form-element';\nimport './filter-bar-chip.css';\nimport { MENU_SIDE_OFFSET } from '@/ds/primitives/menu-item';\nimport { usePortalContainer } from '@/ds/primitives/portal-container';\nimport { useIsApplePlatform } from '@/hooks/use-keyboard-shortcut-label';\nimport { cn } from '@/lib/utils';\n\n// `filter-bar-segment` carries the left-to-right entrance (see filter-bar-chip.css).\n// No `first:`/`last:` rounding here: a segment is not reliably the first or last child.\n// Base UI interleaves a hidden input after every combobox and wraps an open trigger in\n// focus guards, so the rounded end would silently drop the moment a popup opened and the\n// segment's own state fill — the one state a chip has — would paint square corners\n// straight through the chip's pill edge. The chip clips instead (see `chipClass`).\nexport const segmentClass = cn(\n 'filter-bar-segment flex max-w-48 min-w-0 items-center gap-1 overflow-hidden px-2 text-label whitespace-nowrap outline-none',\n);\n\n// A filter bar is a dense row: it sits above a list, carries many chips at once, and never\n// competes with the page's own controls. Chip and typeahead pill read this one rung so they\n// stay the same height by construction rather than by two call sites agreeing.\nexport const FILTER_BAR_CONTROL_SIZE: ControlSize = 'sm';\n\n// A chip is a field whose value is edited in place, so it wears the field material rather than a\n// fill rung: on a light canvas a `bg-fill` chip read as a grey slab beside the white typeahead\n// pill it belongs to. The segments layer their own state over that card, which is why the chip\n// keeps `divide-border` for the internal seams and takes its outer edge from the material's rim.\n// `overflow-hidden` is what gives every segment its end cap: the chip is the only node that\n// knows where the pill ends, and it keeps knowing it while a framework injects children.\nexport const chipClass = cn(\n 'filter-bar-chip relative flex max-w-full items-stretch divide-x divide-border overflow-hidden rounded-full',\n inputSurfaceAndFocusWithinStyle,\n controlHeight[FILTER_BAR_CONTROL_SIZE],\n);\n\nexport const editableSegmentClass = cn(\n segmentClass,\n 'cursor-pointer hover:bg-fill-subtle hover:text-foreground',\n 'focus-visible:bg-fill-hover focus-visible:text-foreground data-[popup-open]:bg-fill-hover data-[popup-open]:text-foreground',\n);\n\n/** Field label with its optional leading icon — used by chips, the draft chip and field option lists. */\nexport function FilterBarFieldLabel({ field, label }: { field: FilterBarField | undefined; label?: string }) {\n const Icon = field?.icon;\n return (\n <>\n {Icon && <Icon className=\"size-[1.1em] shrink-0\" aria-hidden />}\n <span className=\"truncate\">{label ?? field?.label}</span>\n </>\n );\n}\n\n/** Inline style carrying a field's accent onto its field segment (text + icon). */\nexport const fieldSegmentAccentStyle = (field: FilterBarField | undefined) =>\n field?.color ? { color: field.color } : undefined;\n\n/** Segments a chip already showed before its latest step, given how far its draft had got. */\nconst settledSegments = (from: DraftStage, operatorImplied: boolean): number => {\n if (from === 'none') return 0;\n if (from === 'field' || operatorImplied) return 1;\n return 2;\n};\n\nexport const formatValue = (value: FilterBarValue, field: FilterBarField | undefined): string => {\n const suggestions = getFieldSuggestions(field);\n const options = Array.isArray(suggestions) ? suggestions : undefined;\n const label = (v: FilterBarScalar) => options?.find(o => o.value === String(v))?.label ?? String(v);\n return Array.isArray(value) ? value.map(label).join(', ') : label(value);\n};\n\ntype ChipContext = {\n item: FilterBarItem;\n index: number;\n field: FilterBarField | undefined;\n operator: FilterBarOperator | undefined;\n openSegment: FilterBarSegment | null;\n setOpenSegment: (segment: FilterBarSegment | null) => void;\n readOnly: boolean;\n /** Filter still being built in the input: segments are inert labels. */\n draft: boolean;\n /** Filter already removed from the value, playing its exit: segments are inert labels. */\n leaving: boolean;\n /** The field allows a single operator, so the operator segment is not shown. */\n operatorImplied: boolean;\n};\n\nconst ChipContext = createContext<ChipContext | null>(null);\nconst useChip = () => {\n const chip = useContext(ChipContext);\n if (!chip) throw new Error('FilterBarChip segments must be rendered inside <FilterBarChip>.');\n return chip;\n};\n\nexport type FilterBarChipProps = {\n item: FilterBarItem;\n /** Locked chip: plain labels, no editors, no remove button. */\n readOnly?: boolean;\n /** `false` keeps the chip editable but drops the remove button and ignores Backspace/Delete. */\n removable?: boolean;\n /**\n * Render the filter being built in the input (see `FilterBarContextValue.draft`): only\n * the picked segments show, as inert labels. Keyed by the draft id, the same element\n * carries on as the editable chip once the value is committed.\n */\n draft?: boolean;\n className?: string;\n /** Custom segment composition; defaults to Field · Operator · Value · Remove. */\n children?: ReactNode;\n};\n\nfunction isInsidePopup(target: EventTarget | null) {\n return target instanceof Element && Boolean(target.closest('[data-slot=\"filter-bar-editor\"]'));\n}\n\nexport function FilterBarChip({\n item,\n readOnly = false,\n removable = true,\n draft = false,\n className,\n children,\n}: FilterBarChipProps) {\n const ctx = useFilterBarContext();\n const [openSegment, setOpenSegment] = useState<FilterBarSegment | null>(null);\n const field = ctx.getField(item.fieldId);\n const operator = ctx.getOperator(item.operatorId);\n const index = ctx.items.findIndex(i => i.id === item.id);\n const rootRef = useRef<HTMLDivElement>(null);\n const leaving = ctx.leaving.has(item.id);\n\n const pinned = !draft && (readOnly || !removable);\n const { registerNonRemovable, settleRemove } = ctx;\n useEffect(() => {\n registerNonRemovable(item.id, pinned);\n return () => registerNonRemovable(item.id, false);\n }, [registerNonRemovable, item.id, pinned]);\n\n // A leaving chip is released once its exit animation has finished. With nothing to\n // animate (no `interpolate-size`, reduced motion, jsdom) it is released straight away.\n useEffect(() => {\n const root = rootRef.current;\n if (!leaving || !root) return;\n const animations = typeof root.getAnimations === 'function' ? root.getAnimations({ subtree: true }) : [];\n if (animations.length === 0) {\n settleRemove(item.id);\n return;\n }\n let cancelled = false;\n Promise.all(animations.map(animation => animation.finished))\n .then(() => {\n if (!cancelled) settleRemove(item.id);\n })\n // Animations cancelled by an unmount reject `finished`; nothing left to settle.\n .catch(() => {});\n return () => {\n cancelled = true;\n };\n }, [leaving, item.id, settleRemove]);\n\n const operatorImplied = field ? ctx.getFieldOperators(field).length === 1 : false;\n const label = [\n field?.label ?? item.fieldId,\n operatorImplied ? '' : (operator?.label ?? item.operatorId),\n draft ? '' : formatValue(item.value, field),\n ]\n .filter(Boolean)\n .join(' ');\n\n // The provider records where each draft step (and the final commit) started from, so\n // the entrance stagger resumes after the segments already on screen and the chip\n // glints once when it lands as a filter (see filter-bar-chip.css).\n const commit = !draft && ctx.lastCommit?.item.id === item.id ? ctx.lastCommit : null;\n const from = draft ? (ctx.draft?.from ?? 'none') : (commit?.from ?? 'none');\n const settled = settledSegments(from, operatorImplied);\n const shine = commit?.glint ?? false;\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n if (readOnly || draft || leaving || isInsidePopup(event.target)) return;\n const segments = Array.from(rootRef.current?.querySelectorAll<HTMLElement>('[data-filter-bar-segment]') ?? []);\n const current = segments.findIndex(el => el === event.target);\n\n switch (event.key) {\n case 'ArrowRight': {\n event.preventDefault();\n const next = segments[current + 1];\n if (next) next.focus();\n else if (!ctx.focusChip(index + 1, 1, 'field')) ctx.focusInput();\n return;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n const prev = segments[current - 1];\n if (prev) prev.focus();\n else ctx.focusChip(index - 1, -1, 'remove');\n return;\n }\n case 'Delete':\n case 'Backspace':\n if (!removable) return;\n event.preventDefault();\n ctx.removeItem(item.id);\n ctx.focusAfterRemove(index);\n return;\n default:\n }\n },\n [readOnly, draft, leaving, removable, ctx, index, item.id],\n );\n\n const chipValue = useMemo<ChipContext>(\n () => ({ item, index, field, operator, openSegment, setOpenSegment, readOnly, draft, leaving, operatorImplied }),\n [item, index, field, operator, openSegment, readOnly, draft, leaving, operatorImplied],\n );\n const content = children ?? (\n <>\n <FilterBarChipField />\n <FilterBarChipOperator />\n <FilterBarChipValue />\n {removable && <FilterBarChipRemove />}\n </>\n );\n return (\n <ChipContext.Provider value={chipValue}>\n <div\n ref={rootRef}\n role=\"group\"\n aria-label={label}\n // The input already announces the draft's progress through its placeholder.\n aria-hidden={draft || leaving || undefined}\n data-slot=\"filter-bar-chip\"\n data-draft={draft || undefined}\n data-readonly={readOnly || undefined}\n data-leaving={leaving || undefined}\n data-shine={(shine && !leaving) || undefined}\n className={cn(chipClass, leaving && 'pointer-events-none', className)}\n style={\n {\n '--filter-bar-segments-settled': settled,\n '--filter-bar-chip-shine': field?.color ?? 'currentColor',\n } as CSSProperties\n }\n onKeyDown={handleKeyDown}\n onClick={(event: MouseEvent) => event.stopPropagation()}\n onAnimationEnd={(event: AnimationEvent) => {\n if (event.animationName === 'filter-bar-chip-shine') ctx.settleCommit();\n }}\n >\n {readOnly && (\n <span\n className={cn(segmentClass, 'pr-0 text-muted-foreground [--filter-bar-segment-padding:0.5rem_0]')}\n title=\"This filter is locked\"\n >\n <LockIcon className=\"size-[1.1em]\" />\n </span>\n )}\n {content}\n </div>\n </ChipContext.Provider>\n );\n}\n\ntype SegmentComboboxProps<T> = {\n segment: Exclude<FilterBarSegment, 'remove'>;\n label: string;\n ariaLabel: string;\n items: readonly T[];\n itemToString: (item: T) => string;\n /** `null` when `items` are already filtered. */\n filter: null | ((item: T, query: string, itemToString?: (item: T) => string) => boolean);\n /** Current selection, surfaced through Base UI's `ItemIndicator`. */\n value?: T | null;\n query: string;\n onQueryChange: (query: string) => void;\n onSelect: (item: T) => void;\n onOpen?: () => void;\n /** Popup content: typically a `SegmentSearchInput` followed by a `FilterBarOptionList`. */\n children: ReactNode;\n};\n\n// Highlighted item of the enclosing SegmentCombobox, for popup inputs that route Enter.\nconst SegmentPopupContext = createContext<{ highlighted: unknown }>({ highlighted: null });\n\ntype SegmentSearchInputProps<T> = {\n placeholder: string;\n /** Leading icon. Defaults to a search glass; free-text editing uses a pencil. */\n icon?: LucideIcon;\n inputMode?: ComponentProps<'input'>['inputMode'];\n onKeyDown?: (event: BaseUIEvent<KeyboardEvent<HTMLInputElement>>, highlighted: T | null) => void;\n};\n\n/** The search/free-text input at the top of a segment popup. */\nfunction SegmentSearchInput<T>({\n placeholder,\n icon: Icon = SearchIcon,\n inputMode,\n onKeyDown,\n}: SegmentSearchInputProps<T>) {\n const { highlighted } = useContext(SegmentPopupContext);\n return (\n <div className={comboboxStyles.searchContainer}>\n <Icon className={comboboxStyles.searchIcon} />\n <ComboboxPrimitive.Input\n className={comboboxStyles.searchInput}\n placeholder={placeholder}\n inputMode={inputMode}\n onKeyDown={event => onKeyDown?.(event, highlighted as T | null)}\n />\n </div>\n );\n}\n\n/**\n * A chip segment: a button trigger that opens an option popup. The editor\n * owning the segment supplies items, filtering, selection routing and the\n * popup content.\n */\nfunction SegmentCombobox<T>({\n segment,\n label,\n ariaLabel,\n items,\n itemToString,\n filter,\n value = null,\n query,\n onQueryChange,\n onSelect,\n onOpen,\n children,\n}: SegmentComboboxProps<T>) {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const container = usePortalContainer();\n const open = chip.openSegment === segment;\n const [highlighted, setHighlighted] = useState<T | null>(null);\n\n const isField = segment === 'field';\n const content = isField ? (\n <FilterBarFieldLabel field={chip.field} label={label} />\n ) : (\n <span className=\"truncate\">{label}</span>\n );\n\n if (chip.readOnly || chip.draft || chip.leaving) {\n return (\n <span\n className={cn(segmentClass, isField && 'text-foreground')}\n style={isField ? fieldSegmentAccentStyle(chip.field) : undefined}\n title={label}\n >\n {content}\n </span>\n );\n }\n\n return (\n <ComboboxPrimitive.Root<T>\n items={items}\n itemToStringLabel={itemToString}\n filter={filter}\n value={value}\n onValueChange={(item, details) => {\n // The editor decides what a pick means (and when to close); Base UI must not keep it.\n details.cancel();\n if (item !== null) onSelect(item);\n }}\n inputValue={query}\n onInputValueChange={(next, details) => {\n if (details.reason === 'input-change') onQueryChange(next);\n }}\n onItemHighlighted={item => setHighlighted(item ?? null)}\n open={open}\n onOpenChange={next => {\n if (next) onOpen?.();\n else onQueryChange('');\n chip.setOpenSegment(next ? segment : null);\n }}\n // See FilterBarInput: the runtime supports 'always' although ComboboxRoot types it as boolean.\n autoHighlight={'always' as unknown as boolean}\n modal={false}\n >\n <ComboboxPrimitive.Trigger\n ref={el => ctx.registerSegment(chip.item.id, segment, el)}\n render={\n <button\n type=\"button\"\n data-filter-bar-segment=\"\"\n tabIndex={segment === 'value' ? 0 : -1}\n aria-label={`${ariaLabel}: ${label}`}\n title={label}\n className={cn(editableSegmentClass, isField && 'text-foreground')}\n style={isField ? fieldSegmentAccentStyle(chip.field) : undefined}\n />\n }\n >\n {content}\n </ComboboxPrimitive.Trigger>\n <ComboboxPrimitive.Portal container={container}>\n <ComboboxPrimitive.Positioner\n align=\"start\"\n sideOffset={MENU_SIDE_OFFSET}\n positionMethod={FLOATING_POSITION_METHOD}\n className={comboboxStyles.positioner}\n >\n <ComboboxPrimitive.Popup className={cn(comboboxStyles.popup, 'min-w-44')} data-slot=\"filter-bar-editor\">\n <SegmentPopupContext.Provider value={{ highlighted }}>{children}</SegmentPopupContext.Provider>\n </ComboboxPrimitive.Popup>\n </ComboboxPrimitive.Positioner>\n </ComboboxPrimitive.Portal>\n </ComboboxPrimitive.Root>\n );\n}\n\nconst fieldLabel = (field: FilterBarField) => field.label;\nconst operatorLabel = (operator: FilterBarOperator) => operator.label;\nconst optionLabel = (option: FilterBarOption) => option.label ?? option.value;\n\nfunction FieldEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const [query, setQuery] = useState('');\n\n const onSelect = useCallback(\n (field: FilterBarField) => {\n const allowed = ctx.getFieldOperators(field);\n const nextOperator = allowed.find(o => o.id === chip.item.operatorId) ?? allowed[0];\n const arityChanged = nextOperator?.arity !== chip.operator?.arity;\n ctx.updateItem(chip.item.id, {\n fieldId: field.id,\n operatorId: nextOperator?.id ?? chip.item.operatorId,\n value: arityChanged || field.id !== chip.item.fieldId ? emptyValueFor(nextOperator) : chip.item.value,\n });\n chip.setOpenSegment(null);\n },\n [ctx, chip],\n );\n\n return (\n <SegmentCombobox<FilterBarField>\n segment=\"field\"\n ariaLabel=\"Field\"\n label={chip.field?.label ?? chip.item.fieldId}\n items={ctx.fields}\n itemToString={fieldLabel}\n filter={matchesQueryFilter}\n value={chip.field}\n query={query}\n onQueryChange={setQuery}\n onSelect={onSelect}\n >\n <SegmentSearchInput placeholder=\"Change field…\" />\n <FilterBarOptionList<FilterBarField>\n aria-label=\"Fields\"\n getKey={f => f.id}\n renderOption={f => <FilterBarFieldLabel field={f} />}\n emptyText=\"No matching field.\"\n />\n </SegmentCombobox>\n );\n}\n\nfunction OperatorEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const [query, setQuery] = useState('');\n const options = useMemo(() => (chip.field ? ctx.getFieldOperators(chip.field) : ctx.operators), [ctx, chip.field]);\n\n const onSelect = useCallback(\n (operator: FilterBarOperator) => {\n const arityChanged = (operator.arity ?? 'one') !== (chip.operator?.arity ?? 'one');\n ctx.updateItem(chip.item.id, {\n operatorId: operator.id,\n value: arityChanged ? emptyValueFor(operator) : chip.item.value,\n });\n chip.setOpenSegment(null);\n },\n [ctx, chip],\n );\n\n return (\n <SegmentCombobox<FilterBarOperator>\n segment=\"operator\"\n ariaLabel=\"Operator\"\n label={chip.operator?.label ?? chip.item.operatorId}\n items={options}\n itemToString={operatorLabel}\n filter={matchesQueryFilter}\n value={chip.operator}\n query={query}\n onQueryChange={setQuery}\n onSelect={onSelect}\n >\n <SegmentSearchInput placeholder=\"Change operator…\" />\n <FilterBarOptionList<FilterBarOperator>\n aria-label=\"Operators\"\n getKey={o => o.id}\n renderOption={o => o.label}\n emptyText=\"No matching operator.\"\n />\n </SegmentCombobox>\n );\n}\n\nfunction ValueEditor() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n const open = chip.openSegment === 'value';\n const [query, setQuery] = useState('');\n\n const close = useCallback(() => chip.setOpenSegment(null), [chip]);\n const onCommit = useCallback(\n (value: FilterBarValue) => {\n ctx.updateItem(chip.item.id, { value });\n close();\n },\n [ctx, chip.item.id, close],\n );\n\n const step = useValueStep({\n field: chip.field,\n operator: chip.operator,\n query,\n enabled: open,\n initialValue: chip.item.value,\n onCommit,\n });\n\n const ValueInput = VALUE_INPUTS[chip.field?.type ?? 'text'];\n\n return (\n <SegmentCombobox<FilterBarOption>\n segment=\"value\"\n ariaLabel=\"Value\"\n label={formatValue(chip.item.value, chip.field) || '…'}\n items={step.options}\n itemToString={optionLabel}\n filter={null}\n query={query}\n onQueryChange={setQuery}\n onSelect={step.handleSelect}\n // Prefill free-text values only; with suggestions, the current value is shown as checked instead.\n onOpen={() =>\n setQuery(!Array.isArray(chip.item.value) && !chip.field?.suggestions ? String(chip.item.value) : '')\n }\n >\n <ValueInput step={step} onCancel={close} />\n </SegmentCombobox>\n );\n}\n\ntype ValueInputProps = {\n step: ReturnType<typeof useValueStep>;\n onCancel: () => void;\n};\n\n/** Suggestion list + multi-select footer, shared by every value input. */\nfunction ValueOptions({ step, onCancel }: ValueInputProps) {\n const chip = useChip();\n const modEnterLabel = useIsApplePlatform() ? '⌘↵' : 'Ctrl ↵';\n return (\n <>\n {step.hasSuggestions && (\n <FilterBarOptionList<FilterBarOption>\n aria-label=\"Values\"\n aria-multiselectable={step.isMany || undefined}\n getKey={o => o.value}\n renderOption={option => <FilterBarOptionLabel option={option} />}\n isSelected={o => (step.isMany ? step.selected.includes(o.value) : String(chip.item.value) === o.value)}\n isLoading={step.isLoading}\n error={step.error}\n emptyText={step.allowFreeText ? 'No suggestions — press Enter to use your text.' : 'No matching value.'}\n />\n )}\n {step.isMany && (\n <div className=\"flex items-center justify-end gap-1 border-t border-border p-1\">\n <Button size=\"sm\" variant=\"ghost\" onClick={onCancel}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"default\" onClick={() => step.commitSelection() || step.commitFreeText()}>\n Done\n <Kbd size=\"xs\">{modEnterLabel}</Kbd>\n </Button>\n </div>\n )}\n </>\n );\n}\n\n/** Free-text (optionally suggestion-backed) value input; text and number share it. */\nfunction FreeTextValueInput({\n step,\n onCancel,\n inputMode,\n noun,\n}: ValueInputProps & { inputMode?: ComponentProps<'input'>['inputMode']; noun: string }) {\n return (\n <>\n <SegmentSearchInput<FilterBarOption>\n icon={step.hasSuggestions ? SearchIcon : PencilIcon}\n inputMode={inputMode}\n placeholder={\n step.hasSuggestions\n ? step.allowFreeText\n ? `Search or type a ${noun}…`\n : `Search ${noun}s…`\n : `Type a ${noun}…`\n }\n onKeyDown={(event, highlighted) => {\n const highlightedOption = step.hasSuggestions ? highlighted : null;\n const handled = step.handleKeyDown(event, highlightedOption);\n // Base UI closes on Enter when nothing is highlighted; a rejected free-text value must keep the editor open.\n if (handled || (event.key === 'Enter' && highlightedOption === null)) event.preventBaseUIHandler();\n }}\n />\n <ValueOptions step={step} onCancel={onCancel} />\n </>\n );\n}\n\nfunction TextValueInput(props: ValueInputProps) {\n return <FreeTextValueInput {...props} noun=\"value\" />;\n}\n\nfunction NumberValueInput(props: ValueInputProps) {\n return <FreeTextValueInput {...props} inputMode=\"decimal\" noun=\"number\" />;\n}\n\n/** Select-like: no search input, just the True/False (or custom) options. */\nfunction BooleanValueInput(props: ValueInputProps) {\n return <ValueOptions {...props} />;\n}\n\nconst VALUE_INPUTS: Record<FilterBarFieldType, (props: ValueInputProps) => ReactNode> = {\n text: TextValueInput,\n number: NumberValueInput,\n boolean: BooleanValueInput,\n};\n\nexport function FilterBarChipField() {\n return <FieldEditor />;\n}\n\nexport function FilterBarChipOperator() {\n const chip = useChip();\n if (chip.operatorImplied) return null;\n if (chip.draft && !chip.operator) return null;\n return <OperatorEditor />;\n}\n\nexport function FilterBarChipValue() {\n const chip = useChip();\n if (chip.draft || (chip.operator?.arity ?? 'one') === 'none') return null;\n return <ValueEditor />;\n}\n\nexport function FilterBarChipRemove() {\n const ctx = useFilterBarContext();\n const chip = useChip();\n if (chip.readOnly || chip.draft) return null;\n const removeClass = cn(editableSegmentClass, 'px-1.5 text-muted-foreground [--filter-bar-segment-padding:0.375rem]');\n if (chip.leaving) {\n // Keep the × on screen so it folds away with the other segments.\n return (\n <span className={removeClass}>\n <XIcon className=\"size-[1.1em]\" />\n </span>\n );\n }\n const label = `Remove ${chip.field?.label ?? chip.item.fieldId} filter`;\n return (\n <button\n type=\"button\"\n data-filter-bar-segment=\"\"\n tabIndex={-1}\n aria-label={label}\n title={label}\n ref={el => ctx.registerSegment(chip.item.id, 'remove', el)}\n className={removeClass}\n onClick={() => {\n ctx.removeItem(chip.item.id);\n ctx.focusAfterRemove(chip.index);\n }}\n >\n <XIcon className=\"size-[1.1em]\" />\n </button>\n );\n}\n\nFilterBarChip.Field = FilterBarChipField;\nFilterBarChip.Operator = FilterBarChipOperator;\nFilterBarChip.Value = FilterBarChipValue;\nFilterBarChip.Remove = FilterBarChipRemove;\n"],"names":["rendered","leaving","rootGroupOf","value","updateItem","updateTreeItem","items","ComboboxPrimitive"],"mappings":"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"}
|
|
@@ -4,12 +4,12 @@ require('./filter-bar-chip.css');const jsxRuntime = require('react/jsx-runtime')
|
|
|
4
4
|
const lucideReact = require('lucide-react');
|
|
5
5
|
const React = require('react');
|
|
6
6
|
const types = require('./types-Ns4ZNp-g.cjs');
|
|
7
|
-
const comboboxStyles = require('./combobox-styles-
|
|
7
|
+
const comboboxStyles = require('./combobox-styles-LHrC0tU0.cjs');
|
|
8
8
|
const combobox = require('@base-ui/react/combobox');
|
|
9
9
|
const spinner = require('./spinner-BCpN7LL9.cjs');
|
|
10
10
|
const primitives_fluidMenu = require('./primitives/fluid-menu.cjs.js');
|
|
11
11
|
const utils_cn = require('./cn-DG0X1KEP.cjs');
|
|
12
|
-
const Button = require('./Button-
|
|
12
|
+
const Button = require('./Button-BAMnPqos.cjs');
|
|
13
13
|
const kbd = require('./kbd-BptPsKP6.cjs');
|
|
14
14
|
const primitives_controlSize = require('./primitives/control-size.cjs.js');
|
|
15
15
|
const primitives_floating = require('./primitives/floating.cjs.js');
|
|
@@ -1228,4 +1228,4 @@ exports.matchesQueryFilter = matchesQueryFilter;
|
|
|
1228
1228
|
exports.segmentClass = segmentClass;
|
|
1229
1229
|
exports.useFilterBarContext = useFilterBarContext;
|
|
1230
1230
|
exports.useValueStep = useValueStep;
|
|
1231
|
-
//# sourceMappingURL=filter-bar-chip-
|
|
1231
|
+
//# sourceMappingURL=filter-bar-chip-BdZHI76J.cjs.map
|