windmill-components 1.103.2 → 1.109.2
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/package/components/AppConnect.svelte +4 -1
- package/package/components/ArgInput.svelte +81 -68
- package/package/components/ArgInput.svelte.d.ts +0 -2
- package/package/components/Awareness.svelte +17 -0
- package/package/components/Awareness.svelte.d.ts +14 -0
- package/package/components/CliHelpBox.svelte +2 -5
- package/package/components/Editor.svelte +81 -30
- package/package/components/Editor.svelte.d.ts +4 -0
- package/package/components/EditorBar.svelte +127 -131
- package/package/components/EditorBar.svelte.d.ts +8 -0
- package/package/components/FlowBuilder.svelte +6 -1
- package/package/components/FlowStatusViewer.svelte +157 -144
- package/package/components/FlowStatusViewer.svelte.d.ts +1 -0
- package/package/components/HighlightCode.svelte +9 -2
- package/package/components/HighlightCode.svelte.d.ts +1 -0
- package/package/components/InputTransformForm.svelte +1 -1
- package/package/components/InputTransformSchemaForm.svelte +4 -1
- package/package/components/InputTransformSchemaForm.svelte.d.ts +3 -0
- package/package/components/ObjectTypeNarrowing.svelte +8 -2
- package/package/components/ResourcePicker.svelte +0 -1
- package/package/components/ResourceTypePicker.svelte +1 -1
- package/package/components/RunForm.svelte.d.ts +1 -1
- package/package/components/ScheduleEditor.svelte +35 -3
- package/package/components/SchemaEditor.svelte +7 -8
- package/package/components/SchemaEditor.svelte.d.ts +1 -1
- package/package/components/SchemaForm.svelte.d.ts +1 -1
- package/package/components/SchemaModal.svelte +7 -12
- package/package/components/SchemaModal.svelte.d.ts +2 -3
- package/package/components/SchemaViewer.svelte +7 -1
- package/package/components/SchemaViewer.svelte.d.ts +1 -1
- package/package/components/ScriptBuilder.svelte +95 -21
- package/package/components/ScriptEditor.svelte +114 -6
- package/package/components/ScriptEditor.svelte.d.ts +7 -1
- package/package/components/ScriptSchema.svelte.d.ts +1 -1
- package/package/components/TemplateEditor.svelte +1 -0
- package/package/components/Toggle.svelte +1 -1
- package/package/components/Urlize.svelte +19 -0
- package/package/components/Urlize.svelte.d.ts +16 -0
- package/package/components/UserSettings.svelte +57 -36
- package/package/components/UserSettings.svelte.d.ts +1 -0
- package/package/components/VariableEditor.svelte +1 -1
- package/package/components/apps/components/buttons/AppSchemaForm.svelte +6 -1
- package/package/components/apps/components/display/AppDisplayComponent.svelte +6 -1
- package/package/components/apps/components/display/AppDownload.svelte +33 -25
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte +2 -2
- package/package/components/apps/components/display/AppLogsComponent.svelte +2 -2
- package/package/components/apps/components/display/AppText.svelte +9 -14
- package/package/components/apps/components/display/table/AppAggridTable.svelte +45 -36
- package/package/components/apps/components/display/table/AppTable.svelte +5 -2
- package/package/components/apps/components/helpers/ComponentErrorHandler.svelte +26 -0
- package/package/components/apps/components/helpers/ComponentErrorHandler.svelte.d.ts +18 -0
- package/package/components/apps/components/helpers/InputValue.svelte +15 -17
- package/package/components/apps/components/helpers/NonRunnableComponent.svelte +1 -1
- package/package/components/apps/components/helpers/eval.d.ts +1 -0
- package/package/components/apps/components/helpers/eval.js +3 -1
- package/package/components/apps/components/inputs/AppCheckbox.svelte +21 -8
- package/package/components/apps/components/inputs/AppDateInput.svelte +6 -1
- package/package/components/apps/components/inputs/AppMultiSelect.svelte +18 -7
- package/package/components/apps/components/inputs/AppNumberInput.svelte +6 -1
- package/package/components/apps/components/inputs/AppRangeInput.svelte +6 -2
- package/package/components/apps/components/inputs/AppSelect.svelte +11 -3
- package/package/components/apps/components/inputs/AppSelectStep.svelte +19 -6
- package/package/components/apps/components/inputs/AppSelectTab.svelte +9 -1
- package/package/components/apps/components/inputs/AppSliderInputs.svelte +6 -1
- package/package/components/apps/components/inputs/AppTextInput.svelte +6 -1
- package/package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +6 -1
- package/package/components/apps/components/inputs/currency/CurrencyInput.svelte +0 -1
- package/package/components/apps/editor/AppEditor.svelte +4 -7
- package/package/components/apps/editor/AppEditor.svelte.d.ts +3 -2
- package/package/components/apps/editor/AppEditorHeader.svelte +38 -11
- package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +3 -0
- package/package/components/apps/editor/AppPreview.svelte +9 -7
- package/package/components/apps/editor/AppPreview.svelte.d.ts +6 -6
- package/package/components/apps/editor/ConnectionInstructions.svelte +1 -0
- package/package/components/apps/editor/DeploymentHistory.svelte +70 -0
- package/package/components/apps/editor/DeploymentHistory.svelte.d.ts +18 -0
- package/package/components/apps/editor/RecomputeAllComponents.svelte +49 -20
- package/package/components/apps/editor/component/ComponentNavigation.svelte +51 -20
- package/package/components/apps/editor/component/ComponentNavigation.svelte.d.ts +4 -1
- package/package/components/apps/editor/component/components.d.ts +50 -49
- package/package/components/apps/editor/component/components.js +6 -0
- package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +1 -0
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +1 -4
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +4 -7
- package/package/components/apps/rx.js +6 -1
- package/package/components/apps/types.d.ts +1 -1
- package/package/components/apps/utils.js +1 -0
- package/package/components/common/button/ButtonDropdown.svelte +45 -19
- package/package/components/common/button/ButtonDropdown.svelte.d.ts +1 -0
- package/package/components/common/modal/Modal.svelte +13 -2
- package/package/components/common/modal/Modal.svelte.d.ts +1 -0
- package/package/components/common/table/AppRow.svelte +33 -3
- package/package/components/flows/content/FlowModuleCache.svelte +37 -0
- package/package/components/flows/content/FlowModuleCache.svelte.d.ts +17 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +57 -54
- package/package/components/flows/content/FlowModuleEarlyStop.svelte +1 -1
- package/package/components/flows/content/FlowModuleHeader.svelte +12 -1
- package/package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleSleep.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +1 -7
- package/package/components/flows/content/ScriptEditorDrawer.svelte +2 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +13 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +49 -5
- package/package/components/flows/map/MapItem.svelte +9 -2
- package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
- package/package/components/flows/pickers/PickHubApp.svelte +2 -1
- package/package/components/flows/pickers/PickHubApp.svelte.d.ts +1 -0
- package/package/components/flows/pickers/PickHubFlow.svelte +2 -1
- package/package/components/flows/pickers/PickHubFlow.svelte.d.ts +1 -0
- package/package/components/flows/pickers/PickHubScript.svelte +2 -1
- package/package/components/flows/pickers/PickHubScript.svelte.d.ts +1 -0
- package/package/components/flows/previousResults.d.ts +2 -0
- package/package/components/flows/previousResults.js +46 -0
- package/package/components/graph/FlowGraph.svelte +1 -1
- package/package/components/home/ItemsList.svelte +11 -3
- package/package/components/home/ListFilters.svelte +39 -0
- package/package/components/home/ListFilters.svelte.d.ts +4 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +77 -79
- package/package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -1
- package/package/components/propertyPicker/PropPicker.svelte +18 -0
- package/package/components/sidebar/MultiplayerMenu.svelte +123 -0
- package/package/components/sidebar/MultiplayerMenu.svelte.d.ts +16 -0
- package/package/components/sidebar/WorkspaceMenu.svelte +1 -1
- package/package/gen/core/CancelablePromise.d.ts +2 -8
- package/package/gen/core/CancelablePromise.js +38 -36
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/core/request.js +3 -2
- package/package/gen/models/AuditLog.d.ts +1 -1
- package/package/gen/models/CreateInput.d.ts +1 -1
- package/package/gen/models/FlowMetadata.d.ts +1 -1
- package/package/gen/models/FlowModule.d.ts +1 -0
- package/package/gen/models/Input.d.ts +1 -1
- package/package/gen/models/NewScript.d.ts +2 -1
- package/package/gen/models/NewToken.d.ts +1 -0
- package/package/gen/models/OpenFlow.d.ts +1 -1
- package/package/gen/models/Policy.d.ts +1 -1
- package/package/gen/models/Script.d.ts +2 -1
- package/package/gen/models/TruncatedToken.d.ts +1 -0
- package/package/gen/services/AppService.d.ts +1 -1
- package/package/gen/services/JobService.d.ts +64 -4
- package/package/gen/services/JobService.js +45 -0
- package/package/gen/services/ResourceService.d.ts +2 -1
- package/package/gen/services/ResourceService.js +4 -1
- package/package/gen/services/ScriptService.d.ts +0 -45
- package/package/gen/services/ScriptService.js +0 -52
- package/package/gen/services/SettingsService.d.ts +6 -0
- package/package/gen/services/SettingsService.js +11 -0
- package/package/gen/services/UserService.d.ts +14 -0
- package/package/gen/services/UserService.js +11 -0
- package/package/gen/services/VariableService.d.ts +12 -0
- package/package/gen/services/VariableService.js +16 -0
- package/package/hub.d.ts +1 -1
- package/package/infer.js +8 -13
- package/package/navigation.d.ts +1 -1
- package/package/navigation.js +6 -1
- package/package/script_helpers.d.ts +1 -1
- package/package/script_helpers.js +6 -1
- package/package/stores.d.ts +2 -0
- package/package/stores.js +4 -2
- package/package/utils.d.ts +1 -0
- package/package/utils.js +14 -0
- package/package.json +28 -19
|
@@ -267,7 +267,9 @@ let filteredConnectsManual = [];
|
|
|
267
267
|
}}
|
|
268
268
|
size="800px"
|
|
269
269
|
>
|
|
270
|
-
<DrawerContent title="Connect an API or add a Resource" on:close={drawer.closeDrawer}
|
|
270
|
+
<DrawerContent title="Connect an API or add a Resource" on:close={drawer.closeDrawer}
|
|
271
|
+
tooltip="Resources represent connections to third party systems. Learn more on how to integrate external APIs."
|
|
272
|
+
documentationLink="https://docs.windmill.dev/docs/integrations/integrations_on_windmill">
|
|
271
273
|
{#if step == 1}
|
|
272
274
|
<div class="w-12/12 pb-2 flex flex-row my-1 gap-1">
|
|
273
275
|
<input
|
|
@@ -326,6 +328,7 @@ let filteredConnectsManual = [];
|
|
|
326
328
|
<Button
|
|
327
329
|
variant="border"
|
|
328
330
|
color="blue"
|
|
331
|
+
hover="yo"
|
|
329
332
|
size="sm"
|
|
330
333
|
endIcon={{ icon: faPlus }}
|
|
331
334
|
on:click={() => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<script>import { faChevronDown, faChevronUp,
|
|
1
|
+
<script>import { faChevronDown, faChevronUp, faPlus } from '@fortawesome/free-solid-svg-icons';
|
|
2
2
|
import { setInputCat as computeInputCat } from '../utils';
|
|
3
|
-
import { X } from 'lucide-svelte';
|
|
3
|
+
import { DollarSign, Pen, X } from 'lucide-svelte';
|
|
4
4
|
import { createEventDispatcher } from 'svelte';
|
|
5
5
|
import autosize from 'svelte-autosize';
|
|
6
6
|
import Icon from 'svelte-awesome';
|
|
@@ -46,34 +46,40 @@ export let minW = true;
|
|
|
46
46
|
export let prettifyHeader = false;
|
|
47
47
|
let seeEditable = enum_ != undefined || pattern != undefined;
|
|
48
48
|
const dispatch = createEventDispatcher();
|
|
49
|
-
$: validateInput(pattern, value);
|
|
50
49
|
let error = '';
|
|
51
50
|
let el = undefined;
|
|
52
51
|
export let editor = undefined;
|
|
52
|
+
let inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncoding);
|
|
53
|
+
$: inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncoding);
|
|
53
54
|
let rawValue = undefined;
|
|
54
|
-
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
function computeDefaultValue(nvalue, inputCat, defaultValue) {
|
|
56
|
+
if (value == undefined || value == null) {
|
|
57
|
+
value = defaultValue;
|
|
58
|
+
if (defaultValue === undefined || defaultValue === null) {
|
|
59
|
+
if (inputCat === 'string') {
|
|
60
|
+
value = '';
|
|
61
|
+
}
|
|
62
|
+
else if (inputCat == 'enum') {
|
|
63
|
+
value = enum_?.[0];
|
|
64
|
+
}
|
|
65
|
+
else if (inputCat == 'boolean') {
|
|
66
|
+
value = false;
|
|
67
|
+
}
|
|
68
|
+
else if (inputCat == 'list') {
|
|
69
|
+
value = [];
|
|
70
|
+
}
|
|
59
71
|
}
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
else if (inputCat === 'object') {
|
|
73
|
+
evalValueToRaw();
|
|
62
74
|
}
|
|
63
75
|
}
|
|
64
76
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
validateInput(pattern, value);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
export function evalValueToRaw() {
|
|
73
|
-
if (value) {
|
|
74
|
-
rawValue = JSON.stringify(value, null, 2);
|
|
75
|
-
}
|
|
77
|
+
computeDefaultValue();
|
|
78
|
+
$: computeDefaultValue(value, inputCat, defaultValue);
|
|
79
|
+
function evalValueToRaw() {
|
|
80
|
+
rawValue = inputCat === 'object' ? JSON.stringify(value, null, 2) : undefined;
|
|
76
81
|
}
|
|
82
|
+
evalValueToRaw();
|
|
77
83
|
function fileChanged(e, cb) {
|
|
78
84
|
let t = e.target;
|
|
79
85
|
if (t && 'files' in t && t.files.length > 0) {
|
|
@@ -125,28 +131,10 @@ function onKeyDown(e) {
|
|
|
125
131
|
}
|
|
126
132
|
e.stopPropagation();
|
|
127
133
|
}
|
|
128
|
-
$: {
|
|
129
|
-
if (value == undefined || value == null) {
|
|
130
|
-
value = defaultValue;
|
|
131
|
-
if (defaultValue === undefined || defaultValue === null) {
|
|
132
|
-
if (inputCat === 'string') {
|
|
133
|
-
value = '';
|
|
134
|
-
}
|
|
135
|
-
else if (inputCat == 'enum') {
|
|
136
|
-
value = enum_?.[0];
|
|
137
|
-
}
|
|
138
|
-
else if (inputCat == 'boolean') {
|
|
139
|
-
value = false;
|
|
140
|
-
}
|
|
141
|
-
else if (inputCat == 'list') {
|
|
142
|
-
value = [];
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
$: inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncoding);
|
|
148
134
|
let redraw = 0;
|
|
149
135
|
let itemsLimit = 50;
|
|
136
|
+
let customValue = false;
|
|
137
|
+
$: validateInput(pattern, value);
|
|
150
138
|
</script>
|
|
151
139
|
|
|
152
140
|
<!-- svelte-ignore a11y-autofocus -->
|
|
@@ -338,18 +326,45 @@ let itemsLimit = 50;
|
|
|
338
326
|
/>
|
|
339
327
|
{/if}
|
|
340
328
|
{:else if inputCat == 'enum'}
|
|
341
|
-
<
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
329
|
+
<div class="flex flex-row w-full gap-1">
|
|
330
|
+
{#if !customValue}
|
|
331
|
+
<select
|
|
332
|
+
on:focus={(e) => {
|
|
333
|
+
dispatch('focus')
|
|
334
|
+
}}
|
|
335
|
+
{disabled}
|
|
336
|
+
class="px-6"
|
|
337
|
+
bind:value
|
|
338
|
+
>
|
|
339
|
+
{#each enum_ ?? [] as e}
|
|
340
|
+
<option>{e}</option>
|
|
341
|
+
{/each}
|
|
342
|
+
</select>
|
|
343
|
+
{:else}
|
|
344
|
+
<input
|
|
345
|
+
{autofocus}
|
|
346
|
+
on:focus
|
|
347
|
+
type="text"
|
|
348
|
+
class={valid
|
|
349
|
+
? ''
|
|
350
|
+
: 'border border-red-700 border-opacity-30 focus:border-red-700 focus:border-opacity-30 bg-red-100'}
|
|
351
|
+
placeholder={defaultValue ?? ''}
|
|
352
|
+
bind:value
|
|
353
|
+
/>
|
|
354
|
+
{/if}
|
|
355
|
+
|
|
356
|
+
{#if !disabled}
|
|
357
|
+
<button
|
|
358
|
+
class="min-w-min !px-2 items-center text-gray-800 bg-gray-100 border rounded center-center hover:bg-gray-300 transition-all cursor-pointer"
|
|
359
|
+
on:click={() => {
|
|
360
|
+
customValue = !customValue
|
|
361
|
+
}}
|
|
362
|
+
title="Custom Value"
|
|
363
|
+
>
|
|
364
|
+
<Pen size={14} />
|
|
365
|
+
</button>
|
|
366
|
+
{/if}
|
|
367
|
+
</div>
|
|
353
368
|
{:else if inputCat == 'date'}
|
|
354
369
|
<input {autofocus} class="inline-block" type="datetime-local" bind:value />
|
|
355
370
|
{:else if inputCat == 'sql' || inputCat == 'yaml'}
|
|
@@ -381,7 +396,7 @@ let itemsLimit = 50;
|
|
|
381
396
|
/>
|
|
382
397
|
{:else if inputCat == 'string'}
|
|
383
398
|
<div class="flex flex-col w-full">
|
|
384
|
-
<div class="flex flex-row w-full items- justify-between">
|
|
399
|
+
<div class="flex flex-row w-full items-center justify-between relative">
|
|
385
400
|
{#if password}
|
|
386
401
|
<Password {disabled} bind:password={value} />
|
|
387
402
|
{:else}
|
|
@@ -396,26 +411,24 @@ let itemsLimit = 50;
|
|
|
396
411
|
on:keydown={onKeyDown}
|
|
397
412
|
type="text"
|
|
398
413
|
{disabled}
|
|
399
|
-
class="
|
|
414
|
+
class="w-full {valid
|
|
400
415
|
? ''
|
|
401
416
|
: 'border border-red-700 border-opacity-30 focus:border-red-700 focus:border-opacity-30 bg-red-100'}"
|
|
402
417
|
placeholder={defaultValue ?? ''}
|
|
403
418
|
bind:value
|
|
404
419
|
/>
|
|
405
420
|
{#if itemPicker}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
</div>
|
|
418
|
-
</div>
|
|
421
|
+
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
422
|
+
<button
|
|
423
|
+
class="absolute right-1 top-1 py-1 min-w-min !px-2 items-center text-gray-800 bg-gray-100 border rounded center-center hover:bg-gray-300 transition-all cursor-pointer"
|
|
424
|
+
on:click={() => {
|
|
425
|
+
pickForField = label
|
|
426
|
+
itemPicker?.openDrawer?.()
|
|
427
|
+
}}
|
|
428
|
+
title="Insert a Variable"
|
|
429
|
+
>
|
|
430
|
+
<DollarSign size={14} />
|
|
431
|
+
</button>
|
|
419
432
|
{/if}
|
|
420
433
|
{/if}
|
|
421
434
|
</div>
|
|
@@ -37,7 +37,6 @@ declare const __propDef: {
|
|
|
37
37
|
minW?: boolean | undefined;
|
|
38
38
|
prettifyHeader?: boolean | undefined;
|
|
39
39
|
editor?: SimpleEditor | undefined;
|
|
40
|
-
evalValueToRaw?: (() => void) | undefined;
|
|
41
40
|
focus?: (() => void) | undefined;
|
|
42
41
|
};
|
|
43
42
|
events: {
|
|
@@ -53,7 +52,6 @@ export type ArgInputProps = typeof __propDef.props;
|
|
|
53
52
|
export type ArgInputEvents = typeof __propDef.events;
|
|
54
53
|
export type ArgInputSlots = typeof __propDef.slots;
|
|
55
54
|
export default class ArgInput extends SvelteComponentTyped<ArgInputProps, ArgInputEvents, ArgInputSlots> {
|
|
56
|
-
get evalValueToRaw(): () => void;
|
|
57
55
|
get focus(): () => void;
|
|
58
56
|
}
|
|
59
57
|
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script>import { awarenessStore, userStore } from '../stores';
|
|
2
|
+
import { BROWSER } from 'esm-env';
|
|
3
|
+
let url = BROWSER ? window.location.pathname : '';
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<div class="isolate flex -space-x-1 overflow-hidden w-20">
|
|
7
|
+
{#each Object.entries($awarenessStore ?? {}).filter(([a, b]) => b == url && a != $userStore?.username) as [user, _]}
|
|
8
|
+
<span
|
|
9
|
+
class="inline-flex h-6 w-6 items-center justify-center rounded-full ring-2 ring-white bg-gray-600"
|
|
10
|
+
title={user}
|
|
11
|
+
>
|
|
12
|
+
<span class="text-sm font-medium leading-none text-white"
|
|
13
|
+
>{user.substring(0, 2).toLocaleUpperCase()}</span
|
|
14
|
+
>
|
|
15
|
+
</span>
|
|
16
|
+
{/each}
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: Record<string, never>;
|
|
4
|
+
events: {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
};
|
|
7
|
+
slots: {};
|
|
8
|
+
};
|
|
9
|
+
export type AwarenessProps = typeof __propDef.props;
|
|
10
|
+
export type AwarenessEvents = typeof __propDef.events;
|
|
11
|
+
export type AwarenessSlots = typeof __propDef.slots;
|
|
12
|
+
export default class Awareness extends SvelteComponentTyped<AwarenessProps, AwarenessEvents, AwarenessSlots> {
|
|
13
|
+
}
|
|
14
|
+
export {};
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
<script>import { page } from '$app/stores';
|
|
2
|
-
import {
|
|
2
|
+
import { workspaceStore } from '../stores';
|
|
3
3
|
import { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';
|
|
4
4
|
import Icon from 'svelte-awesome';
|
|
5
5
|
import { slide } from 'svelte/transition';
|
|
6
6
|
import InlineCodeCopy from './InlineCodeCopy.svelte';
|
|
7
7
|
$: opened = false;
|
|
8
|
-
$: workspace = $userWorkspaces.find((e) => e.id === $workspaceStore);
|
|
9
|
-
$: workspaceName = workspace?.name;
|
|
10
|
-
$: workspaceId = workspace?.id;
|
|
11
8
|
$: url = `${$page.url.protocol}//${$page.url.hostname}/`;
|
|
12
9
|
</script>
|
|
13
10
|
|
|
@@ -39,7 +36,7 @@ $: url = `${$page.url.protocol}//${$page.url.hostname}/`;
|
|
|
39
36
|
>
|
|
40
37
|
<li
|
|
41
38
|
>Setup the wmill cli for this workspace & remote: <InlineCodeCopy
|
|
42
|
-
content={`wmill workspace add ${
|
|
39
|
+
content={`wmill workspace add ${$workspaceStore} ${$workspaceStore} ${url}`}
|
|
43
40
|
/></li
|
|
44
41
|
>
|
|
45
42
|
<li>Follow the prompts in your terminal</li>
|
|
@@ -12,6 +12,7 @@ import 'monaco-editor/esm/vs/language/typescript/monaco.contribution';
|
|
|
12
12
|
import { MonacoLanguageClient, initServices } from 'monaco-languageclient';
|
|
13
13
|
import { toSocket, WebSocketMessageReader, WebSocketMessageWriter } from 'vscode-ws-jsonrpc';
|
|
14
14
|
import { CloseAction, ErrorAction, RequestType } from 'vscode-languageclient';
|
|
15
|
+
import { MonacoBinding } from 'y-monaco';
|
|
15
16
|
languages.typescript.typescriptDefaults.setModeConfiguration({
|
|
16
17
|
completionItems: false,
|
|
17
18
|
definitions: false,
|
|
@@ -50,20 +51,31 @@ export let websocketAlive = {
|
|
|
50
51
|
};
|
|
51
52
|
export let shouldBindKey = true;
|
|
52
53
|
export let fixedOverflowWidgets = true;
|
|
53
|
-
export let path =
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
export let path = undefined;
|
|
55
|
+
export let yContent = undefined;
|
|
56
|
+
export let awareness = undefined;
|
|
57
|
+
export let folding = false;
|
|
58
|
+
const rHash = randomHash();
|
|
59
|
+
$: filePath = computePath(path);
|
|
60
|
+
function computePath(path) {
|
|
61
|
+
if (path == '' || path == undefined || path.startsWith('/')) {
|
|
62
|
+
return rHash;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return path;
|
|
66
|
+
}
|
|
56
67
|
}
|
|
57
68
|
let initialPath = path;
|
|
58
69
|
$: path != initialPath && lang == 'typescript' && handlePathChange();
|
|
59
70
|
let websockets = [];
|
|
71
|
+
let languageClients = [];
|
|
60
72
|
let websocketInterval;
|
|
61
73
|
let lastWsAttempt = new Date();
|
|
62
74
|
let nbWsAttempt = 0;
|
|
63
75
|
let disposeMethod;
|
|
64
76
|
const dispatch = createEventDispatcher();
|
|
65
77
|
const uri = lang == 'typescript'
|
|
66
|
-
? `file:///${
|
|
78
|
+
? `file:///${filePath}.${langToExt(lang)}`
|
|
67
79
|
: `file:///tmp/monaco/${randomHash()}.${langToExt(lang)}`;
|
|
68
80
|
buildWorkerDefinition('../../../workers', import.meta.url, false);
|
|
69
81
|
export function getCode() {
|
|
@@ -165,6 +177,9 @@ export async function reloadWebsocket() {
|
|
|
165
177
|
}
|
|
166
178
|
catch (e) {
|
|
167
179
|
console.log('initServices failed', e.message);
|
|
180
|
+
if (e.message != 'Lifecycle cannot go backwards') {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
168
183
|
}
|
|
169
184
|
function createLanguageClient(transports, name, initializationOptions, middlewareOptions) {
|
|
170
185
|
const client = new MonacoLanguageClient({
|
|
@@ -209,6 +224,7 @@ export async function reloadWebsocket() {
|
|
|
209
224
|
async function connectToLanguageServer(url, name, initOptions, middlewareOptions) {
|
|
210
225
|
try {
|
|
211
226
|
const webSocket = new WebSocket(url);
|
|
227
|
+
websockets.push(webSocket);
|
|
212
228
|
webSocket.onopen = async () => {
|
|
213
229
|
const socket = toSocket(webSocket);
|
|
214
230
|
const reader = new WebSocketMessageReader(socket);
|
|
@@ -217,7 +233,7 @@ export async function reloadWebsocket() {
|
|
|
217
233
|
// if (middlewareOptions != undefined) {
|
|
218
234
|
// languageClient.registerNotUsedFeatures()
|
|
219
235
|
// }
|
|
220
|
-
|
|
236
|
+
languageClients.push(languageClient);
|
|
221
237
|
// HACK ALERT: for some reasons, the client need to be restarted to take into account the 'go get <dep>' command
|
|
222
238
|
// the only way I could figure out to listen for this event is this. I'm sure there is a better way to do this
|
|
223
239
|
if (name == 'go') {
|
|
@@ -282,7 +298,7 @@ export async function reloadWebsocket() {
|
|
|
282
298
|
const hostname = BROWSER ? window.location.protocol + '//' + window.location.host : 'SSR';
|
|
283
299
|
let encodedImportMap = '';
|
|
284
300
|
if (lang == 'typescript') {
|
|
285
|
-
if (
|
|
301
|
+
if (filePath && filePath.split('/').length > 2) {
|
|
286
302
|
let expiration = new Date();
|
|
287
303
|
expiration.setHours(expiration.getHours() + 2);
|
|
288
304
|
const token = await UserService.createToken({
|
|
@@ -294,7 +310,7 @@ export async function reloadWebsocket() {
|
|
|
294
310
|
'file:///': root + '/'
|
|
295
311
|
}
|
|
296
312
|
};
|
|
297
|
-
let path_splitted =
|
|
313
|
+
let path_splitted = filePath.split('/');
|
|
298
314
|
for (let c = 0; c < path_splitted.length; c++) {
|
|
299
315
|
let key = 'file://./';
|
|
300
316
|
for (let i = 0; i < c; i++) {
|
|
@@ -445,35 +461,45 @@ export async function reloadWebsocket() {
|
|
|
445
461
|
}
|
|
446
462
|
let pathTimeout = undefined;
|
|
447
463
|
function handlePathChange() {
|
|
464
|
+
console.log('path changed, reloading language server', initialPath, path);
|
|
448
465
|
initialPath = path;
|
|
449
466
|
pathTimeout && clearTimeout(pathTimeout);
|
|
450
|
-
pathTimeout = setTimeout(reloadWebsocket,
|
|
467
|
+
pathTimeout = setTimeout(reloadWebsocket, 1000);
|
|
451
468
|
}
|
|
452
469
|
async function closeWebsockets() {
|
|
453
470
|
command && command.dispose();
|
|
454
471
|
command = undefined;
|
|
472
|
+
console.debug(`disposing ${websockets.length} language clients and closing websockets`);
|
|
473
|
+
for (const x of languageClients) {
|
|
474
|
+
try {
|
|
475
|
+
await x.dispose();
|
|
476
|
+
}
|
|
477
|
+
catch (err) {
|
|
478
|
+
console.debug('error disposing language client', err);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
languageClients = [];
|
|
455
482
|
for (const x of websockets) {
|
|
456
483
|
try {
|
|
457
|
-
await x
|
|
458
|
-
x[1].close();
|
|
484
|
+
await x.close();
|
|
459
485
|
}
|
|
460
486
|
catch (err) {
|
|
461
|
-
console.
|
|
462
|
-
try {
|
|
463
|
-
x[1].close();
|
|
464
|
-
}
|
|
465
|
-
catch (err) {
|
|
466
|
-
console.log('error disposing websocket, closin', err);
|
|
467
|
-
}
|
|
487
|
+
console.debug('error closing websocket', err);
|
|
468
488
|
}
|
|
469
489
|
}
|
|
470
|
-
console.
|
|
490
|
+
console.debug('done closing websockets');
|
|
471
491
|
websockets = [];
|
|
472
492
|
websocketInterval && clearInterval(websocketInterval);
|
|
473
493
|
}
|
|
474
494
|
let widgets = document.getElementById('monaco-widgets-root') ?? undefined;
|
|
495
|
+
let model;
|
|
496
|
+
let monacoBinding = undefined;
|
|
497
|
+
// @ts-ignore
|
|
498
|
+
$: if (yContent && awareness && model && editor) {
|
|
499
|
+
monacoBinding && monacoBinding.destroy();
|
|
500
|
+
monacoBinding = new MonacoBinding(yContent, model, new Set([editor]), awareness);
|
|
501
|
+
}
|
|
475
502
|
async function loadMonaco() {
|
|
476
|
-
let model;
|
|
477
503
|
try {
|
|
478
504
|
model = meditor.createModel(code, lang, mUri.parse(uri));
|
|
479
505
|
}
|
|
@@ -489,15 +515,19 @@ async function loadMonaco() {
|
|
|
489
515
|
editor = meditor.create(divEl, {
|
|
490
516
|
...editorConfig(model, code, lang, automaticLayout, fixedOverflowWidgets),
|
|
491
517
|
overflowWidgetsDomNode: widgets,
|
|
492
|
-
tabSize: lang == 'python' ? 4 : 2
|
|
518
|
+
tabSize: lang == 'python' ? 4 : 2,
|
|
519
|
+
folding
|
|
493
520
|
});
|
|
494
521
|
let timeoutModel = undefined;
|
|
495
522
|
editor.onDidChangeModelContent((event) => {
|
|
496
523
|
$dirtyStore = true;
|
|
497
524
|
timeoutModel && clearTimeout(timeoutModel);
|
|
498
525
|
timeoutModel = setTimeout(() => {
|
|
499
|
-
|
|
500
|
-
|
|
526
|
+
let ncode = getCode();
|
|
527
|
+
if (ncode != '') {
|
|
528
|
+
code = ncode;
|
|
529
|
+
dispatch('change', code);
|
|
530
|
+
}
|
|
501
531
|
}, 500);
|
|
502
532
|
});
|
|
503
533
|
editor.onDidFocusEditorText(() => {
|
|
@@ -517,11 +547,13 @@ async function loadMonaco() {
|
|
|
517
547
|
!websocketAlive.shellcheck &&
|
|
518
548
|
!websocketAlive.go &&
|
|
519
549
|
!websocketInterval) {
|
|
550
|
+
console.log('reconnecting to language servers on focus');
|
|
520
551
|
reloadWebsocket();
|
|
521
552
|
}
|
|
522
553
|
});
|
|
523
554
|
reloadWebsocket();
|
|
524
555
|
return () => {
|
|
556
|
+
console.log('disposing editor');
|
|
525
557
|
try {
|
|
526
558
|
closeWebsockets();
|
|
527
559
|
model?.dispose();
|
|
@@ -557,11 +589,30 @@ onDestroy(() => {
|
|
|
557
589
|
|
|
558
590
|
<div bind:this={divEl} class="{$$props.class} editor" />
|
|
559
591
|
|
|
560
|
-
<style>
|
|
561
|
-
.editor {
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
}
|
|
592
|
+
<style global>
|
|
593
|
+
:global(.editor) {
|
|
594
|
+
border-radius: 0.375rem;
|
|
595
|
+
border-width: 1px;
|
|
596
|
+
--tw-border-opacity: 1;
|
|
597
|
+
border-color: rgb(249 250 251 / var(--tw-border-opacity));
|
|
598
|
+
padding: 0px;
|
|
599
|
+
}
|
|
600
|
+
:global(.yRemoteSelection) {
|
|
601
|
+
background-color: rgb(250, 129, 0, 0.5);
|
|
602
|
+
}
|
|
603
|
+
:global(.yRemoteSelectionHead) {
|
|
604
|
+
position: absolute;
|
|
605
|
+
border-left: orange solid 2px;
|
|
606
|
+
border-top: orange solid 2px;
|
|
607
|
+
border-bottom: orange solid 2px;
|
|
608
|
+
height: 100%;
|
|
609
|
+
box-sizing: border-box;
|
|
610
|
+
}
|
|
611
|
+
:global(.yRemoteSelectionHead::after) {
|
|
612
|
+
position: absolute;
|
|
613
|
+
content: ' ';
|
|
614
|
+
border: 3px solid orange;
|
|
615
|
+
border-radius: 4px;
|
|
616
|
+
left: -4px;
|
|
617
|
+
top: -5px;
|
|
618
|
+
}</style>
|
|
@@ -6,6 +6,7 @@ import 'monaco-editor/esm/vs/basic-languages/go/go.contribution';
|
|
|
6
6
|
import 'monaco-editor/esm/vs/basic-languages/shell/shell.contribution';
|
|
7
7
|
import 'monaco-editor/esm/vs/basic-languages/typescript/typescript.contribution';
|
|
8
8
|
import 'monaco-editor/esm/vs/language/typescript/monaco.contribution';
|
|
9
|
+
import type { Text } from 'yjs';
|
|
9
10
|
declare const __propDef: {
|
|
10
11
|
props: {
|
|
11
12
|
[x: string]: any;
|
|
@@ -25,6 +26,9 @@ declare const __propDef: {
|
|
|
25
26
|
shouldBindKey?: boolean | undefined;
|
|
26
27
|
fixedOverflowWidgets?: boolean | undefined;
|
|
27
28
|
path?: string | undefined;
|
|
29
|
+
yContent?: Text | undefined;
|
|
30
|
+
awareness?: any | undefined;
|
|
31
|
+
folding?: boolean | undefined;
|
|
28
32
|
getCode?: (() => string) | undefined;
|
|
29
33
|
insertAtCursor?: ((code: string) => void) | undefined;
|
|
30
34
|
insertAtBeginning?: ((code: string) => void) | undefined;
|