@flanksource/clicky-ui 0.3.16 → 0.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai.cjs +12 -6
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +10 -4
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +36 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +37 -1
- package/dist/chat.js.map +1 -1
- package/dist/components/Combobox.cjs +122 -153
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +124 -155
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ComboboxControl.cjs +145 -0
- package/dist/components/ComboboxControl.cjs.map +1 -0
- package/dist/components/ComboboxControl.d.ts +37 -0
- package/dist/components/ComboboxControl.d.ts.map +1 -0
- package/dist/components/ComboboxControl.js +145 -0
- package/dist/components/ComboboxControl.js.map +1 -0
- package/dist/components/ComboboxMenu.cjs +31 -14
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +31 -14
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ComboboxTags.cjs +40 -0
- package/dist/components/ComboboxTags.cjs.map +1 -0
- package/dist/components/ComboboxTags.d.ts +8 -0
- package/dist/components/ComboboxTags.d.ts.map +1 -0
- package/dist/components/ComboboxTags.js +40 -0
- package/dist/components/ComboboxTags.js.map +1 -0
- package/dist/components/ErrorWrapper.cjs +168 -0
- package/dist/components/ErrorWrapper.cjs.map +1 -0
- package/dist/components/ErrorWrapper.d.ts +19 -0
- package/dist/components/ErrorWrapper.d.ts.map +1 -0
- package/dist/components/ErrorWrapper.js +168 -0
- package/dist/components/ErrorWrapper.js.map +1 -0
- package/dist/components/FilterBar.cjs +64 -2
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +18 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +64 -2
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JSONPathField.cjs +91 -0
- package/dist/components/JSONPathField.cjs.map +1 -0
- package/dist/components/JSONPathField.d.ts +19 -0
- package/dist/components/JSONPathField.d.ts.map +1 -0
- package/dist/components/JSONPathField.js +91 -0
- package/dist/components/JSONPathField.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +8 -4
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +8 -4
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/TreePickerField.cjs +22 -4
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts +22 -2
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +22 -4
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/TriStateToggle.cjs +53 -0
- package/dist/components/TriStateToggle.cjs.map +1 -0
- package/dist/components/TriStateToggle.d.ts +27 -0
- package/dist/components/TriStateToggle.d.ts.map +1 -0
- package/dist/components/TriStateToggle.js +53 -0
- package/dist/components/TriStateToggle.js.map +1 -0
- package/dist/components/combobox-types.d.ts +16 -1
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/combobox-utils.cjs +26 -0
- package/dist/components/combobox-utils.cjs.map +1 -1
- package/dist/components/combobox-utils.d.ts +10 -0
- package/dist/components/combobox-utils.d.ts.map +1 -1
- package/dist/components/combobox-utils.js +26 -0
- package/dist/components/combobox-utils.js.map +1 -1
- package/dist/components/filter-bar-utils.cjs +5 -0
- package/dist/components/filter-bar-utils.cjs.map +1 -1
- package/dist/components/filter-bar-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-utils.js +5 -0
- package/dist/components/filter-bar-utils.js.map +1 -1
- package/dist/components/json-schema-form-accordion-array.cjs +290 -0
- package/dist/components/json-schema-form-accordion-array.cjs.map +1 -0
- package/dist/components/json-schema-form-accordion-array.d.ts +7 -0
- package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-accordion-array.js +290 -0
- package/dist/components/json-schema-form-accordion-array.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +99 -110
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +98 -109
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-error-display.cjs +4 -2
- package/dist/components/json-schema-form-error-display.cjs.map +1 -1
- package/dist/components/json-schema-form-error-display.d.ts +4 -2
- package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
- package/dist/components/json-schema-form-error-display.js +4 -2
- package/dist/components/json-schema-form-error-display.js.map +1 -1
- package/dist/components/json-schema-form-extensions.cjs +10 -0
- package/dist/components/json-schema-form-extensions.cjs.map +1 -0
- package/dist/components/json-schema-form-extensions.d.ts +8 -0
- package/dist/components/json-schema-form-extensions.d.ts.map +1 -0
- package/dist/components/json-schema-form-extensions.js +10 -0
- package/dist/components/json-schema-form-extensions.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +25 -101
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +1 -32
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +28 -104
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +131 -0
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -0
- package/dist/components/json-schema-form-item-summary.d.ts +13 -0
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -0
- package/dist/components/json-schema-form-item-summary.js +131 -0
- package/dist/components/json-schema-form-item-summary.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +156 -0
- package/dist/components/json-schema-form-layout.cjs.map +1 -0
- package/dist/components/json-schema-form-layout.d.ts +43 -0
- package/dist/components/json-schema-form-layout.d.ts.map +1 -0
- package/dist/components/json-schema-form-layout.js +156 -0
- package/dist/components/json-schema-form-layout.js.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.cjs +149 -0
- package/dist/components/json-schema-form-lookup-tree.cjs.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.d.ts +22 -0
- package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.js +149 -0
- package/dist/components/json-schema-form-lookup-tree.js.map +1 -0
- package/dist/components/json-schema-form-object.cjs +11 -4
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +11 -4
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +51 -28
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +51 -28
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +62 -13
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts +1 -0
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +62 -13
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-table-array.cjs +123 -0
- package/dist/components/json-schema-form-table-array.cjs.map +1 -0
- package/dist/components/json-schema-form-table-array.d.ts +7 -0
- package/dist/components/json-schema-form-table-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-table-array.js +123 -0
- package/dist/components/json-schema-form-table-array.js.map +1 -0
- package/dist/components/json-schema-form-tone.cjs +34 -0
- package/dist/components/json-schema-form-tone.cjs.map +1 -0
- package/dist/components/json-schema-form-tone.d.ts +8 -0
- package/dist/components/json-schema-form-tone.d.ts.map +1 -0
- package/dist/components/json-schema-form-tone.js +34 -0
- package/dist/components/json-schema-form-tone.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +79 -10
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +47 -4
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +19 -4
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +47 -4
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/tri-state.cjs +8 -0
- package/dist/components/tri-state.cjs.map +1 -0
- package/dist/components/tri-state.d.ts +5 -0
- package/dist/components/tri-state.d.ts.map +1 -0
- package/dist/components/tri-state.js +8 -0
- package/dist/components/tri-state.js.map +1 -0
- package/dist/components/useComboboxLayout.cjs +59 -0
- package/dist/components/useComboboxLayout.cjs.map +1 -0
- package/dist/components/useComboboxLayout.d.ts +5 -0
- package/dist/components/useComboboxLayout.d.ts.map +1 -0
- package/dist/components/useComboboxLayout.js +59 -0
- package/dist/components/useComboboxLayout.js.map +1 -0
- package/dist/components.cjs +21 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +14 -4
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +22 -1
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +51 -2
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +10 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +51 -2
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +215 -63
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +65 -3
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +215 -63
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/LogsTable.cjs +10 -1
- package/dist/data/LogsTable.cjs.map +1 -1
- package/dist/data/LogsTable.d.ts +3 -1
- package/dist/data/LogsTable.d.ts.map +1 -1
- package/dist/data/LogsTable.js +10 -1
- package/dist/data/LogsTable.js.map +1 -1
- package/dist/data/ServerTimingBadge.cjs +64 -0
- package/dist/data/ServerTimingBadge.cjs.map +1 -0
- package/dist/data/ServerTimingBadge.d.ts +9 -0
- package/dist/data/ServerTimingBadge.d.ts.map +1 -0
- package/dist/data/ServerTimingBadge.js +64 -0
- package/dist/data/ServerTimingBadge.js.map +1 -0
- package/dist/data/TaskManager.cjs +99 -14
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +100 -15
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskProgress.cjs +50 -11
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +2 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +50 -11
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.cjs +289 -0
- package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -0
- package/dist/data/ai/AdvancedChatConfig.d.ts +21 -0
- package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -0
- package/dist/data/ai/AdvancedChatConfig.js +289 -0
- package/dist/data/ai/AdvancedChatConfig.js.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.cjs +120 -0
- package/dist/data/ai/AdvancedCostsPanel.cjs.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.d.ts +16 -0
- package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.js +120 -0
- package/dist/data/ai/AdvancedCostsPanel.js.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.cjs +74 -0
- package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.d.ts +16 -0
- package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.js +74 -0
- package/dist/data/ai/ChatWindow.catalogs.js.map +1 -0
- package/dist/data/ai/ChatWindow.cjs +86 -100
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +88 -102
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.d.ts +2 -4
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +120 -0
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.runtime.d.ts +20 -0
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.runtime.js +120 -0
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -0
- package/dist/data/ai/ChatWindow.thread-status.cjs +14 -0
- package/dist/data/ai/ChatWindow.thread-status.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.thread-status.d.ts +5 -0
- package/dist/data/ai/ChatWindow.thread-status.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.thread-status.js +14 -0
- package/dist/data/ai/ChatWindow.thread-status.js.map +1 -0
- package/dist/data/ai/ChatWindow.thread.cjs +68 -0
- package/dist/data/ai/ChatWindow.thread.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.thread.d.ts +16 -0
- package/dist/data/ai/ChatWindow.thread.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.thread.js +68 -0
- package/dist/data/ai/ChatWindow.thread.js.map +1 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +20 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +17 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.js +20 -0
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +13 -5
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +3 -1
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +3 -1
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +101 -89
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +6 -10
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +103 -91
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/model.cjs +47 -0
- package/dist/data/ai/PromptRunEditor/model.cjs.map +1 -0
- package/dist/data/ai/PromptRunEditor/model.d.ts +17 -0
- package/dist/data/ai/PromptRunEditor/model.d.ts.map +1 -0
- package/dist/data/ai/PromptRunEditor/model.js +47 -0
- package/dist/data/ai/PromptRunEditor/model.js.map +1 -0
- package/dist/data/ai/RuntimeModePicker.cjs +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
- package/dist/data/ai/RuntimeModePicker.js +1 -1
- package/dist/data/ai/RuntimeModePicker.js.map +1 -1
- package/dist/data/ai/SessionInspector.files.cjs +26 -43
- package/dist/data/ai/SessionInspector.files.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.files.js +26 -43
- package/dist/data/ai/SessionInspector.files.js.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
- package/dist/data/ai/SessionInspector.model.cjs +1 -1
- package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.model.js +1 -1
- package/dist/data/ai/SessionInspector.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.header.cjs +17 -9
- package/dist/data/ai/SessionViewer.header.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.header.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.header.js +17 -9
- package/dist/data/ai/SessionViewer.header.js.map +1 -1
- package/dist/data/ai/SessionViewer.model.cjs +2 -0
- package/dist/data/ai/SessionViewer.model.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.model.d.ts +4 -0
- package/dist/data/ai/SessionViewer.model.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.model.js +2 -0
- package/dist/data/ai/SessionViewer.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +4 -16
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +4 -16
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SessionViewer.unified.d.ts +1 -0
- package/dist/data/ai/SessionViewer.unified.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +12 -3
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +12 -3
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +2 -2
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/ThreadPicker.cjs +65 -3
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.d.ts +13 -5
- package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
- package/dist/data/ai/ThreadPicker.js +65 -3
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +65 -685
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +15 -17
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +64 -683
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +148 -0
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -0
- package/dist/data/ai/ToolPreferences.model.d.ts +31 -0
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -0
- package/dist/data/ai/ToolPreferences.model.js +148 -0
- package/dist/data/ai/ToolPreferences.model.js.map +1 -0
- package/dist/data/ai/ToolPreferencesList.cjs +270 -0
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -0
- package/dist/data/ai/ToolPreferencesList.d.ts +18 -0
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -0
- package/dist/data/ai/ToolPreferencesList.js +270 -0
- package/dist/data/ai/ToolPreferencesList.js.map +1 -0
- package/dist/data/ai/agent-action-icons.cjs.map +1 -1
- package/dist/data/ai/agent-action-icons.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +4 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +7 -0
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +4 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +7 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/session-tones.cjs +67 -0
- package/dist/data/ai/session-tones.cjs.map +1 -0
- package/dist/data/ai/session-tones.d.ts +34 -0
- package/dist/data/ai/session-tones.d.ts.map +1 -0
- package/dist/data/ai/session-tones.js +67 -0
- package/dist/data/ai/session-tones.js.map +1 -0
- package/dist/data/ai/thread-costs.cjs +39 -0
- package/dist/data/ai/thread-costs.cjs.map +1 -0
- package/dist/data/ai/thread-costs.d.ts +62 -0
- package/dist/data/ai/thread-costs.d.ts.map +1 -0
- package/dist/data/ai/thread-costs.js +39 -0
- package/dist/data/ai/thread-costs.js.map +1 -0
- package/dist/data/cells/CellFilterActions.cjs +68 -0
- package/dist/data/cells/CellFilterActions.cjs.map +1 -0
- package/dist/data/cells/CellFilterActions.d.ts +15 -0
- package/dist/data/cells/CellFilterActions.d.ts.map +1 -0
- package/dist/data/cells/CellFilterActions.js +68 -0
- package/dist/data/cells/CellFilterActions.js.map +1 -0
- package/dist/data/chat/Chat.cjs +192 -80
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +24 -4
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +48 -3
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.d.ts +1 -1
- package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +48 -3
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +195 -83
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +63 -0
- package/dist/data/chat/Chat.runtime.cjs.map +1 -0
- package/dist/data/chat/Chat.runtime.d.ts +16 -0
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -0
- package/dist/data/chat/Chat.runtime.js +63 -0
- package/dist/data/chat/Chat.runtime.js.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.cjs +62 -0
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.d.ts +14 -0
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.js +62 -0
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -0
- package/dist/data/chat/ContextMeter.cjs +144 -73
- package/dist/data/chat/ContextMeter.cjs.map +1 -1
- package/dist/data/chat/ContextMeter.d.ts +8 -3
- package/dist/data/chat/ContextMeter.d.ts.map +1 -1
- package/dist/data/chat/ContextMeter.js +144 -73
- package/dist/data/chat/ContextMeter.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +86 -24
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +12 -5
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +86 -24
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/approval.cjs +64 -0
- package/dist/data/chat/approval.cjs.map +1 -0
- package/dist/data/chat/approval.d.ts +18 -0
- package/dist/data/chat/approval.d.ts.map +1 -0
- package/dist/data/chat/approval.js +64 -0
- package/dist/data/chat/approval.js.map +1 -0
- package/dist/data/chat/index.d.ts +5 -3
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/tool-render/ToolArgs.cjs +50 -0
- package/dist/data/chat/tool-render/ToolArgs.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolArgs.d.ts +7 -0
- package/dist/data/chat/tool-render/ToolArgs.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolArgs.js +50 -0
- package/dist/data/chat/tool-render/ToolArgs.js.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.cjs +155 -0
- package/dist/data/chat/tool-render/ToolParams.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.d.ts +20 -0
- package/dist/data/chat/tool-render/ToolParams.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.js +155 -0
- package/dist/data/chat/tool-render/ToolParams.js.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.cjs +140 -0
- package/dist/data/chat/tool-render/ToolValue.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.d.ts +16 -0
- package/dist/data/chat/tool-render/ToolValue.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.js +140 -0
- package/dist/data/chat/tool-render/ToolValue.js.map +1 -0
- package/dist/data/chat/tool-render/adapter.cjs +48 -0
- package/dist/data/chat/tool-render/adapter.cjs.map +1 -0
- package/dist/data/chat/tool-render/adapter.d.ts +57 -0
- package/dist/data/chat/tool-render/adapter.d.ts.map +1 -0
- package/dist/data/chat/tool-render/adapter.js +48 -0
- package/dist/data/chat/tool-render/adapter.js.map +1 -0
- package/dist/data/chat/tool-render/context.cjs +16 -0
- package/dist/data/chat/tool-render/context.cjs.map +1 -0
- package/dist/data/chat/tool-render/context.d.ts +6 -0
- package/dist/data/chat/tool-render/context.d.ts.map +1 -0
- package/dist/data/chat/tool-render/context.js +16 -0
- package/dist/data/chat/tool-render/context.js.map +1 -0
- package/dist/data/chat/tool-render/defaults.cjs +45 -0
- package/dist/data/chat/tool-render/defaults.cjs.map +1 -0
- package/dist/data/chat/tool-render/defaults.d.ts +11 -0
- package/dist/data/chat/tool-render/defaults.d.ts.map +1 -0
- package/dist/data/chat/tool-render/defaults.js +45 -0
- package/dist/data/chat/tool-render/defaults.js.map +1 -0
- package/dist/data/chat/tool-render/index.d.ts +13 -0
- package/dist/data/chat/tool-render/index.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.cjs +208 -0
- package/dist/data/chat/tool-render/known-tool-views.cjs.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.d.ts +10 -0
- package/dist/data/chat/tool-render/known-tool-views.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.js +208 -0
- package/dist/data/chat/tool-render/known-tool-views.js.map +1 -0
- package/dist/data/chat/tool-render/known-tools.cjs +58 -0
- package/dist/data/chat/tool-render/known-tools.cjs.map +1 -0
- package/dist/data/chat/tool-render/known-tools.d.ts +4 -0
- package/dist/data/chat/tool-render/known-tools.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tools.js +58 -0
- package/dist/data/chat/tool-render/known-tools.js.map +1 -0
- package/dist/data/chat/tool-render/normalize.cjs +42 -0
- package/dist/data/chat/tool-render/normalize.cjs.map +1 -0
- package/dist/data/chat/tool-render/normalize.d.ts +13 -0
- package/dist/data/chat/tool-render/normalize.d.ts.map +1 -0
- package/dist/data/chat/tool-render/normalize.js +42 -0
- package/dist/data/chat/tool-render/normalize.js.map +1 -0
- package/dist/data/chat/tool-render/registry.cjs +14 -0
- package/dist/data/chat/tool-render/registry.cjs.map +1 -0
- package/dist/data/chat/tool-render/registry.d.ts +7 -0
- package/dist/data/chat/tool-render/registry.d.ts.map +1 -0
- package/dist/data/chat/tool-render/registry.js +14 -0
- package/dist/data/chat/tool-render/registry.js.map +1 -0
- package/dist/data/chat/tool-render/schema.cjs +57 -0
- package/dist/data/chat/tool-render/schema.cjs.map +1 -0
- package/dist/data/chat/tool-render/schema.d.ts +28 -0
- package/dist/data/chat/tool-render/schema.d.ts.map +1 -0
- package/dist/data/chat/tool-render/schema.js +57 -0
- package/dist/data/chat/tool-render/schema.js.map +1 -0
- package/dist/data/chat/tool-render/shape.cjs +94 -0
- package/dist/data/chat/tool-render/shape.cjs.map +1 -0
- package/dist/data/chat/tool-render/shape.d.ts +39 -0
- package/dist/data/chat/tool-render/shape.d.ts.map +1 -0
- package/dist/data/chat/tool-render/shape.js +94 -0
- package/dist/data/chat/tool-render/shape.js.map +1 -0
- package/dist/data/chat/tool-render/summary.cjs +34 -0
- package/dist/data/chat/tool-render/summary.cjs.map +1 -0
- package/dist/data/chat/tool-render/summary.d.ts +8 -0
- package/dist/data/chat/tool-render/summary.d.ts.map +1 -0
- package/dist/data/chat/tool-render/summary.js +34 -0
- package/dist/data/chat/tool-render/summary.js.map +1 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +19 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +17 -0
- package/dist/data/chat/usage-snapshot.cjs.map +1 -0
- package/dist/data/chat/usage-snapshot.d.ts +21 -0
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -0
- package/dist/data/chat/usage-snapshot.js +17 -0
- package/dist/data/chat/usage-snapshot.js.map +1 -0
- package/dist/data/data-table-filter-values.cjs +83 -0
- package/dist/data/data-table-filter-values.cjs.map +1 -0
- package/dist/data/data-table-filter-values.d.ts +18 -0
- package/dist/data/data-table-filter-values.d.ts.map +1 -0
- package/dist/data/data-table-filter-values.js +83 -0
- package/dist/data/data-table-filter-values.js.map +1 -0
- package/dist/data/data-table-server-filters.cjs +171 -0
- package/dist/data/data-table-server-filters.cjs.map +1 -0
- package/dist/data/data-table-server-filters.d.ts +128 -0
- package/dist/data/data-table-server-filters.d.ts.map +1 -0
- package/dist/data/data-table-server-filters.js +171 -0
- package/dist/data/data-table-server-filters.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.cjs +96 -19
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts +37 -6
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.js +96 -19
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/index.d.ts +1 -1
- package/dist/data/query-browser/index.d.ts.map +1 -1
- package/dist/data/runtime/ProviderStatusPanel.cjs +187 -0
- package/dist/data/runtime/ProviderStatusPanel.cjs.map +1 -0
- package/dist/data/runtime/ProviderStatusPanel.d.ts +10 -0
- package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -0
- package/dist/data/runtime/ProviderStatusPanel.js +187 -0
- package/dist/data/runtime/ProviderStatusPanel.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.cjs +147 -0
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.d.ts +22 -0
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.js +147 -0
- package/dist/data/runtime/RuntimeBar.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.cjs +14 -0
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.d.ts +10 -0
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.js +14 -0
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
- package/dist/data/runtime/RuntimeBarCombo.cjs +354 -0
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarCombo.d.ts +23 -0
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBarCombo.js +354 -0
- package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
- package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +93 -87
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarSegments.d.ts +25 -0
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -0
- package/dist/data/{ai/RuntimeBar.js → runtime/RuntimeBarSegments.js} +96 -90
- package/dist/data/runtime/RuntimeBarSegments.js.map +1 -0
- package/dist/data/runtime/availability.cjs +11 -0
- package/dist/data/runtime/availability.cjs.map +1 -0
- package/dist/data/runtime/availability.d.ts +6 -0
- package/dist/data/runtime/availability.d.ts.map +1 -0
- package/dist/data/runtime/availability.js +11 -0
- package/dist/data/runtime/availability.js.map +1 -0
- package/dist/data/{ai → runtime}/model-capabilities.cjs +12 -1
- package/dist/data/runtime/model-capabilities.cjs.map +1 -0
- package/dist/data/{ai → runtime}/model-capabilities.d.ts +2 -6
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/model-capabilities.js +12 -1
- package/dist/data/runtime/model-capabilities.js.map +1 -0
- package/dist/data/runtime/provider-status.cjs +106 -0
- package/dist/data/runtime/provider-status.cjs.map +1 -0
- package/dist/data/runtime/provider-status.d.ts +24 -0
- package/dist/data/runtime/provider-status.d.ts.map +1 -0
- package/dist/data/runtime/provider-status.js +106 -0
- package/dist/data/runtime/provider-status.js.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.cjs +123 -22
- package/dist/data/runtime/runtime-mode.cjs.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.d.ts +8 -1
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.js +123 -22
- package/dist/data/runtime/runtime-mode.js.map +1 -0
- package/dist/data/server-timing.cjs +120 -0
- package/dist/data/server-timing.cjs.map +1 -0
- package/dist/data/server-timing.d.ts +11 -0
- package/dist/data/server-timing.d.ts.map +1 -0
- package/dist/data/server-timing.js +120 -0
- package/dist/data/server-timing.js.map +1 -0
- package/dist/data/task-query-keys.cjs +26 -0
- package/dist/data/task-query-keys.cjs.map +1 -0
- package/dist/data/task-query-keys.d.ts +27 -0
- package/dist/data/task-query-keys.d.ts.map +1 -0
- package/dist/data/task-query-keys.js +26 -0
- package/dist/data/task-query-keys.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +23 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +8 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +23 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-hotkey.cjs +6 -1
- package/dist/hooks/use-hotkey.cjs.map +1 -1
- package/dist/hooks/use-hotkey.d.ts.map +1 -1
- package/dist/hooks/use-hotkey.js +6 -1
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +7 -4
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts +12 -0
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +7 -4
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +692 -0
- package/dist/icons/registry.cjs.map +1 -0
- package/dist/icons/registry.d.ts +21 -0
- package/dist/icons/registry.d.ts.map +1 -0
- package/dist/icons/registry.js +692 -0
- package/dist/icons/registry.js.map +1 -0
- package/dist/icons.cjs +3 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +4 -1
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +54 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +56 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +93 -57
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +49 -1
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +93 -57
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +144 -19
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts +6 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +144 -19
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/layout/SplitPane.cjs +23 -7
- package/dist/layout/SplitPane.cjs.map +1 -1
- package/dist/layout/SplitPane.d.ts +3 -1
- package/dist/layout/SplitPane.d.ts.map +1 -1
- package/dist/layout/SplitPane.js +23 -7
- package/dist/layout/SplitPane.js.map +1 -1
- package/dist/lib/format.cjs +86 -4
- package/dist/lib/format.cjs.map +1 -1
- package/dist/lib/format.d.ts +69 -0
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +86 -4
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/path-tree.cjs +69 -0
- package/dist/lib/path-tree.cjs.map +1 -0
- package/dist/lib/path-tree.d.ts +54 -0
- package/dist/lib/path-tree.d.ts.map +1 -0
- package/dist/lib/path-tree.js +69 -0
- package/dist/lib/path-tree.js.map +1 -0
- package/dist/monaco.d.ts +1 -0
- package/dist/monaco.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.cjs +13 -7
- package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.js +13 -7
- package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
- package/dist/overlay/HoverCard.cjs.map +1 -1
- package/dist/overlay/HoverCard.d.ts +2 -2
- package/dist/overlay/HoverCard.d.ts.map +1 -1
- package/dist/overlay/HoverCard.js.map +1 -1
- package/dist/overlay/Tour.cjs +173 -0
- package/dist/overlay/Tour.cjs.map +1 -0
- package/dist/overlay/Tour.d.ts +61 -0
- package/dist/overlay/Tour.d.ts.map +1 -0
- package/dist/overlay/Tour.js +173 -0
- package/dist/overlay/Tour.js.map +1 -0
- package/dist/overlay/TourCard.cjs +108 -0
- package/dist/overlay/TourCard.cjs.map +1 -0
- package/dist/overlay/TourCard.d.ts +23 -0
- package/dist/overlay/TourCard.d.ts.map +1 -0
- package/dist/overlay/TourCard.js +108 -0
- package/dist/overlay/TourCard.js.map +1 -0
- package/dist/overlay/TourProvider.cjs +160 -0
- package/dist/overlay/TourProvider.cjs.map +1 -0
- package/dist/overlay/TourProvider.d.ts +31 -0
- package/dist/overlay/TourProvider.d.ts.map +1 -0
- package/dist/overlay/TourProvider.js +160 -0
- package/dist/overlay/TourProvider.js.map +1 -0
- package/dist/overlay/TourSpotlight.cjs +47 -0
- package/dist/overlay/TourSpotlight.cjs.map +1 -0
- package/dist/overlay/TourSpotlight.d.ts +12 -0
- package/dist/overlay/TourSpotlight.d.ts.map +1 -0
- package/dist/overlay/TourSpotlight.js +47 -0
- package/dist/overlay/TourSpotlight.js.map +1 -0
- package/dist/overlay/modalStack.cjs +18 -4
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts +10 -2
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +19 -5
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/overlay/tour-anchor.cjs +114 -0
- package/dist/overlay/tour-anchor.cjs.map +1 -0
- package/dist/overlay/tour-anchor.d.ts +30 -0
- package/dist/overlay/tour-anchor.d.ts.map +1 -0
- package/dist/overlay/tour-anchor.js +114 -0
- package/dist/overlay/tour-anchor.js.map +1 -0
- package/dist/overlay/tour-context.cjs +12 -0
- package/dist/overlay/tour-context.cjs.map +1 -0
- package/dist/overlay/tour-context.d.ts +40 -0
- package/dist/overlay/tour-context.d.ts.map +1 -0
- package/dist/overlay/tour-context.js +12 -0
- package/dist/overlay/tour-context.js.map +1 -0
- package/dist/overlay/tour-geometry.cjs +65 -0
- package/dist/overlay/tour-geometry.cjs.map +1 -0
- package/dist/overlay/tour-geometry.d.ts +47 -0
- package/dist/overlay/tour-geometry.d.ts.map +1 -0
- package/dist/overlay/tour-geometry.js +65 -0
- package/dist/overlay/tour-geometry.js.map +1 -0
- package/dist/overlay/tour-model.cjs +79 -0
- package/dist/overlay/tour-model.cjs.map +1 -0
- package/dist/overlay/tour-model.d.ts +29 -0
- package/dist/overlay/tour-model.d.ts.map +1 -0
- package/dist/overlay/tour-model.js +79 -0
- package/dist/overlay/tour-model.js.map +1 -0
- package/dist/overlay/tour-progress.cjs +54 -0
- package/dist/overlay/tour-progress.cjs.map +1 -0
- package/dist/overlay/tour-progress.d.ts +40 -0
- package/dist/overlay/tour-progress.d.ts.map +1 -0
- package/dist/overlay/tour-progress.js +54 -0
- package/dist/overlay/tour-progress.js.map +1 -0
- package/dist/overlay/tour-types.d.ts +144 -0
- package/dist/overlay/tour-types.d.ts.map +1 -0
- package/dist/overlay/use-tour-anchor.cjs +43 -0
- package/dist/overlay/use-tour-anchor.cjs.map +1 -0
- package/dist/overlay/use-tour-anchor.d.ts +23 -0
- package/dist/overlay/use-tour-anchor.d.ts.map +1 -0
- package/dist/overlay/use-tour-anchor.js +43 -0
- package/dist/overlay/use-tour-anchor.js.map +1 -0
- package/dist/overlay/use-tour-rect.cjs +33 -0
- package/dist/overlay/use-tour-rect.cjs.map +1 -0
- package/dist/overlay/use-tour-rect.d.ts +12 -0
- package/dist/overlay/use-tour-rect.d.ts.map +1 -0
- package/dist/overlay/use-tour-rect.js +33 -0
- package/dist/overlay/use-tour-rect.js.map +1 -0
- package/dist/overlay/use-tour-step.cjs +66 -0
- package/dist/overlay/use-tour-step.cjs.map +1 -0
- package/dist/overlay/use-tour-step.d.ts +45 -0
- package/dist/overlay/use-tour-step.d.ts.map +1 -0
- package/dist/overlay/use-tour-step.js +66 -0
- package/dist/overlay/use-tour-step.js.map +1 -0
- package/dist/overlay/zIndex.cjs +8 -0
- package/dist/overlay/zIndex.cjs.map +1 -1
- package/dist/overlay/zIndex.d.ts +8 -0
- package/dist/overlay/zIndex.d.ts.map +1 -1
- package/dist/overlay/zIndex.js +8 -0
- package/dist/overlay/zIndex.js.map +1 -1
- package/dist/rpc/CommandOutput.cjs +8 -0
- package/dist/rpc/CommandOutput.cjs.map +1 -1
- package/dist/rpc/CommandOutput.d.ts +4 -1
- package/dist/rpc/CommandOutput.d.ts.map +1 -1
- package/dist/rpc/CommandOutput.js +8 -0
- package/dist/rpc/CommandOutput.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +10 -16
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +10 -16
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +1 -1
- package/dist/rpc/OperationActionBar.cjs.map +1 -1
- package/dist/rpc/OperationActionBar.js +1 -1
- package/dist/rpc/OperationActionBar.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +111 -58
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +1 -6
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +112 -59
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +44 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -1
- package/dist/rpc/OperationResultView.d.ts +8 -1
- package/dist/rpc/OperationResultView.d.ts.map +1 -1
- package/dist/rpc/OperationResultView.js +44 -0
- package/dist/rpc/OperationResultView.js.map +1 -1
- package/dist/rpc/SchemaActionForm.cjs +2 -21
- package/dist/rpc/SchemaActionForm.cjs.map +1 -1
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
- package/dist/rpc/SchemaActionForm.js +3 -22
- package/dist/rpc/SchemaActionForm.js.map +1 -1
- package/dist/rpc/apiClient.cjs +16 -2
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +16 -2
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +89 -49
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +14 -6
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +87 -47
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/operationFilterSearch.cjs +23 -0
- package/dist/rpc/operationFilterSearch.cjs.map +1 -0
- package/dist/rpc/operationFilterSearch.d.ts +22 -0
- package/dist/rpc/operationFilterSearch.d.ts.map +1 -0
- package/dist/rpc/operationFilterSearch.js +23 -0
- package/dist/rpc/operationFilterSearch.js.map +1 -0
- package/dist/rpc/operationLookupFetcher.cjs +28 -0
- package/dist/rpc/operationLookupFetcher.cjs.map +1 -0
- package/dist/rpc/operationLookupFetcher.d.ts +17 -0
- package/dist/rpc/operationLookupFetcher.d.ts.map +1 -0
- package/dist/rpc/operationLookupFetcher.js +28 -0
- package/dist/rpc/operationLookupFetcher.js.map +1 -0
- package/dist/rpc/surfaceNav.cjs +77 -0
- package/dist/rpc/surfaceNav.cjs.map +1 -0
- package/dist/rpc/surfaceNav.d.ts +19 -0
- package/dist/rpc/surfaceNav.d.ts.map +1 -0
- package/dist/rpc/surfaceNav.js +77 -0
- package/dist/rpc/surfaceNav.js.map +1 -0
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +12 -1
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc.cjs +2 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -0
- package/dist/tailwind-preset.cjs.map +1 -1
- package/dist/tailwind-preset.d.ts.map +1 -1
- package/dist/tailwind-preset.js +4 -0
- package/dist/tailwind-preset.js.map +1 -1
- package/dist/utils.cjs +8 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +10 -2
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/data/ai/RuntimeBar.cjs.map +0 -1
- package/dist/data/ai/RuntimeBar.d.ts +0 -27
- package/dist/data/ai/RuntimeBar.d.ts.map +0 -1
- package/dist/data/ai/RuntimeBar.js.map +0 -1
- package/dist/data/ai/model-capabilities.cjs.map +0 -1
- package/dist/data/ai/model-capabilities.d.ts.map +0 -1
- package/dist/data/ai/model-capabilities.js.map +0 -1
- package/dist/data/ai/runtime-mode.cjs.map +0 -1
- package/dist/data/ai/runtime-mode.d.ts.map +0 -1
- package/dist/data/ai/runtime-mode.js.map +0 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const filterBarUtils = require("../components/filter-bar-utils.cjs");
|
|
4
|
+
const dataTableFilterValues = require("./data-table-filter-values.cjs");
|
|
5
|
+
const dataTableUtils = require("./data-table-utils.cjs");
|
|
6
|
+
const DATA_TABLE_FILTER_LOOKUP_LIMIT = 20;
|
|
7
|
+
function serverColumnsToDataTableColumns(columns) {
|
|
8
|
+
return columns.map((column, index) => ({
|
|
9
|
+
key: column.name === "" ? `column-${index}` : column.name,
|
|
10
|
+
label: column.label ?? dataTableUtils.prettifyKey(column.name),
|
|
11
|
+
accessor: (row) => row[column.name],
|
|
12
|
+
sortable: true,
|
|
13
|
+
filterable: false,
|
|
14
|
+
...column.kind !== void 0 ? { kind: column.kind } : {},
|
|
15
|
+
...column.filterKey !== void 0 ? { filterKey: column.filterKey } : {}
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
function serverFiltersToFilterBar(columns, values, setValues, options = {}) {
|
|
19
|
+
const config = { filters: [] };
|
|
20
|
+
const claimed = /* @__PURE__ */ new Map();
|
|
21
|
+
for (const column of columns) {
|
|
22
|
+
const filter = column.filter;
|
|
23
|
+
if (!filter) continue;
|
|
24
|
+
const filterKey = column.filterKey;
|
|
25
|
+
if (!filterKey) {
|
|
26
|
+
throw new Error(`Column ${column.name} declares a filter but no filterKey to send it under`);
|
|
27
|
+
}
|
|
28
|
+
const owner = claimed.get(filterKey);
|
|
29
|
+
if (owner !== void 0) {
|
|
30
|
+
throw new Error(
|
|
31
|
+
`Columns ${owner} and ${column.name} both filter through ${filterKey}; a filter key addresses one column`
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
claimed.set(filterKey, column.name);
|
|
35
|
+
const label = column.label ?? dataTableUtils.prettifyKey(column.name);
|
|
36
|
+
if (filter.kind === "time") {
|
|
37
|
+
if (config.timeRange) {
|
|
38
|
+
throw new Error(
|
|
39
|
+
`Columns ${claimed.get(filterKey)} and ${column.name} both declare a time range; the filter bar has one`
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
config.timeRange = buildTimeRange(filterKey, filter, values, setValues);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
config.filters.push(
|
|
46
|
+
filterBarUtils.applyFilterExtensions(
|
|
47
|
+
buildFilter({ filterKey, label, filter, values, setValues, options }),
|
|
48
|
+
options.extensions
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
return config;
|
|
53
|
+
}
|
|
54
|
+
function buildFilter(args) {
|
|
55
|
+
const { filterKey, label, filter, values, setValues } = args;
|
|
56
|
+
const raw = values[filterKey] ?? "";
|
|
57
|
+
const write = (serialized) => setValues((current) => dataTableFilterValues.updateFilterSelection(current, filterKey, serialized));
|
|
58
|
+
const shared = {
|
|
59
|
+
key: filterKey,
|
|
60
|
+
label,
|
|
61
|
+
...filter.description !== void 0 ? { description: filter.description } : {},
|
|
62
|
+
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {}
|
|
63
|
+
};
|
|
64
|
+
switch (filter.kind) {
|
|
65
|
+
case "range":
|
|
66
|
+
return {
|
|
67
|
+
...shared,
|
|
68
|
+
kind: "number",
|
|
69
|
+
value: parseBoundsValue(raw),
|
|
70
|
+
onChange: (next) => write(serializeBoundsValue(next)),
|
|
71
|
+
...filter.min !== void 0 ? { domainMin: filter.min } : {},
|
|
72
|
+
...filter.max !== void 0 ? { domainMax: filter.max } : {},
|
|
73
|
+
...filter.step !== void 0 ? { step: filter.step } : {}
|
|
74
|
+
};
|
|
75
|
+
case "boolean":
|
|
76
|
+
return {
|
|
77
|
+
...shared,
|
|
78
|
+
kind: "tristate",
|
|
79
|
+
value: raw === "" ? void 0 : raw === "true",
|
|
80
|
+
onChange: (next) => write(next === void 0 ? "" : String(next))
|
|
81
|
+
};
|
|
82
|
+
case "text":
|
|
83
|
+
return {
|
|
84
|
+
...shared,
|
|
85
|
+
kind: "text",
|
|
86
|
+
value: raw,
|
|
87
|
+
onChange: (next) => write(next)
|
|
88
|
+
};
|
|
89
|
+
default:
|
|
90
|
+
return buildTermsFilter(args, shared, raw, write);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function buildTermsFilter({ filter, options }, shared, raw, write) {
|
|
94
|
+
const lookupValues = options.lookupValues;
|
|
95
|
+
return {
|
|
96
|
+
...shared,
|
|
97
|
+
kind: "multi",
|
|
98
|
+
value: dataTableFilterValues.parseMultiFilterValue(raw),
|
|
99
|
+
onChange: (next) => write(dataTableFilterValues.serializeMultiFilterValue(next)),
|
|
100
|
+
options: (filter.options ?? []).map(toMultiSelectOption),
|
|
101
|
+
...filter.truncated !== void 0 ? { truncated: filter.truncated } : {},
|
|
102
|
+
...filter.total !== void 0 ? { total: filter.total } : {},
|
|
103
|
+
// The field owns the in-flight flag from the promise this returns, so no
|
|
104
|
+
// `loading` is passed: a second source of truth for it could disagree.
|
|
105
|
+
...lookupValues && filter.lookup ? {
|
|
106
|
+
onSearch: async (search) => {
|
|
107
|
+
const result = await lookupValues({
|
|
108
|
+
filterKey: shared.key,
|
|
109
|
+
search,
|
|
110
|
+
limit: DATA_TABLE_FILTER_LOOKUP_LIMIT
|
|
111
|
+
});
|
|
112
|
+
return result.options.map(toMultiSelectOption);
|
|
113
|
+
}
|
|
114
|
+
} : {}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
function buildTimeRange(filterKey, filter, values, setValues) {
|
|
118
|
+
const bounds = parseBoundsValue(values[filterKey] ?? "");
|
|
119
|
+
return {
|
|
120
|
+
...bounds.min !== void 0 ? { from: bounds.min } : {},
|
|
121
|
+
...bounds.max !== void 0 ? { to: bounds.max } : {},
|
|
122
|
+
onApply: (from, to) => setValues(
|
|
123
|
+
(current) => dataTableFilterValues.updateFilterSelection(current, filterKey, serializeBoundsValue({ min: from, max: to }))
|
|
124
|
+
),
|
|
125
|
+
...filter.presets !== void 0 ? { presets: filter.presets } : {},
|
|
126
|
+
timeEnabled: true
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function parseBoundsValue(raw) {
|
|
130
|
+
const bounds = {};
|
|
131
|
+
for (const token of raw.split(",")) {
|
|
132
|
+
const trimmed = token.trim();
|
|
133
|
+
if (trimmed.startsWith(">")) {
|
|
134
|
+
bounds.min = trimmed.replace(/^>=?/, "");
|
|
135
|
+
} else if (trimmed.startsWith("<")) {
|
|
136
|
+
bounds.max = trimmed.replace(/^<=?/, "");
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return bounds;
|
|
140
|
+
}
|
|
141
|
+
function serializeBoundsValue(value) {
|
|
142
|
+
const tokens = [];
|
|
143
|
+
if (value.min) tokens.push(`>=${value.min}`);
|
|
144
|
+
if (value.max) tokens.push(`<=${value.max}`);
|
|
145
|
+
return tokens.join(",");
|
|
146
|
+
}
|
|
147
|
+
function toMultiSelectOption(option) {
|
|
148
|
+
const label = option.label ?? option.value;
|
|
149
|
+
return {
|
|
150
|
+
value: option.value,
|
|
151
|
+
label,
|
|
152
|
+
...option.count !== void 0 ? { title: `${label} · ${option.count.toLocaleString()}` } : {}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
function assertDataTableFilterProps(props) {
|
|
156
|
+
if (props.autoFilter && props.manualFilter) {
|
|
157
|
+
throw new Error(
|
|
158
|
+
"DataTable: autoFilter generates filters that narrow rows locally, which manualFilter then suppresses — the controls would render and do nothing. Pass externalFilters instead."
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
if (props.manualFilter && props.showGlobalFilter && !props.globalFilterControlled && !props.hasExternalSearch) {
|
|
162
|
+
throw new Error(
|
|
163
|
+
"DataTable: manualFilter suppresses the built-in search's row narrowing, so showGlobalFilter needs globalFilter/onGlobalFilterChange or externalSearch to reach the source."
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.DATA_TABLE_FILTER_LOOKUP_LIMIT = DATA_TABLE_FILTER_LOOKUP_LIMIT;
|
|
168
|
+
exports.assertDataTableFilterProps = assertDataTableFilterProps;
|
|
169
|
+
exports.serverColumnsToDataTableColumns = serverColumnsToDataTableColumns;
|
|
170
|
+
exports.serverFiltersToFilterBar = serverFiltersToFilterBar;
|
|
171
|
+
//# sourceMappingURL=data-table-server-filters.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-server-filters.cjs","sources":["../../src/data/data-table-server-filters.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n FilterBarFilter,\n FilterBarNumberValue,\n FilterBarRangePreset,\n FilterBarRangeProps,\n} from \"../components/FilterBar\";\nimport type { FilterExtension } from \"../components/filter-bar-utils\";\nimport { applyFilterExtensions } from \"../components/filter-bar-utils\";\nimport type { MultiSelectOption } from \"../components/MultiSelect\";\nimport type { TriState } from \"../components/TriStateToggle\";\nimport type { DataTableColumn, DataTableColumnKind } from \"./DataTable\";\nimport {\n parseMultiFilterValue,\n serializeMultiFilterValue,\n updateFilterSelection,\n type DataTableFilterSelection,\n} from \"./data-table-filter-values\";\nimport { prettifyKey } from \"./data-table-utils\";\n\n/**\n * Which control a filter renders as.\n *\n * Deliberately opaque: \"terms\" is not \"a SQL IN() or an OpenSearch terms\n * query\", it is \"a set of discrete values the user includes or excludes\". The\n * source compiles the selection; nothing about how it does so crosses into the\n * browser.\n */\nexport type DataTableFilterKind = \"terms\" | \"range\" | \"time\" | \"boolean\" | \"text\";\n\nexport type DataTableFilterOption = {\n /** Value written into the selection. */\n value: string;\n /** Display label. Falls back to `value`. */\n label?: string;\n /** How many rows carry this value, shown as a tooltip. */\n count?: number;\n};\n\nexport type DataTableColumnFilter = {\n kind: DataTableFilterKind;\n /** Head of the option set for kind:\"terms\". Empty relies on `lookup`. */\n options?: DataTableFilterOption[];\n /** True when `options` is a capped head of a larger set. */\n truncated?: boolean;\n /** Distinct count behind a truncated head; drives the \"… and N more\" hint. */\n total?: number;\n /** The source can answer a type-ahead for this filter. */\n lookup?: boolean;\n /** Slider domain for kind:\"range\". */\n min?: number;\n max?: number;\n step?: number;\n /** Range presets for kind:\"time\". */\n presets?: FilterBarRangePreset[];\n /** Helper text shown in the filter popover. */\n description?: string;\n disabled?: boolean;\n};\n\n/**\n * A result column as the source describes it: how to render it, and — when the\n * source can narrow on it — which filter parameter it binds to and what control\n * that filter is.\n *\n * `filterKey` need not equal `name`: an analyzed text field filters through an\n * exact-value sibling, and a computed column filters by the alias it was given.\n */\nexport type DataTableServerColumn = {\n /** Field name as the source knows it; also the literal row key. */\n name: string;\n /** Header label. Defaults to a prettified `name`. */\n label?: string;\n /** Backend type string, verbatim (e.g. \"TIMESTAMPTZ\", \"keyword\"). Display only. */\n databaseType?: string;\n /** Cell rendering kind. */\n kind?: DataTableColumnKind;\n /** Filter parameter this column narrows on. Absent means not filterable. */\n filterKey?: string;\n /** The control the filter renders as. Absent means not filterable. */\n filter?: DataTableColumnFilter;\n};\n\n/** Head-set size for a filter value type-ahead. */\nexport const DATA_TABLE_FILTER_LOOKUP_LIMIT = 20;\n\nexport type DataTableFilterLookupRequest = {\n /** Which filter is being searched — the column's `filterKey`. */\n filterKey: string;\n /** What the user typed. Empty asks for the head of the set. */\n search: string;\n /** How many options to return. */\n limit: number;\n};\n\nexport type DataTableFilterLookupResult = {\n options: DataTableFilterOption[];\n};\n\n/**\n * Answers a filter's value type-ahead. Sync or async — a static option source\n * returns an array, a server-backed one a promise.\n */\nexport type DataTableFilterLookup = (\n request: DataTableFilterLookupRequest,\n) => Promise<DataTableFilterLookupResult> | DataTableFilterLookupResult;\n\nexport type ServerFilterBarOptions = {\n /** Answers a terms type-ahead for filters whose `lookup` is set. */\n lookupValues?: DataTableFilterLookup;\n /** Decorators applied to each built filter (icons, relabelling). */\n extensions?: FilterExtension[];\n};\n\nexport type ServerFilterConfig = {\n filters: FilterBarFilter[];\n /** Present when exactly one column declared kind:\"time\". */\n timeRange?: FilterBarRangeProps;\n};\n\n/**\n * Turns the source's column description into DataTable columns.\n *\n * Every column gets a literal `accessor` — a raw result set has empty, dotted\n * and colliding names, none of which survive being read as a path — and\n * `filterable: false`, because a described result is filtered by the source and\n * never by cardinality guessed from one page.\n */\nexport function serverColumnsToDataTableColumns<T extends Record<string, unknown>>(\n columns: DataTableServerColumn[],\n): DataTableColumn<T>[] {\n return columns.map((column, index) => ({\n key: column.name === \"\" ? `column-${index}` : column.name,\n label: column.label ?? prettifyKey(column.name),\n accessor: (row: T) => row[column.name],\n sortable: true,\n filterable: false,\n ...(column.kind !== undefined ? { kind: column.kind } : {}),\n ...(column.filterKey !== undefined ? { filterKey: column.filterKey } : {}),\n }));\n}\n\n/**\n * Builds the FilterBar controls for a described result, already wired to\n * `values`/`setValues`.\n *\n * Pure — it holds no state and fetches nothing; a `lookup` filter closes over\n * the caller's loader. Pass the result as DataTable's `externalFilters`\n * together with `manualFilter`, since the source has already applied it.\n *\n * Throws when a column declares a filter it cannot address: no `filterKey`, a\n * `filterKey` another column already claimed, or a second time range. Each\n * would bind a control to a filter that means something else.\n */\nexport function serverFiltersToFilterBar(\n columns: DataTableServerColumn[],\n values: DataTableFilterSelection,\n setValues: Dispatch<SetStateAction<DataTableFilterSelection>>,\n options: ServerFilterBarOptions = {},\n): ServerFilterConfig {\n const config: ServerFilterConfig = { filters: [] };\n const claimed = new Map<string, string>();\n\n for (const column of columns) {\n const filter = column.filter;\n if (!filter) continue;\n const filterKey = column.filterKey;\n if (!filterKey) {\n throw new Error(`Column ${column.name} declares a filter but no filterKey to send it under`);\n }\n const owner = claimed.get(filterKey);\n if (owner !== undefined) {\n throw new Error(\n `Columns ${owner} and ${column.name} both filter through ${filterKey}; a filter key addresses one column`,\n );\n }\n claimed.set(filterKey, column.name);\n\n const label = column.label ?? prettifyKey(column.name);\n if (filter.kind === \"time\") {\n if (config.timeRange) {\n throw new Error(\n `Columns ${claimed.get(filterKey)} and ${column.name} both declare a time range; the filter bar has one`,\n );\n }\n config.timeRange = buildTimeRange(filterKey, filter, values, setValues);\n continue;\n }\n config.filters.push(\n applyFilterExtensions(\n buildFilter({ column, filterKey, label, filter, values, setValues, options }),\n options.extensions,\n ),\n );\n }\n return config;\n}\n\ntype BuildArgs = {\n column: DataTableServerColumn;\n filterKey: string;\n label: string;\n filter: DataTableColumnFilter;\n values: DataTableFilterSelection;\n setValues: Dispatch<SetStateAction<DataTableFilterSelection>>;\n options: ServerFilterBarOptions;\n};\n\nfunction buildFilter(args: BuildArgs): FilterBarFilter {\n const { filterKey, label, filter, values, setValues } = args;\n const raw = values[filterKey] ?? \"\";\n const write = (serialized: string) =>\n setValues((current) => updateFilterSelection(current, filterKey, serialized));\n const shared = {\n key: filterKey,\n label,\n ...(filter.description !== undefined ? { description: filter.description } : {}),\n ...(filter.disabled !== undefined ? { disabled: filter.disabled } : {}),\n };\n\n switch (filter.kind) {\n case \"range\":\n return {\n ...shared,\n kind: \"number\",\n value: parseBoundsValue(raw),\n onChange: (next: FilterBarNumberValue) => write(serializeBoundsValue(next)),\n ...(filter.min !== undefined ? { domainMin: filter.min } : {}),\n ...(filter.max !== undefined ? { domainMax: filter.max } : {}),\n ...(filter.step !== undefined ? { step: filter.step } : {}),\n };\n case \"boolean\":\n return {\n ...shared,\n kind: \"tristate\",\n value: raw === \"\" ? undefined : raw === \"true\",\n onChange: (next: TriState) => write(next === undefined ? \"\" : String(next)),\n };\n case \"text\":\n return {\n ...shared,\n kind: \"text\",\n value: raw,\n onChange: (next: string) => write(next),\n };\n default:\n return buildTermsFilter(args, shared, raw, write);\n }\n}\n\nfunction buildTermsFilter(\n { filter, options }: BuildArgs,\n shared: { key: string; label: string; description?: string; disabled?: boolean },\n raw: string,\n write: (serialized: string) => void,\n): FilterBarFilter {\n const lookupValues = options.lookupValues;\n return {\n ...shared,\n kind: \"multi\",\n value: parseMultiFilterValue(raw),\n onChange: (next) => write(serializeMultiFilterValue(next)),\n options: (filter.options ?? []).map(toMultiSelectOption),\n ...(filter.truncated !== undefined ? { truncated: filter.truncated } : {}),\n ...(filter.total !== undefined ? { total: filter.total } : {}),\n // The field owns the in-flight flag from the promise this returns, so no\n // `loading` is passed: a second source of truth for it could disagree.\n ...(lookupValues && filter.lookup\n ? {\n onSearch: async (search: string) => {\n const result = await lookupValues({\n filterKey: shared.key,\n search,\n limit: DATA_TABLE_FILTER_LOOKUP_LIMIT,\n });\n return result.options.map(toMultiSelectOption);\n },\n }\n : {}),\n };\n}\n\nfunction buildTimeRange(\n filterKey: string,\n filter: DataTableColumnFilter,\n values: DataTableFilterSelection,\n setValues: Dispatch<SetStateAction<DataTableFilterSelection>>,\n): FilterBarRangeProps {\n const bounds = parseBoundsValue(values[filterKey] ?? \"\");\n return {\n ...(bounds.min !== undefined ? { from: bounds.min } : {}),\n ...(bounds.max !== undefined ? { to: bounds.max } : {}),\n onApply: (from, to) =>\n setValues((current) =>\n updateFilterSelection(current, filterKey, serializeBoundsValue({ min: from, max: to })),\n ),\n ...(filter.presets !== undefined ? { presets: filter.presets } : {}),\n timeEnabled: true,\n };\n}\n\n/**\n * Reads the bounded half of the selection grammar: comma-separated tokens, each\n * carrying its own comparison operator. The bar's controls are inclusive on\n * both edges, so that is what they write back — but a bound typed by hand or\n * arriving in a URL keeps whatever operator it came with.\n */\nfunction parseBoundsValue(raw: string): FilterBarNumberValue {\n const bounds: FilterBarNumberValue = {};\n for (const token of raw.split(\",\")) {\n const trimmed = token.trim();\n if (trimmed.startsWith(\">\")) {\n bounds.min = trimmed.replace(/^>=?/, \"\");\n } else if (trimmed.startsWith(\"<\")) {\n bounds.max = trimmed.replace(/^<=?/, \"\");\n }\n }\n return bounds;\n}\n\nfunction serializeBoundsValue(value: FilterBarNumberValue): string {\n const tokens: string[] = [];\n if (value.min) tokens.push(`>=${value.min}`);\n if (value.max) tokens.push(`<=${value.max}`);\n return tokens.join(\",\");\n}\n\nfunction toMultiSelectOption(option: DataTableFilterOption): MultiSelectOption {\n const label = option.label ?? option.value;\n return {\n value: option.value,\n label,\n ...(option.count !== undefined ? { title: `${label} · ${option.count.toLocaleString()}` } : {}),\n };\n}\n\n/**\n * Refuses a DataTable that would filter twice or offer a control wired to\n * nothing. Both are silent in a running table — rows narrow more than the user\n * asked, or a box swallows what they type — so they are refused at the seam.\n */\nexport function assertDataTableFilterProps(props: {\n autoFilter: boolean;\n manualFilter: boolean;\n showGlobalFilter: boolean;\n globalFilterControlled: boolean;\n hasExternalSearch: boolean;\n}): void {\n if (props.autoFilter && props.manualFilter) {\n throw new Error(\n \"DataTable: autoFilter generates filters that narrow rows locally, which manualFilter then suppresses — the controls would render and do nothing. Pass externalFilters instead.\",\n );\n }\n if (\n props.manualFilter &&\n props.showGlobalFilter &&\n !props.globalFilterControlled &&\n !props.hasExternalSearch\n ) {\n throw new Error(\n \"DataTable: manualFilter suppresses the built-in search's row narrowing, so showGlobalFilter needs globalFilter/onGlobalFilterChange or externalSearch to reach the source.\",\n );\n }\n}\n"],"names":["prettifyKey","applyFilterExtensions","updateFilterSelection","parseMultiFilterValue","serializeMultiFilterValue"],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Dispatch, SetStateAction } from 'react';
|
|
2
|
+
import { FilterBarFilter, FilterBarRangePreset, FilterBarRangeProps } from '../components/FilterBar';
|
|
3
|
+
import { FilterExtension } from '../components/filter-bar-utils';
|
|
4
|
+
import { DataTableColumn, DataTableColumnKind } from './DataTable';
|
|
5
|
+
import { DataTableFilterSelection } from './data-table-filter-values';
|
|
6
|
+
/**
|
|
7
|
+
* Which control a filter renders as.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately opaque: "terms" is not "a SQL IN() or an OpenSearch terms
|
|
10
|
+
* query", it is "a set of discrete values the user includes or excludes". The
|
|
11
|
+
* source compiles the selection; nothing about how it does so crosses into the
|
|
12
|
+
* browser.
|
|
13
|
+
*/
|
|
14
|
+
export type DataTableFilterKind = "terms" | "range" | "time" | "boolean" | "text";
|
|
15
|
+
export type DataTableFilterOption = {
|
|
16
|
+
/** Value written into the selection. */
|
|
17
|
+
value: string;
|
|
18
|
+
/** Display label. Falls back to `value`. */
|
|
19
|
+
label?: string;
|
|
20
|
+
/** How many rows carry this value, shown as a tooltip. */
|
|
21
|
+
count?: number;
|
|
22
|
+
};
|
|
23
|
+
export type DataTableColumnFilter = {
|
|
24
|
+
kind: DataTableFilterKind;
|
|
25
|
+
/** Head of the option set for kind:"terms". Empty relies on `lookup`. */
|
|
26
|
+
options?: DataTableFilterOption[];
|
|
27
|
+
/** True when `options` is a capped head of a larger set. */
|
|
28
|
+
truncated?: boolean;
|
|
29
|
+
/** Distinct count behind a truncated head; drives the "… and N more" hint. */
|
|
30
|
+
total?: number;
|
|
31
|
+
/** The source can answer a type-ahead for this filter. */
|
|
32
|
+
lookup?: boolean;
|
|
33
|
+
/** Slider domain for kind:"range". */
|
|
34
|
+
min?: number;
|
|
35
|
+
max?: number;
|
|
36
|
+
step?: number;
|
|
37
|
+
/** Range presets for kind:"time". */
|
|
38
|
+
presets?: FilterBarRangePreset[];
|
|
39
|
+
/** Helper text shown in the filter popover. */
|
|
40
|
+
description?: string;
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* A result column as the source describes it: how to render it, and — when the
|
|
45
|
+
* source can narrow on it — which filter parameter it binds to and what control
|
|
46
|
+
* that filter is.
|
|
47
|
+
*
|
|
48
|
+
* `filterKey` need not equal `name`: an analyzed text field filters through an
|
|
49
|
+
* exact-value sibling, and a computed column filters by the alias it was given.
|
|
50
|
+
*/
|
|
51
|
+
export type DataTableServerColumn = {
|
|
52
|
+
/** Field name as the source knows it; also the literal row key. */
|
|
53
|
+
name: string;
|
|
54
|
+
/** Header label. Defaults to a prettified `name`. */
|
|
55
|
+
label?: string;
|
|
56
|
+
/** Backend type string, verbatim (e.g. "TIMESTAMPTZ", "keyword"). Display only. */
|
|
57
|
+
databaseType?: string;
|
|
58
|
+
/** Cell rendering kind. */
|
|
59
|
+
kind?: DataTableColumnKind;
|
|
60
|
+
/** Filter parameter this column narrows on. Absent means not filterable. */
|
|
61
|
+
filterKey?: string;
|
|
62
|
+
/** The control the filter renders as. Absent means not filterable. */
|
|
63
|
+
filter?: DataTableColumnFilter;
|
|
64
|
+
};
|
|
65
|
+
/** Head-set size for a filter value type-ahead. */
|
|
66
|
+
export declare const DATA_TABLE_FILTER_LOOKUP_LIMIT = 20;
|
|
67
|
+
export type DataTableFilterLookupRequest = {
|
|
68
|
+
/** Which filter is being searched — the column's `filterKey`. */
|
|
69
|
+
filterKey: string;
|
|
70
|
+
/** What the user typed. Empty asks for the head of the set. */
|
|
71
|
+
search: string;
|
|
72
|
+
/** How many options to return. */
|
|
73
|
+
limit: number;
|
|
74
|
+
};
|
|
75
|
+
export type DataTableFilterLookupResult = {
|
|
76
|
+
options: DataTableFilterOption[];
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Answers a filter's value type-ahead. Sync or async — a static option source
|
|
80
|
+
* returns an array, a server-backed one a promise.
|
|
81
|
+
*/
|
|
82
|
+
export type DataTableFilterLookup = (request: DataTableFilterLookupRequest) => Promise<DataTableFilterLookupResult> | DataTableFilterLookupResult;
|
|
83
|
+
export type ServerFilterBarOptions = {
|
|
84
|
+
/** Answers a terms type-ahead for filters whose `lookup` is set. */
|
|
85
|
+
lookupValues?: DataTableFilterLookup;
|
|
86
|
+
/** Decorators applied to each built filter (icons, relabelling). */
|
|
87
|
+
extensions?: FilterExtension[];
|
|
88
|
+
};
|
|
89
|
+
export type ServerFilterConfig = {
|
|
90
|
+
filters: FilterBarFilter[];
|
|
91
|
+
/** Present when exactly one column declared kind:"time". */
|
|
92
|
+
timeRange?: FilterBarRangeProps;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Turns the source's column description into DataTable columns.
|
|
96
|
+
*
|
|
97
|
+
* Every column gets a literal `accessor` — a raw result set has empty, dotted
|
|
98
|
+
* and colliding names, none of which survive being read as a path — and
|
|
99
|
+
* `filterable: false`, because a described result is filtered by the source and
|
|
100
|
+
* never by cardinality guessed from one page.
|
|
101
|
+
*/
|
|
102
|
+
export declare function serverColumnsToDataTableColumns<T extends Record<string, unknown>>(columns: DataTableServerColumn[]): DataTableColumn<T>[];
|
|
103
|
+
/**
|
|
104
|
+
* Builds the FilterBar controls for a described result, already wired to
|
|
105
|
+
* `values`/`setValues`.
|
|
106
|
+
*
|
|
107
|
+
* Pure — it holds no state and fetches nothing; a `lookup` filter closes over
|
|
108
|
+
* the caller's loader. Pass the result as DataTable's `externalFilters`
|
|
109
|
+
* together with `manualFilter`, since the source has already applied it.
|
|
110
|
+
*
|
|
111
|
+
* Throws when a column declares a filter it cannot address: no `filterKey`, a
|
|
112
|
+
* `filterKey` another column already claimed, or a second time range. Each
|
|
113
|
+
* would bind a control to a filter that means something else.
|
|
114
|
+
*/
|
|
115
|
+
export declare function serverFiltersToFilterBar(columns: DataTableServerColumn[], values: DataTableFilterSelection, setValues: Dispatch<SetStateAction<DataTableFilterSelection>>, options?: ServerFilterBarOptions): ServerFilterConfig;
|
|
116
|
+
/**
|
|
117
|
+
* Refuses a DataTable that would filter twice or offer a control wired to
|
|
118
|
+
* nothing. Both are silent in a running table — rows narrow more than the user
|
|
119
|
+
* asked, or a box swallows what they type — so they are refused at the seam.
|
|
120
|
+
*/
|
|
121
|
+
export declare function assertDataTableFilterProps(props: {
|
|
122
|
+
autoFilter: boolean;
|
|
123
|
+
manualFilter: boolean;
|
|
124
|
+
showGlobalFilter: boolean;
|
|
125
|
+
globalFilterControlled: boolean;
|
|
126
|
+
hasExternalSearch: boolean;
|
|
127
|
+
}): void;
|
|
128
|
+
//# sourceMappingURL=data-table-server-filters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-server-filters.d.ts","sourceRoot":"","sources":["../../src/data/data-table-server-filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { applyFilterExtensions } from "../components/filter-bar-utils.js";
|
|
2
|
+
import { updateFilterSelection, serializeMultiFilterValue, parseMultiFilterValue } from "./data-table-filter-values.js";
|
|
3
|
+
import { prettifyKey } from "./data-table-utils.js";
|
|
4
|
+
const DATA_TABLE_FILTER_LOOKUP_LIMIT = 20;
|
|
5
|
+
function serverColumnsToDataTableColumns(columns) {
|
|
6
|
+
return columns.map((column, index) => ({
|
|
7
|
+
key: column.name === "" ? `column-${index}` : column.name,
|
|
8
|
+
label: column.label ?? prettifyKey(column.name),
|
|
9
|
+
accessor: (row) => row[column.name],
|
|
10
|
+
sortable: true,
|
|
11
|
+
filterable: false,
|
|
12
|
+
...column.kind !== void 0 ? { kind: column.kind } : {},
|
|
13
|
+
...column.filterKey !== void 0 ? { filterKey: column.filterKey } : {}
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
function serverFiltersToFilterBar(columns, values, setValues, options = {}) {
|
|
17
|
+
const config = { filters: [] };
|
|
18
|
+
const claimed = /* @__PURE__ */ new Map();
|
|
19
|
+
for (const column of columns) {
|
|
20
|
+
const filter = column.filter;
|
|
21
|
+
if (!filter) continue;
|
|
22
|
+
const filterKey = column.filterKey;
|
|
23
|
+
if (!filterKey) {
|
|
24
|
+
throw new Error(`Column ${column.name} declares a filter but no filterKey to send it under`);
|
|
25
|
+
}
|
|
26
|
+
const owner = claimed.get(filterKey);
|
|
27
|
+
if (owner !== void 0) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
`Columns ${owner} and ${column.name} both filter through ${filterKey}; a filter key addresses one column`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
claimed.set(filterKey, column.name);
|
|
33
|
+
const label = column.label ?? prettifyKey(column.name);
|
|
34
|
+
if (filter.kind === "time") {
|
|
35
|
+
if (config.timeRange) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
`Columns ${claimed.get(filterKey)} and ${column.name} both declare a time range; the filter bar has one`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
config.timeRange = buildTimeRange(filterKey, filter, values, setValues);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
config.filters.push(
|
|
44
|
+
applyFilterExtensions(
|
|
45
|
+
buildFilter({ filterKey, label, filter, values, setValues, options }),
|
|
46
|
+
options.extensions
|
|
47
|
+
)
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return config;
|
|
51
|
+
}
|
|
52
|
+
function buildFilter(args) {
|
|
53
|
+
const { filterKey, label, filter, values, setValues } = args;
|
|
54
|
+
const raw = values[filterKey] ?? "";
|
|
55
|
+
const write = (serialized) => setValues((current) => updateFilterSelection(current, filterKey, serialized));
|
|
56
|
+
const shared = {
|
|
57
|
+
key: filterKey,
|
|
58
|
+
label,
|
|
59
|
+
...filter.description !== void 0 ? { description: filter.description } : {},
|
|
60
|
+
...filter.disabled !== void 0 ? { disabled: filter.disabled } : {}
|
|
61
|
+
};
|
|
62
|
+
switch (filter.kind) {
|
|
63
|
+
case "range":
|
|
64
|
+
return {
|
|
65
|
+
...shared,
|
|
66
|
+
kind: "number",
|
|
67
|
+
value: parseBoundsValue(raw),
|
|
68
|
+
onChange: (next) => write(serializeBoundsValue(next)),
|
|
69
|
+
...filter.min !== void 0 ? { domainMin: filter.min } : {},
|
|
70
|
+
...filter.max !== void 0 ? { domainMax: filter.max } : {},
|
|
71
|
+
...filter.step !== void 0 ? { step: filter.step } : {}
|
|
72
|
+
};
|
|
73
|
+
case "boolean":
|
|
74
|
+
return {
|
|
75
|
+
...shared,
|
|
76
|
+
kind: "tristate",
|
|
77
|
+
value: raw === "" ? void 0 : raw === "true",
|
|
78
|
+
onChange: (next) => write(next === void 0 ? "" : String(next))
|
|
79
|
+
};
|
|
80
|
+
case "text":
|
|
81
|
+
return {
|
|
82
|
+
...shared,
|
|
83
|
+
kind: "text",
|
|
84
|
+
value: raw,
|
|
85
|
+
onChange: (next) => write(next)
|
|
86
|
+
};
|
|
87
|
+
default:
|
|
88
|
+
return buildTermsFilter(args, shared, raw, write);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function buildTermsFilter({ filter, options }, shared, raw, write) {
|
|
92
|
+
const lookupValues = options.lookupValues;
|
|
93
|
+
return {
|
|
94
|
+
...shared,
|
|
95
|
+
kind: "multi",
|
|
96
|
+
value: parseMultiFilterValue(raw),
|
|
97
|
+
onChange: (next) => write(serializeMultiFilterValue(next)),
|
|
98
|
+
options: (filter.options ?? []).map(toMultiSelectOption),
|
|
99
|
+
...filter.truncated !== void 0 ? { truncated: filter.truncated } : {},
|
|
100
|
+
...filter.total !== void 0 ? { total: filter.total } : {},
|
|
101
|
+
// The field owns the in-flight flag from the promise this returns, so no
|
|
102
|
+
// `loading` is passed: a second source of truth for it could disagree.
|
|
103
|
+
...lookupValues && filter.lookup ? {
|
|
104
|
+
onSearch: async (search) => {
|
|
105
|
+
const result = await lookupValues({
|
|
106
|
+
filterKey: shared.key,
|
|
107
|
+
search,
|
|
108
|
+
limit: DATA_TABLE_FILTER_LOOKUP_LIMIT
|
|
109
|
+
});
|
|
110
|
+
return result.options.map(toMultiSelectOption);
|
|
111
|
+
}
|
|
112
|
+
} : {}
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
function buildTimeRange(filterKey, filter, values, setValues) {
|
|
116
|
+
const bounds = parseBoundsValue(values[filterKey] ?? "");
|
|
117
|
+
return {
|
|
118
|
+
...bounds.min !== void 0 ? { from: bounds.min } : {},
|
|
119
|
+
...bounds.max !== void 0 ? { to: bounds.max } : {},
|
|
120
|
+
onApply: (from, to) => setValues(
|
|
121
|
+
(current) => updateFilterSelection(current, filterKey, serializeBoundsValue({ min: from, max: to }))
|
|
122
|
+
),
|
|
123
|
+
...filter.presets !== void 0 ? { presets: filter.presets } : {},
|
|
124
|
+
timeEnabled: true
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function parseBoundsValue(raw) {
|
|
128
|
+
const bounds = {};
|
|
129
|
+
for (const token of raw.split(",")) {
|
|
130
|
+
const trimmed = token.trim();
|
|
131
|
+
if (trimmed.startsWith(">")) {
|
|
132
|
+
bounds.min = trimmed.replace(/^>=?/, "");
|
|
133
|
+
} else if (trimmed.startsWith("<")) {
|
|
134
|
+
bounds.max = trimmed.replace(/^<=?/, "");
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return bounds;
|
|
138
|
+
}
|
|
139
|
+
function serializeBoundsValue(value) {
|
|
140
|
+
const tokens = [];
|
|
141
|
+
if (value.min) tokens.push(`>=${value.min}`);
|
|
142
|
+
if (value.max) tokens.push(`<=${value.max}`);
|
|
143
|
+
return tokens.join(",");
|
|
144
|
+
}
|
|
145
|
+
function toMultiSelectOption(option) {
|
|
146
|
+
const label = option.label ?? option.value;
|
|
147
|
+
return {
|
|
148
|
+
value: option.value,
|
|
149
|
+
label,
|
|
150
|
+
...option.count !== void 0 ? { title: `${label} · ${option.count.toLocaleString()}` } : {}
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function assertDataTableFilterProps(props) {
|
|
154
|
+
if (props.autoFilter && props.manualFilter) {
|
|
155
|
+
throw new Error(
|
|
156
|
+
"DataTable: autoFilter generates filters that narrow rows locally, which manualFilter then suppresses — the controls would render and do nothing. Pass externalFilters instead."
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
if (props.manualFilter && props.showGlobalFilter && !props.globalFilterControlled && !props.hasExternalSearch) {
|
|
160
|
+
throw new Error(
|
|
161
|
+
"DataTable: manualFilter suppresses the built-in search's row narrowing, so showGlobalFilter needs globalFilter/onGlobalFilterChange or externalSearch to reach the source."
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export {
|
|
166
|
+
DATA_TABLE_FILTER_LOOKUP_LIMIT,
|
|
167
|
+
assertDataTableFilterProps,
|
|
168
|
+
serverColumnsToDataTableColumns,
|
|
169
|
+
serverFiltersToFilterBar
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=data-table-server-filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table-server-filters.js","sources":["../../src/data/data-table-server-filters.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n FilterBarFilter,\n FilterBarNumberValue,\n FilterBarRangePreset,\n FilterBarRangeProps,\n} from \"../components/FilterBar\";\nimport type { FilterExtension } from \"../components/filter-bar-utils\";\nimport { applyFilterExtensions } from \"../components/filter-bar-utils\";\nimport type { MultiSelectOption } from \"../components/MultiSelect\";\nimport type { TriState } from \"../components/TriStateToggle\";\nimport type { DataTableColumn, DataTableColumnKind } from \"./DataTable\";\nimport {\n parseMultiFilterValue,\n serializeMultiFilterValue,\n updateFilterSelection,\n type DataTableFilterSelection,\n} from \"./data-table-filter-values\";\nimport { prettifyKey } from \"./data-table-utils\";\n\n/**\n * Which control a filter renders as.\n *\n * Deliberately opaque: \"terms\" is not \"a SQL IN() or an OpenSearch terms\n * query\", it is \"a set of discrete values the user includes or excludes\". The\n * source compiles the selection; nothing about how it does so crosses into the\n * browser.\n */\nexport type DataTableFilterKind = \"terms\" | \"range\" | \"time\" | \"boolean\" | \"text\";\n\nexport type DataTableFilterOption = {\n /** Value written into the selection. */\n value: string;\n /** Display label. Falls back to `value`. */\n label?: string;\n /** How many rows carry this value, shown as a tooltip. */\n count?: number;\n};\n\nexport type DataTableColumnFilter = {\n kind: DataTableFilterKind;\n /** Head of the option set for kind:\"terms\". Empty relies on `lookup`. */\n options?: DataTableFilterOption[];\n /** True when `options` is a capped head of a larger set. */\n truncated?: boolean;\n /** Distinct count behind a truncated head; drives the \"… and N more\" hint. */\n total?: number;\n /** The source can answer a type-ahead for this filter. */\n lookup?: boolean;\n /** Slider domain for kind:\"range\". */\n min?: number;\n max?: number;\n step?: number;\n /** Range presets for kind:\"time\". */\n presets?: FilterBarRangePreset[];\n /** Helper text shown in the filter popover. */\n description?: string;\n disabled?: boolean;\n};\n\n/**\n * A result column as the source describes it: how to render it, and — when the\n * source can narrow on it — which filter parameter it binds to and what control\n * that filter is.\n *\n * `filterKey` need not equal `name`: an analyzed text field filters through an\n * exact-value sibling, and a computed column filters by the alias it was given.\n */\nexport type DataTableServerColumn = {\n /** Field name as the source knows it; also the literal row key. */\n name: string;\n /** Header label. Defaults to a prettified `name`. */\n label?: string;\n /** Backend type string, verbatim (e.g. \"TIMESTAMPTZ\", \"keyword\"). Display only. */\n databaseType?: string;\n /** Cell rendering kind. */\n kind?: DataTableColumnKind;\n /** Filter parameter this column narrows on. Absent means not filterable. */\n filterKey?: string;\n /** The control the filter renders as. Absent means not filterable. */\n filter?: DataTableColumnFilter;\n};\n\n/** Head-set size for a filter value type-ahead. */\nexport const DATA_TABLE_FILTER_LOOKUP_LIMIT = 20;\n\nexport type DataTableFilterLookupRequest = {\n /** Which filter is being searched — the column's `filterKey`. */\n filterKey: string;\n /** What the user typed. Empty asks for the head of the set. */\n search: string;\n /** How many options to return. */\n limit: number;\n};\n\nexport type DataTableFilterLookupResult = {\n options: DataTableFilterOption[];\n};\n\n/**\n * Answers a filter's value type-ahead. Sync or async — a static option source\n * returns an array, a server-backed one a promise.\n */\nexport type DataTableFilterLookup = (\n request: DataTableFilterLookupRequest,\n) => Promise<DataTableFilterLookupResult> | DataTableFilterLookupResult;\n\nexport type ServerFilterBarOptions = {\n /** Answers a terms type-ahead for filters whose `lookup` is set. */\n lookupValues?: DataTableFilterLookup;\n /** Decorators applied to each built filter (icons, relabelling). */\n extensions?: FilterExtension[];\n};\n\nexport type ServerFilterConfig = {\n filters: FilterBarFilter[];\n /** Present when exactly one column declared kind:\"time\". */\n timeRange?: FilterBarRangeProps;\n};\n\n/**\n * Turns the source's column description into DataTable columns.\n *\n * Every column gets a literal `accessor` — a raw result set has empty, dotted\n * and colliding names, none of which survive being read as a path — and\n * `filterable: false`, because a described result is filtered by the source and\n * never by cardinality guessed from one page.\n */\nexport function serverColumnsToDataTableColumns<T extends Record<string, unknown>>(\n columns: DataTableServerColumn[],\n): DataTableColumn<T>[] {\n return columns.map((column, index) => ({\n key: column.name === \"\" ? `column-${index}` : column.name,\n label: column.label ?? prettifyKey(column.name),\n accessor: (row: T) => row[column.name],\n sortable: true,\n filterable: false,\n ...(column.kind !== undefined ? { kind: column.kind } : {}),\n ...(column.filterKey !== undefined ? { filterKey: column.filterKey } : {}),\n }));\n}\n\n/**\n * Builds the FilterBar controls for a described result, already wired to\n * `values`/`setValues`.\n *\n * Pure — it holds no state and fetches nothing; a `lookup` filter closes over\n * the caller's loader. Pass the result as DataTable's `externalFilters`\n * together with `manualFilter`, since the source has already applied it.\n *\n * Throws when a column declares a filter it cannot address: no `filterKey`, a\n * `filterKey` another column already claimed, or a second time range. Each\n * would bind a control to a filter that means something else.\n */\nexport function serverFiltersToFilterBar(\n columns: DataTableServerColumn[],\n values: DataTableFilterSelection,\n setValues: Dispatch<SetStateAction<DataTableFilterSelection>>,\n options: ServerFilterBarOptions = {},\n): ServerFilterConfig {\n const config: ServerFilterConfig = { filters: [] };\n const claimed = new Map<string, string>();\n\n for (const column of columns) {\n const filter = column.filter;\n if (!filter) continue;\n const filterKey = column.filterKey;\n if (!filterKey) {\n throw new Error(`Column ${column.name} declares a filter but no filterKey to send it under`);\n }\n const owner = claimed.get(filterKey);\n if (owner !== undefined) {\n throw new Error(\n `Columns ${owner} and ${column.name} both filter through ${filterKey}; a filter key addresses one column`,\n );\n }\n claimed.set(filterKey, column.name);\n\n const label = column.label ?? prettifyKey(column.name);\n if (filter.kind === \"time\") {\n if (config.timeRange) {\n throw new Error(\n `Columns ${claimed.get(filterKey)} and ${column.name} both declare a time range; the filter bar has one`,\n );\n }\n config.timeRange = buildTimeRange(filterKey, filter, values, setValues);\n continue;\n }\n config.filters.push(\n applyFilterExtensions(\n buildFilter({ column, filterKey, label, filter, values, setValues, options }),\n options.extensions,\n ),\n );\n }\n return config;\n}\n\ntype BuildArgs = {\n column: DataTableServerColumn;\n filterKey: string;\n label: string;\n filter: DataTableColumnFilter;\n values: DataTableFilterSelection;\n setValues: Dispatch<SetStateAction<DataTableFilterSelection>>;\n options: ServerFilterBarOptions;\n};\n\nfunction buildFilter(args: BuildArgs): FilterBarFilter {\n const { filterKey, label, filter, values, setValues } = args;\n const raw = values[filterKey] ?? \"\";\n const write = (serialized: string) =>\n setValues((current) => updateFilterSelection(current, filterKey, serialized));\n const shared = {\n key: filterKey,\n label,\n ...(filter.description !== undefined ? { description: filter.description } : {}),\n ...(filter.disabled !== undefined ? { disabled: filter.disabled } : {}),\n };\n\n switch (filter.kind) {\n case \"range\":\n return {\n ...shared,\n kind: \"number\",\n value: parseBoundsValue(raw),\n onChange: (next: FilterBarNumberValue) => write(serializeBoundsValue(next)),\n ...(filter.min !== undefined ? { domainMin: filter.min } : {}),\n ...(filter.max !== undefined ? { domainMax: filter.max } : {}),\n ...(filter.step !== undefined ? { step: filter.step } : {}),\n };\n case \"boolean\":\n return {\n ...shared,\n kind: \"tristate\",\n value: raw === \"\" ? undefined : raw === \"true\",\n onChange: (next: TriState) => write(next === undefined ? \"\" : String(next)),\n };\n case \"text\":\n return {\n ...shared,\n kind: \"text\",\n value: raw,\n onChange: (next: string) => write(next),\n };\n default:\n return buildTermsFilter(args, shared, raw, write);\n }\n}\n\nfunction buildTermsFilter(\n { filter, options }: BuildArgs,\n shared: { key: string; label: string; description?: string; disabled?: boolean },\n raw: string,\n write: (serialized: string) => void,\n): FilterBarFilter {\n const lookupValues = options.lookupValues;\n return {\n ...shared,\n kind: \"multi\",\n value: parseMultiFilterValue(raw),\n onChange: (next) => write(serializeMultiFilterValue(next)),\n options: (filter.options ?? []).map(toMultiSelectOption),\n ...(filter.truncated !== undefined ? { truncated: filter.truncated } : {}),\n ...(filter.total !== undefined ? { total: filter.total } : {}),\n // The field owns the in-flight flag from the promise this returns, so no\n // `loading` is passed: a second source of truth for it could disagree.\n ...(lookupValues && filter.lookup\n ? {\n onSearch: async (search: string) => {\n const result = await lookupValues({\n filterKey: shared.key,\n search,\n limit: DATA_TABLE_FILTER_LOOKUP_LIMIT,\n });\n return result.options.map(toMultiSelectOption);\n },\n }\n : {}),\n };\n}\n\nfunction buildTimeRange(\n filterKey: string,\n filter: DataTableColumnFilter,\n values: DataTableFilterSelection,\n setValues: Dispatch<SetStateAction<DataTableFilterSelection>>,\n): FilterBarRangeProps {\n const bounds = parseBoundsValue(values[filterKey] ?? \"\");\n return {\n ...(bounds.min !== undefined ? { from: bounds.min } : {}),\n ...(bounds.max !== undefined ? { to: bounds.max } : {}),\n onApply: (from, to) =>\n setValues((current) =>\n updateFilterSelection(current, filterKey, serializeBoundsValue({ min: from, max: to })),\n ),\n ...(filter.presets !== undefined ? { presets: filter.presets } : {}),\n timeEnabled: true,\n };\n}\n\n/**\n * Reads the bounded half of the selection grammar: comma-separated tokens, each\n * carrying its own comparison operator. The bar's controls are inclusive on\n * both edges, so that is what they write back — but a bound typed by hand or\n * arriving in a URL keeps whatever operator it came with.\n */\nfunction parseBoundsValue(raw: string): FilterBarNumberValue {\n const bounds: FilterBarNumberValue = {};\n for (const token of raw.split(\",\")) {\n const trimmed = token.trim();\n if (trimmed.startsWith(\">\")) {\n bounds.min = trimmed.replace(/^>=?/, \"\");\n } else if (trimmed.startsWith(\"<\")) {\n bounds.max = trimmed.replace(/^<=?/, \"\");\n }\n }\n return bounds;\n}\n\nfunction serializeBoundsValue(value: FilterBarNumberValue): string {\n const tokens: string[] = [];\n if (value.min) tokens.push(`>=${value.min}`);\n if (value.max) tokens.push(`<=${value.max}`);\n return tokens.join(\",\");\n}\n\nfunction toMultiSelectOption(option: DataTableFilterOption): MultiSelectOption {\n const label = option.label ?? option.value;\n return {\n value: option.value,\n label,\n ...(option.count !== undefined ? { title: `${label} · ${option.count.toLocaleString()}` } : {}),\n };\n}\n\n/**\n * Refuses a DataTable that would filter twice or offer a control wired to\n * nothing. Both are silent in a running table — rows narrow more than the user\n * asked, or a box swallows what they type — so they are refused at the seam.\n */\nexport function assertDataTableFilterProps(props: {\n autoFilter: boolean;\n manualFilter: boolean;\n showGlobalFilter: boolean;\n globalFilterControlled: boolean;\n hasExternalSearch: boolean;\n}): void {\n if (props.autoFilter && props.manualFilter) {\n throw new Error(\n \"DataTable: autoFilter generates filters that narrow rows locally, which manualFilter then suppresses — the controls would render and do nothing. Pass externalFilters instead.\",\n );\n }\n if (\n props.manualFilter &&\n props.showGlobalFilter &&\n !props.globalFilterControlled &&\n !props.hasExternalSearch\n ) {\n throw new Error(\n \"DataTable: manualFilter suppresses the built-in search's row narrowing, so showGlobalFilter needs globalFilter/onGlobalFilterChange or externalSearch to reach the source.\",\n );\n }\n}\n"],"names":[],"mappings":"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"}
|