@flanksource/clicky-ui 0.3.17 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai.cjs +12 -6
- package/dist/ai.cjs.map +1 -1
- package/dist/ai.js +10 -4
- package/dist/ai.js.map +1 -1
- package/dist/chat.cjs +36 -0
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +37 -1
- package/dist/chat.js.map +1 -1
- package/dist/components/Combobox.cjs +122 -153
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +124 -155
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/ComboboxControl.cjs +145 -0
- package/dist/components/ComboboxControl.cjs.map +1 -0
- package/dist/components/ComboboxControl.d.ts +37 -0
- package/dist/components/ComboboxControl.d.ts.map +1 -0
- package/dist/components/ComboboxControl.js +145 -0
- package/dist/components/ComboboxControl.js.map +1 -0
- package/dist/components/ComboboxMenu.cjs +35 -14
- package/dist/components/ComboboxMenu.cjs.map +1 -1
- package/dist/components/ComboboxMenu.d.ts.map +1 -1
- package/dist/components/ComboboxMenu.js +35 -14
- package/dist/components/ComboboxMenu.js.map +1 -1
- package/dist/components/ComboboxTags.cjs +40 -0
- package/dist/components/ComboboxTags.cjs.map +1 -0
- package/dist/components/ComboboxTags.d.ts +8 -0
- package/dist/components/ComboboxTags.d.ts.map +1 -0
- package/dist/components/ComboboxTags.js +40 -0
- package/dist/components/ComboboxTags.js.map +1 -0
- package/dist/components/EndpointSelector.model.cjs +96 -0
- package/dist/components/EndpointSelector.model.cjs.map +1 -0
- package/dist/components/EndpointSelector.model.d.ts +2 -0
- package/dist/components/EndpointSelector.model.d.ts.map +1 -1
- package/dist/components/EndpointSelector.model.js +96 -0
- package/dist/components/EndpointSelector.model.js.map +1 -0
- package/dist/components/ErrorWrapper.cjs +168 -0
- package/dist/components/ErrorWrapper.cjs.map +1 -0
- package/dist/components/ErrorWrapper.d.ts +19 -0
- package/dist/components/ErrorWrapper.d.ts.map +1 -0
- package/dist/components/ErrorWrapper.js +168 -0
- package/dist/components/ErrorWrapper.js.map +1 -0
- package/dist/components/FilterBar.cjs +116 -4
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts +37 -2
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +116 -4
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JSONPathField.cjs +112 -0
- package/dist/components/JSONPathField.cjs.map +1 -0
- package/dist/components/JSONPathField.d.ts +36 -0
- package/dist/components/JSONPathField.d.ts.map +1 -0
- package/dist/components/JSONPathField.js +112 -0
- package/dist/components/JSONPathField.js.map +1 -0
- package/dist/components/JSONPathPlayground.cjs +225 -0
- package/dist/components/JSONPathPlayground.cjs.map +1 -0
- package/dist/components/JSONPathPlayground.d.ts +59 -0
- package/dist/components/JSONPathPlayground.d.ts.map +1 -0
- package/dist/components/JSONPathPlayground.js +225 -0
- package/dist/components/JSONPathPlayground.js.map +1 -0
- package/dist/components/JsonSchemaForm.cjs +8 -4
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +8 -4
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/OnePasswordSelector.cjs +178 -0
- package/dist/components/OnePasswordSelector.cjs.map +1 -0
- package/dist/components/OnePasswordSelector.d.ts +8 -0
- package/dist/components/OnePasswordSelector.d.ts.map +1 -0
- package/dist/components/OnePasswordSelector.js +178 -0
- package/dist/components/OnePasswordSelector.js.map +1 -0
- package/dist/components/OnePasswordSelector.model.cjs +31 -0
- package/dist/components/OnePasswordSelector.model.cjs.map +1 -0
- package/dist/components/OnePasswordSelector.model.d.ts +27 -0
- package/dist/components/OnePasswordSelector.model.d.ts.map +1 -0
- package/dist/components/OnePasswordSelector.model.js +31 -0
- package/dist/components/OnePasswordSelector.model.js.map +1 -0
- package/dist/components/SecretFormField.cjs +142 -0
- package/dist/components/SecretFormField.cjs.map +1 -0
- package/dist/components/SecretFormField.d.ts +9 -0
- package/dist/components/SecretFormField.d.ts.map +1 -0
- package/dist/components/SecretFormField.js +142 -0
- package/dist/components/SecretFormField.js.map +1 -0
- package/dist/components/SecretKeySelector.cjs +20 -14
- package/dist/components/SecretKeySelector.cjs.map +1 -1
- package/dist/components/SecretKeySelector.d.ts +4 -1
- package/dist/components/SecretKeySelector.d.ts.map +1 -1
- package/dist/components/SecretKeySelector.js +20 -14
- package/dist/components/SecretKeySelector.js.map +1 -1
- package/dist/components/TreePickerField.cjs +71 -27
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts +31 -2
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +72 -28
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/TriStateToggle.cjs +53 -0
- package/dist/components/TriStateToggle.cjs.map +1 -0
- package/dist/components/TriStateToggle.d.ts +27 -0
- package/dist/components/TriStateToggle.d.ts.map +1 -0
- package/dist/components/TriStateToggle.js +53 -0
- package/dist/components/TriStateToggle.js.map +1 -0
- package/dist/components/combobox-types.d.ts +25 -1
- package/dist/components/combobox-types.d.ts.map +1 -1
- package/dist/components/combobox-utils.cjs +26 -0
- package/dist/components/combobox-utils.cjs.map +1 -1
- package/dist/components/combobox-utils.d.ts +10 -0
- package/dist/components/combobox-utils.d.ts.map +1 -1
- package/dist/components/combobox-utils.js +26 -0
- package/dist/components/combobox-utils.js.map +1 -1
- package/dist/components/filter-bar-utils.cjs +12 -0
- package/dist/components/filter-bar-utils.cjs.map +1 -1
- package/dist/components/filter-bar-utils.d.ts.map +1 -1
- package/dist/components/filter-bar-utils.js +12 -0
- package/dist/components/filter-bar-utils.js.map +1 -1
- package/dist/components/jotai-bindings-core.cjs.map +1 -1
- package/dist/components/jotai-bindings-core.d.ts +4 -1
- package/dist/components/jotai-bindings-core.d.ts.map +1 -1
- package/dist/components/jotai-bindings-core.js.map +1 -1
- package/dist/components/json-schema-form-accordion-array.cjs +290 -0
- package/dist/components/json-schema-form-accordion-array.cjs.map +1 -0
- package/dist/components/json-schema-form-accordion-array.d.ts +7 -0
- package/dist/components/json-schema-form-accordion-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-accordion-array.js +290 -0
- package/dist/components/json-schema-form-accordion-array.js.map +1 -0
- package/dist/components/json-schema-form-array.cjs +99 -110
- package/dist/components/json-schema-form-array.cjs.map +1 -1
- package/dist/components/json-schema-form-array.d.ts +1 -1
- package/dist/components/json-schema-form-array.d.ts.map +1 -1
- package/dist/components/json-schema-form-array.js +98 -109
- package/dist/components/json-schema-form-array.js.map +1 -1
- package/dist/components/json-schema-form-error-display.cjs +4 -2
- package/dist/components/json-schema-form-error-display.cjs.map +1 -1
- package/dist/components/json-schema-form-error-display.d.ts +4 -2
- package/dist/components/json-schema-form-error-display.d.ts.map +1 -1
- package/dist/components/json-schema-form-error-display.js +4 -2
- package/dist/components/json-schema-form-error-display.js.map +1 -1
- package/dist/components/json-schema-form-extensions.cjs +10 -0
- package/dist/components/json-schema-form-extensions.cjs.map +1 -0
- package/dist/components/json-schema-form-extensions.d.ts +8 -0
- package/dist/components/json-schema-form-extensions.d.ts.map +1 -0
- package/dist/components/json-schema-form-extensions.js +10 -0
- package/dist/components/json-schema-form-extensions.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +25 -101
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +1 -32
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +28 -104
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-item-summary.cjs +131 -0
- package/dist/components/json-schema-form-item-summary.cjs.map +1 -0
- package/dist/components/json-schema-form-item-summary.d.ts +13 -0
- package/dist/components/json-schema-form-item-summary.d.ts.map +1 -0
- package/dist/components/json-schema-form-item-summary.js +131 -0
- package/dist/components/json-schema-form-item-summary.js.map +1 -0
- package/dist/components/json-schema-form-layout.cjs +156 -0
- package/dist/components/json-schema-form-layout.cjs.map +1 -0
- package/dist/components/json-schema-form-layout.d.ts +43 -0
- package/dist/components/json-schema-form-layout.d.ts.map +1 -0
- package/dist/components/json-schema-form-layout.js +156 -0
- package/dist/components/json-schema-form-layout.js.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.cjs +149 -0
- package/dist/components/json-schema-form-lookup-tree.cjs.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.d.ts +22 -0
- package/dist/components/json-schema-form-lookup-tree.d.ts.map +1 -0
- package/dist/components/json-schema-form-lookup-tree.js +149 -0
- package/dist/components/json-schema-form-lookup-tree.js.map +1 -0
- package/dist/components/json-schema-form-object.cjs +11 -4
- package/dist/components/json-schema-form-object.cjs.map +1 -1
- package/dist/components/json-schema-form-object.d.ts.map +1 -1
- package/dist/components/json-schema-form-object.js +11 -4
- package/dist/components/json-schema-form-object.js.map +1 -1
- package/dist/components/json-schema-form-render.cjs +53 -29
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +53 -29
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +62 -13
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts +1 -0
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +62 -13
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-table-array.cjs +123 -0
- package/dist/components/json-schema-form-table-array.cjs.map +1 -0
- package/dist/components/json-schema-form-table-array.d.ts +7 -0
- package/dist/components/json-schema-form-table-array.d.ts.map +1 -0
- package/dist/components/json-schema-form-table-array.js +123 -0
- package/dist/components/json-schema-form-table-array.js.map +1 -0
- package/dist/components/json-schema-form-tone.cjs +34 -0
- package/dist/components/json-schema-form-tone.cjs.map +1 -0
- package/dist/components/json-schema-form-tone.d.ts +8 -0
- package/dist/components/json-schema-form-tone.d.ts.map +1 -0
- package/dist/components/json-schema-form-tone.js +34 -0
- package/dist/components/json-schema-form-tone.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +88 -10
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +47 -4
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +19 -4
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +47 -4
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/jsonPathTree.cjs +189 -0
- package/dist/components/jsonPathTree.cjs.map +1 -0
- package/dist/components/jsonPathTree.d.ts +92 -0
- package/dist/components/jsonPathTree.d.ts.map +1 -0
- package/dist/components/jsonPathTree.js +189 -0
- package/dist/components/jsonPathTree.js.map +1 -0
- package/dist/components/secret-form-extension.cjs +30 -0
- package/dist/components/secret-form-extension.cjs.map +1 -0
- package/dist/components/secret-form-extension.d.ts +23 -0
- package/dist/components/secret-form-extension.d.ts.map +1 -0
- package/dist/components/secret-form-extension.js +30 -0
- package/dist/components/secret-form-extension.js.map +1 -0
- package/dist/components/tri-state.cjs +8 -0
- package/dist/components/tri-state.cjs.map +1 -0
- package/dist/components/tri-state.d.ts +5 -0
- package/dist/components/tri-state.d.ts.map +1 -0
- package/dist/components/tri-state.js +8 -0
- package/dist/components/tri-state.js.map +1 -0
- package/dist/components/useComboboxLayout.cjs +59 -0
- package/dist/components/useComboboxLayout.cjs.map +1 -0
- package/dist/components/useComboboxLayout.d.ts +5 -0
- package/dist/components/useComboboxLayout.d.ts.map +1 -0
- package/dist/components/useComboboxLayout.js +59 -0
- package/dist/components/useComboboxLayout.js.map +1 -0
- package/dist/components.cjs +37 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +20 -4
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +38 -1
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +51 -2
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +10 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.js +51 -2
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +185 -53
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +63 -3
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +185 -53
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/LogsTable.cjs +10 -1
- package/dist/data/LogsTable.cjs.map +1 -1
- package/dist/data/LogsTable.d.ts +3 -1
- package/dist/data/LogsTable.d.ts.map +1 -1
- package/dist/data/LogsTable.js +10 -1
- package/dist/data/LogsTable.js.map +1 -1
- package/dist/data/TaskExecDetails.cjs +40 -0
- package/dist/data/TaskExecDetails.cjs.map +1 -0
- package/dist/data/TaskExecDetails.d.ts +5 -0
- package/dist/data/TaskExecDetails.d.ts.map +1 -0
- package/dist/data/TaskExecDetails.js +40 -0
- package/dist/data/TaskExecDetails.js.map +1 -0
- package/dist/data/TaskManager.cjs +99 -14
- package/dist/data/TaskManager.cjs.map +1 -1
- package/dist/data/TaskManager.d.ts.map +1 -1
- package/dist/data/TaskManager.js +100 -15
- package/dist/data/TaskManager.js.map +1 -1
- package/dist/data/TaskProgress.cjs +59 -14
- package/dist/data/TaskProgress.cjs.map +1 -1
- package/dist/data/TaskProgress.d.ts +2 -1
- package/dist/data/TaskProgress.d.ts.map +1 -1
- package/dist/data/TaskProgress.js +59 -14
- package/dist/data/TaskProgress.js.map +1 -1
- package/dist/data/TaskSnapshot.cjs.map +1 -1
- package/dist/data/TaskSnapshot.d.ts +12 -1
- package/dist/data/TaskSnapshot.d.ts.map +1 -1
- package/dist/data/TaskSnapshot.js.map +1 -1
- package/dist/data/TreeNode.cjs +3 -0
- package/dist/data/TreeNode.cjs.map +1 -1
- package/dist/data/TreeNode.d.ts.map +1 -1
- package/dist/data/TreeNode.js +3 -0
- package/dist/data/TreeNode.js.map +1 -1
- package/dist/data/ai/AdvancedChatConfig.cjs +289 -0
- package/dist/data/ai/AdvancedChatConfig.cjs.map +1 -0
- package/dist/data/ai/AdvancedChatConfig.d.ts +21 -0
- package/dist/data/ai/AdvancedChatConfig.d.ts.map +1 -0
- package/dist/data/ai/AdvancedChatConfig.js +289 -0
- package/dist/data/ai/AdvancedChatConfig.js.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.cjs +120 -0
- package/dist/data/ai/AdvancedCostsPanel.cjs.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.d.ts +16 -0
- package/dist/data/ai/AdvancedCostsPanel.d.ts.map +1 -0
- package/dist/data/ai/AdvancedCostsPanel.js +120 -0
- package/dist/data/ai/AdvancedCostsPanel.js.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.cjs +74 -0
- package/dist/data/ai/ChatWindow.catalogs.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.d.ts +16 -0
- package/dist/data/ai/ChatWindow.catalogs.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.catalogs.js +74 -0
- package/dist/data/ai/ChatWindow.catalogs.js.map +1 -0
- package/dist/data/ai/ChatWindow.cjs +78 -100
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +1 -1
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +80 -102
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.d.ts +2 -4
- package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
- package/dist/data/ai/ChatWindow.runtime.cjs +120 -0
- package/dist/data/ai/ChatWindow.runtime.cjs.map +1 -0
- package/dist/data/ai/ChatWindow.runtime.d.ts +20 -0
- package/dist/data/ai/ChatWindow.runtime.d.ts.map +1 -0
- package/dist/data/ai/ChatWindow.runtime.js +120 -0
- package/dist/data/ai/ChatWindow.runtime.js.map +1 -0
- package/dist/data/ai/ChatWindow.thread.cjs +1 -1
- package/dist/data/ai/ChatWindow.thread.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.thread.js +1 -1
- package/dist/data/ai/ChatWindow.thread.js.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.cjs +20 -0
- package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts +17 -1
- package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.tool-catalog.js +20 -0
- package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
- package/dist/data/ai/ChatWindow.types.d.ts +13 -5
- package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.cjs +3 -1
- package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
- package/dist/data/ai/ChatWindowManager.d.ts.map +1 -1
- package/dist/data/ai/ChatWindowManager.js +3 -1
- package/dist/data/ai/ChatWindowManager.js.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.cjs.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.d.ts.map +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js +1 -1
- package/dist/data/ai/PromptPicker/PromptPicker.js.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.cjs +2 -2
- package/dist/data/ai/PromptRunEditor/index.cjs.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts +1 -1
- package/dist/data/ai/PromptRunEditor/index.d.ts.map +1 -1
- package/dist/data/ai/PromptRunEditor/index.js +2 -2
- package/dist/data/ai/PromptRunEditor/index.js.map +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs +1 -1
- package/dist/data/ai/RuntimeModePicker.cjs.map +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts +1 -1
- package/dist/data/ai/RuntimeModePicker.d.ts.map +1 -1
- package/dist/data/ai/RuntimeModePicker.js +1 -1
- package/dist/data/ai/RuntimeModePicker.js.map +1 -1
- package/dist/data/ai/SessionInspector.files.cjs +26 -43
- package/dist/data/ai/SessionInspector.files.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.files.d.ts.map +1 -1
- package/dist/data/ai/SessionInspector.files.js +26 -43
- package/dist/data/ai/SessionInspector.files.js.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js +1 -1
- package/dist/data/ai/SessionInspector.hierarchy.js.map +1 -1
- package/dist/data/ai/SessionInspector.model.cjs +1 -1
- package/dist/data/ai/SessionInspector.model.cjs.map +1 -1
- package/dist/data/ai/SessionInspector.model.js +1 -1
- package/dist/data/ai/SessionInspector.model.js.map +1 -1
- package/dist/data/ai/SessionViewer.rows.cjs +4 -16
- package/dist/data/ai/SessionViewer.rows.cjs.map +1 -1
- package/dist/data/ai/SessionViewer.rows.d.ts.map +1 -1
- package/dist/data/ai/SessionViewer.rows.js +4 -16
- package/dist/data/ai/SessionViewer.rows.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs +12 -3
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js +12 -3
- package/dist/data/ai/SpecRuntimeEditor/ModelSection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/VerifySection.js.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/fields.js +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.cjs.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts +2 -2
- package/dist/data/ai/SpecRuntimeEditor/index.d.ts.map +1 -1
- package/dist/data/ai/SpecRuntimeEditor/index.js.map +1 -1
- package/dist/data/ai/ThreadPicker.cjs +65 -3
- package/dist/data/ai/ThreadPicker.cjs.map +1 -1
- package/dist/data/ai/ThreadPicker.d.ts +11 -5
- package/dist/data/ai/ThreadPicker.d.ts.map +1 -1
- package/dist/data/ai/ThreadPicker.js +65 -3
- package/dist/data/ai/ThreadPicker.js.map +1 -1
- package/dist/data/ai/ToolPreferences.cjs +65 -685
- package/dist/data/ai/ToolPreferences.cjs.map +1 -1
- package/dist/data/ai/ToolPreferences.d.ts +15 -17
- package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
- package/dist/data/ai/ToolPreferences.js +64 -683
- package/dist/data/ai/ToolPreferences.js.map +1 -1
- package/dist/data/ai/ToolPreferences.model.cjs +148 -0
- package/dist/data/ai/ToolPreferences.model.cjs.map +1 -0
- package/dist/data/ai/ToolPreferences.model.d.ts +31 -0
- package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -0
- package/dist/data/ai/ToolPreferences.model.js +148 -0
- package/dist/data/ai/ToolPreferences.model.js.map +1 -0
- package/dist/data/ai/ToolPreferencesList.cjs +270 -0
- package/dist/data/ai/ToolPreferencesList.cjs.map +1 -0
- package/dist/data/ai/ToolPreferencesList.d.ts +18 -0
- package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -0
- package/dist/data/ai/ToolPreferencesList.js +270 -0
- package/dist/data/ai/ToolPreferencesList.js.map +1 -0
- package/dist/data/ai/agent-action-icons.cjs.map +1 -1
- package/dist/data/ai/agent-action-icons.js.map +1 -1
- package/dist/data/ai/chat-window-context.cjs +4 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +7 -0
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +4 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/index.d.ts +6 -3
- package/dist/data/ai/index.d.ts.map +1 -1
- package/dist/data/ai/session-tones.cjs +67 -0
- package/dist/data/ai/session-tones.cjs.map +1 -0
- package/dist/data/ai/session-tones.d.ts +34 -0
- package/dist/data/ai/session-tones.d.ts.map +1 -0
- package/dist/data/ai/session-tones.js +67 -0
- package/dist/data/ai/session-tones.js.map +1 -0
- package/dist/data/ai/thread-costs.cjs +39 -0
- package/dist/data/ai/thread-costs.cjs.map +1 -0
- package/dist/data/ai/thread-costs.d.ts +62 -0
- package/dist/data/ai/thread-costs.d.ts.map +1 -0
- package/dist/data/ai/thread-costs.js +39 -0
- package/dist/data/ai/thread-costs.js.map +1 -0
- package/dist/data/cells/CellFilterActions.cjs +68 -0
- package/dist/data/cells/CellFilterActions.cjs.map +1 -0
- package/dist/data/cells/CellFilterActions.d.ts +15 -0
- package/dist/data/cells/CellFilterActions.d.ts.map +1 -0
- package/dist/data/cells/CellFilterActions.js +68 -0
- package/dist/data/cells/CellFilterActions.js.map +1 -0
- package/dist/data/chat/Chat.cjs +156 -113
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +24 -7
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.cjs +48 -3
- package/dist/data/chat/Chat.fixtures.cjs.map +1 -1
- package/dist/data/chat/Chat.fixtures.d.ts +1 -1
- package/dist/data/chat/Chat.fixtures.d.ts.map +1 -1
- package/dist/data/chat/Chat.fixtures.js +48 -3
- package/dist/data/chat/Chat.fixtures.js.map +1 -1
- package/dist/data/chat/Chat.js +160 -117
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Chat.runtime.cjs +63 -0
- package/dist/data/chat/Chat.runtime.cjs.map +1 -0
- package/dist/data/chat/Chat.runtime.d.ts +16 -0
- package/dist/data/chat/Chat.runtime.d.ts.map +1 -0
- package/dist/data/chat/Chat.runtime.js +63 -0
- package/dist/data/chat/Chat.runtime.js.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.cjs +62 -0
- package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.d.ts +14 -0
- package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -0
- package/dist/data/chat/ChatRuntimeToolbar.js +62 -0
- package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -0
- package/dist/data/chat/ToolCall.cjs +86 -24
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +12 -5
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +86 -24
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/approval.cjs +49 -6
- package/dist/data/chat/approval.cjs.map +1 -1
- package/dist/data/chat/approval.d.ts +11 -4
- package/dist/data/chat/approval.d.ts.map +1 -1
- package/dist/data/chat/approval.js +49 -6
- package/dist/data/chat/approval.js.map +1 -1
- package/dist/data/chat/index.d.ts +5 -3
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/tool-render/ToolArgs.cjs +50 -0
- package/dist/data/chat/tool-render/ToolArgs.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolArgs.d.ts +7 -0
- package/dist/data/chat/tool-render/ToolArgs.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolArgs.js +50 -0
- package/dist/data/chat/tool-render/ToolArgs.js.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.cjs +155 -0
- package/dist/data/chat/tool-render/ToolParams.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.d.ts +20 -0
- package/dist/data/chat/tool-render/ToolParams.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolParams.js +155 -0
- package/dist/data/chat/tool-render/ToolParams.js.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.cjs +140 -0
- package/dist/data/chat/tool-render/ToolValue.cjs.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.d.ts +16 -0
- package/dist/data/chat/tool-render/ToolValue.d.ts.map +1 -0
- package/dist/data/chat/tool-render/ToolValue.js +140 -0
- package/dist/data/chat/tool-render/ToolValue.js.map +1 -0
- package/dist/data/chat/tool-render/adapter.cjs +48 -0
- package/dist/data/chat/tool-render/adapter.cjs.map +1 -0
- package/dist/data/chat/tool-render/adapter.d.ts +57 -0
- package/dist/data/chat/tool-render/adapter.d.ts.map +1 -0
- package/dist/data/chat/tool-render/adapter.js +48 -0
- package/dist/data/chat/tool-render/adapter.js.map +1 -0
- package/dist/data/chat/tool-render/context.cjs +16 -0
- package/dist/data/chat/tool-render/context.cjs.map +1 -0
- package/dist/data/chat/tool-render/context.d.ts +6 -0
- package/dist/data/chat/tool-render/context.d.ts.map +1 -0
- package/dist/data/chat/tool-render/context.js +16 -0
- package/dist/data/chat/tool-render/context.js.map +1 -0
- package/dist/data/chat/tool-render/defaults.cjs +45 -0
- package/dist/data/chat/tool-render/defaults.cjs.map +1 -0
- package/dist/data/chat/tool-render/defaults.d.ts +11 -0
- package/dist/data/chat/tool-render/defaults.d.ts.map +1 -0
- package/dist/data/chat/tool-render/defaults.js +45 -0
- package/dist/data/chat/tool-render/defaults.js.map +1 -0
- package/dist/data/chat/tool-render/index.d.ts +13 -0
- package/dist/data/chat/tool-render/index.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.cjs +208 -0
- package/dist/data/chat/tool-render/known-tool-views.cjs.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.d.ts +10 -0
- package/dist/data/chat/tool-render/known-tool-views.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tool-views.js +208 -0
- package/dist/data/chat/tool-render/known-tool-views.js.map +1 -0
- package/dist/data/chat/tool-render/known-tools.cjs +58 -0
- package/dist/data/chat/tool-render/known-tools.cjs.map +1 -0
- package/dist/data/chat/tool-render/known-tools.d.ts +4 -0
- package/dist/data/chat/tool-render/known-tools.d.ts.map +1 -0
- package/dist/data/chat/tool-render/known-tools.js +58 -0
- package/dist/data/chat/tool-render/known-tools.js.map +1 -0
- package/dist/data/chat/tool-render/normalize.cjs +42 -0
- package/dist/data/chat/tool-render/normalize.cjs.map +1 -0
- package/dist/data/chat/tool-render/normalize.d.ts +13 -0
- package/dist/data/chat/tool-render/normalize.d.ts.map +1 -0
- package/dist/data/chat/tool-render/normalize.js +42 -0
- package/dist/data/chat/tool-render/normalize.js.map +1 -0
- package/dist/data/chat/tool-render/registry.cjs +14 -0
- package/dist/data/chat/tool-render/registry.cjs.map +1 -0
- package/dist/data/chat/tool-render/registry.d.ts +7 -0
- package/dist/data/chat/tool-render/registry.d.ts.map +1 -0
- package/dist/data/chat/tool-render/registry.js +14 -0
- package/dist/data/chat/tool-render/registry.js.map +1 -0
- package/dist/data/chat/tool-render/schema.cjs +57 -0
- package/dist/data/chat/tool-render/schema.cjs.map +1 -0
- package/dist/data/chat/tool-render/schema.d.ts +28 -0
- package/dist/data/chat/tool-render/schema.d.ts.map +1 -0
- package/dist/data/chat/tool-render/schema.js +57 -0
- package/dist/data/chat/tool-render/schema.js.map +1 -0
- package/dist/data/chat/tool-render/shape.cjs +94 -0
- package/dist/data/chat/tool-render/shape.cjs.map +1 -0
- package/dist/data/chat/tool-render/shape.d.ts +39 -0
- package/dist/data/chat/tool-render/shape.d.ts.map +1 -0
- package/dist/data/chat/tool-render/shape.js +94 -0
- package/dist/data/chat/tool-render/shape.js.map +1 -0
- package/dist/data/chat/tool-render/summary.cjs +34 -0
- package/dist/data/chat/tool-render/summary.cjs.map +1 -0
- package/dist/data/chat/tool-render/summary.d.ts +8 -0
- package/dist/data/chat/tool-render/summary.d.ts.map +1 -0
- package/dist/data/chat/tool-render/summary.js +34 -0
- package/dist/data/chat/tool-render/summary.js.map +1 -0
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/chat/usage-snapshot.cjs +17 -0
- package/dist/data/chat/usage-snapshot.cjs.map +1 -0
- package/dist/data/chat/usage-snapshot.d.ts +21 -0
- package/dist/data/chat/usage-snapshot.d.ts.map +1 -0
- package/dist/data/chat/usage-snapshot.js +17 -0
- package/dist/data/chat/usage-snapshot.js.map +1 -0
- package/dist/data/data-table-filter-values.cjs +103 -0
- package/dist/data/data-table-filter-values.cjs.map +1 -0
- package/dist/data/data-table-filter-values.d.ts +34 -0
- package/dist/data/data-table-filter-values.d.ts.map +1 -0
- package/dist/data/data-table-filter-values.js +103 -0
- package/dist/data/data-table-filter-values.js.map +1 -0
- package/dist/data/data-table-server-filters.cjs +165 -0
- package/dist/data/data-table-server-filters.cjs.map +1 -0
- package/dist/data/data-table-server-filters.d.ts +128 -0
- package/dist/data/data-table-server-filters.d.ts.map +1 -0
- package/dist/data/data-table-server-filters.js +165 -0
- package/dist/data/data-table-server-filters.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.cjs +204 -155
- package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
- package/dist/data/query-browser/QueryBrowser.d.ts +2 -41
- package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
- package/dist/data/query-browser/QueryBrowser.editor.cjs +88 -0
- package/dist/data/query-browser/QueryBrowser.editor.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.editor.d.ts +12 -0
- package/dist/data/query-browser/QueryBrowser.editor.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.editor.js +88 -0
- package/dist/data/query-browser/QueryBrowser.editor.js.map +1 -0
- package/dist/data/query-browser/QueryBrowser.js +205 -156
- package/dist/data/query-browser/QueryBrowser.js.map +1 -1
- package/dist/data/query-browser/QueryBrowser.types.cjs +11 -0
- package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts +92 -0
- package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowser.types.js +11 -0
- package/dist/data/query-browser/QueryBrowser.types.js.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs +56 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts +5 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js +56 -0
- package/dist/data/query-browser/QueryBrowserDiagnosticsPanel.js.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.cjs +80 -0
- package/dist/data/query-browser/QueryBrowserResults.cjs.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.d.ts +16 -0
- package/dist/data/query-browser/QueryBrowserResults.d.ts.map +1 -0
- package/dist/data/query-browser/QueryBrowserResults.js +80 -0
- package/dist/data/query-browser/QueryBrowserResults.js.map +1 -0
- package/dist/data/query-browser/index.d.ts +2 -1
- package/dist/data/query-browser/index.d.ts.map +1 -1
- package/dist/data/runtime/ProviderStatusPanel.cjs +187 -0
- package/dist/data/runtime/ProviderStatusPanel.cjs.map +1 -0
- package/dist/data/runtime/ProviderStatusPanel.d.ts +10 -0
- package/dist/data/runtime/ProviderStatusPanel.d.ts.map +1 -0
- package/dist/data/runtime/ProviderStatusPanel.js +187 -0
- package/dist/data/runtime/ProviderStatusPanel.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.cjs +147 -0
- package/dist/data/runtime/RuntimeBar.cjs.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBar.d.ts +8 -6
- package/dist/data/runtime/RuntimeBar.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.js +147 -0
- package/dist/data/runtime/RuntimeBar.js.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.cjs.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBar.model.d.ts +2 -2
- package/dist/data/runtime/RuntimeBar.model.d.ts.map +1 -0
- package/dist/data/runtime/RuntimeBar.model.js.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBarCombo.cjs +25 -30
- package/dist/data/runtime/RuntimeBarCombo.cjs.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBarCombo.d.ts +4 -3
- package/dist/data/runtime/RuntimeBarCombo.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/RuntimeBarCombo.js +25 -30
- package/dist/data/runtime/RuntimeBarCombo.js.map +1 -0
- package/dist/data/{ai/RuntimeBar.cjs → runtime/RuntimeBarSegments.cjs} +54 -120
- package/dist/data/runtime/RuntimeBarSegments.cjs.map +1 -0
- package/dist/data/runtime/RuntimeBarSegments.d.ts +25 -0
- package/dist/data/runtime/RuntimeBarSegments.d.ts.map +1 -0
- package/dist/data/{ai/RuntimeBar.js → runtime/RuntimeBarSegments.js} +58 -124
- package/dist/data/runtime/RuntimeBarSegments.js.map +1 -0
- package/dist/data/runtime/availability.cjs +11 -0
- package/dist/data/runtime/availability.cjs.map +1 -0
- package/dist/data/runtime/availability.d.ts +6 -0
- package/dist/data/runtime/availability.d.ts.map +1 -0
- package/dist/data/runtime/availability.js +11 -0
- package/dist/data/runtime/availability.js.map +1 -0
- package/dist/data/runtime/model-capabilities.cjs.map +1 -0
- package/dist/data/runtime/model-capabilities.d.ts.map +1 -0
- package/dist/data/runtime/model-capabilities.js.map +1 -0
- package/dist/data/runtime/provider-status.cjs +106 -0
- package/dist/data/runtime/provider-status.cjs.map +1 -0
- package/dist/data/runtime/provider-status.d.ts +24 -0
- package/dist/data/runtime/provider-status.d.ts.map +1 -0
- package/dist/data/runtime/provider-status.js +106 -0
- package/dist/data/runtime/provider-status.js.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.cjs +119 -27
- package/dist/data/runtime/runtime-mode.cjs.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.d.ts +7 -1
- package/dist/data/runtime/runtime-mode.d.ts.map +1 -0
- package/dist/data/{ai → runtime}/runtime-mode.js +120 -28
- package/dist/data/runtime/runtime-mode.js.map +1 -0
- package/dist/data/task-exec-details.cjs +9 -0
- package/dist/data/task-exec-details.cjs.map +1 -0
- package/dist/data/task-exec-details.d.ts +3 -0
- package/dist/data/task-exec-details.d.ts.map +1 -0
- package/dist/data/task-exec-details.js +9 -0
- package/dist/data/task-exec-details.js.map +1 -0
- package/dist/data/task-query-keys.cjs +26 -0
- package/dist/data/task-query-keys.cjs.map +1 -0
- package/dist/data/task-query-keys.d.ts +27 -0
- package/dist/data/task-query-keys.d.ts.map +1 -0
- package/dist/data/task-query-keys.js +26 -0
- package/dist/data/task-query-keys.js.map +1 -0
- package/dist/data/version-info.cjs +3 -3
- package/dist/data/version-info.js +3 -3
- package/dist/data.cjs +18 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +6 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +18 -0
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-hotkey.cjs +6 -1
- package/dist/hooks/use-hotkey.cjs.map +1 -1
- package/dist/hooks/use-hotkey.d.ts.map +1 -1
- package/dist/hooks/use-hotkey.js +6 -1
- package/dist/hooks/use-hotkey.js.map +1 -1
- package/dist/hooks/use-task-run.cjs +7 -4
- package/dist/hooks/use-task-run.cjs.map +1 -1
- package/dist/hooks/use-task-run.d.ts +12 -0
- package/dist/hooks/use-task-run.d.ts.map +1 -1
- package/dist/hooks/use-task-run.js +7 -4
- package/dist/hooks/use-task-run.js.map +1 -1
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/index.d.ts.map +1 -1
- package/dist/icons/registry.cjs +692 -0
- package/dist/icons/registry.cjs.map +1 -0
- package/dist/icons/registry.d.ts +21 -0
- package/dist/icons/registry.d.ts.map +1 -0
- package/dist/icons/registry.js +692 -0
- package/dist/icons/registry.js.map +1 -0
- package/dist/icons.cjs +3 -0
- package/dist/icons.cjs.map +1 -1
- package/dist/icons.js +4 -1
- package/dist/icons.js.map +1 -1
- package/dist/index.cjs +65 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +67 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +92 -56
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +49 -1
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +92 -56
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/layout/AppShell.nav.cjs +144 -19
- package/dist/layout/AppShell.nav.cjs.map +1 -1
- package/dist/layout/AppShell.nav.d.ts +6 -1
- package/dist/layout/AppShell.nav.d.ts.map +1 -1
- package/dist/layout/AppShell.nav.js +144 -19
- package/dist/layout/AppShell.nav.js.map +1 -1
- package/dist/layout/SplitPane.cjs +23 -7
- package/dist/layout/SplitPane.cjs.map +1 -1
- package/dist/layout/SplitPane.d.ts +3 -1
- package/dist/layout/SplitPane.d.ts.map +1 -1
- package/dist/layout/SplitPane.js +23 -7
- package/dist/layout/SplitPane.js.map +1 -1
- package/dist/lib/format.cjs +86 -4
- package/dist/lib/format.cjs.map +1 -1
- package/dist/lib/format.d.ts +69 -0
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +86 -4
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/path-tree.cjs +69 -0
- package/dist/lib/path-tree.cjs.map +1 -0
- package/dist/lib/path-tree.d.ts +54 -0
- package/dist/lib/path-tree.d.ts.map +1 -0
- package/dist/lib/path-tree.js +69 -0
- package/dist/lib/path-tree.js.map +1 -0
- package/dist/monaco.d.ts +1 -0
- package/dist/monaco.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.cjs +13 -7
- package/dist/overlay/DropdownMenuSubmenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenuSubmenu.js +13 -7
- package/dist/overlay/DropdownMenuSubmenu.js.map +1 -1
- package/dist/overlay/Tour.cjs +173 -0
- package/dist/overlay/Tour.cjs.map +1 -0
- package/dist/overlay/Tour.d.ts +61 -0
- package/dist/overlay/Tour.d.ts.map +1 -0
- package/dist/overlay/Tour.js +173 -0
- package/dist/overlay/Tour.js.map +1 -0
- package/dist/overlay/TourCard.cjs +108 -0
- package/dist/overlay/TourCard.cjs.map +1 -0
- package/dist/overlay/TourCard.d.ts +23 -0
- package/dist/overlay/TourCard.d.ts.map +1 -0
- package/dist/overlay/TourCard.js +108 -0
- package/dist/overlay/TourCard.js.map +1 -0
- package/dist/overlay/TourProvider.cjs +160 -0
- package/dist/overlay/TourProvider.cjs.map +1 -0
- package/dist/overlay/TourProvider.d.ts +31 -0
- package/dist/overlay/TourProvider.d.ts.map +1 -0
- package/dist/overlay/TourProvider.js +160 -0
- package/dist/overlay/TourProvider.js.map +1 -0
- package/dist/overlay/TourSpotlight.cjs +47 -0
- package/dist/overlay/TourSpotlight.cjs.map +1 -0
- package/dist/overlay/TourSpotlight.d.ts +12 -0
- package/dist/overlay/TourSpotlight.d.ts.map +1 -0
- package/dist/overlay/TourSpotlight.js +47 -0
- package/dist/overlay/TourSpotlight.js.map +1 -0
- package/dist/overlay/modalStack.cjs +18 -4
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts +10 -2
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +19 -5
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/overlay/tour-anchor.cjs +114 -0
- package/dist/overlay/tour-anchor.cjs.map +1 -0
- package/dist/overlay/tour-anchor.d.ts +30 -0
- package/dist/overlay/tour-anchor.d.ts.map +1 -0
- package/dist/overlay/tour-anchor.js +114 -0
- package/dist/overlay/tour-anchor.js.map +1 -0
- package/dist/overlay/tour-context.cjs +12 -0
- package/dist/overlay/tour-context.cjs.map +1 -0
- package/dist/overlay/tour-context.d.ts +40 -0
- package/dist/overlay/tour-context.d.ts.map +1 -0
- package/dist/overlay/tour-context.js +12 -0
- package/dist/overlay/tour-context.js.map +1 -0
- package/dist/overlay/tour-geometry.cjs +65 -0
- package/dist/overlay/tour-geometry.cjs.map +1 -0
- package/dist/overlay/tour-geometry.d.ts +47 -0
- package/dist/overlay/tour-geometry.d.ts.map +1 -0
- package/dist/overlay/tour-geometry.js +65 -0
- package/dist/overlay/tour-geometry.js.map +1 -0
- package/dist/overlay/tour-model.cjs +79 -0
- package/dist/overlay/tour-model.cjs.map +1 -0
- package/dist/overlay/tour-model.d.ts +29 -0
- package/dist/overlay/tour-model.d.ts.map +1 -0
- package/dist/overlay/tour-model.js +79 -0
- package/dist/overlay/tour-model.js.map +1 -0
- package/dist/overlay/tour-progress.cjs +54 -0
- package/dist/overlay/tour-progress.cjs.map +1 -0
- package/dist/overlay/tour-progress.d.ts +40 -0
- package/dist/overlay/tour-progress.d.ts.map +1 -0
- package/dist/overlay/tour-progress.js +54 -0
- package/dist/overlay/tour-progress.js.map +1 -0
- package/dist/overlay/tour-types.d.ts +144 -0
- package/dist/overlay/tour-types.d.ts.map +1 -0
- package/dist/overlay/use-tour-anchor.cjs +43 -0
- package/dist/overlay/use-tour-anchor.cjs.map +1 -0
- package/dist/overlay/use-tour-anchor.d.ts +23 -0
- package/dist/overlay/use-tour-anchor.d.ts.map +1 -0
- package/dist/overlay/use-tour-anchor.js +43 -0
- package/dist/overlay/use-tour-anchor.js.map +1 -0
- package/dist/overlay/use-tour-rect.cjs +33 -0
- package/dist/overlay/use-tour-rect.cjs.map +1 -0
- package/dist/overlay/use-tour-rect.d.ts +12 -0
- package/dist/overlay/use-tour-rect.d.ts.map +1 -0
- package/dist/overlay/use-tour-rect.js +33 -0
- package/dist/overlay/use-tour-rect.js.map +1 -0
- package/dist/overlay/use-tour-step.cjs +66 -0
- package/dist/overlay/use-tour-step.cjs.map +1 -0
- package/dist/overlay/use-tour-step.d.ts +45 -0
- package/dist/overlay/use-tour-step.d.ts.map +1 -0
- package/dist/overlay/use-tour-step.js +66 -0
- package/dist/overlay/use-tour-step.js.map +1 -0
- package/dist/overlay/zIndex.cjs +8 -0
- package/dist/overlay/zIndex.cjs.map +1 -1
- package/dist/overlay/zIndex.d.ts +8 -0
- package/dist/overlay/zIndex.d.ts.map +1 -1
- package/dist/overlay/zIndex.js +8 -0
- package/dist/overlay/zIndex.js.map +1 -1
- package/dist/rpc/CommandOutput.cjs +8 -0
- package/dist/rpc/CommandOutput.cjs.map +1 -1
- package/dist/rpc/CommandOutput.d.ts +4 -1
- package/dist/rpc/CommandOutput.d.ts.map +1 -1
- package/dist/rpc/CommandOutput.js +8 -0
- package/dist/rpc/CommandOutput.js.map +1 -1
- package/dist/rpc/EntityExplorerApp.cjs +10 -16
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +10 -16
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/FilterForm.cjs +20 -0
- package/dist/rpc/FilterForm.cjs.map +1 -1
- package/dist/rpc/FilterForm.js +20 -0
- package/dist/rpc/FilterForm.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +1 -1
- package/dist/rpc/OperationActionBar.cjs.map +1 -1
- package/dist/rpc/OperationActionBar.js +1 -1
- package/dist/rpc/OperationActionBar.js.map +1 -1
- package/dist/rpc/OperationCatalog.cjs +83 -7
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +84 -8
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +2 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -1
- package/dist/rpc/OperationResultView.d.ts +6 -0
- package/dist/rpc/OperationResultView.d.ts.map +1 -1
- package/dist/rpc/OperationResultView.js +2 -0
- package/dist/rpc/OperationResultView.js.map +1 -1
- package/dist/rpc/SchemaActionForm.cjs +2 -21
- package/dist/rpc/SchemaActionForm.cjs.map +1 -1
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -1
- package/dist/rpc/SchemaActionForm.js +3 -22
- package/dist/rpc/SchemaActionForm.js.map +1 -1
- package/dist/rpc/apiClient.cjs +16 -2
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +16 -2
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +123 -49
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +14 -6
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +121 -47
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/operationFilterSearch.cjs +23 -0
- package/dist/rpc/operationFilterSearch.cjs.map +1 -0
- package/dist/rpc/operationFilterSearch.d.ts +22 -0
- package/dist/rpc/operationFilterSearch.d.ts.map +1 -0
- package/dist/rpc/operationFilterSearch.js +23 -0
- package/dist/rpc/operationFilterSearch.js.map +1 -0
- package/dist/rpc/operationLookupFetcher.cjs +28 -0
- package/dist/rpc/operationLookupFetcher.cjs.map +1 -0
- package/dist/rpc/operationLookupFetcher.d.ts +17 -0
- package/dist/rpc/operationLookupFetcher.d.ts.map +1 -0
- package/dist/rpc/operationLookupFetcher.js +28 -0
- package/dist/rpc/operationLookupFetcher.js.map +1 -0
- package/dist/rpc/surfaceNav.cjs +77 -0
- package/dist/rpc/surfaceNav.cjs.map +1 -0
- package/dist/rpc/surfaceNav.d.ts +19 -0
- package/dist/rpc/surfaceNav.d.ts.map +1 -0
- package/dist/rpc/surfaceNav.js +77 -0
- package/dist/rpc/surfaceNav.js.map +1 -0
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +21 -2
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc.cjs +2 -0
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +1 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +2 -0
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utils.cjs +8 -0
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +10 -2
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/data/ai/RuntimeBar.cjs.map +0 -1
- package/dist/data/ai/RuntimeBar.d.ts.map +0 -1
- package/dist/data/ai/RuntimeBar.js.map +0 -1
- package/dist/data/ai/RuntimeBar.model.cjs.map +0 -1
- package/dist/data/ai/RuntimeBar.model.d.ts.map +0 -1
- package/dist/data/ai/RuntimeBar.model.js.map +0 -1
- package/dist/data/ai/RuntimeBarCombo.cjs.map +0 -1
- package/dist/data/ai/RuntimeBarCombo.d.ts.map +0 -1
- package/dist/data/ai/RuntimeBarCombo.js.map +0 -1
- package/dist/data/ai/model-capabilities.cjs.map +0 -1
- package/dist/data/ai/model-capabilities.d.ts.map +0 -1
- package/dist/data/ai/model-capabilities.js.map +0 -1
- package/dist/data/ai/runtime-mode.cjs.map +0 -1
- package/dist/data/ai/runtime-mode.d.ts.map +0 -1
- package/dist/data/ai/runtime-mode.js.map +0 -1
- /package/dist/data/{ai → runtime}/RuntimeBar.model.cjs +0 -0
- /package/dist/data/{ai → runtime}/RuntimeBar.model.js +0 -0
- /package/dist/data/{ai → runtime}/model-capabilities.cjs +0 -0
- /package/dist/data/{ai → runtime}/model-capabilities.d.ts +0 -0
- /package/dist/data/{ai → runtime}/model-capabilities.js +0 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const react = require("react");
|
|
5
|
+
const EndpointSelector = require("./EndpointSelector.cjs");
|
|
6
|
+
const EndpointSelector_model = require("./EndpointSelector.model.cjs");
|
|
7
|
+
const SecretKeySelector_model = require("./SecretKeySelector.model.cjs");
|
|
8
|
+
const SecretKeySelector = require("./SecretKeySelector.cjs");
|
|
9
|
+
function defaultSecretValue(source) {
|
|
10
|
+
switch (source) {
|
|
11
|
+
case "value":
|
|
12
|
+
return { kind: "value", value: "" };
|
|
13
|
+
case "onepassword":
|
|
14
|
+
return { kind: "onepassword", ref: "" };
|
|
15
|
+
case "serviceaccount":
|
|
16
|
+
return { kind: "serviceaccount", name: "" };
|
|
17
|
+
case "secret":
|
|
18
|
+
case "configmap":
|
|
19
|
+
case "helm":
|
|
20
|
+
return { kind: source, name: "", key: "" };
|
|
21
|
+
default:
|
|
22
|
+
return void 0;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function useFieldDraft({
|
|
26
|
+
raw,
|
|
27
|
+
parsed,
|
|
28
|
+
seeded,
|
|
29
|
+
serialize,
|
|
30
|
+
onChange
|
|
31
|
+
}) {
|
|
32
|
+
const rawString = typeof raw === "string" ? raw : "";
|
|
33
|
+
const [draft, setDraft] = react.useState();
|
|
34
|
+
const committed = react.useRef(rawString);
|
|
35
|
+
react.useEffect(() => {
|
|
36
|
+
if (rawString === committed.current) return;
|
|
37
|
+
committed.current = rawString;
|
|
38
|
+
setDraft(void 0);
|
|
39
|
+
}, [rawString]);
|
|
40
|
+
const commit = react.useCallback(
|
|
41
|
+
(next) => {
|
|
42
|
+
setDraft(next);
|
|
43
|
+
const serialized = serialize(next);
|
|
44
|
+
committed.current = serialized;
|
|
45
|
+
onChange(serialized);
|
|
46
|
+
},
|
|
47
|
+
[onChange, serialize]
|
|
48
|
+
);
|
|
49
|
+
return [draft ?? parsed ?? seeded, commit];
|
|
50
|
+
}
|
|
51
|
+
function SecretFormField({
|
|
52
|
+
field,
|
|
53
|
+
namespace,
|
|
54
|
+
allowWorkload,
|
|
55
|
+
loaders,
|
|
56
|
+
secretSources,
|
|
57
|
+
urlSources
|
|
58
|
+
}) {
|
|
59
|
+
const loadResources = react.useCallback(
|
|
60
|
+
(kind) => loaders.loadResources(kind, namespace),
|
|
61
|
+
[loaders, namespace]
|
|
62
|
+
);
|
|
63
|
+
const loadKeyPreview = react.useCallback(
|
|
64
|
+
(kind, name) => loaders.loadKeyPreview(kind, name, namespace),
|
|
65
|
+
[loaders, namespace]
|
|
66
|
+
);
|
|
67
|
+
const loadServiceAccounts = react.useCallback(
|
|
68
|
+
() => loaders.loadServiceAccounts(namespace),
|
|
69
|
+
[loaders, namespace]
|
|
70
|
+
);
|
|
71
|
+
const loadWorkloads = react.useCallback(
|
|
72
|
+
(kinds) => loaders.loadWorkloads(namespace, kinds),
|
|
73
|
+
[loaders, namespace]
|
|
74
|
+
);
|
|
75
|
+
const onePassword = react.useMemo(
|
|
76
|
+
() => ({
|
|
77
|
+
loadVaults: loaders.loadOnePasswordVaults,
|
|
78
|
+
loadItems: loaders.loadOnePasswordItems,
|
|
79
|
+
loadFields: loaders.loadOnePasswordFields
|
|
80
|
+
}),
|
|
81
|
+
[loaders]
|
|
82
|
+
);
|
|
83
|
+
const defaultSource = field.schema["x-clicky-default-source"];
|
|
84
|
+
const [secretValue, changeSecret] = useFieldDraft({
|
|
85
|
+
raw: field.value,
|
|
86
|
+
parsed: SecretKeySelector_model.parseSecretRef(field.value),
|
|
87
|
+
seeded: defaultSecretValue(defaultSource),
|
|
88
|
+
serialize: SecretKeySelector_model.serializeSecretRef,
|
|
89
|
+
onChange: field.onChange
|
|
90
|
+
});
|
|
91
|
+
const endpointSeed = defaultSecretValue(defaultSource);
|
|
92
|
+
const [endpointValue, changeEndpoint] = useFieldDraft({
|
|
93
|
+
raw: field.value,
|
|
94
|
+
parsed: EndpointSelector_model.parseEndpointValue(field.value),
|
|
95
|
+
seeded: endpointSeed ? { mode: "url", source: endpointSeed } : void 0,
|
|
96
|
+
serialize: EndpointSelector_model.serializeEndpointValue,
|
|
97
|
+
onChange: field.onChange
|
|
98
|
+
});
|
|
99
|
+
if (allowWorkload) {
|
|
100
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
101
|
+
EndpointSelector.EndpointSelector,
|
|
102
|
+
{
|
|
103
|
+
value: endpointValue,
|
|
104
|
+
onChange: changeEndpoint,
|
|
105
|
+
namespace,
|
|
106
|
+
modes: [
|
|
107
|
+
"url",
|
|
108
|
+
"service",
|
|
109
|
+
"cluster-ip",
|
|
110
|
+
"api-proxy",
|
|
111
|
+
"ingress",
|
|
112
|
+
"port-forward"
|
|
113
|
+
],
|
|
114
|
+
loadWorkloads,
|
|
115
|
+
urlSelector: {
|
|
116
|
+
loadResources,
|
|
117
|
+
loadKeyPreview,
|
|
118
|
+
loadServiceAccounts,
|
|
119
|
+
onePassword,
|
|
120
|
+
...urlSources ? { sources: urlSources } : {}
|
|
121
|
+
},
|
|
122
|
+
showPath: true,
|
|
123
|
+
showIngressPort: true,
|
|
124
|
+
allowCustomPort: true
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
129
|
+
SecretKeySelector.SecretKeySelector,
|
|
130
|
+
{
|
|
131
|
+
value: secretValue,
|
|
132
|
+
onChange: changeSecret,
|
|
133
|
+
loadResources,
|
|
134
|
+
loadKeyPreview,
|
|
135
|
+
loadServiceAccounts,
|
|
136
|
+
onePassword,
|
|
137
|
+
...secretSources ? { sources: secretSources } : {}
|
|
138
|
+
}
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
exports.SecretFormField = SecretFormField;
|
|
142
|
+
//# sourceMappingURL=SecretFormField.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecretFormField.cjs","sources":["../../src/components/SecretFormField.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { EndpointSelector } from \"./EndpointSelector\";\nimport {\n parseEndpointValue,\n serializeEndpointValue,\n type EndpointSelectorValue,\n} from \"./EndpointSelector.model\";\nimport {\n parseSecretRef,\n serializeSecretRef,\n} from \"./SecretKeySelector.model\";\nimport {\n SecretKeySelector,\n type SecretKeyValue,\n} from \"./SecretKeySelector\";\nimport type { FieldControl } from \"./json-schema-form-types\";\nimport type { SecretFormExtensionOptions } from \"./secret-form-extension\";\n\nexport type SecretFormFieldProps = SecretFormExtensionOptions & {\n field: FieldControl;\n namespace: string;\n allowWorkload: boolean;\n};\n\nfunction defaultSecretValue(source: unknown): SecretKeyValue | undefined {\n switch (source) {\n case \"value\":\n return { kind: \"value\", value: \"\" };\n case \"onepassword\":\n return { kind: \"onepassword\", ref: \"\" };\n case \"serviceaccount\":\n return { kind: \"serviceaccount\", name: \"\" };\n case \"secret\":\n case \"configmap\":\n case \"helm\":\n return { kind: source, name: \"\", key: \"\" };\n default:\n return undefined;\n }\n}\n\nfunction useFieldDraft<T>({\n raw,\n parsed,\n seeded,\n serialize,\n onChange,\n}: {\n raw: unknown;\n parsed: T | undefined;\n seeded: T | undefined;\n serialize: (next: T | undefined) => string;\n onChange: (next: unknown) => void;\n}): [T | undefined, (next: T | undefined) => void] {\n const rawString = typeof raw === \"string\" ? raw : \"\";\n const [draft, setDraft] = useState<T | undefined>();\n const committed = useRef(rawString);\n\n useEffect(() => {\n if (rawString === committed.current) return;\n committed.current = rawString;\n setDraft(undefined);\n }, [rawString]);\n\n const commit = useCallback(\n (next: T | undefined) => {\n setDraft(next);\n const serialized = serialize(next);\n committed.current = serialized;\n onChange(serialized);\n },\n [onChange, serialize],\n );\n\n return [draft ?? parsed ?? seeded, commit];\n}\n\nexport function SecretFormField({\n field,\n namespace,\n allowWorkload,\n loaders,\n secretSources,\n urlSources,\n}: SecretFormFieldProps) {\n const loadResources = useCallback(\n (kind: Parameters<typeof loaders.loadResources>[0]) =>\n loaders.loadResources(kind, namespace),\n [loaders, namespace],\n );\n const loadKeyPreview = useCallback(\n (kind: Parameters<typeof loaders.loadKeyPreview>[0], name: string) =>\n loaders.loadKeyPreview(kind, name, namespace),\n [loaders, namespace],\n );\n const loadServiceAccounts = useCallback(\n () => loaders.loadServiceAccounts(namespace),\n [loaders, namespace],\n );\n const loadWorkloads = useCallback(\n (kinds: Parameters<typeof loaders.loadWorkloads>[1]) =>\n loaders.loadWorkloads(namespace, kinds),\n [loaders, namespace],\n );\n const onePassword = useMemo(\n () => ({\n loadVaults: loaders.loadOnePasswordVaults,\n loadItems: loaders.loadOnePasswordItems,\n loadFields: loaders.loadOnePasswordFields,\n }),\n [loaders],\n );\n\n const defaultSource = field.schema[\"x-clicky-default-source\"];\n const [secretValue, changeSecret] = useFieldDraft<SecretKeyValue>({\n raw: field.value,\n parsed: parseSecretRef(field.value),\n seeded: defaultSecretValue(defaultSource),\n serialize: serializeSecretRef,\n onChange: field.onChange,\n });\n const endpointSeed = defaultSecretValue(defaultSource);\n const [endpointValue, changeEndpoint] = useFieldDraft<EndpointSelectorValue>({\n raw: field.value,\n parsed: parseEndpointValue(field.value),\n seeded: endpointSeed ? { mode: \"url\", source: endpointSeed } : undefined,\n serialize: serializeEndpointValue,\n onChange: field.onChange,\n });\n\n if (allowWorkload) {\n return (\n <EndpointSelector\n value={endpointValue}\n onChange={changeEndpoint}\n namespace={namespace}\n modes={[\n \"url\",\n \"service\",\n \"cluster-ip\",\n \"api-proxy\",\n \"ingress\",\n \"port-forward\",\n ]}\n loadWorkloads={loadWorkloads}\n urlSelector={{\n loadResources,\n loadKeyPreview,\n loadServiceAccounts,\n onePassword,\n ...(urlSources ? { sources: urlSources } : {}),\n }}\n showPath\n showIngressPort\n allowCustomPort\n />\n );\n }\n\n return (\n <SecretKeySelector\n value={secretValue}\n onChange={changeSecret}\n loadResources={loadResources}\n loadKeyPreview={loadKeyPreview}\n loadServiceAccounts={loadServiceAccounts}\n onePassword={onePassword}\n {...(secretSources ? { sources: secretSources } : {})}\n />\n );\n}\n"],"names":["useState","useRef","useEffect","useCallback","useMemo","parseSecretRef","serializeSecretRef","parseEndpointValue","serializeEndpointValue","jsx","EndpointSelector","SecretKeySelector"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FieldControl } from './json-schema-form-types';
|
|
2
|
+
import { SecretFormExtensionOptions } from './secret-form-extension';
|
|
3
|
+
export type SecretFormFieldProps = SecretFormExtensionOptions & {
|
|
4
|
+
field: FieldControl;
|
|
5
|
+
namespace: string;
|
|
6
|
+
allowWorkload: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function SecretFormField({ field, namespace, allowWorkload, loaders, secretSources, urlSources, }: SecretFormFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=SecretFormField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecretFormField.d.ts","sourceRoot":"","sources":["../../src/components/SecretFormField.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAE1E,MAAM,MAAM,oBAAoB,GAAG,0BAA0B,GAAG;IAC9D,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAuDF,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,SAAS,EACT,aAAa,EACb,OAAO,EACP,aAAa,EACb,UAAU,GACX,EAAE,oBAAoB,2CAsFtB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useMemo, useState, useRef, useEffect } from "react";
|
|
3
|
+
import { EndpointSelector } from "./EndpointSelector.js";
|
|
4
|
+
import { parseEndpointValue, serializeEndpointValue } from "./EndpointSelector.model.js";
|
|
5
|
+
import { parseSecretRef, serializeSecretRef } from "./SecretKeySelector.model.js";
|
|
6
|
+
import { SecretKeySelector } from "./SecretKeySelector.js";
|
|
7
|
+
function defaultSecretValue(source) {
|
|
8
|
+
switch (source) {
|
|
9
|
+
case "value":
|
|
10
|
+
return { kind: "value", value: "" };
|
|
11
|
+
case "onepassword":
|
|
12
|
+
return { kind: "onepassword", ref: "" };
|
|
13
|
+
case "serviceaccount":
|
|
14
|
+
return { kind: "serviceaccount", name: "" };
|
|
15
|
+
case "secret":
|
|
16
|
+
case "configmap":
|
|
17
|
+
case "helm":
|
|
18
|
+
return { kind: source, name: "", key: "" };
|
|
19
|
+
default:
|
|
20
|
+
return void 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function useFieldDraft({
|
|
24
|
+
raw,
|
|
25
|
+
parsed,
|
|
26
|
+
seeded,
|
|
27
|
+
serialize,
|
|
28
|
+
onChange
|
|
29
|
+
}) {
|
|
30
|
+
const rawString = typeof raw === "string" ? raw : "";
|
|
31
|
+
const [draft, setDraft] = useState();
|
|
32
|
+
const committed = useRef(rawString);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (rawString === committed.current) return;
|
|
35
|
+
committed.current = rawString;
|
|
36
|
+
setDraft(void 0);
|
|
37
|
+
}, [rawString]);
|
|
38
|
+
const commit = useCallback(
|
|
39
|
+
(next) => {
|
|
40
|
+
setDraft(next);
|
|
41
|
+
const serialized = serialize(next);
|
|
42
|
+
committed.current = serialized;
|
|
43
|
+
onChange(serialized);
|
|
44
|
+
},
|
|
45
|
+
[onChange, serialize]
|
|
46
|
+
);
|
|
47
|
+
return [draft ?? parsed ?? seeded, commit];
|
|
48
|
+
}
|
|
49
|
+
function SecretFormField({
|
|
50
|
+
field,
|
|
51
|
+
namespace,
|
|
52
|
+
allowWorkload,
|
|
53
|
+
loaders,
|
|
54
|
+
secretSources,
|
|
55
|
+
urlSources
|
|
56
|
+
}) {
|
|
57
|
+
const loadResources = useCallback(
|
|
58
|
+
(kind) => loaders.loadResources(kind, namespace),
|
|
59
|
+
[loaders, namespace]
|
|
60
|
+
);
|
|
61
|
+
const loadKeyPreview = useCallback(
|
|
62
|
+
(kind, name) => loaders.loadKeyPreview(kind, name, namespace),
|
|
63
|
+
[loaders, namespace]
|
|
64
|
+
);
|
|
65
|
+
const loadServiceAccounts = useCallback(
|
|
66
|
+
() => loaders.loadServiceAccounts(namespace),
|
|
67
|
+
[loaders, namespace]
|
|
68
|
+
);
|
|
69
|
+
const loadWorkloads = useCallback(
|
|
70
|
+
(kinds) => loaders.loadWorkloads(namespace, kinds),
|
|
71
|
+
[loaders, namespace]
|
|
72
|
+
);
|
|
73
|
+
const onePassword = useMemo(
|
|
74
|
+
() => ({
|
|
75
|
+
loadVaults: loaders.loadOnePasswordVaults,
|
|
76
|
+
loadItems: loaders.loadOnePasswordItems,
|
|
77
|
+
loadFields: loaders.loadOnePasswordFields
|
|
78
|
+
}),
|
|
79
|
+
[loaders]
|
|
80
|
+
);
|
|
81
|
+
const defaultSource = field.schema["x-clicky-default-source"];
|
|
82
|
+
const [secretValue, changeSecret] = useFieldDraft({
|
|
83
|
+
raw: field.value,
|
|
84
|
+
parsed: parseSecretRef(field.value),
|
|
85
|
+
seeded: defaultSecretValue(defaultSource),
|
|
86
|
+
serialize: serializeSecretRef,
|
|
87
|
+
onChange: field.onChange
|
|
88
|
+
});
|
|
89
|
+
const endpointSeed = defaultSecretValue(defaultSource);
|
|
90
|
+
const [endpointValue, changeEndpoint] = useFieldDraft({
|
|
91
|
+
raw: field.value,
|
|
92
|
+
parsed: parseEndpointValue(field.value),
|
|
93
|
+
seeded: endpointSeed ? { mode: "url", source: endpointSeed } : void 0,
|
|
94
|
+
serialize: serializeEndpointValue,
|
|
95
|
+
onChange: field.onChange
|
|
96
|
+
});
|
|
97
|
+
if (allowWorkload) {
|
|
98
|
+
return /* @__PURE__ */ jsx(
|
|
99
|
+
EndpointSelector,
|
|
100
|
+
{
|
|
101
|
+
value: endpointValue,
|
|
102
|
+
onChange: changeEndpoint,
|
|
103
|
+
namespace,
|
|
104
|
+
modes: [
|
|
105
|
+
"url",
|
|
106
|
+
"service",
|
|
107
|
+
"cluster-ip",
|
|
108
|
+
"api-proxy",
|
|
109
|
+
"ingress",
|
|
110
|
+
"port-forward"
|
|
111
|
+
],
|
|
112
|
+
loadWorkloads,
|
|
113
|
+
urlSelector: {
|
|
114
|
+
loadResources,
|
|
115
|
+
loadKeyPreview,
|
|
116
|
+
loadServiceAccounts,
|
|
117
|
+
onePassword,
|
|
118
|
+
...urlSources ? { sources: urlSources } : {}
|
|
119
|
+
},
|
|
120
|
+
showPath: true,
|
|
121
|
+
showIngressPort: true,
|
|
122
|
+
allowCustomPort: true
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
return /* @__PURE__ */ jsx(
|
|
127
|
+
SecretKeySelector,
|
|
128
|
+
{
|
|
129
|
+
value: secretValue,
|
|
130
|
+
onChange: changeSecret,
|
|
131
|
+
loadResources,
|
|
132
|
+
loadKeyPreview,
|
|
133
|
+
loadServiceAccounts,
|
|
134
|
+
onePassword,
|
|
135
|
+
...secretSources ? { sources: secretSources } : {}
|
|
136
|
+
}
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
export {
|
|
140
|
+
SecretFormField
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=SecretFormField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecretFormField.js","sources":["../../src/components/SecretFormField.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { EndpointSelector } from \"./EndpointSelector\";\nimport {\n parseEndpointValue,\n serializeEndpointValue,\n type EndpointSelectorValue,\n} from \"./EndpointSelector.model\";\nimport {\n parseSecretRef,\n serializeSecretRef,\n} from \"./SecretKeySelector.model\";\nimport {\n SecretKeySelector,\n type SecretKeyValue,\n} from \"./SecretKeySelector\";\nimport type { FieldControl } from \"./json-schema-form-types\";\nimport type { SecretFormExtensionOptions } from \"./secret-form-extension\";\n\nexport type SecretFormFieldProps = SecretFormExtensionOptions & {\n field: FieldControl;\n namespace: string;\n allowWorkload: boolean;\n};\n\nfunction defaultSecretValue(source: unknown): SecretKeyValue | undefined {\n switch (source) {\n case \"value\":\n return { kind: \"value\", value: \"\" };\n case \"onepassword\":\n return { kind: \"onepassword\", ref: \"\" };\n case \"serviceaccount\":\n return { kind: \"serviceaccount\", name: \"\" };\n case \"secret\":\n case \"configmap\":\n case \"helm\":\n return { kind: source, name: \"\", key: \"\" };\n default:\n return undefined;\n }\n}\n\nfunction useFieldDraft<T>({\n raw,\n parsed,\n seeded,\n serialize,\n onChange,\n}: {\n raw: unknown;\n parsed: T | undefined;\n seeded: T | undefined;\n serialize: (next: T | undefined) => string;\n onChange: (next: unknown) => void;\n}): [T | undefined, (next: T | undefined) => void] {\n const rawString = typeof raw === \"string\" ? raw : \"\";\n const [draft, setDraft] = useState<T | undefined>();\n const committed = useRef(rawString);\n\n useEffect(() => {\n if (rawString === committed.current) return;\n committed.current = rawString;\n setDraft(undefined);\n }, [rawString]);\n\n const commit = useCallback(\n (next: T | undefined) => {\n setDraft(next);\n const serialized = serialize(next);\n committed.current = serialized;\n onChange(serialized);\n },\n [onChange, serialize],\n );\n\n return [draft ?? parsed ?? seeded, commit];\n}\n\nexport function SecretFormField({\n field,\n namespace,\n allowWorkload,\n loaders,\n secretSources,\n urlSources,\n}: SecretFormFieldProps) {\n const loadResources = useCallback(\n (kind: Parameters<typeof loaders.loadResources>[0]) =>\n loaders.loadResources(kind, namespace),\n [loaders, namespace],\n );\n const loadKeyPreview = useCallback(\n (kind: Parameters<typeof loaders.loadKeyPreview>[0], name: string) =>\n loaders.loadKeyPreview(kind, name, namespace),\n [loaders, namespace],\n );\n const loadServiceAccounts = useCallback(\n () => loaders.loadServiceAccounts(namespace),\n [loaders, namespace],\n );\n const loadWorkloads = useCallback(\n (kinds: Parameters<typeof loaders.loadWorkloads>[1]) =>\n loaders.loadWorkloads(namespace, kinds),\n [loaders, namespace],\n );\n const onePassword = useMemo(\n () => ({\n loadVaults: loaders.loadOnePasswordVaults,\n loadItems: loaders.loadOnePasswordItems,\n loadFields: loaders.loadOnePasswordFields,\n }),\n [loaders],\n );\n\n const defaultSource = field.schema[\"x-clicky-default-source\"];\n const [secretValue, changeSecret] = useFieldDraft<SecretKeyValue>({\n raw: field.value,\n parsed: parseSecretRef(field.value),\n seeded: defaultSecretValue(defaultSource),\n serialize: serializeSecretRef,\n onChange: field.onChange,\n });\n const endpointSeed = defaultSecretValue(defaultSource);\n const [endpointValue, changeEndpoint] = useFieldDraft<EndpointSelectorValue>({\n raw: field.value,\n parsed: parseEndpointValue(field.value),\n seeded: endpointSeed ? { mode: \"url\", source: endpointSeed } : undefined,\n serialize: serializeEndpointValue,\n onChange: field.onChange,\n });\n\n if (allowWorkload) {\n return (\n <EndpointSelector\n value={endpointValue}\n onChange={changeEndpoint}\n namespace={namespace}\n modes={[\n \"url\",\n \"service\",\n \"cluster-ip\",\n \"api-proxy\",\n \"ingress\",\n \"port-forward\",\n ]}\n loadWorkloads={loadWorkloads}\n urlSelector={{\n loadResources,\n loadKeyPreview,\n loadServiceAccounts,\n onePassword,\n ...(urlSources ? { sources: urlSources } : {}),\n }}\n showPath\n showIngressPort\n allowCustomPort\n />\n );\n }\n\n return (\n <SecretKeySelector\n value={secretValue}\n onChange={changeSecret}\n loadResources={loadResources}\n loadKeyPreview={loadKeyPreview}\n loadServiceAccounts={loadServiceAccounts}\n onePassword={onePassword}\n {...(secretSources ? { sources: secretSources } : {})}\n />\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ const mi = require("@flanksource/icons/mi");
|
|
|
6
6
|
const utils = require("../lib/utils.cjs");
|
|
7
7
|
const Combobox = require("./Combobox.cjs");
|
|
8
8
|
const iconMenuPicker = require("./icon-menu-picker.cjs");
|
|
9
|
+
const OnePasswordSelector = require("./OnePasswordSelector.cjs");
|
|
9
10
|
const UiEdit = require("../icons/components/UiEdit.cjs");
|
|
10
11
|
const DEFAULT_SOURCES = ["secret", "configmap", "value"];
|
|
11
12
|
const SHRINKABLE_FIELD = "max-w-full min-w-0 shrink";
|
|
@@ -19,6 +20,7 @@ function SecretKeySelector({
|
|
|
19
20
|
loadResources,
|
|
20
21
|
loadKeyPreview,
|
|
21
22
|
loadServiceAccounts,
|
|
23
|
+
onePassword,
|
|
22
24
|
sources,
|
|
23
25
|
allowLiteral = true,
|
|
24
26
|
strict = false,
|
|
@@ -103,7 +105,7 @@ function SecretKeySelector({
|
|
|
103
105
|
};
|
|
104
106
|
const setKey = (key) => selectedName ? onChange({ kind: refKind, name: selectedName, key }) : void 0;
|
|
105
107
|
const setLiteral = (v) => onChange({ kind: "value", value: v });
|
|
106
|
-
const setOpRef = (
|
|
108
|
+
const setOpRef = (ref) => onChange({ kind: "onepassword", ref });
|
|
107
109
|
const sourceOptions = react.useMemo(
|
|
108
110
|
() => sourceList.map((k) => ({
|
|
109
111
|
value: k,
|
|
@@ -174,16 +176,22 @@ function SecretKeySelector({
|
|
|
174
176
|
placeholder: "Static value…",
|
|
175
177
|
ariaLabel: "Static value"
|
|
176
178
|
}
|
|
177
|
-
) : isOnePassword ?
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
placeholder: "op://vault/item/field",
|
|
183
|
-
ariaLabel: "1Password reference",
|
|
184
|
-
mono: true
|
|
179
|
+
) : isOnePassword ? (() => {
|
|
180
|
+
if (!onePassword) {
|
|
181
|
+
throw new Error(
|
|
182
|
+
"SecretKeySelector onepassword source requires onePassword loaders"
|
|
183
|
+
);
|
|
185
184
|
}
|
|
186
|
-
|
|
185
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: VALUE_FIELD, "data-slot": "secret-onepassword-field", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
186
|
+
OnePasswordSelector.OnePasswordSelector,
|
|
187
|
+
{
|
|
188
|
+
value: opRef,
|
|
189
|
+
onChange: setOpRef,
|
|
190
|
+
...onePassword,
|
|
191
|
+
allowCustomValue: true
|
|
192
|
+
}
|
|
193
|
+
) });
|
|
194
|
+
})() : isServiceAccount ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
187
195
|
"div",
|
|
188
196
|
{
|
|
189
197
|
className: VALUE_FIELD,
|
|
@@ -255,8 +263,7 @@ function TextField({
|
|
|
255
263
|
value,
|
|
256
264
|
onChange,
|
|
257
265
|
placeholder,
|
|
258
|
-
ariaLabel
|
|
259
|
-
mono
|
|
266
|
+
ariaLabel
|
|
260
267
|
}) {
|
|
261
268
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: VALUE_FIELD, "data-slot": "secret-value-fields", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
262
269
|
"input",
|
|
@@ -268,8 +275,7 @@ function TextField({
|
|
|
268
275
|
"aria-label": ariaLabel,
|
|
269
276
|
className: utils.cn(
|
|
270
277
|
"h-control-h w-full min-w-0 rounded border border-input bg-background px-control-px text-sm",
|
|
271
|
-
"outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
272
|
-
mono && "font-mono"
|
|
278
|
+
"outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
273
279
|
)
|
|
274
280
|
}
|
|
275
281
|
) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretKeySelector.cjs","sources":["../../src/components/SecretKeySelector.tsx"],"sourcesContent":["import { createElement, useEffect, useMemo, useState } from \"react\";\nimport {\n K8SSecret,\n K8SConfigmap,\n Helm,\n K8SServiceaccount,\n Vault,\n} from \"@flanksource/icons/mi\";\nimport { type StaticIconComponent } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport { UiEdit } from \"../icons\";\nimport { Combobox, type ComboboxOption } from \"./Combobox\";\nimport { IconMenuPicker, type IconMenuOption } from \"./icon-menu-picker\";\n\n// SecretKeySelector picks how a credential is sourced and lowers the choice into\n// a single reference string the consumer persists. It supports Kubernetes\n// Secrets and ConfigMaps (name + key), Helm release values (name + jsonpath\n// key), a service-account token (name only), a 1Password reference\n// (op://vault/item/field), and a static inline \"Value\". It is presentational:\n// it fetches nothing — the consumer supplies async `loadResources` /\n// `loadKeyPreview` (for keyed kinds) and optional `loadServiceAccounts` getters.\n\n/** Kinds that reference a named resource plus one of its keys. */\nexport type SecretKind = \"secret\" | \"configmap\" | \"helm\";\n\n/** Every source the picker can emit, including the non-keyed ones. */\nexport type SecretValueSource =\n | SecretKind\n | \"serviceaccount\"\n | \"onepassword\"\n | \"value\";\n\n/** One key's mid-masked preview. `value` is already masked by the consumer. */\nexport type KeyPreview = { key: string; value: string };\n\n/**\n * The selector's value: a {kind,name,key} reference into a Secret / ConfigMap /\n * Helm release, a service-account token by name, a 1Password op:// reference, or\n * a static inline literal.\n */\nexport type SecretKeyValue =\n | { kind: SecretKind; name: string; key: string }\n | { kind: \"serviceaccount\"; name: string }\n | { kind: \"onepassword\"; ref: string }\n | { kind: \"value\"; value: string };\n\n/** A named secret/configmap/helm-release and its data key names (values never returned). */\nexport type SecretResource = { name: string; keys?: string[] };\n\nexport type SecretKeySelectorProps = {\n value: SecretKeyValue | undefined;\n onChange: (next: SecretKeyValue | undefined) => void;\n /** Loads the named keyed kind's resources (name + data key names). */\n loadResources: (kind: SecretKind) => Promise<SecretResource[]>;\n /** Loads mid-masked previews for the named keyed resource's keys. */\n loadKeyPreview: (kind: SecretKind, name: string) => Promise<KeyPreview[]>;\n /**\n * Loads the service-account names (no keys) for the \"serviceaccount\" source.\n * When omitted, that source's name field accepts freeform entry only.\n */\n loadServiceAccounts?: () => Promise<SecretResource[]>;\n /**\n * The sources offered in the picker, in order. Defaults to\n * `[\"secret\", \"configmap\", \"value\"]` (or drops \"value\" when `allowLiteral` is\n * false). Pass an explicit list to offer helm / serviceaccount / onepassword.\n */\n sources?: SecretValueSource[];\n /**\n * Shorthand honoured only when `sources` is not supplied: `false` drops the\n * inline \"Value\" source, leaving Secret/ConfigMap. Ignored when `sources` is\n * given.\n */\n allowLiteral?: boolean;\n /**\n * When true, a chosen name absent from the loaded resources, or a key absent\n * from the chosen keyed resource's keys, is flagged invalid (once the load\n * settles). The onepassword and literal sources are never strict-flagged.\n */\n strict?: boolean;\n className?: string;\n};\n\nconst DEFAULT_SOURCES: SecretValueSource[] = [\"secret\", \"configmap\", \"value\"];\n\nconst SHRINKABLE_FIELD = \"max-w-full min-w-0 shrink\";\nconst SOURCE_FIELD = `${SHRINKABLE_FIELD} basis-40 grow-0`;\nconst RESOURCE_FIELD = `${SHRINKABLE_FIELD} basis-40 grow-0`;\nconst KEY_FIELD = `${SHRINKABLE_FIELD} basis-72 grow`;\nconst VALUE_FIELD = `${SHRINKABLE_FIELD} basis-64 grow`;\n\nexport function SecretKeySelector({\n value,\n onChange,\n loadResources,\n loadKeyPreview,\n loadServiceAccounts,\n sources,\n allowLiteral = true,\n strict = false,\n className,\n}: SecretKeySelectorProps) {\n const sourceList = useMemo<SecretValueSource[]>(\n () => sources ?? (allowLiteral ? DEFAULT_SOURCES : [\"secret\", \"configmap\"]),\n [sources, allowLiteral],\n );\n\n const source: SecretValueSource = value?.kind ?? sourceList[0] ?? \"secret\";\n const isKeyed =\n source === \"secret\" || source === \"configmap\" || source === \"helm\";\n const isServiceAccount = source === \"serviceaccount\";\n const isOnePassword = source === \"onepassword\";\n const isLiteral = source === \"value\";\n // A keyed source's refKind drives the loaders; other sources default to \"secret\".\n const refKind: SecretKind = isKeyed ? (source as SecretKind) : \"secret\";\n\n const selectedName =\n value && (value.kind === \"serviceaccount\" || isRefKind(value))\n ? value.name\n : \"\";\n const selectedKey = value && isRefKind(value) ? value.key : \"\";\n const literalValue = value && value.kind === \"value\" ? value.value : \"\";\n const opRef = value && value.kind === \"onepassword\" ? value.ref : \"\";\n\n const [resources, setResources] = useState<SecretResource[]>([]);\n const [resourcesLoading, setResourcesLoading] = useState(false);\n const [previews, setPreviews] = useState<KeyPreview[]>([]);\n const [previewLoading, setPreviewLoading] = useState(false);\n\n // Load the name list for keyed kinds (secret/configmap/helm) and, when a\n // loader is supplied, for the serviceaccount source. Other sources list nothing.\n useEffect(() => {\n const loader = isKeyed\n ? () => loadResources(refKind)\n : isServiceAccount && loadServiceAccounts\n ? loadServiceAccounts\n : null;\n if (!loader) {\n setResources([]);\n return;\n }\n let cancelled = false;\n setResourcesLoading(true);\n loader()\n .then((res) => !cancelled && setResources(res))\n .finally(() => !cancelled && setResourcesLoading(false));\n return () => {\n cancelled = true;\n };\n }, [loadResources, loadServiceAccounts, refKind, isKeyed, isServiceAccount]);\n\n useEffect(() => {\n if (!isKeyed || !selectedName) {\n setPreviews([]);\n return;\n }\n let cancelled = false;\n setPreviewLoading(true);\n loadKeyPreview(refKind, selectedName)\n .then((res) => !cancelled && setPreviews(res))\n .catch(() => !cancelled && setPreviews([]))\n .finally(() => !cancelled && setPreviewLoading(false));\n return () => {\n cancelled = true;\n };\n }, [loadKeyPreview, refKind, selectedName, isKeyed]);\n\n const nameOptions = useMemo<ComboboxOption[]>(\n () => resources.map((r) => ({ value: r.name, label: r.name })),\n [resources],\n );\n const selectedResource = useMemo(\n () => resources.find((r) => r.name === selectedName),\n [resources, selectedName],\n );\n const keyOptions = useMemo(\n () => buildKeyOptions(selectedResource?.keys ?? [], previews, selectedKey),\n [selectedResource, selectedKey, previews],\n );\n\n // Strict validity: the name is invalid when it names no loaded resource; the\n // key is invalid when, with a resolved resource, it isn't one of that\n // resource's keys. Only names from a listed source are checked (a\n // serviceaccount source with no loader lists nothing, so it never flags).\n const listsNames = isKeyed || (isServiceAccount && !!loadServiceAccounts);\n const nameInvalid =\n strict &&\n listsNames &&\n !!selectedName &&\n !resourcesLoading &&\n !selectedResource;\n const keyInvalid =\n strict &&\n isKeyed &&\n !!selectedKey &&\n !!selectedResource &&\n !resourcesLoading &&\n !(selectedResource.keys ?? []).includes(selectedKey);\n\n const setSource = (next: SecretValueSource) => {\n switch (next) {\n case \"value\":\n return onChange({ kind: \"value\", value: \"\" });\n case \"onepassword\":\n return onChange({ kind: \"onepassword\", ref: \"\" });\n case \"serviceaccount\":\n return onChange({ kind: \"serviceaccount\", name: \"\" });\n default:\n return onChange({ kind: next, name: \"\", key: \"\" });\n }\n };\n const setName = (name: string) => {\n if (isServiceAccount)\n return onChange(name ? { kind: \"serviceaccount\", name } : undefined);\n return onChange(\n name ? { kind: refKind, name, key: selectedKey } : undefined,\n );\n };\n const setKey = (key: string) =>\n selectedName\n ? onChange({ kind: refKind, name: selectedName, key })\n : undefined;\n const setLiteral = (v: string) => onChange({ kind: \"value\", value: v });\n const setOpRef = (v: string) => onChange({ kind: \"onepassword\", ref: v });\n\n const sourceOptions = useMemo<ComboboxOption[]>(\n () =>\n sourceList.map((k) => ({\n value: k,\n label: SOURCE_LABEL[k],\n icon: createElement(SOURCE_ICON[k], { className: \"size-4\" }),\n })),\n [sourceList],\n );\n const sourceMenuOptions = useMemo<IconMenuOption<SecretValueSource>[]>(\n () =>\n sourceList.map((kind) => ({\n value: kind,\n label: SOURCE_LABEL[kind],\n icon: SOURCE_ICON[kind],\n })),\n [sourceList],\n );\n\n return (\n <div\n data-slot=\"secret-key-selector\"\n className={cn(\"@container w-full min-w-0\", className)}\n >\n <div\n className=\"flex w-full max-w-full min-w-0 flex-nowrap items-center gap-2\"\n data-slot=\"secret-fields\"\n >\n <div\n className={cn(SOURCE_FIELD, \"@max-md:hidden\")}\n data-slot=\"secret-source-combobox\"\n >\n <Combobox\n ariaLabel=\"Secret value source\"\n options={sourceOptions}\n value={source}\n onChange={(next) => setSource(next as SecretValueSource)}\n allowCustomValue={false}\n required\n />\n </div>\n <div\n className=\"hidden shrink-0 @max-md:!block\"\n data-slot=\"secret-source-menu\"\n >\n <IconMenuPicker\n value={source}\n onChange={setSource}\n options={sourceMenuOptions}\n ariaLabel=\"Secret value source\"\n triggerClassName=\"size-control-h rounded-md border border-input bg-background\"\n />\n </div>\n {isLiteral ? (\n <TextField\n value={literalValue}\n onChange={setLiteral}\n placeholder=\"Static value…\"\n ariaLabel=\"Static value\"\n />\n ) : isOnePassword ? (\n <TextField\n value={opRef}\n onChange={setOpRef}\n placeholder=\"op://vault/item/field\"\n ariaLabel=\"1Password reference\"\n mono\n />\n ) : isServiceAccount ? (\n <div\n className={VALUE_FIELD}\n data-slot=\"secret-serviceaccount-field\"\n >\n <Combobox\n options={nameOptions}\n value={selectedName}\n onChange={setName}\n allowCustomValue\n loading={resourcesLoading}\n invalid={nameInvalid}\n placeholder=\"Service account…\"\n />\n </div>\n ) : (\n <div\n className={cn(\n \"flex flex-nowrap items-center gap-2\",\n SHRINKABLE_FIELD,\n \"grow\",\n )}\n data-slot=\"secret-reference-fields\"\n >\n <div\n className={RESOURCE_FIELD}\n data-slot=\"secret-resource-field\"\n >\n <Combobox\n options={nameOptions}\n value={selectedName}\n onChange={setName}\n allowCustomValue\n loading={resourcesLoading}\n invalid={nameInvalid}\n placeholder={`Select ${refKind}…`}\n />\n </div>\n <div className={KEY_FIELD} data-slot=\"secret-key-field\">\n <Combobox\n options={keyOptions}\n value={selectedKey}\n onChange={setKey}\n allowCustomValue\n loading={previewLoading}\n invalid={keyInvalid}\n placeholder={selectedName ? keyPlaceholder(refKind) : \"—\"}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// TextField is the shared single-input surface for the literal and 1Password\n// sources (no resource list backs either).\nfunction TextField({\n value,\n onChange,\n placeholder,\n ariaLabel,\n mono,\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n ariaLabel: string;\n mono?: boolean;\n}) {\n return (\n <div className={VALUE_FIELD} data-slot=\"secret-value-fields\">\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n aria-label={ariaLabel}\n className={cn(\n \"h-control-h w-full min-w-0 rounded border border-input bg-background px-control-px text-sm\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n mono && \"font-mono\",\n )}\n />\n </div>\n );\n}\n\n// isRefKind narrows to the keyed variants that carry both a name and a key.\nfunction isRefKind(\n v: SecretKeyValue,\n): v is { kind: SecretKind; name: string; key: string } {\n return v.kind === \"secret\" || v.kind === \"configmap\" || v.kind === \"helm\";\n}\n\n// keyPlaceholder hints the key field: helm keys are jsonpath expressions into\n// the merged release values, the others are literal data keys.\nfunction keyPlaceholder(kind: SecretKind): string {\n return kind === \"helm\" ? \"jsonpath…\" : \"Key…\";\n}\n\n// Each source's leading glyph. The flanksource FCs carry static metadata that\n// doesn't unify with ComponentType, so type the slot as a plain render function.\nconst SOURCE_ICON: Record<SecretValueSource, StaticIconComponent> = {\n secret: K8SSecret,\n configmap: K8SConfigmap,\n helm: Helm,\n serviceaccount: K8SServiceaccount,\n onepassword: Vault,\n value: UiEdit,\n};\n\nconst SOURCE_LABEL: Record<SecretValueSource, string> = {\n secret: \"Secret\",\n configmap: \"ConfigMap\",\n helm: \"Helm\",\n serviceaccount: \"Service Account\",\n onepassword: \"1Password\",\n value: \"Value\",\n};\n\n// buildKeyOptions labels each key with its mid-masked preview value when one is\n// available. A selected key absent from the list is pinned so the selection\n// stays visible.\nfunction buildKeyOptions(\n keys: string[],\n previews: KeyPreview[],\n selectedKey: string,\n): ComboboxOption[] {\n const masked = new Map(previews.map((p) => [p.key, p.value]));\n const base = keys.map((k) => ({\n value: k,\n label: masked.has(k) ? `${k} — ${masked.get(k)}` : k,\n }));\n if (selectedKey && !base.some((o) => o.value === selectedKey)) {\n return [{ value: selectedKey, label: selectedKey }, ...base];\n }\n return base;\n}\n"],"names":["useMemo","useState","useEffect","createElement","jsx","cn","jsxs","Combobox","IconMenuPicker","K8SSecret","K8SConfigmap","Helm","K8SServiceaccount","Vault","UiEdit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SecretKeySelector.cjs","sources":["../../src/components/SecretKeySelector.tsx"],"sourcesContent":["import { createElement, useEffect, useMemo, useState } from \"react\";\nimport {\n K8SSecret,\n K8SConfigmap,\n Helm,\n K8SServiceaccount,\n Vault,\n} from \"@flanksource/icons/mi\";\nimport { type StaticIconComponent } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport { UiEdit } from \"../icons\";\nimport { Combobox, type ComboboxOption } from \"./Combobox\";\nimport { IconMenuPicker, type IconMenuOption } from \"./icon-menu-picker\";\nimport { OnePasswordSelector } from \"./OnePasswordSelector\";\nimport type { OnePasswordLoaders } from \"./OnePasswordSelector.model\";\n\n// SecretKeySelector picks how a credential is sourced and lowers the choice into\n// a single reference string the consumer persists. It supports Kubernetes\n// Secrets and ConfigMaps (name + key), Helm release values (name + jsonpath\n// key), a service-account token (name only), a 1Password reference\n// (op://vault/item/field), and a static inline \"Value\". It is presentational:\n// it fetches nothing — the consumer supplies async `loadResources` /\n// `loadKeyPreview` (for keyed kinds) and optional `loadServiceAccounts` getters.\n\n/** Kinds that reference a named resource plus one of its keys. */\nexport type SecretKind = \"secret\" | \"configmap\" | \"helm\";\n\n/** Every source the picker can emit, including the non-keyed ones. */\nexport type SecretValueSource =\n | SecretKind\n | \"serviceaccount\"\n | \"onepassword\"\n | \"value\";\n\n/** One key's mid-masked preview. `value` is already masked by the consumer. */\nexport type KeyPreview = { key: string; value: string };\n\n/**\n * The selector's value: a {kind,name,key} reference into a Secret / ConfigMap /\n * Helm release, a service-account token by name, a 1Password op:// reference, or\n * a static inline literal.\n */\nexport type SecretKeyValue =\n | { kind: SecretKind; name: string; key: string }\n | { kind: \"serviceaccount\"; name: string }\n | { kind: \"onepassword\"; ref: string }\n | { kind: \"value\"; value: string };\n\n/** A named secret/configmap/helm-release and its data key names (values never returned). */\nexport type SecretResource = { name: string; keys?: string[] };\n\nexport type SecretKeySelectorProps = {\n value: SecretKeyValue | undefined;\n onChange: (next: SecretKeyValue | undefined) => void;\n /** Loads the named keyed kind's resources (name + data key names). */\n loadResources: (kind: SecretKind) => Promise<SecretResource[]>;\n /** Loads mid-masked previews for the named keyed resource's keys. */\n loadKeyPreview: (kind: SecretKind, name: string) => Promise<KeyPreview[]>;\n /**\n * Loads the service-account names (no keys) for the \"serviceaccount\" source.\n * When omitted, that source's name field accepts freeform entry only.\n */\n loadServiceAccounts?: () => Promise<SecretResource[]>;\n /** Loads metadata for the cascading 1Password vault, item, and field pickers. */\n onePassword?: OnePasswordLoaders;\n /**\n * The sources offered in the picker, in order. Defaults to\n * `[\"secret\", \"configmap\", \"value\"]` (or drops \"value\" when `allowLiteral` is\n * false). Pass an explicit list to offer helm / serviceaccount / onepassword.\n */\n sources?: SecretValueSource[];\n /**\n * Shorthand honoured only when `sources` is not supplied: `false` drops the\n * inline \"Value\" source, leaving Secret/ConfigMap. Ignored when `sources` is\n * given.\n */\n allowLiteral?: boolean;\n /**\n * When true, a chosen name absent from the loaded resources, or a key absent\n * from the chosen keyed resource's keys, is flagged invalid (once the load\n * settles). The onepassword and literal sources are never strict-flagged.\n */\n strict?: boolean;\n className?: string;\n};\n\nconst DEFAULT_SOURCES: SecretValueSource[] = [\"secret\", \"configmap\", \"value\"];\n\nconst SHRINKABLE_FIELD = \"max-w-full min-w-0 shrink\";\nconst SOURCE_FIELD = `${SHRINKABLE_FIELD} basis-40 grow-0`;\nconst RESOURCE_FIELD = `${SHRINKABLE_FIELD} basis-40 grow-0`;\nconst KEY_FIELD = `${SHRINKABLE_FIELD} basis-72 grow`;\nconst VALUE_FIELD = `${SHRINKABLE_FIELD} basis-64 grow`;\n\nexport function SecretKeySelector({\n value,\n onChange,\n loadResources,\n loadKeyPreview,\n loadServiceAccounts,\n onePassword,\n sources,\n allowLiteral = true,\n strict = false,\n className,\n}: SecretKeySelectorProps) {\n const sourceList = useMemo<SecretValueSource[]>(\n () => sources ?? (allowLiteral ? DEFAULT_SOURCES : [\"secret\", \"configmap\"]),\n [sources, allowLiteral],\n );\n\n const source: SecretValueSource = value?.kind ?? sourceList[0] ?? \"secret\";\n const isKeyed =\n source === \"secret\" || source === \"configmap\" || source === \"helm\";\n const isServiceAccount = source === \"serviceaccount\";\n const isOnePassword = source === \"onepassword\";\n const isLiteral = source === \"value\";\n // A keyed source's refKind drives the loaders; other sources default to \"secret\".\n const refKind: SecretKind = isKeyed ? (source as SecretKind) : \"secret\";\n\n const selectedName =\n value && (value.kind === \"serviceaccount\" || isRefKind(value))\n ? value.name\n : \"\";\n const selectedKey = value && isRefKind(value) ? value.key : \"\";\n const literalValue = value && value.kind === \"value\" ? value.value : \"\";\n const opRef = value && value.kind === \"onepassword\" ? value.ref : \"\";\n\n const [resources, setResources] = useState<SecretResource[]>([]);\n const [resourcesLoading, setResourcesLoading] = useState(false);\n const [previews, setPreviews] = useState<KeyPreview[]>([]);\n const [previewLoading, setPreviewLoading] = useState(false);\n\n // Load the name list for keyed kinds (secret/configmap/helm) and, when a\n // loader is supplied, for the serviceaccount source. Other sources list nothing.\n useEffect(() => {\n const loader = isKeyed\n ? () => loadResources(refKind)\n : isServiceAccount && loadServiceAccounts\n ? loadServiceAccounts\n : null;\n if (!loader) {\n setResources([]);\n return;\n }\n let cancelled = false;\n setResourcesLoading(true);\n loader()\n .then((res) => !cancelled && setResources(res))\n .finally(() => !cancelled && setResourcesLoading(false));\n return () => {\n cancelled = true;\n };\n }, [loadResources, loadServiceAccounts, refKind, isKeyed, isServiceAccount]);\n\n useEffect(() => {\n if (!isKeyed || !selectedName) {\n setPreviews([]);\n return;\n }\n let cancelled = false;\n setPreviewLoading(true);\n loadKeyPreview(refKind, selectedName)\n .then((res) => !cancelled && setPreviews(res))\n .catch(() => !cancelled && setPreviews([]))\n .finally(() => !cancelled && setPreviewLoading(false));\n return () => {\n cancelled = true;\n };\n }, [loadKeyPreview, refKind, selectedName, isKeyed]);\n\n const nameOptions = useMemo<ComboboxOption[]>(\n () => resources.map((r) => ({ value: r.name, label: r.name })),\n [resources],\n );\n const selectedResource = useMemo(\n () => resources.find((r) => r.name === selectedName),\n [resources, selectedName],\n );\n const keyOptions = useMemo(\n () => buildKeyOptions(selectedResource?.keys ?? [], previews, selectedKey),\n [selectedResource, selectedKey, previews],\n );\n\n // Strict validity: the name is invalid when it names no loaded resource; the\n // key is invalid when, with a resolved resource, it isn't one of that\n // resource's keys. Only names from a listed source are checked (a\n // serviceaccount source with no loader lists nothing, so it never flags).\n const listsNames = isKeyed || (isServiceAccount && !!loadServiceAccounts);\n const nameInvalid =\n strict &&\n listsNames &&\n !!selectedName &&\n !resourcesLoading &&\n !selectedResource;\n const keyInvalid =\n strict &&\n isKeyed &&\n !!selectedKey &&\n !!selectedResource &&\n !resourcesLoading &&\n !(selectedResource.keys ?? []).includes(selectedKey);\n\n const setSource = (next: SecretValueSource) => {\n switch (next) {\n case \"value\":\n return onChange({ kind: \"value\", value: \"\" });\n case \"onepassword\":\n return onChange({ kind: \"onepassword\", ref: \"\" });\n case \"serviceaccount\":\n return onChange({ kind: \"serviceaccount\", name: \"\" });\n default:\n return onChange({ kind: next, name: \"\", key: \"\" });\n }\n };\n const setName = (name: string) => {\n if (isServiceAccount)\n return onChange(name ? { kind: \"serviceaccount\", name } : undefined);\n return onChange(\n name ? { kind: refKind, name, key: selectedKey } : undefined,\n );\n };\n const setKey = (key: string) =>\n selectedName\n ? onChange({ kind: refKind, name: selectedName, key })\n : undefined;\n const setLiteral = (v: string) => onChange({ kind: \"value\", value: v });\n const setOpRef = (ref: string) => onChange({ kind: \"onepassword\", ref });\n\n const sourceOptions = useMemo<ComboboxOption[]>(\n () =>\n sourceList.map((k) => ({\n value: k,\n label: SOURCE_LABEL[k],\n icon: createElement(SOURCE_ICON[k], { className: \"size-4\" }),\n })),\n [sourceList],\n );\n const sourceMenuOptions = useMemo<IconMenuOption<SecretValueSource>[]>(\n () =>\n sourceList.map((kind) => ({\n value: kind,\n label: SOURCE_LABEL[kind],\n icon: SOURCE_ICON[kind],\n })),\n [sourceList],\n );\n\n return (\n <div\n data-slot=\"secret-key-selector\"\n className={cn(\"@container w-full min-w-0\", className)}\n >\n <div\n className=\"flex w-full max-w-full min-w-0 flex-nowrap items-center gap-2\"\n data-slot=\"secret-fields\"\n >\n <div\n className={cn(SOURCE_FIELD, \"@max-md:hidden\")}\n data-slot=\"secret-source-combobox\"\n >\n <Combobox\n ariaLabel=\"Secret value source\"\n options={sourceOptions}\n value={source}\n onChange={(next) => setSource(next as SecretValueSource)}\n allowCustomValue={false}\n required\n />\n </div>\n <div\n className=\"hidden shrink-0 @max-md:!block\"\n data-slot=\"secret-source-menu\"\n >\n <IconMenuPicker\n value={source}\n onChange={setSource}\n options={sourceMenuOptions}\n ariaLabel=\"Secret value source\"\n triggerClassName=\"size-control-h rounded-md border border-input bg-background\"\n />\n </div>\n {isLiteral ? (\n <TextField\n value={literalValue}\n onChange={setLiteral}\n placeholder=\"Static value…\"\n ariaLabel=\"Static value\"\n />\n ) : isOnePassword ? (\n (() => {\n if (!onePassword) {\n throw new Error(\n \"SecretKeySelector onepassword source requires onePassword loaders\",\n );\n }\n return (\n <div className={VALUE_FIELD} data-slot=\"secret-onepassword-field\">\n <OnePasswordSelector\n value={opRef}\n onChange={setOpRef}\n {...onePassword}\n allowCustomValue\n />\n </div>\n );\n })()\n ) : isServiceAccount ? (\n <div\n className={VALUE_FIELD}\n data-slot=\"secret-serviceaccount-field\"\n >\n <Combobox\n options={nameOptions}\n value={selectedName}\n onChange={setName}\n allowCustomValue\n loading={resourcesLoading}\n invalid={nameInvalid}\n placeholder=\"Service account…\"\n />\n </div>\n ) : (\n <div\n className={cn(\n \"flex flex-nowrap items-center gap-2\",\n SHRINKABLE_FIELD,\n \"grow\",\n )}\n data-slot=\"secret-reference-fields\"\n >\n <div\n className={RESOURCE_FIELD}\n data-slot=\"secret-resource-field\"\n >\n <Combobox\n options={nameOptions}\n value={selectedName}\n onChange={setName}\n allowCustomValue\n loading={resourcesLoading}\n invalid={nameInvalid}\n placeholder={`Select ${refKind}…`}\n />\n </div>\n <div className={KEY_FIELD} data-slot=\"secret-key-field\">\n <Combobox\n options={keyOptions}\n value={selectedKey}\n onChange={setKey}\n allowCustomValue\n loading={previewLoading}\n invalid={keyInvalid}\n placeholder={selectedName ? keyPlaceholder(refKind) : \"—\"}\n />\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction TextField({\n value,\n onChange,\n placeholder,\n ariaLabel,\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n ariaLabel: string;\n}) {\n return (\n <div className={VALUE_FIELD} data-slot=\"secret-value-fields\">\n <input\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n aria-label={ariaLabel}\n className={cn(\n \"h-control-h w-full min-w-0 rounded border border-input bg-background px-control-px text-sm\",\n \"outline-none focus-visible:ring-2 focus-visible:ring-ring\",\n )}\n />\n </div>\n );\n}\n\n// isRefKind narrows to the keyed variants that carry both a name and a key.\nfunction isRefKind(\n v: SecretKeyValue,\n): v is { kind: SecretKind; name: string; key: string } {\n return v.kind === \"secret\" || v.kind === \"configmap\" || v.kind === \"helm\";\n}\n\n// keyPlaceholder hints the key field: helm keys are jsonpath expressions into\n// the merged release values, the others are literal data keys.\nfunction keyPlaceholder(kind: SecretKind): string {\n return kind === \"helm\" ? \"jsonpath…\" : \"Key…\";\n}\n\n// Each source's leading glyph. The flanksource FCs carry static metadata that\n// doesn't unify with ComponentType, so type the slot as a plain render function.\nconst SOURCE_ICON: Record<SecretValueSource, StaticIconComponent> = {\n secret: K8SSecret,\n configmap: K8SConfigmap,\n helm: Helm,\n serviceaccount: K8SServiceaccount,\n onepassword: Vault,\n value: UiEdit,\n};\n\nconst SOURCE_LABEL: Record<SecretValueSource, string> = {\n secret: \"Secret\",\n configmap: \"ConfigMap\",\n helm: \"Helm\",\n serviceaccount: \"Service Account\",\n onepassword: \"1Password\",\n value: \"Value\",\n};\n\n// buildKeyOptions labels each key with its mid-masked preview value when one is\n// available. A selected key absent from the list is pinned so the selection\n// stays visible.\nfunction buildKeyOptions(\n keys: string[],\n previews: KeyPreview[],\n selectedKey: string,\n): ComboboxOption[] {\n const masked = new Map(previews.map((p) => [p.key, p.value]));\n const base = keys.map((k) => ({\n value: k,\n label: masked.has(k) ? `${k} — ${masked.get(k)}` : k,\n }));\n if (selectedKey && !base.some((o) => o.value === selectedKey)) {\n return [{ value: selectedKey, label: selectedKey }, ...base];\n }\n return base;\n}\n"],"names":["useMemo","useState","useEffect","createElement","jsx","cn","jsxs","Combobox","IconMenuPicker","OnePasswordSelector","K8SSecret","K8SConfigmap","Helm","K8SServiceaccount","Vault","UiEdit"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { OnePasswordLoaders } from './OnePasswordSelector.model';
|
|
1
2
|
/** Kinds that reference a named resource plus one of its keys. */
|
|
2
3
|
export type SecretKind = "secret" | "configmap" | "helm";
|
|
3
4
|
/** Every source the picker can emit, including the non-keyed ones. */
|
|
@@ -43,6 +44,8 @@ export type SecretKeySelectorProps = {
|
|
|
43
44
|
* When omitted, that source's name field accepts freeform entry only.
|
|
44
45
|
*/
|
|
45
46
|
loadServiceAccounts?: () => Promise<SecretResource[]>;
|
|
47
|
+
/** Loads metadata for the cascading 1Password vault, item, and field pickers. */
|
|
48
|
+
onePassword?: OnePasswordLoaders;
|
|
46
49
|
/**
|
|
47
50
|
* The sources offered in the picker, in order. Defaults to
|
|
48
51
|
* `["secret", "configmap", "value"]` (or drops "value" when `allowLiteral` is
|
|
@@ -63,5 +66,5 @@ export type SecretKeySelectorProps = {
|
|
|
63
66
|
strict?: boolean;
|
|
64
67
|
className?: string;
|
|
65
68
|
};
|
|
66
|
-
export declare function SecretKeySelector({ value, onChange, loadResources, loadKeyPreview, loadServiceAccounts, sources, allowLiteral, strict, className, }: SecretKeySelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
69
|
+
export declare function SecretKeySelector({ value, onChange, loadResources, loadKeyPreview, loadServiceAccounts, onePassword, sources, allowLiteral, strict, className, }: SecretKeySelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
67
70
|
//# sourceMappingURL=SecretKeySelector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretKeySelector.d.ts","sourceRoot":"","sources":["../../src/components/SecretKeySelector.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SecretKeySelector.d.ts","sourceRoot":"","sources":["../../src/components/SecretKeySelector.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAUtE,kEAAkE;AAClE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;AAEzD,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,gBAAgB,GAChB,aAAa,GACb,OAAO,CAAC;AAEZ,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAErC,4FAA4F;AAC5F,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAE/D,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,KAAK,IAAI,CAAC;IACrD,sEAAsE;IACtE,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/D,qEAAqE;IACrE,cAAc,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1E;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACtD,iFAAiF;IACjF,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,OAAO,EACP,YAAmB,EACnB,MAAc,EACd,SAAS,GACV,EAAE,sBAAsB,2CAgQxB"}
|
|
@@ -4,6 +4,7 @@ import { Vault, K8SServiceaccount, Helm, K8SConfigmap, K8SSecret } from "@flanks
|
|
|
4
4
|
import { cn } from "../lib/utils.js";
|
|
5
5
|
import { Combobox } from "./Combobox.js";
|
|
6
6
|
import { IconMenuPicker } from "./icon-menu-picker.js";
|
|
7
|
+
import { OnePasswordSelector } from "./OnePasswordSelector.js";
|
|
7
8
|
import { UiEdit } from "../icons/components/UiEdit.js";
|
|
8
9
|
const DEFAULT_SOURCES = ["secret", "configmap", "value"];
|
|
9
10
|
const SHRINKABLE_FIELD = "max-w-full min-w-0 shrink";
|
|
@@ -17,6 +18,7 @@ function SecretKeySelector({
|
|
|
17
18
|
loadResources,
|
|
18
19
|
loadKeyPreview,
|
|
19
20
|
loadServiceAccounts,
|
|
21
|
+
onePassword,
|
|
20
22
|
sources,
|
|
21
23
|
allowLiteral = true,
|
|
22
24
|
strict = false,
|
|
@@ -101,7 +103,7 @@ function SecretKeySelector({
|
|
|
101
103
|
};
|
|
102
104
|
const setKey = (key) => selectedName ? onChange({ kind: refKind, name: selectedName, key }) : void 0;
|
|
103
105
|
const setLiteral = (v) => onChange({ kind: "value", value: v });
|
|
104
|
-
const setOpRef = (
|
|
106
|
+
const setOpRef = (ref) => onChange({ kind: "onepassword", ref });
|
|
105
107
|
const sourceOptions = useMemo(
|
|
106
108
|
() => sourceList.map((k) => ({
|
|
107
109
|
value: k,
|
|
@@ -172,16 +174,22 @@ function SecretKeySelector({
|
|
|
172
174
|
placeholder: "Static value…",
|
|
173
175
|
ariaLabel: "Static value"
|
|
174
176
|
}
|
|
175
|
-
) : isOnePassword ?
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
placeholder: "op://vault/item/field",
|
|
181
|
-
ariaLabel: "1Password reference",
|
|
182
|
-
mono: true
|
|
177
|
+
) : isOnePassword ? (() => {
|
|
178
|
+
if (!onePassword) {
|
|
179
|
+
throw new Error(
|
|
180
|
+
"SecretKeySelector onepassword source requires onePassword loaders"
|
|
181
|
+
);
|
|
183
182
|
}
|
|
184
|
-
|
|
183
|
+
return /* @__PURE__ */ jsx("div", { className: VALUE_FIELD, "data-slot": "secret-onepassword-field", children: /* @__PURE__ */ jsx(
|
|
184
|
+
OnePasswordSelector,
|
|
185
|
+
{
|
|
186
|
+
value: opRef,
|
|
187
|
+
onChange: setOpRef,
|
|
188
|
+
...onePassword,
|
|
189
|
+
allowCustomValue: true
|
|
190
|
+
}
|
|
191
|
+
) });
|
|
192
|
+
})() : isServiceAccount ? /* @__PURE__ */ jsx(
|
|
185
193
|
"div",
|
|
186
194
|
{
|
|
187
195
|
className: VALUE_FIELD,
|
|
@@ -253,8 +261,7 @@ function TextField({
|
|
|
253
261
|
value,
|
|
254
262
|
onChange,
|
|
255
263
|
placeholder,
|
|
256
|
-
ariaLabel
|
|
257
|
-
mono
|
|
264
|
+
ariaLabel
|
|
258
265
|
}) {
|
|
259
266
|
return /* @__PURE__ */ jsx("div", { className: VALUE_FIELD, "data-slot": "secret-value-fields", children: /* @__PURE__ */ jsx(
|
|
260
267
|
"input",
|
|
@@ -266,8 +273,7 @@ function TextField({
|
|
|
266
273
|
"aria-label": ariaLabel,
|
|
267
274
|
className: cn(
|
|
268
275
|
"h-control-h w-full min-w-0 rounded border border-input bg-background px-control-px text-sm",
|
|
269
|
-
"outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
270
|
-
mono && "font-mono"
|
|
276
|
+
"outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
271
277
|
)
|
|
272
278
|
}
|
|
273
279
|
) });
|