@parallelworks/ui 0.18.0 → 0.19.1
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/README.md +86 -6
- package/dist/ai/adapter/memoryStore.d.ts +8 -0
- package/dist/ai/adapter/memoryStore.js +152 -0
- package/dist/ai/adapter/mock/index.d.ts +2 -0
- package/dist/ai/adapter/mock/index.js +3 -0
- package/dist/ai/adapter/mock/mockAdapter.d.ts +4 -0
- package/dist/ai/adapter/mock/mockAdapter.js +81 -0
- package/dist/ai/adapter/openai/createOpenAIStream.d.ts +9 -0
- package/dist/ai/adapter/openai/createOpenAIStream.js +33 -0
- package/dist/ai/adapter/openai/errors.d.ts +3 -0
- package/dist/ai/adapter/openai/errors.js +37 -0
- package/dist/ai/adapter/openai/index.d.ts +6 -0
- package/dist/ai/adapter/openai/index.js +6 -0
- package/dist/ai/adapter/openai/openaiAdapter.d.ts +9 -0
- package/dist/ai/adapter/openai/openaiAdapter.js +54 -0
- package/dist/ai/adapter/openai/responses.d.ts +4 -0
- package/dist/ai/adapter/openai/responses.js +108 -0
- package/dist/ai/adapter/openai/sse.d.ts +24 -0
- package/dist/ai/adapter/openai/sse.js +112 -0
- package/dist/ai/adapter/openai/wire.d.ts +40 -0
- package/dist/ai/adapter/types.d.ts +131 -0
- package/dist/ai/adapter/types.js +11 -0
- package/dist/ai/agent/classifier.d.ts +2 -0
- package/dist/ai/agent/classifier.js +12 -0
- package/dist/ai/agent/diff.d.ts +35 -0
- package/dist/ai/agent/diff.js +223 -0
- package/dist/ai/agent/diffHighlight.d.ts +6 -0
- package/dist/ai/agent/diffHighlight.js +101 -0
- package/dist/ai/agent/index.d.ts +6 -0
- package/dist/ai/agent/permissions.d.ts +11 -0
- package/dist/ai/agent/permissions.js +29 -0
- package/dist/ai/agent/toolfmt.d.ts +18 -0
- package/dist/ai/agent/toolfmt.js +383 -0
- package/dist/ai/agent/transcript.d.ts +38 -0
- package/dist/ai/agent/transcript.js +127 -0
- package/dist/ai/ai.css +325 -0
- package/dist/ai/components/AllocationSelector.d.ts +4 -0
- package/dist/ai/components/AllocationSelector.js +56 -0
- package/dist/ai/components/AttachmentManager.d.ts +1 -0
- package/dist/ai/components/AttachmentManager.js +144 -0
- package/dist/ai/components/AttachmentUpload.d.ts +24 -0
- package/dist/ai/components/AttachmentUpload.js +179 -0
- package/dist/ai/components/BlockedGroupBanner.d.ts +1 -0
- package/dist/ai/components/BlockedGroupBanner.js +29 -0
- package/dist/ai/components/BranchNavigator.d.ts +8 -0
- package/dist/ai/components/BranchNavigator.js +57 -0
- package/dist/ai/components/ChatEmptyState.d.ts +3 -0
- package/dist/ai/components/ChatEmptyState.js +171 -0
- package/dist/ai/components/ChatInput.d.ts +45 -0
- package/dist/ai/components/ChatInput.js +265 -0
- package/dist/ai/components/ChatLayout.d.ts +5 -0
- package/dist/ai/components/ChatLayout.js +15 -0
- package/dist/ai/components/ChatMessage.d.ts +24 -0
- package/dist/ai/components/ChatMessage.js +338 -0
- package/dist/ai/components/ChatMessageList.d.ts +35 -0
- package/dist/ai/components/ChatMessageList.js +301 -0
- package/dist/ai/components/ChatSidebar.d.ts +5 -0
- package/dist/ai/components/ChatSidebar.js +345 -0
- package/dist/ai/components/ChatThread.d.ts +3 -0
- package/dist/ai/components/ChatThread.js +198 -0
- package/dist/ai/components/ComposerChrome.d.ts +18 -0
- package/dist/ai/components/ComposerChrome.js +50 -0
- package/dist/ai/components/ComposerFrame.d.ts +16 -0
- package/dist/ai/components/ComposerFrame.js +33 -0
- package/dist/ai/components/DragOverlay.d.ts +5 -0
- package/dist/ai/components/DragOverlay.js +20 -0
- package/dist/ai/components/ModelSelector.d.ts +6 -0
- package/dist/ai/components/ModelSelector.js +343 -0
- package/dist/ai/components/ShareDialog.d.ts +11 -0
- package/dist/ai/components/ShareDialog.js +260 -0
- package/dist/ai/components/SlashMenu.d.ts +28 -0
- package/dist/ai/components/SlashMenu.js +91 -0
- package/dist/ai/components/agent/ActivityLine.d.ts +21 -0
- package/dist/ai/components/agent/ActivityLine.js +151 -0
- package/dist/ai/components/agent/AgentMessageParts.d.ts +54 -0
- package/dist/ai/components/agent/AgentMessageParts.js +721 -0
- package/dist/ai/components/agent/PermissionPicker.d.ts +11 -0
- package/dist/ai/components/agent/PermissionPicker.js +38 -0
- package/dist/ai/components/attachmentKeys.d.ts +4 -0
- package/dist/ai/components/attachmentKeys.js +10 -0
- package/dist/ai/core/ChatProvider.d.ts +66 -0
- package/dist/ai/core/ChatProvider.js +848 -0
- package/dist/ai/core/KeyboardShortcutsProvider.d.ts +5 -0
- package/dist/ai/core/KeyboardShortcutsProvider.js +9 -0
- package/dist/ai/core/chatReducer.d.ts +114 -0
- package/dist/ai/core/chatReducer.js +223 -0
- package/dist/ai/core/config.d.ts +47 -0
- package/dist/ai/core/config.js +45 -0
- package/dist/ai/core/events.d.ts +1 -0
- package/dist/ai/core/events.js +4 -0
- package/dist/ai/core/exportConversation.d.ts +4 -0
- package/dist/ai/core/exportConversation.js +42 -0
- package/dist/ai/core/greeting.d.ts +3 -0
- package/dist/ai/core/greeting.js +38 -0
- package/dist/ai/core/parts.d.ts +11 -0
- package/dist/ai/core/parts.js +84 -0
- package/dist/ai/core/useDragDrop.d.ts +14 -0
- package/dist/ai/core/useDragDrop.js +36 -0
- package/dist/ai/core/useKeyboardShortcuts.d.ts +12 -0
- package/dist/ai/core/useKeyboardShortcuts.js +77 -0
- package/dist/ai/core/useSSEStream.d.ts +34 -0
- package/dist/ai/core/useSSEStream.js +98 -0
- package/dist/ai/index.d.ts +40 -0
- package/dist/ai/index.js +44 -0
- package/dist/ai/strings.d.ts +167 -0
- package/dist/ai/strings.js +175 -0
- package/dist/ai/types.d.ts +236 -0
- package/dist/ai/ui/Avatar.d.ts +8 -0
- package/dist/ai/ui/Avatar.js +35 -0
- package/dist/ai/ui/Dropdown.d.ts +31 -0
- package/dist/ai/ui/Dropdown.js +110 -0
- package/dist/ai/ui/Markdown.d.ts +8 -0
- package/dist/ai/ui/Markdown.js +79 -0
- package/dist/ai/ui/Notice.d.ts +21 -0
- package/dist/ai/ui/Notice.js +77 -0
- package/dist/ai/ui/buttons.d.ts +1 -0
- package/dist/ai/ui/codeBreaks.d.ts +16 -0
- package/dist/ai/ui/codeBreaks.js +36 -0
- package/dist/ai/ui/prose.d.ts +1 -0
- package/dist/ai/ui/prose.js +13 -0
- package/dist/ai/ui/sidebar.d.ts +81 -0
- package/dist/ai/ui/sidebar.js +148 -0
- package/dist/ai/utils.d.ts +4 -0
- package/dist/ai/utils.js +23 -0
- package/dist/assets/{editor.worker-CuBRIwi-.js → editor.worker-BmHUIVG4.js} +194 -163
- package/dist/assets/{json.worker-8ytS02vz.js → json.worker-D8bJ92nw.js} +384 -338
- package/dist/assets/{yaml.worker-DJC-VUcv.js → yaml.worker-C4gyGAko.js} +15657 -13823
- package/dist/components/AddMenu.js +46 -0
- package/dist/components/Avatar.d.ts +1 -1
- package/dist/components/Avatar.js +46 -0
- package/dist/{chunks/BareModal-BtRiQezg.js → components/BareModal.js} +1 -1
- package/dist/components/Breadcrumbs.d.ts +1 -1
- package/dist/components/Breadcrumbs.js +83 -0
- package/dist/components/Button.js +83 -0
- package/dist/components/Callout.js +23 -0
- package/dist/components/Card.js +31 -0
- package/dist/components/CollapsiblePanel.js +77 -0
- package/dist/components/ConfirmModal.js +74 -0
- package/dist/components/CopyToClipboard.js +81 -0
- package/dist/{chunks/CreateModal-BY6DLmur.js → components/CreateModal.js} +10 -189
- package/dist/components/DescriptionList.js +42 -0
- package/dist/components/Dropdown.d.ts +1 -1
- package/dist/components/Dropdown.js +349 -0
- package/dist/components/EmptyState.d.ts +1 -1
- package/dist/components/EmptyState.js +27 -0
- package/dist/components/Filter.js +32 -0
- package/dist/components/FilterPill.js +13 -0
- package/dist/components/IconButton.js +34 -0
- package/dist/components/Indicator.d.ts +2 -2
- package/dist/{chunks/Indicator-hBSIxOPK.js → components/Indicator.js} +1 -1
- package/dist/components/Input.d.ts +1 -1
- package/dist/components/Input.js +88 -0
- package/dist/components/LetterBadge.d.ts +1 -1
- package/dist/components/LetterBadge.js +13 -0
- package/dist/components/Listbox.js +123 -0
- package/dist/{chunks/Loader-BXoXTZGc.js → components/Loader.js} +1 -1
- package/dist/components/Markdown.js +15 -0
- package/dist/components/MarkdownImpl.d.ts +1 -1
- package/dist/components/MultiSelect.js +171 -0
- package/dist/components/Overview.js +39 -0
- package/dist/components/PageHeader.js +194 -0
- package/dist/components/Pagination.js +35 -0
- package/dist/components/Provider.d.ts +16 -65
- package/dist/{chunks/Provider-Ghua9PkN.js → components/Provider.js} +54 -20
- package/dist/{chunks/RequiredMark-DfLdYbYZ.js → components/RequiredMark.js} +1 -1
- package/dist/components/SectionHeader.js +11 -0
- package/dist/components/SettingModeOption.js +30 -0
- package/dist/components/SettingRow.d.ts +1 -1
- package/dist/components/SettingRow.js +35 -0
- package/dist/components/SettingsCard.js +31 -0
- package/dist/components/SettingsGroup.d.ts +1 -1
- package/dist/components/SettingsGroup.js +17 -0
- package/dist/components/Sort.js +42 -0
- package/dist/components/StatusBadge.js +63 -0
- package/dist/components/SwitchToggle.js +59 -0
- package/dist/{chunks/SwitchToggleSmall-FcsaYSTs.js → components/SwitchToggleSmall.js} +1 -1
- package/dist/{chunks/Table-4OHjdKdO.js → components/Table.js} +7 -5
- package/dist/components/Toggle.js +20 -0
- package/dist/{chunks/Tooltip-Crxo_eU_.js → components/Tooltip.js} +6 -4
- package/dist/{chunks/StatusBadge-C1Blx_cW.js → components/dropdownUtils.js} +2 -63
- package/dist/components/focus.d.ts +2 -0
- package/dist/components/focus.js +7 -0
- package/dist/components/ghostButton.js +7 -0
- package/dist/components/inputClasses.js +4 -0
- package/dist/components/keys.d.ts +12 -0
- package/dist/components/keys.js +27 -0
- package/dist/components/relativeTime.js +32 -0
- package/dist/{chunks/useCssIsDark-DHr05dG2.js → components/useCssIsDark.js} +1 -1
- package/dist/duration.d.ts +3 -0
- package/dist/duration.js +17 -0
- package/dist/editor/Editor.js +13 -0
- package/dist/editor/EditorField.js +53 -0
- package/dist/editor/FormCodePanel.js +173 -0
- package/dist/editor/Monaco.d.ts +1 -20
- package/dist/editor/Monaco.js +112 -0
- package/dist/editor/index.d.ts +2 -1
- package/dist/editor/index.js +7 -2
- package/dist/editor/themes.js +91 -0
- package/dist/editor/workers.js +29 -0
- package/dist/editor/yaml.d.ts +5 -0
- package/dist/editor/yaml.js +15 -0
- package/dist/engine.d.ts +98 -0
- package/dist/file-explorer/FileExplorer.d.ts +11 -2
- package/dist/file-explorer/FileExplorer.js +1402 -0
- package/dist/file-explorer/FileExplorerContext.d.ts +1 -1
- package/dist/file-explorer/FileExplorerContext.js +370 -0
- package/dist/file-explorer/FilePreview/CodePreviewEditor.d.ts +1 -1
- package/dist/{chunks/CodePreviewEditor-4lx3kE-w.js → file-explorer/FilePreview/CodePreviewEditor.js} +3 -2
- package/dist/file-explorer/FilePreview/Inline.js +45 -0
- package/dist/file-explorer/FilePreview/StreamedBadge.js +16 -0
- package/dist/file-explorer/FilePreview/Viewer.js +526 -0
- package/dist/file-explorer/FilePreview/index.js +266 -0
- package/dist/file-explorer/FilePreview/parse.js +63 -0
- package/dist/file-explorer/FilePreview/previewCache.js +98 -0
- package/dist/file-explorer/FilePreview/previewType.d.ts +1 -1
- package/dist/file-explorer/FilePreview/previewType.js +151 -0
- package/dist/file-explorer/FilePreview/readCappedBytes.js +196 -0
- package/dist/file-explorer/FilePreview/useObjectBlobUrl.js +95 -0
- package/dist/file-explorer/FilePreview/useObjectText.js +109 -0
- package/dist/file-explorer/FilePreview/usePresignedUrl.js +73 -0
- package/dist/file-explorer/FileRow.d.ts +1 -1
- package/dist/file-explorer/FileRow.js +165 -0
- package/dist/file-explorer/FileRowsWindow.js +92 -0
- package/dist/file-explorer/FileTable.js +172 -0
- package/dist/file-explorer/FileTableHeaders.js +49 -0
- package/dist/file-explorer/LoadMoreRow.js +46 -0
- package/dist/file-explorer/TreeView.js +376 -0
- package/dist/file-explorer/helpers.d.ts +4 -4
- package/dist/file-explorer/helpers.js +537 -0
- package/dist/file-explorer/index.d.ts +3 -3
- package/dist/file-explorer/index.js +7 -5705
- package/dist/file-explorer/lib/batch.js +39 -0
- package/dist/file-explorer/lib/errors.js +9 -0
- package/dist/file-explorer/lib/paging.js +124 -0
- package/dist/file-explorer/lib/types.d.ts +6 -1
- package/dist/file-explorer/lib/utils.d.ts +1 -3
- package/dist/file-explorer/lib/utils.js +322 -0
- package/dist/file-explorer/toasts.js +400 -0
- package/dist/file-explorer/treeRows.js +73 -0
- package/dist/file-explorer/useNearEnd.d.ts +1 -1
- package/dist/file-explorer/useNearEnd.js +27 -0
- package/dist/form/FieldWrapper.d.ts +2 -2
- package/dist/form/FieldWrapper.js +54 -0
- package/dist/form/Fields/BooleanField.js +51 -0
- package/dist/form/Fields/CheckboxGroupField.js +72 -0
- package/dist/form/Fields/ColorField.js +33 -0
- package/dist/form/Fields/DropdownField.js +49 -0
- package/dist/form/Fields/DurationField.js +130 -0
- package/dist/form/Fields/LabelField.js +19 -0
- package/dist/form/Fields/MultiDropdownField.js +40 -0
- package/dist/form/Fields/NumberField.js +51 -0
- package/dist/form/Fields/ObjectField.js +54 -0
- package/dist/form/Fields/RadioField.js +49 -0
- package/dist/form/Fields/RangeField.js +58 -0
- package/dist/form/Fields/ResourceOptionIcon.d.ts +1 -1
- package/dist/form/Fields/ResourceOptionIcon.js +21 -0
- package/dist/form/Fields/StepField.js +6 -0
- package/dist/form/Fields/StringField.js +37 -0
- package/dist/form/Fields/TextAreaField.js +31 -0
- package/dist/form/Fields/durationValidity.js +11 -0
- package/dist/form/Form.d.ts +4 -21
- package/dist/form/Form.js +643 -0
- package/dist/form/SpecialTypes/DropdownWrapper.js +30 -0
- package/dist/form/SpecialTypes/FormikCustomDropdown.js +122 -0
- package/dist/form/SpecialTypes/FormikCustomInput.js +111 -0
- package/dist/form/SpecialTypes/FormikMultiSelectDropdown.js +31 -0
- package/dist/form/SpecialTypes/FormikNumericInput.js +60 -0
- package/dist/form/Wizard/WizardContainer.js +138 -0
- package/dist/form/Wizard/WizardNavigation.js +92 -0
- package/dist/form/Wizard/WizardStepContent.js +35 -0
- package/dist/form/Wizard/WizardStepIndicator.js +108 -0
- package/dist/form/Wizard/useWizardState.js +118 -0
- package/dist/form/Wizard/utils.js +34 -0
- package/dist/form/fieldContext.js +26 -0
- package/dist/form/fieldRegistry.js +50 -0
- package/dist/form/index.d.ts +11 -12
- package/dist/form/index.js +18 -2445
- package/dist/form/lib.d.ts +6 -1
- package/dist/{chunks/FieldWrapper-Bef01EWO.js → form/lib.js} +5 -104
- package/dist/form/types/fieldComponentTypes.d.ts +3 -2
- package/dist/form/types/fieldTypes.d.ts +6 -20
- package/dist/form/useParsedOpts.d.ts +1 -1
- package/dist/form/useParsedOpts.js +62 -0
- package/dist/form/usePrevious.js +11 -0
- package/dist/form/utils/checkShowIfObject.js +14 -0
- package/dist/form/utils/{slurmDuration.d.ts → duration.d.ts} +2 -2
- package/dist/form/utils/duration.js +69 -0
- package/dist/form/utils/getParentValue.js +23 -0
- package/dist/form/utils/getPlaceholder.js +9 -0
- package/dist/form/utils/getValueUsingPath.js +23 -0
- package/dist/form/utils/secondaryField.js +22 -0
- package/dist/graph/AnnotationBanner.js +141 -0
- package/dist/graph/Collapse.js +41 -0
- package/dist/{workflow/index.js → graph/DependencyGraph.js} +76 -1163
- package/dist/graph/JobSummary.js +104 -0
- package/dist/{workflow → graph}/MatrixGroup.d.ts +2 -2
- package/dist/graph/MatrixGroup.js +107 -0
- package/dist/graph/Reveal.js +57 -0
- package/dist/graph/TreeView.js +711 -0
- package/dist/{workflow → graph}/index.d.ts +1 -1
- package/dist/graph/index.js +2 -0
- package/dist/{workflow → graph}/types.d.ts +3 -3
- package/dist/graph/types.js +6 -0
- package/dist/icons.d.ts +20 -21
- package/dist/index.d.ts +38 -40
- package/dist/index.js +47 -599
- package/dist/list/ActionToolbar.js +184 -0
- package/dist/list/HoverCard.js +73 -0
- package/dist/list/ListPage.js +145 -0
- package/dist/list/ListPager.js +59 -0
- package/dist/list/ListTable.d.ts +1 -1
- package/dist/list/ListTable.js +163 -0
- package/dist/list/ListViewControls.d.ts +2 -2
- package/dist/list/ListViewControls.js +372 -0
- package/dist/list/RowContextMenu.js +350 -0
- package/dist/list/UserHoverCard.js +117 -0
- package/dist/list/index.d.ts +9 -9
- package/dist/list/index.js +11 -2
- package/dist/list/listSearch.js +137 -0
- package/dist/list/listView.js +210 -0
- package/dist/list/textEntry.js +10 -0
- package/dist/logviewer/LogViewer.d.ts +1 -1
- package/dist/logviewer/LogViewer.js +750 -0
- package/dist/logviewer/index.d.ts +1 -0
- package/dist/logviewer/index.js +3 -742
- package/dist/logviewer/segments.d.ts +9 -0
- package/dist/logviewer/segments.js +80 -0
- package/dist/styles/fonts.css +4 -4
- package/dist/styles/theme.css +6 -4
- package/dist/styles.css +1 -1
- package/dist/theme/index.js +2 -2
- package/package.json +38 -14
- package/LICENSE +0 -202
- package/dist/chunks/Monaco-C1POOdVv.js +0 -1046
- package/dist/chunks/PageHeader-l49p1nM9.js +0 -690
- package/dist/chunks/SwitchToggle-CHPP8uZQ.js +0 -755
- package/dist/chunks/editor-9_uVtUyy.js +0 -347
- package/dist/chunks/list-qrojZZNv.js +0 -1411
- package/dist/editor/usesGitlab.d.ts +0 -97
- package/dist/form/Fields/BucketReadOnlyField.d.ts +0 -7
- package/dist/form/types/workflow-schema.d.ts +0 -1145
- package/dist/form/utils/pwResolver.d.ts +0 -18
- package/dist/{chunks/MarkdownImpl-Bq4QhrtA.js → components/MarkdownImpl.js} +1 -1
- /package/dist/{workflow → graph}/AnnotationBanner.d.ts +0 -0
- /package/dist/{workflow → graph}/Collapse.d.ts +0 -0
- /package/dist/{workflow → graph}/DependencyGraph.d.ts +0 -0
- /package/dist/{workflow → graph}/JobSummary.d.ts +0 -0
- /package/dist/{workflow → graph}/Reveal.d.ts +0 -0
- /package/dist/{workflow → graph}/TreeView.d.ts +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { useNotify, useStrings, useWorkflowEngine } from "../components/Provider.js";
|
|
2
|
+
import { CheckIcon, CopyIcon, EyeIcon, EyeOffIcon } from "../icons.js";
|
|
3
|
+
import SwitchToggleSmall from "../components/SwitchToggleSmall.js";
|
|
4
|
+
import Editor from "./Editor.js";
|
|
5
|
+
import { flattenGroups, impureSetValueFromPath } from "../form/lib.js";
|
|
6
|
+
import cx from "classnames";
|
|
7
|
+
import { useId, useRef, useState } from "react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region src/editor/FormCodePanel.tsx
|
|
10
|
+
var isObject = (value) => typeof value === "object" && value !== null;
|
|
11
|
+
var shouldIgnoreField = (engine, fieldSchema, inputs, arrayIndex) => {
|
|
12
|
+
if (!fieldSchema?.["ignore"] || !fieldSchema?.["hidden"]) return false;
|
|
13
|
+
if (!engine.isReady()) return false;
|
|
14
|
+
return engine.evaluate({
|
|
15
|
+
inputs,
|
|
16
|
+
obj: engine.convertInputs(fieldSchema),
|
|
17
|
+
index: arrayIndex ?? -1
|
|
18
|
+
})["hidden"] === true;
|
|
19
|
+
};
|
|
20
|
+
var filterFields = (engine, formJSON, data, prefix, rootData, arrayIndex) => {
|
|
21
|
+
const filteredFields = [];
|
|
22
|
+
return {
|
|
23
|
+
filteredFields,
|
|
24
|
+
filtered: Object.keys(data).reduce((acc, key) => {
|
|
25
|
+
const value = data[key];
|
|
26
|
+
const fieldSchema = formJSON[key];
|
|
27
|
+
if (value !== null && Array.isArray(value)) {
|
|
28
|
+
const items = [];
|
|
29
|
+
acc[key] = items;
|
|
30
|
+
if (!fieldSchema) return acc;
|
|
31
|
+
const nestedSchema = isObject(fieldSchema) ? fieldSchema["options"] : void 0;
|
|
32
|
+
for (let i = 0; i < value.length; i++) {
|
|
33
|
+
let filteredFieldsNested = [];
|
|
34
|
+
let filteredNested = {};
|
|
35
|
+
const item = value[i];
|
|
36
|
+
if (isObject(item)) {
|
|
37
|
+
const result = filterFields(engine, isObject(nestedSchema) ? nestedSchema : {}, item, key + `[${i}].`, rootData || data, i);
|
|
38
|
+
filteredNested = result.filtered;
|
|
39
|
+
filteredFieldsNested = result.filteredFields;
|
|
40
|
+
} else filteredNested = item;
|
|
41
|
+
filteredFields.push(...filteredFieldsNested);
|
|
42
|
+
items[i] = filteredNested;
|
|
43
|
+
}
|
|
44
|
+
return acc;
|
|
45
|
+
}
|
|
46
|
+
if (fieldSchema && isObject(value)) {
|
|
47
|
+
const { filteredFields: filteredFieldsNested, filtered: filteredNested } = filterFields(engine, isObject(fieldSchema) ? fieldSchema : {}, value, key + ".", rootData || data, arrayIndex);
|
|
48
|
+
filteredFields.push(...filteredFieldsNested);
|
|
49
|
+
acc[key] = filteredNested;
|
|
50
|
+
return acc;
|
|
51
|
+
}
|
|
52
|
+
if (isObject(fieldSchema) && fieldSchema["sensitive"]) {
|
|
53
|
+
const name = prefix ? prefix + key : key;
|
|
54
|
+
filteredFields.push({
|
|
55
|
+
key: name,
|
|
56
|
+
value
|
|
57
|
+
});
|
|
58
|
+
return acc;
|
|
59
|
+
}
|
|
60
|
+
const contextData = rootData || data;
|
|
61
|
+
if (isObject(fieldSchema) && shouldIgnoreField(engine, fieldSchema, contextData, arrayIndex)) return acc;
|
|
62
|
+
acc[key] = value;
|
|
63
|
+
return acc;
|
|
64
|
+
}, {})
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
var populateFiltered = (filteredFields, data) => {
|
|
68
|
+
filteredFields.forEach((element) => {
|
|
69
|
+
impureSetValueFromPath(data, element.key, element.value);
|
|
70
|
+
});
|
|
71
|
+
return data;
|
|
72
|
+
};
|
|
73
|
+
function FormCodePanel({ formJSON, data, mutate, height = "600px", disabled = false }) {
|
|
74
|
+
const engine = useWorkflowEngine();
|
|
75
|
+
const notify = useNotify();
|
|
76
|
+
const { common: t } = useStrings();
|
|
77
|
+
const uid = useId();
|
|
78
|
+
const [jsonHasErrors, setJsonHasErrors] = useState(false);
|
|
79
|
+
const [showHidden, setShowHidden] = useState(false);
|
|
80
|
+
const [copied, setCopied] = useState(false);
|
|
81
|
+
const copyResetRef = useRef(void 0);
|
|
82
|
+
const isValidJson = (errors) => {
|
|
83
|
+
setJsonHasErrors(errors.length > 0);
|
|
84
|
+
};
|
|
85
|
+
const { filteredFields, filtered } = filterFields(engine, flattenGroups(formJSON), data || {});
|
|
86
|
+
const hasHiddenFields = filteredFields.length > 0;
|
|
87
|
+
const displayObj = showHidden && hasHiddenFields ? populateFiltered(filteredFields, structuredClone(filtered)) : filtered;
|
|
88
|
+
const showHiddenRef = useRef(showHidden);
|
|
89
|
+
showHiddenRef.current = showHidden;
|
|
90
|
+
const filteredFieldsRef = useRef(filteredFields);
|
|
91
|
+
filteredFieldsRef.current = filteredFields;
|
|
92
|
+
const json = JSON.stringify(displayObj, null, 2);
|
|
93
|
+
const handleCopy = async () => {
|
|
94
|
+
try {
|
|
95
|
+
await navigator.clipboard.writeText(json);
|
|
96
|
+
setCopied(true);
|
|
97
|
+
clearTimeout(copyResetRef.current);
|
|
98
|
+
copyResetRef.current = setTimeout(() => setCopied(false), 2e3);
|
|
99
|
+
} catch {
|
|
100
|
+
notify.error(t.copyFailed);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
104
|
+
style: { height },
|
|
105
|
+
className: "flex w-full flex-col gap-2",
|
|
106
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
107
|
+
className: cx("flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border", jsonHasErrors ? "border-red-500" : "border-(--theme-border)"),
|
|
108
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
109
|
+
className: "bg-(--theme-muted-panel-bg) text-(--theme-muted-panel-color) flex shrink-0 items-center gap-3 border-b border-(--theme-border) px-3 py-2",
|
|
110
|
+
children: [hasHiddenFields && /* @__PURE__ */ jsxs("label", {
|
|
111
|
+
htmlFor: `${uid}-show-hidden`,
|
|
112
|
+
title: t.showHiddenFieldsHint,
|
|
113
|
+
className: "flex cursor-pointer select-none items-center gap-2 text-sm text-(--theme-app)",
|
|
114
|
+
children: [/* @__PURE__ */ jsx(SwitchToggleSmall, {
|
|
115
|
+
id: `${uid}-show-hidden`,
|
|
116
|
+
value: showHidden,
|
|
117
|
+
"aria-label": t.showHiddenFields,
|
|
118
|
+
onClick: () => setShowHidden((prev) => !prev)
|
|
119
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
120
|
+
className: "flex items-center gap-1.5",
|
|
121
|
+
children: [showHidden ? /* @__PURE__ */ jsx(EyeIcon, {}) : /* @__PURE__ */ jsx(EyeOffIcon, {}), t.showHiddenFields]
|
|
122
|
+
})]
|
|
123
|
+
}), /* @__PURE__ */ jsxs("button", {
|
|
124
|
+
type: "button",
|
|
125
|
+
onClick: handleCopy,
|
|
126
|
+
"aria-label": copied ? t.copied : t.copy,
|
|
127
|
+
className: "ml-auto flex shrink-0 items-center gap-1.5 rounded-md border border-(--theme-border) px-2.5 py-1.5 text-sm text-(--theme-app) transition-colors duration-150 hover:bg-(--theme-hover) focus:outline-none focus-visible:ring-2 focus-visible:ring-(--theme-link)",
|
|
128
|
+
children: [copied ? /* @__PURE__ */ jsx(CheckIcon, { className: "text-green-500" }) : /* @__PURE__ */ jsx(CopyIcon, { className: "text-(--theme-muted-text-color)" }), copied ? t.copied : t.copy]
|
|
129
|
+
})]
|
|
130
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
131
|
+
className: "min-h-0 flex-1",
|
|
132
|
+
children: /* @__PURE__ */ jsx(Editor, {
|
|
133
|
+
height: "100%",
|
|
134
|
+
value: json,
|
|
135
|
+
onValidate: isValidJson,
|
|
136
|
+
className: "!rounded-none !border-0",
|
|
137
|
+
minimap: { enabled: false },
|
|
138
|
+
scrollBeyondLastLine: false,
|
|
139
|
+
overviewRulerLanes: 0,
|
|
140
|
+
overviewRulerBorder: false,
|
|
141
|
+
lineNumbersMinChars: 3,
|
|
142
|
+
lineDecorationsWidth: 8,
|
|
143
|
+
renderLineHighlight: "none",
|
|
144
|
+
padding: {
|
|
145
|
+
top: 12,
|
|
146
|
+
bottom: 12
|
|
147
|
+
},
|
|
148
|
+
fontSize: 13,
|
|
149
|
+
scrollbar: {
|
|
150
|
+
verticalScrollbarSize: 10,
|
|
151
|
+
horizontalScrollbarSize: 10
|
|
152
|
+
},
|
|
153
|
+
onChange: (e) => {
|
|
154
|
+
try {
|
|
155
|
+
const parsed = JSON.parse(e);
|
|
156
|
+
if (!isObject(parsed)) return;
|
|
157
|
+
mutate(showHiddenRef.current ? parsed : populateFiltered(filteredFieldsRef.current, parsed));
|
|
158
|
+
} catch {
|
|
159
|
+
console.log("JSON.parse error in form code editor");
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
language: "json",
|
|
163
|
+
disabled
|
|
164
|
+
})
|
|
165
|
+
})]
|
|
166
|
+
}), jsonHasErrors && /* @__PURE__ */ jsx("p", {
|
|
167
|
+
className: "shrink-0 text-sm text-red-500",
|
|
168
|
+
children: t.jsonHasErrors
|
|
169
|
+
})]
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//#endregion
|
|
173
|
+
export { FormCodePanel as default };
|
package/dist/editor/Monaco.d.ts
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
1
|
import * as monaco from 'monaco-editor';
|
|
2
|
-
export interface EditorMarketplaceItem {
|
|
3
|
-
readonly slug?: string;
|
|
4
|
-
readonly name?: string | null;
|
|
5
|
-
readonly description?: string | null;
|
|
6
|
-
readonly type?: string | null;
|
|
7
|
-
readonly subtype?: string | null;
|
|
8
|
-
readonly versions?: readonly string[] | null;
|
|
9
|
-
}
|
|
10
|
-
export interface EditorWorkflowItem {
|
|
11
|
-
readonly name?: string;
|
|
12
|
-
readonly displayName?: string | null;
|
|
13
|
-
readonly description?: string | null;
|
|
14
|
-
readonly type?: string | null;
|
|
15
|
-
}
|
|
16
|
-
type MarketplaceItem = EditorMarketplaceItem;
|
|
17
|
-
type WorkflowItem = EditorWorkflowItem;
|
|
18
2
|
export type ISchemaError = monaco.editor.IMarker;
|
|
19
3
|
export interface IEditorProps extends monaco.editor.IStandaloneEditorConstructionOptions {
|
|
20
4
|
className?: string;
|
|
@@ -24,8 +8,5 @@ export interface IEditorProps extends monaco.editor.IStandaloneEditorConstructio
|
|
|
24
8
|
width?: string | number;
|
|
25
9
|
height?: string | number;
|
|
26
10
|
path?: 'file:///workflow.yaml' | string;
|
|
27
|
-
marketplaceItems?: MarketplaceItem[];
|
|
28
|
-
workflows?: WorkflowItem[];
|
|
29
11
|
}
|
|
30
|
-
export default function MonacoEditor({ className, disabled, onChange, onValidate, width, height, path,
|
|
31
|
-
export {};
|
|
12
|
+
export default function MonacoEditor({ className, disabled, onChange, onValidate, width, height, path, ...options }: IEditorProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { useCssIsDark } from "../components/useCssIsDark.js";
|
|
2
|
+
import { defineEditorThemes, getThemeName } from "./themes.js";
|
|
3
|
+
import { setupMonacoWorkers } from "./workers.js";
|
|
4
|
+
import { onYamlSchemas } from "./yaml.js";
|
|
5
|
+
import cx from "classnames";
|
|
6
|
+
import { useEffect, useLayoutEffect, useRef } from "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
import * as monaco from "monaco-editor";
|
|
9
|
+
import { configureMonacoYaml } from "monaco-yaml";
|
|
10
|
+
//#region src/editor/Monaco.tsx
|
|
11
|
+
setupMonacoWorkers();
|
|
12
|
+
var monacoWithWorkerBridge = {
|
|
13
|
+
...monaco,
|
|
14
|
+
editor: {
|
|
15
|
+
...monaco.editor,
|
|
16
|
+
createWebWorker: (opts) => "worker" in opts ? monaco.editor.createWebWorker(opts) : monaco.createWebWorker(opts)
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
var monacoYamlConfigured = false;
|
|
20
|
+
function ensureMonacoYamlConfigured() {
|
|
21
|
+
if (monacoYamlConfigured) return;
|
|
22
|
+
monacoYamlConfigured = true;
|
|
23
|
+
const options = (schemas) => ({
|
|
24
|
+
enableSchemaRequest: true,
|
|
25
|
+
completion: true,
|
|
26
|
+
validate: true,
|
|
27
|
+
hover: true,
|
|
28
|
+
format: { enable: true },
|
|
29
|
+
schemas
|
|
30
|
+
});
|
|
31
|
+
const monacoYaml = configureMonacoYaml(monacoWithWorkerBridge, options([]));
|
|
32
|
+
onYamlSchemas((schemas) => monacoYaml.update(options(schemas)));
|
|
33
|
+
}
|
|
34
|
+
function editorText(value) {
|
|
35
|
+
return value.replace(/\r/g, "");
|
|
36
|
+
}
|
|
37
|
+
var noop = () => {};
|
|
38
|
+
function MonacoEditor({ className, disabled, onChange = noop, onValidate = noop, width = "100%", height = "100%", path = "file:///default", ...options }) {
|
|
39
|
+
const isDark = useCssIsDark();
|
|
40
|
+
const readOnly = disabled || options.readOnly;
|
|
41
|
+
const monacoRef = useRef(null);
|
|
42
|
+
const isSyncingValueRef = useRef(false);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (!monacoRef.current) return;
|
|
45
|
+
defineEditorThemes(monaco.editor);
|
|
46
|
+
monaco.editor.setTheme(getThemeName(isDark, disabled));
|
|
47
|
+
monacoRef.current.updateOptions(readOnly === void 0 ? {} : { readOnly });
|
|
48
|
+
}, [
|
|
49
|
+
disabled,
|
|
50
|
+
isDark,
|
|
51
|
+
readOnly
|
|
52
|
+
]);
|
|
53
|
+
useLayoutEffect(() => {
|
|
54
|
+
const model = monacoRef.current?.getModel();
|
|
55
|
+
if (!model || options.value === void 0 || editorText(model.getValue()) === editorText(options.value)) return;
|
|
56
|
+
isSyncingValueRef.current = true;
|
|
57
|
+
try {
|
|
58
|
+
model.setValue(options.value);
|
|
59
|
+
} finally {
|
|
60
|
+
isSyncingValueRef.current = false;
|
|
61
|
+
}
|
|
62
|
+
}, [options.value]);
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
return () => {
|
|
65
|
+
monacoRef.current?.dispose();
|
|
66
|
+
monacoRef.current = null;
|
|
67
|
+
};
|
|
68
|
+
}, []);
|
|
69
|
+
/** Strips CR (\r) — Windows line endings break bash scripts. */
|
|
70
|
+
const onChangeWrapper = (value) => {
|
|
71
|
+
value = editorText(value);
|
|
72
|
+
onChange(value);
|
|
73
|
+
};
|
|
74
|
+
return /* @__PURE__ */ jsx("div", {
|
|
75
|
+
style: {
|
|
76
|
+
width,
|
|
77
|
+
height
|
|
78
|
+
},
|
|
79
|
+
className: cx("relative border rounded", className),
|
|
80
|
+
ref: (ref) => {
|
|
81
|
+
if (ref && !monacoRef.current) {
|
|
82
|
+
monaco.editor.getModel(monaco.Uri.parse(path))?.dispose();
|
|
83
|
+
defineEditorThemes(monaco.editor);
|
|
84
|
+
monaco.editor.setTheme(getThemeName(isDark, disabled));
|
|
85
|
+
const model = monaco.editor.createModel(options.value ?? "", options.language, monaco.Uri.parse(path));
|
|
86
|
+
const editor = monaco.editor.create(ref, {
|
|
87
|
+
automaticLayout: true,
|
|
88
|
+
model,
|
|
89
|
+
...options,
|
|
90
|
+
...readOnly === void 0 ? {} : { readOnly },
|
|
91
|
+
fixedOverflowWidgets: true,
|
|
92
|
+
suggest: {
|
|
93
|
+
preview: true,
|
|
94
|
+
showWords: false,
|
|
95
|
+
showInlineDetails: true
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
model.onDidChangeContent(() => {
|
|
99
|
+
if (isSyncingValueRef.current) return;
|
|
100
|
+
onChangeWrapper(editor.getValue());
|
|
101
|
+
});
|
|
102
|
+
model.onDidChangeDecorations(() => {
|
|
103
|
+
onValidate(monaco.editor.getModelMarkers({ resource: model.uri }));
|
|
104
|
+
});
|
|
105
|
+
ensureMonacoYamlConfigured();
|
|
106
|
+
monacoRef.current = editor;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
112
|
+
export { MonacoEditor as default };
|
package/dist/editor/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { default as Editor } from './Editor.js';
|
|
2
2
|
export { default as EditorField, type IEditorField } from './EditorField.js';
|
|
3
3
|
export { default as FormCodePanel } from './FormCodePanel.js';
|
|
4
|
-
export type {
|
|
4
|
+
export type { IEditorProps, ISchemaError } from './Monaco.js';
|
|
5
5
|
export { defineEditorThemes, getThemeName } from './themes.js';
|
|
6
6
|
export { setupMonacoWorkers } from './workers.js';
|
|
7
|
+
export { configureEditorYaml } from './yaml.js';
|
package/dist/editor/index.js
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import Editor from "./Editor.js";
|
|
2
|
+
import EditorField from "./EditorField.js";
|
|
3
|
+
import FormCodePanel from "./FormCodePanel.js";
|
|
4
|
+
import { defineEditorThemes, getThemeName } from "./themes.js";
|
|
5
|
+
import { setupMonacoWorkers } from "./workers.js";
|
|
6
|
+
import { configureEditorYaml } from "./yaml.js";
|
|
7
|
+
export { Editor, EditorField, FormCodePanel, configureEditorYaml, defineEditorThemes, getThemeName, setupMonacoWorkers };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
//#region src/editor/themes.ts
|
|
2
|
+
function expandShorthandHex(color) {
|
|
3
|
+
return /^#([0-9a-fA-F]{3,4})$/.test(color) ? "#" + color.slice(1).split("").map((c) => c + c).join("") : color;
|
|
4
|
+
}
|
|
5
|
+
function normalizeThemeColors(colors) {
|
|
6
|
+
return Object.fromEntries(Object.entries(colors).map(([key, value]) => [key, expandShorthandHex(value)]));
|
|
7
|
+
}
|
|
8
|
+
function themeVar(name, fallback) {
|
|
9
|
+
if (typeof window === "undefined") return fallback;
|
|
10
|
+
return getComputedStyle(document.documentElement).getPropertyValue(name).trim() || fallback;
|
|
11
|
+
}
|
|
12
|
+
function createEditorThemes() {
|
|
13
|
+
const dark = {
|
|
14
|
+
foreground: themeVar("--theme-app", "#e6edf3"),
|
|
15
|
+
background: themeVar("--theme-panel-bg", "#161b22"),
|
|
16
|
+
border: themeVar("--theme-border", "#30363d"),
|
|
17
|
+
lineHighlight: themeVar("--theme-muted-panel-bg", "#21262d"),
|
|
18
|
+
lineNumber: themeVar("--theme-muted-text-color", "#8b949e"),
|
|
19
|
+
selection: themeVar("--theme-element", "#2f81f7"),
|
|
20
|
+
selectionFg: themeVar("--theme-element-text", "#ffffff"),
|
|
21
|
+
disabledBg: themeVar("--theme-input-disabled-bg", "#1c2128"),
|
|
22
|
+
disabledFg: themeVar("--theme-muted-text-color", "#8b949e")
|
|
23
|
+
};
|
|
24
|
+
const light = {
|
|
25
|
+
disabledBg: themeVar("--theme-input-disabled-bg", "#f3f4f6"),
|
|
26
|
+
disabledFg: themeVar("--theme-muted-text-color", "#5f6b76"),
|
|
27
|
+
border: themeVar("--theme-border", "#d1d5db"),
|
|
28
|
+
selection: themeVar("--theme-element", "#2f81f7"),
|
|
29
|
+
selectionFg: themeVar("--theme-element-text", "#ffffff")
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
"app-dark": {
|
|
33
|
+
base: "vs-dark",
|
|
34
|
+
inherit: true,
|
|
35
|
+
rules: [],
|
|
36
|
+
colors: {
|
|
37
|
+
"editor.foreground": dark.foreground,
|
|
38
|
+
"editor.background": dark.background,
|
|
39
|
+
"editor.border": dark.border,
|
|
40
|
+
"editorCursor.foreground": dark.foreground,
|
|
41
|
+
"editor.lineHighlightBackground": dark.lineHighlight,
|
|
42
|
+
"editorLineNumber.foreground": dark.lineNumber,
|
|
43
|
+
"editor.selectionBackground": dark.selection,
|
|
44
|
+
"editor.selectionForeground": dark.selectionFg
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"app-dark-disabled": {
|
|
48
|
+
base: "vs-dark",
|
|
49
|
+
inherit: true,
|
|
50
|
+
rules: [],
|
|
51
|
+
colors: {
|
|
52
|
+
"editor.foreground": dark.disabledFg,
|
|
53
|
+
"editor.background": dark.disabledBg,
|
|
54
|
+
"editor.border": dark.border,
|
|
55
|
+
"editorCursor.foreground": "transparent",
|
|
56
|
+
"editor.lineHighlightBackground": dark.disabledBg,
|
|
57
|
+
"editorLineNumber.foreground": dark.disabledFg,
|
|
58
|
+
"editor.selectionBackground": dark.selection,
|
|
59
|
+
"editor.selectionForeground": dark.selectionFg
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"app-light-disabled": {
|
|
63
|
+
base: "vs",
|
|
64
|
+
inherit: true,
|
|
65
|
+
rules: [],
|
|
66
|
+
colors: {
|
|
67
|
+
"editor.foreground": light.disabledFg,
|
|
68
|
+
"editor.background": light.disabledBg,
|
|
69
|
+
"editor.border": light.border,
|
|
70
|
+
"editorCursor.foreground": "transparent",
|
|
71
|
+
"editor.lineHighlightBackground": light.disabledBg,
|
|
72
|
+
"editorLineNumber.foreground": light.disabledFg,
|
|
73
|
+
"editor.selectionBackground": light.selection,
|
|
74
|
+
"editor.selectionForeground": light.selectionFg
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function defineEditorThemes(monacoEditor) {
|
|
80
|
+
const themes = createEditorThemes();
|
|
81
|
+
for (const [name, themeData] of Object.entries(themes)) monacoEditor.defineTheme(name, {
|
|
82
|
+
...themeData,
|
|
83
|
+
colors: normalizeThemeColors(themeData.colors)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function getThemeName(isDark, disabled) {
|
|
87
|
+
if (isDark) return disabled ? "app-dark-disabled" : "app-dark";
|
|
88
|
+
return disabled ? "app-light-disabled" : "vs";
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { defineEditorThemes, expandShorthandHex, getThemeName };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/editor/workers.ts
|
|
2
|
+
var monacoEnvironment = { getWorker(_moduleId, label) {
|
|
3
|
+
if (label === "json") return new Worker(new URL(
|
|
4
|
+
/* @vite-ignore */
|
|
5
|
+
"/assets/json.worker-D8bJ92nw.js",
|
|
6
|
+
"" + import.meta.url
|
|
7
|
+
), { type: "module" });
|
|
8
|
+
if (label === "yaml") return new Worker(new URL(
|
|
9
|
+
/* @vite-ignore */
|
|
10
|
+
"/assets/yaml.worker-C4gyGAko.js",
|
|
11
|
+
"" + import.meta.url
|
|
12
|
+
), { type: "module" });
|
|
13
|
+
return new Worker(new URL(
|
|
14
|
+
/* @vite-ignore */
|
|
15
|
+
"/assets/editor.worker-BmHUIVG4.js",
|
|
16
|
+
"" + import.meta.url
|
|
17
|
+
), { type: "module" });
|
|
18
|
+
} };
|
|
19
|
+
/**
|
|
20
|
+
* Points window.MonacoEnvironment at the bundled workers. Idempotent, and a
|
|
21
|
+
* host that already configured its own MonacoEnvironment wins — the editor
|
|
22
|
+
* calls this on first load only when nothing is configured.
|
|
23
|
+
*/
|
|
24
|
+
function setupMonacoWorkers() {
|
|
25
|
+
if (window.MonacoEnvironment) return;
|
|
26
|
+
window.MonacoEnvironment = monacoEnvironment;
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { setupMonacoWorkers };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { SchemasSettings } from 'monaco-yaml';
|
|
2
|
+
/** Adds JSON schemas that validate and complete YAML models whose URI matches. */
|
|
3
|
+
export declare function configureEditorYaml(added: SchemasSettings[]): void;
|
|
4
|
+
/** Lets the loaded editor pick up schemas added before or after it loads. */
|
|
5
|
+
export declare function onYamlSchemas(listener: (schemas: SchemasSettings[]) => void): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/editor/yaml.ts
|
|
2
|
+
var schemas = [];
|
|
3
|
+
var apply;
|
|
4
|
+
/** Adds JSON schemas that validate and complete YAML models whose URI matches. */
|
|
5
|
+
function configureEditorYaml(added) {
|
|
6
|
+
schemas = [...schemas, ...added];
|
|
7
|
+
apply?.(schemas);
|
|
8
|
+
}
|
|
9
|
+
/** Lets the loaded editor pick up schemas added before or after it loads. */
|
|
10
|
+
function onYamlSchemas(listener) {
|
|
11
|
+
apply = listener;
|
|
12
|
+
listener(schemas);
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { configureEditorYaml, onYamlSchemas };
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
export type RunStatus = 'started' | 'running' | 'completed' | 'error' | 'failed' | 'canceled' | 'skipped' | 'faulted' | 'canceling' | 'skipped-failed' | '' | undefined;
|
|
2
|
+
export interface MatrixGroup {
|
|
3
|
+
originaljob: string;
|
|
4
|
+
members: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface LogSegment {
|
|
7
|
+
content: string;
|
|
8
|
+
className: string;
|
|
9
|
+
highlighted?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface LogCommand {
|
|
12
|
+
type: 'error' | 'warning' | 'notice' | 'debug' | 'group' | 'endgroup';
|
|
13
|
+
message: string;
|
|
14
|
+
params?: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export interface ProcessedLogLine {
|
|
17
|
+
index: number;
|
|
18
|
+
segments: LogSegment[];
|
|
19
|
+
command?: LogCommand;
|
|
20
|
+
groupDepth: number;
|
|
21
|
+
groupId?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface WorkflowVariable {
|
|
24
|
+
key?: string;
|
|
25
|
+
value?: string | null;
|
|
26
|
+
secret?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export type WorkflowVariables = Record<string, WorkflowVariable>;
|
|
29
|
+
export interface EvaluateOptions<T> {
|
|
30
|
+
inputs: unknown;
|
|
31
|
+
obj: T;
|
|
32
|
+
path?: string[];
|
|
33
|
+
schema?: unknown;
|
|
34
|
+
orgVars?: WorkflowVariables | undefined;
|
|
35
|
+
userVars?: Record<string, string>;
|
|
36
|
+
remoteVars?: Record<string, string | undefined> | undefined;
|
|
37
|
+
secretKeys?: string[];
|
|
38
|
+
appInfo?: Record<string, unknown>;
|
|
39
|
+
sessionInfo?: Record<string, string>;
|
|
40
|
+
index?: number | undefined;
|
|
41
|
+
}
|
|
42
|
+
export interface ExpansionKeys {
|
|
43
|
+
subworkflowKeys: string[];
|
|
44
|
+
jobKeys: string[];
|
|
45
|
+
matrixKeys: string[];
|
|
46
|
+
}
|
|
47
|
+
export interface EngineJob {
|
|
48
|
+
status?: RunStatus;
|
|
49
|
+
needs?: string[];
|
|
50
|
+
if?: boolean | string;
|
|
51
|
+
steps?: unknown[];
|
|
52
|
+
_matrix?: {
|
|
53
|
+
originaljob?: string;
|
|
54
|
+
index?: number;
|
|
55
|
+
};
|
|
56
|
+
_matrixGroup?: MatrixGroup;
|
|
57
|
+
}
|
|
58
|
+
export interface EngineStep {
|
|
59
|
+
name?: string | undefined;
|
|
60
|
+
run?: string;
|
|
61
|
+
uses?: string;
|
|
62
|
+
subworkflow?: unknown;
|
|
63
|
+
}
|
|
64
|
+
/** The workflow semantics the form, graph, editor and log viewer defer to. */
|
|
65
|
+
export interface WorkflowEngine {
|
|
66
|
+
/** Starts loading the expression runtime; safe to call repeatedly. */
|
|
67
|
+
init(): void;
|
|
68
|
+
isReady(): boolean;
|
|
69
|
+
/** Calls back when readiness changes; returns an unsubscribe function. */
|
|
70
|
+
onReady(listener: (ready: boolean) => void): () => void;
|
|
71
|
+
/** Resolves every `${{ }}` expression in `obj`. */
|
|
72
|
+
evaluate<T>(options: EvaluateOptions<T>): T;
|
|
73
|
+
/** Turns a workflow's input definitions into the form's field tree. */
|
|
74
|
+
convertInputs(inputs: Record<string, unknown>): Record<string, unknown>;
|
|
75
|
+
inputDependencies(obj: unknown): {
|
|
76
|
+
inputDeps: Set<string>;
|
|
77
|
+
hasExpressions: boolean;
|
|
78
|
+
};
|
|
79
|
+
jobDependencies(jobName: string, jobs: Record<string, {
|
|
80
|
+
needs?: string[];
|
|
81
|
+
}>, memo?: Record<string, Set<string>>): Set<string>;
|
|
82
|
+
matrixGroups(jobs: Record<string, EngineJob> | undefined): Record<string, MatrixGroup>;
|
|
83
|
+
/** Rewrites `visibleJobs` in place so each matrix group lays out as one node. */
|
|
84
|
+
collapseMatrixGroups(groups: Record<string, MatrixGroup>, visibleJobs: Record<string, EngineJob>): void;
|
|
85
|
+
expansionKeys(jobs: Record<string, EngineJob> | undefined, pathPrefix?: string): ExpansionKeys;
|
|
86
|
+
matrixStatus(statuses: RunStatus[]): {
|
|
87
|
+
aggStatus: RunStatus;
|
|
88
|
+
statusLabel: string;
|
|
89
|
+
};
|
|
90
|
+
stepLabel(step: EngineStep, index?: number): string;
|
|
91
|
+
stepLogPath(subworkflowPrefix: string, jobName: string, stepIndex: number | string): string;
|
|
92
|
+
isRunActive(status: string | null | undefined): boolean;
|
|
93
|
+
processLogLines(lines: {
|
|
94
|
+
index: number;
|
|
95
|
+
segments: LogSegment[];
|
|
96
|
+
}[], rawLines: string[]): ProcessedLogLine[];
|
|
97
|
+
toYaml(value: unknown): string;
|
|
98
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IFileExplorerClient, IFileExplorerProvider } from './lib/fileExplorer.js';
|
|
2
|
-
import type { TreeNode, TStorage } from './lib/types.js';
|
|
2
|
+
import type { ExplorerObject, TreeNode, TStorage } from './lib/types.js';
|
|
3
3
|
interface IFileExplorerProps {
|
|
4
4
|
storages: TStorage[];
|
|
5
5
|
/** Resolves the storage's injected provider pair; the host owns caching. */
|
|
@@ -33,6 +33,15 @@ interface IFileExplorerProps {
|
|
|
33
33
|
initialExpandedPaths?: readonly string[];
|
|
34
34
|
/** Fires whenever the expanded folders change, for the host to persist. */
|
|
35
35
|
onExpandedPathsChange?: (paths: string[]) => void;
|
|
36
|
+
/** URIs that name an object, shown on its details and offered under Copy;
|
|
37
|
+
* the first is what Copy URI copies. None hides them. */
|
|
38
|
+
objectUris?: ((storage: TStorage, key: string) => string[]) | undefined;
|
|
39
|
+
/** A shell command that downloads files, offered beside the browser
|
|
40
|
+
* download. An empty command hides it for that selection. */
|
|
41
|
+
downloadCommand?: {
|
|
42
|
+
label: string;
|
|
43
|
+
build: (objects: ExplorerObject[]) => string;
|
|
44
|
+
} | undefined;
|
|
36
45
|
}
|
|
37
|
-
export default function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHierarchy, groups, groupsLoading, selectedPath, onPathChange, getProviderAndClient, treeOnly, initialExpandedPaths, onExpandedPathsChange, }: IFileExplorerProps): import("react").JSX.Element;
|
|
46
|
+
export default function FileExplorer({ storages, onRefresh, refreshKey, onOpenFile, showUserHierarchy, groups, groupsLoading, selectedPath, onPathChange, getProviderAndClient, treeOnly, initialExpandedPaths, onExpandedPathsChange, objectUris, downloadCommand, }: IFileExplorerProps): import("react").JSX.Element;
|
|
38
47
|
export {};
|