windmill-components 1.60.4 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/app.css +3 -0
- package/common.d.ts +5 -1
- package/components/ApiConnectForm.svelte +66 -5
- package/components/AppConnect.svelte +24 -9
- package/components/ArgInput.svelte +1 -1
- package/components/CliHelpBox.svelte +49 -0
- package/components/CliHelpBox.svelte.d.ts +14 -0
- package/components/DisplayResult.svelte +51 -1
- package/components/DisplayResult.svelte.d.ts +1 -0
- package/components/Editor.svelte +17 -7
- package/components/EditorBar.svelte +129 -111
- package/components/FlowBuilder.svelte +2 -2
- package/components/FlowJobResult.svelte +10 -2
- package/components/FlowJobResult.svelte.d.ts +1 -0
- package/components/FlowMetadata.svelte +24 -8
- package/components/FlowPreviewContent.svelte +3 -4
- package/components/FlowStatusViewer.svelte +41 -9
- package/components/FolderEditor.svelte +3 -2
- package/components/HighlightCode.svelte +7 -1
- package/components/InlineCodeCopy.svelte +11 -0
- package/components/InlineCodeCopy.svelte.d.ts +16 -0
- package/components/InputTransformForm.svelte +9 -5
- package/components/LogViewer.svelte +6 -0
- package/components/LogViewer.svelte.d.ts +1 -0
- package/components/ModulePreview.svelte +11 -2
- package/components/MoveDrawer.svelte +1 -1
- package/components/Multiselect.svelte.d.ts +2 -2
- package/components/ObjectResourceInput.svelte +6 -1
- package/components/Path.svelte +14 -5
- package/components/Popover.svelte +8 -2
- package/components/Popover.svelte.d.ts +1 -0
- package/components/Range.svelte.d.ts +2 -2
- package/components/ResourceEditor.svelte +39 -16
- package/components/ResourcePicker.svelte +0 -1
- package/components/RunForm.svelte +26 -2
- package/components/RunForm.svelte.d.ts +1 -0
- package/components/ScheduleEditor.svelte +1 -1
- package/components/SchemaEditor.svelte +2 -2
- package/components/SchemaForm.svelte +14 -4
- package/components/SchemaForm.svelte.d.ts +1 -0
- package/components/ScriptBuilder.svelte +45 -22
- package/components/ScriptBuilder.svelte.d.ts +1 -0
- package/components/ScriptEditor.svelte +1 -0
- package/components/SharedBadge.svelte +5 -5
- package/components/Slider.svelte +14 -0
- package/components/Slider.svelte.d.ts +19 -0
- package/components/StringTypeNarrowing.svelte +0 -1
- package/components/SuperadminSettings.svelte +11 -3
- package/components/SuperadminSettings.svelte.d.ts +2 -0
- package/components/TemplateEditor.svelte.d.ts +204 -0
- package/components/TestJobLoader.svelte +3 -3
- package/components/Toggle.svelte +1 -2
- package/components/UserSettings.svelte +11 -3
- package/components/UserSettings.svelte.d.ts +2 -0
- package/components/VariableEditor.svelte +1 -1
- package/components/WhitelistIp.svelte +23 -0
- package/components/WhitelistIp.svelte.d.ts +14 -0
- package/components/apps/components/buttons/AppButton.svelte +52 -6
- package/components/apps/components/buttons/AppButton.svelte.d.ts +3 -0
- package/components/apps/components/{form → buttons}/AppForm.svelte +3 -1
- package/components/apps/components/buttons/AppFormButton.svelte +137 -0
- package/components/apps/components/buttons/AppFormButton.svelte.d.ts +25 -0
- package/components/apps/components/buttons/index.d.ts +3 -0
- package/components/apps/components/buttons/index.js +3 -0
- package/components/apps/components/{dataDisplay → display}/AppBarChart.svelte +15 -4
- package/components/apps/components/{dataDisplay → display}/AppBarChart.svelte.d.ts +1 -0
- package/components/apps/components/display/AppDisplayComponent.svelte +31 -0
- package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +23 -0
- package/components/apps/components/{dataDisplay → display}/AppHtml.svelte +6 -5
- package/components/apps/components/{dataDisplay → display}/AppHtml.svelte.d.ts +1 -1
- package/components/apps/components/display/AppIcon.svelte +35 -0
- package/components/apps/components/display/AppIcon.svelte.d.ts +22 -0
- package/components/apps/components/display/AppImage.svelte +27 -0
- package/components/apps/components/display/AppImage.svelte.d.ts +22 -0
- package/components/apps/components/{dataDisplay → display}/AppPieChart.svelte +2 -1
- package/components/apps/components/{dataDisplay → display}/AppPieChart.svelte.d.ts +1 -0
- package/components/apps/components/{dataDisplay → display}/AppScatterChart.svelte +2 -1
- package/components/apps/components/{dataDisplay → display}/AppScatterChart.svelte.d.ts +1 -0
- package/components/apps/components/{dataDisplay → display}/AppText.svelte +16 -14
- package/components/apps/components/{dataDisplay → display}/AppText.svelte.d.ts +3 -0
- package/components/apps/components/{dataDisplay → display}/AppTimeseries.svelte +3 -2
- package/components/apps/components/{dataDisplay → display}/AppTimeseries.svelte.d.ts +1 -0
- package/components/apps/components/display/PlotlyHtml.svelte +38 -0
- package/components/apps/components/display/PlotlyHtml.svelte.d.ts +24 -0
- package/components/apps/components/{dataDisplay → display}/VegaLiteHtml.svelte +2 -3
- package/components/apps/components/{dataDisplay → display}/VegaLiteHtml.svelte.d.ts +1 -0
- package/components/apps/components/display/index.d.ts +12 -0
- package/components/apps/components/display/index.js +12 -0
- package/components/apps/components/display/table/AppAggridTable.svelte +83 -0
- package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +24 -0
- package/components/apps/components/{table → display/table}/AppTable.svelte +32 -21
- package/components/apps/components/{table → display/table}/AppTable.svelte.d.ts +4 -2
- package/components/apps/components/{table → display/table}/AppTableFooter.svelte +1 -1
- package/components/apps/components/helpers/AlignWrapper.svelte +19 -19
- package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +4 -2
- package/components/apps/components/helpers/HiddenComponent.svelte +22 -0
- package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +25 -0
- package/components/apps/components/helpers/InputDefaultValue.svelte +17 -0
- package/components/apps/components/helpers/InputDefaultValue.svelte.d.ts +17 -0
- package/components/apps/components/helpers/InputValue.svelte +5 -7
- package/components/apps/components/helpers/InputValue.svelte.d.ts +0 -1
- package/components/apps/components/helpers/RunnableComponent.svelte +37 -48
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
- package/components/apps/components/helpers/RunnableWrapper.svelte +7 -2
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +2 -1
- package/components/apps/components/helpers/index.d.ts +10 -0
- package/components/apps/components/helpers/index.js +10 -0
- package/components/apps/components/icon.d.ts +1 -0
- package/components/apps/components/icon.js +18 -0
- package/components/apps/components/index.d.ts +5 -0
- package/components/apps/components/index.js +5 -0
- package/components/apps/components/{selectInputs → inputs}/AppCheckbox.svelte +4 -2
- package/components/apps/components/{dateInputs → inputs}/AppDateInput.svelte +6 -0
- package/components/apps/components/inputs/AppFileInput.svelte +34 -0
- package/components/apps/components/inputs/AppFileInput.svelte.d.ts +20 -0
- package/components/apps/components/inputs/AppNumberInput.svelte +48 -0
- package/components/apps/components/inputs/AppRangeInput.svelte +44 -0
- package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +23 -0
- package/components/apps/components/inputs/AppSelect.svelte +90 -0
- package/components/apps/components/{selectInputs → inputs}/AppSelect.svelte.d.ts +2 -0
- package/components/apps/components/{numberInputs → inputs}/AppSliderInputs.svelte +13 -9
- package/components/apps/components/{textInputs → inputs}/AppTextInput.svelte +6 -0
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +49 -0
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +21 -0
- package/components/apps/components/inputs/currency/CurrencyInput.svelte +181 -0
- package/components/apps/components/inputs/currency/CurrencyInput.svelte.d.ts +32 -0
- package/components/apps/components/inputs/index.d.ts +9 -0
- package/components/apps/components/inputs/index.js +9 -0
- package/components/apps/components/layout/AppContainer.svelte +32 -0
- package/components/apps/components/layout/AppContainer.svelte.d.ts +21 -0
- package/components/apps/components/layout/AppDivider.svelte +20 -0
- package/components/apps/components/layout/AppDivider.svelte.d.ts +22 -0
- package/components/apps/components/layout/AppTabs.svelte +58 -0
- package/components/apps/components/layout/AppTabs.svelte.d.ts +24 -0
- package/components/apps/components/layout/index.d.ts +3 -0
- package/components/apps/components/layout/index.js +3 -0
- package/components/apps/editor/AppComponentInput.svelte +33 -0
- package/components/apps/editor/AppComponentInput.svelte.d.ts +18 -0
- package/components/apps/editor/AppComponentInputs.svelte +13 -0
- package/components/apps/editor/AppComponentInputs.svelte.d.ts +20 -0
- package/components/apps/editor/AppEditor.svelte +66 -31
- package/components/apps/editor/AppEditor.svelte.d.ts +1 -0
- package/components/apps/editor/AppEditorHeader.svelte +74 -18
- package/components/apps/editor/AppEditorHeader.svelte.d.ts +1 -0
- package/components/apps/editor/AppInputs.svelte +60 -0
- package/components/apps/editor/AppInputs.svelte.d.ts +14 -0
- package/components/apps/editor/AppPreview.svelte +11 -6
- package/components/apps/editor/ComponentHeader.svelte +40 -2
- package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -1
- package/components/apps/editor/GridEditor.svelte +75 -32
- package/components/apps/editor/GridEditor.svelte.d.ts +2 -0
- package/components/apps/editor/SettingsPanel.svelte +31 -3
- package/components/apps/editor/SubGridEditor.svelte +111 -0
- package/components/apps/editor/SubGridEditor.svelte.d.ts +24 -0
- package/components/apps/editor/TablePanel.svelte +2 -0
- package/components/apps/editor/TablePanel.svelte.d.ts +1 -1
- package/components/apps/editor/appUtils.d.ts +9 -0
- package/components/apps/editor/appUtils.js +141 -0
- package/components/apps/editor/component/Component.svelte +209 -0
- package/components/apps/editor/component/Component.svelte.d.ts +23 -0
- package/components/apps/editor/component/README.md +15 -0
- package/components/apps/editor/component/components.d.ts +65 -0
- package/components/apps/editor/component/components.js +1102 -0
- package/components/apps/editor/component/default-codes.d.ts +3 -0
- package/components/apps/editor/component/default-codes.js +322 -0
- package/components/apps/editor/component/index.d.ts +4 -0
- package/components/apps/editor/component/index.js +4 -0
- package/components/apps/editor/component/sets.d.ts +2 -0
- package/components/apps/editor/component/sets.js +47 -0
- package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -106
- package/components/apps/editor/componentsPanel/CssProperty.svelte +31 -0
- package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +20 -0
- package/components/apps/editor/componentsPanel/CssSettings.svelte +141 -0
- package/components/apps/editor/componentsPanel/CssSettings.svelte.d.ts +14 -0
- package/components/apps/editor/componentsPanel/ListItem.svelte +28 -0
- package/components/apps/editor/componentsPanel/ListItem.svelte.d.ts +20 -0
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +4 -1
- package/components/apps/editor/componentsPanel/componentStaticValues.js +4 -1
- package/components/apps/editor/contextPanel/ContextPanel.svelte +8 -6
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +98 -9
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +38 -29
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +21 -1
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +66 -8
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +92 -46
- package/components/apps/editor/inlineScriptsPanel/utils.d.ts +5 -1
- package/components/apps/editor/inlineScriptsPanel/utils.js +30 -0
- package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/AlignmentEditor.svelte.d.ts +1 -1
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +4 -1
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +59 -1
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +64 -34
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +5 -3
- package/components/apps/editor/settingsPanel/GridTab.svelte +73 -0
- package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +18 -0
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +3 -0
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +2 -2
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +92 -77
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte +85 -0
- package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte.d.ts +18 -0
- package/components/apps/editor/settingsPanel/Recompute.svelte +4 -1
- package/components/apps/editor/settingsPanel/TableActions.svelte +17 -6
- package/components/apps/editor/settingsPanel/TableActions.svelte.d.ts +2 -1
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte +5 -3
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +83 -0
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +19 -0
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +6 -1
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +2 -0
- package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte +23 -0
- package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte.d.ts +17 -0
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +3 -20
- package/components/apps/gridUtils.d.ts +3 -1
- package/components/apps/gridUtils.js +5 -3
- package/components/apps/inputType.d.ts +33 -6
- package/components/apps/types.d.ts +35 -40
- package/components/apps/types.js +1 -1
- package/components/apps/utils.d.ts +6 -5
- package/components/apps/utils.js +90 -94
- package/components/common/button/Button.svelte +12 -5
- package/components/common/button/Button.svelte.d.ts +3 -1
- package/components/common/button/ButtonPopup.svelte.d.ts +1 -1
- package/components/common/button/model.d.ts +2 -2
- package/components/common/button/model.js +21 -6
- package/components/common/confirmationModal/ConfirmationModal.svelte +8 -1
- package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +4 -4
- package/components/common/drawer/Drawer.svelte +3 -1
- package/components/common/fileInput/FileInput.svelte +112 -0
- package/components/common/fileInput/FileInput.svelte.d.ts +27 -0
- package/components/common/index.d.ts +1 -0
- package/components/common/index.js +1 -0
- package/components/common/kbd/Kbd.svelte.d.ts +2 -2
- package/components/common/modal/Modal.svelte +74 -0
- package/components/common/modal/Modal.svelte.d.ts +22 -0
- package/components/common/popup/Popup.svelte +34 -17
- package/components/common/popup/Popup.svelte.d.ts +11 -4
- package/components/common/table/FlowRow.svelte +22 -3
- package/components/common/table/LanguageBadge.svelte +10 -4
- package/components/common/table/Row.svelte +1 -1
- package/components/common/table/ScriptRow.svelte +2 -2
- package/components/common/tabs/Tabs.svelte +9 -7
- package/components/common/tabs/Tabs.svelte.d.ts +3 -1
- package/components/flows/CreateActionsFlow.svelte +2 -3
- package/components/flows/content/BranchPredicateEditor.svelte +10 -8
- package/components/flows/content/FlowInputs.svelte +109 -99
- package/components/flows/content/FlowLoop.svelte +1 -1
- package/components/flows/content/FlowModuleComponent.svelte +3 -2
- package/components/flows/content/FlowRetries.svelte +8 -6
- package/components/flows/content/FlowSettings.svelte +72 -26
- package/components/flows/flowState.d.ts +1 -0
- package/components/flows/flowState.js +1 -0
- package/components/flows/flowStateUtils.js +4 -2
- package/components/flows/flowStore.d.ts +1 -0
- package/components/flows/flowStore.js +1 -0
- package/components/flows/map/FlowBranchAllMap.svelte +1 -1
- package/components/flows/map/FlowBranchOneMap.svelte +2 -2
- package/components/flows/map/FlowModuleSchemaItem.svelte +5 -5
- package/components/flows/map/FlowModuleSchemaMap.svelte +15 -8
- package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -0
- package/components/flows/map/InsertModuleButton.svelte +24 -10
- package/components/flows/map/InsertModuleButton.svelte.d.ts +1 -0
- package/components/flows/map/MapItem.svelte +3 -1
- package/components/flows/utils.js +16 -10
- package/components/graph/FlowGraph.svelte +38 -15
- package/components/graph/FlowGraph.svelte.d.ts +1 -0
- package/components/icons/SquareIcon.svelte +9 -0
- package/components/icons/SquareIcon.svelte.d.ts +17 -0
- package/components/icons/index.d.ts +2 -0
- package/components/icons/index.js +2 -0
- package/components/jobs/JobDetail.svelte +29 -5
- package/components/propertyPicker/ObjectViewer.svelte +8 -5
- package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
- package/components/propertyPicker/PropPicker.svelte +8 -1
- package/components/propertyPicker/PropPickerResult.svelte +1 -1
- package/components/random_positive_adjetive.d.ts +1 -0
- package/components/random_positive_adjetive.js +961 -0
- package/components/scriptEditor/LogPanel.svelte +2 -1
- package/components/sidebar/SidebarContent.svelte +1 -1
- package/components/sidebar/UserMenu.svelte +46 -16
- package/components/sidebar/UserMenu.svelte.d.ts +0 -3
- package/components/sidebar/WorkspaceMenu.svelte +3 -1
- package/components/sidebar/settings.d.ts +2 -0
- package/components/sidebar/settings.js +2 -0
- package/gen/core/OpenAPI.js +1 -1
- package/gen/models/CompletedJob.d.ts +1 -0
- package/gen/models/FlowModule.d.ts +0 -1
- package/gen/models/QueuedJob.d.ts +1 -0
- package/gen/models/WorkerPing.d.ts +1 -1
- package/gen/services/FlowService.d.ts +9 -0
- package/gen/services/FlowService.js +15 -0
- package/gen/services/JobService.d.ts +97 -15
- package/gen/services/JobService.js +74 -15
- package/gen/services/ScriptService.d.ts +10 -1
- package/gen/services/ScriptService.js +16 -1
- package/gen/services/VariableService.d.ts +4 -2
- package/gen/services/VariableService.js +8 -2
- package/gen/services/WorkspaceService.d.ts +17 -0
- package/gen/services/WorkspaceService.js +16 -0
- package/infer.js +3 -0
- package/init_scripts/python_failure_module.py +10 -0
- package/init_scripts/python_init_code.py +37 -0
- package/init_scripts/python_init_code_clear.py +5 -0
- package/init_scripts/python_init_code_trigger.py +14 -0
- package/logout.js +2 -1
- package/package.json +577 -522
- package/script_helpers.d.ts +6 -5
- package/script_helpers.js +7 -73
- package/stores.d.ts +5 -1
- package/stores.js +8 -1
- package/user.d.ts +1 -1
- package/user.js +14 -8
- package/utils.d.ts +1 -1
- package/utils.js +8 -7
- package/components/apps/components/DisplayComponent.svelte +0 -16
- package/components/apps/components/DisplayComponent.svelte.d.ts +0 -20
- package/components/apps/components/numberInputs/AppNumberInput.svelte +0 -33
- package/components/apps/components/selectInputs/AppSelect.svelte +0 -47
- package/components/apps/editor/ComponentEditor.svelte +0 -145
- package/components/apps/editor/ComponentEditor.svelte.d.ts +0 -23
- package/components/apps/editor/componentsPanel/data.d.ts +0 -3
- package/components/apps/editor/componentsPanel/data.js +0 -499
- package/components/apps/editorUtils.d.ts +0 -1
- package/components/apps/editorUtils.js +0 -292
- /package/components/apps/components/{form → buttons}/AppForm.svelte.d.ts +0 -0
- /package/components/apps/components/{table → display/table}/AppTableFooter.svelte.d.ts +0 -0
- /package/components/apps/components/{table → display/table}/tableOptions.d.ts +0 -0
- /package/components/apps/components/{table → display/table}/tableOptions.js +0 -0
- /package/components/apps/components/{selectInputs → inputs}/AppCheckbox.svelte.d.ts +0 -0
- /package/components/apps/components/{dateInputs → inputs}/AppDateInput.svelte.d.ts +0 -0
- /package/components/apps/components/{numberInputs → inputs}/AppNumberInput.svelte.d.ts +0 -0
- /package/components/apps/components/{numberInputs → inputs}/AppSliderInputs.svelte.d.ts +0 -0
- /package/components/apps/components/{textInputs → inputs}/AppTextInput.svelte.d.ts +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<script>import Button from '../../../common/button/Button.svelte';
|
|
2
|
+
import { faPlus, faTrashAlt } from '@fortawesome/free-solid-svg-icons';
|
|
3
|
+
import { getContext } from 'svelte';
|
|
4
|
+
import { deleteGridItem } from '../appUtils';
|
|
5
|
+
import PanelSection from './common/PanelSection.svelte';
|
|
6
|
+
export let tabs;
|
|
7
|
+
export let component;
|
|
8
|
+
const { app, staticOutputs, runnableComponents } = getContext('AppEditorContext');
|
|
9
|
+
function addTab() {
|
|
10
|
+
const numberOfTabs = tabs.length;
|
|
11
|
+
tabs = [...tabs, `Tab ${numberOfTabs + 1}`];
|
|
12
|
+
if (!$app.subgrids) {
|
|
13
|
+
$app.subgrids = {};
|
|
14
|
+
}
|
|
15
|
+
$app.subgrids[`${component.id}-${numberOfTabs}`] = [];
|
|
16
|
+
component.numberOfSubgrids = tabs.length;
|
|
17
|
+
}
|
|
18
|
+
function deleteSubgrid(index) {
|
|
19
|
+
let subgrid = `${component.id}-${index}`;
|
|
20
|
+
for (const item of $app.subgrids[subgrid]) {
|
|
21
|
+
const components = deleteGridItem($app, item.data, subgrid);
|
|
22
|
+
console.log(components);
|
|
23
|
+
for (const key in components) {
|
|
24
|
+
delete $staticOutputs[key];
|
|
25
|
+
delete $runnableComponents[key];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
$staticOutputs = $staticOutputs;
|
|
29
|
+
$runnableComponents = $runnableComponents;
|
|
30
|
+
for (let i = index; i < tabs.length - 1; i++) {
|
|
31
|
+
$app.subgrids[`${component.id}-${i}`] = $app.subgrids[`${component.id}-${i + 1}`];
|
|
32
|
+
}
|
|
33
|
+
tabs.splice(index, 1);
|
|
34
|
+
tabs = tabs;
|
|
35
|
+
component.numberOfSubgrids = tabs.length;
|
|
36
|
+
$app = $app;
|
|
37
|
+
}
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<PanelSection title={`Tabs ${tabs.length > 0 ? `(${tabs.length})` : ''}`}>
|
|
41
|
+
{#if tabs.length == 0}
|
|
42
|
+
<span class="text-xs text-gray-500">No Tabs</span>
|
|
43
|
+
{/if}
|
|
44
|
+
<div class="flex gap-2 flex-col mt-2">
|
|
45
|
+
{#each tabs as value, index (index)}
|
|
46
|
+
<div class="flex flex-row gap-2 items-center relative">
|
|
47
|
+
<input type="text" bind:value />
|
|
48
|
+
|
|
49
|
+
<div class="absolute top-1 right-1">
|
|
50
|
+
<Button
|
|
51
|
+
size="xs"
|
|
52
|
+
color="light"
|
|
53
|
+
variant="border"
|
|
54
|
+
on:click={() => {
|
|
55
|
+
deleteSubgrid(index)
|
|
56
|
+
}}
|
|
57
|
+
iconOnly
|
|
58
|
+
btnClasses="!text-red-500"
|
|
59
|
+
startIcon={{ icon: faTrashAlt }}
|
|
60
|
+
/>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
{/each}
|
|
64
|
+
<Button
|
|
65
|
+
size="xs"
|
|
66
|
+
color="light"
|
|
67
|
+
variant="border"
|
|
68
|
+
startIcon={{ icon: faPlus }}
|
|
69
|
+
on:click={addTab}
|
|
70
|
+
iconOnly
|
|
71
|
+
/>
|
|
72
|
+
</div>
|
|
73
|
+
</PanelSection>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { AppComponent } from '../component';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
tabs: string[];
|
|
6
|
+
component: AppComponent;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {};
|
|
12
|
+
};
|
|
13
|
+
export type GridTabProps = typeof __propDef.props;
|
|
14
|
+
export type GridTabEvents = typeof __propDef.events;
|
|
15
|
+
export type GridTabSlots = typeof __propDef.slots;
|
|
16
|
+
export default class GridTab extends SvelteComponentTyped<GridTabProps, GridTabEvents, GridTabSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import EvalInputEditor from './inputEditor/EvalInputEditor.svelte';
|
|
3
3
|
import RowInputEditor from './inputEditor/RowInputEditor.svelte';
|
|
4
4
|
import StaticInputEditor from './inputEditor/StaticInputEditor.svelte';
|
|
5
|
+
import UploadInputEditor from './inputEditor/UploadInputEditor.svelte';
|
|
5
6
|
export let id;
|
|
6
7
|
export let componentInput;
|
|
7
8
|
export let hasRows = false;
|
|
@@ -15,6 +16,8 @@ export let hasRows = false;
|
|
|
15
16
|
<StaticInputEditor bind:componentInput />
|
|
16
17
|
{:else if componentInput.type === 'eval'}
|
|
17
18
|
<EvalInputEditor {hasRows} {id} bind:componentInput />
|
|
19
|
+
{:else if componentInput.type === 'upload'}
|
|
20
|
+
<UploadInputEditor bind:componentInput />
|
|
18
21
|
{:else if componentInput.type === 'user'}
|
|
19
22
|
<span class="text-2xs italic text-gray-6f00">Field's value is set by the user</span>
|
|
20
23
|
{/if}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type { ConnectedAppInput, EvalAppInput, RowAppInput, StaticAppInput, UserAppInput } from '../../inputType';
|
|
2
|
+
import type { ConnectedAppInput, EvalAppInput, RowAppInput, StaticAppInput, UploadAppInput, UserAppInput } from '../../inputType';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
id: string;
|
|
6
|
-
componentInput: StaticAppInput | ConnectedAppInput | UserAppInput | RowAppInput | EvalAppInput;
|
|
6
|
+
componentInput: StaticAppInput | ConnectedAppInput | UserAppInput | RowAppInput | EvalAppInput | UploadAppInput;
|
|
7
7
|
hasRows?: boolean | undefined;
|
|
8
8
|
};
|
|
9
9
|
events: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script>import { Badge, ToggleButton, ToggleButtonGroup } from '../../../common';
|
|
2
2
|
import { addWhitespaceBeforeCapitals, capitalize } from '../../../../utils';
|
|
3
|
-
import { faArrowRight, faPen,
|
|
3
|
+
import { faArrowRight, faPen, faUpload, faUser } from '@fortawesome/free-solid-svg-icons';
|
|
4
4
|
import { fieldTypeToTsType } from '../../utils';
|
|
5
5
|
import InputsSpecEditor from './InputsSpecEditor.svelte';
|
|
6
6
|
import { getContext } from 'svelte';
|
|
@@ -11,6 +11,7 @@ export let inputSpecs;
|
|
|
11
11
|
export let userInputEnabled = true;
|
|
12
12
|
export let shouldCapitalize = true;
|
|
13
13
|
export let rowColumns = false;
|
|
14
|
+
export let resourceOnly = false;
|
|
14
15
|
const { connectingInput } = getContext('AppEditorContext');
|
|
15
16
|
</script>
|
|
16
17
|
|
|
@@ -18,97 +19,111 @@ const { connectingInput } = getContext('AppEditorContext');
|
|
|
18
19
|
<div class="w-full flex flex-col gap-4">
|
|
19
20
|
{#each Object.keys(inputSpecs) as inputSpecKey (inputSpecKey)}
|
|
20
21
|
{@const input = inputSpecs[inputSpecKey]}
|
|
21
|
-
|
|
22
|
-
<div class="flex
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
{#if !(resourceOnly && (input.fieldType !== 'object' || !input.format?.startsWith('resource-')))}
|
|
23
|
+
<div class="flex flex-col gap-1">
|
|
24
|
+
<div class="flex justify-between items-end gap-1">
|
|
25
|
+
<span class="text-sm font-semibold truncate">
|
|
26
|
+
{shouldCapitalize
|
|
27
|
+
? capitalize(addWhitespaceBeforeCapitals(inputSpecKey))
|
|
28
|
+
: inputSpecKey}
|
|
29
|
+
{#if input.tooltip}
|
|
30
|
+
<Tooltip>
|
|
31
|
+
{input.tooltip}
|
|
32
|
+
</Tooltip>
|
|
33
|
+
{/if}
|
|
34
|
+
</span>
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
<div class="flex gap-x-2 gap-y-1 flex-wrap justify-end items-center">
|
|
37
|
+
<Badge color="blue">
|
|
38
|
+
{input.fieldType === 'array' && input.subFieldType
|
|
39
|
+
? `${capitalize(fieldTypeToTsType(input.subFieldType))}[]`
|
|
40
|
+
: capitalize(fieldTypeToTsType(input.fieldType))}
|
|
41
|
+
</Badge>
|
|
40
42
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
{#if !inputSpecs[inputSpecKey].onlyStatic && inputSpecs[inputSpecKey].type != 'eval'}
|
|
44
|
+
<ToggleButtonGroup
|
|
45
|
+
bind:selected={inputSpecs[inputSpecKey].type}
|
|
46
|
+
on:selected={(e) => {
|
|
47
|
+
if (e.detail == 'connected' && !inputSpecs[inputSpecKey]['connection']) {
|
|
48
|
+
$connectingInput = {
|
|
49
|
+
opened: true,
|
|
50
|
+
input: undefined,
|
|
51
|
+
hoveredComponent: undefined
|
|
52
|
+
}
|
|
50
53
|
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
>
|
|
54
|
-
<Popover placement="bottom" notClickable disapperTimoout={0}>
|
|
55
|
-
<ToggleButton
|
|
56
|
-
position="left"
|
|
57
|
-
value="static"
|
|
58
|
-
startIcon={{ icon: faPen }}
|
|
59
|
-
size="xs"
|
|
60
|
-
iconOnly
|
|
61
|
-
/>
|
|
62
|
-
<svelte:fragment slot="text">Static</svelte:fragment>
|
|
63
|
-
</Popover>
|
|
64
|
-
{#if rowColumns}
|
|
54
|
+
}}
|
|
55
|
+
>
|
|
65
56
|
<Popover placement="bottom" notClickable disapperTimoout={0}>
|
|
66
57
|
<ToggleButton
|
|
67
|
-
position="
|
|
68
|
-
value="
|
|
69
|
-
startIcon={{ icon:
|
|
58
|
+
position="left"
|
|
59
|
+
value="static"
|
|
60
|
+
startIcon={{ icon: faPen }}
|
|
70
61
|
size="xs"
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
</Tooltip>
|
|
75
|
-
</ToggleButton>
|
|
76
|
-
<svelte:fragment slot="text">Column</svelte:fragment>
|
|
62
|
+
iconOnly
|
|
63
|
+
/>
|
|
64
|
+
<svelte:fragment slot="text">Static</svelte:fragment>
|
|
77
65
|
</Popover>
|
|
78
|
-
|
|
79
|
-
|
|
66
|
+
<!-- {#if rowColumns}
|
|
67
|
+
<Popover placement="bottom" notClickable disapperTimoout={0}>
|
|
68
|
+
<ToggleButton
|
|
69
|
+
position="center"
|
|
70
|
+
value="row"
|
|
71
|
+
startIcon={{ icon: faTableCells }}
|
|
72
|
+
size="xs"
|
|
73
|
+
>
|
|
74
|
+
<Tooltip scale={0.6} placement="top-end" wrapperClass="center-center">
|
|
75
|
+
Use the column name to have the value of the cell be passed to the action
|
|
76
|
+
</Tooltip>
|
|
77
|
+
</ToggleButton>
|
|
78
|
+
<svelte:fragment slot="text">Column</svelte:fragment>
|
|
79
|
+
</Popover>
|
|
80
|
+
{/if} -->
|
|
81
|
+
{#if userInputEnabled && !input.format?.startsWith('resource-')}
|
|
82
|
+
<Popover placement="bottom" notClickable disapperTimoout={0}>
|
|
83
|
+
<ToggleButton
|
|
84
|
+
position="center"
|
|
85
|
+
value="user"
|
|
86
|
+
startIcon={{ icon: faUser }}
|
|
87
|
+
size="xs"
|
|
88
|
+
iconOnly
|
|
89
|
+
/>
|
|
90
|
+
<svelte:fragment slot="text">User Input</svelte:fragment>
|
|
91
|
+
</Popover>
|
|
92
|
+
{/if}
|
|
93
|
+
{#if 'fileUpload' in inputSpecs[inputSpecKey]}
|
|
94
|
+
<Popover placement="bottom" notClickable disapperTimoout={0}>
|
|
95
|
+
<ToggleButton
|
|
96
|
+
position="center"
|
|
97
|
+
value="upload"
|
|
98
|
+
startIcon={{ icon: faUpload }}
|
|
99
|
+
size="xs"
|
|
100
|
+
iconOnly
|
|
101
|
+
/>
|
|
102
|
+
<svelte:fragment slot="text">Upload</svelte:fragment>
|
|
103
|
+
</Popover>
|
|
104
|
+
{/if}
|
|
80
105
|
<Popover placement="bottom" notClickable disapperTimoout={0}>
|
|
81
106
|
<ToggleButton
|
|
82
|
-
position="
|
|
83
|
-
value="
|
|
84
|
-
startIcon={{ icon:
|
|
107
|
+
position="right"
|
|
108
|
+
value="connected"
|
|
109
|
+
startIcon={{ icon: faArrowRight }}
|
|
85
110
|
size="xs"
|
|
86
111
|
iconOnly
|
|
87
112
|
/>
|
|
88
|
-
<svelte:fragment slot="text">
|
|
113
|
+
<svelte:fragment slot="text">Connect</svelte:fragment>
|
|
89
114
|
</Popover>
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
position="right"
|
|
94
|
-
value="connected"
|
|
95
|
-
startIcon={{ icon: faArrowRight }}
|
|
96
|
-
size="xs"
|
|
97
|
-
iconOnly
|
|
98
|
-
/>
|
|
99
|
-
<svelte:fragment slot="text">Connect</svelte:fragment>
|
|
100
|
-
</Popover>
|
|
101
|
-
</ToggleButtonGroup>
|
|
102
|
-
{/if}
|
|
115
|
+
</ToggleButtonGroup>
|
|
116
|
+
{/if}
|
|
117
|
+
</div>
|
|
103
118
|
</div>
|
|
104
|
-
</div>
|
|
105
119
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
120
|
+
<InputsSpecEditor
|
|
121
|
+
hasRows={rowColumns}
|
|
122
|
+
{id}
|
|
123
|
+
bind:componentInput={inputSpecs[inputSpecKey]}
|
|
124
|
+
/>
|
|
125
|
+
</div>
|
|
126
|
+
{/if}
|
|
112
127
|
{/each}
|
|
113
128
|
</div>
|
|
114
129
|
{:else}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<script>import { Button } from '../../../common';
|
|
2
|
+
import { dirtyStore } from '../../../common/confirmationModal/dirtyStore';
|
|
3
|
+
import { faCopy } from '@fortawesome/free-solid-svg-icons';
|
|
4
|
+
import { getContext } from 'svelte';
|
|
5
|
+
import { createNewGridItem, deleteGridItem, findGridItem, insertNewGridItem } from '../appUtils';
|
|
6
|
+
export let component;
|
|
7
|
+
export let parent;
|
|
8
|
+
let selectedOption;
|
|
9
|
+
const { app } = getContext('AppEditorContext');
|
|
10
|
+
function listAllSubGrids(app) {
|
|
11
|
+
return app.subgrids ? Object.keys(app.subgrids) : [];
|
|
12
|
+
}
|
|
13
|
+
function findAndDelete(id) {
|
|
14
|
+
const node = findGridItem($app, id);
|
|
15
|
+
if (!node) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const data = JSON.parse(JSON.stringify(node.data));
|
|
19
|
+
$dirtyStore = true;
|
|
20
|
+
deleteGridItem($app, data, parent);
|
|
21
|
+
return data;
|
|
22
|
+
}
|
|
23
|
+
function insertComponentInSubGrid(data, targetId, targetSubGridIndex) {
|
|
24
|
+
insertNewGridItem($app, data, {
|
|
25
|
+
parentComponentId: targetId,
|
|
26
|
+
subGridIndex: targetSubGridIndex
|
|
27
|
+
}, true);
|
|
28
|
+
$app.grid = [...$app.grid];
|
|
29
|
+
}
|
|
30
|
+
function insertComponentInMainGrid(data) {
|
|
31
|
+
const newComponent = createNewGridItem($app.grid, data.id, data);
|
|
32
|
+
$app.grid = [...$app.grid, newComponent];
|
|
33
|
+
}
|
|
34
|
+
function onMove(component) {
|
|
35
|
+
const data = findAndDelete(component.id);
|
|
36
|
+
if (!data) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (selectedOption !== 'main-grid') {
|
|
40
|
+
const [targetId, targetSubGridIndex] = selectedOption.split('-');
|
|
41
|
+
insertComponentInSubGrid(data, targetId, parseInt(targetSubGridIndex));
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
insertComponentInMainGrid(data);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const defaultOption = {
|
|
48
|
+
label: 'Main grid',
|
|
49
|
+
value: 'main-grid',
|
|
50
|
+
disabled: parent === undefined
|
|
51
|
+
};
|
|
52
|
+
$: availableGrids = listAllSubGrids($app);
|
|
53
|
+
$: options = availableGrids
|
|
54
|
+
? [
|
|
55
|
+
defaultOption,
|
|
56
|
+
...availableGrids?.map((grid) => ({
|
|
57
|
+
label: grid,
|
|
58
|
+
value: grid,
|
|
59
|
+
disabled: grid === parent || (component && grid.startsWith(component.id))
|
|
60
|
+
}))
|
|
61
|
+
]
|
|
62
|
+
: [defaultOption];
|
|
63
|
+
</script>
|
|
64
|
+
|
|
65
|
+
{#if component && !options.every((option) => option.disabled)}
|
|
66
|
+
<select bind:value={selectedOption} class="w-full">
|
|
67
|
+
{#each options as option}
|
|
68
|
+
<option value={option.value} disabled={option.disabled}>{option.label}</option>
|
|
69
|
+
{/each}
|
|
70
|
+
</select>
|
|
71
|
+
<Button
|
|
72
|
+
size="xs"
|
|
73
|
+
color="dark"
|
|
74
|
+
startIcon={{ icon: faCopy }}
|
|
75
|
+
on:click={() => {
|
|
76
|
+
if (component) {
|
|
77
|
+
onMove(component)
|
|
78
|
+
}
|
|
79
|
+
}}
|
|
80
|
+
>
|
|
81
|
+
Move component: {component.id}
|
|
82
|
+
</Button>
|
|
83
|
+
{:else}
|
|
84
|
+
<p class="text-gray-500 text-sm">No grids available</p>
|
|
85
|
+
{/if}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { AppComponent } from '../component';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
component: AppComponent | undefined;
|
|
6
|
+
parent: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
[evt: string]: CustomEvent<any>;
|
|
10
|
+
};
|
|
11
|
+
slots: {};
|
|
12
|
+
};
|
|
13
|
+
export type MoveToOtherGridProps = typeof __propDef.props;
|
|
14
|
+
export type MoveToOtherGridEvents = typeof __propDef.events;
|
|
15
|
+
export type MoveToOtherGridSlots = typeof __propDef.slots;
|
|
16
|
+
export default class MoveToOtherGrid extends SvelteComponentTyped<MoveToOtherGridProps, MoveToOtherGridEvents, MoveToOtherGridSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -14,7 +14,10 @@ function onChange(event, id) {
|
|
|
14
14
|
}
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
|
-
<PanelSection
|
|
17
|
+
<PanelSection
|
|
18
|
+
title="Recompute others"
|
|
19
|
+
tooltip="Select components to recompute after running this script"
|
|
20
|
+
>
|
|
18
21
|
{#if Object.keys($runnableComponents ?? {}).filter((id) => id !== ownId).length > 0}
|
|
19
22
|
<table class="divide-y divide-gray-300 border w-full">
|
|
20
23
|
<thead class="bg-gray-50">
|
|
@@ -86,17 +86,28 @@ function deleteComponent(cid) {
|
|
|
86
86
|
}}
|
|
87
87
|
on:keypress
|
|
88
88
|
>
|
|
89
|
+
<Badge color="dark-indigo">
|
|
90
|
+
{component.id}
|
|
91
|
+
</Badge>
|
|
92
|
+
|
|
93
|
+
<div>
|
|
94
|
+
<TableActionLabel componentInput={component.configuration.label} />
|
|
95
|
+
</div>
|
|
89
96
|
<div>
|
|
90
97
|
<Button variant="border" color="red" on:click={() => deleteComponent(component.id)}>
|
|
91
98
|
<Icon class="h-3" data={faTrashAlt} />
|
|
92
99
|
</Button>
|
|
93
100
|
</div>
|
|
94
|
-
<div>
|
|
95
|
-
<TableActionLabel componentInput={component.configuration.label} />
|
|
96
|
-
</div>
|
|
97
|
-
<Badge color="dark-indigo">
|
|
98
|
-
{component.id}
|
|
99
|
-
</Badge>
|
|
100
101
|
</div>
|
|
101
102
|
{/each}
|
|
103
|
+
<div class="w-full">
|
|
104
|
+
<Button
|
|
105
|
+
btnClasses="w-full"
|
|
106
|
+
color="light"
|
|
107
|
+
variant="border"
|
|
108
|
+
startIcon={{ icon: faPlus }}
|
|
109
|
+
on:click={addComponent}
|
|
110
|
+
iconOnly
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
102
113
|
</PanelSection>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type {
|
|
2
|
+
import type { BaseAppComponent } from '../../types';
|
|
3
|
+
import type { ButtonComponent } from '../component';
|
|
3
4
|
declare const __propDef: {
|
|
4
5
|
props: {
|
|
5
6
|
components: (BaseAppComponent & ButtonComponent)[];
|
|
@@ -14,9 +14,11 @@ export let tooltip = '';
|
|
|
14
14
|
noPadding ? '' : smallPadding ? 'p-2' : 'p-4'
|
|
15
15
|
)}
|
|
16
16
|
>
|
|
17
|
-
<div class="flex justify-between items-center w-full gap-1">
|
|
18
|
-
<div class="text-sm font-extrabold {titlePadding}">
|
|
19
|
-
|
|
17
|
+
<div class="flex justify-between flex-wrap items-center w-full gap-1">
|
|
18
|
+
<div class="text-sm inline-flex items-center font-extrabold {titlePadding}">
|
|
19
|
+
<span class="truncate">
|
|
20
|
+
{title}
|
|
21
|
+
</span>
|
|
20
22
|
{#if tooltip}
|
|
21
23
|
<Tooltip>
|
|
22
24
|
{tooltip}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<script>import { Loader2 } from 'lucide-svelte';
|
|
2
|
+
import { Popup } from '../../../../common';
|
|
3
|
+
export let componentInput;
|
|
4
|
+
let anchor;
|
|
5
|
+
let loading = false;
|
|
6
|
+
let items;
|
|
7
|
+
let filteredItems;
|
|
8
|
+
let search = '';
|
|
9
|
+
$: if (search) {
|
|
10
|
+
filteredItems = items.filter((item) => {
|
|
11
|
+
return item.label.toLowerCase().includes(search.toLowerCase());
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
filteredItems = items;
|
|
16
|
+
}
|
|
17
|
+
async function getData() {
|
|
18
|
+
if (items)
|
|
19
|
+
return;
|
|
20
|
+
loading = true;
|
|
21
|
+
const data = await import('lucide-svelte/dist/svelte/icons');
|
|
22
|
+
filteredItems = items = Object.entries(data)
|
|
23
|
+
.filter(([key]) => !(key.endsWith('Icon') || key.startsWith('Lucide')))
|
|
24
|
+
.map(([key, icon]) => ({ label: key, icon }));
|
|
25
|
+
loading = false;
|
|
26
|
+
}
|
|
27
|
+
function formatName(name) {
|
|
28
|
+
// Inserts space before capital letters and numbers
|
|
29
|
+
return (name
|
|
30
|
+
?.replace(/([A-Z])/g, ' $1')
|
|
31
|
+
.trim()
|
|
32
|
+
.replace(/([a-z])(\d)/i, '$1 $2') || '');
|
|
33
|
+
}
|
|
34
|
+
function select(label) {
|
|
35
|
+
componentInput.value = label;
|
|
36
|
+
if (document.activeElement?.blur) {
|
|
37
|
+
;
|
|
38
|
+
document.activeElement.blur();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<input readonly value={formatName(componentInput.value)} bind:this={anchor} on:focus={getData} />
|
|
44
|
+
{#if anchor}
|
|
45
|
+
<Popup ref={anchor} options={{ placement: 'bottom' }} let:close>
|
|
46
|
+
<div class="max-w-xs shadow-[0_10px_40px_-5px_rgba(0,0,0,0.25)] bg-white rounded-md p-2">
|
|
47
|
+
{#if loading}
|
|
48
|
+
<div class="center-center p-2">
|
|
49
|
+
<Loader2 class="animate-spin" size={18} />
|
|
50
|
+
</div>
|
|
51
|
+
{:else if filteredItems}
|
|
52
|
+
<input bind:value={search} type="text" placeholder="Search" class="col-span-4 mb-2" />
|
|
53
|
+
<div class="grid gap-1 grid-cols-4 max-h-[300px] overflow-auto">
|
|
54
|
+
{#each filteredItems as { label, icon }}
|
|
55
|
+
{@const formatedLabel = formatName(label)}
|
|
56
|
+
<button
|
|
57
|
+
type="button"
|
|
58
|
+
title={formatedLabel}
|
|
59
|
+
on:click={() => {
|
|
60
|
+
select(label)
|
|
61
|
+
close()
|
|
62
|
+
}}
|
|
63
|
+
class="w-full center-center flex-col font-normal p-1
|
|
64
|
+
hover:bg-gray-100 focus:bg-gray-100 rounded duration-200
|
|
65
|
+
{label === componentInput.value ? 'text-blue-600 bg-blue-50 pointer-events-none' : ''}"
|
|
66
|
+
>
|
|
67
|
+
<svelte:component this={icon} size={22} />
|
|
68
|
+
<span class="inline-block w-full text-[10px] ellipsize pt-0.5">
|
|
69
|
+
{formatedLabel}
|
|
70
|
+
</span>
|
|
71
|
+
</button>
|
|
72
|
+
{:else}
|
|
73
|
+
<div class="col-span-4 text-center text-gray-700 text-sm p-2">
|
|
74
|
+
No icons match your search
|
|
75
|
+
</div>
|
|
76
|
+
{/each}
|
|
77
|
+
</div>
|
|
78
|
+
{:else}
|
|
79
|
+
<div class="text-center text-sm text-gray-600 p-2"> Couldn't load options </div>
|
|
80
|
+
{/if}
|
|
81
|
+
</div>
|
|
82
|
+
</Popup>
|
|
83
|
+
{/if}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { AppInput, StaticInput } from '../../../inputType';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
componentInput: StaticInput<string> & Extract<AppInput, {
|
|
6
|
+
fieldType: 'icon-select';
|
|
7
|
+
}>;
|
|
8
|
+
};
|
|
9
|
+
events: {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {};
|
|
13
|
+
};
|
|
14
|
+
export type IconSelectInputProps = typeof __propDef.props;
|
|
15
|
+
export type IconSelectInputEvents = typeof __propDef.events;
|
|
16
|
+
export type IconSelectInputSlots = typeof __propDef.slots;
|
|
17
|
+
export default class IconSelectInput extends SvelteComponentTyped<IconSelectInputProps, IconSelectInputEvents, IconSelectInputSlots> {
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -4,6 +4,7 @@ import ArrayStaticInputEditor from '../ArrayStaticInputEditor.svelte';
|
|
|
4
4
|
import ResourcePicker from '../../../../ResourcePicker.svelte';
|
|
5
5
|
import JsonEditor from './JsonEditor.svelte';
|
|
6
6
|
import { getContext } from 'svelte';
|
|
7
|
+
import IconSelectInput from './IconSelectInput.svelte';
|
|
7
8
|
export let componentInput;
|
|
8
9
|
const { onchange } = getContext('AppEditorContext');
|
|
9
10
|
$: componentInput && onchange?.();
|
|
@@ -14,6 +15,8 @@ $: componentInput && onchange?.();
|
|
|
14
15
|
<input type="number" bind:value={componentInput.value} />
|
|
15
16
|
{:else if componentInput.fieldType === 'textarea'}
|
|
16
17
|
<textarea bind:value={componentInput.value} />
|
|
18
|
+
{:else if componentInput.fieldType === 'date'}
|
|
19
|
+
<input type="date" bind:value={componentInput.value} />
|
|
17
20
|
{:else if componentInput.fieldType === 'boolean'}
|
|
18
21
|
<Toggle bind:checked={componentInput.value} />
|
|
19
22
|
{:else if componentInput.fieldType === 'select'}
|
|
@@ -24,6 +27,8 @@ $: componentInput && onchange?.();
|
|
|
24
27
|
</option>
|
|
25
28
|
{/each}
|
|
26
29
|
</select>
|
|
30
|
+
{:else if componentInput.fieldType === 'icon-select'}
|
|
31
|
+
<IconSelectInput bind:componentInput />
|
|
27
32
|
{:else if componentInput.fieldType === 'object'}
|
|
28
33
|
{#if componentInput?.format?.startsWith('resource-')}
|
|
29
34
|
<ResourcePicker
|
|
@@ -48,7 +53,7 @@ $: componentInput && onchange?.();
|
|
|
48
53
|
</div>
|
|
49
54
|
{/if}
|
|
50
55
|
{:else if componentInput.fieldType === 'array'}
|
|
51
|
-
<ArrayStaticInputEditor bind:componentInput />
|
|
56
|
+
<ArrayStaticInputEditor bind:componentInput on:deleteArrayItem />
|
|
52
57
|
{:else}
|
|
53
58
|
<input type="text" placeholder="Static value" bind:value={componentInput.value} />
|
|
54
59
|
{/if}
|