windmill-components 1.596.1 → 1.613.0
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/sharedUtils/assets/tokens/colorTokensConfig.d.ts +2 -0
- package/dist/sharedUtils/base.d.ts +1 -0
- package/dist/sharedUtils/cloud.d.ts +1 -0
- package/dist/sharedUtils/common.d.ts +111 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +13 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +11 -0
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +95 -0
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +6 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +33 -0
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +10 -0
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +5371 -0
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +3 -0
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +7 -0
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +3 -0
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +14 -0
- package/dist/sharedUtils/components/apps/inputType.d.ts +178 -0
- package/dist/sharedUtils/components/apps/rx.d.ts +29 -0
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +21 -0
- package/dist/sharedUtils/components/apps/types.d.ts +274 -0
- package/dist/sharedUtils/components/assets/lib.d.ts +25 -0
- package/dist/sharedUtils/components/common/alert/model.d.ts +2 -0
- package/dist/sharedUtils/components/common/badge/model.d.ts +8 -0
- package/dist/sharedUtils/components/common/button/model.d.ts +45 -0
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +1 -0
- package/dist/sharedUtils/components/common/index.d.ts +24 -0
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +21 -0
- package/dist/sharedUtils/components/dbTypes.d.ts +14 -0
- package/dist/sharedUtils/components/diff_drawer.d.ts +26 -0
- package/dist/sharedUtils/components/ducklake.d.ts +1 -0
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +7 -0
- package/dist/sharedUtils/components/icons/index.d.ts +101 -0
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +1 -0
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +10 -0
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +15 -0
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +4 -0
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +11 -0
- package/dist/sharedUtils/components/triggers/kafka/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +8 -0
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +32 -0
- package/dist/sharedUtils/components/triggers/utils.d.ts +80 -0
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +2 -0
- package/dist/sharedUtils/components/triggers.d.ts +20 -0
- package/dist/sharedUtils/gen/core/ApiError.d.ts +10 -0
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +13 -0
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +7 -0
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +26 -0
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +27 -0
- package/dist/sharedUtils/gen/core/request.d.ts +29 -0
- package/dist/sharedUtils/gen/index.d.ts +6 -0
- package/dist/sharedUtils/gen/schemas.gen.d.ts +7036 -0
- package/dist/sharedUtils/gen/services.gen.d.ts +6047 -0
- package/dist/sharedUtils/gen/types.gen.d.ts +21881 -0
- package/dist/sharedUtils/history.svelte.d.ts +9 -0
- package/dist/sharedUtils/hub.d.ts +49 -0
- package/dist/sharedUtils/jsr.json +6 -0
- package/dist/sharedUtils/lib.d.ts +5 -0
- package/dist/sharedUtils/lib.es.js +1588 -0
- package/dist/sharedUtils/package.json +12 -0
- package/dist/sharedUtils/schema.d.ts +3 -0
- package/dist/sharedUtils/stores.d.ts +97 -0
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +80 -0
- package/dist/sharedUtils/toast.d.ts +8 -0
- package/dist/sharedUtils/utils.d.ts +265 -0
- package/package/assets/tokens/tokens.json +11 -1
- package/package/ata/apis.js +78 -5
- package/package/components/AddUser.svelte +1 -1
- package/package/components/CenteredModal.svelte +32 -24
- package/package/components/CenteredModal.svelte.d.ts +7 -27
- package/package/components/CenteredPage.svelte +5 -2
- package/package/components/CenteredPage.svelte.d.ts +2 -0
- package/package/components/ConcurrentJobsChart.svelte +3 -2
- package/package/components/ConcurrentJobsChart.svelte.d.ts +2 -2
- package/package/components/CustomPopover.svelte +20 -23
- package/package/components/CustomPopover.svelte.d.ts +14 -39
- package/package/components/DBManager.svelte +105 -17
- package/package/components/DBManager.svelte.d.ts +2 -1
- package/package/components/DBManagerContent.svelte +4 -3
- package/package/components/DBManagerContent.svelte.d.ts +1 -1
- package/package/components/DBTableEditor.svelte +210 -171
- package/package/components/DBTableEditor.svelte.d.ts +22 -3
- package/package/components/Description.svelte +3 -2
- package/package/components/Dev.svelte +36 -2
- package/package/components/DiffDrawer.svelte +8 -29
- package/package/components/DiffEditor.svelte +32 -2
- package/package/components/DisplayResult.svelte +32 -24
- package/package/components/Editor.svelte +70 -16
- package/package/components/Editor.svelte.d.ts +3 -0
- package/package/components/EditorBar.svelte +1 -1
- package/package/components/FakeMonacoPlaceHolder.svelte +1 -1
- package/package/components/FlowBuilder.svelte +17 -11
- package/package/components/FlowDiffViewer.svelte +37 -0
- package/package/components/FlowDiffViewer.svelte.d.ts +7 -0
- package/package/components/FlowPreviewContent.svelte +3 -2
- package/package/components/FlowPreviewResult.svelte +0 -4
- package/package/components/FlowStatusViewerInner.svelte +50 -33
- package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -1
- package/package/components/FlowStatusWaitingForEvents.svelte +27 -23
- package/package/components/FlowStatusWaitingForEvents.svelte.d.ts +4 -18
- package/package/components/FlowViewer.svelte +103 -2
- package/package/components/FlowViewer.svelte.d.ts +9 -3
- package/package/components/ForkWorkspaceBanner.svelte +16 -13
- package/package/components/GraphqlSchemaViewer.svelte +8 -1
- package/package/components/HistoricInputs.svelte +25 -27
- package/package/components/HistoricInputs.svelte.d.ts +2 -2
- package/package/components/InstanceSetting.svelte +38 -0
- package/package/components/InviteUser.svelte +16 -42
- package/package/components/InviteUser.svelte.d.ts +4 -18
- package/package/components/JobOtelTraces.svelte +287 -0
- package/package/components/JobOtelTraces.svelte.d.ts +6 -0
- package/package/components/JsonInputs.svelte +6 -8
- package/package/components/JsonInputs.svelte.d.ts +7 -8
- package/package/components/LogViewer.svelte +91 -33
- package/package/components/Login.svelte +21 -0
- package/package/components/ManualPopover.svelte +5 -6
- package/package/components/ManualPopover.svelte.d.ts +9 -35
- package/package/components/MemoryFootprintViewer.svelte +2 -6
- package/package/components/ModulePreview.svelte +23 -21
- package/package/components/ModulePreview.svelte.d.ts +1 -0
- package/package/components/Path.svelte +2 -2
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/ResourcePicker.svelte +3 -0
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/RunButton.svelte +5 -15
- package/package/components/RunButton.svelte.d.ts +7 -19
- package/package/components/RunChart.svelte +8 -4
- package/package/components/RunChart.svelte.d.ts +2 -2
- package/package/components/RunFormAdvancedPopup.svelte +1 -1
- package/package/components/RunsPage.svelte +169 -539
- package/package/components/RunsPage.svelte.d.ts +5 -5
- package/package/components/S3FilePicker.svelte +7 -11
- package/package/components/S3FilePickerInner.svelte +2 -3
- package/package/components/S3FilePickerInner.svelte.d.ts +2 -2
- package/package/components/SchemaForm.svelte +26 -19
- package/package/components/SchemaFormWithArgPicker.svelte +4 -3
- package/package/components/ScriptBuilder.svelte +1 -1
- package/package/components/ScriptEditor.svelte +575 -101
- package/package/components/Section.svelte +3 -1
- package/package/components/ServiceLogsInner.svelte +4 -4
- package/package/components/SimpleEditor.svelte +46 -2
- package/package/components/SuperadminSettingsInner.svelte +1 -1
- package/package/components/TemplateEditor.svelte +54 -29
- package/package/components/TemplateEditor.svelte.d.ts +13 -102
- package/package/components/UserSettings.svelte +1 -1
- package/package/components/WorkerTagPicker.svelte +1 -1
- package/package/components/WorkerTagSelect.svelte +5 -2
- package/package/components/WorkspaceTutorials.svelte +5 -0
- package/package/components/apps/components/buttons/AppButton.svelte +21 -6
- package/package/components/apps/components/buttons/AppForm.svelte +2 -1
- package/package/components/apps/components/buttons/AppFormButton.svelte +2 -1
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +0 -4
- package/package/components/apps/components/display/dbtable/metadata.js +69 -30
- package/package/components/apps/components/display/dbtable/queries/alterTable.d.ts +46 -0
- package/package/components/apps/components/display/dbtable/queries/alterTable.js +314 -0
- package/package/components/apps/components/display/dbtable/queries/alterTable.test.d.ts +1 -0
- package/package/components/apps/components/display/dbtable/queries/alterTable.test.js +867 -0
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +2 -24
- package/package/components/apps/components/display/dbtable/queries/createTable.js +11 -25
- package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.d.ts +9 -0
- package/package/components/apps/components/display/dbtable/queries/dbQueriesUtils.js +45 -0
- package/package/components/apps/components/display/dbtable/queries/relationalKeys.d.ts +47 -0
- package/package/components/apps/components/display/dbtable/queries/relationalKeys.js +402 -0
- package/package/components/apps/components/display/dbtable/queries/select.d.ts +2 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +37 -6
- package/package/components/apps/components/display/dbtable/tableEditor.d.ts +35 -0
- package/package/components/apps/components/display/dbtable/tableEditor.js +49 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +10 -1
- package/package/components/apps/components/display/dbtable/utils.js +52 -20
- package/package/components/apps/components/helpers/HiddenComponent.svelte +1 -1
- package/package/components/apps/components/helpers/InputValue.svelte +1 -1
- package/package/components/apps/components/helpers/ResolveConfig.svelte +1 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -2
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -1
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -2
- package/package/components/apps/editor/AppEditorHeader.svelte +8 -1
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte +32 -29
- package/package/components/apps/editor/AppEditorHeaderDeploy.svelte.d.ts +2 -2
- package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte +4 -4
- package/package/components/apps/editor/AppEditorHeaderDeployInitialDraft.svelte.d.ts +3 -3
- package/package/components/apps/editor/PublicApp.svelte +49 -30
- package/package/components/apps/editor/PublicApp.svelte.d.ts +1 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +77 -7
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/utils.d.ts +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/utils.js +10 -1
- package/package/components/apps/inputType.d.ts +6 -1
- package/package/components/auditLogs/AuditLogsFilters.svelte +9 -17
- package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
- package/package/components/common/button/model.js +1 -1
- package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +1 -1
- package/package/components/common/languageIcons/TypeScript.svelte +5 -3
- package/package/components/common/languageIcons/TypeScript.svelte.d.ts +1 -0
- package/package/components/common/modal/Modal.svelte +3 -3
- package/package/components/copilot/autocomplete/Autocompletor.js +3 -2
- package/package/components/copilot/chat/AIButtonStyle.d.ts +1 -1
- package/package/components/copilot/chat/AIButtonStyle.js +2 -1
- package/package/components/copilot/chat/AIChat.svelte +3 -1
- package/package/components/copilot/chat/AIChatDisplay.svelte +89 -4
- package/package/components/copilot/chat/AIChatInput.svelte +275 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +107 -1
- package/package/components/copilot/chat/AiChatLayout.svelte +15 -30
- package/package/components/copilot/chat/AppAvailableContextList.svelte +263 -0
- package/package/components/copilot/chat/AppAvailableContextList.svelte.d.ts +13 -0
- package/package/components/copilot/chat/ContextElementBadge.svelte +44 -0
- package/package/components/copilot/chat/DatatableCreationPolicy.svelte +32 -33
- package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
- package/package/components/copilot/chat/__tests__/app/appEvalHelpers.js +3 -0
- package/package/components/copilot/chat/__tests__/flow/flowEvalHelpers.js +4 -0
- package/package/components/copilot/chat/app/core.d.ts +56 -15
- package/package/components/copilot/chat/app/core.js +141 -22
- package/package/components/copilot/chat/context.d.ts +59 -2
- package/package/components/copilot/chat/context.js +6 -2
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +22 -0
- package/package/components/copilot/chat/flow/core.d.ts +3 -1
- package/package/components/copilot/chat/flow/core.js +29 -2
- package/package/components/copilot/chat/flow/openFlow.json +1 -1
- package/package/components/copilot/chat/flow/openFlowZod.d.ts +1 -0
- package/package/components/copilot/chat/flow/openFlowZod.js +14 -2
- package/package/components/copilot/chat/script/core.d.ts +4 -1
- package/package/components/copilot/chat/script/core.js +38 -2
- package/package/components/copilot/chat/shared.d.ts +10 -0
- package/package/components/copilot/chat/shared.js +24 -0
- package/package/components/copilot/lib.d.ts +1 -1
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/dbOps.d.ts +18 -4
- package/package/components/dbOps.js +25 -3
- package/package/components/debug/DebugConsole.svelte +277 -0
- package/package/components/debug/DebugConsole.svelte.d.ts +13 -0
- package/package/components/debug/DebugPanel.svelte +97 -0
- package/package/components/debug/DebugPanel.svelte.d.ts +11 -0
- package/package/components/debug/DebugToolbar.svelte +148 -0
- package/package/components/debug/DebugToolbar.svelte.d.ts +17 -0
- package/package/components/debug/DebugVariableViewer.svelte +115 -0
- package/package/components/debug/DebugVariableViewer.svelte.d.ts +11 -0
- package/package/components/debug/MonacoDebugger.svelte +384 -0
- package/package/components/debug/MonacoDebugger.svelte.d.ts +15 -0
- package/package/components/debug/dapClient.d.ts +192 -0
- package/package/components/debug/dapClient.js +426 -0
- package/package/components/debug/debugUtils.d.ts +30 -0
- package/package/components/debug/debugUtils.js +131 -0
- package/package/components/debug/index.d.ts +75 -0
- package/package/components/debug/index.js +82 -0
- package/package/components/flows/CreateActionsApp.svelte +6 -4
- package/package/components/flows/DebounceLimit.svelte.d.ts +1 -1
- package/package/components/flows/FlowHistoryInner.svelte +15 -4
- package/package/components/flows/content/AgentToolWrapper.svelte +1 -1
- package/package/components/flows/content/FlowEditorDrawer.svelte +124 -0
- package/package/components/flows/content/FlowEditorDrawer.svelte.d.ts +22 -0
- package/package/components/flows/content/FlowInput.svelte +211 -37
- package/package/components/flows/content/FlowModuleComponent.svelte +553 -67
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +8 -10
- package/package/components/flows/content/FlowModuleHeader.svelte +7 -4
- package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +1 -1
- package/package/components/flows/content/McpOAuthConnect.svelte +217 -0
- package/package/components/flows/content/McpOAuthConnect.svelte.d.ts +7 -0
- package/package/components/flows/content/McpToolEditor.svelte +50 -37
- package/package/components/flows/content/McpToolEditor.svelte.d.ts +0 -1
- package/package/components/flows/conversations/FlowChat.svelte +16 -2
- package/package/components/flows/conversations/FlowChat.svelte.d.ts +2 -1
- package/package/components/flows/conversations/FlowChatInterface.svelte +103 -6
- package/package/components/flows/conversations/FlowChatInterface.svelte.d.ts +2 -0
- package/package/components/flows/conversations/FlowChatManager.svelte.js +53 -21
- package/package/components/flows/header/FlowImportExportMenu.svelte +1 -1
- package/package/components/flows/propPicker/PropPickerWrapper.svelte +3 -1
- package/package/components/flows/types.d.ts +2 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +16 -8
- package/package/components/home/ItemsList.svelte +5 -5
- package/package/components/home/TutorialBanner.svelte +34 -18
- package/package/components/icons/CssIcon.svelte +20 -0
- package/package/components/icons/CssIcon.svelte.d.ts +7 -25
- package/package/components/icons/HtmlIcon.svelte +20 -0
- package/package/components/icons/HtmlIcon.svelte.d.ts +8 -0
- package/package/components/icons/JavaScriptIcon.svelte +10 -2
- package/package/components/icons/JavaScriptIcon.svelte.d.ts +1 -0
- package/package/components/icons/JsonIcon.svelte +8 -2
- package/package/components/icons/JsonIcon.svelte.d.ts +1 -0
- package/package/components/icons/LessIcon.svelte +16 -0
- package/package/components/icons/LessIcon.svelte.d.ts +8 -0
- package/package/components/icons/MarkdownIcon.svelte +20 -0
- package/package/components/icons/MarkdownIcon.svelte.d.ts +8 -0
- package/package/components/icons/ReactIcon.svelte +10 -2
- package/package/components/icons/ReactIcon.svelte.d.ts +1 -0
- package/package/components/icons/SassIcon.svelte +28 -0
- package/package/components/icons/SassIcon.svelte.d.ts +8 -0
- package/package/components/icons/SvelteIcon.svelte +10 -2
- package/package/components/icons/SvelteIcon.svelte.d.ts +1 -0
- package/package/components/icons/VueIcon.svelte +10 -2
- package/package/components/icons/VueIcon.svelte.d.ts +1 -0
- package/package/components/icons/YamlIcon.svelte +20 -0
- package/package/components/icons/YamlIcon.svelte.d.ts +8 -0
- package/package/components/instanceSettings/SecretBackendConfig.svelte +514 -0
- package/package/components/instanceSettings/SecretBackendConfig.svelte.d.ts +8 -0
- package/package/components/instanceSettings.d.ts +2 -1
- package/package/components/instanceSettings.js +32 -1
- package/package/components/jobs/JobPreview.svelte +46 -39
- package/package/components/jobs/JobPreview.svelte.d.ts +1 -0
- package/package/components/monacoLanguagesOptions.js +16 -15
- package/package/components/propertyPicker/PropPicker.svelte +16 -2
- package/package/components/propertyPicker/PropPicker.svelte.d.ts +2 -0
- package/package/components/raw_apps/DefaultDatabaseSelector.svelte +9 -5
- package/package/components/raw_apps/FileEditorIcon.svelte +12 -7
- package/package/components/raw_apps/FileEditorIcon.svelte.d.ts +2 -0
- package/package/components/raw_apps/FileTreeNode.svelte +119 -83
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte +88 -8
- package/package/components/raw_apps/RawAppDataTableList.svelte +12 -9
- package/package/components/raw_apps/RawAppEditor.svelte +218 -68
- package/package/components/raw_apps/RawAppEditorHeader.svelte +33 -16
- package/package/components/raw_apps/RawAppHistoryList.svelte +264 -80
- package/package/components/raw_apps/RawAppHistoryList.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppHistoryManager.svelte.d.ts +15 -1
- package/package/components/raw_apps/RawAppHistoryManager.svelte.js +46 -12
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +549 -47
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +31 -5
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte +25 -18
- package/package/components/raw_apps/RawAppInlineScriptPanelList.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +141 -10
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +8 -0
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte +2 -1
- package/package/components/raw_apps/RawAppInlineScriptsPanel.svelte.d.ts +9 -1
- package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +47 -3
- package/package/components/raw_apps/RawAppInputsSpecEditor.svelte.d.ts +2 -2
- package/package/components/raw_apps/RawAppModules.svelte +13 -7
- package/package/components/raw_apps/RawAppPreview.svelte +48 -6
- package/package/components/raw_apps/RawAppSidebar.svelte +194 -125
- package/package/components/raw_apps/RawAppSidebar.svelte.d.ts +1 -0
- package/package/components/raw_apps/RunnableRow.svelte +41 -0
- package/package/components/raw_apps/RunnableRow.svelte.d.ts +11 -0
- package/package/components/raw_apps/utils.d.ts +1 -1
- package/package/components/raw_apps/utils.js +76 -18
- package/package/components/runs/ManuelDatePicker.svelte +3 -3
- package/package/components/runs/ManuelDatePicker.svelte.d.ts +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte +5 -1
- package/package/components/runs/RunsFilter.svelte +75 -63
- package/package/components/runs/RunsFilter.svelte.d.ts +35 -4
- package/package/components/runs/RunsQueue.svelte.d.ts +1 -1
- package/package/components/runs/RunsTable.svelte +1 -1
- package/package/components/runs/RunsTable.svelte.d.ts +1 -1
- package/package/components/runs/useJobsLoader.svelte.d.ts +34 -0
- package/package/components/runs/useJobsLoader.svelte.js +507 -0
- package/package/components/scriptEditor/LogPanel.svelte +17 -2
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +2 -0
- package/package/components/select/SelectDropdown.svelte +2 -2
- package/package/components/settings/AIPromptsModal.svelte +88 -0
- package/package/components/settings/AIPromptsModal.svelte.d.ts +11 -0
- package/package/components/settings/ChangeWorkspaceColor.svelte +4 -3
- package/package/components/settings/ChangeWorkspaceId.svelte +14 -10
- package/package/components/settings/ChangeWorkspaceName.svelte +7 -6
- package/package/components/settings/CreateToken.svelte +1 -1
- package/package/components/settings/UserAIPromptsSettings.svelte +56 -15
- package/package/components/settings/WorkspaceOperatorSettings.svelte +68 -85
- package/package/components/settings/WorkspaceUserSettings.svelte +531 -406
- package/package/components/sidebar/MenuButton.svelte +46 -24
- package/package/components/sidebar/MenuButton.svelte.d.ts +2 -0
- package/package/components/sidebar/MultiplayerMenu.svelte +3 -3
- package/package/components/sidebar/OperatorMenu.svelte +62 -87
- package/package/components/sidebar/SidebarContent.svelte +7 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +35 -85
- package/package/components/sqlTypeService.js +4 -3
- package/package/components/table/DataTable.svelte +3 -2
- package/package/components/table/DataTable.svelte.d.ts +1 -0
- package/package/components/text_input/TextInput.svelte +3 -0
- package/package/components/text_input/TextInput.svelte.d.ts +2 -0
- package/package/components/tutorials/FlowBuilderLiveTutorial.svelte +6 -35
- package/package/components/tutorials/RunsTutorial.svelte +399 -0
- package/package/components/{schema/SchemaPicker.svelte.d.ts → tutorials/RunsTutorial.svelte.d.ts} +11 -12
- package/package/components/tutorials/TroubleshootFlowTutorial.svelte +5 -20
- package/package/components/tutorials/utils.d.ts +16 -0
- package/package/components/tutorials/utils.js +96 -0
- package/package/components/tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte +133 -0
- package/package/components/{SavedInputs.svelte.d.ts → tutorials/workspace/WorkspaceOnboardingOperatorTutorial.svelte.d.ts} +8 -11
- package/package/components/vscode.js +6 -6
- package/package/components/workspace/WorkspaceCard.svelte +184 -0
- package/package/components/workspace/WorkspaceCard.svelte.d.ts +24 -0
- package/package/components/workspace/WorkspaceIcon.svelte +21 -0
- package/package/components/workspace/WorkspaceIcon.svelte.d.ts +9 -0
- package/package/components/workspace/WorkspaceTreeView.svelte +331 -0
- package/package/components/workspace/WorkspaceTreeView.svelte.d.ts +15 -0
- package/package/components/workspaceSettings/AISettings.svelte +146 -108
- package/package/components/workspaceSettings/CreateWorkspace.svelte +25 -11
- package/package/components/workspaceSettings/DucklakeSettings.svelte +46 -23
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/ModelTokenLimits.svelte +14 -18
- package/package/components/workspaceSettings/StorageSettings.svelte +280 -241
- package/package/components/workspaceSettings/StorageSettings.svelte.d.ts +1 -0
- package/package/consts.js +4 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +126 -0
- package/package/gen/schemas.gen.js +126 -0
- package/package/gen/services.gen.d.ts +151 -2
- package/package/gen/services.gen.js +301 -4
- package/package/gen/types.gen.d.ts +584 -2
- package/package/hubPaths.json +3 -2
- package/package/infer.js +2 -0
- package/package/monaco_workers/graphql.worker.bundle.js +121 -121
- package/package/rawAppWmillTs.d.ts +11 -0
- package/package/rawAppWmillTs.js +38 -1
- package/package/svelte5Utils.svelte.d.ts +9 -0
- package/package/svelte5Utils.svelte.js +51 -1
- package/package/tutorialUtils.js +0 -4
- package/package/tutorials/config.js +31 -3
- package/package/tutorials/roleUtils.d.ts +1 -1
- package/package/tutorials/roleUtils.js +6 -2
- package/package/utils.js +159 -1
- package/package.json +16 -17
- package/package/components/SavedInputs.svelte +0 -416
- package/package/components/runs/JobsLoader.svelte +0 -468
- package/package/components/runs/JobsLoader.svelte.d.ts +0 -49
- package/package/components/schema/SchemaPicker.svelte +0 -92
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
<script lang="ts">import { Building2 } from 'lucide-svelte';
|
|
2
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
3
|
+
import WorkspaceCard from './WorkspaceCard.svelte';
|
|
4
|
+
import SearchItems from '../SearchItems.svelte';
|
|
5
|
+
let { workspaces, onEnterWorkspace, onUnarchive, searchFilter = $bindable(''), onExpandCollapseAll = $bindable(), allExpanded = $bindable(false), hasForks = $bindable(false) } = $props();
|
|
6
|
+
// State for manually toggled expansion status
|
|
7
|
+
let manualExpansionStates = $state({});
|
|
8
|
+
let filteredWorkspaces = $state();
|
|
9
|
+
// Keyboard navigation state
|
|
10
|
+
let selectedWorkspaceId = $state(null);
|
|
11
|
+
let isKeyboardNavigation = $state(false);
|
|
12
|
+
let scrollContainer;
|
|
13
|
+
// Computed expansion states that include auto-expansion for search results
|
|
14
|
+
let expansionStates = $derived.by(() => {
|
|
15
|
+
if (!searchFilter || !filteredWorkspaces || !workspaces) {
|
|
16
|
+
return manualExpansionStates;
|
|
17
|
+
}
|
|
18
|
+
const matchedWorkspaceIds = new Set(filteredWorkspaces.map((w) => w.id));
|
|
19
|
+
const autoExpanded = {};
|
|
20
|
+
// Build children map for descendant checking
|
|
21
|
+
const childrenMap = new Map();
|
|
22
|
+
workspaces.forEach((workspace) => {
|
|
23
|
+
if (workspace.parent_workspace_id) {
|
|
24
|
+
if (!childrenMap.has(workspace.parent_workspace_id)) {
|
|
25
|
+
childrenMap.set(workspace.parent_workspace_id, []);
|
|
26
|
+
}
|
|
27
|
+
childrenMap.get(workspace.parent_workspace_id).push(workspace.id);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// Function to check if workspace has matching descendants (not itself)
|
|
31
|
+
function hasMatchingDescendant(workspaceId) {
|
|
32
|
+
const children = childrenMap.get(workspaceId) || [];
|
|
33
|
+
return children.some((childId) => matchedWorkspaceIds.has(childId) || hasMatchingDescendant(childId));
|
|
34
|
+
}
|
|
35
|
+
// Auto-expand workspaces only if they have matching descendants
|
|
36
|
+
// (not if the workspace itself matches - user can manually expand to see children)
|
|
37
|
+
workspaces.forEach((workspace) => {
|
|
38
|
+
if (hasMatchingDescendant(workspace.id)) {
|
|
39
|
+
autoExpanded[workspace.id] = true;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// Combine manual and auto-expanded states
|
|
43
|
+
return { ...manualExpansionStates, ...autoExpanded };
|
|
44
|
+
});
|
|
45
|
+
// Build nested hierarchy correctly - always use full workspace list for hierarchy
|
|
46
|
+
let rootWorkspaces = $derived.by(() => {
|
|
47
|
+
if (!workspaces)
|
|
48
|
+
return [];
|
|
49
|
+
// Create a map of children for each parent workspace using ALL workspaces
|
|
50
|
+
const childrenMap = new SvelteMap();
|
|
51
|
+
// Build children mapping - this correctly handles nested relationships
|
|
52
|
+
workspaces.forEach((workspace) => {
|
|
53
|
+
if (workspace.parent_workspace_id) {
|
|
54
|
+
if (!childrenMap.has(workspace.parent_workspace_id)) {
|
|
55
|
+
childrenMap.set(workspace.parent_workspace_id, []);
|
|
56
|
+
}
|
|
57
|
+
// Find marked version from filtered results if available
|
|
58
|
+
const filteredWorkspace = filteredWorkspaces?.find((fw) => fw.id === workspace.id);
|
|
59
|
+
const extendedWorkspace = {
|
|
60
|
+
...workspace,
|
|
61
|
+
marked: filteredWorkspace?.marked
|
|
62
|
+
};
|
|
63
|
+
childrenMap.get(workspace.parent_workspace_id).push(extendedWorkspace);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// Get IDs of workspaces that match the search
|
|
67
|
+
const matchedWorkspaceIds = new Set(filteredWorkspaces?.map((w) => w.id) || []);
|
|
68
|
+
// Function to check if a workspace or its descendants match the search
|
|
69
|
+
function hasMatchingDescendant(workspaceId) {
|
|
70
|
+
if (matchedWorkspaceIds.has(workspaceId))
|
|
71
|
+
return true;
|
|
72
|
+
const children = childrenMap.get(workspaceId) || [];
|
|
73
|
+
return children.some((child) => hasMatchingDescendant(child.id));
|
|
74
|
+
}
|
|
75
|
+
// Recursive function to build full nested hierarchy
|
|
76
|
+
// parentMatched: if true, include all children regardless of search match
|
|
77
|
+
function buildWorkspaceWithChildren(workspace, parentMatched = false) {
|
|
78
|
+
const directChildren = childrenMap.get(workspace.id) || [];
|
|
79
|
+
const thisWorkspaceMatches = matchedWorkspaceIds.has(workspace.id);
|
|
80
|
+
// If this workspace or a parent matches, show all children
|
|
81
|
+
// Otherwise, only show children that match or have matching descendants
|
|
82
|
+
const visibleChildren = searchFilter && !parentMatched && !thisWorkspaceMatches
|
|
83
|
+
? directChildren.filter((child) => hasMatchingDescendant(child.id))
|
|
84
|
+
: directChildren;
|
|
85
|
+
const childrenWithNestedStructure = visibleChildren.map((child) => buildWorkspaceWithChildren(child, parentMatched || thisWorkspaceMatches));
|
|
86
|
+
// Find marked version from filtered results if available
|
|
87
|
+
const filteredWorkspace = filteredWorkspaces?.find((fw) => fw.id === workspace.id);
|
|
88
|
+
return {
|
|
89
|
+
...workspace,
|
|
90
|
+
marked: filteredWorkspace?.marked,
|
|
91
|
+
_children: childrenWithNestedStructure
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
// Return only root workspaces - filter based on search if active
|
|
95
|
+
const rootCandidates = workspaces.filter((workspace) => !workspace.parent_workspace_id ||
|
|
96
|
+
!workspaces.find((w) => w.id === workspace.parent_workspace_id));
|
|
97
|
+
const visibleRoots = searchFilter
|
|
98
|
+
? rootCandidates.filter((workspace) => hasMatchingDescendant(workspace.id))
|
|
99
|
+
: rootCandidates;
|
|
100
|
+
return visibleRoots
|
|
101
|
+
.map((workspace) => buildWorkspaceWithChildren(workspace))
|
|
102
|
+
.sort((a, b) => {
|
|
103
|
+
// Admin workspace always goes first
|
|
104
|
+
if (a.id === 'admins')
|
|
105
|
+
return -1;
|
|
106
|
+
if (b.id === 'admins')
|
|
107
|
+
return 1;
|
|
108
|
+
// Then sort alphabetically by name
|
|
109
|
+
return a.name.localeCompare(b.name);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
function handleToggleExpand(workspaceId) {
|
|
113
|
+
const currentState = expansionStates[workspaceId] ?? false;
|
|
114
|
+
manualExpansionStates = { ...manualExpansionStates, [workspaceId]: !currentState };
|
|
115
|
+
}
|
|
116
|
+
// Get IDs of workspaces that have children (can be expanded)
|
|
117
|
+
let workspacesWithChildren = $derived.by(() => {
|
|
118
|
+
if (!workspaces)
|
|
119
|
+
return [];
|
|
120
|
+
const parentIds = new Set(workspaces.filter((w) => w.parent_workspace_id).map((w) => w.parent_workspace_id));
|
|
121
|
+
return workspaces.filter((w) => parentIds.has(w.id)).map((w) => w.id);
|
|
122
|
+
});
|
|
123
|
+
// Check if all expandable workspaces are currently expanded
|
|
124
|
+
let allExpandedInternal = $derived(workspacesWithChildren.length > 0 &&
|
|
125
|
+
workspacesWithChildren.every((id) => expansionStates[id] === true));
|
|
126
|
+
// Sync internal state to bindable props
|
|
127
|
+
$effect(() => {
|
|
128
|
+
allExpanded = allExpandedInternal;
|
|
129
|
+
});
|
|
130
|
+
$effect(() => {
|
|
131
|
+
hasForks = workspacesWithChildren.length > 0;
|
|
132
|
+
});
|
|
133
|
+
export function handleExpandCollapseAll() {
|
|
134
|
+
const newState = !allExpandedInternal;
|
|
135
|
+
const newExpansionStates = {};
|
|
136
|
+
workspacesWithChildren.forEach((id) => {
|
|
137
|
+
newExpansionStates[id] = newState;
|
|
138
|
+
});
|
|
139
|
+
manualExpansionStates = newExpansionStates;
|
|
140
|
+
}
|
|
141
|
+
// Generate flattened navigation order for keyboard navigation
|
|
142
|
+
const flatNavigationOrder = $derived.by(() => {
|
|
143
|
+
const result = [];
|
|
144
|
+
function addWorkspaceAndChildren(workspace) {
|
|
145
|
+
result.push(workspace.id);
|
|
146
|
+
if (workspace._children && expansionStates[workspace.id]) {
|
|
147
|
+
workspace._children.forEach((child) => addWorkspaceAndChildren(child));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
rootWorkspaces.forEach((workspace) => addWorkspaceAndChildren(workspace));
|
|
151
|
+
return result;
|
|
152
|
+
});
|
|
153
|
+
// Keyboard navigation handlers
|
|
154
|
+
function handleKeyDown(event) {
|
|
155
|
+
// Allow navigation keys even when search input has focus
|
|
156
|
+
const navigationKeys = [
|
|
157
|
+
'ArrowDown',
|
|
158
|
+
'ArrowUp',
|
|
159
|
+
'Home',
|
|
160
|
+
'End',
|
|
161
|
+
'ArrowLeft',
|
|
162
|
+
'ArrowRight',
|
|
163
|
+
'Enter',
|
|
164
|
+
' ',
|
|
165
|
+
'Escape'
|
|
166
|
+
];
|
|
167
|
+
const activeElement = document.activeElement;
|
|
168
|
+
// Skip navigation only if user is typing in textarea or non-search inputs
|
|
169
|
+
if (activeElement?.tagName === 'TEXTAREA' ||
|
|
170
|
+
(activeElement?.tagName === 'INPUT' && !navigationKeys.includes(event.key))) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Enable keyboard navigation on arrow keys
|
|
174
|
+
if (['ArrowDown', 'ArrowUp', 'Home', 'End', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {
|
|
175
|
+
enableKeyboardNavigation();
|
|
176
|
+
}
|
|
177
|
+
// Only handle navigation if keyboard navigation is active
|
|
178
|
+
if (!isKeyboardNavigation) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (flatNavigationOrder.length === 0)
|
|
182
|
+
return;
|
|
183
|
+
const currentIndex = selectedWorkspaceId ? flatNavigationOrder.indexOf(selectedWorkspaceId) : -1;
|
|
184
|
+
switch (event.key) {
|
|
185
|
+
case 'ArrowDown': {
|
|
186
|
+
event.preventDefault();
|
|
187
|
+
const nextIndex = currentIndex < flatNavigationOrder.length - 1 ? currentIndex + 1 : 0;
|
|
188
|
+
selectedWorkspaceId = flatNavigationOrder[nextIndex];
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
case 'ArrowUp': {
|
|
192
|
+
event.preventDefault();
|
|
193
|
+
const prevIndex = currentIndex > 0 ? currentIndex - 1 : flatNavigationOrder.length - 1;
|
|
194
|
+
selectedWorkspaceId = flatNavigationOrder[prevIndex];
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case 'Home': {
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
selectedWorkspaceId = flatNavigationOrder[0];
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
case 'End': {
|
|
203
|
+
event.preventDefault();
|
|
204
|
+
selectedWorkspaceId = flatNavigationOrder[flatNavigationOrder.length - 1];
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case 'ArrowRight': {
|
|
208
|
+
if (selectedWorkspaceId && workspacesWithChildren.includes(selectedWorkspaceId)) {
|
|
209
|
+
event.preventDefault();
|
|
210
|
+
if (!expansionStates[selectedWorkspaceId]) {
|
|
211
|
+
handleToggleExpand(selectedWorkspaceId);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
case 'ArrowLeft': {
|
|
217
|
+
if (selectedWorkspaceId && workspacesWithChildren.includes(selectedWorkspaceId)) {
|
|
218
|
+
event.preventDefault();
|
|
219
|
+
if (expansionStates[selectedWorkspaceId]) {
|
|
220
|
+
handleToggleExpand(selectedWorkspaceId);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
case 'Enter':
|
|
226
|
+
case ' ': {
|
|
227
|
+
if (selectedWorkspaceId) {
|
|
228
|
+
event.preventDefault();
|
|
229
|
+
const workspace = workspaces.find((w) => w.id === selectedWorkspaceId);
|
|
230
|
+
if (workspace && !workspace.disabled) {
|
|
231
|
+
onEnterWorkspace(selectedWorkspaceId);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
case 'Escape': {
|
|
237
|
+
selectedWorkspaceId = null;
|
|
238
|
+
isKeyboardNavigation = false;
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Reset selection when workspaces change or search filter changes
|
|
244
|
+
$effect(() => {
|
|
245
|
+
if (rootWorkspaces.length === 0) {
|
|
246
|
+
selectedWorkspaceId = null;
|
|
247
|
+
}
|
|
248
|
+
else if (selectedWorkspaceId && !flatNavigationOrder.includes(selectedWorkspaceId)) {
|
|
249
|
+
// If currently selected workspace is no longer visible, reset to first visible
|
|
250
|
+
selectedWorkspaceId = flatNavigationOrder[0] || null;
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
// Enable keyboard navigation when user starts navigating
|
|
254
|
+
function enableKeyboardNavigation() {
|
|
255
|
+
if (!isKeyboardNavigation && rootWorkspaces.length > 0) {
|
|
256
|
+
isKeyboardNavigation = true;
|
|
257
|
+
if (!selectedWorkspaceId) {
|
|
258
|
+
selectedWorkspaceId = flatNavigationOrder[0] || null;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Handle mouse interactions - disable keyboard mode when mouse is used
|
|
263
|
+
function handleMouseEnter(workspaceId) {
|
|
264
|
+
if (isKeyboardNavigation) {
|
|
265
|
+
selectedWorkspaceId = workspaceId;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function handleMouseClick() {
|
|
269
|
+
isKeyboardNavigation = false;
|
|
270
|
+
selectedWorkspaceId = null;
|
|
271
|
+
}
|
|
272
|
+
// Scroll selected workspace into view
|
|
273
|
+
function scrollToSelectedWorkspace() {
|
|
274
|
+
if (!selectedWorkspaceId || !scrollContainer)
|
|
275
|
+
return;
|
|
276
|
+
// Find the workspace card element by data attribute
|
|
277
|
+
const selectedElement = scrollContainer.querySelector(`[data-workspace-id="${selectedWorkspaceId}"]`);
|
|
278
|
+
if (selectedElement) {
|
|
279
|
+
selectedElement.scrollIntoView({
|
|
280
|
+
behavior: 'smooth',
|
|
281
|
+
block: 'nearest'
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Auto-scroll when selection changes
|
|
286
|
+
$effect(() => {
|
|
287
|
+
if (selectedWorkspaceId && isKeyboardNavigation) {
|
|
288
|
+
scrollToSelectedWorkspace();
|
|
289
|
+
}
|
|
290
|
+
});
|
|
291
|
+
</script>
|
|
292
|
+
|
|
293
|
+
<svelte:window onkeydown={handleKeyDown} />
|
|
294
|
+
|
|
295
|
+
<!-- Search Items Component for fuzzy search with highlighting -->
|
|
296
|
+
<SearchItems
|
|
297
|
+
filter={searchFilter}
|
|
298
|
+
items={workspaces}
|
|
299
|
+
bind:filteredItems={filteredWorkspaces}
|
|
300
|
+
f={(workspace) => workspace.name + ' (' + workspace.id + ')'}
|
|
301
|
+
/>
|
|
302
|
+
|
|
303
|
+
<div class="space-y-4 max-h-[50vh] overflow-auto" bind:this={scrollContainer}>
|
|
304
|
+
<!-- Workspace Tree -->
|
|
305
|
+
<div class="space-y-2">
|
|
306
|
+
{#each rootWorkspaces as workspace (workspace.id)}
|
|
307
|
+
<WorkspaceCard
|
|
308
|
+
{workspace}
|
|
309
|
+
children={workspace._children || []}
|
|
310
|
+
isExpanded={expansionStates[workspace.id] ?? false}
|
|
311
|
+
{expansionStates}
|
|
312
|
+
{onEnterWorkspace}
|
|
313
|
+
{onUnarchive}
|
|
314
|
+
onToggleExpand={handleToggleExpand}
|
|
315
|
+
{selectedWorkspaceId}
|
|
316
|
+
onMouseEnter={handleMouseEnter}
|
|
317
|
+
onMouseClick={handleMouseClick}
|
|
318
|
+
onKeyboardNavigation={enableKeyboardNavigation}
|
|
319
|
+
/>
|
|
320
|
+
{/each}
|
|
321
|
+
|
|
322
|
+
{#if rootWorkspaces.length === 0}
|
|
323
|
+
<div class="text-center py-8">
|
|
324
|
+
<Building2 size={48} class="text-secondary mx-auto mb-3" />
|
|
325
|
+
<p class="text-sm text-secondary">
|
|
326
|
+
{searchFilter ? 'No workspaces match your search' : 'No workspaces available'}
|
|
327
|
+
</p>
|
|
328
|
+
</div>
|
|
329
|
+
{/if}
|
|
330
|
+
</div>
|
|
331
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { UserWorkspace } from '../../stores';
|
|
2
|
+
interface Props {
|
|
3
|
+
workspaces: UserWorkspace[];
|
|
4
|
+
onEnterWorkspace: (workspaceId: string) => Promise<void>;
|
|
5
|
+
onUnarchive?: (workspaceId: string) => Promise<void>;
|
|
6
|
+
searchFilter?: string;
|
|
7
|
+
onExpandCollapseAll?: () => void;
|
|
8
|
+
allExpanded?: boolean;
|
|
9
|
+
hasForks?: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare const WorkspaceTreeView: import("svelte").Component<Props, {
|
|
12
|
+
handleExpandCollapseAll: () => void;
|
|
13
|
+
}, "allExpanded" | "searchFilter" | "onExpandCollapseAll" | "hasForks">;
|
|
14
|
+
type WorkspaceTreeView = ReturnType<typeof WorkspaceTreeView>;
|
|
15
|
+
export default WorkspaceTreeView;
|
|
@@ -7,7 +7,7 @@ import Description from '../Description.svelte';
|
|
|
7
7
|
import Label from '../Label.svelte';
|
|
8
8
|
import ResourcePicker from '../ResourcePicker.svelte';
|
|
9
9
|
import Toggle from '../Toggle.svelte';
|
|
10
|
-
import
|
|
10
|
+
import Select from '../select/Select.svelte';
|
|
11
11
|
import Button from '../common/button/Button.svelte';
|
|
12
12
|
import MultiSelect from '../select/MultiSelect.svelte';
|
|
13
13
|
import { safeSelectItems } from '../select/utils.svelte';
|
|
@@ -15,10 +15,20 @@ import Badge from '../common/badge/Badge.svelte';
|
|
|
15
15
|
import Tooltip from '../Tooltip.svelte';
|
|
16
16
|
import ModelTokenLimits from './ModelTokenLimits.svelte';
|
|
17
17
|
import { setCopilotInfo } from '../../aiStore';
|
|
18
|
-
import
|
|
18
|
+
import AIPromptsModal from '../settings/AIPromptsModal.svelte';
|
|
19
|
+
import { Save, Settings } from 'lucide-svelte';
|
|
20
|
+
import { slide } from 'svelte/transition';
|
|
19
21
|
let { aiProviders = $bindable(), codeCompletionModel = $bindable(), defaultModel = $bindable(), customPrompts = $bindable(), maxTokensPerModel = $bindable(), usingOpenaiClientCredentialsOauth = $bindable(), onSave } = $props();
|
|
20
22
|
let fetchedAiModels = $state(false);
|
|
21
23
|
let availableAiModels = $state(Object.fromEntries(Object.keys(AI_PROVIDERS).map((provider) => [provider, AI_PROVIDERS[provider].defaultModels])));
|
|
24
|
+
let modalOpen = $state(false);
|
|
25
|
+
let initialPrompts = $state($state.snapshot(customPrompts));
|
|
26
|
+
let hasPromptsChanges = $derived(Array.from(new Set([...Object.keys(customPrompts), ...Object.keys(initialPrompts)])).some((key) => {
|
|
27
|
+
const currentValue = customPrompts[key] || '';
|
|
28
|
+
const initialValue = initialPrompts[key] || '';
|
|
29
|
+
return currentValue !== initialValue;
|
|
30
|
+
}));
|
|
31
|
+
let promptCount = $derived(Object.values(customPrompts).filter((p) => p?.trim().length > 0).length);
|
|
22
32
|
let selectedAiModels = $derived(Object.values(aiProviders).flatMap((p) => p.models));
|
|
23
33
|
let modelProviderMap = $derived(Object.fromEntries(Object.entries(aiProviders).flatMap(([provider, config]) => config.models.map((m) => [m, provider]))));
|
|
24
34
|
$effect(() => {
|
|
@@ -46,6 +56,10 @@ $effect(() => {
|
|
|
46
56
|
fetchedAiModels = true;
|
|
47
57
|
})();
|
|
48
58
|
});
|
|
59
|
+
function resetPrompts() {
|
|
60
|
+
customPrompts = { ...initialPrompts };
|
|
61
|
+
sendUserToast('Reset to last saved state');
|
|
62
|
+
}
|
|
49
63
|
async function editCopilotConfig() {
|
|
50
64
|
if (Object.keys(aiProviders ?? {}).length > 0) {
|
|
51
65
|
const code_completion_model = codeCompletionModel && modelProviderMap[codeCompletionModel]
|
|
@@ -78,7 +92,8 @@ async function editCopilotConfig() {
|
|
|
78
92
|
});
|
|
79
93
|
setCopilotInfo({});
|
|
80
94
|
}
|
|
81
|
-
sendUserToast(`
|
|
95
|
+
sendUserToast(`AI settings updated`);
|
|
96
|
+
initialPrompts = { ...customPrompts }; // Update initial prompts after successful save
|
|
82
97
|
onSave?.();
|
|
83
98
|
}
|
|
84
99
|
async function onAiProviderChange(provider) {
|
|
@@ -98,37 +113,36 @@ async function onAiProviderChange(provider) {
|
|
|
98
113
|
aiProviders[provider].models = availableAiModels[provider].slice(0, 1);
|
|
99
114
|
}
|
|
100
115
|
}
|
|
116
|
+
const autocompleteModels = $derived(selectedAiModels.filter((m) => m.startsWith('codestral-') && !m.startsWith('codestral-embed')));
|
|
101
117
|
</script>
|
|
102
118
|
|
|
103
|
-
<div class="flex flex-col gap-4
|
|
119
|
+
<div class="flex flex-col gap-4 mt-4">
|
|
104
120
|
<div class="flex flex-col gap-1">
|
|
105
|
-
<div class="text-emphasis text-sm font-semibold
|
|
121
|
+
<div class="text-emphasis text-sm font-semibold flex flex-row gap-2 justify-between">
|
|
122
|
+
Windmill AI <Button
|
|
123
|
+
variant="accent"
|
|
124
|
+
unifiedSize="md"
|
|
125
|
+
wrapperClasses="self-start"
|
|
126
|
+
disabled={!Object.values(aiProviders).every((p) => p.resource_path) ||
|
|
127
|
+
(codeCompletionModel != undefined && codeCompletionModel.length === 0) ||
|
|
128
|
+
(Object.keys(aiProviders).length > 0 && !defaultModel)}
|
|
129
|
+
onClick={editCopilotConfig}
|
|
130
|
+
startIcon={{ icon: Save }}
|
|
131
|
+
>
|
|
132
|
+
Save AI settings
|
|
133
|
+
</Button></div
|
|
134
|
+
>
|
|
106
135
|
<Description link="https://www.windmill.dev/docs/core_concepts/ai_generation">
|
|
107
136
|
Windmill AI integrates with your favorite AI providers and models.
|
|
108
137
|
</Description>
|
|
109
138
|
</div>
|
|
110
139
|
</div>
|
|
111
140
|
|
|
112
|
-
<div class="flex flex-
|
|
113
|
-
<
|
|
114
|
-
|
|
115
|
-
size="xl"
|
|
116
|
-
wrapperClasses="self-start"
|
|
117
|
-
disabled={!Object.values(aiProviders).every((p) => p.resource_path) ||
|
|
118
|
-
(codeCompletionModel != undefined && codeCompletionModel.length === 0) ||
|
|
119
|
-
(Object.keys(aiProviders).length > 0 && !defaultModel)}
|
|
120
|
-
on:click={editCopilotConfig}
|
|
121
|
-
>
|
|
122
|
-
Save
|
|
123
|
-
</Button>
|
|
124
|
-
</div>
|
|
125
|
-
|
|
126
|
-
<div class="flex flex-col gap-8">
|
|
127
|
-
<div class="flex flex-col gap-2">
|
|
128
|
-
<p class="font-semibold text-xs text-emphasis">AI Providers</p>
|
|
129
|
-
<div class="flex flex-col gap-4">
|
|
141
|
+
<div class="flex flex-col gap-8 mt-4">
|
|
142
|
+
<Label label="AI Providers">
|
|
143
|
+
<div class="flex flex-col gap-4 p-4 rounded-md border bg-surface-tertiary">
|
|
130
144
|
{#each Object.entries(AI_PROVIDERS) as [provider, details]}
|
|
131
|
-
<div class="flex flex-col
|
|
145
|
+
<div class="flex flex-col">
|
|
132
146
|
<div class="flex flex-row gap-2">
|
|
133
147
|
<Toggle
|
|
134
148
|
options={{
|
|
@@ -186,28 +200,33 @@ async function onAiProviderChange(provider) {
|
|
|
186
200
|
</div>
|
|
187
201
|
|
|
188
202
|
{#if aiProviders[provider]}
|
|
189
|
-
<div
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
203
|
+
<div
|
|
204
|
+
class="mb-4 flex flex-col gap-6 border p-4 rounded-md mt-2"
|
|
205
|
+
transition:slide|local={{ duration: 150 }}
|
|
206
|
+
>
|
|
207
|
+
<Label label="Resource">
|
|
208
|
+
<div class="flex flex-row gap-1">
|
|
209
|
+
<ResourcePicker
|
|
210
|
+
selectFirst
|
|
211
|
+
resourceType={provider === 'openai' && usingOpenaiClientCredentialsOauth
|
|
212
|
+
? 'openai_client_credentials_oauth'
|
|
213
|
+
: provider}
|
|
214
|
+
initialValue={aiProviders[provider].resource_path}
|
|
215
|
+
bind:value={
|
|
216
|
+
() => aiProviders[provider].resource_path || undefined,
|
|
217
|
+
(v) => {
|
|
218
|
+
aiProviders[provider].resource_path = v ?? ''
|
|
219
|
+
onAiProviderChange(provider as AIProvider)
|
|
220
|
+
}
|
|
202
221
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
</
|
|
222
|
+
/>
|
|
223
|
+
<TestAiKey
|
|
224
|
+
aiProvider={provider as AIProvider}
|
|
225
|
+
resourcePath={aiProviders[provider].resource_path}
|
|
226
|
+
model={aiProviders[provider].models[0]}
|
|
227
|
+
/>
|
|
228
|
+
</div>
|
|
229
|
+
</Label>
|
|
211
230
|
|
|
212
231
|
<Label label="Enabled models">
|
|
213
232
|
<MultiSelect
|
|
@@ -220,79 +239,98 @@ async function onAiProviderChange(provider) {
|
|
|
220
239
|
onCreateItem={(item) =>
|
|
221
240
|
(aiProviders[provider].models = [...aiProviders[provider].models, item])}
|
|
222
241
|
/>
|
|
242
|
+
<p class="text-2xs text-hint">
|
|
243
|
+
If you don't see the model you want, you can type it manually in the selector.
|
|
244
|
+
</p>
|
|
223
245
|
</Label>
|
|
224
|
-
<p class="text-xs">
|
|
225
|
-
If you don't see the model you want, you can type it manually in the selector.
|
|
226
|
-
</p>
|
|
227
246
|
</div>
|
|
228
247
|
{/if}
|
|
229
248
|
</div>
|
|
230
249
|
{/each}
|
|
231
250
|
</div>
|
|
232
|
-
</
|
|
251
|
+
</Label>
|
|
233
252
|
|
|
234
|
-
|
|
235
|
-
{
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
bind:value={defaultModel}
|
|
246
|
-
disabled={false}
|
|
247
|
-
autofocus={false}
|
|
248
|
-
defaultValue={undefined}
|
|
249
|
-
valid={true}
|
|
250
|
-
create={false}
|
|
251
|
-
/>
|
|
252
|
-
{/key}
|
|
253
|
-
</Label>
|
|
253
|
+
<Label label="Default chat model">
|
|
254
|
+
{#key Object.keys(aiProviders).length}
|
|
255
|
+
<Select
|
|
256
|
+
items={safeSelectItems(selectedAiModels)}
|
|
257
|
+
bind:value={defaultModel}
|
|
258
|
+
disabled={false}
|
|
259
|
+
placeholder="Select a default model"
|
|
260
|
+
size="sm"
|
|
261
|
+
/>
|
|
262
|
+
{/key}
|
|
263
|
+
</Label>
|
|
254
264
|
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
265
|
+
<!-- Code completion group for animation purposes -->
|
|
266
|
+
<div>
|
|
267
|
+
<Label label="Code completion">
|
|
268
|
+
<Toggle
|
|
269
|
+
on:change={(e) => {
|
|
270
|
+
if (e.detail) {
|
|
271
|
+
codeCompletionModel = autocompleteModels[0] ?? ''
|
|
272
|
+
} else {
|
|
273
|
+
codeCompletionModel = undefined
|
|
274
|
+
}
|
|
275
|
+
}}
|
|
276
|
+
checked={codeCompletionModel != undefined}
|
|
277
|
+
disabled={autocompleteModels.length == 0}
|
|
278
|
+
options={{
|
|
279
|
+
right: 'Enable code completion',
|
|
280
|
+
rightTooltip: 'We currently only support Mistral Codestral models for code completion.'
|
|
281
|
+
}}
|
|
282
|
+
/>
|
|
283
|
+
</Label>
|
|
272
284
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
</Label>
|
|
285
|
-
{/if}
|
|
286
|
-
</div>
|
|
285
|
+
{#if codeCompletionModel != undefined}
|
|
286
|
+
<div transition:slide|local={{ duration: 150 }} class="mt-6">
|
|
287
|
+
<Label label="Code completion model">
|
|
288
|
+
<Select
|
|
289
|
+
items={safeSelectItems(autocompleteModels)}
|
|
290
|
+
bind:value={codeCompletionModel}
|
|
291
|
+
disabled={false}
|
|
292
|
+
placeholder="Select a code completion model"
|
|
293
|
+
size="sm"
|
|
294
|
+
/>
|
|
295
|
+
</Label>
|
|
287
296
|
</div>
|
|
288
|
-
|
|
289
|
-
|
|
297
|
+
{/if}
|
|
298
|
+
</div>
|
|
299
|
+
|
|
300
|
+
<ModelTokenLimits {aiProviders} bind:maxTokensPerModel />
|
|
290
301
|
|
|
291
|
-
|
|
292
|
-
<
|
|
293
|
-
|
|
302
|
+
<Label label="Custom system prompts">
|
|
303
|
+
<p class="text-xs text-secondary">
|
|
304
|
+
Customize AI behavior with workspace-level system prompts. These apply to all workspace
|
|
305
|
+
members.
|
|
306
|
+
</p>
|
|
294
307
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
308
|
+
<div class="flex items-center gap-2 pt-1">
|
|
309
|
+
<Button
|
|
310
|
+
onclick={() => (modalOpen = true)}
|
|
311
|
+
variant="default"
|
|
312
|
+
unifiedSize="sm"
|
|
313
|
+
startIcon={{ icon: Settings }}
|
|
314
|
+
disabled={Object.keys(aiProviders ?? {}).length === 0}
|
|
315
|
+
>
|
|
316
|
+
Configure AI prompts
|
|
317
|
+
</Button>
|
|
318
|
+
{#if promptCount > 0}
|
|
319
|
+
<span class="text-xs text-secondary">({promptCount} configured)</span>
|
|
320
|
+
{/if}
|
|
321
|
+
{#if hasPromptsChanges}
|
|
322
|
+
<Badge color="yellow">Unsaved changes</Badge>
|
|
323
|
+
{/if}
|
|
324
|
+
</div>
|
|
325
|
+
</Label>
|
|
326
|
+
|
|
327
|
+
<div class="py-6"></div>
|
|
298
328
|
</div>
|
|
329
|
+
|
|
330
|
+
<AIPromptsModal
|
|
331
|
+
bind:open={modalOpen}
|
|
332
|
+
bind:customPrompts
|
|
333
|
+
onReset={resetPrompts}
|
|
334
|
+
hasChanges={hasPromptsChanges}
|
|
335
|
+
isWorkspaceSettings={true}
|
|
336
|
+
/>
|