@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadPicker.cjs","sources":["../../../src/data/ai/ThreadPicker.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon } from \"../Icon\";\nimport { UiComment, UiAdd, UiTrash, UiChevronDown } from \"../../icons\";\n\n/** One conversation as returned by the threads endpoint. Only `id` is required;\n * `title`/cost are rendered when present so the picker works against minimal\n * backends (e.g. clicky's in-memory ThreadStore, which has no cost). */\nexport interface ThreadSummary {\n id: string;\n title?: string | null;\n totalCostUsd?: number | null;\n updatedAt?: string;\n}\n\n/** An injectable thread data source, for apps that load conversations through\n * their own client (e.g. react-query) rather than a plain `${api}` fetch — and\n * for backend-free stories/demos. When supplied it replaces the `api` calls. */\nexport interface ThreadSource {\n /** Returns the conversation list (re-invoked whenever the menu opens). */\n load: () => Promise<ThreadSummary[]>;\n /** Deletes a conversation. Omit to hide the delete affordance's effect. */\n remove?: (id: string) => Promise<void>;\n}\n\nexport type ThreadPickerProps = {\n /** Currently selected thread, or null for an unsaved/new conversation. */\n threadId: string | null;\n onSelect: (threadId: string) => void;\n onNew: () => void;\n /** Base endpoint for thread CRUD. GET lists, `${api}/${id}` DELETE removes.\n * Defaults to clicky's \"/api/chat/threads\". Ignored when `source` is set. */\n api?: string;\n /** Inject the thread list/delete directly instead of fetching `api`. */\n source?: ThreadSource;\n /** Optional query string appended to the list request (e.g. a scope id). */\n query?: string;\n className?: string;\n};\n\n/** A dropdown to switch between, create, and delete conversation threads. The\n * list is (re)fetched whenever the menu opens, so newly-persisted threads\n * appear without a manual refresh. */\nexport function ThreadPicker({\n threadId,\n onSelect,\n onNew,\n api = \"/api/chat/threads\",\n source,\n query,\n className = \"\",\n}: ThreadPickerProps) {\n const [threads, setThreads] = useState<ThreadSummary[]>([]);\n const [loading, setLoading] = useState(false);\n\n const listUrl = query ? `${api}?${query}` : api;\n\n const fetchThreads = useCallback(async () => {\n setLoading(true);\n try {\n if (source) {\n setThreads(await source.load());\n } else {\n const res = await fetch(listUrl);\n if (res.ok) setThreads(await res.json());\n }\n } catch (err) {\n console.warn(\"clicky-ui: failed to load threads\", err);\n } finally {\n setLoading(false);\n }\n }, [source, listUrl]);\n\n useEffect(() => {\n void fetchThreads();\n }, [fetchThreads]);\n\n const handleDelete = useCallback(\n async (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n if (source) {\n await source.remove?.(id);\n } else {\n await fetch(`${api}/${id}`, { method: \"DELETE\" });\n }\n setThreads((prev) => prev.filter((t) => t.id !== id));\n if (id === threadId) onNew();\n } catch (err) {\n console.warn(\"clicky-ui: failed to delete thread\", err);\n }\n },\n [source, api, threadId, onNew],\n );\n\n const current = threads.find((t) => t.id === threadId);\n const label = current?.title || \"New Chat\";\n\n return (\n <DropdownMenu\n align=\"left\"\n className={className}\n onOpenChange={(open) => {\n if (open) void fetchThreads();\n }}\n menuClassName=\"min-w-[220px] max-w-[320px] max-h-72 overflow-y-auto\"\n trigger={\n <button\n type=\"button\"\n className=\"flex max-w-[200px] items-center gap-1 truncate rounded px-2 py-1 text-sm font-medium hover:bg-muted\"\n >\n <Icon icon={UiComment} className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{label}</span>\n <Icon icon={UiChevronDown} className=\"size-3 shrink-0 opacity-50\" />\n </button>\n }\n >\n {(closeMenu) => (\n <div className=\"py-1\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs text-popover-foreground hover:bg-accent\"\n onClick={() => {\n onNew();\n closeMenu();\n }}\n >\n <Icon icon={UiAdd} className=\"size-3\" /> New Chat\n </button>\n <div className=\"my-1 border-t border-border\" />\n {loading && threads.length === 0 && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">Loading…</div>\n )}\n {threads.length === 0 && !loading && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">No previous conversations</div>\n )}\n {threads.map((t) => (\n <div\n key={t.id}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"group/thread flex w-full cursor-pointer items-center gap-2 px-3 py-1.5 text-left text-xs hover:bg-accent\",\n t.id === threadId && \"font-semibold\",\n )}\n onClick={() => {\n onSelect(t.id);\n closeMenu();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect(t.id);\n closeMenu();\n }\n }}\n >\n <Icon icon={UiComment} className=\"size-3 shrink-0\" />\n <span className=\"flex-1 truncate\">{t.title || \"Untitled\"}</span>\n {t.totalCostUsd != null && t.totalCostUsd > 0 && (\n <span className=\"shrink-0 text-[10px] text-muted-foreground\">\n ${t.totalCostUsd.toFixed(2)}\n </span>\n )}\n <button\n type=\"button\"\n aria-label=\"Delete conversation\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-destructive group-hover/thread:opacity-100\"\n onClick={(e) => void handleDelete(t.id, e)}\n >\n <Icon icon={UiTrash} className=\"size-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </DropdownMenu>\n );\n}\n"],"names":["useState","useCallback","useEffect","jsx","DropdownMenu","jsxs","Icon","UiComment","UiChevronDown","UiAdd","cn","UiTrash"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadPicker.cjs","sources":["../../../src/data/ai/ThreadPicker.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon } from \"../Icon\";\nimport {\n UiComment,\n UiAdd,\n UiTrash,\n UiChevronDown,\n UiPencilSimpleLine,\n} from \"../../icons\";\n\n/** One conversation as returned by the sessions endpoint. Only `id` is required;\n * `title`/cost are rendered when present so the picker works against minimal\n * backends (e.g. clicky's in-memory ThreadStore, which has no cost). */\nexport interface ThreadSummary {\n id: string;\n title?: string | null;\n totalCostUsd?: number | null;\n updatedAt?: string;\n}\n\n/** An injectable thread data source, for apps that load conversations through\n * their own client (e.g. react-query) rather than a plain `${api}` fetch — and\n * for backend-free stories/demos. When supplied it replaces the `api` calls. */\nexport interface ThreadSource {\n /** Returns the conversation list (re-invoked whenever the menu opens). */\n load: () => Promise<ThreadSummary[]>;\n /** Creates a durable conversation before its first message is sent. */\n create?: () => Promise<ThreadSummary>;\n /** Deletes a conversation. Omit to hide the delete affordance's effect. */\n remove?: (id: string) => Promise<void>;\n /** Renames a conversation. Omit to hide the rename affordance. */\n rename?: (id: string, title: string) => Promise<void>;\n}\n\nexport type ThreadPickerProps = {\n /** Currently selected thread, or null for an unsaved/new conversation. */\n threadId: string | null;\n onSelect: (threadId: string) => void;\n onNew: () => void;\n /** Base endpoint for session CRUD. GET lists, `${api}/${id}` DELETE removes\n * and PATCH renames. Defaults to Captain's \"/api/chat/sessions\". Ignored when\n * `source` is set. */\n api?: string;\n /** Inject the thread list/delete/rename directly instead of fetching `api`. */\n source?: ThreadSource;\n /** Optional query string appended to the list request (e.g. a scope id). */\n query?: string;\n /** Changing this refetches the list, so a title the backend derived during a\n * turn appears without reopening the menu. */\n refreshToken?: number;\n className?: string;\n};\n\n/** A dropdown to switch between, create, and delete conversation threads. The\n * list is (re)fetched whenever the menu opens, so newly-persisted threads\n * appear without a manual refresh. */\nexport function ThreadPicker({\n threadId,\n onSelect,\n onNew,\n api = \"/api/chat/sessions\",\n source,\n query,\n refreshToken,\n className = \"\",\n}: ThreadPickerProps) {\n const [threads, setThreads] = useState<ThreadSummary[]>([]);\n const [loading, setLoading] = useState(false);\n const [renaming, setRenaming] = useState<{ id: string; title: string }>();\n const canRename = source ? Boolean(source.rename) : Boolean(api);\n\n const listUrl = query ? `${api}?${query}` : api;\n\n const fetchThreads = useCallback(async () => {\n setLoading(true);\n try {\n if (source) {\n setThreads(await source.load());\n } else {\n const res = await fetch(listUrl);\n if (res.ok) setThreads(await res.json());\n }\n } catch (err) {\n console.warn(\"clicky-ui: failed to load threads\", err);\n } finally {\n setLoading(false);\n }\n }, [source, listUrl]);\n\n useEffect(() => {\n void fetchThreads();\n }, [fetchThreads, refreshToken]);\n\n const commitRename = useCallback(async () => {\n if (!renaming) return;\n const { id, title } = renaming;\n setRenaming(undefined);\n const trimmed = title.trim();\n const previous = threads.find((t) => t.id === id)?.title ?? null;\n if (!trimmed || trimmed === previous) return;\n setThreads((prev) =>\n prev.map((t) => (t.id === id ? { ...t, title: trimmed } : t)),\n );\n try {\n if (source) {\n await source.rename?.(id, trimmed);\n } else {\n const res = await fetch(`${api}/${id}`, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ title: trimmed }),\n });\n if (!res.ok) throw new Error(`rename failed with status ${res.status}`);\n }\n } catch (err) {\n console.warn(\"clicky-ui: failed to rename thread\", err);\n setThreads((prev) =>\n prev.map((t) => (t.id === id ? { ...t, title: previous } : t)),\n );\n }\n }, [api, renaming, source, threads]);\n\n const handleDelete = useCallback(\n async (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n if (source) {\n await source.remove?.(id);\n } else {\n await fetch(`${api}/${id}`, { method: \"DELETE\" });\n }\n setThreads((prev) => prev.filter((t) => t.id !== id));\n if (id === threadId) onNew();\n } catch (err) {\n console.warn(\"clicky-ui: failed to delete thread\", err);\n }\n },\n [source, api, threadId, onNew],\n );\n\n const current = threads.find((t) => t.id === threadId);\n const label = current?.title || \"New Chat\";\n\n return (\n <DropdownMenu\n align=\"left\"\n className={className}\n onOpenChange={(open) => {\n if (open) void fetchThreads();\n }}\n menuClassName=\"min-w-[220px] max-w-[320px] max-h-72 overflow-y-auto\"\n trigger={\n <button\n type=\"button\"\n className=\"flex max-w-[200px] items-center gap-1 truncate rounded px-2 py-1 text-sm font-medium hover:bg-muted\"\n >\n <Icon icon={UiComment} className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{label}</span>\n <Icon icon={UiChevronDown} className=\"size-3 shrink-0 opacity-50\" />\n </button>\n }\n >\n {(closeMenu) => (\n <div className=\"py-1\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs text-popover-foreground hover:bg-accent\"\n onClick={() => {\n onNew();\n closeMenu();\n }}\n >\n <Icon icon={UiAdd} className=\"size-3\" /> New Chat\n </button>\n <div className=\"my-1 border-t border-border\" />\n {loading && threads.length === 0 && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">\n Loading…\n </div>\n )}\n {threads.length === 0 && !loading && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">\n No previous conversations\n </div>\n )}\n {threads.map((t) => (\n <div\n key={t.id}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"group/thread flex w-full cursor-pointer items-center gap-2 px-3 py-1.5 text-left text-xs hover:bg-accent\",\n t.id === threadId && \"font-semibold\",\n )}\n onClick={() => {\n onSelect(t.id);\n closeMenu();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect(t.id);\n closeMenu();\n }\n }}\n >\n <Icon icon={UiComment} className=\"size-3 shrink-0\" />\n {renaming?.id === t.id ? (\n <input\n autoFocus\n aria-label=\"Conversation title\"\n className=\"flex-1 rounded border border-border bg-background px-1 py-0.5 text-xs\"\n value={renaming.title}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) =>\n setRenaming({ id: t.id, title: e.target.value })\n }\n onBlur={() => setRenaming(undefined)}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Enter\") void commitRename();\n if (e.key === \"Escape\") setRenaming(undefined);\n }}\n />\n ) : (\n <span className=\"flex-1 truncate\">{t.title || \"Untitled\"}</span>\n )}\n {t.totalCostUsd != null && t.totalCostUsd > 0 && (\n <span className=\"shrink-0 text-[10px] text-muted-foreground\">\n ${t.totalCostUsd.toFixed(2)}\n </span>\n )}\n {canRename && renaming?.id !== t.id && (\n <button\n type=\"button\"\n aria-label=\"Rename conversation\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-foreground group-hover/thread:opacity-100\"\n onClick={(e) => {\n e.stopPropagation();\n setRenaming({ id: t.id, title: t.title ?? \"\" });\n }}\n >\n <Icon icon={UiPencilSimpleLine} className=\"size-3\" />\n </button>\n )}\n <button\n type=\"button\"\n aria-label=\"Delete conversation\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-destructive group-hover/thread:opacity-100\"\n onClick={(e) => void handleDelete(t.id, e)}\n >\n <Icon icon={UiTrash} className=\"size-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </DropdownMenu>\n );\n}\n"],"names":["useState","useCallback","useEffect","jsx","DropdownMenu","jsxs","Icon","UiComment","UiChevronDown","UiAdd","cn","UiPencilSimpleLine","UiTrash"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** One conversation as returned by the
|
|
1
|
+
/** One conversation as returned by the sessions endpoint. Only `id` is required;
|
|
2
2
|
* `title`/cost are rendered when present so the picker works against minimal
|
|
3
3
|
* backends (e.g. clicky's in-memory ThreadStore, which has no cost). */
|
|
4
4
|
export interface ThreadSummary {
|
|
@@ -13,25 +13,33 @@ export interface ThreadSummary {
|
|
|
13
13
|
export interface ThreadSource {
|
|
14
14
|
/** Returns the conversation list (re-invoked whenever the menu opens). */
|
|
15
15
|
load: () => Promise<ThreadSummary[]>;
|
|
16
|
+
/** Creates a durable conversation before its first message is sent. */
|
|
17
|
+
create?: () => Promise<ThreadSummary>;
|
|
16
18
|
/** Deletes a conversation. Omit to hide the delete affordance's effect. */
|
|
17
19
|
remove?: (id: string) => Promise<void>;
|
|
20
|
+
/** Renames a conversation. Omit to hide the rename affordance. */
|
|
21
|
+
rename?: (id: string, title: string) => Promise<void>;
|
|
18
22
|
}
|
|
19
23
|
export type ThreadPickerProps = {
|
|
20
24
|
/** Currently selected thread, or null for an unsaved/new conversation. */
|
|
21
25
|
threadId: string | null;
|
|
22
26
|
onSelect: (threadId: string) => void;
|
|
23
27
|
onNew: () => void;
|
|
24
|
-
/** Base endpoint for
|
|
25
|
-
* Defaults to
|
|
28
|
+
/** Base endpoint for session CRUD. GET lists, `${api}/${id}` DELETE removes
|
|
29
|
+
* and PATCH renames. Defaults to Captain's "/api/chat/sessions". Ignored when
|
|
30
|
+
* `source` is set. */
|
|
26
31
|
api?: string;
|
|
27
|
-
/** Inject the thread list/delete directly instead of fetching `api`. */
|
|
32
|
+
/** Inject the thread list/delete/rename directly instead of fetching `api`. */
|
|
28
33
|
source?: ThreadSource;
|
|
29
34
|
/** Optional query string appended to the list request (e.g. a scope id). */
|
|
30
35
|
query?: string;
|
|
36
|
+
/** Changing this refetches the list, so a title the backend derived during a
|
|
37
|
+
* turn appears without reopening the menu. */
|
|
38
|
+
refreshToken?: number;
|
|
31
39
|
className?: string;
|
|
32
40
|
};
|
|
33
41
|
/** A dropdown to switch between, create, and delete conversation threads. The
|
|
34
42
|
* list is (re)fetched whenever the menu opens, so newly-persisted threads
|
|
35
43
|
* appear without a manual refresh. */
|
|
36
|
-
export declare function ThreadPicker({ threadId, onSelect, onNew, api, source, query, className, }: ThreadPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
export declare function ThreadPicker({ threadId, onSelect, onNew, api, source, query, refreshToken, className, }: ThreadPickerProps): import("react/jsx-runtime").JSX.Element;
|
|
37
45
|
//# sourceMappingURL=ThreadPicker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadPicker.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ThreadPicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ThreadPicker.d.ts","sourceRoot":"","sources":["../../../src/data/ai/ThreadPicker.tsx"],"names":[],"mappings":"AAYA;;yEAEyE;AACzE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;iFAEiF;AACjF,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACrC,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IACtC,2EAA2E;IAC3E,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,kEAAkE;IAClE,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;2BAEuB;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;mDAC+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;uCAEuC;AACvC,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,GAA0B,EAC1B,MAAM,EACN,KAAK,EACL,YAAY,EACZ,SAAc,GACf,EAAE,iBAAiB,2CAkMnB"}
|
|
@@ -5,19 +5,23 @@ import { DropdownMenu } from "../../overlay/DropdownMenu.js";
|
|
|
5
5
|
import { Icon } from "../Icon.js";
|
|
6
6
|
import { UiAdd } from "../../icons/components/UiAdd.js";
|
|
7
7
|
import { UiComment } from "../../icons/components/UiComment.js";
|
|
8
|
+
import { UiPencilSimpleLine } from "../../icons/components/UiPencilSimpleLine.js";
|
|
8
9
|
import { UiTrash } from "../../icons/components/UiTrash.js";
|
|
9
10
|
import { UiChevronDown } from "../../icons/components/UiChevronDown.js";
|
|
10
11
|
function ThreadPicker({
|
|
11
12
|
threadId,
|
|
12
13
|
onSelect,
|
|
13
14
|
onNew,
|
|
14
|
-
api = "/api/chat/
|
|
15
|
+
api = "/api/chat/sessions",
|
|
15
16
|
source,
|
|
16
17
|
query,
|
|
18
|
+
refreshToken,
|
|
17
19
|
className = ""
|
|
18
20
|
}) {
|
|
19
21
|
const [threads, setThreads] = useState([]);
|
|
20
22
|
const [loading, setLoading] = useState(false);
|
|
23
|
+
const [renaming, setRenaming] = useState();
|
|
24
|
+
const canRename = source ? Boolean(source.rename) : Boolean(api);
|
|
21
25
|
const listUrl = query ? `${api}?${query}` : api;
|
|
22
26
|
const fetchThreads = useCallback(async () => {
|
|
23
27
|
setLoading(true);
|
|
@@ -36,7 +40,36 @@ function ThreadPicker({
|
|
|
36
40
|
}, [source, listUrl]);
|
|
37
41
|
useEffect(() => {
|
|
38
42
|
void fetchThreads();
|
|
39
|
-
}, [fetchThreads]);
|
|
43
|
+
}, [fetchThreads, refreshToken]);
|
|
44
|
+
const commitRename = useCallback(async () => {
|
|
45
|
+
var _a, _b;
|
|
46
|
+
if (!renaming) return;
|
|
47
|
+
const { id, title } = renaming;
|
|
48
|
+
setRenaming(void 0);
|
|
49
|
+
const trimmed = title.trim();
|
|
50
|
+
const previous = ((_a = threads.find((t) => t.id === id)) == null ? void 0 : _a.title) ?? null;
|
|
51
|
+
if (!trimmed || trimmed === previous) return;
|
|
52
|
+
setThreads(
|
|
53
|
+
(prev) => prev.map((t) => t.id === id ? { ...t, title: trimmed } : t)
|
|
54
|
+
);
|
|
55
|
+
try {
|
|
56
|
+
if (source) {
|
|
57
|
+
await ((_b = source.rename) == null ? void 0 : _b.call(source, id, trimmed));
|
|
58
|
+
} else {
|
|
59
|
+
const res = await fetch(`${api}/${id}`, {
|
|
60
|
+
method: "PATCH",
|
|
61
|
+
headers: { "Content-Type": "application/json" },
|
|
62
|
+
body: JSON.stringify({ title: trimmed })
|
|
63
|
+
});
|
|
64
|
+
if (!res.ok) throw new Error(`rename failed with status ${res.status}`);
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
console.warn("clicky-ui: failed to rename thread", err);
|
|
68
|
+
setThreads(
|
|
69
|
+
(prev) => prev.map((t) => t.id === id ? { ...t, title: previous } : t)
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
}, [api, renaming, source, threads]);
|
|
40
73
|
const handleDelete = useCallback(
|
|
41
74
|
async (id, e) => {
|
|
42
75
|
var _a;
|
|
@@ -119,11 +152,40 @@ function ThreadPicker({
|
|
|
119
152
|
},
|
|
120
153
|
children: [
|
|
121
154
|
/* @__PURE__ */ jsx(Icon, { icon: UiComment, className: "size-3 shrink-0" }),
|
|
122
|
-
|
|
155
|
+
(renaming == null ? void 0 : renaming.id) === t.id ? /* @__PURE__ */ jsx(
|
|
156
|
+
"input",
|
|
157
|
+
{
|
|
158
|
+
autoFocus: true,
|
|
159
|
+
"aria-label": "Conversation title",
|
|
160
|
+
className: "flex-1 rounded border border-border bg-background px-1 py-0.5 text-xs",
|
|
161
|
+
value: renaming.title,
|
|
162
|
+
onClick: (e) => e.stopPropagation(),
|
|
163
|
+
onChange: (e) => setRenaming({ id: t.id, title: e.target.value }),
|
|
164
|
+
onBlur: () => setRenaming(void 0),
|
|
165
|
+
onKeyDown: (e) => {
|
|
166
|
+
e.stopPropagation();
|
|
167
|
+
if (e.key === "Enter") void commitRename();
|
|
168
|
+
if (e.key === "Escape") setRenaming(void 0);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
) : /* @__PURE__ */ jsx("span", { className: "flex-1 truncate", children: t.title || "Untitled" }),
|
|
123
172
|
t.totalCostUsd != null && t.totalCostUsd > 0 && /* @__PURE__ */ jsxs("span", { className: "shrink-0 text-[10px] text-muted-foreground", children: [
|
|
124
173
|
"$",
|
|
125
174
|
t.totalCostUsd.toFixed(2)
|
|
126
175
|
] }),
|
|
176
|
+
canRename && (renaming == null ? void 0 : renaming.id) !== t.id && /* @__PURE__ */ jsx(
|
|
177
|
+
"button",
|
|
178
|
+
{
|
|
179
|
+
type: "button",
|
|
180
|
+
"aria-label": "Rename conversation",
|
|
181
|
+
className: "shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-foreground group-hover/thread:opacity-100",
|
|
182
|
+
onClick: (e) => {
|
|
183
|
+
e.stopPropagation();
|
|
184
|
+
setRenaming({ id: t.id, title: t.title ?? "" });
|
|
185
|
+
},
|
|
186
|
+
children: /* @__PURE__ */ jsx(Icon, { icon: UiPencilSimpleLine, className: "size-3" })
|
|
187
|
+
}
|
|
188
|
+
),
|
|
127
189
|
/* @__PURE__ */ jsx(
|
|
128
190
|
"button",
|
|
129
191
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadPicker.js","sources":["../../../src/data/ai/ThreadPicker.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon } from \"../Icon\";\nimport { UiComment, UiAdd, UiTrash, UiChevronDown } from \"../../icons\";\n\n/** One conversation as returned by the threads endpoint. Only `id` is required;\n * `title`/cost are rendered when present so the picker works against minimal\n * backends (e.g. clicky's in-memory ThreadStore, which has no cost). */\nexport interface ThreadSummary {\n id: string;\n title?: string | null;\n totalCostUsd?: number | null;\n updatedAt?: string;\n}\n\n/** An injectable thread data source, for apps that load conversations through\n * their own client (e.g. react-query) rather than a plain `${api}` fetch — and\n * for backend-free stories/demos. When supplied it replaces the `api` calls. */\nexport interface ThreadSource {\n /** Returns the conversation list (re-invoked whenever the menu opens). */\n load: () => Promise<ThreadSummary[]>;\n /** Deletes a conversation. Omit to hide the delete affordance's effect. */\n remove?: (id: string) => Promise<void>;\n}\n\nexport type ThreadPickerProps = {\n /** Currently selected thread, or null for an unsaved/new conversation. */\n threadId: string | null;\n onSelect: (threadId: string) => void;\n onNew: () => void;\n /** Base endpoint for thread CRUD. GET lists, `${api}/${id}` DELETE removes.\n * Defaults to clicky's \"/api/chat/threads\". Ignored when `source` is set. */\n api?: string;\n /** Inject the thread list/delete directly instead of fetching `api`. */\n source?: ThreadSource;\n /** Optional query string appended to the list request (e.g. a scope id). */\n query?: string;\n className?: string;\n};\n\n/** A dropdown to switch between, create, and delete conversation threads. The\n * list is (re)fetched whenever the menu opens, so newly-persisted threads\n * appear without a manual refresh. */\nexport function ThreadPicker({\n threadId,\n onSelect,\n onNew,\n api = \"/api/chat/threads\",\n source,\n query,\n className = \"\",\n}: ThreadPickerProps) {\n const [threads, setThreads] = useState<ThreadSummary[]>([]);\n const [loading, setLoading] = useState(false);\n\n const listUrl = query ? `${api}?${query}` : api;\n\n const fetchThreads = useCallback(async () => {\n setLoading(true);\n try {\n if (source) {\n setThreads(await source.load());\n } else {\n const res = await fetch(listUrl);\n if (res.ok) setThreads(await res.json());\n }\n } catch (err) {\n console.warn(\"clicky-ui: failed to load threads\", err);\n } finally {\n setLoading(false);\n }\n }, [source, listUrl]);\n\n useEffect(() => {\n void fetchThreads();\n }, [fetchThreads]);\n\n const handleDelete = useCallback(\n async (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n if (source) {\n await source.remove?.(id);\n } else {\n await fetch(`${api}/${id}`, { method: \"DELETE\" });\n }\n setThreads((prev) => prev.filter((t) => t.id !== id));\n if (id === threadId) onNew();\n } catch (err) {\n console.warn(\"clicky-ui: failed to delete thread\", err);\n }\n },\n [source, api, threadId, onNew],\n );\n\n const current = threads.find((t) => t.id === threadId);\n const label = current?.title || \"New Chat\";\n\n return (\n <DropdownMenu\n align=\"left\"\n className={className}\n onOpenChange={(open) => {\n if (open) void fetchThreads();\n }}\n menuClassName=\"min-w-[220px] max-w-[320px] max-h-72 overflow-y-auto\"\n trigger={\n <button\n type=\"button\"\n className=\"flex max-w-[200px] items-center gap-1 truncate rounded px-2 py-1 text-sm font-medium hover:bg-muted\"\n >\n <Icon icon={UiComment} className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{label}</span>\n <Icon icon={UiChevronDown} className=\"size-3 shrink-0 opacity-50\" />\n </button>\n }\n >\n {(closeMenu) => (\n <div className=\"py-1\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs text-popover-foreground hover:bg-accent\"\n onClick={() => {\n onNew();\n closeMenu();\n }}\n >\n <Icon icon={UiAdd} className=\"size-3\" /> New Chat\n </button>\n <div className=\"my-1 border-t border-border\" />\n {loading && threads.length === 0 && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">Loading…</div>\n )}\n {threads.length === 0 && !loading && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">No previous conversations</div>\n )}\n {threads.map((t) => (\n <div\n key={t.id}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"group/thread flex w-full cursor-pointer items-center gap-2 px-3 py-1.5 text-left text-xs hover:bg-accent\",\n t.id === threadId && \"font-semibold\",\n )}\n onClick={() => {\n onSelect(t.id);\n closeMenu();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect(t.id);\n closeMenu();\n }\n }}\n >\n <Icon icon={UiComment} className=\"size-3 shrink-0\" />\n <span className=\"flex-1 truncate\">{t.title || \"Untitled\"}</span>\n {t.totalCostUsd != null && t.totalCostUsd > 0 && (\n <span className=\"shrink-0 text-[10px] text-muted-foreground\">\n ${t.totalCostUsd.toFixed(2)}\n </span>\n )}\n <button\n type=\"button\"\n aria-label=\"Delete conversation\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-destructive group-hover/thread:opacity-100\"\n onClick={(e) => void handleDelete(t.id, e)}\n >\n <Icon icon={UiTrash} className=\"size-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </DropdownMenu>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ThreadPicker.js","sources":["../../../src/data/ai/ThreadPicker.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { DropdownMenu } from \"../../overlay/DropdownMenu\";\nimport { Icon } from \"../Icon\";\nimport {\n UiComment,\n UiAdd,\n UiTrash,\n UiChevronDown,\n UiPencilSimpleLine,\n} from \"../../icons\";\n\n/** One conversation as returned by the sessions endpoint. Only `id` is required;\n * `title`/cost are rendered when present so the picker works against minimal\n * backends (e.g. clicky's in-memory ThreadStore, which has no cost). */\nexport interface ThreadSummary {\n id: string;\n title?: string | null;\n totalCostUsd?: number | null;\n updatedAt?: string;\n}\n\n/** An injectable thread data source, for apps that load conversations through\n * their own client (e.g. react-query) rather than a plain `${api}` fetch — and\n * for backend-free stories/demos. When supplied it replaces the `api` calls. */\nexport interface ThreadSource {\n /** Returns the conversation list (re-invoked whenever the menu opens). */\n load: () => Promise<ThreadSummary[]>;\n /** Creates a durable conversation before its first message is sent. */\n create?: () => Promise<ThreadSummary>;\n /** Deletes a conversation. Omit to hide the delete affordance's effect. */\n remove?: (id: string) => Promise<void>;\n /** Renames a conversation. Omit to hide the rename affordance. */\n rename?: (id: string, title: string) => Promise<void>;\n}\n\nexport type ThreadPickerProps = {\n /** Currently selected thread, or null for an unsaved/new conversation. */\n threadId: string | null;\n onSelect: (threadId: string) => void;\n onNew: () => void;\n /** Base endpoint for session CRUD. GET lists, `${api}/${id}` DELETE removes\n * and PATCH renames. Defaults to Captain's \"/api/chat/sessions\". Ignored when\n * `source` is set. */\n api?: string;\n /** Inject the thread list/delete/rename directly instead of fetching `api`. */\n source?: ThreadSource;\n /** Optional query string appended to the list request (e.g. a scope id). */\n query?: string;\n /** Changing this refetches the list, so a title the backend derived during a\n * turn appears without reopening the menu. */\n refreshToken?: number;\n className?: string;\n};\n\n/** A dropdown to switch between, create, and delete conversation threads. The\n * list is (re)fetched whenever the menu opens, so newly-persisted threads\n * appear without a manual refresh. */\nexport function ThreadPicker({\n threadId,\n onSelect,\n onNew,\n api = \"/api/chat/sessions\",\n source,\n query,\n refreshToken,\n className = \"\",\n}: ThreadPickerProps) {\n const [threads, setThreads] = useState<ThreadSummary[]>([]);\n const [loading, setLoading] = useState(false);\n const [renaming, setRenaming] = useState<{ id: string; title: string }>();\n const canRename = source ? Boolean(source.rename) : Boolean(api);\n\n const listUrl = query ? `${api}?${query}` : api;\n\n const fetchThreads = useCallback(async () => {\n setLoading(true);\n try {\n if (source) {\n setThreads(await source.load());\n } else {\n const res = await fetch(listUrl);\n if (res.ok) setThreads(await res.json());\n }\n } catch (err) {\n console.warn(\"clicky-ui: failed to load threads\", err);\n } finally {\n setLoading(false);\n }\n }, [source, listUrl]);\n\n useEffect(() => {\n void fetchThreads();\n }, [fetchThreads, refreshToken]);\n\n const commitRename = useCallback(async () => {\n if (!renaming) return;\n const { id, title } = renaming;\n setRenaming(undefined);\n const trimmed = title.trim();\n const previous = threads.find((t) => t.id === id)?.title ?? null;\n if (!trimmed || trimmed === previous) return;\n setThreads((prev) =>\n prev.map((t) => (t.id === id ? { ...t, title: trimmed } : t)),\n );\n try {\n if (source) {\n await source.rename?.(id, trimmed);\n } else {\n const res = await fetch(`${api}/${id}`, {\n method: \"PATCH\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ title: trimmed }),\n });\n if (!res.ok) throw new Error(`rename failed with status ${res.status}`);\n }\n } catch (err) {\n console.warn(\"clicky-ui: failed to rename thread\", err);\n setThreads((prev) =>\n prev.map((t) => (t.id === id ? { ...t, title: previous } : t)),\n );\n }\n }, [api, renaming, source, threads]);\n\n const handleDelete = useCallback(\n async (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n try {\n if (source) {\n await source.remove?.(id);\n } else {\n await fetch(`${api}/${id}`, { method: \"DELETE\" });\n }\n setThreads((prev) => prev.filter((t) => t.id !== id));\n if (id === threadId) onNew();\n } catch (err) {\n console.warn(\"clicky-ui: failed to delete thread\", err);\n }\n },\n [source, api, threadId, onNew],\n );\n\n const current = threads.find((t) => t.id === threadId);\n const label = current?.title || \"New Chat\";\n\n return (\n <DropdownMenu\n align=\"left\"\n className={className}\n onOpenChange={(open) => {\n if (open) void fetchThreads();\n }}\n menuClassName=\"min-w-[220px] max-w-[320px] max-h-72 overflow-y-auto\"\n trigger={\n <button\n type=\"button\"\n className=\"flex max-w-[200px] items-center gap-1 truncate rounded px-2 py-1 text-sm font-medium hover:bg-muted\"\n >\n <Icon icon={UiComment} className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{label}</span>\n <Icon icon={UiChevronDown} className=\"size-3 shrink-0 opacity-50\" />\n </button>\n }\n >\n {(closeMenu) => (\n <div className=\"py-1\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs text-popover-foreground hover:bg-accent\"\n onClick={() => {\n onNew();\n closeMenu();\n }}\n >\n <Icon icon={UiAdd} className=\"size-3\" /> New Chat\n </button>\n <div className=\"my-1 border-t border-border\" />\n {loading && threads.length === 0 && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">\n Loading…\n </div>\n )}\n {threads.length === 0 && !loading && (\n <div className=\"px-3 py-1.5 text-xs text-muted-foreground\">\n No previous conversations\n </div>\n )}\n {threads.map((t) => (\n <div\n key={t.id}\n role=\"button\"\n tabIndex={0}\n className={cn(\n \"group/thread flex w-full cursor-pointer items-center gap-2 px-3 py-1.5 text-left text-xs hover:bg-accent\",\n t.id === threadId && \"font-semibold\",\n )}\n onClick={() => {\n onSelect(t.id);\n closeMenu();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onSelect(t.id);\n closeMenu();\n }\n }}\n >\n <Icon icon={UiComment} className=\"size-3 shrink-0\" />\n {renaming?.id === t.id ? (\n <input\n autoFocus\n aria-label=\"Conversation title\"\n className=\"flex-1 rounded border border-border bg-background px-1 py-0.5 text-xs\"\n value={renaming.title}\n onClick={(e) => e.stopPropagation()}\n onChange={(e) =>\n setRenaming({ id: t.id, title: e.target.value })\n }\n onBlur={() => setRenaming(undefined)}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === \"Enter\") void commitRename();\n if (e.key === \"Escape\") setRenaming(undefined);\n }}\n />\n ) : (\n <span className=\"flex-1 truncate\">{t.title || \"Untitled\"}</span>\n )}\n {t.totalCostUsd != null && t.totalCostUsd > 0 && (\n <span className=\"shrink-0 text-[10px] text-muted-foreground\">\n ${t.totalCostUsd.toFixed(2)}\n </span>\n )}\n {canRename && renaming?.id !== t.id && (\n <button\n type=\"button\"\n aria-label=\"Rename conversation\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-foreground group-hover/thread:opacity-100\"\n onClick={(e) => {\n e.stopPropagation();\n setRenaming({ id: t.id, title: t.title ?? \"\" });\n }}\n >\n <Icon icon={UiPencilSimpleLine} className=\"size-3\" />\n </button>\n )}\n <button\n type=\"button\"\n aria-label=\"Delete conversation\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground opacity-0 hover:text-destructive group-hover/thread:opacity-100\"\n onClick={(e) => void handleDelete(t.id, e)}\n >\n <Icon icon={UiTrash} className=\"size-3\" />\n </button>\n </div>\n ))}\n </div>\n )}\n </DropdownMenu>\n );\n}\n"],"names":[],"mappings":"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"}
|