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.
- package/assets/app.css +5 -1
- package/components/ArgInput.svelte +6 -6
- package/components/DisplayResult.svelte +1 -1
- package/components/Dropdown.svelte +1 -1
- package/components/Dropdown.svelte.d.ts +1 -0
- package/components/Editor.svelte +5 -3
- package/components/Editor.svelte.d.ts +2 -0
- package/components/EditorBar.svelte +15 -1
- package/components/FlowBuilder.svelte +18 -10
- package/components/GroupEditor.svelte +1 -0
- package/components/IconedResourceType.svelte +2 -2
- package/components/InputTransformForm.svelte +7 -5
- package/components/ItemPicker.svelte +63 -57
- package/components/ItemPicker.svelte.d.ts +1 -2
- package/components/LogViewer.svelte +7 -9
- package/components/ModulePreview.svelte +4 -13
- package/components/MoveDrawer.svelte +40 -16
- package/components/MoveDrawer.svelte.d.ts +2 -2
- package/components/PageHeader.svelte +1 -1
- package/components/Path.svelte +5 -2
- package/components/Popover.svelte +6 -4
- package/components/Popover.svelte.d.ts +2 -0
- package/components/ResourcePicker.svelte +1 -0
- package/components/RunChart.svelte +0 -1
- package/components/SchemaForm.svelte +2 -1
- package/components/SchemaForm.svelte.d.ts +1 -0
- package/components/ScriptBuilder.svelte +2 -1
- package/components/ScriptEditor.svelte +86 -80
- package/components/ShareModal.svelte.d.ts +2 -2
- package/components/SimpleEditor.svelte +17 -0
- package/components/StringTypeNarrowing.svelte +30 -8
- package/components/TemplateEditor.svelte +18 -2
- package/components/TestJobLoader.svelte +83 -74
- package/components/Tooltip.svelte +1 -1
- package/components/VariableEditor.svelte +4 -3
- package/components/VariableEditor.svelte.d.ts +2 -2
- package/components/apps/components/buttons/AppButton.svelte +3 -7
- package/components/apps/components/dataDisplay/AppBarChart.svelte +10 -6
- package/components/apps/components/dataDisplay/AppHtml.svelte +23 -0
- package/components/apps/components/dataDisplay/AppHtml.svelte.d.ts +23 -0
- package/components/apps/components/dataDisplay/AppPieChart.svelte +10 -6
- package/components/apps/components/dataDisplay/AppScatterChart.svelte +46 -0
- package/components/apps/components/dataDisplay/AppScatterChart.svelte.d.ts +21 -0
- package/components/apps/components/dataDisplay/AppText.svelte +48 -7
- package/components/apps/components/dataDisplay/AppText.svelte.d.ts +1 -0
- package/components/apps/components/dataDisplay/AppTimeseries.svelte +57 -0
- package/components/apps/components/dataDisplay/AppTimeseries.svelte.d.ts +22 -0
- package/components/apps/components/form/AppForm.svelte +33 -28
- package/components/apps/components/helpers/InputValue.svelte +10 -16
- package/components/apps/components/helpers/InputValue.svelte.d.ts +2 -0
- package/components/apps/components/helpers/NonRunnableComponent.svelte +4 -6
- package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -1
- package/components/apps/components/helpers/RefreshButton.svelte +1 -1
- package/components/apps/components/helpers/RunnableComponent.svelte +120 -119
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -0
- package/components/apps/components/helpers/RunnableWrapper.svelte +11 -1
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/components/apps/components/selectInputs/AppSelect.svelte +2 -0
- package/components/apps/components/table/AppTable.svelte +22 -17
- package/components/apps/components/table/AppTableFooter.svelte +2 -1
- package/components/apps/components/table/tableOptions.d.ts +2 -9
- package/components/apps/components/table/tableOptions.js +5 -2
- package/components/apps/components/textInputs/AppTextInput.svelte +0 -1
- package/components/apps/editor/AppEditor.svelte +133 -102
- package/components/apps/editor/AppEditor.svelte.d.ts +1 -0
- package/components/apps/editor/AppEditorHeader.svelte +355 -50
- package/components/apps/editor/AppEditorHeader.svelte.d.ts +2 -4
- package/components/apps/editor/AppExportButton.svelte +34 -0
- package/components/apps/editor/AppExportButton.svelte.d.ts +17 -0
- package/components/apps/editor/AppPreview.svelte +19 -6
- package/components/apps/editor/AppPreview.svelte.d.ts +5 -0
- package/components/apps/editor/AppPublishButton.svelte +46 -0
- package/components/apps/editor/AppPublishButton.svelte.d.ts +19 -0
- package/components/apps/editor/ComponentEditor.svelte +35 -3
- package/components/apps/editor/ComponentHeader.svelte +23 -16
- package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -0
- package/components/apps/editor/GridEditor.svelte +71 -48
- package/components/apps/editor/RecomputeAllComponents.svelte +80 -13
- package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -28
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +2 -1
- package/components/apps/editor/componentsPanel/componentStaticValues.js +3 -2
- package/components/apps/editor/componentsPanel/data.js +191 -77
- package/components/apps/editor/contextPanel/ContextPanel.svelte +60 -41
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +6 -2
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +47 -10
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +11 -4
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +29 -21
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +10 -6
- package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +38 -33
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +3 -2
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +1 -10
- package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +27 -9
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +8 -6
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +6 -16
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +0 -1
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +46 -21
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +3 -1
- package/components/apps/editor/settingsPanel/PickInlineScript.svelte +0 -1
- package/components/apps/editor/settingsPanel/Recompute.svelte +1 -1
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +8 -7
- package/components/apps/editor/settingsPanel/TableActions.svelte +10 -10
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte +1 -0
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +55 -49
- package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte.d.ts +2 -2
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +24 -0
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +17 -0
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +8 -11
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +35 -7
- package/components/apps/editorUtils.d.ts +1 -0
- package/components/apps/editorUtils.js +11 -0
- package/components/apps/gridUtils.js +1 -1
- package/components/apps/inputType.d.ts +5 -4
- package/components/apps/rx.d.ts +1 -1
- package/components/apps/rx.js +6 -2
- package/components/apps/store.d.ts +2 -0
- package/components/apps/store.js +2 -0
- package/components/apps/types.d.ts +19 -3
- package/components/apps/utils.d.ts +2 -2
- package/components/apps/utils.js +22 -8
- package/components/common/button/Button.svelte +6 -8
- package/components/common/button/Button.svelte.d.ts +1 -0
- package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +4 -1
- package/components/common/popup/Popup.svelte +1 -1
- package/components/common/table/AppRow.svelte +26 -3
- package/components/common/table/AppRow.svelte.d.ts +4 -0
- package/components/common/table/FlowRow.svelte +4 -4
- package/components/common/table/RowIcon.svelte +1 -1
- package/components/common/table/ScriptRow.svelte +2 -2
- package/components/common/tabs/Tabs.svelte +1 -1
- package/components/common/toggleButton/ToggleButton.svelte +2 -0
- package/components/common/toggleButton/ToggleButton.svelte.d.ts +1 -0
- package/components/common/toggleButton/ToggleButtonGroup.svelte +3 -3
- package/components/flows/CreateActionsApp.svelte +43 -0
- package/components/flows/CreateActionsApp.svelte.d.ts +14 -0
- package/components/flows/CreateActionsFlow.svelte +6 -1
- package/components/flows/content/DynamicInputHelpBox.svelte +1 -1
- package/components/flows/content/FlowConstants.svelte +23 -9
- package/components/flows/content/FlowInputs.svelte +2 -2
- package/components/flows/content/FlowModuleHeader.svelte +6 -5
- package/components/flows/content/FlowSettings.svelte +1 -1
- package/components/flows/header/FlowImportExportMenu.svelte +1 -1
- package/components/flows/map/FlowConstantsItem.svelte +5 -7
- package/components/flows/map/FlowModuleSchemaMap.svelte +1 -5
- package/components/flows/map/FlowSettingsItem.svelte +5 -7
- package/components/flows/pickers/PickHubApp.svelte +73 -0
- package/components/flows/pickers/PickHubApp.svelte.d.ts +20 -0
- package/components/flows/pickers/PickHubFlow.svelte +3 -1
- package/components/flows/pickers/PickHubScript.svelte +1 -0
- package/components/flows/propPicker/PropPickerWrapper.svelte +42 -31
- package/components/home/ItemsList.svelte +6 -4
- package/components/icons/ClickhouseIcon.svelte +22 -0
- package/components/icons/ClickhouseIcon.svelte.d.ts +17 -0
- package/components/icons/FaunadbIcon.svelte +19 -0
- package/components/icons/FaunadbIcon.svelte.d.ts +17 -0
- package/components/icons/OpenaiIcon.svelte +18 -0
- package/components/icons/OpenaiIcon.svelte.d.ts +17 -0
- package/components/icons/index.d.ts +7 -1
- package/components/icons/index.js +8 -2
- package/components/propertyPicker/ObjectViewer.svelte +11 -4
- package/components/propertyPicker/PropPicker.svelte +1 -1
- package/components/scriptEditor/LogPanel.svelte +26 -22
- package/components/sidebar/WorkspaceMenu.svelte +2 -3
- package/components/splitPanes/SplitPanesWrapper.svelte +1 -5
- package/components/splitPanes/SplitPanesWrapper.svelte.d.ts +0 -1
- package/editorUtils.js +2 -0
- package/gen/core/OpenAPI.js +1 -1
- package/gen/models/Policy.d.ts +1 -0
- package/gen/services/AppService.d.ts +50 -0
- package/gen/services/AppService.js +55 -0
- package/gen/services/GranularAclService.d.ts +3 -3
- package/gen/services/ResourceService.d.ts +15 -0
- package/gen/services/ResourceService.js +17 -0
- package/infer.js +4 -0
- package/package.json +18 -9
- package/stores.d.ts +1 -0
- package/stores.js +13 -5
- package/utils.d.ts +9 -1
- package/utils.js +28 -11
- package/components/apps/CreateApp.svelte +0 -68
- package/components/apps/CreateApp.svelte.d.ts +0 -14
- package/components/apps/editor/settingsPanel/SectionPanel.svelte +0 -70
- package/components/apps/editor/settingsPanel/SectionPanel.svelte.d.ts +0 -19
- package/components/apps/editor/settingsPanel/UserInputEditor.svelte +0 -2
- package/components/apps/editor/settingsPanel/UserInputEditor.svelte.d.ts +0 -14
|
@@ -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
|
-
|
|
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,
|
|
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):
|
|
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;
|
package/components/apps/utils.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
61
|
+
name: 'Pie Chart',
|
|
60
62
|
icon: PieChart
|
|
61
63
|
},
|
|
62
64
|
barchartcomponent: {
|
|
63
|
-
name: 'Bar
|
|
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
|
|
113
|
+
name: 'Number',
|
|
100
114
|
icon: Binary
|
|
101
115
|
},
|
|
102
116
|
passwordinputcomponent: {
|
|
103
|
-
name: 'Password
|
|
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 {
|
|
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
|
|
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
|
-
<
|
|
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}
|
|
@@ -41,6 +41,9 @@ onDestroy(() => {
|
|
|
41
41
|
}}
|
|
42
42
|
>
|
|
43
43
|
<div class="flex flex-col w-full space-y-4">
|
|
44
|
-
<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
|
|
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
|
|
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
|
|
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',
|
|
@@ -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
|
-
|
|
8
|
+
const dispatch = createEventDispatcher();
|
|
9
|
+
const selectedContent = writable(selected);
|
|
10
10
|
function setSelected(selected) {
|
|
11
11
|
selectedContent.set(selected);
|
|
12
12
|
}
|
|
13
|
-
|
|
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
|
|
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>
|
|
@@ -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) =>
|
|
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
|
|
34
|
+
<div class="min-h-full">
|
|
27
35
|
<FlowCard title="All Static Inputs">
|
|
28
|
-
<
|
|
29
|
-
|
|
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="
|
|
51
|
-
<h2 class="
|
|
52
|
-
|
|
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' ? '
|
|
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' ? '
|
|
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 {
|
|
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"
|
|
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'
|