windmill-components 1.56.5 → 1.57.2

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 (188) hide show
  1. package/assets/app.css +5 -1
  2. package/components/ArgInput.svelte +6 -6
  3. package/components/DisplayResult.svelte +1 -1
  4. package/components/Dropdown.svelte +1 -1
  5. package/components/Dropdown.svelte.d.ts +1 -0
  6. package/components/Editor.svelte +5 -3
  7. package/components/Editor.svelte.d.ts +2 -0
  8. package/components/EditorBar.svelte +15 -1
  9. package/components/FlowBuilder.svelte +18 -10
  10. package/components/GroupEditor.svelte +1 -0
  11. package/components/IconedResourceType.svelte +2 -2
  12. package/components/InputTransformForm.svelte +7 -5
  13. package/components/ItemPicker.svelte +63 -57
  14. package/components/ItemPicker.svelte.d.ts +1 -2
  15. package/components/LogViewer.svelte +7 -9
  16. package/components/ModulePreview.svelte +4 -13
  17. package/components/MoveDrawer.svelte +40 -16
  18. package/components/MoveDrawer.svelte.d.ts +2 -2
  19. package/components/PageHeader.svelte +1 -1
  20. package/components/Path.svelte +5 -2
  21. package/components/Popover.svelte +6 -4
  22. package/components/Popover.svelte.d.ts +2 -0
  23. package/components/ResourcePicker.svelte +1 -0
  24. package/components/RunChart.svelte +0 -1
  25. package/components/SchemaForm.svelte +2 -1
  26. package/components/SchemaForm.svelte.d.ts +1 -0
  27. package/components/ScriptBuilder.svelte +2 -1
  28. package/components/ScriptEditor.svelte +86 -80
  29. package/components/ShareModal.svelte.d.ts +2 -2
  30. package/components/SimpleEditor.svelte +17 -0
  31. package/components/StringTypeNarrowing.svelte +30 -8
  32. package/components/TemplateEditor.svelte +18 -2
  33. package/components/TestJobLoader.svelte +83 -74
  34. package/components/Tooltip.svelte +1 -1
  35. package/components/VariableEditor.svelte +4 -3
  36. package/components/VariableEditor.svelte.d.ts +2 -2
  37. package/components/apps/components/buttons/AppButton.svelte +3 -7
  38. package/components/apps/components/dataDisplay/AppBarChart.svelte +10 -6
  39. package/components/apps/components/dataDisplay/AppHtml.svelte +23 -0
  40. package/components/apps/components/dataDisplay/AppHtml.svelte.d.ts +23 -0
  41. package/components/apps/components/dataDisplay/AppPieChart.svelte +10 -6
  42. package/components/apps/components/dataDisplay/AppScatterChart.svelte +46 -0
  43. package/components/apps/components/dataDisplay/AppScatterChart.svelte.d.ts +21 -0
  44. package/components/apps/components/dataDisplay/AppText.svelte +48 -7
  45. package/components/apps/components/dataDisplay/AppText.svelte.d.ts +1 -0
  46. package/components/apps/components/dataDisplay/AppTimeseries.svelte +57 -0
  47. package/components/apps/components/dataDisplay/AppTimeseries.svelte.d.ts +22 -0
  48. package/components/apps/components/form/AppForm.svelte +33 -28
  49. package/components/apps/components/helpers/InputValue.svelte +10 -16
  50. package/components/apps/components/helpers/InputValue.svelte.d.ts +2 -0
  51. package/components/apps/components/helpers/NonRunnableComponent.svelte +4 -6
  52. package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
  53. package/components/apps/components/helpers/RefreshButton.svelte +1 -1
  54. package/components/apps/components/helpers/RunnableComponent.svelte +120 -119
  55. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -0
  56. package/components/apps/components/helpers/RunnableWrapper.svelte +11 -1
  57. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
  58. package/components/apps/components/selectInputs/AppSelect.svelte +2 -0
  59. package/components/apps/components/table/AppTable.svelte +22 -17
  60. package/components/apps/components/table/AppTableFooter.svelte +2 -1
  61. package/components/apps/components/table/tableOptions.d.ts +2 -9
  62. package/components/apps/components/table/tableOptions.js +5 -2
  63. package/components/apps/components/textInputs/AppTextInput.svelte +0 -1
  64. package/components/apps/editor/AppEditor.svelte +133 -102
  65. package/components/apps/editor/AppEditor.svelte.d.ts +1 -0
  66. package/components/apps/editor/AppEditorHeader.svelte +355 -50
  67. package/components/apps/editor/AppEditorHeader.svelte.d.ts +2 -4
  68. package/components/apps/editor/AppExportButton.svelte +34 -0
  69. package/components/apps/editor/AppExportButton.svelte.d.ts +17 -0
  70. package/components/apps/editor/AppPreview.svelte +19 -6
  71. package/components/apps/editor/AppPreview.svelte.d.ts +5 -0
  72. package/components/apps/editor/AppPublishButton.svelte +46 -0
  73. package/components/apps/editor/AppPublishButton.svelte.d.ts +19 -0
  74. package/components/apps/editor/ComponentEditor.svelte +35 -3
  75. package/components/apps/editor/ComponentHeader.svelte +23 -16
  76. package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -0
  77. package/components/apps/editor/GridEditor.svelte +71 -48
  78. package/components/apps/editor/RecomputeAllComponents.svelte +80 -13
  79. package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -28
  80. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +2 -1
  81. package/components/apps/editor/componentsPanel/componentStaticValues.js +3 -2
  82. package/components/apps/editor/componentsPanel/data.js +191 -77
  83. package/components/apps/editor/contextPanel/ContextPanel.svelte +60 -41
  84. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -2
  85. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
  86. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +47 -10
  87. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -0
  88. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +11 -4
  89. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  90. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +29 -21
  91. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +10 -6
  92. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +38 -33
  93. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -2
  94. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +1 -10
  95. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +27 -9
  96. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +8 -6
  97. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +6 -16
  98. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +0 -1
  99. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +46 -21
  100. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +3 -1
  101. package/components/apps/editor/settingsPanel/PickInlineScript.svelte +0 -1
  102. package/components/apps/editor/settingsPanel/Recompute.svelte +1 -1
  103. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +8 -7
  104. package/components/apps/editor/settingsPanel/TableActions.svelte +10 -10
  105. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +1 -0
  106. package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +1 -0
  107. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +55 -49
  108. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte.d.ts +2 -2
  109. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +24 -0
  110. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +17 -0
  111. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +8 -11
  112. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +35 -7
  113. package/components/apps/editorUtils.d.ts +1 -0
  114. package/components/apps/editorUtils.js +11 -0
  115. package/components/apps/gridUtils.js +1 -1
  116. package/components/apps/inputType.d.ts +5 -4
  117. package/components/apps/rx.d.ts +1 -1
  118. package/components/apps/rx.js +6 -2
  119. package/components/apps/store.d.ts +2 -0
  120. package/components/apps/store.js +2 -0
  121. package/components/apps/types.d.ts +19 -3
  122. package/components/apps/utils.d.ts +2 -2
  123. package/components/apps/utils.js +22 -8
  124. package/components/common/button/Button.svelte +6 -8
  125. package/components/common/button/Button.svelte.d.ts +1 -0
  126. package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +4 -1
  127. package/components/common/popup/Popup.svelte +1 -1
  128. package/components/common/table/AppRow.svelte +26 -3
  129. package/components/common/table/AppRow.svelte.d.ts +4 -0
  130. package/components/common/table/FlowRow.svelte +4 -4
  131. package/components/common/table/RowIcon.svelte +1 -1
  132. package/components/common/table/ScriptRow.svelte +2 -2
  133. package/components/common/tabs/Tabs.svelte +1 -1
  134. package/components/common/toggleButton/ToggleButton.svelte +2 -0
  135. package/components/common/toggleButton/ToggleButton.svelte.d.ts +1 -0
  136. package/components/common/toggleButton/ToggleButtonGroup.svelte +3 -3
  137. package/components/flows/CreateActionsApp.svelte +43 -0
  138. package/components/flows/CreateActionsApp.svelte.d.ts +14 -0
  139. package/components/flows/CreateActionsFlow.svelte +6 -1
  140. package/components/flows/content/DynamicInputHelpBox.svelte +1 -1
  141. package/components/flows/content/FlowConstants.svelte +23 -9
  142. package/components/flows/content/FlowInputs.svelte +2 -2
  143. package/components/flows/content/FlowModuleHeader.svelte +6 -5
  144. package/components/flows/content/FlowSettings.svelte +1 -1
  145. package/components/flows/header/FlowImportExportMenu.svelte +1 -1
  146. package/components/flows/map/FlowConstantsItem.svelte +5 -7
  147. package/components/flows/map/FlowModuleSchemaMap.svelte +1 -5
  148. package/components/flows/map/FlowSettingsItem.svelte +5 -7
  149. package/components/flows/pickers/PickHubApp.svelte +73 -0
  150. package/components/flows/pickers/PickHubApp.svelte.d.ts +20 -0
  151. package/components/flows/pickers/PickHubFlow.svelte +3 -1
  152. package/components/flows/pickers/PickHubScript.svelte +1 -0
  153. package/components/flows/propPicker/PropPickerWrapper.svelte +42 -31
  154. package/components/home/ItemsList.svelte +6 -4
  155. package/components/icons/ClickhouseIcon.svelte +22 -0
  156. package/components/icons/ClickhouseIcon.svelte.d.ts +17 -0
  157. package/components/icons/FaunadbIcon.svelte +19 -0
  158. package/components/icons/FaunadbIcon.svelte.d.ts +17 -0
  159. package/components/icons/OpenaiIcon.svelte +18 -0
  160. package/components/icons/OpenaiIcon.svelte.d.ts +17 -0
  161. package/components/icons/index.d.ts +7 -1
  162. package/components/icons/index.js +8 -2
  163. package/components/propertyPicker/ObjectViewer.svelte +11 -4
  164. package/components/propertyPicker/PropPicker.svelte +1 -1
  165. package/components/scriptEditor/LogPanel.svelte +26 -22
  166. package/components/sidebar/WorkspaceMenu.svelte +2 -3
  167. package/components/splitPanes/SplitPanesWrapper.svelte +1 -5
  168. package/components/splitPanes/SplitPanesWrapper.svelte.d.ts +0 -1
  169. package/editorUtils.js +2 -0
  170. package/gen/core/OpenAPI.js +1 -1
  171. package/gen/models/Policy.d.ts +1 -0
  172. package/gen/services/AppService.d.ts +50 -0
  173. package/gen/services/AppService.js +55 -0
  174. package/gen/services/GranularAclService.d.ts +3 -3
  175. package/gen/services/ResourceService.d.ts +15 -0
  176. package/gen/services/ResourceService.js +17 -0
  177. package/infer.js +4 -0
  178. package/package.json +18 -9
  179. package/stores.d.ts +1 -0
  180. package/stores.js +13 -5
  181. package/utils.d.ts +9 -1
  182. package/utils.js +28 -11
  183. package/components/apps/CreateApp.svelte +0 -68
  184. package/components/apps/CreateApp.svelte.d.ts +0 -14
  185. package/components/apps/editor/settingsPanel/SectionPanel.svelte +0 -70
  186. package/components/apps/editor/settingsPanel/SectionPanel.svelte.d.ts +0 -19
  187. package/components/apps/editor/settingsPanel/UserInputEditor.svelte +0 -2
  188. package/components/apps/editor/settingsPanel/UserInputEditor.svelte.d.ts +0 -14
@@ -0,0 +1,2 @@
1
+ import type { App } from './types';
2
+ export declare const importStore: import("svelte/store").Writable<App | undefined>;
@@ -0,0 +1,2 @@
1
+ import { writable } from "svelte/store";
2
+ export const importStore = writable(undefined);
@@ -12,6 +12,8 @@ export type TextInputComponent = BaseComponent<'textinputcomponent'>;
12
12
  export type PasswordInputComponent = BaseComponent<'passwordinputcomponent'>;
13
13
  export type DateInputComponent = BaseComponent<'dateinputcomponent'>;
14
14
  export type NumberInputComponent = BaseComponent<'numberinputcomponent'>;
15
+ export type HtmlComponent = BaseComponent<'htmlcomponent'>;
16
+ export type TimeseriesComponent = BaseComponent<'timeseriescomponent'>;
15
17
  export type ButtonComponent = BaseComponent<'buttoncomponent'> & {
16
18
  recomputeIds: string[] | undefined;
17
19
  };
@@ -21,6 +23,7 @@ export type FormComponent = BaseComponent<'formcomponent'> & {
21
23
  export type RunFormComponent = BaseComponent<'runformcomponent'>;
22
24
  export type BarChartComponent = BaseComponent<'barchartcomponent'>;
23
25
  export type PieChartComponent = BaseComponent<'piechartcomponent'>;
26
+ export type ScatterChartComponent = BaseComponent<'scatterchartcomponent'>;
24
27
  export type TableComponent = BaseComponent<'tablecomponent'> & {
25
28
  actionButtons: (BaseAppComponent & ButtonComponent)[];
26
29
  };
@@ -39,7 +42,9 @@ export type Aligned = {
39
42
  export interface BaseAppComponent extends Partial<Aligned> {
40
43
  id: ComponentID;
41
44
  componentInput: AppInput | undefined;
42
- configuration: Record<string, StaticAppInput | ConnectedAppInput | UserAppInput>;
45
+ configuration: Record<string, (StaticAppInput | ConnectedAppInput | UserAppInput) & {
46
+ onlyStatic?: boolean;
47
+ }>;
43
48
  card: boolean | undefined;
44
49
  /**
45
50
  * If `true` then the wrapper will allow items to flow outside of it's borders.
@@ -48,7 +53,7 @@ export interface BaseAppComponent extends Partial<Aligned> {
48
53
  */
49
54
  softWrap?: boolean;
50
55
  }
51
- export type AppComponent = BaseAppComponent & (RunFormComponent | DisplayComponent | TextInputComponent | PasswordInputComponent | DateInputComponent | NumberInputComponent | BarChartComponent | TableComponent | TextComponent | TableComponent | ButtonComponent | PieChartComponent | ImageComponent | InputComponent | SelectComponent | CheckboxComponent | RadioComponent | FormComponent);
56
+ export type AppComponent = BaseAppComponent & (RunFormComponent | DisplayComponent | TextInputComponent | PasswordInputComponent | DateInputComponent | NumberInputComponent | BarChartComponent | TimeseriesComponent | HtmlComponent | TableComponent | TextComponent | TableComponent | ButtonComponent | PieChartComponent | ScatterChartComponent | ImageComponent | InputComponent | SelectComponent | CheckboxComponent | RadioComponent | FormComponent);
52
57
  export type ComponentSet = {
53
58
  title: string;
54
59
  components: AppComponent[];
@@ -70,7 +75,7 @@ export type InlineScript = {
70
75
  };
71
76
  export type App = {
72
77
  grid: GridItem[];
73
- title: string;
78
+ fullscreen: boolean;
74
79
  unusedInlineScripts: Array<{
75
80
  name: string;
76
81
  inlineScript: InlineScript;
@@ -80,18 +85,29 @@ export type ConnectingInput = {
80
85
  opened: boolean;
81
86
  input?: ConnectedInput;
82
87
  sourceName?: string;
88
+ hoveredComponent: string | undefined;
83
89
  };
84
90
  export type AppEditorContext = {
85
91
  worldStore: Writable<World | undefined>;
86
92
  staticOutputs: Writable<Record<string, string[]>>;
87
93
  lazyGrid: Writable<GridItem[]>;
88
94
  app: Writable<App>;
95
+ summary: Writable<string>;
89
96
  selectedComponent: Writable<string | undefined>;
90
97
  mode: Writable<EditorMode>;
91
98
  connectingInput: Writable<ConnectingInput>;
92
99
  breakpoint: Writable<EditorBreakpoint>;
93
100
  runnableComponents: Writable<Record<string, () => Promise<void>>>;
101
+ staticExporter: Writable<Record<string, () => any>>;
94
102
  appPath: string;
103
+ workspace: string;
104
+ onchange: (() => void) | undefined;
105
+ isEditor: boolean;
106
+ jobs: Writable<{
107
+ job: string;
108
+ component: string;
109
+ }[]>;
110
+ noBackend: boolean;
95
111
  };
96
112
  export type EditorMode = 'dnd' | 'preview';
97
113
  export type EditorBreakpoint = 'sm' | 'lg';
@@ -1,8 +1,8 @@
1
1
  import type { Schema } from '../../common';
2
- import type { AppInput, AppInputs, InputType, ResultAppInput } from './inputType';
2
+ import type { AppInput, InputType, ResultAppInput, StaticAppInput } from './inputType';
3
3
  import type { AppComponent } from './types';
4
4
  export declare function loadSchema(workspace: string, path: string, runType: 'script' | 'flow' | 'hubscript'): Promise<Schema>;
5
- export declare function schemaToInputsSpec(schema: Schema): AppInputs;
5
+ export declare function schemaToInputsSpec(schema: Schema): Record<string, StaticAppInput>;
6
6
  export declare const displayData: Record<AppComponent['type'], {
7
7
  name: string;
8
8
  icon: any;
@@ -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: {
@@ -162,7 +176,7 @@ export function isScriptByPathDefined(appInput) {
162
176
  }
163
177
  export function clearResultAppInput(appInput) {
164
178
  appInput.runnable = undefined;
165
- if (Object.keys(appInput.fields).length > 0) {
179
+ if (Object.keys(appInput.fields ?? {}).length > 0) {
166
180
  appInput.fields = {};
167
181
  }
168
182
  return appInput;
@@ -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,11 +51,12 @@ 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', 'duration-200 rounded-md', 'justify-center items-center text-center whitespace-nowrap inline-flex truncate', 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) {
@@ -90,11 +92,7 @@ $: endIconClass = classNames(iconOnly ? undefined : isSmall ? 'ml-1' : 'ml-2', e
90
92
  type="submit"
91
93
  >
92
94
  {#if loading}
93
- <Icon
94
- data={faSpinner}
95
- class={`animate-spin ${startIconClass}`}
96
- scale={ButtonType.IconScale[size]}
97
- />
95
+ <Loader2 class="animate-spin mr-1" size={14} />
98
96
  {:else if startIcon}
99
97
  <Icon data={startIcon.icon} class={startIconClass} scale={ButtonType.IconScale[size]} />
100
98
  {/if}
@@ -19,6 +19,7 @@ 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: {
24
25
  pointerdown: PointerEvent;
@@ -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,7 +2,7 @@
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
6
  import { MoreVertical } from 'lucide-svelte';
7
7
  import { createEventDispatcher } from 'svelte';
8
8
  import Button from '../button/Button.svelte';
@@ -10,6 +10,8 @@ import Row from './Row.svelte';
10
10
  export let app;
11
11
  export let marked;
12
12
  export let starred;
13
+ export let shareModal;
14
+ export let moveDrawer;
13
15
  let { summary, path, extra_perms, canWrite, workspace_id } = app;
14
16
  const dispatch = createEventDispatcher();
15
17
  </script>
@@ -37,13 +39,14 @@ const dispatch = createEventDispatcher();
37
39
  size="xs"
38
40
  variant="border"
39
41
  startIcon={{ icon: faEdit }}
40
- href="/apps/edit/{path}"
42
+ href="/apps/edit/{path}?nodraft=true"
41
43
  >
42
44
  Edit
43
45
  </Button>
44
46
  </div>
45
47
  {/if}
46
48
  {/if}
49
+
47
50
  <Button
48
51
  href="/apps/get/{path}"
49
52
  color="dark"
@@ -59,10 +62,30 @@ const dispatch = createEventDispatcher();
59
62
  btnClasses="!text-gray-700 !bg-transparent hover:!bg-gray-400/20 !p-[6px]"
60
63
  dropdownItems={[
61
64
  {
62
- displayName: 'View app',
65
+ displayName: 'View',
63
66
  icon: faEye,
64
67
  href: `/apps/get/${path}`
65
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
+ },
66
89
  {
67
90
  displayName: 'Delete',
68
91
  icon: faTrashAlt,
@@ -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>;
@@ -54,7 +54,7 @@ let scheduleEditor;
54
54
  size="xs"
55
55
  variant="border"
56
56
  startIcon={{ icon: faEdit }}
57
- href="/flows/edit/{path}"
57
+ href="/flows/edit/{path}?nodraft=true"
58
58
  >
59
59
  Edit
60
60
  </Button>
@@ -107,7 +107,7 @@ let scheduleEditor;
107
107
  {
108
108
  displayName: 'Edit',
109
109
  icon: faEdit,
110
- href: `/flows/edit/${path}`,
110
+ href: `/flows/edit/${path}?nodraft=true`,
111
111
  disabled: !canWrite
112
112
  },
113
113
  {
@@ -121,10 +121,10 @@ let scheduleEditor;
121
121
  href: `/runs/${path}`
122
122
  },
123
123
  {
124
- displayName: 'Move',
124
+ displayName: 'Move/Rename',
125
125
  icon: faFileExport,
126
126
  action: () => {
127
- moveDrawer.openDrawer(path, 'flow')
127
+ moveDrawer.openDrawer(path, summary, 'flow')
128
128
  },
129
129
  disabled: !canWrite
130
130
  },
@@ -1,6 +1,6 @@
1
1
  <script>import { classNames } from '../../../utils';
2
2
  import { faBarsStaggered } from '@fortawesome/free-solid-svg-icons';
3
- import { Code2, LayoutDashboard, Wind } from 'lucide-svelte';
3
+ import { Code2, LayoutDashboard } from 'lucide-svelte';
4
4
  import Icon from 'svelte-awesome';
5
5
  export let kind;
6
6
  export let href = '#';
@@ -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
  },
@@ -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>;
@@ -4,13 +4,13 @@
4
4
  <script>import { createEventDispatcher, setContext } from 'svelte';
5
5
  import { writable } from 'svelte/store';
6
6
  export let selected;
7
- const dispatch = createEventDispatcher();
8
7
  export let col = false;
9
- $: setSelected(selected);
8
+ const dispatch = createEventDispatcher();
9
+ const selectedContent = writable(selected);
10
10
  function setSelected(selected) {
11
11
  selectedContent.set(selected);
12
12
  }
13
- const selectedContent = writable(selected);
13
+ $: setSelected(selected);
14
14
  $: $selectedContent && dispatch('selected', $selectedContent);
15
15
  setContext('ToggleButtonGroup', {
16
16
  selected: selectedContent,
@@ -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"
@@ -5,13 +5,21 @@ import SchemaForm from '../../SchemaForm.svelte';
5
5
  import { flowStateStore } from '../flowState';
6
6
  import { setContext } from 'svelte';
7
7
  import { writable } from 'svelte/store';
8
+ import { slide } from 'svelte/transition';
9
+ import Toggle from '../../Toggle.svelte';
10
+ let hideOptional = false;
8
11
  $: steps = dfs($flowStore.value.modules, (x) => x)
9
12
  .map((x) => [x.value, x])
10
13
  .filter((x) => x[0].type == 'script' || x[0].type == 'rawscript')
11
14
  .map(([v, m]) => [
12
15
  v.input_transforms,
13
16
  Object.entries(v.input_transforms)
14
- .filter((x) => x[1].type == 'static')
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
+ })
15
23
  .map((x) => x[0]),
16
24
  m
17
25
  ])
@@ -23,10 +31,15 @@ setContext('PropPickerWrapper', {
23
31
  });
24
32
  </script>
25
33
 
26
- <div class="h-full overflow-hidden">
34
+ <div class="min-h-full">
27
35
  <FlowCard title="All Static Inputs">
28
- <div class="h-full flex-1">
29
- <Alert type="info" title="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"
30
43
  >This page centralizes the static inputs of every steps. It is akin to a file containing all
31
44
  constants. Modifying a value here modify it in the step input directly. It is especially
32
45
  useful when forking a flow to get an overview of all the variables to parametrize that are
@@ -35,11 +48,11 @@ setContext('PropPickerWrapper', {
35
48
  {#if steps.length == 0}
36
49
  <div class="mt-2" />
37
50
  {#if $flowStore.value.modules.length == 0}
38
- <Alert type="warning" title="No steps">
51
+ <Alert type="warning" title="No steps" class="m-4">
39
52
  This flow has no steps. Add a step to see its static inputs.
40
53
  </Alert>
41
54
  {:else}
42
- <Alert type="warning" title="No static inputs">
55
+ <Alert type="warning" title="No static inputs" class="m-4">
43
56
  This flow has no steps with static inputs. Add a step with static inputs to see them
44
57
  here.
45
58
  </Alert>
@@ -47,9 +60,9 @@ setContext('PropPickerWrapper', {
47
60
  {/if}
48
61
  {#each steps as [args, filter, m] (m.id)}
49
62
  {#if filter.length > 0}
50
- <div class="box">
51
- <h2 class="pb-4 inline-flex items-center"
52
- ><span class="mr-4">{m.summary || m.value['path'] || 'Inline script'}</span>
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>
53
66
  <Badge large color="indigo">{m.id}</Badge>
54
67
  </h2>
55
68
 
@@ -57,6 +70,7 @@ setContext('PropPickerWrapper', {
57
70
  noDynamicToggle
58
71
  inputTransform
59
72
  {filter}
73
+ class="mt-2"
60
74
  schema={$flowStateStore[m.id]?.schema ?? {}}
61
75
  bind:args
62
76
  />
@@ -62,7 +62,7 @@ let filter = '';
62
62
  >
63
63
  {/if}
64
64
  <h3 class="pb-2 pt-4">
65
- Inline new <span class="text-blue-500">{kind == 'script' ? 'common' : kind}</span> script
65
+ Inline new <span class="text-blue-500">{kind == 'script' ? 'action' : kind}</span> script
66
66
  <Tooltip>
67
67
  Embed a script directly inside a flow instead of saving the script into your workspace for
68
68
  reuse. You can always save an inline script to your workspace later.
@@ -141,7 +141,7 @@ let filter = '';
141
141
  </div>
142
142
 
143
143
  <h3 class="mb-2 mt-6"
144
- >Use pre-made <span class="text-blue-500">{kind == 'script' ? 'common' : kind}</span> script</h3
144
+ >Use pre-made <span class="text-blue-500">{kind == 'script' ? 'action' : kind}</span> script</h3
145
145
  >
146
146
  {#if pick_existing == 'hub'}
147
147
  <PickHubScript bind:filter {kind} on:pick>
@@ -1,19 +1,17 @@
1
1
  <script>import Button from '../../common/button/Button.svelte';
2
- import { classNames } from '../../../utils';
3
- import { faBed, faCodeBranch, faSave, faStop } from '@fortawesome/free-solid-svg-icons';
2
+ import { faCodeBranch, faSave } from '@fortawesome/free-solid-svg-icons';
4
3
  import { createEventDispatcher } from 'svelte';
5
- import Icon from 'svelte-awesome';
6
4
  import { Bed, PhoneIncoming, Repeat, Square } from 'lucide-svelte';
7
5
  import Popover from '../../Popover.svelte';
8
6
  export let module;
9
7
  const dispatch = createEventDispatcher();
10
- let width = 0;
11
8
  $: moduleRetry = module.retry?.constant || module.retry?.exponential;
12
9
  </script>
13
10
 
14
- <div class="flex flex-row space-x-2" bind:clientWidth={width}>
11
+ <div class="flex flex-row space-x-2">
15
12
  {#if module.value.type === 'script' || module.value.type === 'rawscript'}
16
13
  <Popover
14
+ placement="bottom"
17
15
  class="center-center rounded border p-2
18
16
  {moduleRetry
19
17
  ? 'bg-blue-100 text-blue-800 border-blue-300 hover:bg-blue-200'
@@ -24,6 +22,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
24
22
  <svelte:fragment slot="text">Retries</svelte:fragment>
25
23
  </Popover>
26
24
  <Popover
25
+ placement="bottom"
27
26
  class="center-center rounded border p-2
28
27
  {module.stop_after_if
29
28
  ? 'bg-blue-100 text-blue-800 border-blue-300 hover:bg-blue-200'
@@ -34,6 +33,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
34
33
  <svelte:fragment slot="text">Early stop/break</svelte:fragment>
35
34
  </Popover>
36
35
  <Popover
36
+ placement="bottom"
37
37
  class="center-center rounded border p-2
38
38
  {module.suspend
39
39
  ? 'bg-blue-100 text-blue-800 border-blue-300 hover:bg-blue-200'
@@ -44,6 +44,7 @@ $: moduleRetry = module.retry?.constant || module.retry?.exponential;
44
44
  <svelte:fragment slot="text">Suspend</svelte:fragment>
45
45
  </Popover>
46
46
  <Popover
47
+ placement="bottom"
47
48
  class="center-center rounded border p-2
48
49
  {module.sleep
49
50
  ? 'bg-blue-100 text-blue-800 border-blue-300 hover:bg-blue-200'