windmill-components 1.85.0 → 1.86.0

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 (182) hide show
  1. package/components/CenteredModal.svelte +9 -7
  2. package/components/CronInput.svelte +301 -64
  3. package/components/CronInput.svelte.d.ts +3 -3
  4. package/components/DisplayResult.svelte +2 -2
  5. package/components/Editor.svelte +97 -42
  6. package/components/Editor.svelte.d.ts +10 -4
  7. package/components/EditorBar.svelte +14 -9
  8. package/components/EditorBar.svelte.d.ts +1 -1
  9. package/components/FlowBuilder.svelte +73 -53
  10. package/components/FlowGraphViewer.svelte +2 -0
  11. package/components/FlowGraphViewer.svelte.d.ts +1 -0
  12. package/components/FlowPreviewContent.svelte +3 -2
  13. package/components/FlowViewer.svelte +1 -1
  14. package/components/InputTransformForm.svelte +75 -72
  15. package/components/LightweightArgInput.svelte +3 -0
  16. package/components/LightweightArgInput.svelte.d.ts +1 -0
  17. package/components/LightweightSchemaForm.svelte +1 -0
  18. package/components/LightweightSchemaForm.svelte.d.ts +2 -0
  19. package/components/ModulePreview.svelte +2 -2
  20. package/components/Path.svelte +15 -3
  21. package/components/Popover.svelte +7 -19
  22. package/components/ScheduleEditor.svelte +18 -8
  23. package/components/ScriptBuilder.svelte +201 -206
  24. package/components/ScriptBuilder.svelte.d.ts +2 -0
  25. package/components/ScriptEditor.svelte +38 -37
  26. package/components/ScriptEditor.svelte.d.ts +5 -1
  27. package/components/ScriptSchema.svelte +1 -20
  28. package/components/ScriptSchema.svelte.d.ts +0 -1
  29. package/components/SimpleEditor.svelte +8 -2
  30. package/components/SimpleEditor.svelte.d.ts +6 -0
  31. package/components/Star.svelte +2 -1
  32. package/components/TemplateEditor.svelte +16 -3
  33. package/components/TemplateEditor.svelte.d.ts +3 -0
  34. package/components/Toast.svelte +50 -0
  35. package/components/Toast.svelte.d.ts +18 -0
  36. package/components/apps/components/buttons/AppButton.svelte +2 -1
  37. package/components/apps/components/display/AppHtml.svelte +9 -6
  38. package/components/apps/components/display/AppIcon.svelte +3 -0
  39. package/components/apps/components/display/AppImage.svelte +3 -0
  40. package/components/apps/components/display/AppMap.svelte +3 -0
  41. package/components/apps/components/display/AppPdf.svelte +3 -0
  42. package/components/apps/components/display/AppText.svelte +143 -51
  43. package/components/apps/components/display/AppText.svelte.d.ts +4 -0
  44. package/components/apps/components/helpers/AlignWrapper.svelte +1 -20
  45. package/components/apps/components/helpers/HiddenComponent.svelte +12 -6
  46. package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +2 -1
  47. package/components/apps/components/helpers/InitializeComponent.svelte +12 -0
  48. package/components/apps/components/helpers/InitializeComponent.svelte.d.ts +16 -0
  49. package/components/apps/components/helpers/InputValue.svelte +6 -0
  50. package/components/apps/components/helpers/NonRunnableComponent.svelte +3 -0
  51. package/components/apps/components/helpers/RunnableComponent.svelte +24 -6
  52. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
  53. package/components/apps/components/helpers/RunnableWrapper.svelte +8 -2
  54. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  55. package/components/apps/components/inputs/AppCheckbox.svelte +3 -0
  56. package/components/apps/components/inputs/AppDateInput.svelte +3 -0
  57. package/components/apps/components/inputs/AppFileInput.svelte +4 -0
  58. package/components/apps/components/inputs/AppMultiSelect.svelte +3 -0
  59. package/components/apps/components/inputs/AppNumberInput.svelte +3 -0
  60. package/components/apps/components/inputs/AppRangeInput.svelte +3 -0
  61. package/components/apps/components/inputs/AppSelect.svelte +3 -9
  62. package/components/apps/components/inputs/AppSliderInputs.svelte +2 -0
  63. package/components/apps/components/inputs/AppTextInput.svelte +3 -0
  64. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +3 -0
  65. package/components/apps/components/layout/AppContainer.svelte +3 -0
  66. package/components/apps/components/layout/AppDivider.svelte +3 -0
  67. package/components/apps/components/layout/AppDrawer.svelte +3 -0
  68. package/components/apps/components/layout/AppSplitpanes.svelte +3 -0
  69. package/components/apps/components/layout/AppTabs.svelte +3 -0
  70. package/components/apps/editor/AppEditor.svelte +29 -18
  71. package/components/apps/editor/AppEditorHeader.svelte +23 -15
  72. package/components/apps/editor/AppPreview.svelte +5 -3
  73. package/components/apps/editor/ComponentHeader.svelte +20 -1
  74. package/components/apps/editor/ComponentHeader.svelte.d.ts +3 -0
  75. package/components/apps/editor/GridEditor.svelte +2 -2
  76. package/components/apps/editor/RecomputeAllComponents.svelte +7 -4
  77. package/components/apps/editor/SettingsPanel.svelte +1 -0
  78. package/components/apps/editor/appUtils.js +12 -2
  79. package/components/apps/editor/component/Component.svelte +24 -2
  80. package/components/apps/editor/component/components.d.ts +39 -39
  81. package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -26
  82. package/components/apps/editor/componentsPanel/CssSettings.svelte +1 -1
  83. package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
  84. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +4 -3
  85. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +50 -37
  86. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -3
  87. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +14 -6
  88. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -2
  89. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +8 -3
  90. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +0 -2
  91. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +2 -2
  92. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +15 -7
  93. package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +2 -1
  94. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +2 -2
  95. package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +1 -1
  96. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +6 -5
  97. package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +1 -1
  98. package/components/apps/inputType.d.ts +1 -0
  99. package/components/apps/rx.d.ts +0 -2
  100. package/components/apps/rx.js +1 -3
  101. package/components/apps/types.d.ts +8 -0
  102. package/components/apps/utils.d.ts +3 -1
  103. package/components/apps/utils.js +24 -1
  104. package/components/build_workers.d.ts +14 -0
  105. package/components/build_workers.js +45 -0
  106. package/components/common/button/Button.svelte +46 -24
  107. package/components/common/button/Button.svelte.d.ts +7 -1
  108. package/components/common/button/ButtonDropdown.svelte +25 -0
  109. package/components/common/button/ButtonDropdown.svelte.d.ts +27 -0
  110. package/components/common/button/model.d.ts +2 -3
  111. package/components/common/button/model.js +7 -3
  112. package/components/common/drawer/Drawer.svelte +0 -1
  113. package/components/common/drawer/DrawerContent.svelte +1 -1
  114. package/components/common/fileInput/FileInput.svelte +5 -1
  115. package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  116. package/components/common/index.d.ts +0 -2
  117. package/components/common/index.js +0 -2
  118. package/components/common/menu/Menu.svelte.d.ts +1 -1
  119. package/components/common/popup/Popup.svelte +9 -5
  120. package/components/common/table/ScriptRow.svelte +2 -2
  121. package/components/common/tabs/Tab.svelte +10 -5
  122. package/components/common/tabs/Tabs.svelte +20 -1
  123. package/components/common/tabs/Tabs.svelte.d.ts +3 -0
  124. package/components/flows/CreateActionsApp.svelte +12 -7
  125. package/components/flows/CreateActionsFlow.svelte +11 -10
  126. package/components/flows/FlowEditor.svelte +2 -2
  127. package/components/flows/content/CapturePayload.svelte +2 -4
  128. package/components/flows/content/FlowModuleComponent.svelte +1 -0
  129. package/components/flows/content/FlowSchedules.svelte +3 -1
  130. package/components/flows/header/FlowImportExportMenu.svelte +10 -12
  131. package/components/flows/header/FlowPreviewButtons.svelte +21 -23
  132. package/components/flows/scheduleUtils.d.ts +1 -0
  133. package/components/flows/scheduleUtils.js +2 -1
  134. package/components/graph/FlowGraph.svelte +21 -7
  135. package/components/graph/FlowGraph.svelte.d.ts +2 -0
  136. package/components/graph/svelvet/container/views/GraphView.svelte +17 -29
  137. package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +2 -0
  138. package/components/graph/svelvet/container/views/Svelvet.svelte +4 -3
  139. package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +3 -0
  140. package/components/home/ItemsList.svelte +1 -1
  141. package/components/icons/WindmillIcon.svelte +4 -0
  142. package/components/icons/WindmillIcon.svelte.d.ts +1 -0
  143. package/components/propertyPicker/PropPicker.svelte +2 -2
  144. package/components/scripts/CreateActionsScript.svelte +4 -22
  145. package/editorUtils.js +3 -1
  146. package/gen/core/OpenAPI.js +1 -1
  147. package/gen/index.d.ts +6 -0
  148. package/gen/index.js +2 -0
  149. package/gen/models/CreateInput.d.ts +5 -0
  150. package/gen/models/CreateInput.js +4 -0
  151. package/gen/models/EditSchedule.d.ts +1 -0
  152. package/gen/models/Input.d.ts +6 -0
  153. package/gen/models/Input.js +4 -0
  154. package/gen/models/NewSchedule.d.ts +1 -1
  155. package/gen/models/NewTokenImpersonate.d.ts +5 -0
  156. package/gen/models/NewTokenImpersonate.js +4 -0
  157. package/gen/models/RunnableType.d.ts +5 -0
  158. package/gen/models/RunnableType.js +9 -0
  159. package/gen/models/Schedule.d.ts +1 -1
  160. package/gen/models/UpdateInput.d.ts +4 -0
  161. package/gen/models/UpdateInput.js +4 -0
  162. package/gen/services/FlowService.d.ts +18 -0
  163. package/gen/services/FlowService.js +19 -0
  164. package/gen/services/InputService.d.ts +78 -0
  165. package/gen/services/InputService.js +95 -0
  166. package/gen/services/JobService.d.ts +35 -15
  167. package/gen/services/JobService.js +25 -7
  168. package/gen/services/ScheduleService.d.ts +2 -2
  169. package/gen/services/ScheduleService.js +1 -1
  170. package/gen/services/ScriptService.d.ts +10 -0
  171. package/gen/services/ScriptService.js +16 -0
  172. package/gen/services/UserService.d.ts +12 -0
  173. package/gen/services/UserService.js +13 -0
  174. package/package.json +24 -13
  175. package/script_helpers.d.ts +1 -1
  176. package/script_helpers.js +7 -5
  177. package/utils.d.ts +2 -2
  178. package/utils.js +21 -11
  179. package/components/common/button/ButtonPopup.svelte +0 -78
  180. package/components/common/button/ButtonPopup.svelte.d.ts +0 -39
  181. package/components/common/button/ButtonPopupItem.svelte +0 -48
  182. package/components/common/button/ButtonPopupItem.svelte.d.ts +0 -28
@@ -1,6 +1,6 @@
1
1
  <script>import { goto } from '$app/navigation';
2
2
  import { page } from '$app/stores';
3
- import { Alert, Badge, ButtonPopup, ButtonPopupItem, Drawer, DrawerContent, UndoRedo } from '../../common';
3
+ import { Alert, Badge, Drawer, DrawerContent, UndoRedo } from '../../common';
4
4
  import Button from '../../common/button/Button.svelte';
5
5
  import { dirtyStore } from '../../common/confirmationModal/dirtyStore';
6
6
  import Skeleton from '../../common/skeleton/Skeleton.svelte';
@@ -188,19 +188,19 @@ function onKeyDown(event) {
188
188
  lock = true;
189
189
  switch (event.key) {
190
190
  case 'Z':
191
- if (event.ctrlKey) {
191
+ if (event.ctrlKey || event.metaKey) {
192
192
  $app = redo(history);
193
193
  event.preventDefault();
194
194
  }
195
195
  break;
196
196
  case 'z':
197
- if (event.ctrlKey) {
197
+ if (event.ctrlKey || event.metaKey) {
198
198
  $app = undo(history, $app);
199
199
  event.preventDefault();
200
200
  }
201
201
  break;
202
202
  case 's':
203
- if (event.ctrlKey) {
203
+ if (event.ctrlKey || event.metaKey) {
204
204
  save();
205
205
  event.preventDefault();
206
206
  }
@@ -265,7 +265,7 @@ function onKeyDown(event) {
265
265
  <PanelSection title="Past Runs">
266
266
  <div class="flex flex-col gap-2 w-full">
267
267
  {#if $jobs.length > 0}
268
- <div class="flex gap-2 flex-col ">
268
+ <div class="flex gap-2 flex-col">
269
269
  {#each $jobs ?? [] as { job, component } (job)}
270
270
  <!-- svelte-ignore a11y-click-events-have-key-events -->
271
271
  <div
@@ -441,10 +441,15 @@ function onKeyDown(event) {
441
441
  </Drawer>
442
442
 
443
443
  <div
444
- class="border-b flex flex-row justify-between py-1 gap-4 gap-y-2 px-3 items-center overflow-y-visible"
444
+ class="border-b flex flex-row justify-between py-1 gap-4 gap-y-2 px-3 items-center overflow-y-visible"
445
445
  >
446
446
  <div class="min-w-64 w-64">
447
- <input type="text" placeholder="App summary" class="text-sm w-full" bind:value={$summary} />
447
+ <input
448
+ type="text"
449
+ placeholder="App summary"
450
+ class="text-sm w-full font-semibold"
451
+ bind:value={$summary}
452
+ />
448
453
  </div>
449
454
  <UndoRedo
450
455
  undoProps={{ disabled: $history?.index === 0 }}
@@ -589,20 +594,23 @@ function onKeyDown(event) {
589
594
  <span class="hidden md:inline">Save</span>
590
595
  </Button>
591
596
  {:else}
592
- <ButtonPopup
597
+ <Button
593
598
  loading={loading.save}
594
599
  startIcon={{ icon: faSave }}
595
600
  on:click={save}
596
601
  color="dark"
597
602
  size="xs"
603
+ dropdownItems={[
604
+ {
605
+ label: 'Fork',
606
+ onClick: () => {
607
+ window.open(`/apps/add?template=${appPath}`)
608
+ }
609
+ }
610
+ ]}
598
611
  >
599
- <svelte:fragment slot="main">Save</svelte:fragment>
600
- <ButtonPopupItem
601
- on:click={() => {
602
- window.open(`/apps/add?template=${appPath}`)
603
- }}>Fork</ButtonPopupItem
604
- >
605
- </ButtonPopup>
612
+ Save
613
+ </Button>
606
614
  {/if}
607
615
  </div>
608
616
  </div>
@@ -34,6 +34,7 @@ const allIdsInPath = writable([]);
34
34
  const parentWidth = writable(0);
35
35
  setContext('AppViewerContext', {
36
36
  worldStore: buildWorld(context),
37
+ initialized: writable({ initialized: false, initializedComponents: [] }),
37
38
  app: appStore,
38
39
  summary: writable(summary),
39
40
  selectedComponent,
@@ -58,7 +59,7 @@ setContext('AppViewerContext', {
58
59
  hoverStore: writable(undefined),
59
60
  allIdsInPath
60
61
  });
61
- let ncontext = context;
62
+ let ncontext = { ...context, workspace };
62
63
  function hashchange(e) {
63
64
  ncontext.hash = e.newURL.split('#')[1];
64
65
  ncontext = ncontext;
@@ -80,7 +81,7 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
80
81
 
81
82
  <div class="relative">
82
83
  <div
83
- class="{$$props.class} {lockedClasses} h-full
84
+ class="{$$props.class} {lockedClasses} h-full
84
85
  w-full {app.fullscreen ? '' : 'max-w-6xl'} mx-auto"
85
86
  >
86
87
  {#if $appStore.grid}
@@ -151,8 +152,9 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-non
151
152
  inlineScript={script.inlineScript}
152
153
  name={script.name}
153
154
  fields={script.fields}
154
- doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged ?? false}
155
+ recomputeOnInputChanged={script.recomputeOnInputChanged ?? true}
155
156
  recomputableByRefreshButton={script.autoRefresh ?? false}
157
+ noBackendValue={script.noBackendValue}
156
158
  />
157
159
  {/if}
158
160
  {/each}
@@ -1,5 +1,5 @@
1
1
  <script>import { classNames } from '../../../utils';
2
- import { Anchor, Bug, Expand, Move } from 'lucide-svelte';
2
+ import { Anchor, Bug, Expand, Move, Pen } from 'lucide-svelte';
3
3
  import { createEventDispatcher, getContext } from 'svelte';
4
4
  import Popover from '../../Popover.svelte';
5
5
  import { Alert, Button } from '../../common';
@@ -10,6 +10,8 @@ export let selected;
10
10
  export let locked = false;
11
11
  export let hover = false;
12
12
  export let shouldHideActions = false;
13
+ export let hasInlineEditor = false;
14
+ export let inlineEditorOpened = false;
13
15
  const dispatch = createEventDispatcher();
14
16
  const { errorByComponent, openDebugRun, jobs, connectingInput } = getContext('AppViewerContext');
15
17
  $: error = getErrorFromLatestResult(component.id, $errorByComponent, $jobs);
@@ -40,6 +42,23 @@ function openDebugRuns() {
40
42
 
41
43
  {#if selected && !shouldHideActions}
42
44
  <div class="top-[-9px] -right-[8px] flex flex-row absolute gap-1.5 z-50">
45
+ {#if hasInlineEditor}
46
+ <button
47
+ title="Expand"
48
+ class={classNames(
49
+ 'px-1 text-2xs py-0.5 font-bold w-fit border cursor-pointer rounded-sm',
50
+ 'bg-indigo-100 text-indigo-600 border-indigo-500 hover:bg-indigo-200 hover:text-indigo-800'
51
+ )}
52
+ on:click={() => dispatch('triggerInlineEditor')}
53
+ on:pointerdown|stopPropagation
54
+ >
55
+ {#if inlineEditorOpened}
56
+ <Pen aria-label="Unlock position" size={14} class="text-orange-500" />
57
+ {:else}
58
+ <Pen aria-label="Lock position" size={14} />
59
+ {/if}
60
+ </button>
61
+ {/if}
43
62
  <button
44
63
  title="Expand"
45
64
  class={classNames(
@@ -7,10 +7,13 @@ declare const __propDef: {
7
7
  locked?: boolean | undefined;
8
8
  hover?: boolean | undefined;
9
9
  shouldHideActions?: boolean | undefined;
10
+ hasInlineEditor?: boolean | undefined;
11
+ inlineEditorOpened?: boolean | undefined;
10
12
  };
11
13
  events: {
12
14
  mousedown: MouseEvent;
13
15
  pointerdown: PointerEvent;
16
+ triggerInlineEditor: CustomEvent<any>;
14
17
  expand: CustomEvent<any>;
15
18
  lock: CustomEvent<any>;
16
19
  } & {
@@ -59,7 +59,7 @@ function removeGridElement(component) {
59
59
  <RecomputeAllComponents />
60
60
  {/if}
61
61
  <div class="flex text-2xs text-gray-600 gap-1 items-center">
62
- <div class="py-2 pr-2 text-gray-600 flex gap-2 items-center">
62
+ <div class="py-2 pr-2 text-gray-600 flex gap-2 items-center">
63
63
  Hide bar on view
64
64
  <input class="windmillapp" type="checkbox" bind:checked={$app.norefreshbar} />
65
65
  </div>
@@ -136,7 +136,7 @@ function removeGridElement(component) {
136
136
  inlineScript={script.inlineScript}
137
137
  name={script.name}
138
138
  fields={script.fields}
139
- doNotRecomputeOnInputChanged={script.doNotRecomputeOnInputChanged ?? false}
139
+ recomputeOnInputChanged={script.recomputeOnInputChanged ?? true}
140
140
  recomputableByRefreshButton={script.autoRefresh ?? false}
141
141
  />
142
142
  {/if}
@@ -3,14 +3,14 @@ import { ChevronDown, RefreshCw } from 'lucide-svelte';
3
3
  import { getContext, onMount } from 'svelte';
4
4
  import Button from '../../common/button/Button.svelte';
5
5
  import { allItems } from '../utils';
6
- const { runnableComponents, app, worldStore } = getContext('AppViewerContext');
6
+ const { runnableComponents, app, initialized } = getContext('AppViewerContext');
7
7
  let loading = false;
8
8
  let timeout = undefined;
9
9
  let interval = undefined;
10
10
  let shouldRefresh = false;
11
11
  let firstLoad = false;
12
12
  $: !firstLoad &&
13
- $worldStore.initializedOutputs ==
13
+ $initialized.initializedComponents?.length ==
14
14
  allItems($app.grid, $app.subgrids).length + $app.hiddenInlineScripts.length &&
15
15
  refresh();
16
16
  $: componentNumber = Object.values($runnableComponents).filter((x) => x.autoRefresh).length;
@@ -33,13 +33,16 @@ function setInter(inter) {
33
33
  onClick(!inter);
34
34
  }
35
35
  function refresh() {
36
+ let isFirstLoad = false;
36
37
  if (!firstLoad) {
37
- $worldStore.initialized = true;
38
+ $initialized.initialized = true;
38
39
  firstLoad = true;
40
+ isFirstLoad = true;
39
41
  }
40
42
  loading = true;
41
43
  Promise.all(Object.keys($runnableComponents).map((id) => {
42
- if (!$runnableComponents?.[id]?.autoRefresh) {
44
+ if (!$runnableComponents?.[id]?.autoRefresh &&
45
+ (!isFirstLoad || !$runnableComponents?.[id]?.refreshOnStart)) {
43
46
  return;
44
47
  }
45
48
  return $runnableComponents?.[id]?.cb?.();
@@ -94,6 +94,7 @@ function findComponentSettings(app, id) {
94
94
  fields={hiddenInlineScript.script.fields}
95
95
  autoRefresh={hiddenInlineScript.script.autoRefresh}
96
96
  id={`bg_${hiddenInlineScript.index}`}
97
+ bind:recomputeOnInputChanged={hiddenInlineScript.script.recomputeOnInputChanged}
97
98
  bind:doNotRecomputeOnInputChanged={hiddenInlineScript.script.doNotRecomputeOnInputChanged}
98
99
  bind:inlineScript={hiddenInlineScript.script.inlineScript}
99
100
  />
@@ -25,6 +25,14 @@ export function dfs(grid, id, subgrids) {
25
25
  return undefined;
26
26
  }
27
27
  export function selectId(e, id, selectedComponent, app) {
28
+ // this ensure handleClickOutside are triggered
29
+ let event = new MouseEvent('click', {
30
+ view: window,
31
+ bubbles: true,
32
+ cancelable: true,
33
+ relatedTarget: e.target
34
+ });
35
+ window.dispatchEvent(event);
28
36
  if (e.shiftKey) {
29
37
  selectedComponent.update((old) => {
30
38
  if (old && old?.[0]) {
@@ -337,7 +345,6 @@ function isOverlapping(item1, item2) {
337
345
  item1.y + item1.h > item2.y);
338
346
  }
339
347
  export function initOutput(world, id, init) {
340
- world.initializedOutputs += 1;
341
348
  if (!world) {
342
349
  return {};
343
350
  }
@@ -421,6 +428,9 @@ export function connectInput(connectingInput, componentId, path) {
421
428
  return connectingInput;
422
429
  }
423
430
  export function recursivelyFilterKeyInJSON(json, search, extraSearch) {
431
+ if (json === null || json === undefined || typeof json != 'object') {
432
+ return json;
433
+ }
424
434
  if (!search || search == '') {
425
435
  return json;
426
436
  }
@@ -435,7 +445,7 @@ export function recursivelyFilterKeyInJSON(json, search, extraSearch) {
435
445
  }
436
446
  else if (typeof json[key] === 'object') {
437
447
  const res = recursivelyFilterKeyInJSON(json[key], search, extraSearch);
438
- if (Object.keys(res).length !== 0) {
448
+ if (Object.keys(res ?? {}).length !== 0) {
439
449
  filteredJSON[key] = res;
440
450
  }
441
451
  }
@@ -14,6 +14,7 @@ $: ismoving =
14
14
  movingcomponents != undefined && $mode == 'dnd' && $movingcomponents?.includes(component.id);
15
15
  let initializing = undefined;
16
16
  let componentContainerHeight = 0;
17
+ let inlineEditorOpened = false;
17
18
  </script>
18
19
 
19
20
  <!-- svelte-ignore a11y-mouse-events-have-key-events -->
@@ -40,11 +41,18 @@ let componentContainerHeight = 0;
40
41
  on:lock
41
42
  on:expand
42
43
  {locked}
44
+ {inlineEditorOpened}
45
+ hasInlineEditor={component.type === 'textcomponent' &&
46
+ component.componentInput &&
47
+ component.componentInput.type !== 'connected'}
48
+ on:triggerInlineEditor={() => {
49
+ inlineEditorOpened = !inlineEditorOpened
50
+ }}
43
51
  />
44
52
  {/if}
45
53
 
46
54
  {#if ismoving}
47
- <div class="absolute -top-8 w-40 ">
55
+ <div class="absolute -top-8 w-40">
48
56
  <button
49
57
  class="border p-0.5 text-xs"
50
58
  on:click={() => {
@@ -166,6 +174,7 @@ let componentContainerHeight = 0;
166
174
  configuration={component.configuration}
167
175
  customCss={component.customCss}
168
176
  bind:initializing
177
+ bind:editorMode={inlineEditorOpened}
169
178
  componentInput={component.componentInput}
170
179
  {render}
171
180
  />
@@ -413,5 +422,18 @@ let componentContainerHeight = 0;
413
422
  </div>
414
423
  </div>
415
424
  {#if initializing}
416
- <div class="absolute inset-0 center-center flex-col bg- border animate-skeleton" />
425
+ <!-- svelte-ignore a11y-mouse-events-have-key-events -->
426
+ <div
427
+ on:mouseover|stopPropagation={() => {
428
+ if (component.id !== $hoverStore) {
429
+ $hoverStore = component.id
430
+ }
431
+ }}
432
+ on:mouseout|stopPropagation={() => {
433
+ if ($hoverStore !== undefined) {
434
+ $hoverStore = undefined
435
+ }
436
+ }}
437
+ class="absolute inset-0 center-center flex-col bg- border animate-skeleton"
438
+ />
417
439
  {/if}