@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
|
@@ -15,11 +15,19 @@ export declare function useModalStack(open: boolean): ModalStackPosition;
|
|
|
15
15
|
* layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.
|
|
16
16
|
*/
|
|
17
17
|
export declare function useEscapeLayer(open: boolean, onEscape: () => void, enabled?: boolean): void;
|
|
18
|
+
/**
|
|
19
|
+
* Registers a running guided tour while `active`, so floating layers lift above
|
|
20
|
+
* its dim. Symmetric with `useModalStack`, but a count rather than a stack: the
|
|
21
|
+
* tour overlay does not nest.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useTourLayer(active: boolean): void;
|
|
18
24
|
/**
|
|
19
25
|
* z-index a floating layer (dropdown / combobox / tooltip / popover) should use
|
|
20
26
|
* so it renders above any open modal — and below the next nested modal — or at
|
|
21
|
-
* the popover floor when no modal is open.
|
|
22
|
-
*
|
|
27
|
+
* the popover floor when no modal is open. While a guided tour runs, the value
|
|
28
|
+
* also clears the tour's dim and step card, so a step that says "open this menu"
|
|
29
|
+
* shows the menu rather than hiding it under the overlay. Subscribes to the
|
|
30
|
+
* modal stack so the value tracks modals and tours opening and closing.
|
|
23
31
|
*/
|
|
24
32
|
export declare function useFloatingZIndex(): number;
|
|
25
33
|
//# sourceMappingURL=modalStack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modalStack.d.ts","sourceRoot":"","sources":["../../src/overlay/modalStack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"modalStack.d.ts","sourceRoot":"","sources":["../../src/overlay/modalStack.ts"],"names":[],"mappings":"AAqEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,oFAAoF;IACpF,KAAK,EAAE,OAAO,CAAC;IACf,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAoB/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,UAAO,QAgBjF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAYlD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C"}
|
|
@@ -4,6 +4,7 @@ const stack = [];
|
|
|
4
4
|
const listeners = /* @__PURE__ */ new Set();
|
|
5
5
|
const escapeStack = [];
|
|
6
6
|
let escapeDocument = null;
|
|
7
|
+
let tourLayers = 0;
|
|
7
8
|
function emit() {
|
|
8
9
|
for (const listener of listeners) listener();
|
|
9
10
|
}
|
|
@@ -14,7 +15,7 @@ function subscribe(listener) {
|
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
function getSnapshot() {
|
|
17
|
-
return stack.join("\0");
|
|
18
|
+
return `${tourLayers}:` + stack.join("\0");
|
|
18
19
|
}
|
|
19
20
|
function onEscapeKeyDown(event) {
|
|
20
21
|
if (event.defaultPrevented || event.key !== "Escape" || event.isComposing || event.keyCode === 229) {
|
|
@@ -73,15 +74,28 @@ function useEscapeLayer(open, onEscape, enabled = true) {
|
|
|
73
74
|
return () => removeEscapeLayer(id);
|
|
74
75
|
}, [enabled, id, open]);
|
|
75
76
|
}
|
|
77
|
+
function useTourLayer(active) {
|
|
78
|
+
useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
if (!active) return;
|
|
81
|
+
tourLayers += 1;
|
|
82
|
+
emit();
|
|
83
|
+
return () => {
|
|
84
|
+
tourLayers -= 1;
|
|
85
|
+
emit();
|
|
86
|
+
};
|
|
87
|
+
}, [active]);
|
|
88
|
+
}
|
|
76
89
|
function useFloatingZIndex() {
|
|
77
90
|
useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return
|
|
91
|
+
const base = stack.length === 0 ? zIndex.popover : zIndex.modal + (stack.length - 1) * zIndex.modalStep + zIndex.popoverOverModalOffset;
|
|
92
|
+
if (tourLayers === 0) return base;
|
|
93
|
+
return Math.max(base, zIndex.tour + zIndex.tourCardOffset + zIndex.popoverOverModalOffset);
|
|
81
94
|
}
|
|
82
95
|
export {
|
|
83
96
|
useEscapeLayer,
|
|
84
97
|
useFloatingZIndex,
|
|
85
|
-
useModalStack
|
|
98
|
+
useModalStack,
|
|
99
|
+
useTourLayer
|
|
86
100
|
};
|
|
87
101
|
//# sourceMappingURL=modalStack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modalStack.js","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\nconst escapeStack: Array<{ id: string; onEscape: () => void }> = [];\nlet escapeDocument: Document | null = null;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity; it only changes when an entry is pushed or
|
|
1
|
+
{"version":3,"file":"modalStack.js","sources":["../../src/overlay/modalStack.ts"],"sourcesContent":["import { useEffect, useId, useRef, useSyncExternalStore } from \"react\";\nimport { zIndex } from \"./zIndex\";\n\n// A process-wide stack of the currently open modals, topmost last. Modals mount\n// independently (no shared provider), so the stack lives at module scope and is\n// shared through useSyncExternalStore. It lets nested modals cooperate: only the\n// topmost reacts to Escape, and each renders above the one it opened over.\nconst stack: string[] = [];\nconst listeners = new Set<() => void>();\nconst escapeStack: Array<{ id: string; onEscape: () => void }> = [];\nlet escapeDocument: Document | null = null;\n// Running guided tours. A tour dims the page from `zIndex.tour`, far above the\n// modal band, so floating content opened *during* a tour (the menu a step tells\n// the user to open) has to clear that dim or it renders invisibly underneath.\nlet tourLayers = 0;\n\nfunction emit() {\n for (const listener of listeners) listener();\n}\n\nfunction subscribe(listener: () => void) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\n// The snapshot is the stack identity plus the tour-layer count; it only changes\n// when an entry is pushed or popped, so subscribers re-render exactly when their\n// position could have moved.\nfunction getSnapshot() {\n return `${tourLayers}:` + stack.join(\"\\u0000\");\n}\n\nfunction onEscapeKeyDown(event: KeyboardEvent) {\n if (\n event.defaultPrevented ||\n event.key !== \"Escape\" ||\n event.isComposing ||\n (event as KeyboardEvent & { keyCode?: number }).keyCode === 229\n ) {\n return;\n }\n\n const top = escapeStack[escapeStack.length - 1];\n if (!top) return;\n\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n top.onEscape();\n}\n\nfunction ensureEscapeListener() {\n if (escapeDocument || typeof document === \"undefined\") return;\n escapeDocument = document;\n escapeDocument.addEventListener(\"keydown\", onEscapeKeyDown);\n}\n\nfunction removeEscapeLayer(id: string) {\n const index = escapeStack.findIndex((entry) => entry.id === id);\n if (index !== -1) escapeStack.splice(index, 1);\n\n if (escapeStack.length === 0 && escapeDocument) {\n escapeDocument.removeEventListener(\"keydown\", onEscapeKeyDown);\n escapeDocument = null;\n }\n}\n\nexport type ModalStackPosition = {\n /** Whether this modal is the topmost open one and should own global affordances. */\n isTop: boolean;\n /** Zero-based depth in the stack; drives the stacking order of nested modals. */\n depth: number;\n};\n\n/**\n * Registers a modal in the global stack while `open`, returning its live\n * position. Used so a nested modal sits above its opener and only the topmost\n * modal closes on Escape.\n */\nexport function useModalStack(open: boolean): ModalStackPosition {\n const id = useId();\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!open) return;\n stack.push(id);\n emit();\n return () => {\n const index = stack.indexOf(id);\n if (index !== -1) stack.splice(index, 1);\n emit();\n };\n }, [open, id]);\n\n const depth = stack.indexOf(id);\n return {\n isTop: depth !== -1 && depth === stack.length - 1,\n depth: depth === -1 ? 0 : depth,\n };\n}\n\n/**\n * Registers an Escape-closeable overlay while `open`. The topmost registered\n * layer owns Escape, so a keypress dismisses one dialog/menu layer at a time.\n */\nexport function useEscapeLayer(open: boolean, onEscape: () => void, enabled = true) {\n const id = useId();\n const onEscapeRef = useRef(onEscape);\n onEscapeRef.current = onEscape;\n\n useEffect(() => {\n if (!open || !enabled) return;\n\n ensureEscapeListener();\n escapeStack.push({\n id,\n onEscape: () => onEscapeRef.current(),\n });\n\n return () => removeEscapeLayer(id);\n }, [enabled, id, open]);\n}\n\n/**\n * Registers a running guided tour while `active`, so floating layers lift above\n * its dim. Symmetric with `useModalStack`, but a count rather than a stack: the\n * tour overlay does not nest.\n */\nexport function useTourLayer(active: boolean): void {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n useEffect(() => {\n if (!active) return;\n tourLayers += 1;\n emit();\n return () => {\n tourLayers -= 1;\n emit();\n };\n }, [active]);\n}\n\n/**\n * z-index a floating layer (dropdown / combobox / tooltip / popover) should use\n * so it renders above any open modal — and below the next nested modal — or at\n * the popover floor when no modal is open. While a guided tour runs, the value\n * also clears the tour's dim and step card, so a step that says \"open this menu\"\n * shows the menu rather than hiding it under the overlay. Subscribes to the\n * modal stack so the value tracks modals and tours opening and closing.\n */\nexport function useFloatingZIndex(): number {\n useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n const base =\n stack.length === 0\n ? zIndex.popover\n : zIndex.modal + (stack.length - 1) * zIndex.modalStep + zIndex.popoverOverModalOffset;\n if (tourLayers === 0) return base;\n return Math.max(base, zIndex.tour + zIndex.tourCardOffset + zIndex.popoverOverModalOffset);\n}\n"],"names":[],"mappings":";;AAOA,MAAM,QAAkB,CAAA;AACxB,MAAM,gCAAgB,IAAA;AACtB,MAAM,cAA2D,CAAA;AACjE,IAAI,iBAAkC;AAItC,IAAI,aAAa;AAEjB,SAAS,OAAO;AACd,aAAW,YAAY,UAAW,UAAA;AACpC;AAEA,SAAS,UAAU,UAAsB;AACvC,YAAU,IAAI,QAAQ;AACtB,SAAO,MAAM;AACX,cAAU,OAAO,QAAQ;AAAA,EAC3B;AACF;AAKA,SAAS,cAAc;AACrB,SAAO,GAAG,UAAU,MAAM,MAAM,KAAK,IAAQ;AAC/C;AAEA,SAAS,gBAAgB,OAAsB;AAC7C,MACE,MAAM,oBACN,MAAM,QAAQ,YACd,MAAM,eACL,MAA+C,YAAY,KAC5D;AACA;AAAA,EACF;AAEA,QAAM,MAAM,YAAY,YAAY,SAAS,CAAC;AAC9C,MAAI,CAAC,IAAK;AAEV,QAAM,eAAA;AACN,QAAM,gBAAA;AACN,QAAM,yBAAA;AACN,MAAI,SAAA;AACN;AAEA,SAAS,uBAAuB;AAC9B,MAAI,kBAAkB,OAAO,aAAa,YAAa;AACvD,mBAAiB;AACjB,iBAAe,iBAAiB,WAAW,eAAe;AAC5D;AAEA,SAAS,kBAAkB,IAAY;AACrC,QAAM,QAAQ,YAAY,UAAU,CAAC,UAAU,MAAM,OAAO,EAAE;AAC9D,MAAI,UAAU,GAAI,aAAY,OAAO,OAAO,CAAC;AAE7C,MAAI,YAAY,WAAW,KAAK,gBAAgB;AAC9C,mBAAe,oBAAoB,WAAW,eAAe;AAC7D,qBAAiB;AAAA,EACnB;AACF;AAcO,SAAS,cAAc,MAAmC;AAC/D,QAAM,KAAK,MAAA;AACX,uBAAqB,WAAW,aAAa,WAAW;AAExD,YAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,UAAM,KAAK,EAAE;AACb,SAAA;AACA,WAAO,MAAM;AACX,YAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,UAAI,UAAU,GAAI,OAAM,OAAO,OAAO,CAAC;AACvC,WAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,EAAE,CAAC;AAEb,QAAM,QAAQ,MAAM,QAAQ,EAAE;AAC9B,SAAO;AAAA,IACL,OAAO,UAAU,MAAM,UAAU,MAAM,SAAS;AAAA,IAChD,OAAO,UAAU,KAAK,IAAI;AAAA,EAAA;AAE9B;AAMO,SAAS,eAAe,MAAe,UAAsB,UAAU,MAAM;AAClF,QAAM,KAAK,MAAA;AACX,QAAM,cAAc,OAAO,QAAQ;AACnC,cAAY,UAAU;AAEtB,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ,CAAC,QAAS;AAEvB,yBAAA;AACA,gBAAY,KAAK;AAAA,MACf;AAAA,MACA,UAAU,MAAM,YAAY,QAAA;AAAA,IAAQ,CACrC;AAED,WAAO,MAAM,kBAAkB,EAAE;AAAA,EACnC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;AACxB;AAOO,SAAS,aAAa,QAAuB;AAClD,uBAAqB,WAAW,aAAa,WAAW;AAExD,YAAU,MAAM;AACd,QAAI,CAAC,OAAQ;AACb,kBAAc;AACd,SAAA;AACA,WAAO,MAAM;AACX,oBAAc;AACd,WAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AACb;AAUO,SAAS,oBAA4B;AAC1C,uBAAqB,WAAW,aAAa,WAAW;AACxD,QAAM,OACJ,MAAM,WAAW,IACb,OAAO,UACP,OAAO,SAAS,MAAM,SAAS,KAAK,OAAO,YAAY,OAAO;AACpE,MAAI,eAAe,EAAG,QAAO;AAC7B,SAAO,KAAK,IAAI,MAAM,OAAO,OAAO,OAAO,iBAAiB,OAAO,sBAAsB;AAC3F;"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const ROOT_POLL_MS = 50;
|
|
4
|
+
function resolveTourRoot(source) {
|
|
5
|
+
return (typeof source === "function" ? source() : source) ?? null;
|
|
6
|
+
}
|
|
7
|
+
function rootWindow(root) {
|
|
8
|
+
var _a;
|
|
9
|
+
if (root instanceof Document) return root.defaultView;
|
|
10
|
+
return ((_a = root.ownerDocument) == null ? void 0 : _a.defaultView) ?? null;
|
|
11
|
+
}
|
|
12
|
+
function observableNode(root) {
|
|
13
|
+
return root instanceof Document ? root.documentElement ?? root : root;
|
|
14
|
+
}
|
|
15
|
+
function isDisplayed(element) {
|
|
16
|
+
if (!element.isConnected || element.hidden) return false;
|
|
17
|
+
const view = element.ownerDocument.defaultView;
|
|
18
|
+
if (!view) return true;
|
|
19
|
+
const style = view.getComputedStyle(element);
|
|
20
|
+
return style.display !== "none" && style.visibility !== "hidden";
|
|
21
|
+
}
|
|
22
|
+
function queryAnchor(root, target) {
|
|
23
|
+
var _a;
|
|
24
|
+
if (typeof target === "string") return root.querySelector(target);
|
|
25
|
+
if (typeof target !== "function") return target;
|
|
26
|
+
const resolved = target(root) ?? null;
|
|
27
|
+
const ElementCtor = ((_a = rootWindow(root)) == null ? void 0 : _a.HTMLElement) ?? HTMLElement;
|
|
28
|
+
if (resolved !== null && !(resolved instanceof ElementCtor)) {
|
|
29
|
+
throw new Error(`Tour target resolver returned ${String(resolved)}, expected an HTMLElement`);
|
|
30
|
+
}
|
|
31
|
+
return resolved;
|
|
32
|
+
}
|
|
33
|
+
function tryResolve(rootSource, target) {
|
|
34
|
+
const root = resolveTourRoot(rootSource);
|
|
35
|
+
if (!root) return null;
|
|
36
|
+
const element = queryAnchor(root, target);
|
|
37
|
+
return element && isDisplayed(element) ? element : null;
|
|
38
|
+
}
|
|
39
|
+
function watchForAnchor(rootSource, target, onFound) {
|
|
40
|
+
let frame = null;
|
|
41
|
+
let observer = null;
|
|
42
|
+
let observedNode = null;
|
|
43
|
+
let stopped = false;
|
|
44
|
+
const observeRoot = () => {
|
|
45
|
+
const root = resolveTourRoot(rootSource);
|
|
46
|
+
if (!root) return;
|
|
47
|
+
const node = observableNode(root);
|
|
48
|
+
if (observedNode === node) return;
|
|
49
|
+
observer == null ? void 0 : observer.disconnect();
|
|
50
|
+
observedNode = node;
|
|
51
|
+
observer = new MutationObserver(attempt);
|
|
52
|
+
observer.observe(node, {
|
|
53
|
+
subtree: true,
|
|
54
|
+
childList: true,
|
|
55
|
+
attributes: true,
|
|
56
|
+
attributeFilter: ["class", "style", "hidden", "data-state", "aria-hidden"]
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
const frameScheduler = () => {
|
|
60
|
+
const root = resolveTourRoot(rootSource);
|
|
61
|
+
return root ? rootWindow(root) : null;
|
|
62
|
+
};
|
|
63
|
+
function run() {
|
|
64
|
+
frame = null;
|
|
65
|
+
if (stopped) return;
|
|
66
|
+
observeRoot();
|
|
67
|
+
const element = tryResolve(rootSource, target);
|
|
68
|
+
if (element) onFound(element);
|
|
69
|
+
}
|
|
70
|
+
function attempt() {
|
|
71
|
+
if (stopped || frame !== null) return;
|
|
72
|
+
const view = frameScheduler();
|
|
73
|
+
frame = (view == null ? void 0 : view.requestAnimationFrame) ? view.requestAnimationFrame(run) : setTimeout(run, 16);
|
|
74
|
+
}
|
|
75
|
+
observeRoot();
|
|
76
|
+
const poll = setInterval(() => {
|
|
77
|
+
if (!observedNode) attempt();
|
|
78
|
+
}, ROOT_POLL_MS);
|
|
79
|
+
return () => {
|
|
80
|
+
var _a, _b;
|
|
81
|
+
stopped = true;
|
|
82
|
+
clearInterval(poll);
|
|
83
|
+
if (frame !== null) (_b = (_a = frameScheduler()) == null ? void 0 : _a.cancelAnimationFrame) == null ? void 0 : _b.call(_a, frame);
|
|
84
|
+
observer == null ? void 0 : observer.disconnect();
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function resolveAnchor(options) {
|
|
88
|
+
const { root, target, timeoutMs, signal } = options;
|
|
89
|
+
const immediate = tryResolve(root, target);
|
|
90
|
+
if (immediate) return Promise.resolve({ status: "found", element: immediate });
|
|
91
|
+
if (signal == null ? void 0 : signal.aborted) return Promise.resolve({ status: "timeout" });
|
|
92
|
+
return new Promise((resolve) => {
|
|
93
|
+
const disposers = [];
|
|
94
|
+
let settled = false;
|
|
95
|
+
const finish = (resolution) => {
|
|
96
|
+
if (settled) return;
|
|
97
|
+
settled = true;
|
|
98
|
+
for (const dispose of disposers) dispose();
|
|
99
|
+
resolve(resolution);
|
|
100
|
+
};
|
|
101
|
+
disposers.push(watchForAnchor(root, target, (element) => finish({ status: "found", element })));
|
|
102
|
+
const timer = setTimeout(() => finish({ status: "timeout" }), timeoutMs);
|
|
103
|
+
disposers.push(() => clearTimeout(timer));
|
|
104
|
+
if (signal) {
|
|
105
|
+
const onAbort = () => finish({ status: "timeout" });
|
|
106
|
+
signal.addEventListener("abort", onAbort);
|
|
107
|
+
disposers.push(() => signal.removeEventListener("abort", onAbort));
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
exports.queryAnchor = queryAnchor;
|
|
112
|
+
exports.resolveAnchor = resolveAnchor;
|
|
113
|
+
exports.resolveTourRoot = resolveTourRoot;
|
|
114
|
+
//# sourceMappingURL=tour-anchor.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-anchor.cjs","sources":["../../src/overlay/tour-anchor.ts"],"sourcesContent":["import type { TourRoot, TourRootSource, TourTarget } from \"./tour-types\";\n\n/**\n * The ONLY place a tour touches the DOM. Everything else — Tour.tsx included —\n * goes through here, which is what makes shadow-root support structural rather\n * than a convention: there is no `document` reference to accidentally reintroduce.\n *\n * An anchor may not exist when its step is entered (lazy route, data still\n * loading, a collapsed panel), so resolution is a bounded wait: query, then\n * observe mutations and re-query on the next frame, until the element appears or\n * the budget expires.\n */\n\nexport type AnchorResolution =\n | { status: \"found\"; element: HTMLElement }\n | { status: \"timeout\" };\n\nexport type ResolveAnchorOptions = {\n root: TourRootSource;\n target: TourTarget;\n timeoutMs: number;\n signal?: AbortSignal | undefined;\n};\n\n/** How often a not-yet-attached root is retried; once attached the observer takes over. */\nconst ROOT_POLL_MS = 50;\n\n/** Resolves a root source, returning `null` while a lazily attached root is absent. */\nexport function resolveTourRoot(source: TourRootSource): TourRoot | null {\n return (typeof source === \"function\" ? source() : source) ?? null;\n}\n\nfunction rootWindow(root: TourRoot): (Window & typeof globalThis) | null {\n if (root instanceof Document) return root.defaultView;\n return root.ownerDocument?.defaultView ?? null;\n}\n\n/** MutationObserver needs a Node; a Document must be observed via its element. */\nfunction observableNode(root: TourRoot): Node {\n return root instanceof Document ? (root.documentElement ?? root) : root;\n}\n\n/**\n * \"Displayed\" rather than \"laid out\": deliberately not `getClientRects().length`,\n * because jsdom lays nothing out and every unit test would then time out. The\n * distinction we actually care about is whether the element is in the tree and\n * not hidden.\n */\nfunction isDisplayed(element: HTMLElement): boolean {\n if (!element.isConnected || element.hidden) return false;\n const view = element.ownerDocument.defaultView;\n if (!view) return true;\n const style = view.getComputedStyle(element);\n return style.display !== \"none\" && style.visibility !== \"hidden\";\n}\n\n/** One synchronous lookup. Throws when a resolver returns something unusable. */\nexport function queryAnchor(root: TourRoot, target: TourTarget): HTMLElement | null {\n if (typeof target === \"string\") return root.querySelector<HTMLElement>(target);\n if (typeof target !== \"function\") return target;\n\n const resolved = target(root) ?? null;\n const ElementCtor = rootWindow(root)?.HTMLElement ?? HTMLElement;\n if (resolved !== null && !(resolved instanceof ElementCtor)) {\n throw new Error(`Tour target resolver returned ${String(resolved)}, expected an HTMLElement`);\n }\n return resolved;\n}\n\n/** A displayed match under the current root, or null while it is still absent. */\nfunction tryResolve(rootSource: TourRootSource, target: TourTarget): HTMLElement | null {\n const root = resolveTourRoot(rootSource);\n if (!root) return null;\n const element = queryAnchor(root, target);\n return element && isDisplayed(element) ? element : null;\n}\n\n/**\n * Watches for `target` under `root`, calling `onFound` once. Re-queries are\n * coalesced into one animation frame so a chatty React commit cannot run\n * `querySelector` hundreds of times, and a root that has not attached yet is\n * polled until it can be observed — so a late-mounting shadow root needs no\n * second waiting mechanism that could hang on its own.\n */\nfunction watchForAnchor(\n rootSource: TourRootSource,\n target: TourTarget,\n onFound: (element: HTMLElement) => void,\n): () => void {\n let frame: number | null = null;\n let observer: MutationObserver | null = null;\n let observedNode: Node | null = null;\n let stopped = false;\n\n const observeRoot = () => {\n const root = resolveTourRoot(rootSource);\n if (!root) return;\n const node = observableNode(root);\n if (observedNode === node) return;\n observer?.disconnect();\n observedNode = node;\n observer = new MutationObserver(attempt);\n observer.observe(node, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"data-state\", \"aria-hidden\"],\n });\n };\n\n // Resolved lazily: with a late-attaching root there is no window to schedule\n // against until it exists, and the interval below carries us until then.\n const frameScheduler = () => {\n const root = resolveTourRoot(rootSource);\n return root ? rootWindow(root) : null;\n };\n\n function run() {\n frame = null;\n if (stopped) return;\n observeRoot();\n const element = tryResolve(rootSource, target);\n if (element) onFound(element);\n }\n\n function attempt() {\n if (stopped || frame !== null) return;\n const view = frameScheduler();\n frame = view?.requestAnimationFrame\n ? view.requestAnimationFrame(run)\n : (setTimeout(run, 16) as unknown as number);\n }\n\n observeRoot();\n const poll = setInterval(() => {\n if (!observedNode) attempt();\n }, ROOT_POLL_MS);\n\n return () => {\n stopped = true;\n clearInterval(poll);\n if (frame !== null) frameScheduler()?.cancelAnimationFrame?.(frame);\n observer?.disconnect();\n };\n}\n\n/** Waits for `target` under `root`, up to `timeoutMs`. */\nexport function resolveAnchor(options: ResolveAnchorOptions): Promise<AnchorResolution> {\n const { root, target, timeoutMs, signal } = options;\n\n const immediate = tryResolve(root, target);\n if (immediate) return Promise.resolve({ status: \"found\", element: immediate });\n if (signal?.aborted) return Promise.resolve({ status: \"timeout\" });\n\n return new Promise<AnchorResolution>((resolve) => {\n const disposers: Array<() => void> = [];\n let settled = false;\n\n const finish = (resolution: AnchorResolution) => {\n if (settled) return;\n settled = true;\n for (const dispose of disposers) dispose();\n resolve(resolution);\n };\n\n disposers.push(watchForAnchor(root, target, (element) => finish({ status: \"found\", element })));\n\n const timer = setTimeout(() => finish({ status: \"timeout\" }), timeoutMs);\n disposers.push(() => clearTimeout(timer));\n\n if (signal) {\n const onAbort = () => finish({ status: \"timeout\" });\n signal.addEventListener(\"abort\", onAbort);\n disposers.push(() => signal.removeEventListener(\"abort\", onAbort));\n }\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TourRoot, TourRootSource, TourTarget } from './tour-types';
|
|
2
|
+
/**
|
|
3
|
+
* The ONLY place a tour touches the DOM. Everything else — Tour.tsx included —
|
|
4
|
+
* goes through here, which is what makes shadow-root support structural rather
|
|
5
|
+
* than a convention: there is no `document` reference to accidentally reintroduce.
|
|
6
|
+
*
|
|
7
|
+
* An anchor may not exist when its step is entered (lazy route, data still
|
|
8
|
+
* loading, a collapsed panel), so resolution is a bounded wait: query, then
|
|
9
|
+
* observe mutations and re-query on the next frame, until the element appears or
|
|
10
|
+
* the budget expires.
|
|
11
|
+
*/
|
|
12
|
+
export type AnchorResolution = {
|
|
13
|
+
status: "found";
|
|
14
|
+
element: HTMLElement;
|
|
15
|
+
} | {
|
|
16
|
+
status: "timeout";
|
|
17
|
+
};
|
|
18
|
+
export type ResolveAnchorOptions = {
|
|
19
|
+
root: TourRootSource;
|
|
20
|
+
target: TourTarget;
|
|
21
|
+
timeoutMs: number;
|
|
22
|
+
signal?: AbortSignal | undefined;
|
|
23
|
+
};
|
|
24
|
+
/** Resolves a root source, returning `null` while a lazily attached root is absent. */
|
|
25
|
+
export declare function resolveTourRoot(source: TourRootSource): TourRoot | null;
|
|
26
|
+
/** One synchronous lookup. Throws when a resolver returns something unusable. */
|
|
27
|
+
export declare function queryAnchor(root: TourRoot, target: TourTarget): HTMLElement | null;
|
|
28
|
+
/** Waits for `target` under `root`, up to `timeoutMs`. */
|
|
29
|
+
export declare function resolveAnchor(options: ResolveAnchorOptions): Promise<AnchorResolution>;
|
|
30
|
+
//# sourceMappingURL=tour-anchor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-anchor.d.ts","sourceRoot":"","sources":["../../src/overlay/tour-anchor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzE;;;;;;;;;GASG;AAEH,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,WAAW,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1B,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC,CAAC;AAKF,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,GAAG,IAAI,CAEvE;AA0BD,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAUlF;AA+ED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BtF"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
const ROOT_POLL_MS = 50;
|
|
2
|
+
function resolveTourRoot(source) {
|
|
3
|
+
return (typeof source === "function" ? source() : source) ?? null;
|
|
4
|
+
}
|
|
5
|
+
function rootWindow(root) {
|
|
6
|
+
var _a;
|
|
7
|
+
if (root instanceof Document) return root.defaultView;
|
|
8
|
+
return ((_a = root.ownerDocument) == null ? void 0 : _a.defaultView) ?? null;
|
|
9
|
+
}
|
|
10
|
+
function observableNode(root) {
|
|
11
|
+
return root instanceof Document ? root.documentElement ?? root : root;
|
|
12
|
+
}
|
|
13
|
+
function isDisplayed(element) {
|
|
14
|
+
if (!element.isConnected || element.hidden) return false;
|
|
15
|
+
const view = element.ownerDocument.defaultView;
|
|
16
|
+
if (!view) return true;
|
|
17
|
+
const style = view.getComputedStyle(element);
|
|
18
|
+
return style.display !== "none" && style.visibility !== "hidden";
|
|
19
|
+
}
|
|
20
|
+
function queryAnchor(root, target) {
|
|
21
|
+
var _a;
|
|
22
|
+
if (typeof target === "string") return root.querySelector(target);
|
|
23
|
+
if (typeof target !== "function") return target;
|
|
24
|
+
const resolved = target(root) ?? null;
|
|
25
|
+
const ElementCtor = ((_a = rootWindow(root)) == null ? void 0 : _a.HTMLElement) ?? HTMLElement;
|
|
26
|
+
if (resolved !== null && !(resolved instanceof ElementCtor)) {
|
|
27
|
+
throw new Error(`Tour target resolver returned ${String(resolved)}, expected an HTMLElement`);
|
|
28
|
+
}
|
|
29
|
+
return resolved;
|
|
30
|
+
}
|
|
31
|
+
function tryResolve(rootSource, target) {
|
|
32
|
+
const root = resolveTourRoot(rootSource);
|
|
33
|
+
if (!root) return null;
|
|
34
|
+
const element = queryAnchor(root, target);
|
|
35
|
+
return element && isDisplayed(element) ? element : null;
|
|
36
|
+
}
|
|
37
|
+
function watchForAnchor(rootSource, target, onFound) {
|
|
38
|
+
let frame = null;
|
|
39
|
+
let observer = null;
|
|
40
|
+
let observedNode = null;
|
|
41
|
+
let stopped = false;
|
|
42
|
+
const observeRoot = () => {
|
|
43
|
+
const root = resolveTourRoot(rootSource);
|
|
44
|
+
if (!root) return;
|
|
45
|
+
const node = observableNode(root);
|
|
46
|
+
if (observedNode === node) return;
|
|
47
|
+
observer == null ? void 0 : observer.disconnect();
|
|
48
|
+
observedNode = node;
|
|
49
|
+
observer = new MutationObserver(attempt);
|
|
50
|
+
observer.observe(node, {
|
|
51
|
+
subtree: true,
|
|
52
|
+
childList: true,
|
|
53
|
+
attributes: true,
|
|
54
|
+
attributeFilter: ["class", "style", "hidden", "data-state", "aria-hidden"]
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
const frameScheduler = () => {
|
|
58
|
+
const root = resolveTourRoot(rootSource);
|
|
59
|
+
return root ? rootWindow(root) : null;
|
|
60
|
+
};
|
|
61
|
+
function run() {
|
|
62
|
+
frame = null;
|
|
63
|
+
if (stopped) return;
|
|
64
|
+
observeRoot();
|
|
65
|
+
const element = tryResolve(rootSource, target);
|
|
66
|
+
if (element) onFound(element);
|
|
67
|
+
}
|
|
68
|
+
function attempt() {
|
|
69
|
+
if (stopped || frame !== null) return;
|
|
70
|
+
const view = frameScheduler();
|
|
71
|
+
frame = (view == null ? void 0 : view.requestAnimationFrame) ? view.requestAnimationFrame(run) : setTimeout(run, 16);
|
|
72
|
+
}
|
|
73
|
+
observeRoot();
|
|
74
|
+
const poll = setInterval(() => {
|
|
75
|
+
if (!observedNode) attempt();
|
|
76
|
+
}, ROOT_POLL_MS);
|
|
77
|
+
return () => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
stopped = true;
|
|
80
|
+
clearInterval(poll);
|
|
81
|
+
if (frame !== null) (_b = (_a = frameScheduler()) == null ? void 0 : _a.cancelAnimationFrame) == null ? void 0 : _b.call(_a, frame);
|
|
82
|
+
observer == null ? void 0 : observer.disconnect();
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function resolveAnchor(options) {
|
|
86
|
+
const { root, target, timeoutMs, signal } = options;
|
|
87
|
+
const immediate = tryResolve(root, target);
|
|
88
|
+
if (immediate) return Promise.resolve({ status: "found", element: immediate });
|
|
89
|
+
if (signal == null ? void 0 : signal.aborted) return Promise.resolve({ status: "timeout" });
|
|
90
|
+
return new Promise((resolve) => {
|
|
91
|
+
const disposers = [];
|
|
92
|
+
let settled = false;
|
|
93
|
+
const finish = (resolution) => {
|
|
94
|
+
if (settled) return;
|
|
95
|
+
settled = true;
|
|
96
|
+
for (const dispose of disposers) dispose();
|
|
97
|
+
resolve(resolution);
|
|
98
|
+
};
|
|
99
|
+
disposers.push(watchForAnchor(root, target, (element) => finish({ status: "found", element })));
|
|
100
|
+
const timer = setTimeout(() => finish({ status: "timeout" }), timeoutMs);
|
|
101
|
+
disposers.push(() => clearTimeout(timer));
|
|
102
|
+
if (signal) {
|
|
103
|
+
const onAbort = () => finish({ status: "timeout" });
|
|
104
|
+
signal.addEventListener("abort", onAbort);
|
|
105
|
+
disposers.push(() => signal.removeEventListener("abort", onAbort));
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
queryAnchor,
|
|
111
|
+
resolveAnchor,
|
|
112
|
+
resolveTourRoot
|
|
113
|
+
};
|
|
114
|
+
//# sourceMappingURL=tour-anchor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-anchor.js","sources":["../../src/overlay/tour-anchor.ts"],"sourcesContent":["import type { TourRoot, TourRootSource, TourTarget } from \"./tour-types\";\n\n/**\n * The ONLY place a tour touches the DOM. Everything else — Tour.tsx included —\n * goes through here, which is what makes shadow-root support structural rather\n * than a convention: there is no `document` reference to accidentally reintroduce.\n *\n * An anchor may not exist when its step is entered (lazy route, data still\n * loading, a collapsed panel), so resolution is a bounded wait: query, then\n * observe mutations and re-query on the next frame, until the element appears or\n * the budget expires.\n */\n\nexport type AnchorResolution =\n | { status: \"found\"; element: HTMLElement }\n | { status: \"timeout\" };\n\nexport type ResolveAnchorOptions = {\n root: TourRootSource;\n target: TourTarget;\n timeoutMs: number;\n signal?: AbortSignal | undefined;\n};\n\n/** How often a not-yet-attached root is retried; once attached the observer takes over. */\nconst ROOT_POLL_MS = 50;\n\n/** Resolves a root source, returning `null` while a lazily attached root is absent. */\nexport function resolveTourRoot(source: TourRootSource): TourRoot | null {\n return (typeof source === \"function\" ? source() : source) ?? null;\n}\n\nfunction rootWindow(root: TourRoot): (Window & typeof globalThis) | null {\n if (root instanceof Document) return root.defaultView;\n return root.ownerDocument?.defaultView ?? null;\n}\n\n/** MutationObserver needs a Node; a Document must be observed via its element. */\nfunction observableNode(root: TourRoot): Node {\n return root instanceof Document ? (root.documentElement ?? root) : root;\n}\n\n/**\n * \"Displayed\" rather than \"laid out\": deliberately not `getClientRects().length`,\n * because jsdom lays nothing out and every unit test would then time out. The\n * distinction we actually care about is whether the element is in the tree and\n * not hidden.\n */\nfunction isDisplayed(element: HTMLElement): boolean {\n if (!element.isConnected || element.hidden) return false;\n const view = element.ownerDocument.defaultView;\n if (!view) return true;\n const style = view.getComputedStyle(element);\n return style.display !== \"none\" && style.visibility !== \"hidden\";\n}\n\n/** One synchronous lookup. Throws when a resolver returns something unusable. */\nexport function queryAnchor(root: TourRoot, target: TourTarget): HTMLElement | null {\n if (typeof target === \"string\") return root.querySelector<HTMLElement>(target);\n if (typeof target !== \"function\") return target;\n\n const resolved = target(root) ?? null;\n const ElementCtor = rootWindow(root)?.HTMLElement ?? HTMLElement;\n if (resolved !== null && !(resolved instanceof ElementCtor)) {\n throw new Error(`Tour target resolver returned ${String(resolved)}, expected an HTMLElement`);\n }\n return resolved;\n}\n\n/** A displayed match under the current root, or null while it is still absent. */\nfunction tryResolve(rootSource: TourRootSource, target: TourTarget): HTMLElement | null {\n const root = resolveTourRoot(rootSource);\n if (!root) return null;\n const element = queryAnchor(root, target);\n return element && isDisplayed(element) ? element : null;\n}\n\n/**\n * Watches for `target` under `root`, calling `onFound` once. Re-queries are\n * coalesced into one animation frame so a chatty React commit cannot run\n * `querySelector` hundreds of times, and a root that has not attached yet is\n * polled until it can be observed — so a late-mounting shadow root needs no\n * second waiting mechanism that could hang on its own.\n */\nfunction watchForAnchor(\n rootSource: TourRootSource,\n target: TourTarget,\n onFound: (element: HTMLElement) => void,\n): () => void {\n let frame: number | null = null;\n let observer: MutationObserver | null = null;\n let observedNode: Node | null = null;\n let stopped = false;\n\n const observeRoot = () => {\n const root = resolveTourRoot(rootSource);\n if (!root) return;\n const node = observableNode(root);\n if (observedNode === node) return;\n observer?.disconnect();\n observedNode = node;\n observer = new MutationObserver(attempt);\n observer.observe(node, {\n subtree: true,\n childList: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\", \"data-state\", \"aria-hidden\"],\n });\n };\n\n // Resolved lazily: with a late-attaching root there is no window to schedule\n // against until it exists, and the interval below carries us until then.\n const frameScheduler = () => {\n const root = resolveTourRoot(rootSource);\n return root ? rootWindow(root) : null;\n };\n\n function run() {\n frame = null;\n if (stopped) return;\n observeRoot();\n const element = tryResolve(rootSource, target);\n if (element) onFound(element);\n }\n\n function attempt() {\n if (stopped || frame !== null) return;\n const view = frameScheduler();\n frame = view?.requestAnimationFrame\n ? view.requestAnimationFrame(run)\n : (setTimeout(run, 16) as unknown as number);\n }\n\n observeRoot();\n const poll = setInterval(() => {\n if (!observedNode) attempt();\n }, ROOT_POLL_MS);\n\n return () => {\n stopped = true;\n clearInterval(poll);\n if (frame !== null) frameScheduler()?.cancelAnimationFrame?.(frame);\n observer?.disconnect();\n };\n}\n\n/** Waits for `target` under `root`, up to `timeoutMs`. */\nexport function resolveAnchor(options: ResolveAnchorOptions): Promise<AnchorResolution> {\n const { root, target, timeoutMs, signal } = options;\n\n const immediate = tryResolve(root, target);\n if (immediate) return Promise.resolve({ status: \"found\", element: immediate });\n if (signal?.aborted) return Promise.resolve({ status: \"timeout\" });\n\n return new Promise<AnchorResolution>((resolve) => {\n const disposers: Array<() => void> = [];\n let settled = false;\n\n const finish = (resolution: AnchorResolution) => {\n if (settled) return;\n settled = true;\n for (const dispose of disposers) dispose();\n resolve(resolution);\n };\n\n disposers.push(watchForAnchor(root, target, (element) => finish({ status: \"found\", element })));\n\n const timer = setTimeout(() => finish({ status: \"timeout\" }), timeoutMs);\n disposers.push(() => clearTimeout(timer));\n\n if (signal) {\n const onAbort = () => finish({ status: \"timeout\" });\n signal.addEventListener(\"abort\", onAbort);\n disposers.push(() => signal.removeEventListener(\"abort\", onAbort));\n }\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const react = require("react");
|
|
4
|
+
const TourContext = react.createContext(null);
|
|
5
|
+
function useTour() {
|
|
6
|
+
const ctx = react.useContext(TourContext);
|
|
7
|
+
if (!ctx) throw new Error("useTour must be used within a <TourProvider>");
|
|
8
|
+
return ctx;
|
|
9
|
+
}
|
|
10
|
+
exports.TourContext = TourContext;
|
|
11
|
+
exports.useTour = useTour;
|
|
12
|
+
//# sourceMappingURL=tour-context.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-context.cjs","sources":["../../src/overlay/tour-context.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { TourCompletionStatus } from \"./tour-progress\";\nimport type { TourDefinition } from \"./tour-types\";\n\n/** Status of the running tour. `waiting` means its anchor has not appeared yet. */\nexport type TourStatus = \"idle\" | \"navigating\" | \"waiting\" | \"active\";\n\nexport type TourState = {\n /** Running tour, or null. */\n tourId: string | null;\n /** Zero-based index within the running tour. */\n index: number;\n /** Enabled step count of the running tour — the denominator of \"2 of 6\". */\n total: number;\n status: TourStatus;\n};\n\nexport type TourContextValue = TourState & {\n /**\n * Start a registered tour. `at` jumps to a step id or index; `force` ignores a\n * recorded completion, which is what a \"Take a tour\" button passes.\n */\n start: (tourId: string, options?: { at?: string | number; force?: boolean }) => void;\n /** Advance; completes the tour on the last step. */\n next: () => void;\n back: () => void;\n /** Jump within the running tour by step id or zero-based index. */\n goTo: (step: string | number) => void;\n /** End the running tour and record the outcome. Defaults to `\"dismissed\"`. */\n finish: (status?: TourCompletionStatus) => void;\n /** Has this tour been completed or dismissed at its current `version`? */\n isFinished: (tourId: string) => boolean;\n /** Forget completions so tours are eligible again — a \"Replay tours\" button. */\n reset: (tourId?: string) => void;\n /** Registered tours, for building a \"Take a tour\" menu. */\n tours: TourDefinition[];\n};\n\nexport const TourContext = createContext<TourContextValue | null>(null);\n\n/** Access the tour API. Must be called under a `<TourProvider>`. */\nexport function useTour(): TourContextValue {\n const ctx = useContext(TourContext);\n if (!ctx) throw new Error(\"useTour must be used within a <TourProvider>\");\n return ctx;\n}\n"],"names":["createContext","useContext"],"mappings":";;;AAsCO,MAAM,cAAcA,MAAAA,cAAuC,IAAI;AAG/D,SAAS,UAA4B;AAC1C,QAAM,MAAMC,MAAAA,WAAW,WAAW;AAClC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,8CAA8C;AACxE,SAAO;AACT;;;"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { TourCompletionStatus } from './tour-progress';
|
|
2
|
+
import { TourDefinition } from './tour-types';
|
|
3
|
+
/** Status of the running tour. `waiting` means its anchor has not appeared yet. */
|
|
4
|
+
export type TourStatus = "idle" | "navigating" | "waiting" | "active";
|
|
5
|
+
export type TourState = {
|
|
6
|
+
/** Running tour, or null. */
|
|
7
|
+
tourId: string | null;
|
|
8
|
+
/** Zero-based index within the running tour. */
|
|
9
|
+
index: number;
|
|
10
|
+
/** Enabled step count of the running tour — the denominator of "2 of 6". */
|
|
11
|
+
total: number;
|
|
12
|
+
status: TourStatus;
|
|
13
|
+
};
|
|
14
|
+
export type TourContextValue = TourState & {
|
|
15
|
+
/**
|
|
16
|
+
* Start a registered tour. `at` jumps to a step id or index; `force` ignores a
|
|
17
|
+
* recorded completion, which is what a "Take a tour" button passes.
|
|
18
|
+
*/
|
|
19
|
+
start: (tourId: string, options?: {
|
|
20
|
+
at?: string | number;
|
|
21
|
+
force?: boolean;
|
|
22
|
+
}) => void;
|
|
23
|
+
/** Advance; completes the tour on the last step. */
|
|
24
|
+
next: () => void;
|
|
25
|
+
back: () => void;
|
|
26
|
+
/** Jump within the running tour by step id or zero-based index. */
|
|
27
|
+
goTo: (step: string | number) => void;
|
|
28
|
+
/** End the running tour and record the outcome. Defaults to `"dismissed"`. */
|
|
29
|
+
finish: (status?: TourCompletionStatus) => void;
|
|
30
|
+
/** Has this tour been completed or dismissed at its current `version`? */
|
|
31
|
+
isFinished: (tourId: string) => boolean;
|
|
32
|
+
/** Forget completions so tours are eligible again — a "Replay tours" button. */
|
|
33
|
+
reset: (tourId?: string) => void;
|
|
34
|
+
/** Registered tours, for building a "Take a tour" menu. */
|
|
35
|
+
tours: TourDefinition[];
|
|
36
|
+
};
|
|
37
|
+
export declare const TourContext: import('react').Context<TourContextValue | null>;
|
|
38
|
+
/** Access the tour API. Must be called under a `<TourProvider>`. */
|
|
39
|
+
export declare function useTour(): TourContextValue;
|
|
40
|
+
//# sourceMappingURL=tour-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-context.d.ts","sourceRoot":"","sources":["../../src/overlay/tour-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,mFAAmF;AACnF,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtE,MAAM,MAAM,SAAS,GAAG;IACtB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG;IACzC;;;OAGG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IACrF,oDAAoD;IACpD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,mEAAmE;IACnE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACtC,8EAA8E;IAC9E,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,oBAAoB,KAAK,IAAI,CAAC;IAChD,0EAA0E;IAC1E,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,gFAAgF;IAChF,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,2DAA2D;IAC3D,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE,oEAAoE;AACpE,wBAAgB,OAAO,IAAI,gBAAgB,CAI1C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { useContext, createContext } from "react";
|
|
2
|
+
const TourContext = createContext(null);
|
|
3
|
+
function useTour() {
|
|
4
|
+
const ctx = useContext(TourContext);
|
|
5
|
+
if (!ctx) throw new Error("useTour must be used within a <TourProvider>");
|
|
6
|
+
return ctx;
|
|
7
|
+
}
|
|
8
|
+
export {
|
|
9
|
+
TourContext,
|
|
10
|
+
useTour
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=tour-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-context.js","sources":["../../src/overlay/tour-context.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { TourCompletionStatus } from \"./tour-progress\";\nimport type { TourDefinition } from \"./tour-types\";\n\n/** Status of the running tour. `waiting` means its anchor has not appeared yet. */\nexport type TourStatus = \"idle\" | \"navigating\" | \"waiting\" | \"active\";\n\nexport type TourState = {\n /** Running tour, or null. */\n tourId: string | null;\n /** Zero-based index within the running tour. */\n index: number;\n /** Enabled step count of the running tour — the denominator of \"2 of 6\". */\n total: number;\n status: TourStatus;\n};\n\nexport type TourContextValue = TourState & {\n /**\n * Start a registered tour. `at` jumps to a step id or index; `force` ignores a\n * recorded completion, which is what a \"Take a tour\" button passes.\n */\n start: (tourId: string, options?: { at?: string | number; force?: boolean }) => void;\n /** Advance; completes the tour on the last step. */\n next: () => void;\n back: () => void;\n /** Jump within the running tour by step id or zero-based index. */\n goTo: (step: string | number) => void;\n /** End the running tour and record the outcome. Defaults to `\"dismissed\"`. */\n finish: (status?: TourCompletionStatus) => void;\n /** Has this tour been completed or dismissed at its current `version`? */\n isFinished: (tourId: string) => boolean;\n /** Forget completions so tours are eligible again — a \"Replay tours\" button. */\n reset: (tourId?: string) => void;\n /** Registered tours, for building a \"Take a tour\" menu. */\n tours: TourDefinition[];\n};\n\nexport const TourContext = createContext<TourContextValue | null>(null);\n\n/** Access the tour API. Must be called under a `<TourProvider>`. */\nexport function useTour(): TourContextValue {\n const ctx = useContext(TourContext);\n if (!ctx) throw new Error(\"useTour must be used within a <TourProvider>\");\n return ctx;\n}\n"],"names":[],"mappings":";AAsCO,MAAM,cAAc,cAAuC,IAAI;AAG/D,SAAS,UAA4B;AAC1C,QAAM,MAAM,WAAW,WAAW;AAClC,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,8CAA8C;AACxE,SAAO;AACT;"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
function clamp(value, min, max) {
|
|
4
|
+
return Math.min(Math.max(value, min), max);
|
|
5
|
+
}
|
|
6
|
+
function anchorRadius(element) {
|
|
7
|
+
const view = element.ownerDocument.defaultView;
|
|
8
|
+
if (!view) return 0;
|
|
9
|
+
const raw = view.getComputedStyle(element).borderTopLeftRadius;
|
|
10
|
+
if (!raw) return 0;
|
|
11
|
+
if (raw.endsWith("%")) {
|
|
12
|
+
const percent = Number.parseFloat(raw);
|
|
13
|
+
if (!Number.isFinite(percent)) return 0;
|
|
14
|
+
return element.getBoundingClientRect().width * percent / 100;
|
|
15
|
+
}
|
|
16
|
+
const px = Number.parseFloat(raw);
|
|
17
|
+
return Number.isFinite(px) ? px : 0;
|
|
18
|
+
}
|
|
19
|
+
function spotlightRect(options) {
|
|
20
|
+
const { anchor, padding, radius, viewport } = options;
|
|
21
|
+
const left = clamp(anchor.left - padding, 0, viewport.width);
|
|
22
|
+
const top = clamp(anchor.top - padding, 0, viewport.height);
|
|
23
|
+
const right = clamp(anchor.right + padding, 0, viewport.width);
|
|
24
|
+
const bottom = clamp(anchor.bottom + padding, 0, viewport.height);
|
|
25
|
+
const width = Math.max(right - left, 0);
|
|
26
|
+
const height = Math.max(bottom - top, 0);
|
|
27
|
+
const requested = radius ?? 0;
|
|
28
|
+
return {
|
|
29
|
+
x: left,
|
|
30
|
+
y: top,
|
|
31
|
+
width,
|
|
32
|
+
height,
|
|
33
|
+
radius: clamp(requested, 0, Math.min(width, height) / 2)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function roundedRectPath(rect) {
|
|
37
|
+
const { x, y, width, height, radius: r } = rect;
|
|
38
|
+
if (r <= 0) {
|
|
39
|
+
return `M${x},${y} H${x + width} V${y + height} H${x} Z`;
|
|
40
|
+
}
|
|
41
|
+
return [
|
|
42
|
+
`M${x + r},${y}`,
|
|
43
|
+
`H${x + width - r}`,
|
|
44
|
+
`A${r},${r} 0 0 1 ${x + width},${y + r}`,
|
|
45
|
+
`V${y + height - r}`,
|
|
46
|
+
`A${r},${r} 0 0 1 ${x + width - r},${y + height}`,
|
|
47
|
+
`H${x + r}`,
|
|
48
|
+
`A${r},${r} 0 0 1 ${x},${y + height - r}`,
|
|
49
|
+
`V${y + r}`,
|
|
50
|
+
`A${r},${r} 0 0 1 ${x + r},${y}`,
|
|
51
|
+
"Z"
|
|
52
|
+
].join(" ");
|
|
53
|
+
}
|
|
54
|
+
function spotlightClipPath(options) {
|
|
55
|
+
const { viewport, cutout } = options;
|
|
56
|
+
const outer = `M0,0 H${viewport.width} V${viewport.height} H0 Z`;
|
|
57
|
+
if (!cutout || cutout.width <= 0 || cutout.height <= 0) {
|
|
58
|
+
return `path(evenodd, "${outer}")`;
|
|
59
|
+
}
|
|
60
|
+
return `path(evenodd, "${outer} ${roundedRectPath(cutout)}")`;
|
|
61
|
+
}
|
|
62
|
+
exports.anchorRadius = anchorRadius;
|
|
63
|
+
exports.spotlightClipPath = spotlightClipPath;
|
|
64
|
+
exports.spotlightRect = spotlightRect;
|
|
65
|
+
//# sourceMappingURL=tour-geometry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-geometry.cjs","sources":["../../src/overlay/tour-geometry.ts"],"sourcesContent":["/**\n * Pure spotlight maths. The dim layer is one full-viewport element clipped with\n * `clip-path: path(evenodd, ...)`: the clipped-away hole does not hit-test, so\n * the dim blocks clicks while the anchor underneath stays live — the pointer\n * semantics come free, which no other cutout technique gives us (a\n * `box-shadow: 0 0 0 9999px` ring has them exactly inverted).\n */\n\nexport type Viewport = { width: number; height: number };\n\nexport type SpotlightRect = {\n x: number;\n y: number;\n width: number;\n height: number;\n radius: number;\n};\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * The anchor's own computed corner radius, so the cutout traces the control\n * rather than boxing it. A percentage radius resolves against the element's\n * width, matching how the browser paints it.\n */\nexport function anchorRadius(element: HTMLElement): number {\n const view = element.ownerDocument.defaultView;\n if (!view) return 0;\n const raw = view.getComputedStyle(element).borderTopLeftRadius;\n if (!raw) return 0;\n if (raw.endsWith(\"%\")) {\n const percent = Number.parseFloat(raw);\n if (!Number.isFinite(percent)) return 0;\n return (element.getBoundingClientRect().width * percent) / 100;\n }\n const px = Number.parseFloat(raw);\n return Number.isFinite(px) ? px : 0;\n}\n\n/**\n * Anchor rect grown by `padding` and clamped to the viewport. The radius grows\n * with the padding so the cutout stays concentric with the control it traces,\n * and is capped at half the shorter side so an over-large radius cannot fold the\n * path in on itself.\n */\nexport function spotlightRect(options: {\n anchor: DOMRect;\n padding: number;\n radius?: number | undefined;\n viewport: Viewport;\n}): SpotlightRect {\n const { anchor, padding, radius, viewport } = options;\n const left = clamp(anchor.left - padding, 0, viewport.width);\n const top = clamp(anchor.top - padding, 0, viewport.height);\n const right = clamp(anchor.right + padding, 0, viewport.width);\n const bottom = clamp(anchor.bottom + padding, 0, viewport.height);\n\n const width = Math.max(right - left, 0);\n const height = Math.max(bottom - top, 0);\n const requested = radius ?? 0;\n\n return {\n x: left,\n y: top,\n width,\n height,\n radius: clamp(requested, 0, Math.min(width, height) / 2),\n };\n}\n\nfunction roundedRectPath(rect: SpotlightRect): string {\n const { x, y, width, height, radius: r } = rect;\n if (r <= 0) {\n return `M${x},${y} H${x + width} V${y + height} H${x} Z`;\n }\n return [\n `M${x + r},${y}`,\n `H${x + width - r}`,\n `A${r},${r} 0 0 1 ${x + width},${y + r}`,\n `V${y + height - r}`,\n `A${r},${r} 0 0 1 ${x + width - r},${y + height}`,\n `H${x + r}`,\n `A${r},${r} 0 0 1 ${x},${y + height - r}`,\n `V${y + r}`,\n `A${r},${r} 0 0 1 ${x + r},${y}`,\n \"Z\",\n ].join(\" \");\n}\n\n/**\n * `path(evenodd, \"...\")` for the dim: the viewport rect minus a rounded cutout.\n * A missing or degenerate cutout yields the plain viewport rect, so a zero-size\n * anchor dims the page rather than emitting an invalid path the browser drops\n * (which would leave the dim uncut and the page unusable).\n */\nexport function spotlightClipPath(options: {\n viewport: Viewport;\n cutout: SpotlightRect | null;\n}): string {\n const { viewport, cutout } = options;\n const outer = `M0,0 H${viewport.width} V${viewport.height} H0 Z`;\n if (!cutout || cutout.width <= 0 || cutout.height <= 0) {\n return `path(evenodd, \"${outer}\")`;\n }\n return `path(evenodd, \"${outer} ${roundedRectPath(cutout)}\")`;\n}\n"],"names":[],"mappings":";;AAkBA,SAAS,MAAM,OAAe,KAAa,KAAqB;AAC9D,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;AAOO,SAAS,aAAa,SAA8B;AACzD,QAAM,OAAO,QAAQ,cAAc;AACnC,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,MAAM,KAAK,iBAAiB,OAAO,EAAE;AAC3C,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,IAAI,SAAS,GAAG,GAAG;AACrB,UAAM,UAAU,OAAO,WAAW,GAAG;AACrC,QAAI,CAAC,OAAO,SAAS,OAAO,EAAG,QAAO;AACtC,WAAQ,QAAQ,sBAAA,EAAwB,QAAQ,UAAW;AAAA,EAC7D;AACA,QAAM,KAAK,OAAO,WAAW,GAAG;AAChC,SAAO,OAAO,SAAS,EAAE,IAAI,KAAK;AACpC;AAQO,SAAS,cAAc,SAKZ;AAChB,QAAM,EAAE,QAAQ,SAAS,QAAQ,aAAa;AAC9C,QAAM,OAAO,MAAM,OAAO,OAAO,SAAS,GAAG,SAAS,KAAK;AAC3D,QAAM,MAAM,MAAM,OAAO,MAAM,SAAS,GAAG,SAAS,MAAM;AAC1D,QAAM,QAAQ,MAAM,OAAO,QAAQ,SAAS,GAAG,SAAS,KAAK;AAC7D,QAAM,SAAS,MAAM,OAAO,SAAS,SAAS,GAAG,SAAS,MAAM;AAEhE,QAAM,QAAQ,KAAK,IAAI,QAAQ,MAAM,CAAC;AACtC,QAAM,SAAS,KAAK,IAAI,SAAS,KAAK,CAAC;AACvC,QAAM,YAAY,UAAU;AAE5B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA,QAAQ,MAAM,WAAW,GAAG,KAAK,IAAI,OAAO,MAAM,IAAI,CAAC;AAAA,EAAA;AAE3D;AAEA,SAAS,gBAAgB,MAA6B;AACpD,QAAM,EAAE,GAAG,GAAG,OAAO,QAAQ,QAAQ,MAAM;AAC3C,MAAI,KAAK,GAAG;AACV,WAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,CAAC;AAAA,EACtD;AACA,SAAO;AAAA,IACL,IAAI,IAAI,CAAC,IAAI,CAAC;AAAA,IACd,IAAI,IAAI,QAAQ,CAAC;AAAA,IACjB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,IAAI,IAAI,CAAC;AAAA,IACtC,IAAI,IAAI,SAAS,CAAC;AAAA,IAClB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,IAAI,IAAI,MAAM;AAAA,IAC/C,IAAI,IAAI,CAAC;AAAA,IACT,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,CAAC;AAAA,IACvC,IAAI,IAAI,CAAC;AAAA,IACT,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;AAAA,IAC9B;AAAA,EAAA,EACA,KAAK,GAAG;AACZ;AAQO,SAAS,kBAAkB,SAGvB;AACT,QAAM,EAAE,UAAU,OAAA,IAAW;AAC7B,QAAM,QAAQ,SAAS,SAAS,KAAK,KAAK,SAAS,MAAM;AACzD,MAAI,CAAC,UAAU,OAAO,SAAS,KAAK,OAAO,UAAU,GAAG;AACtD,WAAO,kBAAkB,KAAK;AAAA,EAChC;AACA,SAAO,kBAAkB,KAAK,IAAI,gBAAgB,MAAM,CAAC;AAC3D;;;;"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure spotlight maths. The dim layer is one full-viewport element clipped with
|
|
3
|
+
* `clip-path: path(evenodd, ...)`: the clipped-away hole does not hit-test, so
|
|
4
|
+
* the dim blocks clicks while the anchor underneath stays live — the pointer
|
|
5
|
+
* semantics come free, which no other cutout technique gives us (a
|
|
6
|
+
* `box-shadow: 0 0 0 9999px` ring has them exactly inverted).
|
|
7
|
+
*/
|
|
8
|
+
export type Viewport = {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
};
|
|
12
|
+
export type SpotlightRect = {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
radius: number;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* The anchor's own computed corner radius, so the cutout traces the control
|
|
21
|
+
* rather than boxing it. A percentage radius resolves against the element's
|
|
22
|
+
* width, matching how the browser paints it.
|
|
23
|
+
*/
|
|
24
|
+
export declare function anchorRadius(element: HTMLElement): number;
|
|
25
|
+
/**
|
|
26
|
+
* Anchor rect grown by `padding` and clamped to the viewport. The radius grows
|
|
27
|
+
* with the padding so the cutout stays concentric with the control it traces,
|
|
28
|
+
* and is capped at half the shorter side so an over-large radius cannot fold the
|
|
29
|
+
* path in on itself.
|
|
30
|
+
*/
|
|
31
|
+
export declare function spotlightRect(options: {
|
|
32
|
+
anchor: DOMRect;
|
|
33
|
+
padding: number;
|
|
34
|
+
radius?: number | undefined;
|
|
35
|
+
viewport: Viewport;
|
|
36
|
+
}): SpotlightRect;
|
|
37
|
+
/**
|
|
38
|
+
* `path(evenodd, "...")` for the dim: the viewport rect minus a rounded cutout.
|
|
39
|
+
* A missing or degenerate cutout yields the plain viewport rect, so a zero-size
|
|
40
|
+
* anchor dims the page rather than emitting an invalid path the browser drops
|
|
41
|
+
* (which would leave the dim uncut and the page unusable).
|
|
42
|
+
*/
|
|
43
|
+
export declare function spotlightClipPath(options: {
|
|
44
|
+
viewport: Viewport;
|
|
45
|
+
cutout: SpotlightRect | null;
|
|
46
|
+
}): string;
|
|
47
|
+
//# sourceMappingURL=tour-geometry.d.ts.map
|