@parallelworks/ui 0.19.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.
Files changed (217) hide show
  1. package/dist/{chunks/memoryStore-CC91S5LP.js → ai/adapter/memoryStore.js} +2 -2
  2. package/dist/ai/adapter/mock/index.js +2 -80
  3. package/dist/ai/adapter/mock/mockAdapter.js +81 -0
  4. package/dist/ai/adapter/openai/createOpenAIStream.js +33 -0
  5. package/dist/ai/adapter/openai/errors.js +37 -0
  6. package/dist/ai/adapter/openai/index.js +5 -333
  7. package/dist/ai/adapter/openai/openaiAdapter.js +54 -0
  8. package/dist/ai/adapter/openai/responses.js +108 -0
  9. package/dist/ai/adapter/openai/sse.js +112 -0
  10. package/dist/{chunks/types-Yy0NrerF.js → ai/adapter/types.js} +1 -1
  11. package/dist/ai/agent/classifier.js +12 -0
  12. package/dist/ai/agent/diff.js +223 -0
  13. package/dist/ai/agent/diffHighlight.js +101 -0
  14. package/dist/ai/agent/permissions.js +29 -0
  15. package/dist/ai/agent/toolfmt.js +383 -0
  16. package/dist/ai/agent/transcript.js +127 -0
  17. package/dist/ai/components/AllocationSelector.js +56 -0
  18. package/dist/ai/components/AttachmentManager.js +144 -0
  19. package/dist/ai/components/AttachmentUpload.js +179 -0
  20. package/dist/ai/components/BlockedGroupBanner.js +29 -0
  21. package/dist/ai/components/BranchNavigator.js +57 -0
  22. package/dist/ai/components/ChatEmptyState.js +171 -0
  23. package/dist/ai/components/ChatInput.js +265 -0
  24. package/dist/ai/components/ChatLayout.js +15 -0
  25. package/dist/ai/components/ChatMessage.js +338 -0
  26. package/dist/ai/components/ChatMessageList.js +301 -0
  27. package/dist/ai/components/ChatSidebar.js +345 -0
  28. package/dist/ai/components/ChatThread.js +198 -0
  29. package/dist/ai/components/ComposerChrome.js +50 -0
  30. package/dist/ai/components/ComposerFrame.js +33 -0
  31. package/dist/ai/components/DragOverlay.js +20 -0
  32. package/dist/ai/components/ModelSelector.js +343 -0
  33. package/dist/ai/components/ShareDialog.js +260 -0
  34. package/dist/ai/components/SlashMenu.js +91 -0
  35. package/dist/ai/components/agent/ActivityLine.js +151 -0
  36. package/dist/ai/components/agent/AgentMessageParts.js +721 -0
  37. package/dist/ai/components/agent/PermissionPicker.js +38 -0
  38. package/dist/ai/components/attachmentKeys.js +10 -0
  39. package/dist/ai/core/ChatProvider.js +848 -0
  40. package/dist/ai/core/KeyboardShortcutsProvider.js +9 -0
  41. package/dist/ai/core/chatReducer.js +223 -0
  42. package/dist/ai/core/config.js +45 -0
  43. package/dist/ai/core/events.js +4 -0
  44. package/dist/ai/core/exportConversation.js +42 -0
  45. package/dist/ai/core/greeting.js +38 -0
  46. package/dist/ai/core/parts.js +84 -0
  47. package/dist/ai/core/useDragDrop.js +36 -0
  48. package/dist/ai/core/useKeyboardShortcuts.js +77 -0
  49. package/dist/ai/core/useSSEStream.js +98 -0
  50. package/dist/ai/index.js +43 -6644
  51. package/dist/ai/strings.js +175 -0
  52. package/dist/ai/ui/Avatar.js +35 -0
  53. package/dist/ai/ui/Dropdown.js +110 -0
  54. package/dist/ai/ui/Markdown.js +79 -0
  55. package/dist/ai/ui/Notice.js +77 -0
  56. package/dist/ai/ui/codeBreaks.js +36 -0
  57. package/dist/ai/ui/prose.js +13 -0
  58. package/dist/ai/ui/sidebar.js +148 -0
  59. package/dist/ai/utils.js +23 -0
  60. package/dist/components/AddMenu.js +46 -0
  61. package/dist/components/Avatar.js +46 -0
  62. package/dist/{chunks/BareModal-BtRiQezg.js → components/BareModal.js} +1 -1
  63. package/dist/components/Breadcrumbs.js +83 -0
  64. package/dist/components/Button.js +83 -0
  65. package/dist/components/Callout.js +23 -0
  66. package/dist/components/Card.js +31 -0
  67. package/dist/components/CollapsiblePanel.js +77 -0
  68. package/dist/{chunks/ConfirmModal-aOR4O1QE.js → components/ConfirmModal.js} +4 -9
  69. package/dist/components/CopyToClipboard.js +81 -0
  70. package/dist/{chunks/Markdown-CM-FenNE.js → components/CreateModal.js} +9 -116
  71. package/dist/components/DescriptionList.js +42 -0
  72. package/dist/components/Dropdown.js +349 -0
  73. package/dist/components/EmptyState.js +27 -0
  74. package/dist/components/Filter.js +32 -0
  75. package/dist/components/FilterPill.js +13 -0
  76. package/dist/components/IconButton.js +34 -0
  77. package/dist/{chunks/Indicator-hBSIxOPK.js → components/Indicator.js} +1 -1
  78. package/dist/components/Input.js +88 -0
  79. package/dist/components/LetterBadge.js +13 -0
  80. package/dist/components/Listbox.js +123 -0
  81. package/dist/{chunks/Loader-BXoXTZGc.js → components/Loader.js} +1 -1
  82. package/dist/components/Markdown.js +15 -0
  83. package/dist/components/MultiSelect.js +171 -0
  84. package/dist/components/Overview.js +39 -0
  85. package/dist/components/PageHeader.js +194 -0
  86. package/dist/components/Pagination.js +35 -0
  87. package/dist/{chunks/Provider-CDYurraE.js → components/Provider.js} +1 -1
  88. package/dist/{chunks/RequiredMark-DfLdYbYZ.js → components/RequiredMark.js} +1 -1
  89. package/dist/components/SectionHeader.js +11 -0
  90. package/dist/components/SettingModeOption.js +30 -0
  91. package/dist/components/SettingRow.js +35 -0
  92. package/dist/components/SettingsCard.js +31 -0
  93. package/dist/components/SettingsGroup.js +17 -0
  94. package/dist/components/Sort.js +42 -0
  95. package/dist/components/StatusBadge.js +63 -0
  96. package/dist/components/SwitchToggle.js +59 -0
  97. package/dist/{chunks/SwitchToggleSmall-FcsaYSTs.js → components/SwitchToggleSmall.js} +1 -1
  98. package/dist/{chunks/Table-DU2MW8xz.js → components/Table.js} +3 -3
  99. package/dist/components/Toggle.js +20 -0
  100. package/dist/{chunks/Tooltip-K5HJr4_p.js → components/Tooltip.js} +2 -27
  101. package/dist/{chunks/StatusBadge-C1Blx_cW.js → components/dropdownUtils.js} +2 -63
  102. package/dist/{chunks/focus-D_iZJTW1.js → components/focus.js} +1 -1
  103. package/dist/components/ghostButton.js +7 -0
  104. package/dist/components/inputClasses.js +4 -0
  105. package/dist/components/keys.js +27 -0
  106. package/dist/components/relativeTime.js +32 -0
  107. package/dist/{chunks/useCssIsDark-DHr05dG2.js → components/useCssIsDark.js} +1 -1
  108. package/dist/{chunks/duration-BOv8Phl8.js → duration.js} +1 -1
  109. package/dist/editor/Editor.js +13 -0
  110. package/dist/editor/EditorField.js +53 -0
  111. package/dist/editor/FormCodePanel.js +173 -0
  112. package/dist/{chunks/Monaco-DJ8MW-Dq.js → editor/Monaco.js} +4 -2
  113. package/dist/editor/index.js +6 -1
  114. package/dist/editor/themes.js +91 -0
  115. package/dist/editor/workers.js +29 -0
  116. package/dist/editor/yaml.js +15 -0
  117. package/dist/file-explorer/FileExplorer.js +1402 -0
  118. package/dist/file-explorer/FileExplorerContext.js +370 -0
  119. package/dist/{chunks/CodePreviewEditor-YqQBz1YL.js → file-explorer/FilePreview/CodePreviewEditor.js} +3 -2
  120. package/dist/file-explorer/FilePreview/Inline.js +45 -0
  121. package/dist/file-explorer/FilePreview/StreamedBadge.js +16 -0
  122. package/dist/file-explorer/FilePreview/Viewer.js +526 -0
  123. package/dist/file-explorer/FilePreview/index.js +266 -0
  124. package/dist/file-explorer/FilePreview/parse.js +63 -0
  125. package/dist/file-explorer/FilePreview/previewCache.js +98 -0
  126. package/dist/file-explorer/FilePreview/previewType.js +151 -0
  127. package/dist/file-explorer/FilePreview/readCappedBytes.js +196 -0
  128. package/dist/file-explorer/FilePreview/useObjectBlobUrl.js +95 -0
  129. package/dist/file-explorer/FilePreview/useObjectText.js +109 -0
  130. package/dist/file-explorer/FilePreview/usePresignedUrl.js +73 -0
  131. package/dist/file-explorer/FileRow.js +165 -0
  132. package/dist/file-explorer/FileRowsWindow.js +92 -0
  133. package/dist/file-explorer/FileTable.js +172 -0
  134. package/dist/file-explorer/FileTableHeaders.js +49 -0
  135. package/dist/file-explorer/LoadMoreRow.js +46 -0
  136. package/dist/file-explorer/TreeView.js +376 -0
  137. package/dist/file-explorer/helpers.js +537 -0
  138. package/dist/file-explorer/index.js +7 -5671
  139. package/dist/file-explorer/lib/batch.js +39 -0
  140. package/dist/file-explorer/lib/errors.js +9 -0
  141. package/dist/file-explorer/lib/paging.js +124 -0
  142. package/dist/file-explorer/lib/utils.js +322 -0
  143. package/dist/file-explorer/toasts.js +400 -0
  144. package/dist/file-explorer/treeRows.js +73 -0
  145. package/dist/file-explorer/useNearEnd.js +27 -0
  146. package/dist/form/FieldWrapper.js +54 -0
  147. package/dist/form/Fields/BooleanField.js +51 -0
  148. package/dist/form/Fields/CheckboxGroupField.js +72 -0
  149. package/dist/form/Fields/ColorField.js +33 -0
  150. package/dist/form/Fields/DropdownField.js +49 -0
  151. package/dist/form/Fields/DurationField.js +130 -0
  152. package/dist/form/Fields/LabelField.js +19 -0
  153. package/dist/form/Fields/MultiDropdownField.js +40 -0
  154. package/dist/form/Fields/NumberField.js +51 -0
  155. package/dist/form/Fields/ObjectField.js +54 -0
  156. package/dist/form/Fields/RadioField.js +49 -0
  157. package/dist/form/Fields/RangeField.js +58 -0
  158. package/dist/form/Fields/ResourceOptionIcon.js +21 -0
  159. package/dist/form/Fields/StepField.js +6 -0
  160. package/dist/form/Fields/StringField.js +37 -0
  161. package/dist/form/Fields/TextAreaField.js +31 -0
  162. package/dist/form/Fields/durationValidity.js +11 -0
  163. package/dist/form/Form.js +643 -0
  164. package/dist/form/SpecialTypes/DropdownWrapper.js +30 -0
  165. package/dist/form/SpecialTypes/FormikCustomDropdown.js +122 -0
  166. package/dist/form/SpecialTypes/FormikCustomInput.js +111 -0
  167. package/dist/form/SpecialTypes/FormikMultiSelectDropdown.js +31 -0
  168. package/dist/form/SpecialTypes/FormikNumericInput.js +60 -0
  169. package/dist/form/Wizard/WizardContainer.js +138 -0
  170. package/dist/form/Wizard/WizardNavigation.js +92 -0
  171. package/dist/form/Wizard/WizardStepContent.js +35 -0
  172. package/dist/form/Wizard/WizardStepIndicator.js +108 -0
  173. package/dist/form/Wizard/useWizardState.js +118 -0
  174. package/dist/form/Wizard/utils.js +34 -0
  175. package/dist/form/fieldContext.js +26 -0
  176. package/dist/form/fieldRegistry.js +50 -0
  177. package/dist/form/index.js +17 -2321
  178. package/dist/{chunks/FieldWrapper-Cszwg-4B.js → form/lib.js} +2 -97
  179. package/dist/form/useParsedOpts.js +62 -0
  180. package/dist/form/usePrevious.js +11 -0
  181. package/dist/form/utils/checkShowIfObject.js +14 -0
  182. package/dist/form/utils/duration.js +69 -0
  183. package/dist/form/utils/getParentValue.js +23 -0
  184. package/dist/form/utils/getPlaceholder.js +9 -0
  185. package/dist/form/utils/getValueUsingPath.js +23 -0
  186. package/dist/form/utils/secondaryField.js +22 -0
  187. package/dist/graph/AnnotationBanner.js +141 -0
  188. package/dist/graph/Collapse.js +41 -0
  189. package/dist/graph/DependencyGraph.js +1398 -0
  190. package/dist/graph/JobSummary.js +104 -0
  191. package/dist/graph/MatrixGroup.js +107 -0
  192. package/dist/graph/Reveal.js +57 -0
  193. package/dist/graph/TreeView.js +711 -0
  194. package/dist/graph/index.js +1 -2519
  195. package/dist/graph/types.js +6 -0
  196. package/dist/index.js +46 -599
  197. package/dist/list/ActionToolbar.js +184 -0
  198. package/dist/list/HoverCard.js +73 -0
  199. package/dist/list/ListPage.js +145 -0
  200. package/dist/list/ListPager.js +59 -0
  201. package/dist/list/ListTable.js +163 -0
  202. package/dist/list/ListViewControls.js +372 -0
  203. package/dist/list/RowContextMenu.js +350 -0
  204. package/dist/list/UserHoverCard.js +117 -0
  205. package/dist/list/index.js +11 -2
  206. package/dist/list/listSearch.js +137 -0
  207. package/dist/list/listView.js +210 -0
  208. package/dist/list/textEntry.js +10 -0
  209. package/dist/{chunks/logviewer-BTKuQWzw.js → logviewer/LogViewer.js} +4 -82
  210. package/dist/logviewer/index.js +2 -1
  211. package/dist/logviewer/segments.js +80 -0
  212. package/package.json +1 -1
  213. package/dist/chunks/PageHeader-0kG_iypP.js +0 -692
  214. package/dist/chunks/SwitchToggle-DShNdcao.js +0 -758
  215. package/dist/chunks/editor-Dk1rbV75.js +0 -361
  216. package/dist/chunks/list-CJm875m7.js +0 -1418
  217. /package/dist/{chunks/MarkdownImpl-CyeTVvSt.js → components/MarkdownImpl.js} +0 -0
@@ -1,361 +0,0 @@
1
- import { d as useWorkflowEngine, i as useNotify, u as useStrings } from "./Provider-CDYurraE.js";
2
- import { CheckIcon, CopyIcon, EyeIcon, EyeOffIcon } from "../icons.js";
3
- import { t as Loader } from "./Loader-BXoXTZGc.js";
4
- import { t as SwitchToggleSmall } from "./SwitchToggleSmall-FcsaYSTs.js";
5
- import { i as impureSetValueFromPath, r as flattenGroups, t as FieldWrapper } from "./FieldWrapper-Cszwg-4B.js";
6
- import cx from "classnames";
7
- import { Suspense, lazy, useId, useMemo, useRef, useState } from "react";
8
- import { jsx, jsxs } from "react/jsx-runtime";
9
- import { useField, useFormikContext } from "formik";
10
- //#region src/editor/Editor.tsx
11
- var MonacoEditor = lazy(() => import("./Monaco-DJ8MW-Dq.js"));
12
- function Editor({ ...props }) {
13
- return /* @__PURE__ */ jsx(Suspense, {
14
- fallback: /* @__PURE__ */ jsx(Loader, { text: "Loading editor..." }),
15
- children: /* @__PURE__ */ jsx(MonacoEditor, { ...props })
16
- });
17
- }
18
- //#endregion
19
- //#region src/editor/EditorField.tsx
20
- function hasResetKeys(obj) {
21
- return typeof obj === "object" && obj !== null && "editorKeyPostfix" in obj && typeof obj.editorKeyPostfix === "string";
22
- }
23
- function EditorField(props) {
24
- const { field, label, labelPosition, disabled, onChange, tooltipComponent, spaceCompact, setFormDirty } = props;
25
- const [fieldState] = useField(field.name);
26
- const { setFieldValue, setFieldTouched, values } = useFormikContext();
27
- const debounceRef = useRef(null);
28
- const touchedRef = useRef(false);
29
- const handleChange = (val) => {
30
- touchedRef.current = true;
31
- if (debounceRef.current) clearTimeout(debounceRef.current);
32
- debounceRef.current = setTimeout(() => {
33
- if (onChange) onChange(val);
34
- setFieldTouched(field.name, true);
35
- setFieldValue(field.name, val);
36
- setFormDirty(true);
37
- }, 500);
38
- };
39
- let editorKeyPostfix = "";
40
- if (hasResetKeys(values)) editorKeyPostfix = values.editorKeyPostfix;
41
- const postfixKey = useMemo(() => {
42
- const randomKey = Math.random().toString(36).substring(7);
43
- return editorKeyPostfix || randomKey;
44
- }, [editorKeyPostfix]);
45
- const value = fieldState.value;
46
- return /* @__PURE__ */ jsx(FieldWrapper, {
47
- optional: field.optional,
48
- label,
49
- tooltipComponent,
50
- labelPosition,
51
- spaceCompact,
52
- children: /* @__PURE__ */ jsx(Editor, {
53
- ariaLabel: label,
54
- height: "200px",
55
- path: field.name,
56
- ...touchedRef.current ? {} : { value },
57
- className: cx("bg-(--theme-input-bg) w-11 border focus:border rounded text-[10px] leading-4 pl-[6px]", disabled && "opacity-75"),
58
- readOnly: disabled,
59
- onChange: handleChange,
60
- language: field.options?.language || "shell"
61
- }, field.name + postfixKey)
62
- });
63
- }
64
- //#endregion
65
- //#region src/editor/FormCodePanel.tsx
66
- var isObject = (value) => typeof value === "object" && value !== null;
67
- var shouldIgnoreField = (engine, fieldSchema, inputs, arrayIndex) => {
68
- if (!fieldSchema?.["ignore"] || !fieldSchema?.["hidden"]) return false;
69
- if (!engine.isReady()) return false;
70
- return engine.evaluate({
71
- inputs,
72
- obj: engine.convertInputs(fieldSchema),
73
- index: arrayIndex ?? -1
74
- })["hidden"] === true;
75
- };
76
- var filterFields = (engine, formJSON, data, prefix, rootData, arrayIndex) => {
77
- const filteredFields = [];
78
- return {
79
- filteredFields,
80
- filtered: Object.keys(data).reduce((acc, key) => {
81
- const value = data[key];
82
- const fieldSchema = formJSON[key];
83
- if (value !== null && Array.isArray(value)) {
84
- const items = [];
85
- acc[key] = items;
86
- if (!fieldSchema) return acc;
87
- const nestedSchema = isObject(fieldSchema) ? fieldSchema["options"] : void 0;
88
- for (let i = 0; i < value.length; i++) {
89
- let filteredFieldsNested = [];
90
- let filteredNested = {};
91
- const item = value[i];
92
- if (isObject(item)) {
93
- const result = filterFields(engine, isObject(nestedSchema) ? nestedSchema : {}, item, key + `[${i}].`, rootData || data, i);
94
- filteredNested = result.filtered;
95
- filteredFieldsNested = result.filteredFields;
96
- } else filteredNested = item;
97
- filteredFields.push(...filteredFieldsNested);
98
- items[i] = filteredNested;
99
- }
100
- return acc;
101
- }
102
- if (fieldSchema && isObject(value)) {
103
- const { filteredFields: filteredFieldsNested, filtered: filteredNested } = filterFields(engine, isObject(fieldSchema) ? fieldSchema : {}, value, key + ".", rootData || data, arrayIndex);
104
- filteredFields.push(...filteredFieldsNested);
105
- acc[key] = filteredNested;
106
- return acc;
107
- }
108
- if (isObject(fieldSchema) && fieldSchema["sensitive"]) {
109
- const name = prefix ? prefix + key : key;
110
- filteredFields.push({
111
- key: name,
112
- value
113
- });
114
- return acc;
115
- }
116
- const contextData = rootData || data;
117
- if (isObject(fieldSchema) && shouldIgnoreField(engine, fieldSchema, contextData, arrayIndex)) return acc;
118
- acc[key] = value;
119
- return acc;
120
- }, {})
121
- };
122
- };
123
- var populateFiltered = (filteredFields, data) => {
124
- filteredFields.forEach((element) => {
125
- impureSetValueFromPath(data, element.key, element.value);
126
- });
127
- return data;
128
- };
129
- function FormCodePanel({ formJSON, data, mutate, height = "600px", disabled = false }) {
130
- const engine = useWorkflowEngine();
131
- const notify = useNotify();
132
- const { common: t } = useStrings();
133
- const uid = useId();
134
- const [jsonHasErrors, setJsonHasErrors] = useState(false);
135
- const [showHidden, setShowHidden] = useState(false);
136
- const [copied, setCopied] = useState(false);
137
- const copyResetRef = useRef(void 0);
138
- const isValidJson = (errors) => {
139
- setJsonHasErrors(errors.length > 0);
140
- };
141
- const { filteredFields, filtered } = filterFields(engine, flattenGroups(formJSON), data || {});
142
- const hasHiddenFields = filteredFields.length > 0;
143
- const displayObj = showHidden && hasHiddenFields ? populateFiltered(filteredFields, structuredClone(filtered)) : filtered;
144
- const showHiddenRef = useRef(showHidden);
145
- showHiddenRef.current = showHidden;
146
- const filteredFieldsRef = useRef(filteredFields);
147
- filteredFieldsRef.current = filteredFields;
148
- const json = JSON.stringify(displayObj, null, 2);
149
- const handleCopy = async () => {
150
- try {
151
- await navigator.clipboard.writeText(json);
152
- setCopied(true);
153
- clearTimeout(copyResetRef.current);
154
- copyResetRef.current = setTimeout(() => setCopied(false), 2e3);
155
- } catch {
156
- notify.error(t.copyFailed);
157
- }
158
- };
159
- return /* @__PURE__ */ jsxs("div", {
160
- style: { height },
161
- className: "flex w-full flex-col gap-2",
162
- children: [/* @__PURE__ */ jsxs("div", {
163
- className: cx("flex min-h-0 flex-1 flex-col overflow-hidden rounded-md border", jsonHasErrors ? "border-red-500" : "border-(--theme-border)"),
164
- children: [/* @__PURE__ */ jsxs("div", {
165
- 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",
166
- children: [hasHiddenFields && /* @__PURE__ */ jsxs("label", {
167
- htmlFor: `${uid}-show-hidden`,
168
- title: t.showHiddenFieldsHint,
169
- className: "flex cursor-pointer select-none items-center gap-2 text-sm text-(--theme-app)",
170
- children: [/* @__PURE__ */ jsx(SwitchToggleSmall, {
171
- id: `${uid}-show-hidden`,
172
- value: showHidden,
173
- "aria-label": t.showHiddenFields,
174
- onClick: () => setShowHidden((prev) => !prev)
175
- }), /* @__PURE__ */ jsxs("span", {
176
- className: "flex items-center gap-1.5",
177
- children: [showHidden ? /* @__PURE__ */ jsx(EyeIcon, {}) : /* @__PURE__ */ jsx(EyeOffIcon, {}), t.showHiddenFields]
178
- })]
179
- }), /* @__PURE__ */ jsxs("button", {
180
- type: "button",
181
- onClick: handleCopy,
182
- "aria-label": copied ? t.copied : t.copy,
183
- 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)",
184
- children: [copied ? /* @__PURE__ */ jsx(CheckIcon, { className: "text-green-500" }) : /* @__PURE__ */ jsx(CopyIcon, { className: "text-(--theme-muted-text-color)" }), copied ? t.copied : t.copy]
185
- })]
186
- }), /* @__PURE__ */ jsx("div", {
187
- className: "min-h-0 flex-1",
188
- children: /* @__PURE__ */ jsx(Editor, {
189
- height: "100%",
190
- value: json,
191
- onValidate: isValidJson,
192
- className: "!rounded-none !border-0",
193
- minimap: { enabled: false },
194
- scrollBeyondLastLine: false,
195
- overviewRulerLanes: 0,
196
- overviewRulerBorder: false,
197
- lineNumbersMinChars: 3,
198
- lineDecorationsWidth: 8,
199
- renderLineHighlight: "none",
200
- padding: {
201
- top: 12,
202
- bottom: 12
203
- },
204
- fontSize: 13,
205
- scrollbar: {
206
- verticalScrollbarSize: 10,
207
- horizontalScrollbarSize: 10
208
- },
209
- onChange: (e) => {
210
- try {
211
- const parsed = JSON.parse(e);
212
- if (!isObject(parsed)) return;
213
- mutate(showHiddenRef.current ? parsed : populateFiltered(filteredFieldsRef.current, parsed));
214
- } catch {
215
- console.log("JSON.parse error in form code editor");
216
- }
217
- },
218
- language: "json",
219
- disabled
220
- })
221
- })]
222
- }), jsonHasErrors && /* @__PURE__ */ jsx("p", {
223
- className: "shrink-0 text-sm text-red-500",
224
- children: t.jsonHasErrors
225
- })]
226
- });
227
- }
228
- //#endregion
229
- //#region src/editor/themes.ts
230
- function expandShorthandHex(color) {
231
- return /^#([0-9a-fA-F]{3,4})$/.test(color) ? "#" + color.slice(1).split("").map((c) => c + c).join("") : color;
232
- }
233
- function normalizeThemeColors(colors) {
234
- return Object.fromEntries(Object.entries(colors).map(([key, value]) => [key, expandShorthandHex(value)]));
235
- }
236
- function themeVar(name, fallback) {
237
- if (typeof window === "undefined") return fallback;
238
- return getComputedStyle(document.documentElement).getPropertyValue(name).trim() || fallback;
239
- }
240
- function createEditorThemes() {
241
- const dark = {
242
- foreground: themeVar("--theme-app", "#e6edf3"),
243
- background: themeVar("--theme-panel-bg", "#161b22"),
244
- border: themeVar("--theme-border", "#30363d"),
245
- lineHighlight: themeVar("--theme-muted-panel-bg", "#21262d"),
246
- lineNumber: themeVar("--theme-muted-text-color", "#8b949e"),
247
- selection: themeVar("--theme-element", "#2f81f7"),
248
- selectionFg: themeVar("--theme-element-text", "#ffffff"),
249
- disabledBg: themeVar("--theme-input-disabled-bg", "#1c2128"),
250
- disabledFg: themeVar("--theme-muted-text-color", "#8b949e")
251
- };
252
- const light = {
253
- disabledBg: themeVar("--theme-input-disabled-bg", "#f3f4f6"),
254
- disabledFg: themeVar("--theme-muted-text-color", "#5f6b76"),
255
- border: themeVar("--theme-border", "#d1d5db"),
256
- selection: themeVar("--theme-element", "#2f81f7"),
257
- selectionFg: themeVar("--theme-element-text", "#ffffff")
258
- };
259
- return {
260
- "app-dark": {
261
- base: "vs-dark",
262
- inherit: true,
263
- rules: [],
264
- colors: {
265
- "editor.foreground": dark.foreground,
266
- "editor.background": dark.background,
267
- "editor.border": dark.border,
268
- "editorCursor.foreground": dark.foreground,
269
- "editor.lineHighlightBackground": dark.lineHighlight,
270
- "editorLineNumber.foreground": dark.lineNumber,
271
- "editor.selectionBackground": dark.selection,
272
- "editor.selectionForeground": dark.selectionFg
273
- }
274
- },
275
- "app-dark-disabled": {
276
- base: "vs-dark",
277
- inherit: true,
278
- rules: [],
279
- colors: {
280
- "editor.foreground": dark.disabledFg,
281
- "editor.background": dark.disabledBg,
282
- "editor.border": dark.border,
283
- "editorCursor.foreground": "transparent",
284
- "editor.lineHighlightBackground": dark.disabledBg,
285
- "editorLineNumber.foreground": dark.disabledFg,
286
- "editor.selectionBackground": dark.selection,
287
- "editor.selectionForeground": dark.selectionFg
288
- }
289
- },
290
- "app-light-disabled": {
291
- base: "vs",
292
- inherit: true,
293
- rules: [],
294
- colors: {
295
- "editor.foreground": light.disabledFg,
296
- "editor.background": light.disabledBg,
297
- "editor.border": light.border,
298
- "editorCursor.foreground": "transparent",
299
- "editor.lineHighlightBackground": light.disabledBg,
300
- "editorLineNumber.foreground": light.disabledFg,
301
- "editor.selectionBackground": light.selection,
302
- "editor.selectionForeground": light.selectionFg
303
- }
304
- }
305
- };
306
- }
307
- function defineEditorThemes(monacoEditor) {
308
- const themes = createEditorThemes();
309
- for (const [name, themeData] of Object.entries(themes)) monacoEditor.defineTheme(name, {
310
- ...themeData,
311
- colors: normalizeThemeColors(themeData.colors)
312
- });
313
- }
314
- function getThemeName(isDark, disabled) {
315
- if (isDark) return disabled ? "app-dark-disabled" : "app-dark";
316
- return disabled ? "app-light-disabled" : "vs";
317
- }
318
- //#endregion
319
- //#region src/editor/workers.ts
320
- var monacoEnvironment = { getWorker(_moduleId, label) {
321
- if (label === "json") return new Worker(new URL(
322
- /* @vite-ignore */
323
- "/assets/json.worker-D8bJ92nw.js",
324
- "" + import.meta.url
325
- ), { type: "module" });
326
- if (label === "yaml") return new Worker(new URL(
327
- /* @vite-ignore */
328
- "/assets/yaml.worker-C4gyGAko.js",
329
- "" + import.meta.url
330
- ), { type: "module" });
331
- return new Worker(new URL(
332
- /* @vite-ignore */
333
- "/assets/editor.worker-BmHUIVG4.js",
334
- "" + import.meta.url
335
- ), { type: "module" });
336
- } };
337
- /**
338
- * Points window.MonacoEnvironment at the bundled workers. Idempotent, and a
339
- * host that already configured its own MonacoEnvironment wins — the editor
340
- * calls this on first load only when nothing is configured.
341
- */
342
- function setupMonacoWorkers() {
343
- if (window.MonacoEnvironment) return;
344
- window.MonacoEnvironment = monacoEnvironment;
345
- }
346
- //#endregion
347
- //#region src/editor/yaml.ts
348
- var schemas = [];
349
- var apply;
350
- /** Adds JSON schemas that validate and complete YAML models whose URI matches. */
351
- function configureEditorYaml(added) {
352
- schemas = [...schemas, ...added];
353
- apply?.(schemas);
354
- }
355
- /** Lets the loaded editor pick up schemas added before or after it loads. */
356
- function onYamlSchemas(listener) {
357
- apply = listener;
358
- listener(schemas);
359
- }
360
- //#endregion
361
- export { getThemeName as a, Editor as c, defineEditorThemes as i, onYamlSchemas as n, FormCodePanel as o, setupMonacoWorkers as r, EditorField as s, configureEditorYaml as t };