@flanksource/clicky-ui 0.3.17 → 0.3.19
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 +35 -14
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +35 -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/EndpointSelector.model.cjs +96 -0
- package/dist/components/EndpointSelector.model.cjs.map +1 -0
- package/dist/components/EndpointSelector.model.d.ts +2 -0
- package/dist/components/EndpointSelector.model.d.ts.map +1 -1
- package/dist/components/EndpointSelector.model.js +96 -0
- package/dist/components/EndpointSelector.model.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 +116 -4
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +37 -2
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +116 -4
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JSONPathField.cjs +112 -0
- package/dist/components/JSONPathField.cjs.map +1 -0
- package/dist/components/JSONPathField.d.ts +36 -0
- package/dist/components/JSONPathField.d.ts.map +1 -0
- package/dist/components/JSONPathField.js +112 -0
- package/dist/components/JSONPathField.js.map +1 -0
- package/dist/components/JSONPathPlayground.cjs +225 -0
- package/dist/components/JSONPathPlayground.cjs.map +1 -0
- package/dist/components/JSONPathPlayground.d.ts +59 -0
- package/dist/components/JSONPathPlayground.d.ts.map +1 -0
- package/dist/components/JSONPathPlayground.js +225 -0
- package/dist/components/JSONPathPlayground.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/OnePasswordSelector.cjs +178 -0
- package/dist/components/OnePasswordSelector.cjs.map +1 -0
- package/dist/components/OnePasswordSelector.d.ts +8 -0
- package/dist/components/OnePasswordSelector.d.ts.map +1 -0
- package/dist/components/OnePasswordSelector.js +178 -0
- package/dist/components/OnePasswordSelector.js.map +1 -0
- package/dist/components/OnePasswordSelector.model.cjs +31 -0
- package/dist/components/OnePasswordSelector.model.cjs.map +1 -0
- package/dist/components/OnePasswordSelector.model.d.ts +27 -0
- package/dist/components/OnePasswordSelector.model.d.ts.map +1 -0
- package/dist/components/OnePasswordSelector.model.js +31 -0
- package/dist/components/OnePasswordSelector.model.js.map +1 -0
- package/dist/components/SecretFormField.cjs +142 -0
- package/dist/components/SecretFormField.cjs.map +1 -0
- package/dist/components/SecretFormField.d.ts +9 -0
- package/dist/components/SecretFormField.d.ts.map +1 -0
- package/dist/components/SecretFormField.js +142 -0
- package/dist/components/SecretFormField.js.map +1 -0
- package/dist/components/SecretKeySelector.cjs +20 -14
- package/dist/components/SecretKeySelector.cjs.map +1 -1
- package/dist/components/SecretKeySelector.d.ts +4 -1
- package/dist/components/SecretKeySelector.d.ts.map +1 -1
- package/dist/components/SecretKeySelector.js +20 -14
- package/dist/components/SecretKeySelector.js.map +1 -1
- package/dist/components/TreePickerField.cjs +71 -27
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts +31 -2
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +72 -28
- 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 +25 -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 +12 -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 +12 -0
- package/dist/components/filter-bar-utils.js.map +1 -1
- package/dist/components/jotai-bindings-core.cjs.map +1 -1
- package/dist/components/jotai-bindings-core.d.ts +4 -1
- package/dist/components/jotai-bindings-core.d.ts.map +1 -1
- package/dist/components/jotai-bindings-core.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 +53 -29
- 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 +53 -29
- 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 +88 -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/jsonPathTree.cjs +189 -0
- package/dist/components/jsonPathTree.cjs.map +1 -0
- package/dist/components/jsonPathTree.d.ts +92 -0
- package/dist/components/jsonPathTree.d.ts.map +1 -0
- package/dist/components/jsonPathTree.js +189 -0
- package/dist/components/jsonPathTree.js.map +1 -0
- package/dist/components/secret-form-extension.cjs +30 -0
- package/dist/components/secret-form-extension.cjs.map +1 -0
- package/dist/components/secret-form-extension.d.ts +23 -0
- package/dist/components/secret-form-extension.d.ts.map +1 -0
- package/dist/components/secret-form-extension.js +30 -0
- package/dist/components/secret-form-extension.js.map +1 -0
- 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 +37 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +20 -4
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +38 -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 +185 -53
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +63 -3
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +185 -53
- 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/TaskExecDetails.cjs +40 -0
- package/dist/data/TaskExecDetails.cjs.map +1 -0
- package/dist/data/TaskExecDetails.d.ts +5 -0
- package/dist/data/TaskExecDetails.d.ts.map +1 -0
- package/dist/data/TaskExecDetails.js +40 -0
- package/dist/data/TaskExecDetails.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 +59 -14
- 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 +59 -14
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +12 -1
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TreeNode.cjs +3 -0
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +3 -0
- package/dist/data/TreeNode.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 +78 -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 +80 -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.cjs +1 -1
- package/dist/data/ai/ChatWindow.thread.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.thread.js +1 -1
- package/dist/data/ai/ChatWindow.thread.js.map +1 -1
- 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 +2 -2
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +2 -2
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- 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.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/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/fields.js +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 +11 -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 +6 -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 +156 -113
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +24 -7
- 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 +160 -117
- 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/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 +49 -6
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +11 -4
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js +49 -6
- package/dist/data/chat/approval.js.map +1 -1
- 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 +7 -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 +103 -0
- package/dist/data/data-table-filter-values.cjs.map +1 -0
- package/dist/data/data-table-filter-values.d.ts +34 -0
- package/dist/data/data-table-filter-values.d.ts.map +1 -0
- package/dist/data/data-table-filter-values.js +103 -0
- package/dist/data/data-table-filter-values.js.map +1 -0
- package/dist/data/data-table-server-filters.cjs +165 -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 +165 -0
- package/dist/data/data-table-server-filters.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.cjs +204 -155
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts +2 -41
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.editor.cjs +88 -0
- package/dist/data/query-browser/QueryBrowser.editor.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.editor.d.ts +12 -0
- package/dist/data/query-browser/QueryBrowser.editor.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.editor.js +88 -0
- package/dist/data/query-browser/QueryBrowser.editor.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.js +205 -156
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.cjs +11 -0
- package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts +92 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.js +11 -0
- package/dist/data/query-browser/QueryBrowser.types.js.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs +56 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts +5 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js +56 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.cjs +80 -0
- package/dist/data/query-browser/QueryBrowserResults.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.d.ts +16 -0
- package/dist/data/query-browser/QueryBrowserResults.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.js +80 -0
- package/dist/data/query-browser/QueryBrowserResults.js.map +1 -0
- package/dist/data/query-browser/index.d.ts +2 -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/{ai → runtime}/RuntimeBar.d.ts +8 -6
- 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.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBar.model.d.ts +2 -2
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBarCombo.cjs +25 -30
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBarCombo.d.ts +4 -3
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBarCombo.js +25 -30
- package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
- package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +54 -120
- 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} +58 -124
- 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/runtime/model-capabilities.cjs.map +1 -0
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
- 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 +119 -27
- package/dist/data/runtime/runtime-mode.cjs.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.d.ts +7 -1
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.js +120 -28
- package/dist/data/runtime/runtime-mode.js.map +1 -0
- package/dist/data/task-exec-details.cjs +9 -0
- package/dist/data/task-exec-details.cjs.map +1 -0
- package/dist/data/task-exec-details.d.ts +3 -0
- package/dist/data/task-exec-details.d.ts.map +1 -0
- package/dist/data/task-exec-details.js +9 -0
- package/dist/data/task-exec-details.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 +18 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +6 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +18 -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 +65 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +67 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +92 -56
- 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 +92 -56
- 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/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/FilterForm.cjs +20 -0
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.js +20 -0
- package/dist/rpc/FilterForm.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 +83 -7
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +84 -8
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +2 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -1
- package/dist/rpc/OperationResultView.d.ts +6 -0
- package/dist/rpc/OperationResultView.d.ts.map +1 -1
- package/dist/rpc/OperationResultView.js +2 -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 +123 -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 +121 -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 +21 -2
- 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/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.map +0 -1
- package/dist/data/ai/RuntimeBar.js.map +0 -1
- package/dist/data/ai/RuntimeBar.model.cjs.map +0 -1
- package/dist/data/ai/RuntimeBar.model.d.ts.map +0 -1
- package/dist/data/ai/RuntimeBar.model.js.map +0 -1
- package/dist/data/ai/RuntimeBarCombo.cjs.map +0 -1
- package/dist/data/ai/RuntimeBarCombo.d.ts.map +0 -1
- package/dist/data/ai/RuntimeBarCombo.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
- /package/dist/data/{ai → runtime}/RuntimeBar.model.cjs +0 -0
- /package/dist/data/{ai → runtime}/RuntimeBar.model.js +0 -0
- /package/dist/data/{ai → runtime}/model-capabilities.cjs +0 -0
- /package/dist/data/{ai → runtime}/model-capabilities.d.ts +0 -0
- /package/dist/data/{ai → runtime}/model-capabilities.js +0 -0
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-geometry.d.ts","sourceRoot":"","sources":["../../src/overlay/tour-geometry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAMF;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAYzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,aAAa,CAkBhB;AAqBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;CAC9B,GAAG,MAAM,CAOT"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
function clamp(value, min, max) {
|
|
2
|
+
return Math.min(Math.max(value, min), max);
|
|
3
|
+
}
|
|
4
|
+
function anchorRadius(element) {
|
|
5
|
+
const view = element.ownerDocument.defaultView;
|
|
6
|
+
if (!view) return 0;
|
|
7
|
+
const raw = view.getComputedStyle(element).borderTopLeftRadius;
|
|
8
|
+
if (!raw) return 0;
|
|
9
|
+
if (raw.endsWith("%")) {
|
|
10
|
+
const percent = Number.parseFloat(raw);
|
|
11
|
+
if (!Number.isFinite(percent)) return 0;
|
|
12
|
+
return element.getBoundingClientRect().width * percent / 100;
|
|
13
|
+
}
|
|
14
|
+
const px = Number.parseFloat(raw);
|
|
15
|
+
return Number.isFinite(px) ? px : 0;
|
|
16
|
+
}
|
|
17
|
+
function spotlightRect(options) {
|
|
18
|
+
const { anchor, padding, radius, viewport } = options;
|
|
19
|
+
const left = clamp(anchor.left - padding, 0, viewport.width);
|
|
20
|
+
const top = clamp(anchor.top - padding, 0, viewport.height);
|
|
21
|
+
const right = clamp(anchor.right + padding, 0, viewport.width);
|
|
22
|
+
const bottom = clamp(anchor.bottom + padding, 0, viewport.height);
|
|
23
|
+
const width = Math.max(right - left, 0);
|
|
24
|
+
const height = Math.max(bottom - top, 0);
|
|
25
|
+
const requested = radius ?? 0;
|
|
26
|
+
return {
|
|
27
|
+
x: left,
|
|
28
|
+
y: top,
|
|
29
|
+
width,
|
|
30
|
+
height,
|
|
31
|
+
radius: clamp(requested, 0, Math.min(width, height) / 2)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function roundedRectPath(rect) {
|
|
35
|
+
const { x, y, width, height, radius: r } = rect;
|
|
36
|
+
if (r <= 0) {
|
|
37
|
+
return `M${x},${y} H${x + width} V${y + height} H${x} Z`;
|
|
38
|
+
}
|
|
39
|
+
return [
|
|
40
|
+
`M${x + r},${y}`,
|
|
41
|
+
`H${x + width - r}`,
|
|
42
|
+
`A${r},${r} 0 0 1 ${x + width},${y + r}`,
|
|
43
|
+
`V${y + height - r}`,
|
|
44
|
+
`A${r},${r} 0 0 1 ${x + width - r},${y + height}`,
|
|
45
|
+
`H${x + r}`,
|
|
46
|
+
`A${r},${r} 0 0 1 ${x},${y + height - r}`,
|
|
47
|
+
`V${y + r}`,
|
|
48
|
+
`A${r},${r} 0 0 1 ${x + r},${y}`,
|
|
49
|
+
"Z"
|
|
50
|
+
].join(" ");
|
|
51
|
+
}
|
|
52
|
+
function spotlightClipPath(options) {
|
|
53
|
+
const { viewport, cutout } = options;
|
|
54
|
+
const outer = `M0,0 H${viewport.width} V${viewport.height} H0 Z`;
|
|
55
|
+
if (!cutout || cutout.width <= 0 || cutout.height <= 0) {
|
|
56
|
+
return `path(evenodd, "${outer}")`;
|
|
57
|
+
}
|
|
58
|
+
return `path(evenodd, "${outer} ${roundedRectPath(cutout)}")`;
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
anchorRadius,
|
|
62
|
+
spotlightClipPath,
|
|
63
|
+
spotlightRect
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=tour-geometry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour-geometry.js","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;"}
|