windmill-components 1.379.4 → 1.382.3

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 (199) hide show
  1. package/package/base.d.ts +1 -1
  2. package/package/base.js +1 -1
  3. package/package/components/ArgInput.svelte +33 -3
  4. package/package/components/DisplayResult.svelte +17 -5
  5. package/package/components/EditorBar.svelte +48 -38
  6. package/package/components/EditorBar.svelte.d.ts +2 -0
  7. package/package/components/ErrorOrRecoveryHandler.svelte +3 -2
  8. package/package/components/FlowBuilder.svelte +18 -12
  9. package/package/components/FlowBuilder.svelte.d.ts +3 -2
  10. package/package/components/FlowGraphViewer.svelte +6 -5
  11. package/package/components/FlowJobResult.svelte +4 -2
  12. package/package/components/FlowJobResult.svelte.d.ts +2 -0
  13. package/package/components/FlowStatusViewer.svelte +7 -1
  14. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  15. package/package/components/FlowStatusViewerInner.svelte +29 -11
  16. package/package/components/FlowViewer.svelte +3 -1
  17. package/package/components/FlowViewer.svelte.d.ts +1 -0
  18. package/package/components/HighlightCode.svelte +2 -2
  19. package/package/components/ModulePreviewForm.svelte +1 -1
  20. package/package/components/ObjectResourceInput.svelte +7 -2
  21. package/package/components/ObjectResourceInput.svelte.d.ts +2 -0
  22. package/package/components/ResourcePicker.svelte +60 -48
  23. package/package/components/ScriptBuilder.svelte +42 -36
  24. package/package/components/ScriptBuilder.svelte.d.ts +2 -0
  25. package/package/components/ScriptEditor.svelte +3 -1
  26. package/package/components/ScriptEditor.svelte.d.ts +2 -0
  27. package/package/components/ScriptVersionHistory.svelte +63 -7
  28. package/package/components/apps/components/display/AppText.svelte +8 -3
  29. package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +3 -2
  30. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +22 -5
  31. package/package/components/apps/components/display/table/AppAggridTable.svelte +14 -5
  32. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +23 -8
  33. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +5 -3
  34. package/package/components/apps/components/display/table/utils.js +8 -7
  35. package/package/components/apps/components/helpers/RunnableComponent.svelte +13 -1
  36. package/package/components/apps/components/helpers/eval.js +31 -25
  37. package/package/components/apps/components/inputs/AppSelect.svelte +45 -29
  38. package/package/components/apps/editor/AppEditorHeader.svelte +1 -0
  39. package/package/components/apps/editor/AppReportsDrawer.svelte +4 -3
  40. package/package/components/apps/editor/component/components.d.ts +7 -1
  41. package/package/components/apps/editor/component/components.js +6 -0
  42. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
  43. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte +55 -45
  44. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphHeader.svelte.d.ts +7 -9
  45. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +66 -59
  46. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte.d.ts +9 -11
  47. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +213 -254
  48. package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte.d.ts +0 -1
  49. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.d.ts +1 -1
  50. package/package/components/apps/editor/settingsPanel/decisionTree/nodeHelpers.js +2 -6
  51. package/package/components/custom_ui.d.ts +35 -1
  52. package/package/components/details/DetailPageDetailPanel.svelte +9 -1
  53. package/package/components/details/DetailPageDetailPanel.svelte.d.ts +2 -1
  54. package/package/components/details/DetailPageLayout.svelte +2 -0
  55. package/package/components/details/DetailPageLayout.svelte.d.ts +3 -0
  56. package/package/components/details/EmailTriggerPanel.svelte +128 -0
  57. package/package/components/details/EmailTriggerPanel.svelte.d.ts +20 -0
  58. package/package/components/details/WebhooksPanel.svelte +10 -71
  59. package/package/components/flows/FlowHistory.svelte +1 -0
  60. package/package/components/flows/content/FlowInputs.svelte +0 -1
  61. package/package/components/flows/content/FlowModuleComponent.svelte +8 -2
  62. package/package/components/flows/content/FlowModuleEarlyStop.svelte +193 -66
  63. package/package/components/flows/content/FlowModuleHeader.svelte +1 -1
  64. package/package/components/flows/content/FlowModuleScript.svelte +33 -3
  65. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  66. package/package/components/flows/content/FlowModuleSuspend.svelte +15 -0
  67. package/package/components/flows/content/FlowSettings.svelte +26 -15
  68. package/package/components/flows/flowExplorer.js +3 -0
  69. package/package/components/flows/flowInfers.js +1 -1
  70. package/package/components/flows/map/FlowJobsMenu.svelte +39 -44
  71. package/package/components/flows/map/FlowModuleSchemaItem.svelte +1 -2
  72. package/package/components/flows/map/FlowModuleSchemaMap.svelte +4 -3
  73. package/package/components/flows/map/InsertModuleButton.svelte +16 -9
  74. package/package/components/flows/map/MapItem.svelte +4 -98
  75. package/package/components/flows/map/MapItem.svelte.d.ts +0 -5
  76. package/package/components/flows/map/VirtualItem.svelte +6 -159
  77. package/package/components/flows/map/VirtualItem.svelte.d.ts +0 -15
  78. package/package/components/flows/propPicker/PropPickerWrapper.svelte +2 -0
  79. package/package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +1 -0
  80. package/package/components/flows/types.d.ts +2 -0
  81. package/package/components/graph/FlowGraphV2.svelte +256 -0
  82. package/package/components/graph/{FlowGraph.svelte.d.ts → FlowGraphV2.svelte.d.ts} +8 -8
  83. package/package/components/graph/graphBuilder.d.ts +15 -0
  84. package/package/components/graph/graphBuilder.js +337 -0
  85. package/package/components/graph/index.d.ts +0 -1
  86. package/package/components/graph/index.js +0 -1
  87. package/package/components/graph/model.d.ts +4 -8
  88. package/package/components/graph/renderers/edges/BaseEdge.svelte +109 -0
  89. package/package/components/graph/renderers/edges/BaseEdge.svelte.d.ts +35 -0
  90. package/package/components/graph/renderers/edges/DataflowEdge.svelte +37 -0
  91. package/package/components/graph/renderers/edges/DataflowEdge.svelte.d.ts +29 -0
  92. package/package/components/graph/renderers/edges/EmptyEdge.svelte +22 -0
  93. package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +23 -0
  94. package/package/components/graph/renderers/nodes/BranchAllStart.svelte +44 -0
  95. package/package/components/graph/renderers/nodes/BranchAllStart.svelte.d.ts +29 -0
  96. package/package/components/graph/renderers/nodes/BranchOneStart.svelte +41 -0
  97. package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +29 -0
  98. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte +19 -0
  99. package/package/components/graph/renderers/nodes/ForLoopEndNode.svelte.d.ts +24 -0
  100. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte +20 -0
  101. package/package/components/graph/renderers/nodes/ForLoopStartNode.svelte.d.ts +25 -0
  102. package/package/components/graph/renderers/nodes/InputNode.svelte +74 -0
  103. package/package/components/graph/renderers/nodes/InputNode.svelte.d.ts +23 -0
  104. package/package/components/graph/renderers/nodes/ModuleNode.svelte +71 -0
  105. package/package/components/graph/renderers/nodes/ModuleNode.svelte.d.ts +41 -0
  106. package/package/components/graph/renderers/nodes/NoBranchNode.svelte +20 -0
  107. package/package/components/graph/renderers/nodes/NoBranchNode.svelte.d.ts +27 -0
  108. package/package/components/graph/renderers/nodes/NodeWrapper.svelte +21 -0
  109. package/package/components/graph/renderers/nodes/NodeWrapper.svelte.d.ts +22 -0
  110. package/package/components/graph/renderers/nodes/ResultNode.svelte +24 -0
  111. package/package/components/graph/renderers/nodes/ResultNode.svelte.d.ts +22 -0
  112. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte +19 -0
  113. package/package/components/graph/renderers/nodes/branchAllEndNode.svelte.d.ts +26 -0
  114. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte +19 -0
  115. package/package/components/graph/renderers/nodes/branchOneEndNode.svelte.d.ts +24 -0
  116. package/package/components/graph/renderers/utils.d.ts +8 -0
  117. package/package/components/graph/renderers/utils.js +26 -0
  118. package/package/components/graph/util.d.ts +1 -2
  119. package/package/components/graph/util.js +2 -8
  120. package/package/components/propertyPicker/PropPickerResult.svelte +6 -1
  121. package/package/components/propertyPicker/PropPickerResult.svelte.d.ts +1 -0
  122. package/package/components/runs/RunsFilter.svelte +15 -17
  123. package/package/components/sidebar/changelogs.js +5 -0
  124. package/package/gen/core/OpenAPI.js +1 -1
  125. package/package/gen/schemas.gen.d.ts +3 -0
  126. package/package/gen/schemas.gen.js +3 -0
  127. package/package/gen/services.gen.d.ts +22 -3
  128. package/package/gen/services.gen.js +38 -2
  129. package/package/gen/types.gen.d.ts +69 -6
  130. package/package/hub.d.ts +11 -0
  131. package/package/hub.js +2 -0
  132. package/package/hubPaths.json +9 -0
  133. package/package/init_scripts/python_failure_module.d.ts +1 -1
  134. package/package/init_scripts/python_failure_module.js +4 -3
  135. package/package/script_helpers.d.ts +2 -2
  136. package/package/script_helpers.js +11 -9
  137. package/package.json +2 -1
  138. package/package/components/graph/FlowGraph.svelte +0 -614
  139. package/package/components/graph/svelvet/LICENSE +0 -21
  140. package/package/components/graph/svelvet/container/README.md +0 -7
  141. package/package/components/graph/svelvet/container/controllers/middleware.d.ts +0 -11
  142. package/package/components/graph/svelvet/container/controllers/middleware.js +0 -87
  143. package/package/components/graph/svelvet/container/models/index.d.ts +0 -0
  144. package/package/components/graph/svelvet/container/models/index.js +0 -1
  145. package/package/components/graph/svelvet/container/views/GraphView.svelte +0 -262
  146. package/package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +0 -26
  147. package/package/components/graph/svelvet/container/views/Svelvet.svelte +0 -121
  148. package/package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +0 -36
  149. package/package/components/graph/svelvet/customCss/controllers/getCss.d.ts +0 -2
  150. package/package/components/graph/svelvet/customCss/controllers/getCss.js +0 -46
  151. package/package/components/graph/svelvet/d3/controllers/d3.d.ts +0 -5
  152. package/package/components/graph/svelvet/d3/controllers/d3.js +0 -59
  153. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +0 -4
  154. package/package/components/graph/svelvet/edges/controllers/anchorCbDev.js +0 -92
  155. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +0 -57
  156. package/package/components/graph/svelvet/edges/controllers/anchorCbUser.js +0 -73
  157. package/package/components/graph/svelvet/edges/controllers/util.d.ts +0 -37
  158. package/package/components/graph/svelvet/edges/controllers/util.js +0 -71
  159. package/package/components/graph/svelvet/edges/models/Anchor.d.ts +0 -48
  160. package/package/components/graph/svelvet/edges/models/Anchor.js +0 -122
  161. package/package/components/graph/svelvet/edges/models/Edge.d.ts +0 -48
  162. package/package/components/graph/svelvet/edges/models/Edge.js +0 -109
  163. package/package/components/graph/svelvet/edges/types/types.d.ts +0 -18
  164. package/package/components/graph/svelvet/edges/types/types.js +0 -1
  165. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +0 -104
  166. package/package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +0 -18
  167. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +0 -42
  168. package/package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +0 -17
  169. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +0 -151
  170. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +0 -17
  171. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +0 -157
  172. package/package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +0 -60
  173. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +0 -8
  174. package/package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +0 -25
  175. package/package/components/graph/svelvet/edges/views/Edges/types.d.ts +0 -52
  176. package/package/components/graph/svelvet/edges/views/Edges/types.js +0 -1
  177. package/package/components/graph/svelvet/edges/views/Edges/utils.d.ts +0 -33
  178. package/package/components/graph/svelvet/edges/views/Edges/utils.js +0 -31
  179. package/package/components/graph/svelvet/nodes/controllers/util.d.ts +0 -9
  180. package/package/components/graph/svelvet/nodes/controllers/util.js +0 -13
  181. package/package/components/graph/svelvet/nodes/models/Node.d.ts +0 -74
  182. package/package/components/graph/svelvet/nodes/models/Node.js +0 -156
  183. package/package/components/graph/svelvet/nodes/views/Node.svelte +0 -84
  184. package/package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +0 -21
  185. package/package/components/graph/svelvet/store/controllers/storeApi.d.ts +0 -25
  186. package/package/components/graph/svelvet/store/controllers/storeApi.js +0 -91
  187. package/package/components/graph/svelvet/store/controllers/userApi.d.ts +0 -3
  188. package/package/components/graph/svelvet/store/controllers/userApi.js +0 -18
  189. package/package/components/graph/svelvet/store/controllers/util.d.ts +0 -24
  190. package/package/components/graph/svelvet/store/controllers/util.js +0 -148
  191. package/package/components/graph/svelvet/store/models/store.d.ts +0 -13
  192. package/package/components/graph/svelvet/store/models/store.js +0 -12
  193. package/package/components/graph/svelvet/store/types/types.d.ts +0 -127
  194. package/package/components/graph/svelvet/store/types/types.js +0 -1
  195. package/package/components/graph/svelvet/types/README.md +0 -3
  196. package/package/components/graph/svelvet/types/index.d.ts +0 -2
  197. package/package/components/graph/svelvet/types/index.js +0 -1
  198. package/package/components/graph/svelvet/types/types.d.ts +0 -50
  199. package/package/components/graph/svelvet/types/types.js +0 -18
@@ -67,7 +67,7 @@ $: lang = getLang(language);
67
67
  }}
68
68
  iconOnly
69
69
  />
70
- {#if code?.length < 5000}
70
+ {#if code?.length < 10000}
71
71
  {#if !lines}
72
72
  <Highlight class="nowrap {$$props.class}" language={lang} {code} />
73
73
  {:else}
@@ -76,7 +76,7 @@ $: lang = getLang(language);
76
76
  </Highlight>
77
77
  {/if}
78
78
  {:else}
79
- <pre class="overflow-auto max-h-screen {$$props.class}"
79
+ <pre class="overflow-auto max-h-screen text-xs {$$props.class}"
80
80
  ><code class="language-{language}">{code}</code></pre
81
81
  >
82
82
  {/if}
@@ -35,7 +35,7 @@ $: {
35
35
  }
36
36
  }
37
37
  function plugIt(argName) {
38
- args[argName] = evalValue(argName, mod, testStepStore, pickableProperties, true);
38
+ args[argName] = structuredClone(evalValue(argName, mod, testStepStore, pickableProperties, true));
39
39
  try {
40
40
  editor?.[argName]?.setCode(JSON.stringify(args[argName], null, 4));
41
41
  }
@@ -1,11 +1,14 @@
1
- <script>import ResourcePicker from './ResourcePicker.svelte';
1
+ <script>import JsonEditor from './apps/editor/settingsPanel/inputEditor/JsonEditor.svelte';
2
+ import ResourcePicker from './ResourcePicker.svelte';
2
3
  import S3ObjectPicker from './S3ObjectPicker.svelte';
4
+ import SimpleEditor from './SimpleEditor.svelte';
3
5
  export let format;
4
6
  export let value;
5
7
  export let disablePortal = false;
6
8
  export let showSchemaExplorer = false;
7
9
  export let selectFirst = false;
8
10
  export let defaultValue;
11
+ export let editor = undefined;
9
12
  function isString(value) {
10
13
  return typeof value === 'string' || value instanceof String;
11
14
  }
@@ -32,7 +35,7 @@ $: value && valueToPath();
32
35
  <div class="flex flex-row w-full flex-wrap gap-x-2 gap-y-0.5">
33
36
  {#if format === 'resource-s3_object'}
34
37
  <S3ObjectPicker bind:value />
35
- {:else}
38
+ {:else if value == undefined || typeof value === 'string'}
36
39
  <ResourcePicker
37
40
  {selectFirst}
38
41
  {disablePortal}
@@ -45,5 +48,7 @@ $: value && valueToPath();
45
48
  resourceType={format.split('-').length > 1 ? format.substring('resource-'.length) : undefined}
46
49
  {showSchemaExplorer}
47
50
  />
51
+ {:else}
52
+ <JsonEditor bind:editor code={JSON.stringify(value, null, 2)} bind:value />
48
53
  {/if}
49
54
  </div>
@@ -1,4 +1,5 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import SimpleEditor from './SimpleEditor.svelte';
2
3
  declare const __propDef: {
3
4
  props: {
4
5
  format: string;
@@ -7,6 +8,7 @@ declare const __propDef: {
7
8
  showSchemaExplorer?: boolean | undefined;
8
9
  selectFirst?: boolean | undefined;
9
10
  defaultValue: any;
11
+ editor?: SimpleEditor | undefined;
10
12
  };
11
13
  events: {
12
14
  [evt: string]: CustomEvent<any>;
@@ -9,6 +9,7 @@ import DBSchemaExplorer from './DBSchemaExplorer.svelte';
9
9
  import DarkModeObserver from './DarkModeObserver.svelte';
10
10
  import { Pen, Plus, RotateCw } from 'lucide-svelte';
11
11
  import ResourceEditorDrawer from './ResourceEditorDrawer.svelte';
12
+ import { sendUserToast } from '../toast';
12
13
  const dispatch = createEventDispatcher();
13
14
  export let initialValue = undefined;
14
15
  export let value = initialValue;
@@ -33,27 +34,36 @@ let collection = valueSelect ? [valueSelect] : [];
33
34
  export async function askNewResource() {
34
35
  appConnect?.open?.(resourceType, expressOAuthSetup);
35
36
  }
37
+ let loading = true;
36
38
  async function loadResources(resourceType) {
37
- const nc = (await ResourceService.listResource({
38
- workspace: $workspaceStore,
39
- resourceType
40
- }))
41
- .filter((x) => x.resource_type != 'state' && x.resource_type != 'cache')
42
- .map((x) => ({
43
- value: x.path,
44
- label: x.path,
45
- type: x.resource_type
46
- }));
47
- // TODO check if this is needed
48
- if (!nc.find((x) => x.value == value) && (initialValue || value)) {
49
- nc.push({ value: value ?? initialValue, label: value ?? initialValue, type: '' });
39
+ loading = true;
40
+ try {
41
+ const nc = (await ResourceService.listResource({
42
+ workspace: $workspaceStore,
43
+ resourceType
44
+ }))
45
+ .filter((x) => x.resource_type != 'state' && x.resource_type != 'cache')
46
+ .map((x) => ({
47
+ value: x.path,
48
+ label: x.path,
49
+ type: x.resource_type
50
+ }));
51
+ // TODO check if this is needed
52
+ if (!nc.find((x) => x.value == value) && (initialValue || value)) {
53
+ nc.push({ value: value ?? initialValue, label: value ?? initialValue, type: '' });
54
+ }
55
+ collection = nc;
56
+ if (collection.length == 1 && selectFirst && valueSelect == undefined) {
57
+ value = collection[0].value;
58
+ valueType = collection[0].type;
59
+ valueSelect = collection[0];
60
+ }
50
61
  }
51
- collection = nc;
52
- if (collection.length == 1 && selectFirst && valueSelect == undefined) {
53
- value = collection[0].value;
54
- valueType = collection[0].type;
55
- valueSelect = collection[0];
62
+ catch (e) {
63
+ sendUserToast('Failed to load resource types', true);
64
+ console.error(e);
56
65
  }
66
+ loading = false;
57
67
  }
58
68
  $: $workspaceStore && loadResources(resourceType);
59
69
  $: dispatch('change', value);
@@ -115,46 +125,48 @@ let darkMode = false;
115
125
  ? SELECT_INPUT_DEFAULT_STYLE.containerStylesDark
116
126
  : SELECT_INPUT_DEFAULT_STYLE.containerStyles}
117
127
  />
118
- {:else}
128
+ {:else if !loading}
119
129
  <div class="text-2xs text-tertiary mr-2">0 found</div>
120
130
  {/if}
121
131
 
122
- {#if value && value != ''}
123
- <Button
124
- {disabled}
125
- color="light"
126
- variant="border"
127
- size="xs"
128
- on:click={() => resourceEditor?.initEdit?.(value ?? '')}
129
- startIcon={{ icon: Pen }}
130
- iconOnly
131
- />
132
- {/if}
132
+ {#if !loading}
133
+ {#if value && value != ''}
134
+ <Button
135
+ {disabled}
136
+ color="light"
137
+ variant="border"
138
+ size="xs"
139
+ on:click={() => resourceEditor?.initEdit?.(value ?? '')}
140
+ startIcon={{ icon: Pen }}
141
+ iconOnly
142
+ />
143
+ {/if}
133
144
 
134
- {#if resourceType?.includes(',')}
135
- {#each resourceType.split(',') as rt}
145
+ {#if resourceType?.includes(',')}
146
+ {#each resourceType.split(',') as rt}
147
+ <Button
148
+ {disabled}
149
+ color="light"
150
+ variant="border"
151
+ size="xs"
152
+ on:click={() => appConnect?.open?.(rt)}
153
+ startIcon={{ icon: Plus }}>{rt}</Button
154
+ >
155
+ {/each}
156
+ {:else}
136
157
  <Button
137
158
  {disabled}
138
159
  color="light"
139
160
  variant="border"
140
161
  size="xs"
141
- on:click={() => appConnect?.open?.(rt)}
142
- startIcon={{ icon: Plus }}>{rt}</Button
162
+ on:click={() => appConnect?.open?.(resourceType, expressOAuthSetup)}
163
+ startIcon={{ icon: Plus }}
164
+ iconOnly={collection?.length > 0}
165
+ >{#if collection?.length == 0}
166
+ Add a {resourceType} resource
167
+ {/if}</Button
143
168
  >
144
- {/each}
145
- {:else}
146
- <Button
147
- {disabled}
148
- color="light"
149
- variant="border"
150
- size="xs"
151
- on:click={() => appConnect?.open?.(resourceType, expressOAuthSetup)}
152
- startIcon={{ icon: Plus }}
153
- iconOnly={collection?.length > 0}
154
- >{#if collection?.length == 0}
155
- Add a {resourceType} resource
156
- {/if}</Button
157
- >
169
+ {/if}
158
170
  {/if}
159
171
 
160
172
  <Button
@@ -43,6 +43,7 @@ export let savedScript = undefined;
43
43
  export let searchParams = new URLSearchParams();
44
44
  export let disableHistoryChange = false;
45
45
  export let replaceStateFn = (url) => window.history.replaceState(null, '', url);
46
+ export let customUi = {};
46
47
  let metadataOpen = showMeta ||
47
48
  (initialPath == '' &&
48
49
  searchParams.get('state') == undefined &&
@@ -344,7 +345,7 @@ async function saveDraft(forceSave = false) {
344
345
  loadingDraft = false;
345
346
  }
346
347
  function computeDropdownItems(initialPath) {
347
- let dropdownItems = initialPath != ''
348
+ let dropdownItems = initialPath != '' && customUi?.topBar?.extraDeployOptions != false
348
349
  ? [
349
350
  {
350
351
  label: 'Deploy & Stay here',
@@ -965,32 +966,34 @@ function langToLanguage(lang) {
965
966
  {$scheduleStore.cron ?? ''}
966
967
  </Button>
967
968
  {/if}
968
- <div class="flex justify-start w-full border rounded-md overflow-hidden">
969
- <div>
970
- <button
971
- on:click={async () => {
972
- metadataOpen = true
973
- }}
974
- >
975
- <Badge
976
- color="gray"
977
- class="center-center !bg-surface-secondary !text-tertiary !h-[28px] !w-[70px] rounded-none hover:!bg-surface-hover transition-all"
969
+ {#if customUi?.topBar?.path != false}
970
+ <div class="flex justify-start w-full border rounded-md overflow-hidden">
971
+ <div>
972
+ <button
973
+ on:click={async () => {
974
+ metadataOpen = true
975
+ }}
978
976
  >
979
- <Pen size={12} class="mr-2" /> Path
980
- </Badge>
981
- </button>
977
+ <Badge
978
+ color="gray"
979
+ class="center-center !bg-surface-secondary !text-tertiary !h-[28px] !w-[70px] rounded-none hover:!bg-surface-hover transition-all"
980
+ >
981
+ <Pen size={12} class="mr-2" /> Path
982
+ </Badge>
983
+ </button>
984
+ </div>
985
+ <input
986
+ type="text"
987
+ readonly
988
+ value={script.path}
989
+ size={script.path?.length || 50}
990
+ class="font-mono !text-xs !min-w-[96px] !max-w-[300px] !w-full !h-[28px] !my-0 !py-0 !border-l-0 !rounded-l-none !border-0 !shadow-none"
991
+ on:focus={({ currentTarget }) => {
992
+ currentTarget.select()
993
+ }}
994
+ />
982
995
  </div>
983
- <input
984
- type="text"
985
- readonly
986
- value={script.path}
987
- size={script.path?.length || 50}
988
- class="font-mono !text-xs !min-w-[96px] !max-w-[300px] !w-full !h-[28px] !my-0 !py-0 !border-l-0 !rounded-l-none !border-0 !shadow-none"
989
- on:focus={({ currentTarget }) => {
990
- currentTarget.select()
991
- }}
992
- />
993
- </div>
996
+ {/if}
994
997
  </div>
995
998
 
996
999
  {#if $enterpriseLicense && initialPath != ''}
@@ -1021,17 +1024,19 @@ function langToLanguage(lang) {
1021
1024
  <span class="hidden lg:flex"> Diff </span>
1022
1025
  </div>
1023
1026
  </Button>
1024
- <Button
1025
- color="light"
1026
- variant="border"
1027
- size="xs"
1028
- on:click={() => {
1029
- metadataOpen = true
1030
- }}
1031
- startIcon={{ icon: Settings }}
1032
- >
1033
- <span class="hidden lg:flex"> Settings </span>
1034
- </Button>
1027
+ {#if customUi?.topBar?.settings != false}
1028
+ <Button
1029
+ color="light"
1030
+ variant="border"
1031
+ size="xs"
1032
+ on:click={() => {
1033
+ metadataOpen = true
1034
+ }}
1035
+ startIcon={{ icon: Settings }}
1036
+ >
1037
+ <span class="hidden lg:flex"> Settings </span>
1038
+ </Button>
1039
+ {/if}
1035
1040
  <Button
1036
1041
  loading={loadingDraft}
1037
1042
  size="xs"
@@ -1085,6 +1090,7 @@ function langToLanguage(lang) {
1085
1090
  </div>
1086
1091
 
1087
1092
  <ScriptEditor
1093
+ {customUi}
1088
1094
  collabMode
1089
1095
  edit={initialPath != ''}
1090
1096
  on:format={() => {
@@ -1,6 +1,7 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import { type NewScript, type NewScriptWithDraft } from '../gen';
3
3
  import type DiffDrawer from './DiffDrawer.svelte';
4
+ import type { ScriptBuilderWhitelabelCustomUi } from './custom_ui';
4
5
  declare const __propDef: {
5
6
  props: {
6
7
  script: NewScript;
@@ -15,6 +16,7 @@ declare const __propDef: {
15
16
  searchParams?: URLSearchParams | undefined;
16
17
  disableHistoryChange?: boolean | undefined;
17
18
  replaceStateFn?: ((url: string) => void) | undefined;
19
+ customUi?: ScriptBuilderWhitelabelCustomUi | undefined;
18
20
  setCode?: ((code: string) => void) | undefined;
19
21
  };
20
22
  events: {
@@ -38,6 +38,7 @@ export let edit = true;
38
38
  export let noHistory = false;
39
39
  export let saveToWorkspace = false;
40
40
  export let watchChanges = false;
41
+ export let customUi = {};
41
42
  let websocketAlive = {
42
43
  pyright: false,
43
44
  deno: false,
@@ -204,6 +205,7 @@ function collabUrl() {
204
205
  setCollaborationMode()
205
206
  }
206
207
  }}
208
+ customUi={customUi?.editorBar}
207
209
  collabLive={wsProvider?.shouldConnect}
208
210
  {collabMode}
209
211
  {validCode}
@@ -221,7 +223,7 @@ function collabUrl() {
221
223
  {noHistory}
222
224
  {saveToWorkspace}
223
225
  />
224
- {#if !noSyncFromGithub}
226
+ {#if !noSyncFromGithub && customUi?.editorBar?.useVsCode != false}
225
227
  <div class="py-1">
226
228
  <Button
227
229
  target="_blank"
@@ -3,6 +3,7 @@ import type { Schema, SupportedLanguage } from '../common';
3
3
  import { type Preview } from '../gen';
4
4
  import Editor from './Editor.svelte';
5
5
  import DiffEditor from './DiffEditor.svelte';
6
+ import type { ScriptEditorWhitelabelCustomUi } from './custom_ui';
6
7
  declare const __propDef: {
7
8
  props: {
8
9
  schema?: Schema | any;
@@ -22,6 +23,7 @@ declare const __propDef: {
22
23
  noHistory?: boolean | undefined;
23
24
  saveToWorkspace?: boolean | undefined;
24
25
  watchChanges?: boolean | undefined;
26
+ customUi?: ScriptEditorWhitelabelCustomUi | undefined;
25
27
  inferSchema?: ((code: string, nlang?: SupportedLanguage) => Promise<void>) | undefined;
26
28
  setCollaborationMode?: (() => Promise<void>) | undefined;
27
29
  disableCollaboration?: (() => void) | undefined;
@@ -7,13 +7,16 @@ import { Skeleton } from './common';
7
7
  import FlowModuleScript from './flows/content/FlowModuleScript.svelte';
8
8
  import { createEventDispatcher } from 'svelte';
9
9
  import Button from './common/button/Button.svelte';
10
- import { ExternalLink, Pencil, ArrowRight, X } from 'lucide-svelte';
10
+ import { ExternalLink, Pencil, ArrowRight, X, Diff, Code } from 'lucide-svelte';
11
+ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte';
12
+ import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
11
13
  const dispatch = createEventDispatcher();
12
14
  export let openDetails = false;
13
15
  export let scriptPath;
14
16
  let deploymentMsgUpdateMode = false;
15
17
  let deploymentMsgUpdate = undefined;
16
18
  let selectedVersion = undefined;
19
+ let selectedVersionIndex = undefined;
17
20
  let versions = undefined;
18
21
  let loading = false;
19
22
  async function loadVersions() {
@@ -43,6 +46,8 @@ async function updateDeploymentMsg(scriptHash) {
43
46
  loadVersions();
44
47
  }
45
48
  loadVersions();
49
+ let showDiff = false;
50
+ let previousHash = undefined;
46
51
  </script>
47
52
 
48
53
  <Splitpanes class="!overflow-visible">
@@ -52,17 +57,34 @@ loadVersions();
52
57
  {#if !loading}
53
58
  {#if versions && versions.length > 0}
54
59
  <div class="flex gap-2 flex-col">
55
- {#each versions ?? [] as version}
60
+ {#each versions ?? [] as version, versionIndex}
56
61
  <!-- svelte-ignore a11y-click-events-have-key-events -->
62
+ <!-- svelte-ignore a11y-no-static-element-interactions -->
57
63
  <div
58
64
  class={classNames(
59
- 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
65
+ 'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer ',
60
66
  selectedVersion?.script_hash == version.script_hash
61
- ? 'bg-blue-100 text-blue-600'
62
- : ''
67
+ ? 'bg-surface-selected'
68
+ : '',
69
+ 'hover:bg-surface-hover'
63
70
  )}
64
71
  on:click={() => {
65
72
  selectedVersion = version
73
+ selectedVersionIndex = versionIndex
74
+
75
+ if (showDiff && versions && selectedVersionIndex === versions.length - 1) {
76
+ showDiff = false
77
+ }
78
+
79
+ const availableVersions = versions?.slice(selectedVersionIndex + 1)
80
+
81
+ if (
82
+ previousHash &&
83
+ !availableVersions?.find((v) => v.script_hash === previousHash)
84
+ ) {
85
+ previousHash = availableVersions?.[0]?.script_hash
86
+ }
87
+
66
88
  deploymentMsgUpdate = undefined
67
89
  deploymentMsgUpdateMode = false
68
90
  }}
@@ -99,7 +121,7 @@ loadVersions();
99
121
  <div class="h-full w-full overflow-auto">
100
122
  {#if selectedVersion}
101
123
  {#key selectedVersion}
102
- <div class="flex flex-col">
124
+ <div class="flex flex-col min-h-full">
103
125
  <span class="flex flex-row text-sm p-2 text-tertiary">
104
126
  {#if deploymentMsgUpdateMode}
105
127
  <div class="flex w-full">
@@ -158,7 +180,41 @@ loadVersions();
158
180
  </button>
159
181
  {/if}
160
182
  </span>
161
- <FlowModuleScript showDate path={scriptPath} hash={selectedVersion.script_hash} />
183
+
184
+ {#if selectedVersionIndex !== undefined && versions?.slice(selectedVersionIndex + 1).length}
185
+ <div class="p-2 flex flex-row items-center gap-2 h-8">
186
+ <div class="w-min">
187
+ <ToggleButtonGroup bind:selected={showDiff}>
188
+ <ToggleButton light small value={false} label="Code" icon={Code} />
189
+ <ToggleButton light small value={true} label="Diff" icon={Diff} />
190
+ </ToggleButtonGroup>
191
+ </div>
192
+
193
+ {#if showDiff}
194
+ <div class="text-xs">Versions:</div>
195
+ <select bind:value={previousHash} class="!text-xs !w-40">
196
+ {#each versions?.slice(selectedVersionIndex + 1) ?? [] as version}
197
+ <option
198
+ value={version.script_hash}
199
+ selected={version.script_hash === selectedVersion.script_hash}
200
+ class="!text-xs"
201
+ >
202
+ {version.deployment_msg ?? version.script_hash}
203
+ </option>
204
+ {/each}
205
+ </select>
206
+ {/if}
207
+ </div>
208
+ {:else}
209
+ <div class="p-2 text-xs text-secondary"> No previous version found </div>
210
+ {/if}
211
+ <FlowModuleScript
212
+ showDate
213
+ path={scriptPath}
214
+ hash={selectedVersion.script_hash}
215
+ {previousHash}
216
+ {showDiff}
217
+ />
162
218
  </div>
163
219
  {/key}
164
220
  {:else}
@@ -21,6 +21,11 @@ export let customCss = undefined;
21
21
  export let render;
22
22
  export let editorMode = false;
23
23
  let resolvedConfig = initConfig(components['textcomponent'].initialData.configuration, configuration);
24
+ $: editorMode && onEditorMode();
25
+ function onEditorMode() {
26
+ autosize();
27
+ setTimeout(() => autosize(), 50);
28
+ }
24
29
  const { app, worldStore, mode, componentControl } = getContext('AppViewerContext');
25
30
  let css = initCss($app.css?.textcomponent, customCss);
26
31
  let result = undefined;
@@ -105,6 +110,7 @@ function autosize() {
105
110
  el.style.cssText = 'height:auto; padding:0';
106
111
  el.style.cssText = 'height:' + el.scrollHeight + 'px';
107
112
  }
113
+ // console.log(el, el?.scrollHeight)
108
114
  }, 0);
109
115
  }
110
116
  </script>
@@ -137,7 +143,6 @@ function autosize() {
137
143
  if (!editorMode) {
138
144
  editorMode = true
139
145
  document.getElementById(`text-${id}`)?.focus()
140
- autosize()
141
146
  }
142
147
  }}
143
148
  on:keydown|stopPropagation
@@ -146,7 +151,7 @@ function autosize() {
146
151
  <AlignWrapper {verticalAlignment}>
147
152
  <textarea
148
153
  class={twMerge(
149
- 'whitespace-pre-wrap !outline-none !border-0 !bg-transparent !resize-none !overflow-hidden !ring-0 !p-0',
154
+ 'whitespace-pre-wrap !outline-none !border-0 !bg-transparent !resize-none !ring-0 !p-0',
150
155
  css?.text?.class,
151
156
  'wm-text',
152
157
  classes,
@@ -188,7 +193,7 @@ function autosize() {
188
193
  class="flex flex-wrap gap-2 pb-0.5 w-full {$mode === 'dnd' &&
189
194
  (componentInput?.type == 'template' || componentInput?.type == 'templatev2')
190
195
  ? 'cursor-text'
191
- : ''}"
196
+ : 'overflow-auto'}"
192
197
  >
193
198
  <svelte:element
194
199
  this={component}
@@ -25,10 +25,11 @@ let renderCountLast = -1;
25
25
  let quicksearchLast = undefined;
26
26
  let localColumnDefs = columnDefs;
27
27
  let lastTable = table;
28
- $: {
28
+ $: lastTable != undefined && table && onTableChange();
29
+ function onTableChange() {
29
30
  if (table !== lastTable) {
30
- localColumnDefs = [];
31
31
  lastTable = table;
32
+ localColumnDefs = [];
32
33
  }
33
34
  }
34
35
  $: table && renderCount != undefined && quicksearch != undefined && computeCount();
@@ -95,20 +95,21 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
95
95
  ['AppViewerContext', context],
96
96
  ['ContextPanel', contextPanel]
97
97
  ]);
98
- new AppAggridTableActions({
98
+ const ta = new AppAggridTableActions({
99
99
  target: c.eGui,
100
100
  props: {
101
+ p,
101
102
  id: id,
102
103
  actions,
103
104
  rowIndex,
104
105
  row,
105
106
  render: true,
106
107
  wrapActions: resolvedConfig.wrapActions,
107
- selectRow: () => {
108
+ selectRow: (p) => {
108
109
  toggleRow(p);
109
110
  p.node.setSelected(true);
110
111
  },
111
- onSet: (id, value) => {
112
+ onSet: (id, value, rowIndex) => {
112
113
  if (!inputs[id]) {
113
114
  inputs[id] = { [rowIndex]: value };
114
115
  }
@@ -117,7 +118,7 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
117
118
  }
118
119
  outputs?.inputs.set(inputs, true);
119
120
  },
120
- onRemove: (id) => {
121
+ onRemove: (id, rowIndex) => {
121
122
  if (inputs?.[id] == undefined) {
122
123
  return;
123
124
  }
@@ -132,6 +133,14 @@ const tableActionsFactory = cellRendererFactory((c, p) => {
132
133
  },
133
134
  context: componentContext
134
135
  });
136
+ return {
137
+ destroy: () => {
138
+ ta.$destroy();
139
+ },
140
+ refresh(params) {
141
+ ta.$set({ rowIndex: params.node.rowIndex ?? 0, row: params.data, p: params });
142
+ }
143
+ };
135
144
  });
136
145
  function transformColumnDefs(columnDefs) {
137
146
  if (!columnDefs) {
@@ -148,7 +157,7 @@ function transformColumnDefs(columnDefs) {
148
157
  field: 'delete',
149
158
  headerName: 'Delete',
150
159
  cellRenderer: cellRendererFactory((c, p) => {
151
- new Button({
160
+ let ta = new Button({
152
161
  target: c.eGui,
153
162
  props: {
154
163
  btnClasses: 'w-12',
@@ -161,6 +170,14 @@ function transformColumnDefs(columnDefs) {
161
170
  nonCaptureEvent: true
162
171
  }
163
172
  });
173
+ return {
174
+ destroy: () => {
175
+ ta.$destroy();
176
+ },
177
+ refresh(params) {
178
+ //
179
+ }
180
+ };
164
181
  }),
165
182
  cellRendererParams: {
166
183
  onClick: (e) => {