windmill-components 1.46.3 → 1.52.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/common.d.ts +6 -5
- package/components/ApiConnectForm.svelte +21 -0
- package/components/ApiConnectForm.svelte.d.ts +18 -0
- package/components/AppConnect.svelte +229 -174
- package/components/AppConnect.svelte.d.ts +4 -3
- package/components/ArgInfo.svelte +2 -2
- package/components/ArgInfo.svelte.d.ts +3 -3
- package/components/ArgInput.svelte +82 -28
- package/components/ArgInput.svelte.d.ts +10 -3
- package/components/Badge.svelte.d.ts +3 -3
- package/components/Button.svelte +1 -1
- package/components/Button.svelte.d.ts +3 -3
- package/components/ButtonAndDropdown.svelte.d.ts +3 -3
- package/components/CenteredModal.svelte +20 -13
- package/components/CenteredModal.svelte.d.ts +3 -3
- package/components/ChevronButton.svelte.d.ts +3 -3
- package/components/CollapseLink.svelte.d.ts +3 -3
- package/components/CronInput.svelte +1 -1
- package/components/CronInput.svelte.d.ts +3 -3
- package/components/DisplayResult.svelte.d.ts +3 -3
- package/components/Dropdown.svelte +13 -7
- package/components/Dropdown.svelte.d.ts +3 -3
- package/components/Editor.svelte +3 -2
- package/components/Editor.svelte.d.ts +4 -3
- package/components/EditorBar.svelte +34 -38
- package/components/EditorBar.svelte.d.ts +3 -3
- package/components/FieldHeader.svelte +4 -3
- package/components/FieldHeader.svelte.d.ts +3 -3
- package/components/FlowBuilder.svelte +37 -14
- package/components/FlowBuilder.svelte.d.ts +4 -3
- package/components/FlowGraphViewer.svelte +76 -0
- package/components/FlowGraphViewer.svelte.d.ts +23 -0
- package/components/FlowJobResult.svelte.d.ts +3 -3
- package/components/FlowMetadata.svelte.d.ts +3 -3
- package/components/FlowPreviewContent.svelte +54 -64
- package/components/FlowPreviewContent.svelte.d.ts +3 -3
- package/components/FlowStatusViewer.svelte +156 -106
- package/components/FlowStatusViewer.svelte.d.ts +5 -4
- package/components/FlowViewer.svelte +3 -78
- package/components/FlowViewer.svelte.d.ts +3 -3
- package/components/GroupModal.svelte.d.ts +3 -3
- package/components/HighlightCode.svelte.d.ts +3 -3
- package/components/IconedPath.svelte.d.ts +3 -3
- package/components/IconedResourceType.svelte +3 -61
- package/components/IconedResourceType.svelte.d.ts +3 -3
- package/components/InputTransformForm.svelte +108 -77
- package/components/InputTransformForm.svelte.d.ts +10 -5
- package/components/InputTransformsViewer.svelte.d.ts +3 -3
- package/components/InviteGlobalUser.svelte.d.ts +3 -3
- package/components/InviteUser.svelte.d.ts +3 -3
- package/components/ItemPicker.svelte +77 -29
- package/components/ItemPicker.svelte.d.ts +6 -4
- package/components/JobArgs.svelte +5 -5
- package/components/JobArgs.svelte.d.ts +3 -3
- package/components/JobStatus.svelte.d.ts +3 -3
- package/components/LogViewer.svelte +19 -4
- package/components/LogViewer.svelte.d.ts +3 -3
- package/components/Modal.svelte.d.ts +3 -3
- package/components/ModulePreview.svelte +8 -0
- package/components/ModulePreview.svelte.d.ts +3 -3
- package/components/ObjectResourceInput.svelte +37 -21
- package/components/ObjectResourceInput.svelte.d.ts +4 -3
- package/components/ObjectTypeNarrowing.svelte.d.ts +3 -3
- package/components/PageHeader.svelte +2 -2
- package/components/PageHeader.svelte.d.ts +3 -3
- package/components/Password.svelte +2 -2
- package/components/Password.svelte.d.ts +4 -4
- package/components/Path.svelte +4 -1
- package/components/Path.svelte.d.ts +5 -4
- package/components/Popover.svelte.d.ts +3 -3
- package/components/RadioButton.svelte.d.ts +3 -3
- package/components/Required.svelte.d.ts +3 -3
- package/components/ResourceEditor.svelte +73 -163
- package/components/ResourceEditor.svelte.d.ts +3 -5
- package/components/ResourcePicker.svelte +33 -30
- package/components/ResourcePicker.svelte.d.ts +3 -3
- package/components/ResourceTypePicker.svelte.d.ts +3 -3
- package/components/RunChart.svelte.d.ts +3 -3
- package/components/RunForm.svelte.d.ts +3 -3
- package/components/SchemaEditor.svelte +55 -23
- package/components/SchemaEditor.svelte.d.ts +3 -3
- package/components/SchemaEditorProperty.svelte.d.ts +3 -3
- package/components/SchemaForm.svelte +97 -33
- package/components/SchemaForm.svelte.d.ts +8 -4
- package/components/SchemaModal.svelte.d.ts +4 -4
- package/components/SchemaViewer.svelte.d.ts +3 -3
- package/components/ScriptBuilder.svelte +64 -66
- package/components/ScriptBuilder.svelte.d.ts +3 -3
- package/components/ScriptEditor.svelte +26 -28
- package/components/ScriptEditor.svelte.d.ts +4 -3
- package/components/ScriptPicker.svelte +28 -38
- package/components/ScriptPicker.svelte.d.ts +4 -3
- package/components/ScriptSchema.svelte +1 -1
- package/components/ScriptSchema.svelte.d.ts +3 -3
- package/components/SearchItems.svelte +29 -0
- package/components/SearchItems.svelte.d.ts +23 -0
- package/components/ShareModal.svelte.d.ts +3 -3
- package/components/SharedBadge.svelte +4 -2
- package/components/SharedBadge.svelte.d.ts +3 -3
- package/components/SimpleEditor.svelte +33 -7
- package/components/SimpleEditor.svelte.d.ts +4 -4
- package/components/Star.svelte +42 -0
- package/components/Star.svelte.d.ts +19 -0
- package/components/StringTypeNarrowing.svelte.d.ts +3 -3
- package/components/SuperadminSettings.svelte +18 -15
- package/components/SuperadminSettings.svelte.d.ts +3 -3
- package/components/TableCustom.svelte +1 -1
- package/components/TableCustom.svelte.d.ts +3 -3
- package/components/TableSimple.svelte.d.ts +3 -3
- package/components/TestJobLoader.svelte +41 -24
- package/components/TestJobLoader.svelte.d.ts +9 -3
- package/components/Toggle.svelte.d.ts +3 -3
- package/components/Tooltip.svelte.d.ts +3 -3
- package/components/UserSettings.svelte.d.ts +3 -3
- package/components/VariableEditor.svelte +71 -32
- package/components/VariableEditor.svelte.d.ts +5 -3
- package/components/apps/CreateApp.svelte +65 -0
- package/components/apps/CreateApp.svelte.d.ts +14 -0
- package/components/apps/components/DisplayComponent.svelte +23 -0
- package/components/apps/components/DisplayComponent.svelte.d.ts +19 -0
- package/components/apps/components/buttons/AppButton.svelte +42 -0
- package/components/apps/components/buttons/AppButton.svelte.d.ts +25 -0
- package/components/apps/components/dataDisplay/AppBarChart.svelte +18 -0
- package/components/apps/components/dataDisplay/AppBarChart.svelte.d.ts +23 -0
- package/components/apps/components/dataDisplay/AppPieChart.svelte +22 -0
- package/components/apps/components/dataDisplay/AppPieChart.svelte.d.ts +23 -0
- package/components/apps/components/dataDisplay/AppTable.svelte +135 -0
- package/components/apps/components/dataDisplay/AppTable.svelte.d.ts +27 -0
- package/components/apps/components/dataDisplay/AppText.svelte +15 -0
- package/components/apps/components/dataDisplay/AppText.svelte.d.ts +21 -0
- package/components/apps/components/helpers/AlignWrapper.svelte +29 -0
- package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +19 -0
- package/components/apps/components/helpers/DebouncedInput.svelte +16 -0
- package/components/apps/components/helpers/DebouncedInput.svelte.d.ts +19 -0
- package/components/apps/components/helpers/InputValue.svelte +37 -0
- package/components/apps/components/helpers/InputValue.svelte.d.ts +18 -0
- package/components/apps/components/helpers/RunnableComponent.svelte +182 -0
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +28 -0
- package/components/apps/components/index.d.ts +22 -0
- package/components/apps/components/index.js +42 -0
- package/components/apps/components/selectInputs/AppCheckbox.svelte +26 -0
- package/components/apps/components/selectInputs/AppCheckbox.svelte.d.ts +22 -0
- package/components/apps/editor/AppEditor.svelte +105 -0
- package/components/apps/editor/AppEditor.svelte.d.ts +19 -0
- package/components/apps/editor/AppEditorHeader.svelte +75 -0
- package/components/apps/editor/AppEditorHeader.svelte.d.ts +19 -0
- package/components/apps/editor/ComponentEditor.svelte +64 -0
- package/components/apps/editor/ComponentEditor.svelte.d.ts +18 -0
- package/components/apps/editor/GridEditor.svelte +45 -0
- package/components/apps/editor/GridEditor.svelte.d.ts +14 -0
- package/components/apps/editor/componentsPanel/ComponentList.svelte +92 -0
- package/components/apps/editor/componentsPanel/ComponentList.svelte.d.ts +14 -0
- package/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +7 -0
- package/components/apps/editor/componentsPanel/componentDefaultProps.js +9 -0
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +4 -0
- package/components/apps/editor/componentsPanel/componentStaticValues.js +6 -0
- package/components/apps/editor/componentsPanel/data.d.ts +3 -0
- package/components/apps/editor/componentsPanel/data.js +158 -0
- package/components/apps/editor/componentsPanel/store.d.ts +9 -0
- package/components/apps/editor/componentsPanel/store.js +16 -0
- package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +22 -0
- package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte.d.ts +19 -0
- package/components/apps/editor/contextPanel/ContextPanel.svelte +184 -0
- package/components/apps/editor/contextPanel/ContextPanel.svelte.d.ts +16 -0
- package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte +29 -0
- package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte.d.ts +16 -0
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +196 -0
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +18 -0
- package/components/apps/editor/settingsPanel/DynamicInputEditor.svelte +64 -0
- package/components/apps/editor/settingsPanel/DynamicInputEditor.svelte.d.ts +17 -0
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +11 -0
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +18 -0
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +99 -0
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +20 -0
- package/components/apps/editor/settingsPanel/PickFlow.svelte +37 -0
- package/components/apps/editor/settingsPanel/PickFlow.svelte.d.ts +16 -0
- package/components/apps/editor/settingsPanel/PickInlineScript.svelte +38 -0
- package/components/apps/editor/settingsPanel/PickInlineScript.svelte.d.ts +20 -0
- package/components/apps/editor/settingsPanel/SectionPanel.svelte +70 -0
- package/components/apps/editor/settingsPanel/SectionPanel.svelte.d.ts +19 -0
- package/components/apps/editor/settingsPanel/StaticInputEditor.svelte +29 -0
- package/components/apps/editor/settingsPanel/StaticInputEditor.svelte.d.ts +18 -0
- package/components/apps/editor/settingsPanel/TableActions.svelte +107 -0
- package/components/apps/editor/settingsPanel/TableActions.svelte.d.ts +19 -0
- package/components/apps/editor/settingsPanel/UserInputEditor.svelte +2 -0
- package/components/apps/editor/settingsPanel/UserInputEditor.svelte.d.ts +14 -0
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte +11 -0
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +19 -0
- package/components/apps/gridUtils.d.ts +11 -0
- package/components/apps/gridUtils.js +24 -0
- package/components/apps/rx.d.ts +27 -0
- package/components/apps/rx.js +87 -0
- package/components/apps/types.d.ts +120 -0
- package/components/apps/types.js +1 -0
- package/components/apps/utils.d.ts +36 -0
- package/components/apps/utils.js +96 -0
- package/components/common/actionRow/ActionRow.svelte.d.ts +3 -3
- package/components/common/alert/Alert.svelte +29 -7
- package/components/common/alert/Alert.svelte.d.ts +4 -3
- package/components/common/alert/model.d.ts +1 -1
- package/components/common/badge/Badge.svelte +3 -7
- package/components/common/badge/Badge.svelte.d.ts +6 -4
- package/components/common/badge/model.d.ts +2 -2
- package/components/common/breadcrumb/Breadcrumb.svelte.d.ts +3 -3
- package/components/common/button/Button.svelte +24 -6
- package/components/common/button/Button.svelte.d.ts +6 -4
- package/components/common/button/ButtonPopup.svelte +3 -1
- package/components/common/button/ButtonPopup.svelte.d.ts +5 -4
- package/components/common/button/ButtonPopupItem.svelte.d.ts +3 -3
- package/components/common/button/model.d.ts +2 -1
- package/components/common/button/model.js +2 -1
- package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +3 -3
- package/components/common/confirmationModal/UnsavedConfirmationModal.svelte.d.ts +3 -3
- package/components/common/drawer/Drawer.svelte +5 -1
- package/components/common/drawer/Drawer.svelte.d.ts +3 -3
- package/components/common/drawer/DrawerContent.svelte +11 -3
- package/components/common/drawer/DrawerContent.svelte.d.ts +5 -3
- package/components/common/languageIcons/LanguageIcon.svelte +6 -4
- package/components/common/languageIcons/LanguageIcon.svelte.d.ts +4 -4
- package/components/common/menu/Menu.svelte +7 -5
- package/components/common/menu/Menu.svelte.d.ts +7 -6
- package/components/common/menu/MenuItem.svelte +1 -0
- package/components/common/popup/Popup.svelte.d.ts +3 -3
- package/components/common/skeleton/Skeleton.svelte.d.ts +3 -3
- package/components/common/skeleton/SkeletonElement.svelte.d.ts +3 -3
- package/components/common/skeleton/model.d.ts +4 -4
- package/components/common/table/AppRow.svelte +61 -0
- package/components/common/table/AppRow.svelte.d.ts +23 -0
- package/components/common/table/FlowRow.svelte +136 -0
- package/components/common/table/FlowRow.svelte.d.ts +25 -0
- package/components/common/table/LanguageBadge.svelte +32 -0
- package/components/common/table/LanguageBadge.svelte.d.ts +24 -0
- package/components/common/table/Row.svelte +47 -0
- package/components/common/table/Row.svelte.d.ts +27 -0
- package/components/common/table/RowIcon.svelte +23 -0
- package/components/common/table/RowIcon.svelte.d.ts +16 -0
- package/components/common/table/ScriptRow.svelte +147 -0
- package/components/common/table/ScriptRow.svelte.d.ts +25 -0
- package/components/common/table/Table.svelte +9 -0
- package/components/common/table/Table.svelte.d.ts +23 -0
- package/components/common/tabs/Tab.svelte +15 -4
- package/components/common/tabs/Tab.svelte.d.ts +5 -3
- package/components/common/tabs/TabContent.svelte.d.ts +3 -3
- package/components/common/tabs/Tabs.svelte +5 -1
- package/components/common/tabs/Tabs.svelte.d.ts +4 -4
- package/components/common/toggleButton/ToggleButton.svelte +12 -9
- package/components/common/toggleButton/ToggleButton.svelte.d.ts +6 -4
- package/components/common/toggleButton/ToggleButtonGroup.svelte +12 -19
- package/components/common/toggleButton/ToggleButtonGroup.svelte.d.ts +10 -8
- package/components/flows/CreateActionsFlow.svelte +66 -0
- package/components/flows/CreateActionsFlow.svelte.d.ts +14 -0
- package/components/flows/FlowEditor.svelte +22 -5
- package/components/flows/FlowEditor.svelte.d.ts +4 -3
- package/components/flows/FlowProgressBar.svelte.d.ts +3 -3
- package/components/flows/common/FlowCard.svelte.d.ts +3 -3
- package/components/flows/common/FlowCardHeader.svelte +3 -1
- package/components/flows/common/FlowCardHeader.svelte.d.ts +3 -3
- package/components/flows/content/CapturePayload.svelte.d.ts +3 -3
- package/components/flows/content/DynamicInputHelpBox.svelte +2 -32
- package/components/flows/content/DynamicInputHelpBox.svelte.d.ts +4 -6
- package/components/flows/content/FlowBranchAllWrapper.svelte.d.ts +3 -3
- package/components/flows/content/FlowBranchOneWrapper.svelte +3 -2
- package/components/flows/content/FlowBranchOneWrapper.svelte.d.ts +3 -3
- package/components/flows/content/FlowBranchesWrapper.svelte +2 -2
- package/components/flows/content/FlowBranchesWrapper.svelte.d.ts +3 -3
- package/components/flows/content/FlowEditorPanel.svelte +2 -0
- package/components/flows/content/FlowEditorPanel.svelte.d.ts +3 -3
- package/components/flows/content/FlowFailureModule.svelte.d.ts +3 -3
- package/components/flows/content/FlowInput.svelte +9 -12
- package/components/flows/content/FlowInput.svelte.d.ts +3 -3
- package/components/flows/content/FlowInputs.svelte +119 -140
- package/components/flows/content/FlowInputs.svelte.d.ts +4 -7
- package/components/flows/content/FlowLoop.svelte +3 -2
- package/components/flows/content/FlowLoop.svelte.d.ts +3 -3
- package/components/flows/content/FlowModuleComponent.svelte +49 -45
- package/components/flows/content/FlowModuleComponent.svelte.d.ts +3 -3
- package/components/flows/content/FlowModuleEarlyStop.svelte +3 -2
- package/components/flows/content/FlowModuleEarlyStop.svelte.d.ts +3 -3
- package/components/flows/content/FlowModuleHeader.svelte +6 -3
- package/components/flows/content/FlowModuleHeader.svelte.d.ts +3 -3
- package/components/flows/content/FlowModuleScript.svelte.d.ts +3 -3
- package/components/flows/content/FlowModuleSuspend.svelte +9 -3
- package/components/flows/content/FlowModuleSuspend.svelte.d.ts +3 -3
- package/components/flows/content/FlowModuleWrapper.svelte +0 -22
- package/components/flows/content/FlowModuleWrapper.svelte.d.ts +3 -3
- package/components/flows/content/FlowRetries.svelte.d.ts +3 -3
- package/components/flows/content/FlowSchedules.svelte.d.ts +3 -3
- package/components/flows/content/FlowSettings.svelte +88 -93
- package/components/flows/content/FlowSettings.svelte.d.ts +3 -3
- package/components/flows/content/RemoveStepConfirmationModal.svelte.d.ts +3 -3
- package/components/flows/flowState.d.ts +2 -2
- package/components/flows/flowStateUtils.d.ts +1 -0
- package/components/flows/flowStateUtils.js +13 -2
- package/components/flows/flowStore.d.ts +1 -1
- package/components/flows/flowStore.js +1 -1
- package/components/flows/header/FlowImportExportMenu.svelte +9 -23
- package/components/flows/header/FlowImportExportMenu.svelte.d.ts +3 -3
- package/components/flows/header/FlowPreviewButtons.svelte +20 -16
- package/components/flows/header/FlowPreviewButtons.svelte.d.ts +3 -3
- package/components/flows/map/FlowBranchAllMap.svelte +47 -37
- package/components/flows/map/FlowBranchAllMap.svelte.d.ts +3 -3
- package/components/flows/map/FlowBranchOneMap.svelte +50 -42
- package/components/flows/map/FlowBranchOneMap.svelte.d.ts +3 -3
- package/components/flows/map/FlowErrorHandlerItem.svelte +5 -3
- package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +3 -3
- package/components/flows/map/FlowInputsItem.svelte +3 -2
- package/components/flows/map/FlowInputsItem.svelte.d.ts +3 -3
- package/components/flows/map/FlowModuleSchemaItem.svelte +26 -31
- package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +5 -5
- package/components/flows/map/FlowModuleSchemaMap.svelte +50 -92
- package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +3 -4
- package/components/flows/map/FlowSettingsItem.svelte +8 -7
- package/components/flows/map/FlowSettingsItem.svelte.d.ts +3 -3
- package/components/flows/map/InsertModuleButton.svelte +62 -8
- package/components/flows/map/InsertModuleButton.svelte.d.ts +4 -4
- package/components/flows/map/MapItem.svelte +30 -16
- package/components/flows/map/MapItem.svelte.d.ts +4 -6
- package/components/flows/pickers/FlowScriptPicker.svelte +11 -4
- package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +8 -6
- package/components/flows/pickers/PickHubScript.svelte +74 -29
- package/components/flows/pickers/PickHubScript.svelte.d.ts +5 -6
- package/components/flows/pickers/PickScript.svelte +16 -9
- package/components/flows/pickers/PickScript.svelte.d.ts +3 -4
- package/components/flows/pickers/WorkspaceScriptPicker.svelte +53 -0
- package/components/flows/pickers/WorkspaceScriptPicker.svelte.d.ts +19 -0
- package/components/flows/pickers/model.d.ts +5 -3
- package/components/flows/previousResults.d.ts +2 -2
- package/components/flows/previousResults.js +5 -5
- package/components/flows/propPicker/PropPickerWrapper.svelte +2 -2
- package/components/flows/propPicker/PropPickerWrapper.svelte.d.ts +7 -7
- package/components/flows/scheduleUtils.d.ts +1 -1
- package/components/flows/scheduleUtils.js +1 -1
- package/components/flows/types.d.ts +1 -1
- package/components/flows/utils.d.ts +1 -1
- package/components/flows/utils.js +4 -9
- package/components/graph/FlowGraph.svelte +57 -18
- package/components/graph/FlowGraph.svelte.d.ts +6 -4
- package/components/graph/model.d.ts +7 -6
- package/components/icons/AirtableIcon.svelte.d.ts +3 -3
- package/components/icons/DbIcon.svelte.d.ts +3 -3
- package/components/icons/DiscordIcon.svelte.d.ts +3 -3
- package/components/icons/GCloudIcon.svelte.d.ts +3 -3
- package/components/icons/GItlabIcon.svelte.d.ts +3 -3
- package/components/icons/GSheetsIcon.svelte.d.ts +3 -3
- package/components/icons/GcalIcon.svelte.d.ts +3 -3
- package/components/icons/GdriveIcon.svelte.d.ts +3 -3
- package/components/icons/GithubIcon.svelte.d.ts +3 -3
- package/components/icons/GmailIcon.svelte.d.ts +3 -3
- package/components/icons/HatIcon.svelte.d.ts +3 -3
- package/components/icons/HttpIcon.svelte.d.ts +3 -3
- package/components/icons/Mail.svelte.d.ts +3 -3
- package/components/icons/MailchimpIcon.svelte +18 -0
- package/components/icons/MailchimpIcon.svelte.d.ts +17 -0
- package/components/icons/MastodonIcon.svelte.d.ts +3 -3
- package/components/icons/MatrixIcon.svelte.d.ts +3 -3
- package/components/icons/Mysql.svelte.d.ts +3 -3
- package/components/icons/PostgresIcon.svelte.d.ts +3 -3
- package/components/icons/S3Icon.svelte.d.ts +3 -3
- package/components/icons/SendgridIcon.svelte +66 -0
- package/components/icons/SendgridIcon.svelte.d.ts +17 -0
- package/components/icons/Slack.svelte.d.ts +3 -3
- package/components/icons/TogglIcon.svelte.d.ts +3 -3
- package/components/icons/WindmillIcon.svelte.d.ts +3 -3
- package/components/icons/index.d.ts +48 -0
- package/components/icons/index.js +48 -0
- package/components/jobs/JobDetail.svelte +2 -2
- package/components/jobs/JobDetail.svelte.d.ts +3 -3
- package/components/preview/FlowPreviewStatus.svelte.d.ts +3 -3
- package/components/progressBar/ProgressBar.svelte.d.ts +3 -3
- package/components/progressBar/ProgressBarGeneralPart.svelte.d.ts +3 -3
- package/components/progressBar/ProgressBarLoopAccessor.svelte.d.ts +3 -3
- package/components/progressBar/ProgressBarLoopPart.svelte.d.ts +3 -3
- package/components/progressBar/model.d.ts +9 -9
- package/components/propertyPicker/ObjectViewer.svelte +34 -9
- package/components/propertyPicker/ObjectViewer.svelte.d.ts +4 -3
- package/components/propertyPicker/PropPicker.svelte +118 -110
- package/components/propertyPicker/PropPicker.svelte.d.ts +3 -3
- package/components/propertyPicker/PropPickerResult.svelte +0 -1
- package/components/propertyPicker/PropPickerResult.svelte.d.ts +3 -3
- package/components/scriptEditor/LogPanel.svelte +4 -4
- package/components/scriptEditor/LogPanel.svelte.d.ts +3 -3
- package/components/scripts/{CreateActions.svelte → CreateActionsScript.svelte} +7 -46
- package/components/scripts/CreateActionsScript.svelte.d.ts +14 -0
- package/components/sidebar/MenuLink.svelte +7 -4
- package/components/sidebar/MenuLink.svelte.d.ts +4 -3
- package/components/sidebar/SidebarContent.svelte +25 -18
- package/components/sidebar/SidebarContent.svelte.d.ts +7 -3
- package/components/sidebar/UserMenu.svelte +1 -1
- package/components/sidebar/UserMenu.svelte.d.ts +3 -3
- package/components/sidebar/WorkspaceMenu.svelte +3 -3
- package/components/sidebar/WorkspaceMenu.svelte.d.ts +3 -3
- package/components/splitPanes/SplitPanesWrapper.svelte.d.ts +3 -3
- package/editorUtils.d.ts +1 -1
- package/editorUtils.js +2 -2
- package/gen/core/ApiRequestOptions.d.ts +1 -1
- package/gen/core/ApiResult.d.ts +1 -1
- package/gen/core/OpenAPI.d.ts +3 -3
- package/gen/core/OpenAPI.js +1 -1
- package/gen/index.d.ts +2 -0
- package/gen/index.js +1 -0
- package/gen/models/AppWithLastVersion.d.ts +12 -12
- package/gen/models/AuditLog.d.ts +1 -1
- package/gen/models/BranchAll.d.ts +1 -1
- package/gen/models/BranchOne.d.ts +1 -1
- package/gen/models/CompletedJob.d.ts +1 -1
- package/gen/models/ContextualVariable.d.ts +1 -1
- package/gen/models/CreateResource.d.ts +1 -2
- package/gen/models/CreateVariable.d.ts +1 -1
- package/gen/models/CreateWorkspace.d.ts +1 -1
- package/gen/models/EditResource.d.ts +1 -1
- package/gen/models/EditResourceType.d.ts +1 -1
- package/gen/models/EditSchedule.d.ts +1 -1
- package/gen/models/EditVariable.d.ts +1 -1
- package/gen/models/EditWorkspaceUser.d.ts +1 -1
- package/gen/models/Flow.d.ts +1 -1
- package/gen/models/FlowMetadata.d.ts +2 -1
- package/gen/models/FlowModule.d.ts +1 -1
- package/gen/models/FlowModuleValue.d.ts +1 -1
- package/gen/models/FlowPreview.d.ts +1 -1
- package/gen/models/FlowStatus.d.ts +1 -1
- package/gen/models/FlowStatusModule.d.ts +1 -1
- package/gen/models/FlowValue.d.ts +1 -1
- package/gen/models/ForloopFlow.d.ts +1 -1
- package/gen/models/GlobalUserInfo.d.ts +1 -1
- package/gen/models/Group.d.ts +1 -1
- package/gen/models/Identity.d.ts +1 -1
- package/gen/models/InputTransform.d.ts +1 -1
- package/gen/models/JavascriptTransform.d.ts +1 -1
- package/gen/models/Job.d.ts +1 -1
- package/gen/models/ListableApp.d.ts +10 -8
- package/gen/models/ListableResource.d.ts +13 -0
- package/gen/models/ListableResource.js +4 -0
- package/gen/models/ListableVariable.d.ts +4 -1
- package/gen/models/Login.d.ts +1 -1
- package/gen/models/MainArgSignature.d.ts +1 -1
- package/gen/models/NewSchedule.d.ts +1 -1
- package/gen/models/NewToken.d.ts +1 -1
- package/gen/models/NewUser.d.ts +1 -1
- package/gen/models/OpenFlow.d.ts +1 -1
- package/gen/models/OpenFlowWPath.d.ts +1 -1
- package/gen/models/PathScript.d.ts +1 -1
- package/gen/models/Policy.d.ts +1 -1
- package/gen/models/Preview.d.ts +1 -1
- package/gen/models/QueuedJob.d.ts +1 -1
- package/gen/models/RawScript.d.ts +2 -1
- package/gen/models/Resource.d.ts +1 -1
- package/gen/models/ResourceType.d.ts +1 -1
- package/gen/models/Retry.d.ts +1 -1
- package/gen/models/Schedule.d.ts +1 -1
- package/gen/models/Script.d.ts +2 -1
- package/gen/models/ScriptArgs.d.ts +1 -1
- package/gen/models/SlackToken.d.ts +1 -1
- package/gen/models/StaticTransform.d.ts +1 -1
- package/gen/models/TokenResponse.d.ts +1 -1
- package/gen/models/TruncatedToken.d.ts +1 -1
- package/gen/models/Usage.d.ts +1 -1
- package/gen/models/User.d.ts +1 -1
- package/gen/models/UserWorkspaceList.d.ts +1 -1
- package/gen/models/WorkerPing.d.ts +1 -1
- package/gen/models/Workspace.d.ts +1 -1
- package/gen/models/WorkspaceInvite.d.ts +1 -1
- package/gen/services/AppService.d.ts +101 -1
- package/gen/services/AppService.js +88 -1
- package/gen/services/FavoriteService.d.ts +27 -0
- package/gen/services/FavoriteService.js +36 -0
- package/gen/services/FlowService.d.ts +7 -91
- package/gen/services/FlowService.js +2 -73
- package/gen/services/JobService.d.ts +15 -0
- package/gen/services/JobService.js +19 -0
- package/gen/services/ResourceService.d.ts +3 -2
- package/gen/services/ResourceService.js +1 -1
- package/gen/services/ScheduleService.d.ts +1 -1
- package/gen/services/ScheduleService.js +1 -1
- package/gen/services/ScriptService.d.ts +7 -1
- package/gen/services/ScriptService.js +2 -1
- package/package.json +422 -361
- package/script_helpers.d.ts +3 -1
- package/script_helpers.js +73 -25
- package/stateMachine.d.ts +4 -4
- package/stores.d.ts +2 -0
- package/stores.js +1 -0
- package/utils.d.ts +4 -2
- package/utils.js +20 -3
- package/components/FlowModulesViewer.svelte +0 -191
- package/components/FlowModulesViewer.svelte.d.ts +0 -18
- package/components/landing/FlowGettingStarted.svelte +0 -50
- package/components/landing/FlowGettingStarted.svelte.d.ts +0 -19
- package/components/landing/FlowLandingBox.svelte +0 -39
- package/components/landing/FlowLandingBox.svelte.d.ts +0 -17
- package/components/landing/RessourceGettingStarted.svelte +0 -21
- package/components/landing/RessourceGettingStarted.svelte.d.ts +0 -19
- package/components/landing/ScriptBox.svelte +0 -52
- package/components/landing/ScriptBox.svelte.d.ts +0 -17
- package/components/landing/ScriptGettingStarted.svelte +0 -48
- package/components/landing/ScriptGettingStarted.svelte.d.ts +0 -19
- package/components/scripts/CreateActions.svelte.d.ts +0 -14
package/script_helpers.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Script } from "./gen";
|
|
2
|
-
export declare const PYTHON_INIT_CODE = "import os\nimport wmill\
|
|
2
|
+
export declare const PYTHON_INIT_CODE = "import os\nimport wmill\n\n# You can import any package from PyPI, even if the assistant complains\n\n\"\"\"\nUse Cmd/Ctrl + S to autoformat the code. Reset content in the bar to start from a clean template.\nThe client is used to interact with windmill itself through its standard API.\nOne can explore the methods available through autocompletion of `wmill.XXX`.\n\"\"\"\n\ndef main(no_default: str,\n name = \"Nicolas Bourbaki\",\n age = 42,\n obj: dict = {\"even\": \"dicts\"},\n l: list = [\"or\", \"lists!\"],\n file_: bytes = bytes(0)):\n \"\"\"A main function is required for the script to be able to accept arguments.\n Types are recommended.\"\"\"\n print(f\"Hello World and a warm welcome especially to {name}\")\n print(\"and its acolytes..\", age, obj, l, len(file_))\n # retrieve variables, including secrets by querying the windmill platform.\n # secret fetching is audited by windmill.\n\n try:\n secret = wmill.get_variable(\"g/all/pretty_secret\")\n except:\n secret = \"No secret yet at g/all/pretty_secret!\"\n\n print(f\"The variable at `g/all/pretty_secret`: {secret}\")\n \n # Get last state of this script execution by the same trigger/user\n last_state = wmill.get_state()\n new_state = {\"foo\": 42} if last_state is None else last_state\n new_state[\"foo\"] += 1\n wmill.set_state(new_state)\n\n # fetch reserved variables as environment variables\n user = os.environ.get(\"WM_USERNAME\")\n # the return value is then parsed and can be retrieved by other scripts conveniently\n return {\"splitted\": name.split(), \"user\": user, \"state\": new_state}\n";
|
|
3
3
|
export declare const DENO_INIT_CODE: string;
|
|
4
4
|
export declare const GO_INIT_CODE = "package inner\n\nimport (\n\t\"fmt\"\n\t\"rsc.io/quote\"\n // wmill \"github.com/windmill-labs/windmill-go-client\"\n)\n\n// the main must return (interface{}, error)\n\nfunc main(x string, nested struct{ Foo string `json:\"foo\"` }) (interface{}, error) {\n\tfmt.Println(\"Hello, World\")\n\tfmt.Println(nested.Foo)\n\tfmt.Println(quote.Opt())\n // v, _ := wmill.GetVariable(\"g/all/pretty_secret\")\n return x, nil\n}\n";
|
|
5
5
|
export declare const GO_FAILURE_MODULE_CODE = "package inner\n\nimport (\n\t\"fmt\"\n \"os\"\n)\n\n// connect the error parameter to 'previous_result.error'\n\nfunc main(error string) (interface{}, error) {\n\tfmt.Println(error)\n\tfmt.Println(\"job\", os.Getenv(\"WM_JOB_ID\"))\n return x, nil\n}\n";
|
|
@@ -10,6 +10,8 @@ export declare const PYTHON_FAILURE_MODULE_CODE = "import os\n\n# connect the er
|
|
|
10
10
|
export declare const POSTGRES_INIT_CODE: string;
|
|
11
11
|
export declare const BASH_INIT_CODE = "\n# arguments of the form X=\"$I\" are parsed as parameters X of type string\nmsg=\"$1\"\n\n# the last line of the stdout is the return value\necho \"Hello $msg\"\n";
|
|
12
12
|
export declare const DENO_INIT_CODE_TRIGGER: string;
|
|
13
|
+
export declare const PYTHON_INIT_CODE_TRIGGER = "import wmill\n\ndef main():\n # A common trigger script would follow this pattern:\n # 1. Get the last saved state\n # const state = wnmill.get_state()\n # 2. Get the actual state from the external service\n # const newState = ...\n # 3. Compare the two states and update the internal state\n # wmill.setState(newState)\n # 4. Return the new rows\n # return range from (state to newState)\n return [1, 2, 3]\n";
|
|
14
|
+
export declare const GO_INIT_CODE_TRIGGER = "package inner\n\nimport (\n\twmill \"github.com/windmill-labs/windmill-go-client\"\n)\n\nfunc main() (interface{}, error) {\n\n\t// A common trigger script would follow this pattern:\n\t// 1. Get the last saved state\n\tstate, _ := wmill.GetState()\n\t// 2. Get the actual state from the external service\n\t// newState := ...\n\t// 3. Compare the two states and update the internal state\n\twmill.SetState(4)\n\t// 4. Return the new rows\n\n\treturn state, nil\n\n\t// In subsequent scripts, you may refer to each row/value returned by the trigger script using\n\t// 'flow_input.iter.value'\n}\n";
|
|
13
15
|
export declare const DENO_INIT_CODE_APPROVAL = "import * as wmill from \"https://deno.land/x/windmill@v1.41.0/mod.ts\"\n\nexport async function main(approver?: string) {\n return wmill.getResumeEndpoints(approver)\n}";
|
|
14
16
|
export declare function isInitialCode(content: string): boolean;
|
|
15
17
|
export declare function initialCode(language: 'deno' | 'python3' | 'go' | 'bash', kind: Script.kind, subkind: 'pgsql' | 'flow' | 'script' | undefined): string;
|
package/script_helpers.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
export const PYTHON_INIT_CODE = `import os
|
|
2
2
|
import wmill
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
# You can import any package from PyPI, even if the assistant complains
|
|
4
5
|
|
|
5
6
|
"""
|
|
6
|
-
Use Cmd/Ctrl + S to autoformat the code.
|
|
7
|
+
Use Cmd/Ctrl + S to autoformat the code. Reset content in the bar to start from a clean template.
|
|
7
8
|
The client is used to interact with windmill itself through its standard API.
|
|
8
9
|
One can explore the methods available through autocompletion of \`wmill.XXX\`.
|
|
9
10
|
"""
|
|
@@ -13,12 +14,11 @@ def main(no_default: str,
|
|
|
13
14
|
age = 42,
|
|
14
15
|
obj: dict = {"even": "dicts"},
|
|
15
16
|
l: list = ["or", "lists!"],
|
|
16
|
-
file_: bytes = bytes(0)
|
|
17
|
-
dtime: datetime = datetime.now()):
|
|
17
|
+
file_: bytes = bytes(0)):
|
|
18
18
|
"""A main function is required for the script to be able to accept arguments.
|
|
19
19
|
Types are recommended."""
|
|
20
20
|
print(f"Hello World and a warm welcome especially to {name}")
|
|
21
|
-
print("and its acolytes..", age, obj, l, len(file_)
|
|
21
|
+
print("and its acolytes..", age, obj, l, len(file_))
|
|
22
22
|
# retrieve variables, including secrets by querying the windmill platform.
|
|
23
23
|
# secret fetching is audited by windmill.
|
|
24
24
|
|
|
@@ -27,18 +27,23 @@ def main(no_default: str,
|
|
|
27
27
|
except:
|
|
28
28
|
secret = "No secret yet at g/all/pretty_secret!"
|
|
29
29
|
|
|
30
|
-
print(f"The
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
print(f"The variable at \`g/all/pretty_secret\`: {secret}")
|
|
31
|
+
|
|
32
|
+
# Get last state of this script execution by the same trigger/user
|
|
33
|
+
last_state = wmill.get_state()
|
|
34
|
+
new_state = {"foo": 42} if last_state is None else last_state
|
|
35
|
+
new_state["foo"] += 1
|
|
36
|
+
wmill.set_state(new_state)
|
|
37
|
+
|
|
33
38
|
# fetch reserved variables as environment variables
|
|
34
39
|
user = os.environ.get("WM_USERNAME")
|
|
35
40
|
# the return value is then parsed and can be retrieved by other scripts conveniently
|
|
36
|
-
return {"
|
|
41
|
+
return {"splitted": name.split(), "user": user, "state": new_state}
|
|
37
42
|
`;
|
|
38
43
|
export const DENO_INIT_CODE = `// reload the smart assistant on the top right if it dies to get autocompletion and syntax highlighting
|
|
39
|
-
// (Ctrl+space to cache dependencies on imports hover).
|
|
44
|
+
// (Ctrl+space to cache dependencies on imports hover, Ctrl+S to autoformat and parse parameters).
|
|
40
45
|
|
|
41
|
-
// you can use npm imports directly
|
|
46
|
+
// you can use npm imports directly
|
|
42
47
|
// import { toWords } from "npm:number-to-words@1"
|
|
43
48
|
// import * as wmill from "https://deno.land/x/windmill@v${__pkg__.version}/mod.ts"
|
|
44
49
|
|
|
@@ -125,7 +130,7 @@ export const POSTGRES_INIT_CODE = `import {
|
|
|
125
130
|
//PG parameterized statement. No SQL injection is possible.
|
|
126
131
|
export async function main(
|
|
127
132
|
db: Resource<"postgresql"> = "$res:g/all/demodb",
|
|
128
|
-
key:
|
|
133
|
+
key: number,
|
|
129
134
|
value: string,
|
|
130
135
|
) {
|
|
131
136
|
const query = await pgSql(
|
|
@@ -144,20 +149,57 @@ export const DENO_INIT_CODE_TRIGGER = `import * as wmill from "https://deno.land
|
|
|
144
149
|
|
|
145
150
|
export async function main() {
|
|
146
151
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
// A common trigger script would follow this pattern:
|
|
153
|
+
// 1. Get the last saved state
|
|
154
|
+
// const state = await wmill.getState()
|
|
155
|
+
// 2. Get the actual state from the external service
|
|
156
|
+
// const newState = await (await fetch('https://hacker-news.firebaseio.com/v0/topstories.json')).json()
|
|
157
|
+
// 3. Compare the two states and update the internal state
|
|
158
|
+
// await wmill.setState(newState)
|
|
159
|
+
// 4. Return the new rows
|
|
160
|
+
// return range from (state to newState)
|
|
156
161
|
|
|
157
|
-
|
|
162
|
+
return [1,2,3]
|
|
158
163
|
|
|
159
|
-
|
|
160
|
-
|
|
164
|
+
// In subsequent scripts, you may refer to each row/value returned by the trigger script using
|
|
165
|
+
// 'flow_input.iter.value'
|
|
166
|
+
}
|
|
167
|
+
`;
|
|
168
|
+
export const PYTHON_INIT_CODE_TRIGGER = `import wmill
|
|
169
|
+
|
|
170
|
+
def main():
|
|
171
|
+
# A common trigger script would follow this pattern:
|
|
172
|
+
# 1. Get the last saved state
|
|
173
|
+
# const state = wnmill.get_state()
|
|
174
|
+
# 2. Get the actual state from the external service
|
|
175
|
+
# const newState = ...
|
|
176
|
+
# 3. Compare the two states and update the internal state
|
|
177
|
+
# wmill.setState(newState)
|
|
178
|
+
# 4. Return the new rows
|
|
179
|
+
# return range from (state to newState)
|
|
180
|
+
return [1, 2, 3]
|
|
181
|
+
`;
|
|
182
|
+
export const GO_INIT_CODE_TRIGGER = `package inner
|
|
183
|
+
|
|
184
|
+
import (
|
|
185
|
+
wmill "github.com/windmill-labs/windmill-go-client"
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
func main() (interface{}, error) {
|
|
189
|
+
|
|
190
|
+
// A common trigger script would follow this pattern:
|
|
191
|
+
// 1. Get the last saved state
|
|
192
|
+
state, _ := wmill.GetState()
|
|
193
|
+
// 2. Get the actual state from the external service
|
|
194
|
+
// newState := ...
|
|
195
|
+
// 3. Compare the two states and update the internal state
|
|
196
|
+
wmill.SetState(4)
|
|
197
|
+
// 4. Return the new rows
|
|
198
|
+
|
|
199
|
+
return state, nil
|
|
200
|
+
|
|
201
|
+
// In subsequent scripts, you may refer to each row/value returned by the trigger script using
|
|
202
|
+
// 'flow_input.iter.value'
|
|
161
203
|
}
|
|
162
204
|
`;
|
|
163
205
|
export const DENO_INIT_CODE_APPROVAL = `import * as wmill from "https://deno.land/x/windmill@v1.41.0/mod.ts"
|
|
@@ -165,7 +207,7 @@ export const DENO_INIT_CODE_APPROVAL = `import * as wmill from "https://deno.lan
|
|
|
165
207
|
export async function main(approver?: string) {
|
|
166
208
|
return wmill.getResumeEndpoints(approver)
|
|
167
209
|
}`;
|
|
168
|
-
const ALL_INITIAL_CODE = [PYTHON_INIT_CODE, DENO_INIT_CODE, POSTGRES_INIT_CODE, DENO_INIT_CODE_TRIGGER, DENO_INIT_CODE_CLEAR, PYTHON_INIT_CODE_CLEAR, DENO_INIT_CODE_APPROVAL, DENO_FAILURE_MODULE_CODE];
|
|
210
|
+
const ALL_INITIAL_CODE = [PYTHON_INIT_CODE, PYTHON_INIT_CODE_TRIGGER, DENO_INIT_CODE, POSTGRES_INIT_CODE, DENO_INIT_CODE_TRIGGER, DENO_INIT_CODE_CLEAR, PYTHON_INIT_CODE_CLEAR, DENO_INIT_CODE_APPROVAL, DENO_FAILURE_MODULE_CODE];
|
|
169
211
|
export function isInitialCode(content) {
|
|
170
212
|
for (const code of ALL_INITIAL_CODE) {
|
|
171
213
|
if (content === code) {
|
|
@@ -207,6 +249,9 @@ export function initialCode(language, kind, subkind) {
|
|
|
207
249
|
else if (kind === 'failure') {
|
|
208
250
|
return PYTHON_FAILURE_MODULE_CODE;
|
|
209
251
|
}
|
|
252
|
+
else if (kind === 'trigger') {
|
|
253
|
+
return PYTHON_INIT_CODE_TRIGGER;
|
|
254
|
+
}
|
|
210
255
|
else {
|
|
211
256
|
return PYTHON_INIT_CODE;
|
|
212
257
|
}
|
|
@@ -218,6 +263,9 @@ export function initialCode(language, kind, subkind) {
|
|
|
218
263
|
if (kind === 'failure') {
|
|
219
264
|
return GO_FAILURE_MODULE_CODE;
|
|
220
265
|
}
|
|
266
|
+
else if (kind === 'trigger') {
|
|
267
|
+
return GO_INIT_CODE_TRIGGER;
|
|
268
|
+
}
|
|
221
269
|
else {
|
|
222
270
|
return GO_INIT_CODE;
|
|
223
271
|
}
|
package/stateMachine.d.ts
CHANGED
|
@@ -7,19 +7,19 @@ export interface StateMachineTransition<T extends readonly string[]> {
|
|
|
7
7
|
from?: Partial<Record<T[number], TransitionFromFunction<T>>>;
|
|
8
8
|
to?: Partial<Record<T[number], TransitionToFunction<T>>>;
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
type StateMachineInfo<T extends readonly string[]> = {
|
|
11
11
|
states: StateMachine<T>['states'];
|
|
12
12
|
currentState: StateMachine<T>['currentState'];
|
|
13
13
|
};
|
|
14
14
|
/** The return value should be a `state` that is available on the current machine. */
|
|
15
|
-
export
|
|
15
|
+
export type TransitionFromFunction<T extends readonly string[]> = (info: StateMachineInfo<T> & {
|
|
16
16
|
desiredState: T[number];
|
|
17
17
|
}) => T[number];
|
|
18
18
|
/** Callback after the state has been changed. */
|
|
19
|
-
export
|
|
19
|
+
export type TransitionToFunction<T extends readonly string[]> = (info: StateMachineInfo<T> & {
|
|
20
20
|
previousState: T[number];
|
|
21
21
|
}) => T[number];
|
|
22
|
-
|
|
22
|
+
type StateStore<T extends readonly string[]> = Readable<StateMachine<T>> & {
|
|
23
23
|
setState: (state: T[number]) => StateMachineInfo<T>;
|
|
24
24
|
};
|
|
25
25
|
/** **IMPORTANT:** use the `as const` syntax on the states array to get type safety.
|
package/stores.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface UserExt {
|
|
|
11
11
|
export declare const oauthStore: import("svelte/store").Writable<TokenResponse | undefined>;
|
|
12
12
|
export declare const userStore: import("svelte/store").Writable<UserExt | undefined>;
|
|
13
13
|
export declare const workspaceStore: import("svelte/store").Writable<string | undefined>;
|
|
14
|
+
export declare const starStore: import("svelte/store").Writable<number>;
|
|
14
15
|
export declare const usersWorkspaceStore: import("svelte/store").Writable<UserWorkspaceList | undefined>;
|
|
15
16
|
export declare const superadmin: import("svelte/store").Writable<false | String | undefined>;
|
|
16
17
|
export declare const hubScripts: import("svelte/store").Writable<{
|
|
@@ -19,5 +20,6 @@ export declare const hubScripts: import("svelte/store").Writable<{
|
|
|
19
20
|
approved: boolean;
|
|
20
21
|
kind: string;
|
|
21
22
|
app: string;
|
|
23
|
+
ask_id: number;
|
|
22
24
|
}[] | undefined>;
|
|
23
25
|
export declare function clearStores(): void;
|
package/stores.js
CHANGED
|
@@ -5,6 +5,7 @@ let persistedWorkspace = browser && localStorage.getItem('workspace');
|
|
|
5
5
|
export const oauthStore = writable(undefined);
|
|
6
6
|
export const userStore = writable(undefined);
|
|
7
7
|
export const workspaceStore = writable(persistedWorkspace ? String(persistedWorkspace) : undefined);
|
|
8
|
+
export const starStore = writable(1);
|
|
8
9
|
export const usersWorkspaceStore = writable(undefined);
|
|
9
10
|
export const superadmin = writable(undefined);
|
|
10
11
|
export const hubScripts = writable(undefined);
|
package/utils.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export declare function validatePassword(password: string): boolean;
|
|
|
16
16
|
export declare function clickOutside(node: Node): {
|
|
17
17
|
destroy(): void;
|
|
18
18
|
};
|
|
19
|
-
export
|
|
19
|
+
export type DropdownType = 'action' | 'delete';
|
|
20
20
|
export interface DropdownItem {
|
|
21
21
|
displayName: string;
|
|
22
22
|
eventName?: string;
|
|
@@ -68,7 +68,7 @@ export declare function isString(value: any): boolean;
|
|
|
68
68
|
export declare function mapUserToUserExt(user: User): UserExt;
|
|
69
69
|
export declare function schemaToTsType(schema: Schema): string;
|
|
70
70
|
export declare function schemaToObject(schema: Schema, args: Record<string, any>): Object;
|
|
71
|
-
export
|
|
71
|
+
export type InputCat = 'string' | 'number' | 'boolean' | 'list' | 'resource-object' | 'enum' | 'date' | 'base64' | 'resource-string' | 'object' | 'sql';
|
|
72
72
|
export declare function setInputCat(type: string | undefined, format: string | undefined, itemsType: string | undefined, enum_: any, contentEncoding: string | undefined): InputCat;
|
|
73
73
|
export declare function scriptPathToHref(path: string): string;
|
|
74
74
|
export declare function getScriptByPath(path: string): Promise<{
|
|
@@ -91,3 +91,5 @@ export declare function scriptToHubUrl(content: string, summary: string, descrip
|
|
|
91
91
|
export declare function classNames(...classes: Array<string | undefined>): string;
|
|
92
92
|
export declare function scriptLangToEditorLang(lang: Script.language): 'typescript' | 'python' | 'go' | 'shell';
|
|
93
93
|
export declare function copyToClipboard(value: string, sendToast?: boolean): Promise<boolean>;
|
|
94
|
+
export declare function pluralize(quantity: number, word: string, customPlural?: string): string;
|
|
95
|
+
export declare function capitalize(word: string): string;
|
package/utils.js
CHANGED
|
@@ -37,10 +37,13 @@ export function displayDaysAgo(dateString) {
|
|
|
37
37
|
else {
|
|
38
38
|
let dAgo = daysAgo(date);
|
|
39
39
|
if (dAgo == 0) {
|
|
40
|
-
return `
|
|
40
|
+
return `yesterday at ${date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;
|
|
41
41
|
}
|
|
42
42
|
else if (dAgo > 7) {
|
|
43
|
-
return `${dAgo + 1} days ago at ${date.toLocaleTimeString([], {
|
|
43
|
+
return `${dAgo + 1} days ago at ${date.toLocaleTimeString([], {
|
|
44
|
+
hour: '2-digit',
|
|
45
|
+
minute: '2-digit'
|
|
46
|
+
})}`;
|
|
44
47
|
}
|
|
45
48
|
else {
|
|
46
49
|
return displayDate(dateString);
|
|
@@ -362,7 +365,7 @@ export async function getScriptByPath(path) {
|
|
|
362
365
|
const { content, language, schema } = await ScriptService.getHubScriptByPath({ path });
|
|
363
366
|
return {
|
|
364
367
|
content,
|
|
365
|
-
language,
|
|
368
|
+
language: language,
|
|
366
369
|
schema
|
|
367
370
|
};
|
|
368
371
|
}
|
|
@@ -471,3 +474,17 @@ export async function copyToClipboard(value, sendToast = true) {
|
|
|
471
474
|
sendUserToast(success ? 'Copied to clipboard!' : "Couldn't copy to clipboard", !success);
|
|
472
475
|
return success;
|
|
473
476
|
}
|
|
477
|
+
export function pluralize(quantity, word, customPlural) {
|
|
478
|
+
if (quantity <= 1) {
|
|
479
|
+
return `${quantity} ${word}`;
|
|
480
|
+
}
|
|
481
|
+
else if (customPlural) {
|
|
482
|
+
return `${quantity} ${customPlural}}`;
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
return `${quantity} ${word}s`;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
export function capitalize(word) {
|
|
489
|
+
return word ? word.charAt(0).toUpperCase() + word.slice(1) : '';
|
|
490
|
+
}
|
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
<script>import { scriptPathToHref } from '../utils';
|
|
2
|
-
import { slide } from 'svelte/transition';
|
|
3
|
-
import InputTransformsViewer from './InputTransformsViewer.svelte';
|
|
4
|
-
import IconedPath from './IconedPath.svelte';
|
|
5
|
-
import HighlightCode from './HighlightCode.svelte';
|
|
6
|
-
import { faBug } from '@fortawesome/free-solid-svg-icons';
|
|
7
|
-
import Icon from 'svelte-awesome';
|
|
8
|
-
export let modules;
|
|
9
|
-
export let failureModule;
|
|
10
|
-
let open = {};
|
|
11
|
-
</script>
|
|
12
|
-
|
|
13
|
-
<p class="font-black text-lg my-6 w-full">
|
|
14
|
-
<span>{modules?.length} Step{modules?.length > 1 ? 's' : ''} </span>
|
|
15
|
-
<span class="mt-4" />
|
|
16
|
-
</p>
|
|
17
|
-
<ul class="-mb-8 w-full">
|
|
18
|
-
{#each modules ?? [] as mod, i}
|
|
19
|
-
<li class="w-full">
|
|
20
|
-
<div class="relative pb-8 w-full">
|
|
21
|
-
{#if i < (modules ?? []).length - 1 || failureModule}
|
|
22
|
-
<span class="absolute top-4 left-4 -ml-px h-full w-0.5 bg-gray-200" aria-hidden="true" />
|
|
23
|
-
{/if}
|
|
24
|
-
<div class="relative flex space-x-3">
|
|
25
|
-
<div>
|
|
26
|
-
<span
|
|
27
|
-
class="h-8 w-8 rounded-full bg-blue-600 flex items-center justify-center ring-8 ring-white text-white"
|
|
28
|
-
>
|
|
29
|
-
{i + 1}
|
|
30
|
-
</span>
|
|
31
|
-
</div>
|
|
32
|
-
<div class="min-w-0 flex-1 pt-1.5 flex justify-between space-x-4 w-full">
|
|
33
|
-
<div class="w-full">
|
|
34
|
-
<span class="text-black">{mod?.summary ?? ''}</span>
|
|
35
|
-
<p class="text-sm text-gray-500">
|
|
36
|
-
{#if mod?.value?.type == 'script'}
|
|
37
|
-
<a
|
|
38
|
-
target="_blank"
|
|
39
|
-
href={scriptPathToHref(mod?.value?.path ?? '')}
|
|
40
|
-
class="font-medium text-gray-900"
|
|
41
|
-
>
|
|
42
|
-
<IconedPath path={mod?.value?.path ?? ''} />
|
|
43
|
-
</a>
|
|
44
|
-
{#if mod?.value?.path?.startsWith('hub/')}
|
|
45
|
-
<div>
|
|
46
|
-
<button
|
|
47
|
-
on:click={async () => {
|
|
48
|
-
open[i] = !open[i]
|
|
49
|
-
}}
|
|
50
|
-
class="mb-2 underline text-black"
|
|
51
|
-
>
|
|
52
|
-
View code and inputs {open[i] ? '(-)' : '(+)'}</button
|
|
53
|
-
>
|
|
54
|
-
{#if open[i]}
|
|
55
|
-
<div class="border border-black p-2 bg-gray-50 divide-y">
|
|
56
|
-
<InputTransformsViewer
|
|
57
|
-
inputTransforms={mod?.value?.input_transforms ??
|
|
58
|
-
mod?.input_transforms ??
|
|
59
|
-
{}}
|
|
60
|
-
/>
|
|
61
|
-
<div class="w-full h-full mt-6">
|
|
62
|
-
<iframe
|
|
63
|
-
style="height: 400px;"
|
|
64
|
-
class="w-full h-full text-sm"
|
|
65
|
-
title="embedded script from hub"
|
|
66
|
-
frameborder="0"
|
|
67
|
-
src="https://hub.windmill.dev/embed/script/{mod?.value?.path?.substring(
|
|
68
|
-
4
|
|
69
|
-
)}"
|
|
70
|
-
/>
|
|
71
|
-
</div>
|
|
72
|
-
</div>
|
|
73
|
-
{/if}
|
|
74
|
-
</div>
|
|
75
|
-
{/if}
|
|
76
|
-
{:else if mod?.value?.type == 'rawscript'}
|
|
77
|
-
<button on:click={() => (open[i] = !open[i])} class="mb-2 underline text-black">
|
|
78
|
-
Raw {mod?.value?.language} script {open[i] ? '(-)' : '(+)'}</button
|
|
79
|
-
>
|
|
80
|
-
|
|
81
|
-
{#if open[i]}
|
|
82
|
-
<div transition:slide class="border border-black p-2 bg-gray-50 w-full">
|
|
83
|
-
<InputTransformsViewer
|
|
84
|
-
inputTransforms={mod?.value?.input_transforms ??
|
|
85
|
-
mod?.input_transforms ??
|
|
86
|
-
{}}
|
|
87
|
-
/>
|
|
88
|
-
<HighlightCode
|
|
89
|
-
language={mod?.value?.language ?? 'deno'}
|
|
90
|
-
code={mod?.value?.content}
|
|
91
|
-
/>
|
|
92
|
-
</div>
|
|
93
|
-
{/if}
|
|
94
|
-
{:else if mod?.value?.type == 'forloopflow'}
|
|
95
|
-
For loop over all the elements of the list returned as a result of step {i}:
|
|
96
|
-
<svelte:self modules={mod.value.modules} />
|
|
97
|
-
{/if}
|
|
98
|
-
</p>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
</li>
|
|
104
|
-
{/each}
|
|
105
|
-
{#if failureModule}
|
|
106
|
-
<li class="w-full">
|
|
107
|
-
<div class="relative pb-8 w-full">
|
|
108
|
-
<div class="relative flex space-x-3">
|
|
109
|
-
<div>
|
|
110
|
-
<span
|
|
111
|
-
class="h-8 w-8 rounded-full bg-red-600 flex items-center justify-center ring-8 ring-white text-white"
|
|
112
|
-
>
|
|
113
|
-
<Icon data={faBug} />
|
|
114
|
-
</span>
|
|
115
|
-
</div>
|
|
116
|
-
<div class="min-w-0 flex-1 pt-1.5 flex justify-between space-x-4 w-full">
|
|
117
|
-
<div class="w-full">
|
|
118
|
-
<span class="text-black">{failureModule?.summary ?? ''}</span>
|
|
119
|
-
<p class="text-sm text-gray-500">
|
|
120
|
-
{#if failureModule?.value?.type == 'script'}
|
|
121
|
-
<a
|
|
122
|
-
target="_blank"
|
|
123
|
-
href={scriptPathToHref(failureModule?.value?.path ?? '')}
|
|
124
|
-
class="font-medium text-gray-900"
|
|
125
|
-
>
|
|
126
|
-
<IconedPath path={failureModule?.value?.path ?? ''} />
|
|
127
|
-
</a>
|
|
128
|
-
{#if failureModule?.value?.path?.startsWith('hub/')}
|
|
129
|
-
<div>
|
|
130
|
-
<button
|
|
131
|
-
on:click={async () => {
|
|
132
|
-
open[modules.length] = !open[modules.length]
|
|
133
|
-
}}
|
|
134
|
-
class="mb-2 underline text-black"
|
|
135
|
-
>
|
|
136
|
-
View code and inputs {open[modules.length] ? '(-)' : '(+)'}</button
|
|
137
|
-
>
|
|
138
|
-
{#if open[modules.length]}
|
|
139
|
-
<div class="border border-black p-2 bg-gray-50 divide-y">
|
|
140
|
-
<InputTransformsViewer
|
|
141
|
-
inputTransforms={failureModule?.value?.input_transforms ??
|
|
142
|
-
failureModule?.input_transforms ??
|
|
143
|
-
{}}
|
|
144
|
-
/>
|
|
145
|
-
<div class="w-full h-full mt-6">
|
|
146
|
-
<iframe
|
|
147
|
-
style="height: 400px;"
|
|
148
|
-
class="w-full h-full text-sm"
|
|
149
|
-
title="embedded script from hub"
|
|
150
|
-
frameborder="0"
|
|
151
|
-
src="https://hub.windmill.dev/embed/script/{failureModule?.value?.path?.substring(
|
|
152
|
-
4
|
|
153
|
-
)}"
|
|
154
|
-
/>
|
|
155
|
-
</div>
|
|
156
|
-
</div>
|
|
157
|
-
{/if}
|
|
158
|
-
</div>
|
|
159
|
-
{/if}
|
|
160
|
-
{:else if failureModule?.value?.type == 'rawscript'}
|
|
161
|
-
<button
|
|
162
|
-
on:click={() => (open[modules.length] = !open[modules.length])}
|
|
163
|
-
class="mb-2 underline text-black"
|
|
164
|
-
>
|
|
165
|
-
Error handler: Raw {failureModule?.value?.language} script {open[modules.length]
|
|
166
|
-
? '(-)'
|
|
167
|
-
: '(+)'}</button
|
|
168
|
-
>
|
|
169
|
-
|
|
170
|
-
{#if open[modules.length]}
|
|
171
|
-
<div transition:slide class="border border-black p-2 bg-gray-50 w-full">
|
|
172
|
-
<InputTransformsViewer
|
|
173
|
-
inputTransforms={failureModule?.value?.input_transforms ??
|
|
174
|
-
failureModule?.input_transforms ??
|
|
175
|
-
{}}
|
|
176
|
-
/>
|
|
177
|
-
<HighlightCode
|
|
178
|
-
language={failureModule?.value?.language ?? 'deno'}
|
|
179
|
-
code={failureModule?.value?.content}
|
|
180
|
-
/>
|
|
181
|
-
</div>
|
|
182
|
-
{/if}
|
|
183
|
-
{/if}
|
|
184
|
-
</p>
|
|
185
|
-
</div>
|
|
186
|
-
</div>
|
|
187
|
-
</div>
|
|
188
|
-
</div>
|
|
189
|
-
</li>
|
|
190
|
-
{/if}
|
|
191
|
-
</ul>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type { FlowModule } from '../gen';
|
|
3
|
-
declare const __propDef: {
|
|
4
|
-
props: {
|
|
5
|
-
modules: FlowModule[];
|
|
6
|
-
failureModule: FlowModule | undefined;
|
|
7
|
-
};
|
|
8
|
-
events: {
|
|
9
|
-
[evt: string]: CustomEvent<any>;
|
|
10
|
-
};
|
|
11
|
-
slots: {};
|
|
12
|
-
};
|
|
13
|
-
export declare type FlowModulesViewerProps = typeof __propDef.props;
|
|
14
|
-
export declare type FlowModulesViewerEvents = typeof __propDef.events;
|
|
15
|
-
export declare type FlowModulesViewerSlots = typeof __propDef.slots;
|
|
16
|
-
export default class FlowModulesViewer extends SvelteComponentTyped<FlowModulesViewerProps, FlowModulesViewerEvents, FlowModulesViewerSlots> {
|
|
17
|
-
}
|
|
18
|
-
export {};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { goto } from '$app/navigation'
|
|
3
|
-
import { faExternalLink, faFile, faPlus } from '@fortawesome/free-solid-svg-icons'
|
|
4
|
-
import Button from '../common/button/Button.svelte'
|
|
5
|
-
import HatIcon from '../icons/HatIcon.svelte'
|
|
6
|
-
</script>
|
|
7
|
-
|
|
8
|
-
<div class="p-4 border border-gray-300 rounded-md bg-gray-50 overflow-auto">
|
|
9
|
-
<div class="flex items-center">
|
|
10
|
-
<h3 class="inline-flex items-center font-semibold">
|
|
11
|
-
<HatIcon class="w-6 h-6 mr-2" />
|
|
12
|
-
Getting started
|
|
13
|
-
</h3>
|
|
14
|
-
</div>
|
|
15
|
-
<div class="mt-2 mb-4 text-sm text-gray-700 ">
|
|
16
|
-
Flows allow you to streamline complex processes and operations by chaining simple steps
|
|
17
|
-
together. Each Flow is composed of one or more steps. Create a new flow or find inspiration on
|
|
18
|
-
the Hub!
|
|
19
|
-
</div>
|
|
20
|
-
<div class="flex flex-row flex-wrap gap-y-2">
|
|
21
|
-
<Button
|
|
22
|
-
on:click={() => goto('flows/add')}
|
|
23
|
-
color="dark"
|
|
24
|
-
size="xs"
|
|
25
|
-
btnClasses="mr-2"
|
|
26
|
-
startIcon={{ icon: faPlus }}
|
|
27
|
-
>
|
|
28
|
-
Create flow
|
|
29
|
-
</Button>
|
|
30
|
-
<Button
|
|
31
|
-
on:click={() => goto('https://docs.windmill.dev/docs/getting_started/flows')}
|
|
32
|
-
color="blue"
|
|
33
|
-
size="xs"
|
|
34
|
-
btnClasses="mr-2"
|
|
35
|
-
startIcon={{ icon: faFile }}
|
|
36
|
-
>
|
|
37
|
-
Flow documentation
|
|
38
|
-
</Button>
|
|
39
|
-
<Button
|
|
40
|
-
on:click={() => goto('https://hub.windmill.dev/')}
|
|
41
|
-
color="light"
|
|
42
|
-
variant="border"
|
|
43
|
-
size="xs"
|
|
44
|
-
startIcon={{ icon: faExternalLink }}
|
|
45
|
-
target="_blank"
|
|
46
|
-
>
|
|
47
|
-
Explore community flows on WindmillHub
|
|
48
|
-
</Button>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/** @typedef {typeof __propDef.props} FlowGettingStartedProps */
|
|
2
|
-
/** @typedef {typeof __propDef.events} FlowGettingStartedEvents */
|
|
3
|
-
/** @typedef {typeof __propDef.slots} FlowGettingStartedSlots */
|
|
4
|
-
export default class FlowGettingStarted extends SvelteComponentTyped<{}, {
|
|
5
|
-
[evt: string]: CustomEvent<any>;
|
|
6
|
-
}, {}> {
|
|
7
|
-
}
|
|
8
|
-
export type FlowGettingStartedProps = typeof __propDef.props;
|
|
9
|
-
export type FlowGettingStartedEvents = typeof __propDef.events;
|
|
10
|
-
export type FlowGettingStartedSlots = typeof __propDef.slots;
|
|
11
|
-
import { SvelteComponentTyped } from "svelte";
|
|
12
|
-
declare const __propDef: {
|
|
13
|
-
props: {};
|
|
14
|
-
events: {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
};
|
|
17
|
-
slots: {};
|
|
18
|
-
};
|
|
19
|
-
export {};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
<script>import { goto } from '$app/navigation';
|
|
2
|
-
import { faPencil, faPlay } from '@fortawesome/free-solid-svg-icons';
|
|
3
|
-
import { Button } from '../common';
|
|
4
|
-
export let flow;
|
|
5
|
-
</script>
|
|
6
|
-
|
|
7
|
-
<a
|
|
8
|
-
href="#{flow.path}"
|
|
9
|
-
class="border p-4 rounded-sm shadow-sm space-y-2 hover:border-blue-600 text-gray-800 flex flex-col justify-between cursor-pointer"
|
|
10
|
-
on:click={() => goto(`/flows/get/${flow.path}`)}
|
|
11
|
-
>
|
|
12
|
-
<div class="font-bold">{flow.summary || flow.path}</div>
|
|
13
|
-
|
|
14
|
-
<div class="inline-flex justify-between w-full break-words">
|
|
15
|
-
<div class="text-xs">{flow.path}</div>
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<div class="flex flex-row-reverse gap-x-2">
|
|
19
|
-
<Button
|
|
20
|
-
on:click={() => goto(`/flows/edit/${flow.path}`)}
|
|
21
|
-
color="dark"
|
|
22
|
-
size="xs"
|
|
23
|
-
variant="border"
|
|
24
|
-
startIcon={{ icon: faPencil }}
|
|
25
|
-
>
|
|
26
|
-
Edit
|
|
27
|
-
</Button>
|
|
28
|
-
|
|
29
|
-
<Button
|
|
30
|
-
on:click={() => goto(`/flows/run/${flow.path}`)}
|
|
31
|
-
color="dark"
|
|
32
|
-
size="xs"
|
|
33
|
-
variant="border"
|
|
34
|
-
startIcon={{ icon: faPlay }}
|
|
35
|
-
>
|
|
36
|
-
Run
|
|
37
|
-
</Button>
|
|
38
|
-
</div>
|
|
39
|
-
</a>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type { Flow } from '../../gen';
|
|
3
|
-
declare const __propDef: {
|
|
4
|
-
props: {
|
|
5
|
-
flow: Flow;
|
|
6
|
-
};
|
|
7
|
-
events: {
|
|
8
|
-
[evt: string]: CustomEvent<any>;
|
|
9
|
-
};
|
|
10
|
-
slots: {};
|
|
11
|
-
};
|
|
12
|
-
export declare type FlowLandingBoxProps = typeof __propDef.props;
|
|
13
|
-
export declare type FlowLandingBoxEvents = typeof __propDef.events;
|
|
14
|
-
export declare type FlowLandingBoxSlots = typeof __propDef.slots;
|
|
15
|
-
export default class FlowLandingBox extends SvelteComponentTyped<FlowLandingBoxProps, FlowLandingBoxEvents, FlowLandingBoxSlots> {
|
|
16
|
-
}
|
|
17
|
-
export {};
|