windmill-components 1.21.0 → 1.28.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/components/AppConnect.svelte +93 -47
- package/components/AppConnect.svelte.d.ts +2 -2
- package/components/ArgInfo.svelte +0 -5
- package/components/ArgInput.svelte +91 -66
- package/components/ArgInput.svelte.d.ts +8 -3
- package/components/Button.svelte +4 -4
- package/components/CenteredPage.svelte +1 -1
- package/components/CollapseLink.svelte +12 -0
- package/components/CollapseLink.svelte.d.ts +19 -0
- package/components/CronInput.svelte +84 -0
- package/components/CronInput.svelte.d.ts +18 -0
- package/components/DisplayResult.svelte +23 -7
- package/components/Editor.svelte +144 -61
- package/components/Editor.svelte.d.ts +2 -0
- package/components/EditorBar.svelte +215 -0
- package/components/EditorBar.svelte.d.ts +23 -0
- package/components/FlowBuilder.svelte +151 -79
- package/components/FlowEditor.svelte +77 -130
- package/components/FlowEditor.svelte.d.ts +3 -2
- package/components/FlowJobResult.svelte +1 -1
- package/components/FlowPreview.svelte +18 -24
- package/components/FlowPreviewContent.svelte +68 -0
- package/components/FlowPreviewContent.svelte.d.ts +21 -0
- package/components/FlowStatusViewer.svelte +85 -37
- package/components/FlowStatusViewer.svelte.d.ts +3 -2
- package/components/FlowViewer.svelte +100 -26
- package/components/FlowViewer.svelte.d.ts +8 -3
- package/components/IconedResourceType.svelte +30 -5
- package/components/InputTransformForm.svelte +209 -0
- package/components/InputTransformForm.svelte.d.ts +26 -0
- package/components/InviteGlobalUser.svelte +2 -2
- package/components/InviteUser.svelte +2 -2
- package/components/JobStatus.svelte +32 -25
- package/components/Modal.svelte +47 -43
- package/components/ModuleStep.svelte +100 -54
- package/components/ObjectResourceInput.svelte +58 -38
- package/components/ObjectTypeNarrowing.svelte +4 -19
- package/components/Path.svelte +3 -3
- package/components/Path.svelte.d.ts +1 -1
- package/components/RadioButton.svelte +11 -96
- package/components/RadioButton.svelte.d.ts +4 -2
- package/components/ResourceEditor.svelte +5 -6
- package/components/ResourceEditor.svelte.d.ts +2 -2
- package/components/ResourcePicker.svelte +25 -2
- package/components/ResourcePicker.svelte.d.ts +3 -0
- package/components/ResourceTypePicker.svelte +17 -29
- package/components/ResourceTypePicker.svelte.d.ts +1 -0
- package/components/RunForm.svelte +14 -15
- package/components/RunForm.svelte.d.ts +1 -1
- package/components/SchemaEditor.svelte +87 -71
- package/components/SchemaEditor.svelte.d.ts +2 -0
- package/components/SchemaEditorProperty.svelte +11 -0
- package/components/SchemaEditorProperty.svelte.d.ts +17 -0
- package/components/SchemaForm.svelte +21 -127
- package/components/SchemaForm.svelte.d.ts +3 -4
- package/components/SchemaModal.svelte +20 -33
- package/components/SchemaModal.svelte.d.ts +1 -1
- package/components/SchemaViewer.svelte +5 -7
- package/components/ScriptBuilder.svelte +41 -44
- package/components/ScriptEditor.svelte +76 -248
- package/components/ScriptPicker.svelte +13 -26
- package/components/ScriptPicker.svelte.d.ts +1 -1
- package/components/ScriptSchema.svelte +0 -5
- package/components/ShareModal.svelte +1 -1
- package/components/SharedBadge.svelte +12 -10
- package/components/StringTypeNarrowing.svelte +8 -4
- package/components/StringTypeNarrowing.svelte.d.ts +1 -0
- package/components/TableCustom.svelte +7 -9
- package/components/TableSimple.svelte +1 -1
- package/components/Toggle.svelte +8 -10
- package/components/Toggle.svelte.d.ts +5 -11
- package/components/Tooltip.svelte +56 -82
- package/components/Tooltip.svelte.d.ts +1 -5
- package/components/VariableEditor.svelte +21 -6
- package/components/flows/CopyFirstStepSchema.svelte +7 -5
- package/components/flows/DynamicInputHelpBox.svelte +1 -1
- package/components/flows/FlowBox.svelte +3 -0
- package/components/flows/FlowBox.svelte.d.ts +23 -0
- package/components/flows/FlowBoxHeader.svelte +9 -0
- package/components/flows/FlowBoxHeader.svelte.d.ts +18 -0
- package/components/flows/FlowInput.svelte +20 -0
- package/components/flows/FlowInput.svelte.d.ts +14 -0
- package/components/flows/FlowInputs.svelte +7 -3
- package/components/flows/FlowModuleHeader.svelte +44 -41
- package/components/flows/FlowModuleHeader.svelte.d.ts +1 -1
- package/components/flows/FlowSettings.svelte +174 -0
- package/components/flows/FlowSettings.svelte.d.ts +21 -0
- package/components/flows/flowStore.d.ts +5 -2
- package/components/flows/flowStore.js +65 -9
- package/components/flows/pickers/FlowScriptPicker.svelte +6 -1
- package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -0
- package/components/flows/utils.d.ts +11 -11
- package/components/flows/utils.js +103 -63
- package/components/icons/AirtableIcon.svelte +17 -0
- package/components/icons/AirtableIcon.svelte.d.ts +17 -0
- package/components/icons/GCloudIcon.svelte +16 -0
- package/components/icons/GCloudIcon.svelte.d.ts +17 -0
- package/components/icons/GItlabIcon.svelte +16 -0
- package/components/icons/GItlabIcon.svelte.d.ts +17 -0
- package/components/icons/GSheetsIcon.svelte +16 -0
- package/components/icons/GSheetsIcon.svelte.d.ts +17 -0
- package/components/icons/GcalIcon.svelte +16 -0
- package/components/icons/GcalIcon.svelte.d.ts +17 -0
- package/components/icons/GdriveIcon.svelte +16 -0
- package/components/icons/GdriveIcon.svelte.d.ts +17 -0
- package/components/icons/GmailIcon.svelte +16 -0
- package/components/icons/GmailIcon.svelte.d.ts +17 -0
- package/components/icons/PostgresIcon.svelte +8 -49
- package/components/icons/Slack.svelte +9 -18
- package/components/icons/TogglIcon.svelte +59 -0
- package/components/icons/TogglIcon.svelte.d.ts +17 -0
- package/components/propertyPicker/ObjectViewer.svelte +35 -37
- package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
- package/components/propertyPicker/OverlayPropertyPicker.svelte +53 -53
- package/components/propertyPicker/OverlayPropertyPicker.svelte.d.ts +5 -2
- package/components/propertyPicker/PropPicker.svelte +13 -15
- package/components/propertyPicker/PropPicker.svelte.d.ts +1 -1
- package/components/propertyPicker/WarningMessage.svelte +14 -41
- package/components/propertyPicker/WarningMessage.svelte.d.ts +11 -8
- package/components/propertyPicker/utils.d.ts +1 -0
- package/components/propertyPicker/utils.js +25 -0
- package/gen/core/OpenAPI.js +1 -1
- package/gen/index.d.ts +12 -2
- package/gen/index.js +1 -2
- package/gen/models/CompletedJob.d.ts +1 -1
- package/gen/models/Flow.d.ts +3 -13
- package/gen/models/FlowMetadata.d.ts +9 -0
- package/gen/models/FlowMetadata.js +4 -0
- package/gen/models/FlowModuleValue.d.ts +5 -22
- package/gen/models/FlowModuleValue.js +1 -15
- package/gen/models/ForloopFlow.d.ts +8 -0
- package/gen/models/ForloopFlow.js +4 -0
- package/gen/models/InputTransform.d.ts +3 -12
- package/gen/models/InputTransform.js +1 -8
- package/gen/models/JavascriptTransform.d.ts +4 -0
- package/gen/models/JavascriptTransform.js +4 -0
- package/gen/models/MainArgSignature.d.ts +1 -1
- package/gen/models/NewSchedule.d.ts +1 -0
- package/gen/models/OpenFlow.d.ts +7 -0
- package/gen/models/OpenFlow.js +4 -0
- package/gen/models/OpenFlowWPath.d.ts +4 -0
- package/gen/models/OpenFlowWPath.js +4 -0
- package/gen/models/PathFlow.d.ts +4 -0
- package/gen/models/PathFlow.js +4 -0
- package/gen/models/PathScript.d.ts +4 -0
- package/gen/models/PathScript.js +4 -0
- package/gen/models/RawScript.d.ts +12 -0
- package/gen/models/RawScript.js +11 -0
- package/gen/models/Schedule.d.ts +1 -1
- package/gen/models/StaticTransform.d.ts +4 -0
- package/gen/models/StaticTransform.js +4 -0
- package/gen/models/TokenResponse.d.ts +3 -3
- package/gen/models/Usage.d.ts +5 -0
- package/gen/models/Usage.js +4 -0
- package/gen/models/User.d.ts +2 -0
- package/gen/schemas/$AuditLog.d.ts +32 -0
- package/gen/schemas/$AuditLog.js +35 -0
- package/gen/schemas/$CompletedJob.d.ts +98 -0
- package/gen/schemas/$CompletedJob.js +103 -0
- package/gen/schemas/$ContextualVariable.d.ts +16 -0
- package/gen/schemas/$ContextualVariable.js +19 -0
- package/gen/schemas/$CreateResource.d.ts +22 -0
- package/gen/schemas/$CreateResource.js +25 -0
- package/gen/schemas/$CreateVariable.d.ts +26 -0
- package/gen/schemas/$CreateVariable.js +29 -0
- package/gen/schemas/$CreateWorkspace.d.ts +20 -0
- package/gen/schemas/$CreateWorkspace.js +23 -0
- package/gen/schemas/$EditResource.d.ts +13 -0
- package/gen/schemas/$EditResource.js +16 -0
- package/gen/schemas/$EditResourceType.d.ts +10 -0
- package/gen/schemas/$EditResourceType.js +13 -0
- package/gen/schemas/$EditSchedule.d.ts +20 -0
- package/gen/schemas/$EditSchedule.js +23 -0
- package/gen/schemas/$EditVariable.d.ts +16 -0
- package/gen/schemas/$EditVariable.js +19 -0
- package/gen/schemas/$EditWorkspaceUser.d.ts +7 -0
- package/gen/schemas/$EditWorkspaceUser.js +10 -0
- package/gen/schemas/$Flow.d.ts +23 -0
- package/gen/schemas/$Flow.js +26 -0
- package/gen/schemas/$FlowMetadata.d.ts +31 -0
- package/gen/schemas/$FlowMetadata.js +34 -0
- package/gen/schemas/$FlowPreview.d.ts +80 -0
- package/gen/schemas/$FlowPreview.js +83 -0
- package/gen/schemas/$GlobalUserInfo.d.ts +26 -0
- package/gen/schemas/$GlobalUserInfo.js +29 -0
- package/gen/schemas/$Group.d.ts +23 -0
- package/gen/schemas/$Group.js +26 -0
- package/gen/schemas/$Job.d.ts +17 -0
- package/gen/schemas/$Job.js +20 -0
- package/gen/schemas/$ListableVariable.d.ts +35 -0
- package/gen/schemas/$ListableVariable.js +38 -0
- package/gen/schemas/$Login.d.ts +12 -0
- package/gen/schemas/$Login.js +15 -0
- package/gen/schemas/$MainArgSignature.d.ts +50 -0
- package/gen/schemas/$MainArgSignature.js +53 -0
- package/gen/schemas/$NewSchedule.d.ts +30 -0
- package/gen/schemas/$NewSchedule.js +33 -0
- package/gen/schemas/$NewToken.d.ts +11 -0
- package/gen/schemas/$NewToken.js +14 -0
- package/gen/schemas/$NewUser.d.ts +16 -0
- package/gen/schemas/$NewUser.js +19 -0
- package/gen/schemas/$Preview.d.ts +19 -0
- package/gen/schemas/$Preview.js +22 -0
- package/gen/schemas/$QueuedJob.d.ts +139 -0
- package/gen/schemas/$QueuedJob.js +144 -0
- package/gen/schemas/$Resource.d.ts +31 -0
- package/gen/schemas/$Resource.js +34 -0
- package/gen/schemas/$ResourceType.d.ts +17 -0
- package/gen/schemas/$ResourceType.js +20 -0
- package/gen/schemas/$Schedule.d.ts +47 -0
- package/gen/schemas/$Schedule.js +50 -0
- package/gen/schemas/$Script.d.ts +77 -0
- package/gen/schemas/$Script.js +80 -0
- package/gen/schemas/$ScriptArgs.d.ts +6 -0
- package/gen/schemas/$ScriptArgs.js +9 -0
- package/gen/schemas/$SlackToken.d.ts +24 -0
- package/gen/schemas/$SlackToken.js +27 -0
- package/gen/schemas/$TokenResponse.d.ts +23 -0
- package/gen/schemas/$TokenResponse.js +26 -0
- package/gen/schemas/$TruncatedToken.d.ts +25 -0
- package/gen/schemas/$TruncatedToken.js +28 -0
- package/gen/schemas/$Usage.d.ts +13 -0
- package/gen/schemas/$Usage.js +16 -0
- package/gen/schemas/$User.d.ts +42 -0
- package/gen/schemas/$User.js +45 -0
- package/gen/schemas/$UserWorkspaceList.d.ts +28 -0
- package/gen/schemas/$UserWorkspaceList.js +31 -0
- package/gen/schemas/$WorkerPing.d.ts +31 -0
- package/gen/schemas/$WorkerPing.js +34 -0
- package/gen/schemas/$Workspace.d.ts +19 -0
- package/gen/schemas/$Workspace.js +22 -0
- package/gen/schemas/$WorkspaceInvite.d.ts +16 -0
- package/gen/schemas/$WorkspaceInvite.js +19 -0
- package/gen/services/FlowService.d.ts +30 -16
- package/gen/services/FlowService.js +25 -0
- package/gen/services/JobService.d.ts +1 -1
- package/gen/services/ScriptService.d.ts +13 -8
- package/gen/services/WorkspaceService.d.ts +1 -1
- package/gen/services/WorkspaceService.js +1 -1
- package/infer.js +8 -1
- package/package.json +87 -15
- package/script_helpers.d.ts +1 -1
- package/script_helpers.js +7 -6
- package/sql.d.ts +89 -0
- package/sql.js +817 -0
- package/stores.d.ts +1 -1
- package/stores.js +0 -6
- package/utils.d.ts +26 -6
- package/utils.js +94 -7
- package/components/RadioButtonV2.svelte +0 -38
- package/components/RadioButtonV2.svelte.d.ts +0 -20
|
@@ -1,26 +1,22 @@
|
|
|
1
|
-
<script>import {
|
|
2
|
-
import { sendUserToast, emptySchema, displayDate } from '../utils';
|
|
3
|
-
import { fade } from 'svelte/transition';
|
|
4
|
-
import Icon from 'svelte-awesome';
|
|
5
|
-
import { faCheck, faChevronDown, faChevronUp, faExclamationTriangle, faMagic, faSearch, faSpinner, faTimes } from '@fortawesome/free-solid-svg-icons';
|
|
6
|
-
import Editor from './Editor.svelte';
|
|
7
|
-
import Tooltip from './Tooltip.svelte';
|
|
8
|
-
import { onDestroy, onMount } from 'svelte';
|
|
1
|
+
<script>import { CompletedJob, Job, JobService } from '../gen';
|
|
9
2
|
import { userStore, workspaceStore } from '../stores';
|
|
10
|
-
import
|
|
3
|
+
import { displayDate, emptySchema } from '../utils';
|
|
4
|
+
import { faCheck, faChevronDown, faChevronUp, faExclamationTriangle, faSpinner, faTimes } from '@fortawesome/free-solid-svg-icons';
|
|
5
|
+
import { onDestroy, onMount } from 'svelte';
|
|
6
|
+
import Icon from 'svelte-awesome';
|
|
11
7
|
import { check } from 'svelte-awesome/icons';
|
|
8
|
+
import { fade } from 'svelte/transition';
|
|
9
|
+
import Editor from './Editor.svelte';
|
|
12
10
|
import Modal from './Modal.svelte';
|
|
11
|
+
import TableCustom from './TableCustom.svelte';
|
|
12
|
+
import Tooltip from './Tooltip.svelte';
|
|
13
|
+
import { inferArgs } from '../infer';
|
|
13
14
|
import { Highlight } from 'svelte-highlight';
|
|
14
15
|
import { json, python, typescript } from 'svelte-highlight/languages';
|
|
15
|
-
import github from 'svelte-highlight/styles/github';
|
|
16
|
-
import ItemPicker from './ItemPicker.svelte';
|
|
17
|
-
import VariableEditor from './VariableEditor.svelte';
|
|
18
|
-
import ResourceEditor from './ResourceEditor.svelte';
|
|
19
|
-
import { inferArgs } from '../infer';
|
|
20
|
-
// @ts-ignore
|
|
21
16
|
import { VSplitPane } from 'svelte-split-pane';
|
|
22
|
-
import SchemaForm from './SchemaForm.svelte';
|
|
23
17
|
import DisplayResult from './DisplayResult.svelte';
|
|
18
|
+
import EditorBar from './EditorBar.svelte';
|
|
19
|
+
import SchemaForm from './SchemaForm.svelte';
|
|
24
20
|
// Exported
|
|
25
21
|
export let schema = emptySchema();
|
|
26
22
|
export let code;
|
|
@@ -30,6 +26,9 @@ export let lang;
|
|
|
30
26
|
export let viewPreview = true;
|
|
31
27
|
export let previewTab = 'logs';
|
|
32
28
|
let websocketAlive = { pyright: false, black: false, deno: false };
|
|
29
|
+
let modalViewerTitle = '';
|
|
30
|
+
let modalViewerContent;
|
|
31
|
+
let modalViewerMode = 'logs';
|
|
33
32
|
// Internal state
|
|
34
33
|
let editor;
|
|
35
34
|
// Preview args input
|
|
@@ -41,14 +40,6 @@ let previewIntervalId;
|
|
|
41
40
|
let previewJob;
|
|
42
41
|
let pastPreviews = [];
|
|
43
42
|
let modalViewer;
|
|
44
|
-
let modalViewerTitle = '';
|
|
45
|
-
let modalViewerContent;
|
|
46
|
-
let modalViewerMode = 'logs';
|
|
47
|
-
let variablePicker;
|
|
48
|
-
let resourcePicker;
|
|
49
|
-
let scriptPicker;
|
|
50
|
-
let variableEditor;
|
|
51
|
-
let resourceEditor;
|
|
52
43
|
let syncIteration = 0;
|
|
53
44
|
let ITERATIONS_BEFORE_SLOW_REFRESH = 100;
|
|
54
45
|
let lastSave;
|
|
@@ -56,6 +47,7 @@ $: lastSave = localStorage.getItem(path ?? 'last_save');
|
|
|
56
47
|
export function getEditor() {
|
|
57
48
|
return editor;
|
|
58
49
|
}
|
|
50
|
+
let div = null;
|
|
59
51
|
export async function runPreview() {
|
|
60
52
|
try {
|
|
61
53
|
if (previewIntervalId) {
|
|
@@ -124,6 +116,7 @@ async function loadPreviewJob(id) {
|
|
|
124
116
|
previewIsLoading = false;
|
|
125
117
|
loadPastPreviews();
|
|
126
118
|
}
|
|
119
|
+
div?.scroll({ top: div?.scrollHeight, behavior: 'smooth' });
|
|
127
120
|
}
|
|
128
121
|
catch (err) {
|
|
129
122
|
console.error(err);
|
|
@@ -158,20 +151,6 @@ function syncer(id) {
|
|
|
158
151
|
loadPreviewJob(id);
|
|
159
152
|
}
|
|
160
153
|
}
|
|
161
|
-
async function loadVariables() {
|
|
162
|
-
let r = [];
|
|
163
|
-
const variables = (await VariableService.listVariable({ workspace: $workspaceStore ?? 'NO_W' })).map((x) => {
|
|
164
|
-
return { name: x.path, ...x };
|
|
165
|
-
});
|
|
166
|
-
const rvariables = await VariableService.listContextualVariables({
|
|
167
|
-
workspace: $workspaceStore ?? 'NO_W'
|
|
168
|
-
});
|
|
169
|
-
r = r.concat(variables).concat(rvariables);
|
|
170
|
-
return r;
|
|
171
|
-
}
|
|
172
|
-
async function loadScripts() {
|
|
173
|
-
return await ScriptService.listScripts({ workspace: $workspaceStore ?? 'NO_W' });
|
|
174
|
-
}
|
|
175
154
|
let syncCode;
|
|
176
155
|
onMount(() => {
|
|
177
156
|
syncCode = setInterval(() => {
|
|
@@ -194,29 +173,6 @@ onDestroy(() => {
|
|
|
194
173
|
});
|
|
195
174
|
</script>
|
|
196
175
|
|
|
197
|
-
<svelte:head>
|
|
198
|
-
{@html github}
|
|
199
|
-
</svelte:head>
|
|
200
|
-
|
|
201
|
-
<ItemPicker
|
|
202
|
-
bind:this={scriptPicker}
|
|
203
|
-
pickCallback={async (path, _) => {
|
|
204
|
-
modalViewerMode = 'code'
|
|
205
|
-
modalViewerTitle = 'Script ' + path
|
|
206
|
-
modalViewerContent = (
|
|
207
|
-
await ScriptService.getScriptByPath({
|
|
208
|
-
workspace: $workspaceStore ?? '',
|
|
209
|
-
path
|
|
210
|
-
})
|
|
211
|
-
).content
|
|
212
|
-
modalViewer.openModal()
|
|
213
|
-
}}
|
|
214
|
-
closeOnClick={false}
|
|
215
|
-
itemName="script"
|
|
216
|
-
extraField="summary"
|
|
217
|
-
loadItems={loadScripts}
|
|
218
|
-
/>
|
|
219
|
-
|
|
220
176
|
<Modal bind:this={modalViewer}>
|
|
221
177
|
<div slot="title">{modalViewerTitle}</div>
|
|
222
178
|
<div slot="content">
|
|
@@ -236,101 +192,7 @@ onDestroy(() => {
|
|
|
236
192
|
</div></Modal
|
|
237
193
|
>
|
|
238
194
|
|
|
239
|
-
<ItemPicker
|
|
240
|
-
bind:this={variablePicker}
|
|
241
|
-
pickCallback={(path, name) => {
|
|
242
|
-
if (!path) {
|
|
243
|
-
if (lang == 'deno') {
|
|
244
|
-
getEditor().insertAtCursor(`Deno.env.get('${name}')`)
|
|
245
|
-
} else {
|
|
246
|
-
if (!getEditor().getCode().includes('import os')) {
|
|
247
|
-
getEditor().insertAtBeginning('import os\n')
|
|
248
|
-
}
|
|
249
|
-
getEditor().insertAtCursor(`os.environ.get("${name}")`)
|
|
250
|
-
}
|
|
251
|
-
sendUserToast(`${name} inserted at cursor`)
|
|
252
|
-
} else {
|
|
253
|
-
if (lang == 'deno') {
|
|
254
|
-
if (!getEditor().getCode().includes('import * as wmill from')) {
|
|
255
|
-
getEditor().insertAtBeginning(
|
|
256
|
-
`import * as wmill from 'https://deno.land/x/windmill@v${__pkg__.version}/index.ts'\n`
|
|
257
|
-
)
|
|
258
|
-
}
|
|
259
|
-
getEditor().insertAtCursor(`(await wmill.getVariable('${path}'))`)
|
|
260
|
-
} else {
|
|
261
|
-
if (!getEditor().getCode().includes('import wmill')) {
|
|
262
|
-
getEditor().insertAtBeginning('import wmill\n')
|
|
263
|
-
}
|
|
264
|
-
getEditor().insertAtCursor(`wmill.get_variable("${path}")`)
|
|
265
|
-
}
|
|
266
|
-
sendUserToast(`${name} inserted at cursor`)
|
|
267
|
-
}
|
|
268
|
-
}}
|
|
269
|
-
itemName="Variable"
|
|
270
|
-
extraField="name"
|
|
271
|
-
loadItems={loadVariables}
|
|
272
|
-
>
|
|
273
|
-
<div slot="submission" class="flex flex-row">
|
|
274
|
-
<div class="text-xs mr-2 align-middle">
|
|
275
|
-
The variable you were looking for does not exist yet?
|
|
276
|
-
</div>
|
|
277
|
-
<button
|
|
278
|
-
class="default-button-secondary"
|
|
279
|
-
type="button"
|
|
280
|
-
on:click={() => {
|
|
281
|
-
variableEditor.initNew()
|
|
282
|
-
}}
|
|
283
|
-
>
|
|
284
|
-
Create a new variable
|
|
285
|
-
</button>
|
|
286
|
-
</div>
|
|
287
|
-
</ItemPicker>
|
|
288
|
-
|
|
289
|
-
<ItemPicker
|
|
290
|
-
bind:this={resourcePicker}
|
|
291
|
-
pickCallback={(path, _) => {
|
|
292
|
-
if (lang == 'deno') {
|
|
293
|
-
if (!getEditor().getCode().includes('import * as wmill from')) {
|
|
294
|
-
getEditor().insertAtBeginning(
|
|
295
|
-
`import * as wmill from 'https://deno.land/x/windmill@v${__pkg__.version}/index.ts'\n`
|
|
296
|
-
)
|
|
297
|
-
}
|
|
298
|
-
getEditor().insertAtCursor(`(await wmill.getResource('${path}'))`)
|
|
299
|
-
} else {
|
|
300
|
-
if (!getEditor().getCode().includes('import wmill')) {
|
|
301
|
-
getEditor().insertAtBeginning('import wmill\n')
|
|
302
|
-
}
|
|
303
|
-
getEditor().insertAtCursor(`wmill.get_resource("${path}")`)
|
|
304
|
-
}
|
|
305
|
-
sendUserToast(`${path} inserted at cursor`)
|
|
306
|
-
}}
|
|
307
|
-
itemName="Resource"
|
|
308
|
-
extraField="resource_type"
|
|
309
|
-
loadItems={async () =>
|
|
310
|
-
await ResourceService.listResource({ workspace: $workspaceStore ?? 'NO_W' })}
|
|
311
|
-
>
|
|
312
|
-
<div slot="submission" class="flex flex-row">
|
|
313
|
-
<div class="text-xs mr-2 align-middle">
|
|
314
|
-
The resource you were looking for does not exist yet?
|
|
315
|
-
</div>
|
|
316
|
-
<button
|
|
317
|
-
class="default-button-secondary"
|
|
318
|
-
type="button"
|
|
319
|
-
on:click={() => {
|
|
320
|
-
resourceEditor.initNew()
|
|
321
|
-
}}
|
|
322
|
-
>
|
|
323
|
-
Create a new resource
|
|
324
|
-
</button>
|
|
325
|
-
</div>
|
|
326
|
-
</ItemPicker>
|
|
327
|
-
|
|
328
|
-
<ResourceEditor bind:this={resourceEditor} on:refresh={resourcePicker.openModal} />
|
|
329
|
-
|
|
330
|
-
<VariableEditor bind:this={variableEditor} on:create={variablePicker.openModal} />
|
|
331
|
-
|
|
332
195
|
<VSplitPane
|
|
333
|
-
class="h-full"
|
|
334
196
|
topPanelSize={viewPreview ? '75%' : '90%'}
|
|
335
197
|
downPanelSize={viewPreview ? '25%' : '10%'}
|
|
336
198
|
updateCallback={() => {
|
|
@@ -342,48 +204,9 @@ onDestroy(() => {
|
|
|
342
204
|
<top slot="top">
|
|
343
205
|
<div class="flex flex-col h-full">
|
|
344
206
|
<div class="header">
|
|
345
|
-
<
|
|
346
|
-
<button
|
|
347
|
-
class="default-button-secondary font-semibold py-px mr-2 text-xs align-middle max-h-8"
|
|
348
|
-
on:click|stopPropagation={() => {
|
|
349
|
-
variablePicker.openModal()
|
|
350
|
-
}}
|
|
351
|
-
>Variable picker <Icon data={faSearch} scale={0.7} />
|
|
352
|
-
</button>
|
|
353
|
-
|
|
354
|
-
<button
|
|
355
|
-
class="default-button-secondary font-semibold py-px text-xs mr-2 align-middle max-h-8"
|
|
356
|
-
on:click|stopPropagation={() => {
|
|
357
|
-
resourcePicker.openModal()
|
|
358
|
-
}}
|
|
359
|
-
>Resource picker <Icon data={faSearch} scale={0.7} />
|
|
360
|
-
</button>
|
|
361
|
-
<button
|
|
362
|
-
class="default-button-secondary font-semibold py-px text-xs mr-2 align-middle max-h-8"
|
|
363
|
-
on:click|stopPropagation={() => {
|
|
364
|
-
scriptPicker.openModal()
|
|
365
|
-
}}
|
|
366
|
-
>Script explorer <Icon data={faSearch} scale={0.7} />
|
|
367
|
-
</button>
|
|
368
|
-
|
|
369
|
-
<button
|
|
370
|
-
class="default-button-secondary py-px max-h-8 text-xs"
|
|
371
|
-
on:click|stopPropagation={() => {
|
|
372
|
-
editor.reloadWebsocket()
|
|
373
|
-
}}
|
|
374
|
-
>
|
|
375
|
-
Reload assistants (status: {#if lang == 'deno'}<span
|
|
376
|
-
class={websocketAlive.deno ? 'text-green-600' : 'text-red-600'}>deno</span
|
|
377
|
-
>{:else if lang == 'python3'}<span
|
|
378
|
-
class={websocketAlive.pyright ? 'text-green-600' : 'text-red-600'}>pyright</span
|
|
379
|
-
>
|
|
380
|
-
<span class={websocketAlive.black ? 'text-green-600' : 'text-red-600'}>
|
|
381
|
-
black</span
|
|
382
|
-
>{/if})
|
|
383
|
-
</button>
|
|
384
|
-
</div>
|
|
207
|
+
<EditorBar {editor} {lang} {websocketAlive} />
|
|
385
208
|
</div>
|
|
386
|
-
<div class="flex-1 overflow-hidden">
|
|
209
|
+
<div class="flex-1 overflow-hidden border p-2 rounded">
|
|
387
210
|
<Editor
|
|
388
211
|
{code}
|
|
389
212
|
bind:websocketAlive
|
|
@@ -392,9 +215,15 @@ onDestroy(() => {
|
|
|
392
215
|
runPreview()
|
|
393
216
|
viewPreview = true
|
|
394
217
|
}}
|
|
395
|
-
formatAction={() => {
|
|
218
|
+
formatAction={async () => {
|
|
396
219
|
code = getEditor().getCode()
|
|
220
|
+
await inferSchema()
|
|
397
221
|
localStorage.setItem(path ?? 'last_save', code)
|
|
222
|
+
lastSave = code
|
|
223
|
+
}}
|
|
224
|
+
on:blur={() => {
|
|
225
|
+
code = getEditor().getCode()
|
|
226
|
+
inferSchema()
|
|
398
227
|
}}
|
|
399
228
|
class="h-full"
|
|
400
229
|
deno={lang == 'deno'}
|
|
@@ -411,8 +240,8 @@ onDestroy(() => {
|
|
|
411
240
|
viewPreview = !viewPreview
|
|
412
241
|
}}
|
|
413
242
|
>
|
|
414
|
-
<div class="flex flex-row items-baseline">
|
|
415
|
-
<div class="font-base py-0 mr-6">
|
|
243
|
+
<div class="flex flex-row flex-wrap items-baseline">
|
|
244
|
+
<div class="font-base py-0 mr-6 hidden md:block">
|
|
416
245
|
Preview <Tooltip
|
|
417
246
|
><span class="font-normal"
|
|
418
247
|
>Test your script by running a preview, passing inputs as if you were a user</span
|
|
@@ -499,7 +328,7 @@ onDestroy(() => {
|
|
|
499
328
|
}}
|
|
500
329
|
>Run preview
|
|
501
330
|
</button>
|
|
502
|
-
<div class="text-xs text-gray-700 min-w-max mx-2">
|
|
331
|
+
<div class="text-xs text-gray-700 min-w-max hidden md:block mx-2">
|
|
503
332
|
Shortcuts: <Tooltip>
|
|
504
333
|
Cmd/Ctrl+S: autoformat code and overwrite local save <br />
|
|
505
334
|
Cmd/Ctrl+Enter: run preview</Tooltip
|
|
@@ -508,7 +337,7 @@ onDestroy(() => {
|
|
|
508
337
|
</div>
|
|
509
338
|
</div>
|
|
510
339
|
</div>
|
|
511
|
-
<div class="preview flex-1
|
|
340
|
+
<div bind:this={div} class="preview flex-1 p-3">
|
|
512
341
|
{#if previewTab === 'logs'}
|
|
513
342
|
<pre
|
|
514
343
|
class="break-all relative h-full mx-2">{#if previewJob && previewJob.logs}{previewJob.logs}
|
|
@@ -516,21 +345,20 @@ onDestroy(() => {
|
|
|
516
345
|
{:else}No preview is available yet{/if}
|
|
517
346
|
</pre>
|
|
518
347
|
{:else if previewTab === 'input'}
|
|
519
|
-
<div class="break-all relative h-full font-sans">
|
|
520
|
-
<div class="
|
|
521
|
-
<
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
current preview input doesn't match requirements defined in arguments. Are you sure?{/if}
|
|
348
|
+
<div class="break-all relative h-full font-sans -mt-2">
|
|
349
|
+
<div class="items-baseline text-xs text-gray-700 px-2 ml-8 italic hidden md:block">
|
|
350
|
+
<p>
|
|
351
|
+
Move the focus outside of the text editor to recompute the input schema from main
|
|
352
|
+
signature or press Ctrl/Cmd+S
|
|
353
|
+
</p>
|
|
354
|
+
<p class="">
|
|
355
|
+
{#if isValid}
|
|
356
|
+
<Icon data={faCheck} class="text-green-600 mr-1" scale={0.6} /> The current preview input
|
|
357
|
+
matches requirements defined in arguments
|
|
358
|
+
{:else}
|
|
359
|
+
<Icon data={faExclamationTriangle} class="text-yellow-500 mr-1" scale={0.6} />The
|
|
360
|
+
current preview input doesn't match requirements defined in arguments{/if}
|
|
361
|
+
</p>
|
|
534
362
|
</div>
|
|
535
363
|
<div class="sm:px-8">
|
|
536
364
|
<SchemaForm {schema} bind:args bind:isValid />
|
|
@@ -561,7 +389,7 @@ onDestroy(() => {
|
|
|
561
389
|
{:else}No local save{/if}
|
|
562
390
|
</div>
|
|
563
391
|
{:else if previewTab === 'history'}
|
|
564
|
-
<TableCustom
|
|
392
|
+
<TableCustom>
|
|
565
393
|
<tr slot="header-row">
|
|
566
394
|
<th class="text-xs">id</th>
|
|
567
395
|
<th class="text-xs">created at</th>
|
|
@@ -571,11 +399,11 @@ onDestroy(() => {
|
|
|
571
399
|
<th class="text-xs">logs</th>
|
|
572
400
|
</tr>
|
|
573
401
|
<tbody slot="body">
|
|
574
|
-
{#each pastPreviews as { id, created_at, success, result
|
|
402
|
+
{#each pastPreviews as { id, created_at, success, result }}
|
|
575
403
|
<tr class="">
|
|
576
|
-
<td class="text-xs"
|
|
577
|
-
|
|
578
|
-
>
|
|
404
|
+
<td class="text-xs">
|
|
405
|
+
<a class="pr-3" href="/run/{id}" target="_blank">{id.substring(30)}</a>
|
|
406
|
+
</td>
|
|
579
407
|
<td class="text-xs">{displayDate(created_at)}</td>
|
|
580
408
|
<td class="text-xs">
|
|
581
409
|
{#if success}
|
|
@@ -592,9 +420,10 @@ onDestroy(() => {
|
|
|
592
420
|
modalViewerContent = result
|
|
593
421
|
modalViewerMode = 'result'
|
|
594
422
|
modalViewer.openModal()
|
|
595
|
-
}}
|
|
596
|
-
|
|
597
|
-
|
|
423
|
+
}}
|
|
424
|
+
>{JSON.stringify(result).substring(0, 30)}...
|
|
425
|
+
</a>
|
|
426
|
+
</td>
|
|
598
427
|
<td class="text-xs"
|
|
599
428
|
><a
|
|
600
429
|
href="#code"
|
|
@@ -640,30 +469,29 @@ onDestroy(() => {
|
|
|
640
469
|
|
|
641
470
|
<style>
|
|
642
471
|
.header {
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
padding-bottom: 0.25rem;
|
|
649
|
-
border-left-width: 1px;
|
|
650
|
-
border-right-width: 1px;
|
|
651
|
-
--tw-bg-opacity: 1;
|
|
652
|
-
background-color: rgb(243 244 246 / var(--tw-bg-opacity));
|
|
653
|
-
font-size: 0.75rem;
|
|
654
|
-
line-height: 1rem;
|
|
655
|
-
--tw-text-opacity: 1;
|
|
656
|
-
color: rgb(55 65 81 / var(--tw-text-opacity));
|
|
657
|
-
}
|
|
472
|
+
|
|
473
|
+
padding-top: 0.5rem;
|
|
474
|
+
|
|
475
|
+
padding-bottom: 0.5rem
|
|
476
|
+
}
|
|
658
477
|
|
|
659
478
|
.preview {
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
479
|
+
|
|
480
|
+
border-width: 1px;
|
|
481
|
+
|
|
482
|
+
overflow: auto;
|
|
483
|
+
|
|
484
|
+
border-left-width: 1px;
|
|
485
|
+
|
|
486
|
+
border-right-width: 1px;
|
|
487
|
+
|
|
488
|
+
--tw-bg-opacity: 1;
|
|
489
|
+
|
|
490
|
+
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
|
491
|
+
|
|
492
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
|
493
|
+
|
|
494
|
+
font-size: 0.75rem;
|
|
495
|
+
|
|
496
|
+
line-height: 1rem
|
|
669
497
|
}</style>
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
<script>import { ScriptService, FlowService
|
|
1
|
+
<script>import { ScriptService, FlowService } from '../gen';
|
|
2
2
|
import Icon from 'svelte-awesome';
|
|
3
3
|
import { faSearch } from '@fortawesome/free-solid-svg-icons';
|
|
4
4
|
import { hubScripts, workspaceStore } from '../stores';
|
|
5
5
|
import { createEventDispatcher } from 'svelte';
|
|
6
6
|
import ItemPicker from './ItemPicker.svelte';
|
|
7
|
-
import RadioButton from './RadioButton.svelte';
|
|
8
7
|
import Modal from './Modal.svelte';
|
|
9
8
|
import { Highlight } from 'svelte-highlight';
|
|
10
|
-
import
|
|
11
|
-
import
|
|
9
|
+
import typescript from 'svelte-highlight/languages/typescript';
|
|
10
|
+
import python from 'svelte-highlight/languages/python';
|
|
11
|
+
import { getScriptByPath } from '../utils';
|
|
12
|
+
import RadioButton from './RadioButton.svelte';
|
|
12
13
|
export let scriptPath = undefined;
|
|
13
14
|
export let allowFlow = false;
|
|
14
15
|
export let allowHub = false;
|
|
@@ -23,20 +24,6 @@ let options = [['Script', 'script']];
|
|
|
23
24
|
allowHub && options.unshift(['Hub', 'hub']);
|
|
24
25
|
allowFlow && options.push(['Flow', 'flow']);
|
|
25
26
|
const dispatch = createEventDispatcher();
|
|
26
|
-
async function getScript() {
|
|
27
|
-
if (itemKind == 'hub') {
|
|
28
|
-
code = await ScriptService.getHubScriptContentByPath({ path: scriptPath });
|
|
29
|
-
lang = Script.language.DENO;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
const script = await ScriptService.getScriptByPath({
|
|
33
|
-
workspace: $workspaceStore,
|
|
34
|
-
path: scriptPath
|
|
35
|
-
});
|
|
36
|
-
code = script.content;
|
|
37
|
-
lang = script.language;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
27
|
async function loadItems() {
|
|
41
28
|
if (itemKind == 'flow') {
|
|
42
29
|
items = await FlowService.listFlows({ workspace: $workspaceStore });
|
|
@@ -55,10 +42,6 @@ $: {
|
|
|
55
42
|
}
|
|
56
43
|
</script>
|
|
57
44
|
|
|
58
|
-
<svelte:head>
|
|
59
|
-
{@html github}
|
|
60
|
-
</svelte:head>
|
|
61
|
-
|
|
62
45
|
<ItemPicker
|
|
63
46
|
bind:this={itemPicker}
|
|
64
47
|
pickCallback={(path, _) => {
|
|
@@ -74,9 +57,11 @@ $: {
|
|
|
74
57
|
/>
|
|
75
58
|
|
|
76
59
|
<div class="flex flex-row items-center space-x-5">
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
60
|
+
<div class="w-80">
|
|
61
|
+
{#if options.length > 1}
|
|
62
|
+
<RadioButton bind:value={itemKind} {options} />
|
|
63
|
+
{/if}
|
|
64
|
+
</div>
|
|
80
65
|
|
|
81
66
|
<input type="text" value={scriptPath ?? 'No path chosen yet'} disabled />
|
|
82
67
|
<button class="default-button text-gray-100" on:click={() => itemPicker.openModal()}
|
|
@@ -86,7 +71,9 @@ $: {
|
|
|
86
71
|
<button
|
|
87
72
|
class="text-xs text-blue-500"
|
|
88
73
|
on:click={async () => {
|
|
89
|
-
await
|
|
74
|
+
const { language, content } = await getScriptByPath(scriptPath ?? '')
|
|
75
|
+
code = content
|
|
76
|
+
lang = language
|
|
90
77
|
modalViewer.openModal()
|
|
91
78
|
}}>show code</button
|
|
92
79
|
>
|
|
@@ -4,7 +4,7 @@ declare const __propDef: {
|
|
|
4
4
|
scriptPath?: string | undefined;
|
|
5
5
|
allowFlow?: boolean | undefined;
|
|
6
6
|
allowHub?: boolean | undefined;
|
|
7
|
-
itemKind?: "
|
|
7
|
+
itemKind?: "flow" | "script" | "hub" | undefined;
|
|
8
8
|
isTrigger?: boolean | undefined;
|
|
9
9
|
};
|
|
10
10
|
events: {
|
|
@@ -3,7 +3,6 @@ import SchemaForm from './SchemaForm.svelte';
|
|
|
3
3
|
import Tabs from './Tabs.svelte';
|
|
4
4
|
import Highlight from 'svelte-highlight';
|
|
5
5
|
import json from 'svelte-highlight/languages/json';
|
|
6
|
-
import github from 'svelte-highlight/styles/github';
|
|
7
6
|
import SvelteMarkdown from 'svelte-markdown';
|
|
8
7
|
export let schema;
|
|
9
8
|
export let summary;
|
|
@@ -15,10 +14,6 @@ export function setSchema(newSchema) {
|
|
|
15
14
|
}
|
|
16
15
|
</script>
|
|
17
16
|
|
|
18
|
-
<svelte:head>
|
|
19
|
-
{@html github}
|
|
20
|
-
</svelte:head>
|
|
21
|
-
|
|
22
17
|
<div class="w-full">
|
|
23
18
|
<PageHeader title="UI customisation" />
|
|
24
19
|
<Tabs
|
|
@@ -86,7 +86,7 @@ async function addAcl(owner, write) {
|
|
|
86
86
|
<option>group</option>
|
|
87
87
|
</select>
|
|
88
88
|
</label>
|
|
89
|
-
<label class="block grow mx-2">
|
|
89
|
+
<label class="block grow mx-2" for="inp">
|
|
90
90
|
<span class="text-sm text-gray-700">Owner</span>
|
|
91
91
|
<div class="block mt-1">
|
|
92
92
|
<div class="static z-50">
|
|
@@ -20,13 +20,13 @@ $: {
|
|
|
20
20
|
}
|
|
21
21
|
else {
|
|
22
22
|
let writeGroup = pgroups.find((x) => extraPermsKeys.includes(x) && extraPerms[x]);
|
|
23
|
-
if (
|
|
23
|
+
if (writeGroup) {
|
|
24
24
|
kind = 'write';
|
|
25
25
|
reason = `This item was write shared to the group ${writeGroup} which you are a member of`;
|
|
26
26
|
}
|
|
27
27
|
else {
|
|
28
|
-
let readGroup = pgroups.find((x) => extraPermsKeys.includes(x)
|
|
29
|
-
if (
|
|
28
|
+
let readGroup = pgroups.find((x) => extraPermsKeys.includes(x));
|
|
29
|
+
if (readGroup) {
|
|
30
30
|
kind = 'read';
|
|
31
31
|
reason = `This item was read-only shared to the group ${readGroup} which you are a member of`;
|
|
32
32
|
}
|
|
@@ -45,10 +45,12 @@ $: {
|
|
|
45
45
|
}
|
|
46
46
|
</script>
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
{#if kind == 'read' || kind == 'write'}
|
|
49
|
+
<span class="mr-1">
|
|
50
|
+
{#if kind == 'read'}
|
|
51
|
+
<Badge tooltip={reason}>shared to you (read-only)</Badge>
|
|
52
|
+
{:else if kind == 'write'}
|
|
53
|
+
<Badge tooltip={reason}>shared to you</Badge>
|
|
54
|
+
{/if}
|
|
55
|
+
</span>
|
|
56
|
+
{/if}
|
|
@@ -3,6 +3,7 @@ import ResourceTypePicker from './ResourceTypePicker.svelte';
|
|
|
3
3
|
export let pattern;
|
|
4
4
|
export let enum_;
|
|
5
5
|
export let format;
|
|
6
|
+
export let contentEncoding;
|
|
6
7
|
let kind = 'none';
|
|
7
8
|
let patternStr = pattern ?? '';
|
|
8
9
|
let resource;
|
|
@@ -21,13 +22,14 @@ const FORMATS = [
|
|
|
21
22
|
$: format =
|
|
22
23
|
kind == 'resource' ? (resource != undefined ? `resource-${resource}` : 'resource') : undefined;
|
|
23
24
|
$: pattern = patternStr == '' ? undefined : patternStr;
|
|
25
|
+
$: contentEncoding = kind == 'base64' ? 'base64' : undefined;
|
|
24
26
|
</script>
|
|
25
27
|
|
|
26
28
|
<RadioButton
|
|
27
29
|
label="Kind"
|
|
28
|
-
small={true}
|
|
29
30
|
options={[
|
|
30
31
|
['None', 'none'],
|
|
32
|
+
['File (base64)', 'base64'],
|
|
31
33
|
['Enum', 'enum'],
|
|
32
34
|
['Resource Path', 'resource'],
|
|
33
35
|
['Format', 'format'],
|
|
@@ -35,12 +37,14 @@ $: pattern = patternStr == '' ? undefined : patternStr;
|
|
|
35
37
|
]}
|
|
36
38
|
bind:value={kind}
|
|
37
39
|
/>
|
|
40
|
+
<div class="my-2" />
|
|
38
41
|
|
|
39
42
|
{#if kind == 'pattern'}
|
|
40
|
-
<label class="mb-2 text-gray-700 text-xs"
|
|
43
|
+
<label for="input" class="mb-2 text-gray-700 text-xs"
|
|
41
44
|
>Pattern (Regex)
|
|
42
45
|
<div class="flex flex-row">
|
|
43
46
|
<input
|
|
47
|
+
id="input"
|
|
44
48
|
type="text"
|
|
45
49
|
placeholder="^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"
|
|
46
50
|
bind:value={patternStr}
|
|
@@ -54,11 +58,11 @@ $: pattern = patternStr == '' ? undefined : patternStr;
|
|
|
54
58
|
</div>
|
|
55
59
|
</label>
|
|
56
60
|
{:else if kind == 'enum'}
|
|
57
|
-
<label class="mb-2 text-gray-700 text-xs"
|
|
61
|
+
<label for="input" class="mb-2 text-gray-700 text-xs"
|
|
58
62
|
>Enums
|
|
59
63
|
{#each enum_ ?? [] as e}
|
|
60
64
|
<div class="flex flex-row max-w-md">
|
|
61
|
-
<input type="text" bind:value={e} />
|
|
65
|
+
<input id="input" type="text" bind:value={e} />
|
|
62
66
|
<button
|
|
63
67
|
class="default-button mx-6"
|
|
64
68
|
on:click={() => {
|