@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplitPane.js","sources":["../../src/layout/SplitPane.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"SplitPane.js","sources":["../../src/layout/SplitPane.tsx"],"sourcesContent":["import {\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../lib/utils\";\n\nexport type SplitPaneProps = {\n /** Content rendered in the left pane. */\n left: ReactNode;\n /** Content rendered in the right pane. */\n right: ReactNode;\n /** Initial left-pane width as a percentage. */\n defaultSplit?: number;\n /** Minimum left-pane width as a percentage. */\n minLeft?: number;\n /** Minimum right-pane width as a percentage. */\n minRight?: number;\n /** Classes applied to the left pane. */\n leftClass?: string;\n /** Classes applied to the right pane. */\n rightClass?: string;\n /** Classes applied to the root split container. */\n className?: string;\n /** Stack the panes and hide the resize handle below the `md` breakpoint. */\n stackOnMobile?: boolean;\n};\n\nexport function SplitPane({\n left,\n right,\n defaultSplit = 50,\n minLeft = 20,\n minRight = 20,\n leftClass,\n rightClass,\n className,\n stackOnMobile = false,\n}: SplitPaneProps) {\n const [split, setSplit] = useState(defaultSplit);\n const dragging = useRef(false);\n const container = useRef<HTMLDivElement>(null);\n\n const onMouseDown = useCallback(\n (e: React.MouseEvent) => {\n e.preventDefault();\n dragging.current = true;\n\n const onMove = (ev: MouseEvent) => {\n if (!dragging.current || !container.current) return;\n const rect = container.current.getBoundingClientRect();\n const pct = ((ev.clientX - rect.left) / rect.width) * 100;\n setSplit(Math.max(minLeft, Math.min(100 - minRight, pct)));\n };\n\n const onUp = () => {\n dragging.current = false;\n document.removeEventListener(\"mousemove\", onMove);\n document.removeEventListener(\"mouseup\", onUp);\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n\n document.addEventListener(\"mousemove\", onMove);\n document.addEventListener(\"mouseup\", onUp);\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n },\n [minLeft, minRight],\n );\n\n return (\n <div\n ref={container}\n className={cn(\n \"flex h-full flex-1 overflow-hidden\",\n stackOnMobile && \"flex-col md:flex-row\",\n className,\n )}\n >\n <div\n style={\n stackOnMobile\n ? ({ \"--split-pane-width\": `${split}%` } as CSSProperties)\n : { width: `${split}%` }\n }\n className={cn(\n \"min-h-0 overflow-y-auto bg-background\",\n stackOnMobile && \"w-full md:w-[var(--split-pane-width)]\",\n leftClass,\n )}\n >\n {left}\n </div>\n <div\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={cn(\n \"w-1 shrink-0 cursor-col-resize bg-border transition-colors hover:bg-primary\",\n stackOnMobile && \"hidden md:block\",\n )}\n onMouseDown={onMouseDown}\n />\n <div\n style={\n stackOnMobile\n ? ({ \"--split-pane-width\": `${100 - split}%` } as CSSProperties)\n : { width: `${100 - split}%` }\n }\n className={cn(\n \"min-h-0 overflow-hidden bg-background\",\n stackOnMobile && \"w-full md:w-[var(--split-pane-width)]\",\n rightClass,\n )}\n >\n {right}\n </div>\n </div>\n );\n}\n"],"names":[],"mappings":";;;AA8BO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAgB;AAClB,GAAmB;AACjB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,WAAW,OAAO,KAAK;AAC7B,QAAM,YAAY,OAAuB,IAAI;AAE7C,QAAM,cAAc;AAAA,IAClB,CAAC,MAAwB;AACvB,QAAE,eAAA;AACF,eAAS,UAAU;AAEnB,YAAM,SAAS,CAAC,OAAmB;AACjC,YAAI,CAAC,SAAS,WAAW,CAAC,UAAU,QAAS;AAC7C,cAAM,OAAO,UAAU,QAAQ,sBAAA;AAC/B,cAAM,OAAQ,GAAG,UAAU,KAAK,QAAQ,KAAK,QAAS;AACtD,iBAAS,KAAK,IAAI,SAAS,KAAK,IAAI,MAAM,UAAU,GAAG,CAAC,CAAC;AAAA,MAC3D;AAEA,YAAM,OAAO,MAAM;AACjB,iBAAS,UAAU;AACnB,iBAAS,oBAAoB,aAAa,MAAM;AAChD,iBAAS,oBAAoB,WAAW,IAAI;AAC5C,iBAAS,KAAK,MAAM,SAAS;AAC7B,iBAAS,KAAK,MAAM,aAAa;AAAA,MACnC;AAEA,eAAS,iBAAiB,aAAa,MAAM;AAC7C,eAAS,iBAAiB,WAAW,IAAI;AACzC,eAAS,KAAK,MAAM,SAAS;AAC7B,eAAS,KAAK,MAAM,aAAa;AAAA,IACnC;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,EAAA;AAGpB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,WAAW;AAAA,QACT;AAAA,QACA,iBAAiB;AAAA,QACjB;AAAA,MAAA;AAAA,MAGF,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OACE,gBACK,EAAE,sBAAsB,GAAG,KAAK,IAAA,IACjC,EAAE,OAAO,GAAG,KAAK,IAAA;AAAA,YAEvB,WAAW;AAAA,cACT;AAAA,cACA,iBAAiB;AAAA,cACjB;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,oBAAiB;AAAA,YACjB,WAAW;AAAA,cACT;AAAA,cACA,iBAAiB;AAAA,YAAA;AAAA,YAEnB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OACE,gBACK,EAAE,sBAAsB,GAAG,MAAM,KAAK,IAAA,IACvC,EAAE,OAAO,GAAG,MAAM,KAAK,IAAA;AAAA,YAE7B,WAAW;AAAA,cACT;AAAA,cACA,iBAAiB;AAAA,cACjB;AAAA,YAAA;AAAA,YAGD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|
package/dist/lib/format.cjs
CHANGED
|
@@ -1,10 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const LOCALE = "en-US";
|
|
4
|
+
const CLICKY_COLUMN_FORMAT_OPTIONS = [
|
|
5
|
+
{
|
|
6
|
+
value: "date",
|
|
7
|
+
label: "Date/time",
|
|
8
|
+
description: "Render a date or timestamp."
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
value: "float",
|
|
12
|
+
label: "Number",
|
|
13
|
+
description: "Render a number with decimal precision."
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
value: "duration",
|
|
17
|
+
label: "Duration",
|
|
18
|
+
description: "Render a Go duration value."
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
value: "bytes",
|
|
22
|
+
label: "Bytes",
|
|
23
|
+
description: "Render a byte count with binary scaling."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
value: "currency",
|
|
27
|
+
label: "Currency",
|
|
28
|
+
description: "Render a monetary amount."
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
const CLICKY_COLUMN_UNIT_OPTIONS = [
|
|
32
|
+
{
|
|
33
|
+
value: "none",
|
|
34
|
+
label: "Compact count",
|
|
35
|
+
description: "Use short SI count notation without a unit."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
value: "short",
|
|
39
|
+
label: "Short number",
|
|
40
|
+
description: "Use short SI count notation such as 1.2K."
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
value: "percent",
|
|
44
|
+
label: "Percent (0-100)",
|
|
45
|
+
description: "Treat the source value as an existing percentage."
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
value: "percentunit",
|
|
49
|
+
label: "Percent (0-1)",
|
|
50
|
+
description: "Convert a fractional source value to a percentage."
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
value: "bytes",
|
|
54
|
+
label: "Bytes (IEC)",
|
|
55
|
+
description: "Scale byte values in powers of 1024."
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
value: "decbytes",
|
|
59
|
+
label: "Bytes (SI)",
|
|
60
|
+
description: "Scale byte values in powers of 1000."
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
value: "Bps",
|
|
64
|
+
label: "Bytes/sec",
|
|
65
|
+
description: "Render a byte rate in powers of 1024."
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
value: "binBps",
|
|
69
|
+
label: "Binary bytes/sec",
|
|
70
|
+
description: "Render a binary byte rate in powers of 1024."
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
value: "ms",
|
|
74
|
+
label: "Milliseconds",
|
|
75
|
+
description: "Treat the source duration as milliseconds."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
value: "s",
|
|
79
|
+
label: "Seconds",
|
|
80
|
+
description: "Treat the source duration as seconds."
|
|
81
|
+
}
|
|
82
|
+
];
|
|
4
83
|
function intl(value, maxFractionDigits = 1) {
|
|
5
|
-
return new Intl.NumberFormat(LOCALE, {
|
|
6
|
-
|
|
7
|
-
);
|
|
84
|
+
return new Intl.NumberFormat(LOCALE, {
|
|
85
|
+
maximumFractionDigits: maxFractionDigits
|
|
86
|
+
}).format(Number.isFinite(value) ? value : 0);
|
|
8
87
|
}
|
|
9
88
|
function trimZero(s) {
|
|
10
89
|
return s.endsWith(".0") ? s.slice(0, -2) : s;
|
|
@@ -12,7 +91,8 @@ function trimZero(s) {
|
|
|
12
91
|
const BYTE_UNITS = ["B", "KB", "MB", "GB", "TB", "PB"];
|
|
13
92
|
function formatBytes(bytes, opts) {
|
|
14
93
|
const suffix = (opts == null ? void 0 : opts.suffix) ?? "";
|
|
15
|
-
if (bytes === void 0 || !Number.isFinite(bytes) || bytes <= 0)
|
|
94
|
+
if (bytes === void 0 || !Number.isFinite(bytes) || bytes <= 0)
|
|
95
|
+
return `0 B${suffix}`;
|
|
16
96
|
const base = (opts == null ? void 0 : opts.base) ?? 1024;
|
|
17
97
|
let size = bytes;
|
|
18
98
|
let unit = 0;
|
|
@@ -69,6 +149,8 @@ function formatUnit(value, unit) {
|
|
|
69
149
|
if (fmt) return fmt(v);
|
|
70
150
|
return `${intl(v)}${unit}`;
|
|
71
151
|
}
|
|
152
|
+
exports.CLICKY_COLUMN_FORMAT_OPTIONS = CLICKY_COLUMN_FORMAT_OPTIONS;
|
|
153
|
+
exports.CLICKY_COLUMN_UNIT_OPTIONS = CLICKY_COLUMN_UNIT_OPTIONS;
|
|
72
154
|
exports.formatBytes = formatBytes;
|
|
73
155
|
exports.formatBytesPerSecond = formatBytesPerSecond;
|
|
74
156
|
exports.formatDuration = formatDuration;
|
package/dist/lib/format.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.cjs","sources":["../../src/lib/format.ts"],"sourcesContent":["// Value formatters and a Grafana-style unit registry, shared by TimeseriesPanel\n// (and any other metric display). Pure — no React — so it is trivially testable.\n//\n// `formatUnit(value, unit)` dispatches on a Grafana unit identifier (e.g.\n// \"bytes\", \"Bps\", \"percent\", \"ms\", \"short\"). Unknown unit strings are treated as\n// a raw suffix appended to the formatted number, preserving callers that pass a\n// literal like \"%\" or \"req\".\n\nconst LOCALE = \"en-US\";\n\nfunction intl(value: number, maxFractionDigits = 1): string {\n return new Intl.NumberFormat(LOCALE, { maximumFractionDigits: maxFractionDigits }).format(\n Number.isFinite(value) ? value : 0,\n );\n}\n\n/** Drops a trailing \".0\" so whole values read \"1 KB\" rather than \"1.0 KB\". */\nfunction trimZero(s: string): string {\n return s.endsWith(\".0\") ? s.slice(0, -2) : s;\n}\n\nexport interface FormatBytesOptions {\n /** 1024 (IEC, the default) or 1000 (SI/decimal). */\n base?: 1000 | 1024;\n /** Appended after the unit label, e.g. \"/s\" for a rate. */\n suffix?: string;\n}\n\nconst BYTE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"] as const;\n\n/**\n * Human-readable byte size. 1024-based by default with B/KB/MB/GB/TB/PB labels,\n * matching the prior diagnostics formatter. Whole numbers and values >= 10 drop\n * the fraction; smaller fractional values keep one decimal.\n */\nexport function formatBytes(bytes?: number, opts?: FormatBytesOptions): string {\n const suffix = opts?.suffix ?? \"\";\n if (bytes === undefined || !Number.isFinite(bytes) || bytes <= 0) return `0 B${suffix}`;\n const base = opts?.base ?? 1024;\n let size = bytes;\n let unit = 0;\n while (size >= base && unit < BYTE_UNITS.length - 1) {\n size /= base;\n unit++;\n }\n const rendered = size >= 10 || unit === 0 ? size.toFixed(0) : trimZero(size.toFixed(1));\n return `${rendered} ${BYTE_UNITS[unit]}${suffix}`;\n}\n\n/** Byte rate, e.g. \"1.5 MB/s\". 1024-based. */\nexport function formatBytesPerSecond(bytes?: number): string {\n return formatBytes(bytes, { suffix: \"/s\" });\n}\n\nconst SHORT_UNITS = [\"\", \"K\", \"M\", \"B\", \"T\"] as const;\n\n/** SI abbreviation: 999 -> \"999\", 1200 -> \"1.2K\", 3_400_000 -> \"3.4M\". */\nexport function formatShort(value?: number): string {\n if (value === undefined || !Number.isFinite(value)) return \"0\";\n const sign = value < 0 ? \"-\" : \"\";\n let n = Math.abs(value);\n if (n < 1000) return `${sign}${intl(n)}`;\n let unit = 0;\n while (n >= 1000 && unit < SHORT_UNITS.length - 1) {\n n /= 1000;\n unit++;\n }\n const rendered = n >= 10 ? n.toFixed(0) : trimZero(n.toFixed(1));\n return `${sign}${rendered}${SHORT_UNITS[unit]}`;\n}\n\n/**\n * Duration rendered from a millisecond (default) or second input. Picks ms / s /\n * min / h by magnitude: 850 -> \"850 ms\", 1500 -> \"1.5 s\", 90_000 -> \"1.5 min\".\n */\nexport function formatDuration(value?: number, opts?: { from?: \"ms\" | \"s\" }): string {\n if (value === undefined || !Number.isFinite(value)) return \"0 ms\";\n const ms = opts?.from === \"s\" ? value * 1000 : value;\n const abs = Math.abs(ms);\n if (abs < 1000) return `${intl(ms, 0)} ms`;\n if (abs < 60_000) return `${intl(ms / 1000)} s`;\n if (abs < 3_600_000) return `${intl(ms / 60_000)} min`;\n return `${intl(ms / 3_600_000)} h`;\n}\n\n// formatters keyed by Grafana unit identifier. Keys not present here fall through\n// to the raw-suffix path in formatUnit.\nconst UNIT_FORMATTERS: Record<string, (v: number) => string> = {\n none: (v) => formatShort(v),\n short: (v) => formatShort(v),\n percent: (v) => `${intl(v)}%`,\n percentunit: (v) => `${intl(v * 100)}%`,\n \"%\": (v) => `${intl(v)}%`,\n bytes: (v) => formatBytes(v, { base: 1024 }),\n decbytes: (v) => formatBytes(v, { base: 1000 }),\n Bps: (v) => formatBytesPerSecond(v),\n binBps: (v) => formatBytesPerSecond(v),\n ms: (v) => formatDuration(v, { from: \"ms\" }),\n s: (v) => formatDuration(v, { from: \"s\" }),\n};\n\n/**\n * Formats a value for display per a Grafana-style unit key. Unknown units are\n * appended as a literal suffix (back-compat for callers passing \"%\", \"req\",\n * etc.); an absent unit yields the plain localized number.\n */\nexport function formatUnit(value: number, unit?: string): string {\n const v = Number.isFinite(value) ? value : 0;\n if (!unit) return intl(v);\n const fmt = UNIT_FORMATTERS[unit];\n if (fmt) return fmt(v);\n return `${intl(v)}${unit}`;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format.cjs","sources":["../../src/lib/format.ts"],"sourcesContent":["// Value formatters and a Grafana-style unit registry, shared by TimeseriesPanel\n// (and any other metric display). Pure — no React — so it is trivially testable.\n//\n// `formatUnit(value, unit)` dispatches on a Grafana unit identifier (e.g.\n// \"bytes\", \"Bps\", \"percent\", \"ms\", \"short\"). Unknown unit strings are treated as\n// a raw suffix appended to the formatted number, preserving callers that pass a\n// literal like \"%\" or \"req\".\n\nconst LOCALE = \"en-US\";\n\nexport type ClickyColumnOption = {\n value: string;\n label: string;\n description: string;\n};\n\nexport const CLICKY_COLUMN_FORMAT_OPTIONS = [\n {\n value: \"date\",\n label: \"Date/time\",\n description: \"Render a date or timestamp.\",\n },\n {\n value: \"float\",\n label: \"Number\",\n description: \"Render a number with decimal precision.\",\n },\n {\n value: \"duration\",\n label: \"Duration\",\n description: \"Render a Go duration value.\",\n },\n {\n value: \"bytes\",\n label: \"Bytes\",\n description: \"Render a byte count with binary scaling.\",\n },\n {\n value: \"currency\",\n label: \"Currency\",\n description: \"Render a monetary amount.\",\n },\n] as const satisfies readonly ClickyColumnOption[];\n\nexport const CLICKY_COLUMN_UNIT_OPTIONS = [\n {\n value: \"none\",\n label: \"Compact count\",\n description: \"Use short SI count notation without a unit.\",\n },\n {\n value: \"short\",\n label: \"Short number\",\n description: \"Use short SI count notation such as 1.2K.\",\n },\n {\n value: \"percent\",\n label: \"Percent (0-100)\",\n description: \"Treat the source value as an existing percentage.\",\n },\n {\n value: \"percentunit\",\n label: \"Percent (0-1)\",\n description: \"Convert a fractional source value to a percentage.\",\n },\n {\n value: \"bytes\",\n label: \"Bytes (IEC)\",\n description: \"Scale byte values in powers of 1024.\",\n },\n {\n value: \"decbytes\",\n label: \"Bytes (SI)\",\n description: \"Scale byte values in powers of 1000.\",\n },\n {\n value: \"Bps\",\n label: \"Bytes/sec\",\n description: \"Render a byte rate in powers of 1024.\",\n },\n {\n value: \"binBps\",\n label: \"Binary bytes/sec\",\n description: \"Render a binary byte rate in powers of 1024.\",\n },\n {\n value: \"ms\",\n label: \"Milliseconds\",\n description: \"Treat the source duration as milliseconds.\",\n },\n {\n value: \"s\",\n label: \"Seconds\",\n description: \"Treat the source duration as seconds.\",\n },\n] as const satisfies readonly ClickyColumnOption[];\n\nexport type ClickyColumnFormat =\n (typeof CLICKY_COLUMN_FORMAT_OPTIONS)[number][\"value\"];\nexport type ClickyColumnUnit =\n (typeof CLICKY_COLUMN_UNIT_OPTIONS)[number][\"value\"];\n\nfunction intl(value: number, maxFractionDigits = 1): string {\n return new Intl.NumberFormat(LOCALE, {\n maximumFractionDigits: maxFractionDigits,\n }).format(Number.isFinite(value) ? value : 0);\n}\n\n/** Drops a trailing \".0\" so whole values read \"1 KB\" rather than \"1.0 KB\". */\nfunction trimZero(s: string): string {\n return s.endsWith(\".0\") ? s.slice(0, -2) : s;\n}\n\nexport interface FormatBytesOptions {\n /** 1024 (IEC, the default) or 1000 (SI/decimal). */\n base?: 1000 | 1024;\n /** Appended after the unit label, e.g. \"/s\" for a rate. */\n suffix?: string;\n}\n\nconst BYTE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"] as const;\n\n/**\n * Human-readable byte size. 1024-based by default with B/KB/MB/GB/TB/PB labels,\n * matching the prior diagnostics formatter. Whole numbers and values >= 10 drop\n * the fraction; smaller fractional values keep one decimal.\n */\nexport function formatBytes(bytes?: number, opts?: FormatBytesOptions): string {\n const suffix = opts?.suffix ?? \"\";\n if (bytes === undefined || !Number.isFinite(bytes) || bytes <= 0)\n return `0 B${suffix}`;\n const base = opts?.base ?? 1024;\n let size = bytes;\n let unit = 0;\n while (size >= base && unit < BYTE_UNITS.length - 1) {\n size /= base;\n unit++;\n }\n const rendered =\n size >= 10 || unit === 0 ? size.toFixed(0) : trimZero(size.toFixed(1));\n return `${rendered} ${BYTE_UNITS[unit]}${suffix}`;\n}\n\n/** Byte rate, e.g. \"1.5 MB/s\". 1024-based. */\nexport function formatBytesPerSecond(bytes?: number): string {\n return formatBytes(bytes, { suffix: \"/s\" });\n}\n\nconst SHORT_UNITS = [\"\", \"K\", \"M\", \"B\", \"T\"] as const;\n\n/** SI abbreviation: 999 -> \"999\", 1200 -> \"1.2K\", 3_400_000 -> \"3.4M\". */\nexport function formatShort(value?: number): string {\n if (value === undefined || !Number.isFinite(value)) return \"0\";\n const sign = value < 0 ? \"-\" : \"\";\n let n = Math.abs(value);\n if (n < 1000) return `${sign}${intl(n)}`;\n let unit = 0;\n while (n >= 1000 && unit < SHORT_UNITS.length - 1) {\n n /= 1000;\n unit++;\n }\n const rendered = n >= 10 ? n.toFixed(0) : trimZero(n.toFixed(1));\n return `${sign}${rendered}${SHORT_UNITS[unit]}`;\n}\n\n/**\n * Duration rendered from a millisecond (default) or second input. Picks ms / s /\n * min / h by magnitude: 850 -> \"850 ms\", 1500 -> \"1.5 s\", 90_000 -> \"1.5 min\".\n */\nexport function formatDuration(\n value?: number,\n opts?: { from?: \"ms\" | \"s\" },\n): string {\n if (value === undefined || !Number.isFinite(value)) return \"0 ms\";\n const ms = opts?.from === \"s\" ? value * 1000 : value;\n const abs = Math.abs(ms);\n if (abs < 1000) return `${intl(ms, 0)} ms`;\n if (abs < 60_000) return `${intl(ms / 1000)} s`;\n if (abs < 3_600_000) return `${intl(ms / 60_000)} min`;\n return `${intl(ms / 3_600_000)} h`;\n}\n\n// formatters keyed by Grafana unit identifier. Keys not present here fall through\n// to the raw-suffix path in formatUnit.\nconst UNIT_FORMATTERS: Record<string, (v: number) => string> = {\n none: (v) => formatShort(v),\n short: (v) => formatShort(v),\n percent: (v) => `${intl(v)}%`,\n percentunit: (v) => `${intl(v * 100)}%`,\n \"%\": (v) => `${intl(v)}%`,\n bytes: (v) => formatBytes(v, { base: 1024 }),\n decbytes: (v) => formatBytes(v, { base: 1000 }),\n Bps: (v) => formatBytesPerSecond(v),\n binBps: (v) => formatBytesPerSecond(v),\n ms: (v) => formatDuration(v, { from: \"ms\" }),\n s: (v) => formatDuration(v, { from: \"s\" }),\n};\n\n/**\n * Formats a value for display per a Grafana-style unit key. Unknown units are\n * appended as a literal suffix (back-compat for callers passing \"%\", \"req\",\n * etc.); an absent unit yields the plain localized number.\n */\nexport function formatUnit(value: number, unit?: string): string {\n const v = Number.isFinite(value) ? value : 0;\n if (!unit) return intl(v);\n const fmt = UNIT_FORMATTERS[unit];\n if (fmt) return fmt(v);\n return `${intl(v)}${unit}`;\n}\n"],"names":[],"mappings":";;AAQA,MAAM,SAAS;AAQR,MAAM,+BAA+B;AAAA,EAC1C;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAEjB;AAEO,MAAM,6BAA6B;AAAA,EACxC;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAAA,EAEf;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EAAA;AAEjB;AAOA,SAAS,KAAK,OAAe,oBAAoB,GAAW;AAC1D,SAAO,IAAI,KAAK,aAAa,QAAQ;AAAA,IACnC,uBAAuB;AAAA,EAAA,CACxB,EAAE,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ,CAAC;AAC9C;AAGA,SAAS,SAAS,GAAmB;AACnC,SAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,GAAG,EAAE,IAAI;AAC7C;AASA,MAAM,aAAa,CAAC,KAAK,MAAM,MAAM,MAAM,MAAM,IAAI;AAO9C,SAAS,YAAY,OAAgB,MAAmC;AAC7E,QAAM,UAAS,6BAAM,WAAU;AAC/B,MAAI,UAAU,UAAa,CAAC,OAAO,SAAS,KAAK,KAAK,SAAS;AAC7D,WAAO,MAAM,MAAM;AACrB,QAAM,QAAO,6BAAM,SAAQ;AAC3B,MAAI,OAAO;AACX,MAAI,OAAO;AACX,SAAO,QAAQ,QAAQ,OAAO,WAAW,SAAS,GAAG;AACnD,YAAQ;AACR;AAAA,EACF;AACA,QAAM,WACJ,QAAQ,MAAM,SAAS,IAAI,KAAK,QAAQ,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC,CAAC;AACvE,SAAO,GAAG,QAAQ,IAAI,WAAW,IAAI,CAAC,GAAG,MAAM;AACjD;AAGO,SAAS,qBAAqB,OAAwB;AAC3D,SAAO,YAAY,OAAO,EAAE,QAAQ,MAAM;AAC5C;AAEA,MAAM,cAAc,CAAC,IAAI,KAAK,KAAK,KAAK,GAAG;AAGpC,SAAS,YAAY,OAAwB;AAClD,MAAI,UAAU,UAAa,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AAC3D,QAAM,OAAO,QAAQ,IAAI,MAAM;AAC/B,MAAI,IAAI,KAAK,IAAI,KAAK;AACtB,MAAI,IAAI,IAAM,QAAO,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;AACtC,MAAI,OAAO;AACX,SAAO,KAAK,OAAQ,OAAO,YAAY,SAAS,GAAG;AACjD,SAAK;AACL;AAAA,EACF;AACA,QAAM,WAAW,KAAK,KAAK,EAAE,QAAQ,CAAC,IAAI,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/D,SAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,IAAI,CAAC;AAC/C;AAMO,SAAS,eACd,OACA,MACQ;AACR,MAAI,UAAU,UAAa,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AAC3D,QAAM,MAAK,6BAAM,UAAS,MAAM,QAAQ,MAAO;AAC/C,QAAM,MAAM,KAAK,IAAI,EAAE;AACvB,MAAI,MAAM,IAAM,QAAO,GAAG,KAAK,IAAI,CAAC,CAAC;AACrC,MAAI,MAAM,IAAQ,QAAO,GAAG,KAAK,KAAK,GAAI,CAAC;AAC3C,MAAI,MAAM,KAAW,QAAO,GAAG,KAAK,KAAK,GAAM,CAAC;AAChD,SAAO,GAAG,KAAK,KAAK,IAAS,CAAC;AAChC;AAIA,MAAM,kBAAyD;AAAA,EAC7D,MAAM,CAAC,MAAM,YAAY,CAAC;AAAA,EAC1B,OAAO,CAAC,MAAM,YAAY,CAAC;AAAA,EAC3B,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAAA,EAC1B,aAAa,CAAC,MAAM,GAAG,KAAK,IAAI,GAAG,CAAC;AAAA,EACpC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;AAAA,EACtB,OAAO,CAAC,MAAM,YAAY,GAAG,EAAE,MAAM,MAAM;AAAA,EAC3C,UAAU,CAAC,MAAM,YAAY,GAAG,EAAE,MAAM,KAAM;AAAA,EAC9C,KAAK,CAAC,MAAM,qBAAqB,CAAC;AAAA,EAClC,QAAQ,CAAC,MAAM,qBAAqB,CAAC;AAAA,EACrC,IAAI,CAAC,MAAM,eAAe,GAAG,EAAE,MAAM,MAAM;AAAA,EAC3C,GAAG,CAAC,MAAM,eAAe,GAAG,EAAE,MAAM,KAAK;AAC3C;AAOO,SAAS,WAAW,OAAe,MAAuB;AAC/D,QAAM,IAAI,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC3C,MAAI,CAAC,KAAM,QAAO,KAAK,CAAC;AACxB,QAAM,MAAM,gBAAgB,IAAI;AAChC,MAAI,IAAK,QAAO,IAAI,CAAC;AACrB,SAAO,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI;AAC1B;;;;;;;;"}
|
package/dist/lib/format.d.ts
CHANGED
|
@@ -1,3 +1,72 @@
|
|
|
1
|
+
export type ClickyColumnOption = {
|
|
2
|
+
value: string;
|
|
3
|
+
label: string;
|
|
4
|
+
description: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const CLICKY_COLUMN_FORMAT_OPTIONS: readonly [{
|
|
7
|
+
readonly value: "date";
|
|
8
|
+
readonly label: "Date/time";
|
|
9
|
+
readonly description: "Render a date or timestamp.";
|
|
10
|
+
}, {
|
|
11
|
+
readonly value: "float";
|
|
12
|
+
readonly label: "Number";
|
|
13
|
+
readonly description: "Render a number with decimal precision.";
|
|
14
|
+
}, {
|
|
15
|
+
readonly value: "duration";
|
|
16
|
+
readonly label: "Duration";
|
|
17
|
+
readonly description: "Render a Go duration value.";
|
|
18
|
+
}, {
|
|
19
|
+
readonly value: "bytes";
|
|
20
|
+
readonly label: "Bytes";
|
|
21
|
+
readonly description: "Render a byte count with binary scaling.";
|
|
22
|
+
}, {
|
|
23
|
+
readonly value: "currency";
|
|
24
|
+
readonly label: "Currency";
|
|
25
|
+
readonly description: "Render a monetary amount.";
|
|
26
|
+
}];
|
|
27
|
+
export declare const CLICKY_COLUMN_UNIT_OPTIONS: readonly [{
|
|
28
|
+
readonly value: "none";
|
|
29
|
+
readonly label: "Compact count";
|
|
30
|
+
readonly description: "Use short SI count notation without a unit.";
|
|
31
|
+
}, {
|
|
32
|
+
readonly value: "short";
|
|
33
|
+
readonly label: "Short number";
|
|
34
|
+
readonly description: "Use short SI count notation such as 1.2K.";
|
|
35
|
+
}, {
|
|
36
|
+
readonly value: "percent";
|
|
37
|
+
readonly label: "Percent (0-100)";
|
|
38
|
+
readonly description: "Treat the source value as an existing percentage.";
|
|
39
|
+
}, {
|
|
40
|
+
readonly value: "percentunit";
|
|
41
|
+
readonly label: "Percent (0-1)";
|
|
42
|
+
readonly description: "Convert a fractional source value to a percentage.";
|
|
43
|
+
}, {
|
|
44
|
+
readonly value: "bytes";
|
|
45
|
+
readonly label: "Bytes (IEC)";
|
|
46
|
+
readonly description: "Scale byte values in powers of 1024.";
|
|
47
|
+
}, {
|
|
48
|
+
readonly value: "decbytes";
|
|
49
|
+
readonly label: "Bytes (SI)";
|
|
50
|
+
readonly description: "Scale byte values in powers of 1000.";
|
|
51
|
+
}, {
|
|
52
|
+
readonly value: "Bps";
|
|
53
|
+
readonly label: "Bytes/sec";
|
|
54
|
+
readonly description: "Render a byte rate in powers of 1024.";
|
|
55
|
+
}, {
|
|
56
|
+
readonly value: "binBps";
|
|
57
|
+
readonly label: "Binary bytes/sec";
|
|
58
|
+
readonly description: "Render a binary byte rate in powers of 1024.";
|
|
59
|
+
}, {
|
|
60
|
+
readonly value: "ms";
|
|
61
|
+
readonly label: "Milliseconds";
|
|
62
|
+
readonly description: "Treat the source duration as milliseconds.";
|
|
63
|
+
}, {
|
|
64
|
+
readonly value: "s";
|
|
65
|
+
readonly label: "Seconds";
|
|
66
|
+
readonly description: "Treat the source duration as seconds.";
|
|
67
|
+
}];
|
|
68
|
+
export type ClickyColumnFormat = (typeof CLICKY_COLUMN_FORMAT_OPTIONS)[number]["value"];
|
|
69
|
+
export type ClickyColumnUnit = (typeof CLICKY_COLUMN_UNIT_OPTIONS)[number]["value"];
|
|
1
70
|
export interface FormatBytesOptions {
|
|
2
71
|
/** 1024 (IEC, the default) or 1000 (SI/decimal). */
|
|
3
72
|
base?: 1000 | 1024;
|
package/dist/lib/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/format.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;EA0BS,CAAC;AAEnD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDW,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAC5B,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AACzD,MAAM,MAAM,gBAAgB,GAC1B,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAavD,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAc7E;AAED,8CAA8C;AAC9C,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAID,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,IAAI,GAAG,GAAG,CAAA;CAAE,GAC3B,MAAM,CAQR;AAkBD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/D"}
|
package/dist/lib/format.js
CHANGED
|
@@ -1,8 +1,87 @@
|
|
|
1
1
|
const LOCALE = "en-US";
|
|
2
|
+
const CLICKY_COLUMN_FORMAT_OPTIONS = [
|
|
3
|
+
{
|
|
4
|
+
value: "date",
|
|
5
|
+
label: "Date/time",
|
|
6
|
+
description: "Render a date or timestamp."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
value: "float",
|
|
10
|
+
label: "Number",
|
|
11
|
+
description: "Render a number with decimal precision."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
value: "duration",
|
|
15
|
+
label: "Duration",
|
|
16
|
+
description: "Render a Go duration value."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
value: "bytes",
|
|
20
|
+
label: "Bytes",
|
|
21
|
+
description: "Render a byte count with binary scaling."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
value: "currency",
|
|
25
|
+
label: "Currency",
|
|
26
|
+
description: "Render a monetary amount."
|
|
27
|
+
}
|
|
28
|
+
];
|
|
29
|
+
const CLICKY_COLUMN_UNIT_OPTIONS = [
|
|
30
|
+
{
|
|
31
|
+
value: "none",
|
|
32
|
+
label: "Compact count",
|
|
33
|
+
description: "Use short SI count notation without a unit."
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
value: "short",
|
|
37
|
+
label: "Short number",
|
|
38
|
+
description: "Use short SI count notation such as 1.2K."
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
value: "percent",
|
|
42
|
+
label: "Percent (0-100)",
|
|
43
|
+
description: "Treat the source value as an existing percentage."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
value: "percentunit",
|
|
47
|
+
label: "Percent (0-1)",
|
|
48
|
+
description: "Convert a fractional source value to a percentage."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
value: "bytes",
|
|
52
|
+
label: "Bytes (IEC)",
|
|
53
|
+
description: "Scale byte values in powers of 1024."
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
value: "decbytes",
|
|
57
|
+
label: "Bytes (SI)",
|
|
58
|
+
description: "Scale byte values in powers of 1000."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
value: "Bps",
|
|
62
|
+
label: "Bytes/sec",
|
|
63
|
+
description: "Render a byte rate in powers of 1024."
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
value: "binBps",
|
|
67
|
+
label: "Binary bytes/sec",
|
|
68
|
+
description: "Render a binary byte rate in powers of 1024."
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
value: "ms",
|
|
72
|
+
label: "Milliseconds",
|
|
73
|
+
description: "Treat the source duration as milliseconds."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
value: "s",
|
|
77
|
+
label: "Seconds",
|
|
78
|
+
description: "Treat the source duration as seconds."
|
|
79
|
+
}
|
|
80
|
+
];
|
|
2
81
|
function intl(value, maxFractionDigits = 1) {
|
|
3
|
-
return new Intl.NumberFormat(LOCALE, {
|
|
4
|
-
|
|
5
|
-
);
|
|
82
|
+
return new Intl.NumberFormat(LOCALE, {
|
|
83
|
+
maximumFractionDigits: maxFractionDigits
|
|
84
|
+
}).format(Number.isFinite(value) ? value : 0);
|
|
6
85
|
}
|
|
7
86
|
function trimZero(s) {
|
|
8
87
|
return s.endsWith(".0") ? s.slice(0, -2) : s;
|
|
@@ -10,7 +89,8 @@ function trimZero(s) {
|
|
|
10
89
|
const BYTE_UNITS = ["B", "KB", "MB", "GB", "TB", "PB"];
|
|
11
90
|
function formatBytes(bytes, opts) {
|
|
12
91
|
const suffix = (opts == null ? void 0 : opts.suffix) ?? "";
|
|
13
|
-
if (bytes === void 0 || !Number.isFinite(bytes) || bytes <= 0)
|
|
92
|
+
if (bytes === void 0 || !Number.isFinite(bytes) || bytes <= 0)
|
|
93
|
+
return `0 B${suffix}`;
|
|
14
94
|
const base = (opts == null ? void 0 : opts.base) ?? 1024;
|
|
15
95
|
let size = bytes;
|
|
16
96
|
let unit = 0;
|
|
@@ -68,6 +148,8 @@ function formatUnit(value, unit) {
|
|
|
68
148
|
return `${intl(v)}${unit}`;
|
|
69
149
|
}
|
|
70
150
|
export {
|
|
151
|
+
CLICKY_COLUMN_FORMAT_OPTIONS,
|
|
152
|
+
CLICKY_COLUMN_UNIT_OPTIONS,
|
|
71
153
|
formatBytes,
|
|
72
154
|
formatBytesPerSecond,
|
|
73
155
|
formatDuration,
|
package/dist/lib/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sources":["../../src/lib/format.ts"],"sourcesContent":["// Value formatters and a Grafana-style unit registry, shared by TimeseriesPanel\n// (and any other metric display). Pure — no React — so it is trivially testable.\n//\n// `formatUnit(value, unit)` dispatches on a Grafana unit identifier (e.g.\n// \"bytes\", \"Bps\", \"percent\", \"ms\", \"short\"). Unknown unit strings are treated as\n// a raw suffix appended to the formatted number, preserving callers that pass a\n// literal like \"%\" or \"req\".\n\nconst LOCALE = \"en-US\";\n\nfunction intl(value: number, maxFractionDigits = 1): string {\n return new Intl.NumberFormat(LOCALE, { maximumFractionDigits: maxFractionDigits }).format(\n Number.isFinite(value) ? value : 0,\n );\n}\n\n/** Drops a trailing \".0\" so whole values read \"1 KB\" rather than \"1.0 KB\". */\nfunction trimZero(s: string): string {\n return s.endsWith(\".0\") ? s.slice(0, -2) : s;\n}\n\nexport interface FormatBytesOptions {\n /** 1024 (IEC, the default) or 1000 (SI/decimal). */\n base?: 1000 | 1024;\n /** Appended after the unit label, e.g. \"/s\" for a rate. */\n suffix?: string;\n}\n\nconst BYTE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"] as const;\n\n/**\n * Human-readable byte size. 1024-based by default with B/KB/MB/GB/TB/PB labels,\n * matching the prior diagnostics formatter. Whole numbers and values >= 10 drop\n * the fraction; smaller fractional values keep one decimal.\n */\nexport function formatBytes(bytes?: number, opts?: FormatBytesOptions): string {\n const suffix = opts?.suffix ?? \"\";\n if (bytes === undefined || !Number.isFinite(bytes) || bytes <= 0) return `0 B${suffix}`;\n const base = opts?.base ?? 1024;\n let size = bytes;\n let unit = 0;\n while (size >= base && unit < BYTE_UNITS.length - 1) {\n size /= base;\n unit++;\n }\n const rendered = size >= 10 || unit === 0 ? size.toFixed(0) : trimZero(size.toFixed(1));\n return `${rendered} ${BYTE_UNITS[unit]}${suffix}`;\n}\n\n/** Byte rate, e.g. \"1.5 MB/s\". 1024-based. */\nexport function formatBytesPerSecond(bytes?: number): string {\n return formatBytes(bytes, { suffix: \"/s\" });\n}\n\nconst SHORT_UNITS = [\"\", \"K\", \"M\", \"B\", \"T\"] as const;\n\n/** SI abbreviation: 999 -> \"999\", 1200 -> \"1.2K\", 3_400_000 -> \"3.4M\". */\nexport function formatShort(value?: number): string {\n if (value === undefined || !Number.isFinite(value)) return \"0\";\n const sign = value < 0 ? \"-\" : \"\";\n let n = Math.abs(value);\n if (n < 1000) return `${sign}${intl(n)}`;\n let unit = 0;\n while (n >= 1000 && unit < SHORT_UNITS.length - 1) {\n n /= 1000;\n unit++;\n }\n const rendered = n >= 10 ? n.toFixed(0) : trimZero(n.toFixed(1));\n return `${sign}${rendered}${SHORT_UNITS[unit]}`;\n}\n\n/**\n * Duration rendered from a millisecond (default) or second input. Picks ms / s /\n * min / h by magnitude: 850 -> \"850 ms\", 1500 -> \"1.5 s\", 90_000 -> \"1.5 min\".\n */\nexport function formatDuration(value?: number, opts?: { from?: \"ms\" | \"s\" }): string {\n if (value === undefined || !Number.isFinite(value)) return \"0 ms\";\n const ms = opts?.from === \"s\" ? value * 1000 : value;\n const abs = Math.abs(ms);\n if (abs < 1000) return `${intl(ms, 0)} ms`;\n if (abs < 60_000) return `${intl(ms / 1000)} s`;\n if (abs < 3_600_000) return `${intl(ms / 60_000)} min`;\n return `${intl(ms / 3_600_000)} h`;\n}\n\n// formatters keyed by Grafana unit identifier. Keys not present here fall through\n// to the raw-suffix path in formatUnit.\nconst UNIT_FORMATTERS: Record<string, (v: number) => string> = {\n none: (v) => formatShort(v),\n short: (v) => formatShort(v),\n percent: (v) => `${intl(v)}%`,\n percentunit: (v) => `${intl(v * 100)}%`,\n \"%\": (v) => `${intl(v)}%`,\n bytes: (v) => formatBytes(v, { base: 1024 }),\n decbytes: (v) => formatBytes(v, { base: 1000 }),\n Bps: (v) => formatBytesPerSecond(v),\n binBps: (v) => formatBytesPerSecond(v),\n ms: (v) => formatDuration(v, { from: \"ms\" }),\n s: (v) => formatDuration(v, { from: \"s\" }),\n};\n\n/**\n * Formats a value for display per a Grafana-style unit key. Unknown units are\n * appended as a literal suffix (back-compat for callers passing \"%\", \"req\",\n * etc.); an absent unit yields the plain localized number.\n */\nexport function formatUnit(value: number, unit?: string): string {\n const v = Number.isFinite(value) ? value : 0;\n if (!unit) return intl(v);\n const fmt = UNIT_FORMATTERS[unit];\n if (fmt) return fmt(v);\n return `${intl(v)}${unit}`;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format.js","sources":["../../src/lib/format.ts"],"sourcesContent":["// Value formatters and a Grafana-style unit registry, shared by TimeseriesPanel\n// (and any other metric display). Pure — no React — so it is trivially testable.\n//\n// `formatUnit(value, unit)` dispatches on a Grafana unit identifier (e.g.\n// \"bytes\", \"Bps\", \"percent\", \"ms\", \"short\"). Unknown unit strings are treated as\n// a raw suffix appended to the formatted number, preserving callers that pass a\n// literal like \"%\" or \"req\".\n\nconst LOCALE = \"en-US\";\n\nexport type ClickyColumnOption = {\n value: string;\n label: string;\n description: string;\n};\n\nexport const CLICKY_COLUMN_FORMAT_OPTIONS = [\n {\n value: \"date\",\n label: \"Date/time\",\n description: \"Render a date or timestamp.\",\n },\n {\n value: \"float\",\n label: \"Number\",\n description: \"Render a number with decimal precision.\",\n },\n {\n value: \"duration\",\n label: \"Duration\",\n description: \"Render a Go duration value.\",\n },\n {\n value: \"bytes\",\n label: \"Bytes\",\n description: \"Render a byte count with binary scaling.\",\n },\n {\n value: \"currency\",\n label: \"Currency\",\n description: \"Render a monetary amount.\",\n },\n] as const satisfies readonly ClickyColumnOption[];\n\nexport const CLICKY_COLUMN_UNIT_OPTIONS = [\n {\n value: \"none\",\n label: \"Compact count\",\n description: \"Use short SI count notation without a unit.\",\n },\n {\n value: \"short\",\n label: \"Short number\",\n description: \"Use short SI count notation such as 1.2K.\",\n },\n {\n value: \"percent\",\n label: \"Percent (0-100)\",\n description: \"Treat the source value as an existing percentage.\",\n },\n {\n value: \"percentunit\",\n label: \"Percent (0-1)\",\n description: \"Convert a fractional source value to a percentage.\",\n },\n {\n value: \"bytes\",\n label: \"Bytes (IEC)\",\n description: \"Scale byte values in powers of 1024.\",\n },\n {\n value: \"decbytes\",\n label: \"Bytes (SI)\",\n description: \"Scale byte values in powers of 1000.\",\n },\n {\n value: \"Bps\",\n label: \"Bytes/sec\",\n description: \"Render a byte rate in powers of 1024.\",\n },\n {\n value: \"binBps\",\n label: \"Binary bytes/sec\",\n description: \"Render a binary byte rate in powers of 1024.\",\n },\n {\n value: \"ms\",\n label: \"Milliseconds\",\n description: \"Treat the source duration as milliseconds.\",\n },\n {\n value: \"s\",\n label: \"Seconds\",\n description: \"Treat the source duration as seconds.\",\n },\n] as const satisfies readonly ClickyColumnOption[];\n\nexport type ClickyColumnFormat =\n (typeof CLICKY_COLUMN_FORMAT_OPTIONS)[number][\"value\"];\nexport type ClickyColumnUnit =\n (typeof CLICKY_COLUMN_UNIT_OPTIONS)[number][\"value\"];\n\nfunction intl(value: number, maxFractionDigits = 1): string {\n return new Intl.NumberFormat(LOCALE, {\n maximumFractionDigits: maxFractionDigits,\n }).format(Number.isFinite(value) ? value : 0);\n}\n\n/** Drops a trailing \".0\" so whole values read \"1 KB\" rather than \"1.0 KB\". */\nfunction trimZero(s: string): string {\n return s.endsWith(\".0\") ? s.slice(0, -2) : s;\n}\n\nexport interface FormatBytesOptions {\n /** 1024 (IEC, the default) or 1000 (SI/decimal). */\n base?: 1000 | 1024;\n /** Appended after the unit label, e.g. \"/s\" for a rate. */\n suffix?: string;\n}\n\nconst BYTE_UNITS = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"] as const;\n\n/**\n * Human-readable byte size. 1024-based by default with B/KB/MB/GB/TB/PB labels,\n * matching the prior diagnostics formatter. Whole numbers and values >= 10 drop\n * the fraction; smaller fractional values keep one decimal.\n */\nexport function formatBytes(bytes?: number, opts?: FormatBytesOptions): string {\n const suffix = opts?.suffix ?? \"\";\n if (bytes === undefined || !Number.isFinite(bytes) || bytes <= 0)\n return `0 B${suffix}`;\n const base = opts?.base ?? 1024;\n let size = bytes;\n let unit = 0;\n while (size >= base && unit < BYTE_UNITS.length - 1) {\n size /= base;\n unit++;\n }\n const rendered =\n size >= 10 || unit === 0 ? size.toFixed(0) : trimZero(size.toFixed(1));\n return `${rendered} ${BYTE_UNITS[unit]}${suffix}`;\n}\n\n/** Byte rate, e.g. \"1.5 MB/s\". 1024-based. */\nexport function formatBytesPerSecond(bytes?: number): string {\n return formatBytes(bytes, { suffix: \"/s\" });\n}\n\nconst SHORT_UNITS = [\"\", \"K\", \"M\", \"B\", \"T\"] as const;\n\n/** SI abbreviation: 999 -> \"999\", 1200 -> \"1.2K\", 3_400_000 -> \"3.4M\". */\nexport function formatShort(value?: number): string {\n if (value === undefined || !Number.isFinite(value)) return \"0\";\n const sign = value < 0 ? \"-\" : \"\";\n let n = Math.abs(value);\n if (n < 1000) return `${sign}${intl(n)}`;\n let unit = 0;\n while (n >= 1000 && unit < SHORT_UNITS.length - 1) {\n n /= 1000;\n unit++;\n }\n const rendered = n >= 10 ? n.toFixed(0) : trimZero(n.toFixed(1));\n return `${sign}${rendered}${SHORT_UNITS[unit]}`;\n}\n\n/**\n * Duration rendered from a millisecond (default) or second input. Picks ms / s /\n * min / h by magnitude: 850 -> \"850 ms\", 1500 -> \"1.5 s\", 90_000 -> \"1.5 min\".\n */\nexport function formatDuration(\n value?: number,\n opts?: { from?: \"ms\" | \"s\" },\n): string {\n if (value === undefined || !Number.isFinite(value)) return \"0 ms\";\n const ms = opts?.from === \"s\" ? value * 1000 : value;\n const abs = Math.abs(ms);\n if (abs < 1000) return `${intl(ms, 0)} ms`;\n if (abs < 60_000) return `${intl(ms / 1000)} s`;\n if (abs < 3_600_000) return `${intl(ms / 60_000)} min`;\n return `${intl(ms / 3_600_000)} h`;\n}\n\n// formatters keyed by Grafana unit identifier. Keys not present here fall through\n// to the raw-suffix path in formatUnit.\nconst UNIT_FORMATTERS: Record<string, (v: number) => string> = {\n none: (v) => formatShort(v),\n short: (v) => formatShort(v),\n percent: (v) => `${intl(v)}%`,\n percentunit: (v) => `${intl(v * 100)}%`,\n \"%\": (v) => `${intl(v)}%`,\n bytes: (v) => formatBytes(v, { base: 1024 }),\n decbytes: (v) => formatBytes(v, { base: 1000 }),\n Bps: (v) => formatBytesPerSecond(v),\n binBps: (v) => formatBytesPerSecond(v),\n ms: (v) => formatDuration(v, { from: \"ms\" }),\n s: (v) => formatDuration(v, { from: \"s\" }),\n};\n\n/**\n * Formats a value for display per a Grafana-style unit key. Unknown units are\n * appended as a literal suffix (back-compat for callers passing \"%\", \"req\",\n * etc.); an absent unit yields the plain localized number.\n */\nexport function formatUnit(value: number, unit?: string): string {\n const v = Number.isFinite(value) ? value : 0;\n if (!unit) return intl(v);\n const fmt = UNIT_FORMATTERS[unit];\n if (fmt) return fmt(v);\n return `${intl(v)}${unit}`;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const PATH_SEPARATOR = "/";
|
|
4
|
+
function splitPath(value, delimiters) {
|
|
5
|
+
if (!value) return [];
|
|
6
|
+
if (!delimiters) return [value];
|
|
7
|
+
const segments = [];
|
|
8
|
+
let current = "";
|
|
9
|
+
for (const character of value) {
|
|
10
|
+
if (delimiters.includes(character)) {
|
|
11
|
+
if (current) segments.push(current);
|
|
12
|
+
current = "";
|
|
13
|
+
} else {
|
|
14
|
+
current += character;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (current) segments.push(current);
|
|
18
|
+
return segments;
|
|
19
|
+
}
|
|
20
|
+
function buildPathTree(items, getPath, options = {}) {
|
|
21
|
+
const roots = [];
|
|
22
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
23
|
+
for (const item of items) {
|
|
24
|
+
const path = getPath(item);
|
|
25
|
+
if (path.length === 0) continue;
|
|
26
|
+
let siblings = roots;
|
|
27
|
+
let key = "";
|
|
28
|
+
let node;
|
|
29
|
+
path.forEach((segment, index) => {
|
|
30
|
+
key = key ? `${key}${PATH_SEPARATOR}${segment}` : segment;
|
|
31
|
+
let existing = byKey.get(key);
|
|
32
|
+
if (!existing) {
|
|
33
|
+
existing = {
|
|
34
|
+
key,
|
|
35
|
+
label: segment,
|
|
36
|
+
path: path.slice(0, index + 1),
|
|
37
|
+
items: [],
|
|
38
|
+
children: []
|
|
39
|
+
};
|
|
40
|
+
byKey.set(key, existing);
|
|
41
|
+
siblings.push(existing);
|
|
42
|
+
}
|
|
43
|
+
siblings = existing.children;
|
|
44
|
+
node = existing;
|
|
45
|
+
});
|
|
46
|
+
node == null ? void 0 : node.items.push(item);
|
|
47
|
+
}
|
|
48
|
+
if (options.compare) sortTree(roots, options.compare);
|
|
49
|
+
return roots;
|
|
50
|
+
}
|
|
51
|
+
function sortTree(nodes, compare) {
|
|
52
|
+
nodes.sort(compare);
|
|
53
|
+
for (const node of nodes) sortTree(node.children, compare);
|
|
54
|
+
}
|
|
55
|
+
function isPathTreeFolder(node) {
|
|
56
|
+
return node.items.length === 0;
|
|
57
|
+
}
|
|
58
|
+
function foldersFirst(left, right) {
|
|
59
|
+
const leftIsParent = left.children.length > 0;
|
|
60
|
+
const rightIsParent = right.children.length > 0;
|
|
61
|
+
if (leftIsParent !== rightIsParent) return leftIsParent ? -1 : 1;
|
|
62
|
+
return left.label.localeCompare(right.label);
|
|
63
|
+
}
|
|
64
|
+
exports.PATH_SEPARATOR = PATH_SEPARATOR;
|
|
65
|
+
exports.buildPathTree = buildPathTree;
|
|
66
|
+
exports.foldersFirst = foldersFirst;
|
|
67
|
+
exports.isPathTreeFolder = isPathTreeFolder;
|
|
68
|
+
exports.splitPath = splitPath;
|
|
69
|
+
//# sourceMappingURL=path-tree.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-tree.cjs","sources":["../../src/lib/path-tree.ts"],"sourcesContent":["// Turns a flat list of items that each carry a path into a tree, without\n// knowing anything about what the items are. Two independent surfaces need\n// exactly this shape — a session's changed-file list and a backend's\n// hierarchical nav surfaces — so the walker lives here rather than a third\n// time inside a component.\n\n/** The wire separator for a joined path. Matches clicky's entity.PathSeparator. */\nexport const PATH_SEPARATOR = \"/\";\n\nexport interface PathTreeNode<T> {\n /** The joined path — stable across rebuilds, so it works as a React/Tree key. */\n key: string;\n /** The node's own last segment. */\n label: string;\n /** Every segment from the root down to and including this node. */\n path: string[];\n /**\n * The items whose *full* path lands on this node. Empty means a pure folder\n * — a node that exists only because something below it does. More than one\n * means several items share a path (e.g. a file that was both read and\n * written), which is why this is a list rather than a single value.\n */\n items: T[];\n children: PathTreeNode<T>[];\n}\n\nexport interface BuildPathTreeOptions<T> {\n /**\n * Orders siblings at every level. Defaults to the order items were first\n * seen, which preserves a already-sorted backend list as-is.\n */\n compare?: (left: PathTreeNode<T>, right: PathTreeNode<T>) => number;\n}\n\n/**\n * Splits `value` into path segments on any character in `delimiters`, dropping\n * empty segments so leading, trailing and repeated separators are harmless.\n *\n * Characters outside `delimiters` are never separators: with `delimiters=\".\"`,\n * `\"remote-debugger.sql-xevent\"` yields two segments, not four — a hyphen is an\n * ordinary name character.\n */\nexport function splitPath(value: string, delimiters: string): string[] {\n if (!value) return [];\n if (!delimiters) return [value];\n const segments: string[] = [];\n let current = \"\";\n for (const character of value) {\n if (delimiters.includes(character)) {\n if (current) segments.push(current);\n current = \"\";\n } else {\n current += character;\n }\n }\n if (current) segments.push(current);\n return segments;\n}\n\n/**\n * Builds a forest from items keyed by path.\n *\n * A node is created for every path prefix, and an item's full path *binds* to\n * whichever node it lands on — creating it if needed, reusing it if a\n * descendant already forced it into existence. That is what lets a node be both\n * a folder and a leaf: `[\"jms\"]` and `[\"jms\", \"incoming\"]` produce one `jms`\n * node that is simultaneously selectable and expandable.\n *\n * Items whose path is empty are skipped — they have no position in the tree.\n */\nexport function buildPathTree<T>(\n items: readonly T[],\n getPath: (item: T) => readonly string[],\n options: BuildPathTreeOptions<T> = {},\n): PathTreeNode<T>[] {\n const roots: PathTreeNode<T>[] = [];\n const byKey = new Map<string, PathTreeNode<T>>();\n\n for (const item of items) {\n const path = getPath(item);\n if (path.length === 0) continue;\n\n let siblings = roots;\n let key = \"\";\n let node: PathTreeNode<T> | undefined;\n path.forEach((segment, index) => {\n key = key ? `${key}${PATH_SEPARATOR}${segment}` : segment;\n let existing = byKey.get(key);\n if (!existing) {\n existing = {\n key,\n label: segment,\n path: path.slice(0, index + 1),\n items: [],\n children: [],\n };\n byKey.set(key, existing);\n siblings.push(existing);\n }\n siblings = existing.children;\n node = existing;\n });\n node?.items.push(item);\n }\n\n if (options.compare) sortTree(roots, options.compare);\n return roots;\n}\n\nfunction sortTree<T>(\n nodes: PathTreeNode<T>[],\n compare: (left: PathTreeNode<T>, right: PathTreeNode<T>) => number,\n): void {\n nodes.sort(compare);\n for (const node of nodes) sortTree(node.children, compare);\n}\n\n/** True when the node exists only to hold descendants — nothing binds to it. */\nexport function isPathTreeFolder<T>(node: PathTreeNode<T>): boolean {\n return node.items.length === 0;\n}\n\n/**\n * A `compare` that puts nodes with children before plain leaves, then orders\n * each run alphabetically — the conventional file-explorer ordering.\n */\nexport function foldersFirst<T>(\n left: PathTreeNode<T>,\n right: PathTreeNode<T>,\n): number {\n const leftIsParent = left.children.length > 0;\n const rightIsParent = right.children.length > 0;\n if (leftIsParent !== rightIsParent) return leftIsParent ? -1 : 1;\n return left.label.localeCompare(right.label);\n}\n"],"names":[],"mappings":";;AAOO,MAAM,iBAAiB;AAmCvB,SAAS,UAAU,OAAe,YAA8B;AACrE,MAAI,CAAC,MAAO,QAAO,CAAA;AACnB,MAAI,CAAC,WAAY,QAAO,CAAC,KAAK;AAC9B,QAAM,WAAqB,CAAA;AAC3B,MAAI,UAAU;AACd,aAAW,aAAa,OAAO;AAC7B,QAAI,WAAW,SAAS,SAAS,GAAG;AAClC,UAAI,QAAS,UAAS,KAAK,OAAO;AAClC,gBAAU;AAAA,IACZ,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AACA,MAAI,QAAS,UAAS,KAAK,OAAO;AAClC,SAAO;AACT;AAaO,SAAS,cACd,OACA,SACA,UAAmC,CAAA,GAChB;AACnB,QAAM,QAA2B,CAAA;AACjC,QAAM,4BAAY,IAAA;AAElB,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,QAAQ,IAAI;AACzB,QAAI,KAAK,WAAW,EAAG;AAEvB,QAAI,WAAW;AACf,QAAI,MAAM;AACV,QAAI;AACJ,SAAK,QAAQ,CAAC,SAAS,UAAU;AAC/B,YAAM,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,OAAO,KAAK;AAClD,UAAI,WAAW,MAAM,IAAI,GAAG;AAC5B,UAAI,CAAC,UAAU;AACb,mBAAW;AAAA,UACT;AAAA,UACA,OAAO;AAAA,UACP,MAAM,KAAK,MAAM,GAAG,QAAQ,CAAC;AAAA,UAC7B,OAAO,CAAA;AAAA,UACP,UAAU,CAAA;AAAA,QAAC;AAEb,cAAM,IAAI,KAAK,QAAQ;AACvB,iBAAS,KAAK,QAAQ;AAAA,MACxB;AACA,iBAAW,SAAS;AACpB,aAAO;AAAA,IACT,CAAC;AACD,iCAAM,MAAM,KAAK;AAAA,EACnB;AAEA,MAAI,QAAQ,QAAS,UAAS,OAAO,QAAQ,OAAO;AACpD,SAAO;AACT;AAEA,SAAS,SACP,OACA,SACM;AACN,QAAM,KAAK,OAAO;AAClB,aAAW,QAAQ,MAAO,UAAS,KAAK,UAAU,OAAO;AAC3D;AAGO,SAAS,iBAAoB,MAAgC;AAClE,SAAO,KAAK,MAAM,WAAW;AAC/B;AAMO,SAAS,aACd,MACA,OACQ;AACR,QAAM,eAAe,KAAK,SAAS,SAAS;AAC5C,QAAM,gBAAgB,MAAM,SAAS,SAAS;AAC9C,MAAI,iBAAiB,cAAe,QAAO,eAAe,KAAK;AAC/D,SAAO,KAAK,MAAM,cAAc,MAAM,KAAK;AAC7C;;;;;;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** The wire separator for a joined path. Matches clicky's entity.PathSeparator. */
|
|
2
|
+
export declare const PATH_SEPARATOR = "/";
|
|
3
|
+
export interface PathTreeNode<T> {
|
|
4
|
+
/** The joined path — stable across rebuilds, so it works as a React/Tree key. */
|
|
5
|
+
key: string;
|
|
6
|
+
/** The node's own last segment. */
|
|
7
|
+
label: string;
|
|
8
|
+
/** Every segment from the root down to and including this node. */
|
|
9
|
+
path: string[];
|
|
10
|
+
/**
|
|
11
|
+
* The items whose *full* path lands on this node. Empty means a pure folder
|
|
12
|
+
* — a node that exists only because something below it does. More than one
|
|
13
|
+
* means several items share a path (e.g. a file that was both read and
|
|
14
|
+
* written), which is why this is a list rather than a single value.
|
|
15
|
+
*/
|
|
16
|
+
items: T[];
|
|
17
|
+
children: PathTreeNode<T>[];
|
|
18
|
+
}
|
|
19
|
+
export interface BuildPathTreeOptions<T> {
|
|
20
|
+
/**
|
|
21
|
+
* Orders siblings at every level. Defaults to the order items were first
|
|
22
|
+
* seen, which preserves a already-sorted backend list as-is.
|
|
23
|
+
*/
|
|
24
|
+
compare?: (left: PathTreeNode<T>, right: PathTreeNode<T>) => number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Splits `value` into path segments on any character in `delimiters`, dropping
|
|
28
|
+
* empty segments so leading, trailing and repeated separators are harmless.
|
|
29
|
+
*
|
|
30
|
+
* Characters outside `delimiters` are never separators: with `delimiters="."`,
|
|
31
|
+
* `"remote-debugger.sql-xevent"` yields two segments, not four — a hyphen is an
|
|
32
|
+
* ordinary name character.
|
|
33
|
+
*/
|
|
34
|
+
export declare function splitPath(value: string, delimiters: string): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Builds a forest from items keyed by path.
|
|
37
|
+
*
|
|
38
|
+
* A node is created for every path prefix, and an item's full path *binds* to
|
|
39
|
+
* whichever node it lands on — creating it if needed, reusing it if a
|
|
40
|
+
* descendant already forced it into existence. That is what lets a node be both
|
|
41
|
+
* a folder and a leaf: `["jms"]` and `["jms", "incoming"]` produce one `jms`
|
|
42
|
+
* node that is simultaneously selectable and expandable.
|
|
43
|
+
*
|
|
44
|
+
* Items whose path is empty are skipped — they have no position in the tree.
|
|
45
|
+
*/
|
|
46
|
+
export declare function buildPathTree<T>(items: readonly T[], getPath: (item: T) => readonly string[], options?: BuildPathTreeOptions<T>): PathTreeNode<T>[];
|
|
47
|
+
/** True when the node exists only to hold descendants — nothing binds to it. */
|
|
48
|
+
export declare function isPathTreeFolder<T>(node: PathTreeNode<T>): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* A `compare` that puts nodes with children before plain leaves, then orders
|
|
51
|
+
* each run alphabetically — the conventional file-explorer ordering.
|
|
52
|
+
*/
|
|
53
|
+
export declare function foldersFirst<T>(left: PathTreeNode<T>, right: PathTreeNode<T>): number;
|
|
54
|
+
//# sourceMappingURL=path-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-tree.d.ts","sourceRoot":"","sources":["../../src/lib/path-tree.ts"],"names":[],"mappings":"AAMA,mFAAmF;AACnF,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,iFAAiF;IACjF,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf;;;;;OAKG;IACH,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;CACrE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAerE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,MAAM,EAAE,EACvC,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,YAAY,CAAC,CAAC,CAAC,EAAE,CAiCnB;AAUD,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAElE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EACrB,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,GACrB,MAAM,CAKR"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
const PATH_SEPARATOR = "/";
|
|
2
|
+
function splitPath(value, delimiters) {
|
|
3
|
+
if (!value) return [];
|
|
4
|
+
if (!delimiters) return [value];
|
|
5
|
+
const segments = [];
|
|
6
|
+
let current = "";
|
|
7
|
+
for (const character of value) {
|
|
8
|
+
if (delimiters.includes(character)) {
|
|
9
|
+
if (current) segments.push(current);
|
|
10
|
+
current = "";
|
|
11
|
+
} else {
|
|
12
|
+
current += character;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
if (current) segments.push(current);
|
|
16
|
+
return segments;
|
|
17
|
+
}
|
|
18
|
+
function buildPathTree(items, getPath, options = {}) {
|
|
19
|
+
const roots = [];
|
|
20
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
21
|
+
for (const item of items) {
|
|
22
|
+
const path = getPath(item);
|
|
23
|
+
if (path.length === 0) continue;
|
|
24
|
+
let siblings = roots;
|
|
25
|
+
let key = "";
|
|
26
|
+
let node;
|
|
27
|
+
path.forEach((segment, index) => {
|
|
28
|
+
key = key ? `${key}${PATH_SEPARATOR}${segment}` : segment;
|
|
29
|
+
let existing = byKey.get(key);
|
|
30
|
+
if (!existing) {
|
|
31
|
+
existing = {
|
|
32
|
+
key,
|
|
33
|
+
label: segment,
|
|
34
|
+
path: path.slice(0, index + 1),
|
|
35
|
+
items: [],
|
|
36
|
+
children: []
|
|
37
|
+
};
|
|
38
|
+
byKey.set(key, existing);
|
|
39
|
+
siblings.push(existing);
|
|
40
|
+
}
|
|
41
|
+
siblings = existing.children;
|
|
42
|
+
node = existing;
|
|
43
|
+
});
|
|
44
|
+
node == null ? void 0 : node.items.push(item);
|
|
45
|
+
}
|
|
46
|
+
if (options.compare) sortTree(roots, options.compare);
|
|
47
|
+
return roots;
|
|
48
|
+
}
|
|
49
|
+
function sortTree(nodes, compare) {
|
|
50
|
+
nodes.sort(compare);
|
|
51
|
+
for (const node of nodes) sortTree(node.children, compare);
|
|
52
|
+
}
|
|
53
|
+
function isPathTreeFolder(node) {
|
|
54
|
+
return node.items.length === 0;
|
|
55
|
+
}
|
|
56
|
+
function foldersFirst(left, right) {
|
|
57
|
+
const leftIsParent = left.children.length > 0;
|
|
58
|
+
const rightIsParent = right.children.length > 0;
|
|
59
|
+
if (leftIsParent !== rightIsParent) return leftIsParent ? -1 : 1;
|
|
60
|
+
return left.label.localeCompare(right.label);
|
|
61
|
+
}
|
|
62
|
+
export {
|
|
63
|
+
PATH_SEPARATOR,
|
|
64
|
+
buildPathTree,
|
|
65
|
+
foldersFirst,
|
|
66
|
+
isPathTreeFolder,
|
|
67
|
+
splitPath
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=path-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-tree.js","sources":["../../src/lib/path-tree.ts"],"sourcesContent":["// Turns a flat list of items that each carry a path into a tree, without\n// knowing anything about what the items are. Two independent surfaces need\n// exactly this shape — a session's changed-file list and a backend's\n// hierarchical nav surfaces — so the walker lives here rather than a third\n// time inside a component.\n\n/** The wire separator for a joined path. Matches clicky's entity.PathSeparator. */\nexport const PATH_SEPARATOR = \"/\";\n\nexport interface PathTreeNode<T> {\n /** The joined path — stable across rebuilds, so it works as a React/Tree key. */\n key: string;\n /** The node's own last segment. */\n label: string;\n /** Every segment from the root down to and including this node. */\n path: string[];\n /**\n * The items whose *full* path lands on this node. Empty means a pure folder\n * — a node that exists only because something below it does. More than one\n * means several items share a path (e.g. a file that was both read and\n * written), which is why this is a list rather than a single value.\n */\n items: T[];\n children: PathTreeNode<T>[];\n}\n\nexport interface BuildPathTreeOptions<T> {\n /**\n * Orders siblings at every level. Defaults to the order items were first\n * seen, which preserves a already-sorted backend list as-is.\n */\n compare?: (left: PathTreeNode<T>, right: PathTreeNode<T>) => number;\n}\n\n/**\n * Splits `value` into path segments on any character in `delimiters`, dropping\n * empty segments so leading, trailing and repeated separators are harmless.\n *\n * Characters outside `delimiters` are never separators: with `delimiters=\".\"`,\n * `\"remote-debugger.sql-xevent\"` yields two segments, not four — a hyphen is an\n * ordinary name character.\n */\nexport function splitPath(value: string, delimiters: string): string[] {\n if (!value) return [];\n if (!delimiters) return [value];\n const segments: string[] = [];\n let current = \"\";\n for (const character of value) {\n if (delimiters.includes(character)) {\n if (current) segments.push(current);\n current = \"\";\n } else {\n current += character;\n }\n }\n if (current) segments.push(current);\n return segments;\n}\n\n/**\n * Builds a forest from items keyed by path.\n *\n * A node is created for every path prefix, and an item's full path *binds* to\n * whichever node it lands on — creating it if needed, reusing it if a\n * descendant already forced it into existence. That is what lets a node be both\n * a folder and a leaf: `[\"jms\"]` and `[\"jms\", \"incoming\"]` produce one `jms`\n * node that is simultaneously selectable and expandable.\n *\n * Items whose path is empty are skipped — they have no position in the tree.\n */\nexport function buildPathTree<T>(\n items: readonly T[],\n getPath: (item: T) => readonly string[],\n options: BuildPathTreeOptions<T> = {},\n): PathTreeNode<T>[] {\n const roots: PathTreeNode<T>[] = [];\n const byKey = new Map<string, PathTreeNode<T>>();\n\n for (const item of items) {\n const path = getPath(item);\n if (path.length === 0) continue;\n\n let siblings = roots;\n let key = \"\";\n let node: PathTreeNode<T> | undefined;\n path.forEach((segment, index) => {\n key = key ? `${key}${PATH_SEPARATOR}${segment}` : segment;\n let existing = byKey.get(key);\n if (!existing) {\n existing = {\n key,\n label: segment,\n path: path.slice(0, index + 1),\n items: [],\n children: [],\n };\n byKey.set(key, existing);\n siblings.push(existing);\n }\n siblings = existing.children;\n node = existing;\n });\n node?.items.push(item);\n }\n\n if (options.compare) sortTree(roots, options.compare);\n return roots;\n}\n\nfunction sortTree<T>(\n nodes: PathTreeNode<T>[],\n compare: (left: PathTreeNode<T>, right: PathTreeNode<T>) => number,\n): void {\n nodes.sort(compare);\n for (const node of nodes) sortTree(node.children, compare);\n}\n\n/** True when the node exists only to hold descendants — nothing binds to it. */\nexport function isPathTreeFolder<T>(node: PathTreeNode<T>): boolean {\n return node.items.length === 0;\n}\n\n/**\n * A `compare` that puts nodes with children before plain leaves, then orders\n * each run alphabetically — the conventional file-explorer ordering.\n */\nexport function foldersFirst<T>(\n left: PathTreeNode<T>,\n right: PathTreeNode<T>,\n): number {\n const leftIsParent = left.children.length > 0;\n const rightIsParent = right.children.length > 0;\n if (leftIsParent !== rightIsParent) return leftIsParent ? -1 : 1;\n return left.label.localeCompare(right.label);\n}\n"],"names":[],"mappings":"AAOO,MAAM,iBAAiB;AAmCvB,SAAS,UAAU,OAAe,YAA8B;AACrE,MAAI,CAAC,MAAO,QAAO,CAAA;AACnB,MAAI,CAAC,WAAY,QAAO,CAAC,KAAK;AAC9B,QAAM,WAAqB,CAAA;AAC3B,MAAI,UAAU;AACd,aAAW,aAAa,OAAO;AAC7B,QAAI,WAAW,SAAS,SAAS,GAAG;AAClC,UAAI,QAAS,UAAS,KAAK,OAAO;AAClC,gBAAU;AAAA,IACZ,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AACA,MAAI,QAAS,UAAS,KAAK,OAAO;AAClC,SAAO;AACT;AAaO,SAAS,cACd,OACA,SACA,UAAmC,CAAA,GAChB;AACnB,QAAM,QAA2B,CAAA;AACjC,QAAM,4BAAY,IAAA;AAElB,aAAW,QAAQ,OAAO;AACxB,UAAM,OAAO,QAAQ,IAAI;AACzB,QAAI,KAAK,WAAW,EAAG;AAEvB,QAAI,WAAW;AACf,QAAI,MAAM;AACV,QAAI;AACJ,SAAK,QAAQ,CAAC,SAAS,UAAU;AAC/B,YAAM,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,OAAO,KAAK;AAClD,UAAI,WAAW,MAAM,IAAI,GAAG;AAC5B,UAAI,CAAC,UAAU;AACb,mBAAW;AAAA,UACT;AAAA,UACA,OAAO;AAAA,UACP,MAAM,KAAK,MAAM,GAAG,QAAQ,CAAC;AAAA,UAC7B,OAAO,CAAA;AAAA,UACP,UAAU,CAAA;AAAA,QAAC;AAEb,cAAM,IAAI,KAAK,QAAQ;AACvB,iBAAS,KAAK,QAAQ;AAAA,MACxB;AACA,iBAAW,SAAS;AACpB,aAAO;AAAA,IACT,CAAC;AACD,iCAAM,MAAM,KAAK;AAAA,EACnB;AAEA,MAAI,QAAQ,QAAS,UAAS,OAAO,QAAQ,OAAO;AACpD,SAAO;AACT;AAEA,SAAS,SACP,OACA,SACM;AACN,QAAM,KAAK,OAAO;AAClB,aAAW,QAAQ,MAAO,UAAS,KAAK,UAAU,OAAO;AAC3D;AAGO,SAAS,iBAAoB,MAAgC;AAClE,SAAO,KAAK,MAAM,WAAW;AAC/B;AAMO,SAAS,aACd,MACA,OACQ;AACR,QAAM,eAAe,KAAK,SAAS,SAAS;AAC5C,QAAM,gBAAgB,MAAM,SAAS,SAAS;AAC9C,MAAI,iBAAiB,cAAe,QAAO,eAAe,KAAK;AAC/D,SAAO,KAAK,MAAM,cAAc,MAAM,KAAK;AAC7C;"}
|