windmill-components 1.531.1 → 1.537.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/package/components/ArgInput.svelte +69 -19
- package/package/components/Auth0Setting.svelte +8 -3
- package/package/components/Dev.svelte +5 -4
- package/package/components/DiffDrawer.svelte +2 -2
- package/package/components/DiffEditor.svelte +34 -37
- package/package/components/DiffEditor.svelte.d.ts +23 -39
- package/package/components/EditableSchemaForm.svelte +67 -67
- package/package/components/EditableSchemaForm.svelte.d.ts +3 -3
- package/package/components/Editor.svelte +32 -11
- package/package/components/Editor.svelte.d.ts +6 -0
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/EditorBar.svelte.d.ts +1 -0
- package/package/components/FieldHeader.svelte +1 -1
- package/package/components/FlowBuilder.svelte +7 -4
- package/package/components/FlowPreviewContent.svelte +3 -3
- package/package/components/FlowStatusViewer.svelte +28 -0
- package/package/components/FlowStatusViewerInner.svelte +72 -20
- package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
- package/package/components/ModulePreview.svelte +2 -1
- package/package/components/ModulePreview.svelte.d.ts +1 -0
- package/package/components/ModulePreviewForm.svelte +72 -65
- package/package/components/ModulePreviewResultViewer.svelte +13 -18
- package/package/components/ModuleTest.svelte +10 -6
- package/package/components/ModuleTest.svelte.d.ts +1 -0
- package/package/components/OktaSetting.svelte +8 -3
- package/package/components/Portal.svelte +11 -7
- package/package/components/Portal.svelte.d.ts +19 -39
- package/package/components/ResourceEditor.svelte +4 -0
- package/package/components/RunForm.svelte +2 -2
- package/package/components/RunForm.svelte.d.ts +1 -1
- package/package/components/RunFormAdvancedPopup.svelte +13 -1
- package/package/components/SchemaForm.svelte +1 -2
- package/package/components/ScriptBuilder.svelte +1 -1
- package/package/components/ScriptEditor.svelte +22 -7
- package/package/components/SimpleEditor.svelte +0 -1
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/apps/components/layout/AppModal.svelte +2 -2
- package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
- package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
- package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
- package/package/components/common/button/model.d.ts +1 -1
- package/package/components/common/drawer/Disposable.svelte +51 -30
- package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
- package/package/components/common/drawer/Drawer.svelte +15 -11
- package/package/components/copilot/FlowInlineScriptAIButton.svelte +4 -2
- package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +4 -1
- package/package/components/copilot/MetadataGen.svelte +14 -3
- package/package/components/copilot/autocomplete/Autocompletor.js +0 -2
- package/package/components/copilot/chat/AIChat.svelte +2 -4
- package/package/components/copilot/chat/AIChatInput.svelte +3 -3
- package/package/components/copilot/chat/AIChatManager.svelte.js +24 -12
- package/package/components/copilot/chat/AvailableContextList.svelte +243 -26
- package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -1
- package/package/components/copilot/chat/ContextElementBadge.svelte +31 -15
- package/package/components/copilot/chat/ContextElementBadge.svelte.d.ts +5 -20
- package/package/components/copilot/chat/ContextManager.svelte.d.ts +15 -2
- package/package/components/copilot/chat/ContextManager.svelte.js +134 -24
- package/package/components/copilot/chat/ContextTextarea.svelte +22 -49
- package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
- package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
- package/package/components/copilot/chat/context.d.ts +19 -1
- package/package/components/copilot/chat/context.js +1 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +109 -7
- package/package/components/copilot/chat/flow/core.d.ts +13 -1
- package/package/components/copilot/chat/flow/core.js +171 -19
- package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
- package/package/components/copilot/chat/flow/uiIntents.js +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
- package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
- package/package/components/copilot/chat/monaco-adapter.d.ts +22 -4
- package/package/components/copilot/chat/monaco-adapter.js +55 -16
- package/package/components/copilot/chat/script/core.d.ts +2 -2
- package/package/components/copilot/chat/script/core.js +54 -124
- package/package/components/copilot/chat/shared.d.ts +14 -2
- package/package/components/copilot/chat/shared.js +170 -7
- package/package/components/copilot/lib.js +12 -7
- package/package/components/copilot/shared.d.ts +1 -1
- package/package/components/copilot/shared.js +16 -10
- package/package/components/flows/FlowEditor.svelte +15 -1
- package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
- package/package/components/flows/FlowModuleIcon.svelte +39 -0
- package/package/components/flows/FlowModuleIcon.svelte.d.ts +10 -0
- package/package/components/flows/common/FlowCardHeader.svelte +4 -1
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +31 -34
- package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowLoop.svelte +7 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +39 -44
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +16 -18
- package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
- package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
- package/package/components/flows/dfs.d.ts +1 -1
- package/package/components/flows/dfs.js +6 -6
- package/package/components/flows/flowInfers.js +7 -7
- package/package/components/flows/flowStateUtils.svelte.js +1 -2
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -26
- package/package/components/flows/map/MapItem.svelte +12 -39
- package/package/components/flows/map/VirtualItem.svelte +1 -1
- package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
- package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
- package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
- package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
- package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
- package/package/components/flows/types.d.ts +16 -3
- package/package/components/flows/utils.js +3 -0
- package/package/components/graph/FlowGraphV2.svelte +1 -1
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
- package/package/components/propertyPicker/ObjectViewer.svelte +11 -3
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
- package/package/components/schema/AddPropertyV2.svelte +2 -7
- package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
- package/package/components/schema/EditableSchemaDrawer.svelte +109 -115
- package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
- package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
- package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
- package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
- package/package/components/schema/FlowPropertyEditor.svelte +83 -57
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +11 -10
- package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -2
- package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
- package/package/components/schema/jsonSchemaResource.svelte.d.ts +2 -0
- package/package/components/schema/jsonSchemaResource.svelte.js +40 -0
- package/package/components/settings/PremiumInfo.svelte +7 -2
- package/package/components/triggers/CaptureWrapper.svelte +2 -13
- package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
- package/package/components/triggers/TriggersWrapper.svelte +1 -0
- package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
- package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
- package/package/hubPaths.json +3 -1
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +2 -0
- package/package/stores.d.ts +1 -0
- package/package/stores.js +8 -1
- package/package/utils.d.ts +1 -1
- package/package.json +14 -14
- package/package/components/ModulePreviewResultViewer.svelte.d.ts +0 -28
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">import { preventDefault, stopPropagation, createBubbler } from 'svelte/legacy';
|
|
2
2
|
const bubble = createBubbler();
|
|
3
|
-
import { setInputCat as computeInputCat, debounce, emptyString, getSchemaFromProperties } from '../utils';
|
|
3
|
+
import { setInputCat as computeInputCat, debounce, emptySchema, emptyString, getSchemaFromProperties } from '../utils';
|
|
4
4
|
import { DollarSign, Plus, X, Check, Loader2, ExternalLink } from 'lucide-svelte';
|
|
5
5
|
import { createEventDispatcher, onDestroy, onMount, tick, untrack } from 'svelte';
|
|
6
6
|
import { fade } from 'svelte/transition';
|
|
@@ -28,6 +28,8 @@ import MultiSelect from './select/MultiSelect.svelte';
|
|
|
28
28
|
import { safeSelectItems } from './select/utils.svelte';
|
|
29
29
|
import S3ArgInput from './common/fileUpload/S3ArgInput.svelte';
|
|
30
30
|
import { base } from '../base';
|
|
31
|
+
import { workspaceStore } from '../stores';
|
|
32
|
+
import { getJsonSchemaFromResource } from './schema/jsonSchemaResource.svelte';
|
|
31
33
|
let { label = '', value = $bindable(), defaultValue = $bindable(undefined), description = $bindable(undefined), format = $bindable(undefined), contentEncoding = undefined, type = undefined, oneOf = $bindable(undefined), required = false, pattern = $bindable(undefined), valid = $bindable(undefined), enum_ = $bindable(undefined), disabled = false, itemsType = $bindable(undefined), displayHeader = true, properties = $bindable(undefined), nestedRequired = undefined, autofocus = null, compact = false, password = false, pickForField = $bindable(undefined), variableEditor = undefined, itemPicker = undefined, noMargin = false, extra = {}, minW = true, prettifyHeader = false, resourceTypes, disablePortal = false, showSchemaExplorer = false, simpleTooltip = undefined, customErrorMessage = undefined, onlyMaskPassword = false, nullable = false, title = $bindable(undefined), placeholder = $bindable(undefined), order = $bindable(undefined), editor = $bindable(undefined), orderEditable = false, shouldDispatchChanges = false, noDefaultOnSelectFirst = false, helperScript = undefined, otherArgs = {}, lightHeader = false, diffStatus = undefined, hideNested = false, nestedParent = undefined, nestedClasses = '', displayType = true, css = undefined, appPath = undefined, computeS3ForceViewerPolicies = undefined, workspace = undefined, actions } = $props();
|
|
32
34
|
$effect(() => {
|
|
33
35
|
if (description == undefined) {
|
|
@@ -488,6 +490,47 @@ onDestroy(() => {
|
|
|
488
490
|
{appPath}
|
|
489
491
|
{computeS3ForceViewerPolicies}
|
|
490
492
|
/>
|
|
493
|
+
{:else if inputCat == 'object' && format == 'json-schema'}
|
|
494
|
+
{#await import('./EditableSchemaForm.svelte')}
|
|
495
|
+
<Loader2 class="animate-spin" />
|
|
496
|
+
{:then Module}
|
|
497
|
+
<Module.default
|
|
498
|
+
bind:schema={
|
|
499
|
+
() =>
|
|
500
|
+
value && typeof value === 'object' && !Array.isArray(value) ? value : emptySchema(),
|
|
501
|
+
(v) => {
|
|
502
|
+
value = v
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
isFlowInput
|
|
506
|
+
editTab="inputEditor"
|
|
507
|
+
noPreview
|
|
508
|
+
addPropertyInEditorTab
|
|
509
|
+
/>
|
|
510
|
+
{/await}
|
|
511
|
+
{:else if inputCat == 'object' && format?.startsWith('jsonschema-')}
|
|
512
|
+
{#await getJsonSchemaFromResource(format.substring('jsonschema-'.length), workspace ?? $workspaceStore ?? '')}
|
|
513
|
+
<Loader2 class="animate-spin" />
|
|
514
|
+
{:then schema}
|
|
515
|
+
{#if !schema || !schema.properties}
|
|
516
|
+
{#await import('./JsonEditor.svelte')}
|
|
517
|
+
<Loader2 class="animate-spin" />
|
|
518
|
+
{:then Module}
|
|
519
|
+
<Module.default code={JSON.stringify(value, null, 2)} bind:value />
|
|
520
|
+
{/await}
|
|
521
|
+
{:else}
|
|
522
|
+
<div class="py-4 pr-2 pl-6 border rounded-md w-full">
|
|
523
|
+
<SchemaForm
|
|
524
|
+
{onlyMaskPassword}
|
|
525
|
+
{disablePortal}
|
|
526
|
+
{disabled}
|
|
527
|
+
{prettifyHeader}
|
|
528
|
+
{schema}
|
|
529
|
+
bind:args={value}
|
|
530
|
+
/>
|
|
531
|
+
</div>
|
|
532
|
+
{/if}
|
|
533
|
+
{/await}
|
|
491
534
|
{:else if inputCat == 'list' && !isListJson}
|
|
492
535
|
<div class="w-full flex gap-4">
|
|
493
536
|
<div class="w-full">
|
|
@@ -723,11 +766,21 @@ onDestroy(() => {
|
|
|
723
766
|
selected={oneOfSelected}
|
|
724
767
|
on:selected={({ detail }) => {
|
|
725
768
|
oneOfSelected = detail
|
|
726
|
-
const
|
|
769
|
+
const selectedObjProperties =
|
|
727
770
|
oneOf?.find((o) => o.title == detail)?.properties ?? {}
|
|
728
|
-
)
|
|
771
|
+
const newValueKeys = Object.keys(selectedObjProperties)
|
|
729
772
|
const toKeep = {}
|
|
730
|
-
for (const key of
|
|
773
|
+
for (const key of newValueKeys) {
|
|
774
|
+
// Check if there is a select (enum) in the newly selected oneOf and if the current value is not in the enum, skip it
|
|
775
|
+
if (
|
|
776
|
+
!['kind', 'label'].includes(key) &&
|
|
777
|
+
selectedObjProperties[key]?.enum &&
|
|
778
|
+
value &&
|
|
779
|
+
value[key] !== undefined &&
|
|
780
|
+
!selectedObjProperties[key].enum.includes(value[key])
|
|
781
|
+
) {
|
|
782
|
+
continue
|
|
783
|
+
}
|
|
731
784
|
toKeep[key] = value[key]
|
|
732
785
|
}
|
|
733
786
|
const tagKey = oneOf.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
|
|
@@ -768,8 +821,11 @@ onDestroy(() => {
|
|
|
768
821
|
}
|
|
769
822
|
}
|
|
770
823
|
bind:args={value}
|
|
771
|
-
|
|
772
|
-
|
|
824
|
+
hiddenArgs={[
|
|
825
|
+
oneOf?.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
|
|
826
|
+
? 'kind'
|
|
827
|
+
: 'label'
|
|
828
|
+
]}
|
|
773
829
|
on:reorder={(e) => {
|
|
774
830
|
if (oneOf && oneOf[objIdx]) {
|
|
775
831
|
const keys = e.detail
|
|
@@ -862,20 +918,14 @@ onDestroy(() => {
|
|
|
862
918
|
{disablePortal}
|
|
863
919
|
{disabled}
|
|
864
920
|
{prettifyHeader}
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
}),
|
|
873
|
-
(newSchema) => {
|
|
874
|
-
dispatch('nestedChange')
|
|
875
|
-
}
|
|
876
|
-
}
|
|
921
|
+
schema={{
|
|
922
|
+
properties,
|
|
923
|
+
$schema: '',
|
|
924
|
+
required: nestedRequired ?? [],
|
|
925
|
+
type: 'object',
|
|
926
|
+
order
|
|
927
|
+
}}
|
|
877
928
|
bind:args={value}
|
|
878
|
-
dndType={`nested-${title}`}
|
|
879
929
|
on:reorder={(e) => {
|
|
880
930
|
const keys = e.detail
|
|
881
931
|
order = keys
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
<script lang="ts">import
|
|
1
|
+
<script lang="ts">import { untrack } from 'svelte';
|
|
2
|
+
import CollapseLink from './CollapseLink.svelte';
|
|
2
3
|
import IconedResourceType from './IconedResourceType.svelte';
|
|
3
4
|
import Toggle from './Toggle.svelte';
|
|
4
5
|
import Tooltip from './Tooltip.svelte';
|
|
@@ -25,8 +26,12 @@ function changeDomain(domain, custom) {
|
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
let enabled = $derived(value != undefined);
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
let lastValues = { domain: undefined, custom: undefined };
|
|
30
|
+
$effect.pre(() => {
|
|
31
|
+
if (value?.['domain'] != lastValues.domain || value?.['custom'] != lastValues.custom) {
|
|
32
|
+
lastValues = { domain: value?.['domain'], custom: value?.['custom'] };
|
|
33
|
+
untrack(() => changeDomain(value?.['domain'], value?.['custom']));
|
|
34
|
+
}
|
|
30
35
|
});
|
|
31
36
|
</script>
|
|
32
37
|
|
|
@@ -27,7 +27,7 @@ import { approximateFindPythonRelativePath, isTypescriptRelativePath, parseTypes
|
|
|
27
27
|
import Tooltip from './Tooltip.svelte';
|
|
28
28
|
import { workspaceAIClients } from './copilot/lib';
|
|
29
29
|
import { Triggers } from './triggers/triggers.svelte';
|
|
30
|
-
import {
|
|
30
|
+
import { StepsInputArgs } from './flows/stepsInputArgs.svelte';
|
|
31
31
|
import { ModulesTestStates } from './modulesTest.svelte';
|
|
32
32
|
let flowCopilotContext = {
|
|
33
33
|
shouldUpdatePropertyType: writable({}),
|
|
@@ -374,7 +374,7 @@ const previewArgsStore = $state({ val: {} });
|
|
|
374
374
|
const scriptEditorDrawer = writable(undefined);
|
|
375
375
|
const moving = writable(undefined);
|
|
376
376
|
const history = initHistory(flowStore.val);
|
|
377
|
-
const
|
|
377
|
+
const stepsInputArgs = new StepsInputArgs();
|
|
378
378
|
const selectedIdStore = writable('settings-metadata');
|
|
379
379
|
const triggersCount = writable(undefined);
|
|
380
380
|
const modulesTestStates = new ModulesTestStates((moduleId) => {
|
|
@@ -397,7 +397,7 @@ setContext('FlowEditorContext', {
|
|
|
397
397
|
pathStore: writable(''),
|
|
398
398
|
flowStateStore,
|
|
399
399
|
flowStore,
|
|
400
|
-
|
|
400
|
+
stepsInputArgs,
|
|
401
401
|
saveDraft: () => { },
|
|
402
402
|
initialPathStore: writable(''),
|
|
403
403
|
fakeInitialPath: '',
|
|
@@ -708,7 +708,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
708
708
|
noEditor
|
|
709
709
|
on:applyArgs={(ev) => {
|
|
710
710
|
if (ev.detail.kind === 'preprocessor') {
|
|
711
|
-
|
|
711
|
+
stepsInputArgs.setStepArgs('preprocessor', ev.detail.args ?? {})
|
|
712
712
|
$selectedIdStore = 'preprocessor'
|
|
713
713
|
} else {
|
|
714
714
|
previewArgsStore.val = ev.detail.args ?? {}
|
|
@@ -720,6 +720,7 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
720
720
|
isOwner={flowPreviewContent?.getIsOwner()}
|
|
721
721
|
{suspendStatus}
|
|
722
722
|
onOpenDetails={flowPreviewButtons?.openPreview}
|
|
723
|
+
previewOpen={flowPreviewButtons?.getPreviewOpen()}
|
|
723
724
|
/>
|
|
724
725
|
{/key}
|
|
725
726
|
</Pane>
|
|
@@ -155,7 +155,7 @@ export function setDiff(diff) {
|
|
|
155
155
|
<Module.default
|
|
156
156
|
open={true}
|
|
157
157
|
automaticLayout
|
|
158
|
-
|
|
158
|
+
className="h-full"
|
|
159
159
|
defaultLang={lang}
|
|
160
160
|
defaultModifiedLang={data.current.lang}
|
|
161
161
|
defaultOriginal={content}
|
|
@@ -170,7 +170,7 @@ export function setDiff(diff) {
|
|
|
170
170
|
<Module.default
|
|
171
171
|
open={true}
|
|
172
172
|
automaticLayout
|
|
173
|
-
|
|
173
|
+
className="h-full"
|
|
174
174
|
defaultLang="yaml"
|
|
175
175
|
defaultOriginal={metadata}
|
|
176
176
|
defaultModified={data.current.metadata}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">import { BROWSER } from 'esm-env';
|
|
2
|
-
import {
|
|
2
|
+
import { onMount } from 'svelte';
|
|
3
3
|
import '@codingame/monaco-vscode-standalone-languages';
|
|
4
4
|
import '@codingame/monaco-vscode-standalone-json-language-features';
|
|
5
5
|
import '@codingame/monaco-vscode-standalone-typescript-language-features';
|
|
@@ -7,20 +7,12 @@ import { editor as meditor } from 'monaco-editor';
|
|
|
7
7
|
import { initializeVscode } from './vscode';
|
|
8
8
|
import EditorTheme from './EditorTheme.svelte';
|
|
9
9
|
import Button from './common/button/Button.svelte';
|
|
10
|
+
import { twMerge } from 'tailwind-merge';
|
|
10
11
|
const SIDE_BY_SIDE_MIN_WIDTH = 700;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export let defaultOriginal = undefined;
|
|
16
|
-
export let defaultModified = undefined;
|
|
17
|
-
export let readOnly = false;
|
|
18
|
-
export let showButtons = false;
|
|
19
|
-
export let showHistoryButton = true;
|
|
20
|
-
let diffEditor;
|
|
21
|
-
let diffDivEl = null;
|
|
22
|
-
let editorWidth = SIDE_BY_SIDE_MIN_WIDTH;
|
|
23
|
-
export let open = false;
|
|
12
|
+
let { open = false, className = '', automaticLayout = true, fixedOverflowWidgets = true, defaultLang, defaultModifiedLang, defaultOriginal = undefined, defaultModified = undefined, readOnly = false, buttons = [], modifiedModel } = $props();
|
|
13
|
+
let diffEditor = $state(undefined);
|
|
14
|
+
let diffDivEl = $state(null);
|
|
15
|
+
let editorWidth = $state(SIDE_BY_SIDE_MIN_WIDTH);
|
|
24
16
|
async function loadDiffEditor() {
|
|
25
17
|
await initializeVscode();
|
|
26
18
|
if (!diffDivEl) {
|
|
@@ -40,23 +32,17 @@ async function loadDiffEditor() {
|
|
|
40
32
|
lineNumbersMinChars: 2,
|
|
41
33
|
scrollbar: { alwaysConsumeMouseWheel: false }
|
|
42
34
|
});
|
|
43
|
-
if (
|
|
44
|
-
defaultModified !== undefined &&
|
|
45
|
-
defaultLang !== undefined) {
|
|
35
|
+
if (defaultLang !== undefined) {
|
|
46
36
|
setupModel(defaultLang, defaultOriginal, defaultModified, defaultModifiedLang);
|
|
47
37
|
}
|
|
48
38
|
}
|
|
49
39
|
export function setupModel(lang, original, modified, modifiedLang) {
|
|
40
|
+
const o = meditor.createModel(original ?? '', lang);
|
|
41
|
+
const m = modifiedModel ?? meditor.createModel(modified ?? '', modifiedLang ?? lang);
|
|
50
42
|
diffEditor?.setModel({
|
|
51
|
-
original:
|
|
52
|
-
modified:
|
|
43
|
+
original: o,
|
|
44
|
+
modified: m
|
|
53
45
|
});
|
|
54
|
-
if (original) {
|
|
55
|
-
setOriginal(original);
|
|
56
|
-
}
|
|
57
|
-
if (modified) {
|
|
58
|
-
setModified(modified);
|
|
59
|
-
}
|
|
60
46
|
}
|
|
61
47
|
export function setOriginal(code) {
|
|
62
48
|
diffEditor?.getModel()?.original?.setValue(code);
|
|
@@ -69,6 +55,15 @@ export function setModified(code) {
|
|
|
69
55
|
diffEditor?.getModel()?.modified?.setValue(code);
|
|
70
56
|
defaultModified = code;
|
|
71
57
|
}
|
|
58
|
+
export function setModifiedModel(model) {
|
|
59
|
+
const curr = diffEditor?.getModel();
|
|
60
|
+
if (!curr)
|
|
61
|
+
return;
|
|
62
|
+
diffEditor?.setModel({
|
|
63
|
+
original: curr.original,
|
|
64
|
+
modified: model
|
|
65
|
+
});
|
|
66
|
+
}
|
|
72
67
|
export function getModified() {
|
|
73
68
|
return diffEditor?.getModel()?.modified.getValue() ?? '';
|
|
74
69
|
}
|
|
@@ -81,8 +76,14 @@ export function hide() {
|
|
|
81
76
|
function onWidthChange(editorWidth) {
|
|
82
77
|
diffEditor?.updateOptions({ renderSideBySide: editorWidth >= SIDE_BY_SIDE_MIN_WIDTH });
|
|
83
78
|
}
|
|
84
|
-
|
|
85
|
-
|
|
79
|
+
$effect(() => {
|
|
80
|
+
if (open && diffDivEl) {
|
|
81
|
+
loadDiffEditor();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
$effect(() => {
|
|
85
|
+
onWidthChange(editorWidth);
|
|
86
|
+
});
|
|
86
87
|
onMount(() => {
|
|
87
88
|
if (BROWSER) {
|
|
88
89
|
return () => {
|
|
@@ -90,28 +91,24 @@ onMount(() => {
|
|
|
90
91
|
};
|
|
91
92
|
}
|
|
92
93
|
});
|
|
93
|
-
const dispatch = createEventDispatcher();
|
|
94
94
|
</script>
|
|
95
95
|
|
|
96
96
|
{#if open}
|
|
97
97
|
<EditorTheme />
|
|
98
98
|
<div
|
|
99
99
|
bind:this={diffDivEl}
|
|
100
|
-
class=
|
|
100
|
+
class={twMerge('editor nonmain-editor', className)}
|
|
101
101
|
bind:clientWidth={editorWidth}
|
|
102
102
|
></div>
|
|
103
|
-
{#if
|
|
103
|
+
{#if buttons.length > 0}
|
|
104
104
|
<div
|
|
105
105
|
class="absolute flex flex-row gap-2 bottom-10 left-1/2 z-10 -translate-x-1/2 rounded-md p-1 w-full justify-center"
|
|
106
106
|
>
|
|
107
|
-
{#
|
|
108
|
-
<Button on:click={
|
|
109
|
-
>
|
|
107
|
+
{#each buttons as button}
|
|
108
|
+
<Button on:click={button.onClick} variant="contained" size="sm" color={button.color}
|
|
109
|
+
>{button.text}</Button
|
|
110
110
|
>
|
|
111
|
-
{/
|
|
112
|
-
<Button on:click={() => dispatch('hideDiffMode')} variant="contained" size="sm" color="red"
|
|
113
|
-
>Quit diff mode</Button
|
|
114
|
-
>
|
|
111
|
+
{/each}
|
|
115
112
|
</div>
|
|
116
113
|
{/if}
|
|
117
114
|
{/if}
|
|
@@ -1,51 +1,35 @@
|
|
|
1
1
|
import '@codingame/monaco-vscode-standalone-languages';
|
|
2
2
|
import '@codingame/monaco-vscode-standalone-json-language-features';
|
|
3
3
|
import '@codingame/monaco-vscode-standalone-typescript-language-features';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
$$slots?: Slots;
|
|
11
|
-
}): Exports & {
|
|
12
|
-
$set?: any;
|
|
13
|
-
$on?: any;
|
|
14
|
-
};
|
|
15
|
-
z_$$bindings?: Bindings;
|
|
4
|
+
import { editor as meditor } from 'monaco-editor';
|
|
5
|
+
import type { ButtonType } from './common';
|
|
6
|
+
export interface ButtonProp {
|
|
7
|
+
text: string;
|
|
8
|
+
color?: ButtonType.Color;
|
|
9
|
+
onClick: () => void;
|
|
16
10
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
getOriginal?: (() => string) | undefined;
|
|
32
|
-
setModified?: ((code: string) => void) | undefined;
|
|
33
|
-
getModified?: (() => string) | undefined;
|
|
34
|
-
show?: (() => void) | undefined;
|
|
35
|
-
hide?: (() => void) | undefined;
|
|
36
|
-
}, {
|
|
37
|
-
hideDiffMode: CustomEvent<void>;
|
|
38
|
-
seeHistory: CustomEvent<void>;
|
|
39
|
-
} & {
|
|
40
|
-
[evt: string]: CustomEvent<any>;
|
|
41
|
-
}, {}, {
|
|
11
|
+
interface Props {
|
|
12
|
+
open?: boolean;
|
|
13
|
+
className?: string;
|
|
14
|
+
automaticLayout?: boolean;
|
|
15
|
+
fixedOverflowWidgets?: boolean;
|
|
16
|
+
defaultLang?: string;
|
|
17
|
+
defaultModifiedLang?: string;
|
|
18
|
+
defaultOriginal?: string;
|
|
19
|
+
defaultModified?: string;
|
|
20
|
+
readOnly?: boolean;
|
|
21
|
+
buttons?: ButtonProp[];
|
|
22
|
+
modifiedModel?: meditor.ITextModel;
|
|
23
|
+
}
|
|
24
|
+
declare const DiffEditor: import("svelte").Component<Props, {
|
|
42
25
|
setupModel: (lang: string, original?: string, modified?: string, modifiedLang?: string) => void;
|
|
43
26
|
setOriginal: (code: string) => void;
|
|
44
27
|
getOriginal: () => string;
|
|
45
28
|
setModified: (code: string) => void;
|
|
29
|
+
setModifiedModel: (model: meditor.ITextModel) => void;
|
|
46
30
|
getModified: () => string;
|
|
47
31
|
show: () => void;
|
|
48
32
|
hide: () => void;
|
|
49
|
-
},
|
|
50
|
-
type DiffEditor =
|
|
33
|
+
}, "">;
|
|
34
|
+
type DiffEditor = ReturnType<typeof DiffEditor>;
|
|
51
35
|
export default DiffEditor;
|