windmill-components 1.56.2 → 1.57.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 (224) hide show
  1. package/assets/app.css +5 -1
  2. package/components/ArgInput.svelte +6 -6
  3. package/components/CenteredModal.svelte +15 -14
  4. package/components/CenteredModal.svelte.d.ts +1 -0
  5. package/components/DisplayResult.svelte +1 -1
  6. package/components/Dropdown.svelte +4 -3
  7. package/components/Dropdown.svelte.d.ts +2 -0
  8. package/components/Editor.svelte +6 -4
  9. package/components/Editor.svelte.d.ts +2 -0
  10. package/components/EditorBar.svelte +15 -1
  11. package/components/FlowBuilder.svelte +18 -10
  12. package/components/FlowPreviewContent.svelte +1 -1
  13. package/components/GroupEditor.svelte +1 -0
  14. package/components/IconedResourceType.svelte +2 -2
  15. package/components/InputTransformForm.svelte +50 -40
  16. package/components/InputTransformForm.svelte.d.ts +1 -0
  17. package/components/ItemPicker.svelte +63 -57
  18. package/components/ItemPicker.svelte.d.ts +1 -2
  19. package/components/LogViewer.svelte +6 -5
  20. package/components/ModulePreview.svelte +20 -22
  21. package/components/MoveDrawer.svelte +40 -16
  22. package/components/MoveDrawer.svelte.d.ts +2 -2
  23. package/components/PageHeader.svelte +1 -1
  24. package/components/Path.svelte +5 -2
  25. package/components/Popover.svelte +14 -20
  26. package/components/Popover.svelte.d.ts +5 -0
  27. package/components/RadioButton.svelte +5 -3
  28. package/components/RadioButton.svelte.d.ts +2 -0
  29. package/components/ResourceEditor.svelte +2 -1
  30. package/components/ResourcePicker.svelte +1 -0
  31. package/components/RunChart.svelte +0 -1
  32. package/components/SchemaEditor.svelte +3 -0
  33. package/components/SchemaForm.svelte +86 -77
  34. package/components/SchemaForm.svelte.d.ts +4 -0
  35. package/components/ScriptBuilder.svelte +2 -1
  36. package/components/ScriptEditor.svelte +88 -77
  37. package/components/ShareModal.svelte.d.ts +2 -2
  38. package/components/SimpleEditor.svelte +17 -0
  39. package/components/Star.svelte +15 -9
  40. package/components/StringTypeNarrowing.svelte +30 -8
  41. package/components/TemplateEditor.svelte +21 -11
  42. package/components/TestJobLoader.svelte +94 -68
  43. package/components/TestJobLoader.svelte.d.ts +10 -8
  44. package/components/Toggle.svelte +30 -7
  45. package/components/Toggle.svelte.d.ts +4 -0
  46. package/components/Tooltip.svelte +1 -1
  47. package/components/VariableEditor.svelte +4 -3
  48. package/components/VariableEditor.svelte.d.ts +2 -2
  49. package/components/apps/components/DisplayComponent.svelte +1 -1
  50. package/components/apps/components/buttons/AppButton.svelte +16 -10
  51. package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  52. package/components/apps/components/dataDisplay/AppBarChart.svelte +17 -8
  53. package/components/apps/components/dataDisplay/AppHtml.svelte +23 -0
  54. package/components/apps/components/dataDisplay/AppHtml.svelte.d.ts +23 -0
  55. package/components/apps/components/dataDisplay/AppPieChart.svelte +11 -7
  56. package/components/apps/components/dataDisplay/AppScatterChart.svelte +46 -0
  57. package/components/apps/components/dataDisplay/AppScatterChart.svelte.d.ts +21 -0
  58. package/components/apps/components/dataDisplay/AppText.svelte +44 -7
  59. package/components/apps/components/dataDisplay/AppText.svelte.d.ts +1 -0
  60. package/components/apps/components/dataDisplay/AppTimeseries.svelte +57 -0
  61. package/components/apps/components/dataDisplay/AppTimeseries.svelte.d.ts +22 -0
  62. package/components/apps/components/form/AppForm.svelte +35 -18
  63. package/components/apps/components/helpers/AlignWrapper.svelte +2 -1
  64. package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +1 -0
  65. package/components/apps/components/helpers/InputValue.svelte +20 -14
  66. package/components/apps/components/helpers/InputValue.svelte.d.ts +3 -0
  67. package/components/apps/components/helpers/NonRunnableComponent.svelte +7 -6
  68. package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  69. package/components/apps/components/helpers/RefreshButton.svelte +16 -11
  70. package/components/apps/components/helpers/RefreshButton.svelte.d.ts +2 -0
  71. package/components/apps/components/helpers/RunnableComponent.svelte +119 -102
  72. package/components/apps/components/helpers/RunnableWrapper.svelte +6 -1
  73. package/components/apps/components/selectInputs/AppCheckbox.svelte +4 -0
  74. package/components/apps/components/selectInputs/AppSelect.svelte +2 -0
  75. package/components/apps/components/table/AppTable.svelte +64 -35
  76. package/components/apps/components/table/AppTableFooter.svelte +2 -1
  77. package/components/apps/components/table/tableOptions.d.ts +2 -9
  78. package/components/apps/components/table/tableOptions.js +5 -2
  79. package/components/apps/components/textInputs/AppTextInput.svelte +7 -4
  80. package/components/apps/editor/AppEditor.svelte +136 -65
  81. package/components/apps/editor/AppEditor.svelte.d.ts +3 -0
  82. package/components/apps/editor/AppEditorHeader.svelte +349 -51
  83. package/components/apps/editor/AppEditorHeader.svelte.d.ts +2 -4
  84. package/components/apps/editor/AppExportButton.svelte +34 -0
  85. package/components/apps/editor/AppExportButton.svelte.d.ts +17 -0
  86. package/components/apps/editor/AppPreview.svelte +20 -7
  87. package/components/apps/editor/AppPreview.svelte.d.ts +6 -0
  88. package/components/apps/editor/AppPublishButton.svelte +53 -0
  89. package/components/apps/editor/AppPublishButton.svelte.d.ts +18 -0
  90. package/components/apps/editor/ComponentEditor.svelte +39 -8
  91. package/components/apps/editor/ComponentEditor.svelte.d.ts +1 -0
  92. package/components/apps/editor/ComponentHeader.svelte +38 -29
  93. package/components/apps/editor/ComponentHeader.svelte.d.ts +3 -1
  94. package/components/apps/editor/GridEditor.svelte +105 -67
  95. package/components/apps/editor/GridEditor.svelte.d.ts +6 -1
  96. package/components/apps/editor/RecomputeAllComponents.svelte +80 -19
  97. package/components/apps/editor/SettingsPanel.svelte +2 -2
  98. package/components/apps/editor/TablePanel.svelte +1 -0
  99. package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -39
  100. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +2 -1
  101. package/components/apps/editor/componentsPanel/componentStaticValues.js +3 -2
  102. package/components/apps/editor/componentsPanel/data.js +201 -91
  103. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -0
  104. package/components/apps/editor/contextPanel/ContextPanel.svelte +69 -47
  105. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -2
  106. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
  107. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +56 -20
  108. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -0
  109. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +5 -1
  110. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +2 -0
  111. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +72 -23
  112. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  113. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +30 -22
  114. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +78 -77
  115. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +38 -33
  116. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +4 -4
  117. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +1 -11
  118. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +27 -9
  119. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +19 -24
  120. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +1 -0
  121. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +12 -5
  122. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +2 -3
  123. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +59 -33
  124. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +5 -2
  125. package/components/apps/editor/settingsPanel/Recompute.svelte +2 -2
  126. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +21 -3
  127. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +1 -3
  128. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
  129. package/components/apps/editor/settingsPanel/TableActions.svelte +27 -18
  130. package/components/apps/editor/settingsPanel/TableActions.svelte.d.ts +1 -0
  131. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +10 -2
  132. package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +3 -0
  133. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +6 -4
  134. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +24 -0
  135. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +17 -0
  136. package/components/apps/editor/settingsPanel/inputEditor/RowInputEditor.svelte +6 -0
  137. package/components/apps/editor/settingsPanel/inputEditor/RowInputEditor.svelte.d.ts +17 -0
  138. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +11 -21
  139. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
  140. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +1 -2
  141. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +42 -13
  142. package/components/apps/editorUtils.d.ts +1 -0
  143. package/components/apps/editorUtils.js +11 -0
  144. package/components/apps/gridUtils.js +2 -1
  145. package/components/apps/inputType.d.ts +12 -6
  146. package/components/apps/rx.d.ts +3 -3
  147. package/components/apps/rx.js +9 -4
  148. package/components/apps/store.d.ts +2 -0
  149. package/components/apps/store.js +2 -0
  150. package/components/apps/types.d.ts +20 -4
  151. package/components/apps/utils.d.ts +2 -2
  152. package/components/apps/utils.js +25 -9
  153. package/components/common/button/Button.svelte +8 -8
  154. package/components/common/button/Button.svelte.d.ts +2 -0
  155. package/components/common/confirmationModal/ConfirmationModal.svelte +1 -0
  156. package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +4 -1
  157. package/components/common/popup/Popup.svelte +1 -1
  158. package/components/common/table/AppRow.svelte +31 -4
  159. package/components/common/table/AppRow.svelte.d.ts +4 -0
  160. package/components/common/table/FlowRow.svelte +9 -5
  161. package/components/common/table/Row.svelte +10 -8
  162. package/components/common/table/ScriptRow.svelte +15 -13
  163. package/components/common/tabs/Tabs.svelte +1 -1
  164. package/components/common/toggleButton/ToggleButton.svelte +2 -0
  165. package/components/common/toggleButton/ToggleButton.svelte.d.ts +1 -0
  166. package/components/flows/CreateActionsApp.svelte +43 -0
  167. package/components/flows/CreateActionsApp.svelte.d.ts +14 -0
  168. package/components/flows/CreateActionsFlow.svelte +6 -1
  169. package/components/flows/content/DynamicInputHelpBox.svelte +1 -1
  170. package/components/flows/content/FlowConstants.svelte +82 -0
  171. package/components/flows/content/FlowConstants.svelte.d.ts +14 -0
  172. package/components/flows/content/FlowEditorPanel.svelte +3 -0
  173. package/components/flows/content/FlowInputs.svelte +2 -2
  174. package/components/flows/content/FlowModuleComponent.svelte +4 -1
  175. package/components/flows/content/FlowModuleHeader.svelte +41 -89
  176. package/components/flows/content/FlowModuleHeader.svelte.d.ts +2 -2
  177. package/components/flows/content/FlowSettings.svelte +1 -1
  178. package/components/flows/flowStore.d.ts +1 -1
  179. package/components/flows/flowStore.js +8 -8
  180. package/components/flows/header/FlowImportExportMenu.svelte +1 -1
  181. package/components/flows/header/FlowPreviewButtons.svelte +2 -1
  182. package/components/flows/map/FlowConstantsItem.svelte +13 -0
  183. package/components/flows/map/FlowConstantsItem.svelte.d.ts +14 -0
  184. package/components/flows/map/FlowInputsItem.svelte +1 -2
  185. package/components/flows/map/FlowModuleSchemaItem.svelte +34 -25
  186. package/components/flows/map/FlowModuleSchemaMap.svelte +9 -3
  187. package/components/flows/map/FlowSettingsItem.svelte +6 -8
  188. package/components/flows/pickers/PickHubScript.svelte +1 -1
  189. package/components/flows/propPicker/PropPickerWrapper.svelte +42 -31
  190. package/components/home/ItemsList.svelte +6 -4
  191. package/components/icons/ClickhouseIcon.svelte +22 -0
  192. package/components/icons/ClickhouseIcon.svelte.d.ts +17 -0
  193. package/components/icons/FaunadbIcon.svelte +19 -0
  194. package/components/icons/FaunadbIcon.svelte.d.ts +17 -0
  195. package/components/icons/OpenaiIcon.svelte +18 -0
  196. package/components/icons/OpenaiIcon.svelte.d.ts +17 -0
  197. package/components/icons/index.d.ts +7 -1
  198. package/components/icons/index.js +8 -2
  199. package/components/propertyPicker/ObjectViewer.svelte +11 -4
  200. package/components/propertyPicker/PropPicker.svelte +1 -1
  201. package/components/scriptEditor/LogPanel.svelte +26 -22
  202. package/components/sidebar/FavoriteMenu.svelte +23 -19
  203. package/components/sidebar/SidebarContent.svelte +16 -16
  204. package/components/sidebar/WorkspaceMenu.svelte +18 -17
  205. package/components/splitPanes/SplitPanesWrapper.svelte +1 -5
  206. package/components/splitPanes/SplitPanesWrapper.svelte.d.ts +0 -1
  207. package/editorUtils.js +2 -0
  208. package/gen/core/OpenAPI.js +1 -1
  209. package/gen/models/Policy.d.ts +1 -0
  210. package/gen/services/AppService.d.ts +18 -0
  211. package/gen/services/AppService.js +30 -0
  212. package/gen/services/GranularAclService.d.ts +3 -3
  213. package/gen/services/ResourceService.d.ts +15 -0
  214. package/gen/services/ResourceService.js +17 -0
  215. package/infer.js +4 -0
  216. package/logout.d.ts +1 -0
  217. package/logout.js +5 -3
  218. package/package.json +502 -489
  219. package/stores.d.ts +1 -0
  220. package/stores.js +13 -5
  221. package/utils.d.ts +1 -1
  222. package/utils.js +17 -10
  223. package/components/apps/CreateApp.svelte +0 -68
  224. package/components/apps/CreateApp.svelte.d.ts +0 -14
@@ -1,6 +1,6 @@
1
1
  import { FlowService, ScriptService } from '../../gen';
2
2
  import { inferArgs } from '../../infer';
3
- import { BarChart4, Binary, CircleDot, FormInput, Inspect, List, Monitor, PieChart, Play, Table2, Image, TextCursorInput, Type, Lock, Calendar, ToggleLeft } from 'lucide-svelte';
3
+ import { BarChart4, Binary, CircleDot, FormInput, Inspect, List, Monitor, PieChart, Play, Table2, Image, TextCursorInput, Type, Lock, Calendar, ToggleLeft, GripHorizontal, Code2 } from 'lucide-svelte';
4
4
  export async function loadSchema(workspace, path, runType) {
5
5
  if (runType === 'script') {
6
6
  const script = await ScriptService.getScriptByPath({
@@ -25,12 +25,14 @@ export async function loadSchema(workspace, path, runType) {
25
25
  }
26
26
  }
27
27
  export function schemaToInputsSpec(schema) {
28
+ if (schema?.properties == undefined) {
29
+ return {};
30
+ }
28
31
  return Object.keys(schema.properties).reduce((accu, key) => {
29
32
  const property = schema.properties[key];
30
33
  accu[key] = {
31
34
  type: 'static',
32
- defaultValue: property.default,
33
- value: undefined,
35
+ value: property.default,
34
36
  visible: property.format ? false : true,
35
37
  fieldType: property.type,
36
38
  format: property.format
@@ -56,13 +58,25 @@ export const displayData = {
56
58
  icon: FormInput
57
59
  },
58
60
  piechartcomponent: {
59
- name: 'Pie chart',
61
+ name: 'Pie Chart',
60
62
  icon: PieChart
61
63
  },
62
64
  barchartcomponent: {
63
- name: 'Bar chart',
65
+ name: 'Bar/Line Chart',
64
66
  icon: BarChart4
65
67
  },
68
+ htmlcomponent: {
69
+ name: 'Html',
70
+ icon: Code2
71
+ },
72
+ timeseriescomponent: {
73
+ name: 'Timeseries',
74
+ icon: GripHorizontal
75
+ },
76
+ scatterchartcomponent: {
77
+ name: 'Scatter Chart',
78
+ icon: GripHorizontal
79
+ },
66
80
  tablecomponent: {
67
81
  name: 'Table',
68
82
  icon: Table2
@@ -96,11 +110,11 @@ export const displayData = {
96
110
  icon: List
97
111
  },
98
112
  numberinputcomponent: {
99
- name: 'Number input',
113
+ name: 'Number',
100
114
  icon: Binary
101
115
  },
102
116
  passwordinputcomponent: {
103
- name: 'Password input',
117
+ name: 'Password',
104
118
  icon: Lock
105
119
  },
106
120
  dateinputcomponent: {
@@ -147,7 +161,7 @@ export function isScriptByNameDefined(appInput) {
147
161
  return false;
148
162
  }
149
163
  if (appInput.type === 'runnable' && appInput.runnable?.type == 'runnableByName') {
150
- return Boolean(appInput.runnable?.name);
164
+ return appInput.runnable?.name != undefined;
151
165
  }
152
166
  return false;
153
167
  }
@@ -162,6 +176,8 @@ export function isScriptByPathDefined(appInput) {
162
176
  }
163
177
  export function clearResultAppInput(appInput) {
164
178
  appInput.runnable = undefined;
165
- appInput.fields = {};
179
+ if (Object.keys(appInput.fields ?? {}).length > 0) {
180
+ appInput.fields = {};
181
+ }
166
182
  return appInput;
167
183
  }
@@ -3,7 +3,7 @@ import { classNames } from '../../../utils';
3
3
  import Icon from 'svelte-awesome';
4
4
  import { ButtonType } from './model';
5
5
  import { goto } from '$app/navigation';
6
- import { faSpinner } from '@fortawesome/free-solid-svg-icons';
6
+ import { Loader2 } from 'lucide-svelte';
7
7
  export let size = 'md';
8
8
  export let spacingSize = size;
9
9
  export let color = 'blue';
@@ -20,6 +20,7 @@ export let id = '';
20
20
  export let nonCaptureEvent = false;
21
21
  export let buttonType = 'button';
22
22
  export let loading = false;
23
+ export let title = undefined;
23
24
  const dispatch = createEventDispatcher();
24
25
  // Order of classes: border, border modifier, bg, bg modifier, text, text modifier, everything else
25
26
  const colorVariants = {
@@ -50,15 +51,17 @@ const colorVariants = {
50
51
  };
51
52
  $: buttonProps = {
52
53
  id,
53
- class: classNames(colorVariants[color][variant], variant === 'border' ? 'border' : '', ButtonType.FontSizeClasses[size], ButtonType.SpacingClasses[spacingSize], 'focus:ring-2 font-semibold', 'rounded-md', 'justify-center items-center text-center whitespace-nowrap inline-flex', btnClasses, disabled ? 'bg-gray-300' : ''),
54
+ class: classNames(colorVariants[color][variant], variant === 'border' ? 'border' : '', ButtonType.FontSizeClasses[size], ButtonType.SpacingClasses[spacingSize], 'focus:ring-2 font-semibold', 'duration-200 rounded-md', 'justify-center items-center text-center whitespace-nowrap inline-flex', btnClasses, disabled ? 'bg-gray-300' : ''),
54
55
  href,
55
56
  target,
56
57
  tabindex: disabled ? -1 : 0,
57
- type: buttonType
58
+ type: buttonType,
59
+ title
58
60
  };
59
61
  async function onClick(event) {
60
62
  if (!nonCaptureEvent) {
61
63
  event.preventDefault();
64
+ event.stopPropagation();
62
65
  dispatch('click', event);
63
66
  if (href) {
64
67
  if (href.startsWith('http') || target == '_blank') {
@@ -80,6 +83,7 @@ $: endIconClass = classNames(iconOnly ? undefined : isSmall ? 'ml-1' : 'ml-2', e
80
83
  <svelte:element
81
84
  this={href ? 'a' : 'button'}
82
85
  bind:this={element}
86
+ on:pointerdown
83
87
  on:click={onClick}
84
88
  on:focus
85
89
  on:blur
@@ -88,11 +92,7 @@ $: endIconClass = classNames(iconOnly ? undefined : isSmall ? 'ml-1' : 'ml-2', e
88
92
  type="submit"
89
93
  >
90
94
  {#if loading}
91
- <Icon
92
- data={faSpinner}
93
- class={`animate-spin ${startIconClass}`}
94
- scale={ButtonType.IconScale[size]}
95
- />
95
+ <Loader2 class="animate-spin mr-1" size={14} />
96
96
  {:else if startIcon}
97
97
  <Icon data={startIcon.icon} class={startIconClass} scale={ButtonType.IconScale[size]} />
98
98
  {/if}
@@ -19,8 +19,10 @@ declare const __propDef: {
19
19
  nonCaptureEvent?: boolean | undefined;
20
20
  buttonType?: "reset" | "submit" | "button" | undefined;
21
21
  loading?: boolean | undefined;
22
+ title?: string | undefined;
22
23
  };
23
24
  events: {
25
+ pointerdown: PointerEvent;
24
26
  focus: FocusEvent;
25
27
  blur: FocusEvent;
26
28
  click: CustomEvent<any>;
@@ -12,6 +12,7 @@ const dispatch = createEventDispatcher();
12
12
  function onKeyDown(event) {
13
13
  if (open) {
14
14
  event.stopPropagation();
15
+ event.preventDefault();
15
16
  switch (event.key) {
16
17
  case 'Enter':
17
18
  dispatch('confirmed');
@@ -41,6 +41,9 @@ onDestroy(() => {
41
41
  }}
42
42
  >
43
43
  <div class="flex flex-col w-full space-y-4">
44
- <span>Are you sure you want to discard change you have made?</span>
44
+ <span
45
+ >Are you sure you want to discard change you have made? (A draft has been temporarily and
46
+ locally saved)</span
47
+ >
45
48
  </div>
46
49
  </ConfirmationModal>
@@ -125,7 +125,7 @@ onDestroy(removeAllListeners);
125
125
  aria-expanded={$stateMachine.currentState !== 'closed'}
126
126
  >
127
127
  {#if $stateMachine.currentState !== 'closed'}
128
- <div transition:slide={{ duration: 200 }} class={outerClasses}>
128
+ <div transition:slide|local={{ duration: 200 }} class={outerClasses}>
129
129
  <div class={innerClasses}>
130
130
  <slot />
131
131
  </div>
@@ -2,13 +2,16 @@
2
2
  import SharedBadge from '../../SharedBadge.svelte';
3
3
  import { AppService } from '../../../gen';
4
4
  import { userStore, workspaceStore } from '../../../stores';
5
- import { faEdit, faEye, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
5
+ import { faEdit, faEye, faFileExport, faPen, faShare, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
6
+ import { MoreVertical } from 'lucide-svelte';
6
7
  import { createEventDispatcher } from 'svelte';
7
8
  import Button from '../button/Button.svelte';
8
9
  import Row from './Row.svelte';
9
10
  export let app;
10
11
  export let marked;
11
12
  export let starred;
13
+ export let shareModal;
14
+ export let moveDrawer;
12
15
  let { summary, path, extra_perms, canWrite, workspace_id } = app;
13
16
  const dispatch = createEventDispatcher();
14
17
  </script>
@@ -36,13 +39,14 @@ const dispatch = createEventDispatcher();
36
39
  size="xs"
37
40
  variant="border"
38
41
  startIcon={{ icon: faEdit }}
39
- href="/apps/edit/{path}"
42
+ href="/apps/edit/{path}?nodraft=true"
40
43
  >
41
44
  Edit
42
45
  </Button>
43
46
  </div>
44
47
  {/if}
45
48
  {/if}
49
+
46
50
  <Button
47
51
  href="/apps/get/{path}"
48
52
  color="dark"
@@ -55,12 +59,33 @@ const dispatch = createEventDispatcher();
55
59
  </span>
56
60
  <Dropdown
57
61
  placement="bottom-end"
62
+ btnClasses="!text-gray-700 !bg-transparent hover:!bg-gray-400/20 !p-[6px]"
58
63
  dropdownItems={[
59
64
  {
60
- displayName: 'View app',
65
+ displayName: 'View',
61
66
  icon: faEye,
62
67
  href: `/apps/get/${path}`
63
68
  },
69
+ {
70
+ displayName: 'Edit',
71
+ icon: faPen,
72
+ href: `/apps/edit/${path}?nodraft=true`
73
+ },
74
+ {
75
+ displayName: 'Move/Rename',
76
+ icon: faFileExport,
77
+ action: () => {
78
+ moveDrawer.openDrawer(path, summary, 'app')
79
+ },
80
+ disabled: !canWrite
81
+ },
82
+ {
83
+ displayName: canWrite ? 'Share' : 'See Permissions',
84
+ icon: faShare,
85
+ action: () => {
86
+ shareModal.openDrawer && shareModal.openDrawer(path, 'app')
87
+ }
88
+ },
64
89
  {
65
90
  displayName: 'Delete',
66
91
  icon: faTrashAlt,
@@ -72,6 +97,8 @@ const dispatch = createEventDispatcher();
72
97
  disabled: !canWrite
73
98
  }
74
99
  ]}
75
- />
100
+ >
101
+ <MoreVertical size={20} />
102
+ </Dropdown>
76
103
  </svelte:fragment>
77
104
  </Row>
@@ -1,4 +1,6 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
+ import type MoveDrawer from '../../MoveDrawer.svelte';
3
+ import type ShareModal from '../../ShareModal.svelte';
2
4
  import { type ListableApp } from '../../../gen';
3
5
  declare const __propDef: {
4
6
  props: {
@@ -7,6 +9,8 @@ declare const __propDef: {
7
9
  };
8
10
  marked: string | undefined;
9
11
  starred: boolean;
12
+ shareModal: ShareModal;
13
+ moveDrawer: MoveDrawer;
10
14
  };
11
15
  events: {
12
16
  change: CustomEvent<any>;
@@ -6,6 +6,7 @@ import { FlowService } from '../../../gen';
6
6
  import { userStore, workspaceStore } from '../../../stores';
7
7
  import { sendUserToast } from '../../../utils';
8
8
  import { faArchive, faCalendarAlt, faCodeFork, faEdit, faEye, faFileExport, faList, faPlay, faShare } from '@fortawesome/free-solid-svg-icons';
9
+ import { MoreVertical } from 'lucide-svelte';
9
10
  import { createEventDispatcher } from 'svelte';
10
11
  import Button from '../button/Button.svelte';
11
12
  import Row from './Row.svelte';
@@ -53,7 +54,7 @@ let scheduleEditor;
53
54
  size="xs"
54
55
  variant="border"
55
56
  startIcon={{ icon: faEdit }}
56
- href="/flows/edit/{path}"
57
+ href="/flows/edit/{path}?nodraft=true"
57
58
  >
58
59
  Edit
59
60
  </Button>
@@ -96,6 +97,7 @@ let scheduleEditor;
96
97
 
97
98
  <Dropdown
98
99
  placement="bottom-end"
100
+ btnClasses="!text-gray-700 !bg-transparent hover:!bg-gray-400/20 !p-[6px]"
99
101
  dropdownItems={[
100
102
  {
101
103
  displayName: 'View flow',
@@ -105,7 +107,7 @@ let scheduleEditor;
105
107
  {
106
108
  displayName: 'Edit',
107
109
  icon: faEdit,
108
- href: `/flows/edit/${path}`,
110
+ href: `/flows/edit/${path}?nodraft=true`,
109
111
  disabled: !canWrite
110
112
  },
111
113
  {
@@ -119,10 +121,10 @@ let scheduleEditor;
119
121
  href: `/runs/${path}`
120
122
  },
121
123
  {
122
- displayName: 'Move',
124
+ displayName: 'Move/Rename',
123
125
  icon: faFileExport,
124
126
  action: () => {
125
- moveDrawer.openDrawer(path, 'flow')
127
+ moveDrawer.openDrawer(path, summary, 'flow')
126
128
  },
127
129
  disabled: !canWrite
128
130
  },
@@ -150,6 +152,8 @@ let scheduleEditor;
150
152
  disabled: !canWrite
151
153
  }
152
154
  ]}
153
- />
155
+ >
156
+ <MoreVertical size={20} />
157
+ </Dropdown>
154
158
  </svelte:fragment>
155
159
  </Row>
@@ -1,5 +1,4 @@
1
- <script>import { goto } from '$app/navigation';
2
- import Star from '../../Star.svelte';
1
+ <script>import Star from '../../Star.svelte';
3
2
  import { createEventDispatcher } from 'svelte';
4
3
  import RowIcon from './RowIcon.svelte';
5
4
  export let marked;
@@ -18,10 +17,11 @@ const color = {
18
17
  }[kind];
19
18
  </script>
20
19
 
21
- <div class="hover:bg-gray-50 w-full inline-flex items-center p-4 gap-4 {color} rounded-md">
20
+ <div class="hover:bg-gray-50 w-full inline-flex items-center p-4 gap-4 first-of-type:!border-t-0
21
+ first-of-type:rounded-t-md last-of-type:rounded-b-md {color}">
22
22
  <RowIcon {href} {kind} />
23
23
 
24
- <a {href} class="w-full min-w-0 grow hover:underline decoration-gray-400">
24
+ <a {href} class="min-w-0 grow hover:underline decoration-gray-400">
25
25
  <div class="text-gray-900 flex-wrap text-left text-md font-semibold mb-1 truncate ">
26
26
  {#if marked}
27
27
  {@html marked}
@@ -33,15 +33,17 @@ const color = {
33
33
  {path}
34
34
  </div>
35
35
  </a>
36
- <div class="w-96 hidden lg:flex flex-row max-w-xs gap-1 items-start flex-wrap">
37
- <slot name="badges" />
38
- </div>
36
+ {#if $$slots.badges}
37
+ <div class="w-32 hidden lg:flex flex-row gap-1 items-start flex-wrap">
38
+ <slot name="badges" />
39
+ </div>
40
+ {/if}
39
41
 
40
42
  <div class="flex gap-1 items-center justify-end">
41
43
  <slot name="actions" />
42
44
  </div>
43
45
  {#if canFavorite}
44
- <div class="text-left text-sm font-semibold text-gray-900">
46
+ <div class="center-center h-full text-sm font-semibold text-gray-900">
45
47
  <Star
46
48
  {kind}
47
49
  {path}
@@ -6,6 +6,7 @@ import { ScriptService } from '../../../gen';
6
6
  import { userStore, workspaceStore } from '../../../stores';
7
7
  import { capitalize, sendUserToast } from '../../../utils';
8
8
  import { faArchive, faCalendarAlt, faCodeFork, faEdit, faEye, faFileExport, faList, faPlay, faShare } from '@fortawesome/free-solid-svg-icons';
9
+ import { MoreVertical } from 'lucide-svelte';
9
10
  import { createEventDispatcher } from 'svelte';
10
11
  import Badge from '../badge/Badge.svelte';
11
12
  import Button from '../button/Button.svelte';
@@ -39,17 +40,15 @@ let scheduleEditor;
39
40
  on:change
40
41
  >
41
42
  <svelte:fragment slot="badges">
42
- <span class="hidden md:block">
43
- <SharedBadge {canWrite} extraPerms={extra_perms} />
44
- {#if lock_error_logs}
45
- <Badge color="red" baseClass="border border-red-200">Deployment failed</Badge>
46
- {/if}
47
- {#if kind !== 'script'}
48
- <Badge color="gray" baseClass="border">{capitalize(kind)}</Badge>
49
- {/if}
43
+ <SharedBadge {canWrite} extraPerms={extra_perms} />
44
+ {#if lock_error_logs}
45
+ <Badge color="red" baseClass="border border-red-200">Deployment failed</Badge>
46
+ {/if}
47
+ {#if kind !== 'script'}
48
+ <Badge color="gray" baseClass="border">{capitalize(kind)}</Badge>
49
+ {/if}
50
50
 
51
- <LanguageBadge {language} />
52
- </span>
51
+ <LanguageBadge {language} />
53
52
  </svelte:fragment>
54
53
 
55
54
  <svelte:fragment slot="actions">
@@ -104,6 +103,7 @@ let scheduleEditor;
104
103
  </span>
105
104
  <Dropdown
106
105
  placement="bottom-end"
106
+ btnClasses="!text-gray-700 !bg-transparent hover:!bg-gray-400/20 !p-[6px]"
107
107
  dropdownItems={[
108
108
  {
109
109
  displayName: 'View script',
@@ -129,10 +129,10 @@ let scheduleEditor;
129
129
  href: `/scripts/add?template=${path}`
130
130
  },
131
131
  {
132
- displayName: 'Move',
132
+ displayName: 'Move/Rename',
133
133
  icon: faFileExport,
134
134
  action: () => {
135
- moveDrawer.openDrawer(path, 'script')
135
+ moveDrawer.openDrawer(path, summary, 'script')
136
136
  },
137
137
  disabled: !canWrite
138
138
  },
@@ -165,6 +165,8 @@ let scheduleEditor;
165
165
  disabled: !canWrite
166
166
  }
167
167
  ]}
168
- />
168
+ >
169
+ <MoreVertical size={20} />
170
+ </Dropdown>
169
171
  </svelte:fragment>
170
172
  </Row>
@@ -24,7 +24,7 @@ function updateSelected() {
24
24
 
25
25
  <div
26
26
  class={classNames(
27
- 'border-b border-gray-200 flex flex-row whitespace-nowrap overflow-y-auto scrollbar-hidden',
27
+ 'border-b border-gray-200 flex flex-row whitespace-nowrap scrollbar-hidden',
28
28
  $$props.class
29
29
  )}
30
30
  >
@@ -4,11 +4,13 @@ import Button from '../button/Button.svelte';
4
4
  export let value;
5
5
  export let position;
6
6
  export let light = false;
7
+ export let title = undefined;
7
8
  const { select, selected } = getContext('ToggleButtonGroup');
8
9
  </script>
9
10
 
10
11
  <Button
11
12
  {...$$props}
13
+ {title}
12
14
  on:click={() => select(value)}
13
15
  btnClasses={classNames(
14
16
  'border-gray-200 focus:ring-0 w-full',
@@ -5,6 +5,7 @@ declare const __propDef: {
5
5
  value: any;
6
6
  position: 'left' | 'center' | 'right';
7
7
  light?: boolean | undefined;
8
+ title?: string | undefined;
8
9
  };
9
10
  events: {
10
11
  [evt: string]: CustomEvent<any>;
@@ -0,0 +1,43 @@
1
+ <script>import { goto } from '$app/navigation';
2
+ import { faBarsStaggered, faPlus } from '@fortawesome/free-solid-svg-icons';
3
+ import { Button, ButtonPopup, ButtonPopupItem } from '../common';
4
+ import Drawer from '../common/drawer/Drawer.svelte';
5
+ import DrawerContent from '../common/drawer/DrawerContent.svelte';
6
+ import SimpleEditor from '../SimpleEditor.svelte';
7
+ import { importStore } from '../apps/store';
8
+ import { LayoutDashboard } from 'lucide-svelte';
9
+ let drawer = undefined;
10
+ let pendingJson;
11
+ async function importJson() {
12
+ $importStore = JSON.parse(pendingJson);
13
+ await goto('/apps/add?nodraft=true');
14
+ drawer?.closeDrawer?.();
15
+ }
16
+ </script>
17
+
18
+ <!-- Buttons -->
19
+ <div class="flex flex-row gap-2">
20
+ <ButtonPopup
21
+ size="sm"
22
+ spacingSize="xl"
23
+ startIcon={{ icon: faPlus }}
24
+ href="/apps/add?nodraft=true"
25
+ >
26
+ <svelte:fragment slot="main"
27
+ >New App (alpha) <LayoutDashboard class="ml-1.5" size={18} />
28
+ </svelte:fragment>
29
+ <ButtonPopupItem on:click={() => drawer?.toggleDrawer?.()}>
30
+ Import from raw JSON
31
+ </ButtonPopupItem>
32
+ </ButtonPopup>
33
+ </div>
34
+
35
+ <!-- Raw JSON -->
36
+ <Drawer bind:this={drawer} size="800px">
37
+ <DrawerContent title="Import app from JSON" on:close={() => drawer?.toggleDrawer?.()}>
38
+ <SimpleEditor bind:code={pendingJson} lang="json" class="h-full" fixedOverflowWidgets={false} />
39
+ <svelte:fragment slot="actions">
40
+ <Button size="sm" on:click={importJson}>Import</Button>
41
+ </svelte:fragment>
42
+ </DrawerContent>
43
+ </Drawer>
@@ -0,0 +1,14 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type CreateActionsAppProps = typeof __propDef.props;
10
+ export type CreateActionsAppEvents = typeof __propDef.events;
11
+ export type CreateActionsAppSlots = typeof __propDef.slots;
12
+ export default class CreateActionsApp extends SvelteComponentTyped<CreateActionsAppProps, CreateActionsAppEvents, CreateActionsAppSlots> {
13
+ }
14
+ export {};
@@ -18,7 +18,12 @@ async function importJson() {
18
18
 
19
19
  <!-- Buttons -->
20
20
  <div class="flex flex-row gap-2">
21
- <ButtonPopup size="sm" spacingSize="xl" startIcon={{ icon: faPlus }} href="/flows/add">
21
+ <ButtonPopup
22
+ size="sm"
23
+ spacingSize="xl"
24
+ startIcon={{ icon: faPlus }}
25
+ href="/flows/add?nodraft=true"
26
+ >
22
27
  <svelte:fragment slot="main"
23
28
  >New Flow <Icon data={faBarsStaggered} scale={0.8} class="ml-1.5" />
24
29
  </svelte:fragment>
@@ -18,7 +18,7 @@ $: opened = false;
18
18
 
19
19
  {#if opened}
20
20
  <div
21
- transition:slide
21
+ transition:slide|local
22
22
  class="bg-gray-100 border-l-4 border-gray-600 text-gray-700 p-4 m-4"
23
23
  role="alert"
24
24
  id="dynamic-input-help-box"
@@ -0,0 +1,82 @@
1
+ <script>import { dfs, flowStore } from '../flowStore';
2
+ import FlowCard from '../common/FlowCard.svelte';
3
+ import { Alert, Badge } from '../../common';
4
+ import SchemaForm from '../../SchemaForm.svelte';
5
+ import { flowStateStore } from '../flowState';
6
+ import { setContext } from 'svelte';
7
+ import { writable } from 'svelte/store';
8
+ import { slide } from 'svelte/transition';
9
+ import Toggle from '../../Toggle.svelte';
10
+ let hideOptional = false;
11
+ $: steps = dfs($flowStore.value.modules, (x) => x)
12
+ .map((x) => [x.value, x])
13
+ .filter((x) => x[0].type == 'script' || x[0].type == 'rawscript')
14
+ .map(([v, m]) => [
15
+ v.input_transforms,
16
+ Object.entries(v.input_transforms)
17
+ .filter((x) => {
18
+ const shouldDisplay = hideOptional
19
+ ? $flowStateStore[m.id]?.schema.required?.includes(x[0])
20
+ : true;
21
+ return x[1].type == 'static' && shouldDisplay;
22
+ })
23
+ .map((x) => x[0]),
24
+ m
25
+ ])
26
+ .filter(([i, f, m]) => f.length > 0);
27
+ setContext('PropPickerWrapper', {
28
+ focusProp: () => { },
29
+ propPickerConfig: writable(undefined),
30
+ clearFocus: () => { }
31
+ });
32
+ </script>
33
+
34
+ <div class="min-h-full">
35
+ <FlowCard title="All Static Inputs">
36
+ <Toggle
37
+ slot="header"
38
+ bind:checked={hideOptional}
39
+ options={{left: 'Hide optional inputs'}}
40
+ />
41
+ <div class="min-h-full flex-1">
42
+ <Alert type="info" title="Static Inputs" class="m-4"
43
+ >This page centralizes the static inputs of every steps. It is akin to a file containing all
44
+ constants. Modifying a value here modify it in the step input directly. It is especially
45
+ useful when forking a flow to get an overview of all the variables to parametrize that are
46
+ not exposed directly as flow inputs.</Alert
47
+ >
48
+ {#if steps.length == 0}
49
+ <div class="mt-2" />
50
+ {#if $flowStore.value.modules.length == 0}
51
+ <Alert type="warning" title="No steps" class="m-4">
52
+ This flow has no steps. Add a step to see its static inputs.
53
+ </Alert>
54
+ {:else}
55
+ <Alert type="warning" title="No static inputs" class="m-4">
56
+ This flow has no steps with static inputs. Add a step with static inputs to see them
57
+ here.
58
+ </Alert>
59
+ {/if}
60
+ {/if}
61
+ {#each steps as [args, filter, m] (m.id)}
62
+ {#if filter.length > 0}
63
+ <div transition:slide class="relative h-full border-t p-4">
64
+ <h2 class="sticky w-full top-0 z-10 inline-flex items-center bg-white py-2">
65
+ <span class="mr-4">{m.summary || m.value['path'] || 'Inline script'}</span>
66
+ <Badge large color="indigo">{m.id}</Badge>
67
+ </h2>
68
+
69
+ <SchemaForm
70
+ noDynamicToggle
71
+ inputTransform
72
+ {filter}
73
+ class="mt-2"
74
+ schema={$flowStateStore[m.id]?.schema ?? {}}
75
+ bind:args
76
+ />
77
+ </div>
78
+ {/if}
79
+ {/each}
80
+ </div>
81
+ </FlowCard>
82
+ </div>
@@ -0,0 +1,14 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ };
9
+ export type FlowConstantsProps = typeof __propDef.props;
10
+ export type FlowConstantsEvents = typeof __propDef.events;
11
+ export type FlowConstantsSlots = typeof __propDef.slots;
12
+ export default class FlowConstants extends SvelteComponentTyped<FlowConstantsProps, FlowConstantsEvents, FlowConstantsSlots> {
13
+ }
14
+ export {};