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.
Files changed (153) hide show
  1. package/package/components/ArgInput.svelte +69 -19
  2. package/package/components/Auth0Setting.svelte +8 -3
  3. package/package/components/Dev.svelte +5 -4
  4. package/package/components/DiffDrawer.svelte +2 -2
  5. package/package/components/DiffEditor.svelte +34 -37
  6. package/package/components/DiffEditor.svelte.d.ts +23 -39
  7. package/package/components/EditableSchemaForm.svelte +67 -67
  8. package/package/components/EditableSchemaForm.svelte.d.ts +3 -3
  9. package/package/components/Editor.svelte +32 -11
  10. package/package/components/Editor.svelte.d.ts +6 -0
  11. package/package/components/EditorBar.svelte +2 -2
  12. package/package/components/EditorBar.svelte.d.ts +1 -0
  13. package/package/components/FieldHeader.svelte +1 -1
  14. package/package/components/FlowBuilder.svelte +7 -4
  15. package/package/components/FlowPreviewContent.svelte +3 -3
  16. package/package/components/FlowStatusViewer.svelte +28 -0
  17. package/package/components/FlowStatusViewerInner.svelte +72 -20
  18. package/package/components/FlowStatusViewerInner.svelte.d.ts +7 -0
  19. package/package/components/ModulePreview.svelte +2 -1
  20. package/package/components/ModulePreview.svelte.d.ts +1 -0
  21. package/package/components/ModulePreviewForm.svelte +72 -65
  22. package/package/components/ModulePreviewResultViewer.svelte +13 -18
  23. package/package/components/ModuleTest.svelte +10 -6
  24. package/package/components/ModuleTest.svelte.d.ts +1 -0
  25. package/package/components/OktaSetting.svelte +8 -3
  26. package/package/components/Portal.svelte +11 -7
  27. package/package/components/Portal.svelte.d.ts +19 -39
  28. package/package/components/ResourceEditor.svelte +4 -0
  29. package/package/components/RunForm.svelte +2 -2
  30. package/package/components/RunForm.svelte.d.ts +1 -1
  31. package/package/components/RunFormAdvancedPopup.svelte +13 -1
  32. package/package/components/SchemaForm.svelte +1 -2
  33. package/package/components/ScriptBuilder.svelte +1 -1
  34. package/package/components/ScriptEditor.svelte +22 -7
  35. package/package/components/SimpleEditor.svelte +0 -1
  36. package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
  37. package/package/components/apps/components/layout/AppModal.svelte +2 -2
  38. package/package/components/apps/editor/component/ComponentNavigation.svelte +3 -2
  39. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +1 -1
  40. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +0 -1
  41. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -1
  42. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +3 -1
  43. package/package/components/apps/editor/settingsPanel/GridNavbar.svelte +3 -1
  44. package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -1
  45. package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +55 -53
  46. package/package/components/apps/editor/settingsPanel/TableActions.svelte +3 -1
  47. package/package/components/common/button/model.d.ts +1 -1
  48. package/package/components/common/drawer/Disposable.svelte +51 -30
  49. package/package/components/common/drawer/Disposable.svelte.d.ts +12 -44
  50. package/package/components/common/drawer/Drawer.svelte +15 -11
  51. package/package/components/copilot/FlowInlineScriptAIButton.svelte +4 -2
  52. package/package/components/copilot/FlowInlineScriptAIButton.svelte.d.ts +4 -1
  53. package/package/components/copilot/MetadataGen.svelte +14 -3
  54. package/package/components/copilot/autocomplete/Autocompletor.js +0 -2
  55. package/package/components/copilot/chat/AIChat.svelte +2 -4
  56. package/package/components/copilot/chat/AIChatInput.svelte +3 -3
  57. package/package/components/copilot/chat/AIChatManager.svelte.js +24 -12
  58. package/package/components/copilot/chat/AvailableContextList.svelte +243 -26
  59. package/package/components/copilot/chat/AvailableContextList.svelte.d.ts +2 -1
  60. package/package/components/copilot/chat/ContextElementBadge.svelte +31 -15
  61. package/package/components/copilot/chat/ContextElementBadge.svelte.d.ts +5 -20
  62. package/package/components/copilot/chat/ContextManager.svelte.d.ts +15 -2
  63. package/package/components/copilot/chat/ContextManager.svelte.js +134 -24
  64. package/package/components/copilot/chat/ContextTextarea.svelte +22 -49
  65. package/package/components/copilot/chat/ToolContentDisplay.svelte +10 -1
  66. package/package/components/copilot/chat/ToolExecutionDisplay.svelte +3 -3
  67. package/package/components/copilot/chat/context.d.ts +19 -1
  68. package/package/components/copilot/chat/context.js +1 -0
  69. package/package/components/copilot/chat/flow/FlowAIChat.svelte +109 -7
  70. package/package/components/copilot/chat/flow/core.d.ts +13 -1
  71. package/package/components/copilot/chat/flow/core.js +171 -19
  72. package/package/components/copilot/chat/flow/uiIntents.d.ts +8 -0
  73. package/package/components/copilot/chat/flow/uiIntents.js +5 -0
  74. package/package/components/copilot/chat/flow/useUiIntent.d.ts +5 -0
  75. package/package/components/copilot/chat/flow/useUiIntent.js +12 -0
  76. package/package/components/copilot/chat/monaco-adapter.d.ts +22 -4
  77. package/package/components/copilot/chat/monaco-adapter.js +55 -16
  78. package/package/components/copilot/chat/script/core.d.ts +2 -2
  79. package/package/components/copilot/chat/script/core.js +54 -124
  80. package/package/components/copilot/chat/shared.d.ts +14 -2
  81. package/package/components/copilot/chat/shared.js +170 -7
  82. package/package/components/copilot/lib.js +12 -7
  83. package/package/components/copilot/shared.d.ts +1 -1
  84. package/package/components/copilot/shared.js +16 -10
  85. package/package/components/flows/FlowEditor.svelte +15 -1
  86. package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
  87. package/package/components/flows/FlowModuleIcon.svelte +39 -0
  88. package/package/components/flows/FlowModuleIcon.svelte.d.ts +10 -0
  89. package/package/components/flows/common/FlowCardHeader.svelte +4 -1
  90. package/package/components/flows/content/FlowBranchesAllWrapper.svelte +6 -0
  91. package/package/components/flows/content/FlowBranchesOneWrapper.svelte +6 -0
  92. package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
  93. package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
  94. package/package/components/flows/content/FlowInput.svelte +31 -34
  95. package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
  96. package/package/components/flows/content/FlowLoop.svelte +7 -0
  97. package/package/components/flows/content/FlowModuleComponent.svelte +39 -44
  98. package/package/components/flows/content/FlowModuleScript.svelte +1 -1
  99. package/package/components/flows/content/FlowModuleSuspend.svelte +16 -18
  100. package/package/components/flows/content/FlowWhileLoop.svelte +6 -0
  101. package/package/components/flows/content/ScriptEditorDrawer.svelte +9 -11
  102. package/package/components/flows/dfs.d.ts +1 -1
  103. package/package/components/flows/dfs.js +6 -6
  104. package/package/components/flows/flowInfers.js +7 -7
  105. package/package/components/flows/flowStateUtils.svelte.js +1 -2
  106. package/package/components/flows/map/FlowModuleSchemaItem.svelte +12 -26
  107. package/package/components/flows/map/MapItem.svelte +12 -39
  108. package/package/components/flows/map/VirtualItem.svelte +1 -1
  109. package/package/components/flows/pickers/TopLevelNode.svelte +1 -1
  110. package/package/components/flows/propPicker/InputPickerInner.svelte +5 -5
  111. package/package/components/flows/propPicker/OutputPickerInner.svelte +143 -118
  112. package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +7 -16
  113. package/package/components/flows/{testSteps.svelte.d.ts → stepsInputArgs.svelte.d.ts} +2 -1
  114. package/package/components/flows/{testSteps.svelte.js → stepsInputArgs.svelte.js} +15 -3
  115. package/package/components/flows/types.d.ts +16 -3
  116. package/package/components/flows/utils.js +3 -0
  117. package/package/components/graph/FlowGraphV2.svelte +1 -1
  118. package/package/components/graph/renderers/nodes/AIToolNode.svelte +4 -4
  119. package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +71 -54
  120. package/package/components/propertyPicker/ObjectViewer.svelte +11 -3
  121. package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +1 -1
  122. package/package/components/schema/AddPropertyV2.svelte +2 -7
  123. package/package/components/schema/AddPropertyV2.svelte.d.ts +3 -20
  124. package/package/components/schema/EditableSchemaDrawer.svelte +109 -115
  125. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +2 -1
  126. package/package/components/schema/EditableSchemaSdkWrapper.svelte +16 -3
  127. package/package/components/schema/EditableSchemaSdkWrapper.svelte.d.ts +4 -1
  128. package/package/components/schema/EditableSchemaWrapper.svelte +3 -10
  129. package/package/components/schema/FlowPropertyEditor.svelte +83 -57
  130. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
  131. package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
  132. package/package/components/schema/SchemaFormDND.svelte +11 -10
  133. package/package/components/schema/SchemaFormDND.svelte.d.ts +3 -2
  134. package/package/components/schema/editable_schema_wrapper.d.ts +0 -3
  135. package/package/components/schema/jsonSchemaResource.svelte.d.ts +2 -0
  136. package/package/components/schema/jsonSchemaResource.svelte.js +40 -0
  137. package/package/components/settings/PremiumInfo.svelte +7 -2
  138. package/package/components/triggers/CaptureWrapper.svelte +2 -13
  139. package/package/components/triggers/CaptureWrapper.svelte.d.ts +1 -1
  140. package/package/components/triggers/TriggersWrapper.svelte +1 -0
  141. package/package/components/triggers/http/RouteEditorInner.svelte +1 -1
  142. package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +23 -20
  143. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte +15 -27
  144. package/package/components/triggers/nats/NatsTriggersConfigSection.svelte.d.ts +7 -5
  145. package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +16 -16
  146. package/package/hubPaths.json +3 -1
  147. package/package/script_helpers.d.ts +2 -2
  148. package/package/script_helpers.js +2 -0
  149. package/package/stores.d.ts +1 -0
  150. package/package/stores.js +8 -1
  151. package/package/utils.d.ts +1 -1
  152. package/package.json +14 -14
  153. 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 prevValueKeys = Object.keys(
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 prevValueKeys) {
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
- dndType={`nested-${title}`}
772
- hiddenArgs={['label', 'kind']}
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
- bind:schema={
866
- () => ({
867
- properties,
868
- $schema: '',
869
- required: nestedRequired ?? [],
870
- type: 'object',
871
- order
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 CollapseLink from './CollapseLink.svelte';
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
- $effect(() => {
29
- changeDomain(value?.['domain'], value?.['custom']);
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 { TestSteps } from './flows/testSteps.svelte';
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 testSteps = new TestSteps();
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
- testSteps,
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
- testSteps.setStepArgs('preprocessor', ev.detail.args ?? {})
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
- class="h-full"
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
- class="h-full"
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 { createEventDispatcher, onMount } from 'svelte';
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
- export let automaticLayout = true;
12
- export let fixedOverflowWidgets = true;
13
- export let defaultLang = undefined;
14
- export let defaultModifiedLang = undefined;
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 (defaultOriginal !== undefined &&
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: meditor.createModel('', lang),
52
- modified: meditor.createModel('', modifiedLang ?? lang)
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
- $: onWidthChange(editorWidth);
85
- $: open && diffDivEl && loadDiffEditor();
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="{$$props.class} editor nonmain-editor"
100
+ class={twMerge('editor nonmain-editor', className)}
101
101
  bind:clientWidth={editorWidth}
102
102
  ></div>
103
- {#if showButtons}
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
- {#if showHistoryButton}
108
- <Button on:click={() => dispatch('seeHistory')} variant="contained" size="sm"
109
- >See changes history</Button
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
- {/if}
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
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
5
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
6
- $$bindings?: Bindings;
7
- } & Exports;
8
- (internal: unknown, props: Props & {
9
- $$events?: Events;
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
- declare const DiffEditor: $$__sveltets_2_IsomorphicComponent<{
18
- [x: string]: any;
19
- automaticLayout?: boolean | undefined;
20
- fixedOverflowWidgets?: boolean | undefined;
21
- defaultLang?: string | undefined | undefined;
22
- defaultModifiedLang?: string | undefined | undefined;
23
- defaultOriginal?: string | undefined | undefined;
24
- defaultModified?: string | undefined | undefined;
25
- readOnly?: boolean | undefined;
26
- showButtons?: boolean | undefined;
27
- showHistoryButton?: boolean | undefined;
28
- open?: boolean | undefined;
29
- setupModel?: ((lang: string, original?: string, modified?: string, modifiedLang?: string) => void) | undefined;
30
- setOriginal?: ((code: string) => void) | undefined;
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
- }, string>;
50
- type DiffEditor = InstanceType<typeof DiffEditor>;
33
+ }, "">;
34
+ type DiffEditor = ReturnType<typeof DiffEditor>;
51
35
  export default DiffEditor;