windmill-components 1.309.7 → 1.352.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.
Files changed (509) hide show
  1. package/package/assets/app.css +22 -13
  2. package/package/ata/index.js +1 -0
  3. package/package/autosize.js +2 -2
  4. package/package/common.d.ts +14 -2
  5. package/package/common.js +6 -1
  6. package/package/components/AllFlowLogs.svelte +30 -0
  7. package/package/components/AllFlowLogs.svelte.d.ts +18 -0
  8. package/package/components/ApiConnectForm.svelte +10 -4
  9. package/package/components/AppConnectDrawer.svelte +74 -0
  10. package/package/components/AppConnectDrawer.svelte.d.ts +20 -0
  11. package/package/components/AppConnectInner.svelte +507 -0
  12. package/package/components/AppConnectInner.svelte.d.ts +28 -0
  13. package/package/components/ArgEnum.svelte +4 -1
  14. package/package/components/ArgEnum.svelte.d.ts +3 -1
  15. package/package/components/ArgInfo.svelte +19 -3
  16. package/package/components/ArgInput.svelte +222 -122
  17. package/package/components/ArgInput.svelte.d.ts +11 -7
  18. package/package/components/ArrayTypeNarrowing.svelte +29 -27
  19. package/package/components/CenteredPage.svelte +2 -2
  20. package/package/components/ConcurrentJobsChart.svelte +212 -0
  21. package/package/components/ConcurrentJobsChart.svelte.d.ts +23 -0
  22. package/package/components/CustomOauth.svelte +2 -2
  23. package/package/components/DateInput.svelte +47 -0
  24. package/package/components/DateInput.svelte.d.ts +24 -0
  25. package/package/components/DateTimeInput.svelte +25 -3
  26. package/package/components/DefaultScripts.svelte +5 -8
  27. package/package/components/DefaultTags.svelte +3 -2
  28. package/package/components/DefaultTags.svelte.d.ts +3 -1
  29. package/package/components/DefaultTagsInner.svelte +2 -11
  30. package/package/components/DefaultTagsInner.svelte.d.ts +3 -1
  31. package/package/components/Dev.svelte +72 -10
  32. package/package/components/DiffDrawer.svelte +1 -2
  33. package/package/components/DiffEditor.svelte +3 -0
  34. package/package/components/DisplayResult.svelte +467 -344
  35. package/package/components/DisplayResult.svelte.d.ts +1 -0
  36. package/package/components/DropdownV2.svelte.d.ts +2 -2
  37. package/package/components/DurationMs.svelte +11 -3
  38. package/package/components/DurationMs.svelte.d.ts +2 -0
  39. package/package/components/EditableSchemaForm.svelte +447 -100
  40. package/package/components/EditableSchemaForm.svelte.d.ts +16 -6
  41. package/package/components/Editor.svelte +112 -93
  42. package/package/components/Editor.svelte.d.ts +4 -2
  43. package/package/components/EditorBar.svelte +101 -10
  44. package/package/components/EditorBar.svelte.d.ts +0 -1
  45. package/package/components/ErrorOrRecoveryHandler.svelte +0 -1
  46. package/package/components/FlowBuilder.svelte +14 -6
  47. package/package/components/FlowGraphViewer.svelte +2 -1
  48. package/package/components/FlowGraphViewerStep.svelte +56 -10
  49. package/package/components/FlowGraphViewerStep.svelte.d.ts +2 -7
  50. package/package/components/FlowJobResult.svelte +14 -3
  51. package/package/components/FlowJobResult.svelte.d.ts +3 -0
  52. package/package/components/FlowMetadata.svelte +41 -36
  53. package/package/components/FlowMetadata.svelte.d.ts +3 -1
  54. package/package/components/FlowPreviewContent.svelte +18 -9
  55. package/package/components/FlowStatusViewer.svelte +4 -0
  56. package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
  57. package/package/components/FlowStatusViewerInner.svelte +96 -19
  58. package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
  59. package/package/components/FlowTimeline.svelte +13 -0
  60. package/package/components/FlowTimeline.svelte.d.ts +2 -0
  61. package/package/components/FlowViewer.svelte +0 -5
  62. package/package/components/FolderEditor.svelte +25 -0
  63. package/package/components/FolderEditor.svelte.d.ts +2 -0
  64. package/package/components/GroupEditor.svelte +36 -91
  65. package/package/components/GroupInfo.svelte +1 -1
  66. package/package/components/HighlightCode.svelte +3 -0
  67. package/package/components/InputTransformForm.svelte +19 -1
  68. package/package/components/InputTransformForm.svelte.d.ts +2 -0
  69. package/package/components/InputTransformSchemaForm.svelte +6 -0
  70. package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
  71. package/package/components/InstanceSettings.svelte +196 -16
  72. package/package/components/InstanceSettings.svelte.d.ts +4 -0
  73. package/package/components/JobLogs.svelte +12 -0
  74. package/package/components/JobLogs.svelte.d.ts +16 -0
  75. package/package/components/JobStatus.svelte +3 -3
  76. package/package/components/Label.svelte +1 -1
  77. package/package/components/Label.svelte.d.ts +1 -0
  78. package/package/components/LightweightArgInput.svelte +342 -264
  79. package/package/components/LightweightArgInput.svelte.d.ts +6 -2
  80. package/package/components/LightweightResourcePicker.svelte +74 -26
  81. package/package/components/LightweightSchemaForm.svelte +49 -39
  82. package/package/components/LogViewer.svelte +52 -15
  83. package/package/components/LogViewer.svelte.d.ts +1 -0
  84. package/package/components/Login.svelte +288 -0
  85. package/package/components/Login.svelte.d.ts +19 -0
  86. package/package/components/ModulePreviewForm.svelte +4 -0
  87. package/package/components/NoMainFuncBadge.svelte +8 -0
  88. package/package/components/NoMainFuncBadge.svelte.d.ts +14 -0
  89. package/package/components/NumberTypeNarrowing.svelte +71 -44
  90. package/package/components/OauthExtraParams.svelte +1 -1
  91. package/package/components/OauthScopes.svelte +1 -1
  92. package/package/components/ObjectResourceInput.svelte +2 -0
  93. package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
  94. package/package/components/ObjectStoreConfigSettings.svelte +12 -1
  95. package/package/components/ObjectStoreConfigSettings.svelte.d.ts +1 -0
  96. package/package/components/ObjectTypeNarrowing.svelte +0 -1
  97. package/package/components/ParqetCsvTableRenderer.svelte +181 -0
  98. package/package/components/ParqetCsvTableRenderer.svelte.d.ts +21 -0
  99. package/package/components/Password.svelte +1 -0
  100. package/package/components/Password.svelte.d.ts +2 -0
  101. package/package/components/PasswordArgInput.svelte +49 -0
  102. package/package/components/PasswordArgInput.svelte.d.ts +17 -0
  103. package/package/components/Path.svelte +2 -2
  104. package/package/components/PersistentScriptDrawer.svelte +6 -3
  105. package/package/components/QueueMetricsDrawer.svelte +225 -0
  106. package/package/components/QueueMetricsDrawer.svelte.d.ts +18 -0
  107. package/package/components/Range.svelte +88 -286
  108. package/package/components/Range.svelte.d.ts +9 -23
  109. package/package/components/ResourceEditor.svelte +138 -140
  110. package/package/components/ResourceEditor.svelte.d.ts +9 -2
  111. package/package/components/ResourceEditorDrawer.svelte +45 -0
  112. package/package/components/ResourceEditorDrawer.svelte.d.ts +21 -0
  113. package/package/components/ResourcePicker.svelte +8 -9
  114. package/package/components/ResourceTypePicker.svelte +88 -36
  115. package/package/components/ResultJobLoader.svelte +2 -2
  116. package/package/components/ResultJobLoader.svelte.d.ts +9 -9
  117. package/package/components/RunChart.svelte +55 -5
  118. package/package/components/RunChart.svelte.d.ts +1 -0
  119. package/package/components/RunForm.svelte +1 -1
  120. package/package/components/S3FilePicker.svelte +21 -9
  121. package/package/components/S3FilePicker.svelte.d.ts +2 -0
  122. package/package/components/SavedInputs.svelte +49 -13
  123. package/package/components/ScheduleEditorInner.svelte +294 -264
  124. package/package/components/SchemaForm.svelte +193 -99
  125. package/package/components/SchemaForm.svelte.d.ts +17 -2
  126. package/package/components/ScriptBuilder.svelte +23 -14
  127. package/package/components/ScriptEditor.svelte +1 -2
  128. package/package/components/ScriptEditor.svelte.d.ts +1 -1
  129. package/package/components/ScriptSchedules.svelte +11 -8
  130. package/package/components/ScriptSchema.svelte +3 -21
  131. package/package/components/ScriptVersionHistory.svelte +1 -1
  132. package/package/components/SimpleEditor.svelte +4 -1
  133. package/package/components/StringTypeNarrowing.svelte +229 -167
  134. package/package/components/StringTypeNarrowing.svelte.d.ts +6 -1
  135. package/package/components/TemplateEditor.svelte +1 -0
  136. package/package/components/TestJobLoader.svelte +14 -5
  137. package/package/components/TestJobLoader.svelte.d.ts +1 -1
  138. package/package/components/Toggle.svelte +6 -3
  139. package/package/components/Toggle.svelte.d.ts +1 -0
  140. package/package/components/Tooltip.svelte +8 -2
  141. package/package/components/Tooltip.svelte.d.ts +1 -0
  142. package/package/components/UserSettings.svelte +24 -1
  143. package/package/components/WorkspaceGroup.svelte +84 -21
  144. package/package/components/WorkspaceGroup.svelte.d.ts +1 -0
  145. package/package/components/app_connect.d.ts +7 -0
  146. package/package/components/app_connect.js +78 -0
  147. package/package/components/apps/components/buttons/AppButton.svelte +2 -1
  148. package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  149. package/package/components/apps/components/display/AppAlert.svelte +1 -1
  150. package/package/components/apps/components/display/AppCustomComponent.svelte +1 -1
  151. package/package/components/apps/components/display/AppDisplayComponent.svelte +2 -2
  152. package/package/components/apps/components/display/AppDownload.svelte +1 -1
  153. package/package/components/apps/components/display/AppFlowStatusComponent.svelte +13 -70
  154. package/package/components/apps/components/display/AppFlowStatusComponent.svelte.d.ts +1 -9
  155. package/package/components/apps/components/display/AppIcon.svelte +1 -1
  156. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +23 -10
  157. package/package/components/apps/components/display/AppJobIdFlowStatus.svelte.d.ts +1 -3
  158. package/package/components/apps/components/display/AppJobIdLogComponent.svelte +22 -10
  159. package/package/components/apps/components/display/AppJobIdLogComponent.svelte.d.ts +1 -3
  160. package/package/components/apps/components/display/AppLogsComponent.svelte +13 -70
  161. package/package/components/apps/components/display/AppLogsComponent.svelte.d.ts +1 -9
  162. package/package/components/apps/components/display/AppMap.svelte +3 -2
  163. package/package/components/apps/components/display/AppMenu.svelte +1 -1
  164. package/package/components/apps/components/display/AppPdf.svelte +3 -11
  165. package/package/components/apps/components/display/AppText.svelte +7 -2
  166. package/package/components/apps/components/display/charts/AppAgCharts.svelte +31 -18
  167. package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +32 -30
  168. package/package/components/apps/components/display/dbtable/InsertRow.svelte +3 -6
  169. package/package/components/apps/components/display/dbtable/queries/delete.js +1 -1
  170. package/package/components/apps/components/display/dbtable/queries/insert.js +1 -12
  171. package/package/components/apps/components/display/dbtable/queries/select.js +1 -1
  172. package/package/components/apps/components/display/dbtable/queries/update.js +2 -2
  173. package/package/components/apps/components/display/dbtable/utils.d.ts +0 -1
  174. package/package/components/apps/components/display/dbtable/utils.js +0 -83
  175. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +75 -44
  176. package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +5 -1
  177. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +172 -0
  178. package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +27 -0
  179. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte +38 -0
  180. package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts +28 -0
  181. package/package/components/apps/components/display/table/AppAggridTable.svelte +189 -56
  182. package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -1
  183. package/package/components/apps/components/display/table/AppAggridTableActions.svelte +13 -2
  184. package/package/components/apps/components/display/table/AppAggridTableActions.svelte.d.ts +1 -0
  185. package/package/components/apps/components/display/table/AppCell.svelte +1 -3
  186. package/package/components/apps/components/display/table/AppTable.svelte +320 -281
  187. package/package/components/apps/components/display/table/AppTableFooter.svelte +42 -23
  188. package/package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +2 -2
  189. package/package/components/apps/components/display/table/SyncColumnDefs.svelte +119 -0
  190. package/package/components/apps/components/display/table/SyncColumnDefs.svelte.d.ts +21 -0
  191. package/package/components/apps/components/display/table/theme/windmill-theme.css +656 -0
  192. package/package/components/apps/components/display/table/utils.js +22 -0
  193. package/package/components/apps/components/helpers/DebouncedInput.svelte +3 -2
  194. package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
  195. package/package/components/apps/components/helpers/NonRunnableComponent.svelte +35 -0
  196. package/package/components/apps/components/helpers/RefreshButton.svelte +30 -12
  197. package/package/components/apps/components/helpers/RefreshButton.svelte.d.ts +1 -3
  198. package/package/components/apps/components/helpers/RefreshIndicator.svelte +19 -0
  199. package/package/components/apps/components/helpers/RefreshIndicator.svelte.d.ts +16 -0
  200. package/package/components/apps/components/helpers/ResolveConfig.svelte +1 -1
  201. package/package/components/apps/components/helpers/RunnableComponent.svelte +102 -41
  202. package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +9 -5
  203. package/package/components/apps/components/helpers/RunnableWrapper.svelte +9 -1
  204. package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +6 -0
  205. package/package/components/apps/components/helpers/eval.js +1 -36
  206. package/package/components/apps/components/inputs/AppDateInput.svelte +5 -1
  207. package/package/components/apps/components/inputs/AppFileInput.svelte +13 -2
  208. package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
  209. package/package/components/apps/components/inputs/AppMultiSelect.svelte +56 -50
  210. package/package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +1 -0
  211. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +178 -0
  212. package/package/components/apps/components/inputs/AppMultiSelectV2.svelte.d.ts +24 -0
  213. package/package/components/apps/components/inputs/AppNumberInput.svelte +1 -1
  214. package/package/components/apps/components/inputs/AppQuillEditor.svelte +26 -0
  215. package/package/components/apps/components/inputs/AppRangeInput.svelte +38 -37
  216. package/package/components/apps/components/inputs/AppS3FileInput.svelte +3 -1
  217. package/package/components/apps/components/inputs/AppS3FileInput.svelte.d.ts +1 -0
  218. package/package/components/apps/components/inputs/AppSelect.svelte +21 -10
  219. package/package/components/apps/components/inputs/AppSliderInputs.svelte +26 -31
  220. package/package/components/apps/components/inputs/AppTextInput.svelte +1 -1
  221. package/package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +1 -1
  222. package/package/components/apps/components/layout/AppConditionalWrapper.svelte +10 -3
  223. package/package/components/apps/components/layout/AppConditionalWrapper.svelte.d.ts +1 -0
  224. package/package/components/apps/components/layout/AppContainer.svelte +1 -1
  225. package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
  226. package/package/components/apps/components/layout/AppDrawer.svelte +16 -3
  227. package/package/components/apps/components/layout/AppDrawer.svelte.d.ts +2 -0
  228. package/package/components/apps/components/layout/AppModal.svelte +85 -79
  229. package/package/components/apps/components/layout/AppModal.svelte.d.ts +2 -0
  230. package/package/components/apps/components/layout/AppStepper.svelte +7 -2
  231. package/package/components/apps/components/layout/AppStepper.svelte.d.ts +2 -0
  232. package/package/components/apps/components/layout/AppTabs.svelte +4 -2
  233. package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
  234. package/package/components/apps/editor/AppEditor.svelte +3 -2
  235. package/package/components/apps/editor/AppEditorHeader.svelte +68 -38
  236. package/package/components/apps/editor/AppInputs.svelte +1 -1
  237. package/package/components/apps/editor/AppPreview.svelte +18 -7
  238. package/package/components/apps/editor/ComponentHeader.svelte +37 -1
  239. package/package/components/apps/editor/ComponentHeader.svelte.d.ts +2 -0
  240. package/package/components/apps/editor/GridEditor.svelte +15 -6
  241. package/package/components/apps/editor/GridEditorMenu.svelte +120 -49
  242. package/package/components/apps/editor/GridViewer.svelte +14 -5
  243. package/package/components/apps/editor/GridViewer.svelte.d.ts +5 -1
  244. package/package/components/apps/editor/RecomputeAllComponents.svelte +17 -3
  245. package/package/components/apps/editor/RunnableJobPanel.svelte +9 -5
  246. package/package/components/apps/editor/SettingsPanel.svelte +19 -5
  247. package/package/components/apps/editor/SubGridEditor.svelte +44 -27
  248. package/package/components/apps/editor/appUtils.d.ts +6 -1
  249. package/package/components/apps/editor/appUtils.js +85 -7
  250. package/package/components/apps/editor/component/Component.svelte +86 -18
  251. package/package/components/apps/editor/component/Component.svelte.d.ts +3 -0
  252. package/package/components/apps/editor/component/components.d.ts +285 -23
  253. package/package/components/apps/editor/component/components.js +178 -13
  254. package/package/components/apps/editor/component/default-codes.d.ts +1 -1
  255. package/package/components/apps/editor/component/default-codes.js +241 -9
  256. package/package/components/apps/editor/component/sets.d.ts +3 -0
  257. package/package/components/apps/editor/component/sets.js +12 -2
  258. package/package/components/apps/editor/componentsPanel/ComponentList.svelte +15 -2
  259. package/package/components/apps/editor/componentsPanel/componentControlUtils.js +4 -2
  260. package/package/components/apps/editor/componentsPanel/cssUtils.js +1 -1
  261. package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +5 -0
  262. package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +9 -5
  263. package/package/components/apps/editor/contextPanel/components/TableActionsOutput.svelte +1 -1
  264. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +46 -6
  265. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +1 -1
  266. package/package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelWithTable.svelte +1 -1
  267. package/package/components/apps/editor/inlineScriptsPanel/utils.js +3 -1
  268. package/package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +1 -1
  269. package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +5 -34
  270. package/package/components/apps/editor/settingsPanel/ComponentControl.svelte +1 -1
  271. package/package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +8 -5
  272. package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +41 -29
  273. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte +61 -0
  274. package/package/components/apps/editor/settingsPanel/ContextVariables.svelte.d.ts +16 -0
  275. package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +12 -10
  276. package/package/components/apps/editor/settingsPanel/DeleteComponent.svelte +29 -32
  277. package/package/components/apps/editor/settingsPanel/DeleteComponent.svelte.d.ts +0 -5
  278. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte +33 -0
  279. package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte.d.ts +19 -0
  280. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +103 -0
  281. package/package/components/apps/editor/settingsPanel/EventHandlers.svelte.d.ts +18 -0
  282. package/package/components/apps/editor/settingsPanel/GridCondition.svelte +14 -36
  283. package/package/components/apps/editor/settingsPanel/GridTab.svelte +4 -24
  284. package/package/components/apps/editor/settingsPanel/GridTabDisabled.svelte +2 -1
  285. package/package/components/apps/editor/settingsPanel/GridTabDisabled.svelte.d.ts +1 -0
  286. package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +24 -3
  287. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +32 -2
  288. package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +1 -0
  289. package/package/components/apps/editor/settingsPanel/StylePanel.svelte +4 -3
  290. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +0 -2
  291. package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
  292. package/package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +3 -2
  293. package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +8 -1
  294. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -14
  295. package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
  296. package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +4 -4
  297. package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +6 -3
  298. package/package/components/apps/inputType.d.ts +4 -0
  299. package/package/components/apps/rx.d.ts +1 -1
  300. package/package/components/apps/rx.js +7 -0
  301. package/package/components/apps/svelte-grid/Grid.svelte +13 -4
  302. package/package/components/apps/svelte-grid/Grid.svelte.d.ts +2 -1
  303. package/package/components/apps/svelte-grid/types.d.ts +1 -0
  304. package/package/components/apps/svelte-grid/utils/helper.js +1 -0
  305. package/package/components/apps/svelte-grid/utils/overlap.d.ts +3 -0
  306. package/package/components/apps/svelte-grid/utils/overlap.js +21 -0
  307. package/package/components/apps/svelte-select/lib/Select.svelte.d.ts +2 -2
  308. package/package/components/apps/svelte-select/lib/tailwind.css +1 -1
  309. package/package/components/apps/types.d.ts +1 -0
  310. package/package/components/apps/utils.js +13 -3
  311. package/package/components/auditLogs/AuditLogsTable.svelte +5 -2
  312. package/package/components/build_workers.js +1 -0
  313. package/package/components/common/alert/Alert.svelte +17 -17
  314. package/package/components/common/badge/Badge.svelte +6 -3
  315. package/package/components/common/badge/model.d.ts +1 -1
  316. package/package/components/common/button/Button.svelte +22 -14
  317. package/package/components/common/button/ButtonDropdown.svelte +1 -0
  318. package/package/components/common/calendarPicker/CalendarPicker.svelte +2 -0
  319. package/package/components/common/calendarPicker/CalendarPicker.svelte.d.ts +1 -0
  320. package/package/components/common/drawer/ConditionalPortal.svelte +9 -0
  321. package/package/components/common/drawer/ConditionalPortal.svelte.d.ts +18 -0
  322. package/package/components/common/drawer/Disposable.svelte +67 -0
  323. package/package/components/common/drawer/Disposable.svelte.d.ts +37 -0
  324. package/package/components/common/drawer/Drawer.svelte +40 -56
  325. package/package/components/common/drawer/Drawer.svelte.d.ts +2 -1
  326. package/package/components/common/fileDownload/FileDownload.svelte +4 -2
  327. package/package/components/common/fileInput/FileInput.svelte +3 -3
  328. package/package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
  329. package/package/components/common/fileUpload/FileUpload.svelte +5 -4
  330. package/package/components/common/languageIcons/LanguageIcon.svelte +5 -2
  331. package/package/components/common/modal/Modal.svelte +4 -1
  332. package/package/components/common/modal/Modal.svelte.d.ts +1 -0
  333. package/package/components/common/popup/Popup.svelte +1 -1
  334. package/package/components/common/table/RowIcon.svelte +4 -4
  335. package/package/components/common/table/ScriptRow.svelte +12 -1
  336. package/package/components/common/table/ScriptRow.svelte.d.ts +1 -0
  337. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
  338. package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
  339. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte +45 -0
  340. package/package/components/common/toggleButton-v2/ToggleButtonMore.svelte.d.ts +24 -0
  341. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
  342. package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
  343. package/package/components/copilot/CronGen.svelte +2 -2
  344. package/package/components/copilot/FlowCopilotStatus.svelte +1 -1
  345. package/package/components/copilot/RegexGen.svelte +17 -39
  346. package/package/components/copilot/ScriptGen.svelte +14 -5
  347. package/package/components/copilot/StepInputGen.svelte +2 -1
  348. package/package/components/copilot/StepInputsGen.svelte +2 -1
  349. package/package/components/copilot/completion.js +60 -9
  350. package/package/components/copilot/lib.js +5 -3
  351. package/package/components/copilot/prompts/edit.yaml +24 -0
  352. package/package/components/copilot/prompts/editPrompt.d.ts +3 -0
  353. package/package/components/copilot/prompts/editPrompt.js +3 -0
  354. package/package/components/copilot/prompts/fix.yaml +25 -0
  355. package/package/components/copilot/prompts/fixPrompt.d.ts +3 -0
  356. package/package/components/copilot/prompts/fixPrompt.js +3 -0
  357. package/package/components/copilot/prompts/gen.yaml +20 -0
  358. package/package/components/copilot/prompts/genPrompt.d.ts +3 -0
  359. package/package/components/copilot/prompts/genPrompt.js +3 -0
  360. package/package/components/copilot/utils.d.ts +2 -1
  361. package/package/components/copilot/utils.js +38 -0
  362. package/package/components/details/createAppFromScript.d.ts +26 -0
  363. package/package/components/details/createAppFromScript.js +50 -24
  364. package/package/components/flows/CreateActionsApp.svelte +1 -0
  365. package/package/components/flows/CreateActionsFlow.svelte +1 -0
  366. package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
  367. package/package/components/flows/content/FlowInput.svelte +63 -53
  368. package/package/components/flows/content/FlowInputs.svelte +2 -2
  369. package/package/components/flows/content/FlowModuleComponent.svelte +41 -9
  370. package/package/components/flows/content/FlowModuleScript.svelte +40 -1
  371. package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
  372. package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
  373. package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
  374. package/package/components/flows/content/FlowSchedules.svelte +11 -8
  375. package/package/components/flows/content/ScriptEditorDrawer.svelte +6 -6
  376. package/package/components/flows/flowExplorer.js +4 -1
  377. package/package/components/flows/flowStateUtils.js +4 -1
  378. package/package/components/flows/map/FlowConstantsItem.svelte +1 -1
  379. package/package/components/flows/map/FlowErrorHandlerItem.svelte +1 -1
  380. package/package/components/flows/map/FlowModuleSchemaItem.svelte +19 -1
  381. package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
  382. package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
  383. package/package/components/flows/map/FlowSettingsItem.svelte +1 -1
  384. package/package/components/flows/map/MapItem.svelte +2 -0
  385. package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
  386. package/package/components/flows/types.d.ts +4 -0
  387. package/package/components/flows/utils.d.ts +5 -1
  388. package/package/components/flows/utils.js +36 -0
  389. package/package/components/graph/FlowGraph.svelte +6 -2
  390. package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
  391. package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
  392. package/package/components/graph/svelvet/container/models/index.js +1 -1
  393. package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
  394. package/package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +41 -16
  395. package/package/components/graph/util.d.ts +1 -37
  396. package/package/components/graph/util.js +0 -34
  397. package/package/components/home/ItemsList.svelte +44 -9
  398. package/package/components/home/TreeView.svelte +2 -0
  399. package/package/components/icons/AzureIcon.svelte +25 -1
  400. package/package/components/icons/PHPIcon.svelte +117 -0
  401. package/package/components/icons/PHPIcon.svelte.d.ts +17 -0
  402. package/package/components/instanceSettings.d.ts +1 -1
  403. package/package/components/instanceSettings.js +20 -3
  404. package/package/components/jobs/JobPreview.svelte +6 -1
  405. package/package/components/multiselect/MultiSelect.svelte +783 -0
  406. package/package/components/multiselect/MultiSelect.svelte.d.ts +98 -0
  407. package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
  408. package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
  409. package/package/components/multiselect/types.d.ts +56 -0
  410. package/package/components/multiselect/types.js +1 -0
  411. package/package/components/multiselect/utils.d.ts +7 -0
  412. package/package/components/multiselect/utils.js +54 -0
  413. package/package/components/propertyPicker/ObjectViewer.svelte +19 -2
  414. package/package/components/runs/JobLoader.svelte +135 -17
  415. package/package/components/runs/JobLoader.svelte.d.ts +7 -2
  416. package/package/components/runs/JobPreview.svelte +44 -4
  417. package/package/components/runs/JobPreview.svelte.d.ts +2 -0
  418. package/package/components/runs/RunRow.svelte +99 -33
  419. package/package/components/runs/RunRow.svelte.d.ts +5 -1
  420. package/package/components/runs/RunsFilter.svelte +125 -9
  421. package/package/components/runs/RunsFilter.svelte.d.ts +4 -2
  422. package/package/components/runs/RunsTable.svelte +71 -10
  423. package/package/components/runs/RunsTable.svelte.d.ts +8 -1
  424. package/package/components/schema/AddProperty.svelte +149 -0
  425. package/package/components/schema/AddProperty.svelte.d.ts +23 -0
  426. package/package/components/schema/AddPropertyForm.svelte +33 -0
  427. package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
  428. package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
  429. package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
  430. package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
  431. package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
  432. package/package/components/schema/FlowPropertyEditor.svelte +393 -0
  433. package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
  434. package/package/components/schema/PropertyEditor.svelte +185 -0
  435. package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
  436. package/package/components/schema/SchemaFormDND.svelte +75 -0
  437. package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
  438. package/package/components/scriptEditor/LogPanel.svelte +46 -33
  439. package/package/components/scriptEditor/LogPanel.svelte.d.ts +1 -0
  440. package/package/components/scripts/CreateActionsScript.svelte +1 -1
  441. package/package/components/settings/WorkspaceUserSettings.svelte +246 -226
  442. package/package/components/sidebar/MenuButton.svelte +1 -1
  443. package/package/components/sidebar/MenuLink.svelte +1 -1
  444. package/package/components/sidebar/changelogs.js +40 -0
  445. package/package/components/table/AutoDataTable.svelte +124 -163
  446. package/package/components/table/Cell.svelte +4 -1
  447. package/package/components/table/Cell.svelte.d.ts +1 -0
  448. package/package/components/table/DataTable.svelte +13 -5
  449. package/package/components/table/DataTable.svelte.d.ts +1 -0
  450. package/package/components/table/DownloadCsv.svelte +30 -0
  451. package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
  452. package/package/components/table/tableUtils.d.ts +8 -0
  453. package/package/components/table/tableUtils.js +37 -0
  454. package/package/components/vscode.js +1 -1
  455. package/package/components/wizards/AgGridWizard.svelte +27 -2
  456. package/package/components/wizards/AgGridWizard.svelte.d.ts +1 -0
  457. package/package/consts.js +7 -1
  458. package/package/defaults.d.ts +2 -2
  459. package/package/defaults.js +2 -2
  460. package/package/deno_fetch.d.ts.txt +36 -0
  461. package/package/editorUtils.js +2 -0
  462. package/package/gen/core/OpenAPI.js +5 -6
  463. package/package/gen/core/request.js +4 -1
  464. package/package/gen/index.d.ts +0 -1
  465. package/package/gen/index.js +0 -1
  466. package/package/gen/schemas.gen.d.ts +173 -428
  467. package/package/gen/schemas.gen.js +173 -433
  468. package/package/gen/services.gen.d.ts +3182 -1840
  469. package/package/gen/services.gen.js +3652 -2368
  470. package/package/gen/types.gen.d.ts +5445 -1529
  471. package/package/infer.d.ts +1 -1
  472. package/package/infer.js +6 -2
  473. package/package/inferArgSig.d.ts +10 -0
  474. package/package/inferArgSig.js +64 -4
  475. package/package/init_scripts/python_init_code.d.ts +1 -1
  476. package/package/init_scripts/python_init_code.js +1 -1
  477. package/package/process.d.ts.txt +1770 -0
  478. package/package/script_helpers.d.ts +3 -2
  479. package/package/script_helpers.js +28 -3
  480. package/package/scripts.d.ts +3 -1
  481. package/package/scripts.js +10 -3
  482. package/package/utils.d.ts +5 -1
  483. package/package/utils.js +53 -5
  484. package/package/windmill_fetch.d.ts.txt +16966 -0
  485. package/package/workspace_settings.d.ts +15 -0
  486. package/package/workspace_settings.js +81 -0
  487. package/package/zIndexes.d.ts +12 -0
  488. package/package/zIndexes.js +12 -0
  489. package/package.json +19 -10
  490. package/package/components/AppConnect.svelte +0 -566
  491. package/package/components/AppConnect.svelte.d.ts +0 -23
  492. package/package/components/ContextMenu.svelte +0 -89
  493. package/package/components/ContextMenu.svelte.d.ts +0 -28
  494. package/package/components/ParqetTableRenderer.svelte +0 -121
  495. package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
  496. package/package/components/PropertyRow.svelte +0 -80
  497. package/package/components/PropertyRow.svelte.d.ts +0 -23
  498. package/package/components/SchemaEditor.svelte +0 -344
  499. package/package/components/SchemaEditor.svelte.d.ts +0 -23
  500. package/package/components/SchemaModal.svelte +0 -350
  501. package/package/components/SchemaModal.svelte.d.ts +0 -31
  502. package/package/components/apps/components/display/index.d.ts +0 -17
  503. package/package/components/apps/components/display/index.js +0 -17
  504. package/package/components/apps/components/helpers/index.d.ts +0 -10
  505. package/package/components/apps/components/helpers/index.js +0 -10
  506. package/package/components/apps/components/index.d.ts +0 -5
  507. package/package/components/apps/components/index.js +0 -5
  508. package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
  509. package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
@@ -0,0 +1,783 @@
1
+ <script>import { createEventDispatcher, tick } from 'svelte';
2
+ import { flip } from 'svelte/animate';
3
+ import VirtualList from 'svelte-tiny-virtual-list';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { get_label, get_style, scroll_into_view_if_needed_polyfill } from './utils';
6
+ import { ChevronsUpDown, X } from 'lucide-svelte';
7
+ export let activeIndex = null;
8
+ export let activeOption = null;
9
+ export let createOptionMsg = `Create this option...`;
10
+ export let allowUserOptions = false;
11
+ export let autocomplete = `off`;
12
+ export let autoScroll = true;
13
+ export let breakpoint = 800; // any screen with more horizontal pixels is considered desktop, below is mobile
14
+ export let defaultDisabledTitle = `This option is disabled`;
15
+ export let disabled = false;
16
+ export let disabledInputTitle = `This input is disabled`;
17
+ // prettier-ignore
18
+ export let duplicateOptionMsg = `This option is already selected`;
19
+ export let duplicates = false; // whether to allow duplicate options
20
+ // takes two options and returns true if they are equal
21
+ // case-insensitive equality comparison after string coercion and looks only at the `label` key of object options by default
22
+ export let key = (opt) => `${get_label(opt)}`.toLowerCase();
23
+ export let filterFunc = (opt, searchText) => {
24
+ if (!searchText)
25
+ return true;
26
+ return `${get_label(opt)}`.toLowerCase().includes(searchText.toLowerCase());
27
+ };
28
+ export let closeDropdownOnSelect = `desktop`;
29
+ export let form_input = null;
30
+ export let highlightMatches = true;
31
+ export let id = null;
32
+ export let input = null;
33
+ export let inputClass = ``;
34
+ export let inputStyle = null;
35
+ export let inputmode = null;
36
+ export let invalid = false;
37
+ export let liSelectedClass = ``;
38
+ export let liSelectedStyle = null;
39
+ export let loading = false;
40
+ export let matchingOptions = [];
41
+ export let maxSelect = null; // null means there is no upper limit for selected.length
42
+ export let name = null;
43
+ export let noMatchingOptionsMsg = `No matching options`;
44
+ export let open = false;
45
+ export let options;
46
+ export let outerDiv = null;
47
+ export let outerDivClass = ``;
48
+ export let parseLabelsAsHtml = false; // should not be combined with allowUserOptions!
49
+ export let pattern = null;
50
+ export let placeholder = null;
51
+ export let removeAllTitle = `Remove all`;
52
+ export let removeBtnTitle = `Remove`;
53
+ export let minSelect = null; // null means there is no lower limit for selected.length
54
+ export let required = false;
55
+ export let resetFilterOnAdd = true;
56
+ export let searchText = ``;
57
+ export let selected = options
58
+ ?.filter((opt) => opt instanceof Object && opt?.preselected)
59
+ .slice(0, maxSelect ?? undefined) ?? []; // don't allow more than maxSelect preselected options
60
+ export let sortSelected = false;
61
+ export let selectedOptionsDraggable = !sortSelected;
62
+ export let style = null;
63
+ export let ulSelectedClass = ``;
64
+ export let ulSelectedStyle = null;
65
+ export let value = null;
66
+ export let disableRemoveAll = false;
67
+ const selected_to_value = (selected) => {
68
+ value = maxSelect === 1 ? selected[0] ?? null : selected;
69
+ };
70
+ const value_to_selected = (value) => {
71
+ if (maxSelect === 1)
72
+ selected = value ? [value] : [];
73
+ else
74
+ selected = value ?? [];
75
+ };
76
+ // if maxSelect=1, value is the single item in selected (or null if selected is empty)
77
+ // this solves both https://github.com/janosh/svelte-multiselect/issues/86 and
78
+ // https://github.com/janosh/svelte-multiselect/issues/136
79
+ $: selected_to_value(selected);
80
+ $: value_to_selected(value);
81
+ const dispatch = createEventDispatcher();
82
+ let option_msg_is_active = false; // controls active state of <li>{createOptionMsg}</li>
83
+ let window_width;
84
+ // options matching the current search text
85
+ $: matchingOptions = options?.filter((opt) => filterFunc(opt, searchText) &&
86
+ // remove already selected options from dropdown list unless duplicate selections are allowed
87
+ (!selected.map(key).includes(key(opt)) || duplicates));
88
+ // raise if matchingOptions[activeIndex] does not yield a value
89
+ if (activeIndex !== null && !matchingOptions[activeIndex]) {
90
+ throw `Run time error, activeIndex=${activeIndex} is out of bounds, matchingOptions.length=${matchingOptions.length}`;
91
+ }
92
+ // update activeOption when activeIndex changes
93
+ $: activeOption = matchingOptions?.[activeIndex ?? -1] ?? null;
94
+ // add an option to selected list
95
+ function add(option, event) {
96
+ if (maxSelect && maxSelect > 1 && selected.length >= maxSelect) {
97
+ return;
98
+ }
99
+ if (!isNaN(Number(option)) && typeof selected.map(get_label)[0] === `number`) {
100
+ option = Number(option); // convert to number if possible
101
+ }
102
+ const is_duplicate = selected.map(key).includes(key(option));
103
+ if ((maxSelect === null || maxSelect === 1 || selected.length < maxSelect) &&
104
+ (duplicates || !is_duplicate)) {
105
+ if (
106
+ // @ts-ignore
107
+ !options.includes(option) && // first check if we find option in the options list
108
+ // this has the side-effect of not allowing to user to add the same
109
+ // custom option twice in append mode
110
+ [true, `append`].includes(allowUserOptions) &&
111
+ searchText.length > 0) {
112
+ // user entered text but no options match, so if allowUserOptions = true | 'append', we create
113
+ // a new option from the user-entered text
114
+ if (typeof options[0] === `object`) {
115
+ // if 1st option is an object, we create new option as object to keep type homogeneity
116
+ option = { label: searchText };
117
+ }
118
+ else {
119
+ if ([`number`, `undefined`].includes(typeof options[0]) && !isNaN(Number(searchText))) {
120
+ // create new option as number if it parses to a number and 1st option is also number or missing
121
+ option = Number(searchText);
122
+ }
123
+ else {
124
+ option = searchText; // else create custom option as string
125
+ }
126
+ // @ts-ignore
127
+ dispatch(`create`, { option });
128
+ }
129
+ // @ts-ignore
130
+ if (allowUserOptions === `append`)
131
+ options = [...options, option];
132
+ }
133
+ if (resetFilterOnAdd)
134
+ searchText = ``; // reset search string on selection
135
+ if ([``, undefined, null].includes(option)) {
136
+ console.error(`MultiSelect: encountered falsy option ${option}`);
137
+ return;
138
+ }
139
+ if (maxSelect === 1) {
140
+ // for maxSelect = 1 we always replace current option with new one
141
+ // @ts-ignore
142
+ selected = [option];
143
+ }
144
+ else {
145
+ // @ts-ignore
146
+ selected = [...selected, option];
147
+ if (sortSelected === true) {
148
+ selected = selected.sort((op1, op2) => {
149
+ const [label1, label2] = [get_label(op1), get_label(op2)];
150
+ // coerce to string if labels are numbers
151
+ return `${label1}`.localeCompare(`${label2}`);
152
+ });
153
+ }
154
+ else if (typeof sortSelected === `function`) {
155
+ selected = selected.sort(sortSelected);
156
+ }
157
+ }
158
+ const reached_max_select = selected.length === maxSelect;
159
+ const dropdown_should_close = closeDropdownOnSelect === true ||
160
+ (closeDropdownOnSelect === `desktop` && window_width < breakpoint);
161
+ if (reached_max_select || dropdown_should_close) {
162
+ close_dropdown(event);
163
+ }
164
+ else if (!dropdown_should_close) {
165
+ input?.focus();
166
+ }
167
+ // @ts-ignore
168
+ dispatch(`add`, { option });
169
+ // @ts-ignore
170
+ dispatch(`change`, { option, type: `add` });
171
+ invalid = false; // reset error status whenever new items are selected
172
+ form_input?.setCustomValidity(``);
173
+ }
174
+ }
175
+ // remove an option from selected list
176
+ function remove(to_remove) {
177
+ if (selected.length === 0)
178
+ return;
179
+ const idx = selected.findIndex((opt) => key(opt) === key(to_remove));
180
+ let [option] = selected.splice(idx, 1); // remove option from selected list
181
+ if (option === undefined && allowUserOptions) {
182
+ // if option with label could not be found but allowUserOptions is truthy,
183
+ // assume it was created by user and create corresponding option object
184
+ // on the fly for use as event payload
185
+ const other_ops_type = typeof options[0];
186
+ option = (other_ops_type ? { label: to_remove } : to_remove);
187
+ }
188
+ if (option === undefined) {
189
+ return console.error(`Multiselect can't remove selected option ${JSON.stringify(to_remove)}, not found in selected list`);
190
+ }
191
+ selected = [...selected]; // trigger Svelte rerender
192
+ invalid = false; // reset error status whenever items are removed
193
+ form_input?.setCustomValidity(``);
194
+ dispatch(`remove`, { option });
195
+ dispatch(`change`, { option, type: `remove` });
196
+ }
197
+ function open_dropdown(event) {
198
+ if (disabled)
199
+ return;
200
+ open = true;
201
+ if (!(event instanceof FocusEvent)) {
202
+ // avoid double-focussing input when event that opened dropdown was already input FocusEvent
203
+ input?.focus();
204
+ }
205
+ dispatch(`open`, { event });
206
+ }
207
+ function close_dropdown(event) {
208
+ open = false;
209
+ input?.blur();
210
+ activeIndex = null;
211
+ dispatch(`close`, { event });
212
+ }
213
+ // handle all keyboard events this component receives
214
+ async function handle_keydown(event) {
215
+ // on escape or tab out of input: close options dropdown and reset search text
216
+ if (event.key === `Escape` || event.key === `Tab`) {
217
+ close_dropdown(event);
218
+ searchText = ``;
219
+ }
220
+ // on enter key: toggle active option and reset search text
221
+ else if (event.key === `Enter`) {
222
+ event.preventDefault(); // prevent enter key from triggering form submission
223
+ if (activeOption) {
224
+ selected.includes(activeOption) ? remove(activeOption) : add(activeOption, event);
225
+ searchText = ``;
226
+ }
227
+ else if (allowUserOptions && searchText.length > 0) {
228
+ // user entered text but no options match, so if allowUserOptions is truthy, we create new option
229
+ add(searchText, event);
230
+ }
231
+ // no active option and no search text means the options dropdown is closed
232
+ // in which case enter means open it
233
+ else
234
+ open_dropdown(event);
235
+ }
236
+ // on up/down arrow keys: update active option
237
+ else if ([`ArrowDown`, `ArrowUp`].includes(event.key)) {
238
+ // if no option is active yet, but there are matching options, make first one active
239
+ if (activeIndex === null && matchingOptions.length > 0) {
240
+ activeIndex = 0;
241
+ return;
242
+ }
243
+ else if (allowUserOptions && !matchingOptions.length && searchText.length > 0) {
244
+ // if allowUserOptions is truthy and user entered text but no options match, we make
245
+ // <li>{addUserMsg}</li> active on keydown (or toggle it if already active)
246
+ option_msg_is_active = !option_msg_is_active;
247
+ return;
248
+ }
249
+ else if (activeIndex === null) {
250
+ // if no option is active and no options are matching, do nothing
251
+ return;
252
+ }
253
+ event.preventDefault();
254
+ // if none of the above special cases apply, we make next/prev option
255
+ // active with wrap around at both ends
256
+ const increment = event.key === `ArrowUp` ? -1 : 1;
257
+ activeIndex = (activeIndex + increment) % matchingOptions.length;
258
+ // in JS % behaves like remainder operator, not real modulo, so negative numbers stay negative
259
+ // need to do manual wrap around at 0
260
+ if (activeIndex < 0)
261
+ activeIndex = matchingOptions.length - 1;
262
+ if (autoScroll) {
263
+ await tick();
264
+ const li = document.querySelector(`ul.options > li.active`);
265
+ if (li)
266
+ scroll_into_view_if_needed_polyfill(li);
267
+ }
268
+ }
269
+ // on backspace key: remove last selected option
270
+ else if (event.key === `Backspace` && selected.length > 0 && !searchText) {
271
+ remove(selected.at(-1));
272
+ }
273
+ // make first matching option active on any keypress (if none of the above special cases match)
274
+ else if (matchingOptions.length > 0) {
275
+ activeIndex = 0;
276
+ }
277
+ }
278
+ function remove_all() {
279
+ dispatch(`removeAll`, { options: selected });
280
+ dispatch(`change`, { options: selected, type: `removeAll` });
281
+ selected = [];
282
+ searchText = ``;
283
+ }
284
+ $: is_selected = (label) => selected.map(get_label).includes(label);
285
+ const if_enter_or_space = (handler) => (event) => {
286
+ if ([`Enter`, `Space`].includes(event.code)) {
287
+ event.preventDefault();
288
+ handler();
289
+ }
290
+ };
291
+ function on_click_outside(event) {
292
+ if (outerDiv && !outerDiv.contains(event.target)) {
293
+ close_dropdown(event);
294
+ }
295
+ }
296
+ let drag_idx = null;
297
+ // event handlers enable dragging to reorder selected options
298
+ const drop = (target_idx) => (event) => {
299
+ if (!event.dataTransfer)
300
+ return;
301
+ event.dataTransfer.dropEffect = `move`;
302
+ const start_idx = parseInt(event.dataTransfer.getData(`text/plain`));
303
+ const new_selected = [...selected];
304
+ if (start_idx < target_idx) {
305
+ new_selected.splice(target_idx + 1, 0, new_selected[start_idx]);
306
+ new_selected.splice(start_idx, 1);
307
+ }
308
+ else {
309
+ new_selected.splice(target_idx, 0, new_selected[start_idx]);
310
+ new_selected.splice(start_idx + 1, 1);
311
+ }
312
+ selected = new_selected;
313
+ drag_idx = null;
314
+ };
315
+ const dragstart = (idx) => (event) => {
316
+ if (!event.dataTransfer)
317
+ return;
318
+ // only allow moving, not copying (also affects the cursor during drag)
319
+ event.dataTransfer.effectAllowed = `move`;
320
+ event.dataTransfer.dropEffect = `move`;
321
+ event.dataTransfer.setData(`text/plain`, `${idx}`);
322
+ };
323
+ let ul_options;
324
+ // highlight text matching user-entered search text in available options
325
+ function highlight_matching_options(event) {
326
+ // @ts-ignore
327
+ if (!highlightMatches || typeof CSS == `undefined` || !CSS.highlights)
328
+ return; // abort if CSS highlight API not supported
329
+ // clear previous ranges from HighlightRegistry
330
+ // @ts-ignore
331
+ CSS.highlights.clear();
332
+ // get input's search query
333
+ const query = event?.target?.value.trim().toLowerCase();
334
+ if (!query)
335
+ return;
336
+ const tree_walker = document.createTreeWalker(ul_options, NodeFilter.SHOW_TEXT, {
337
+ acceptNode: (node) => {
338
+ // don't highlight text in the "no matching options" message
339
+ if (node?.textContent === noMatchingOptionsMsg)
340
+ return NodeFilter.FILTER_REJECT;
341
+ return NodeFilter.FILTER_ACCEPT;
342
+ }
343
+ });
344
+ const text_nodes = [];
345
+ let current_node = tree_walker.nextNode();
346
+ while (current_node) {
347
+ text_nodes.push(current_node);
348
+ current_node = tree_walker.nextNode();
349
+ }
350
+ // iterate over all text nodes and find matches
351
+ const ranges = text_nodes.map((el) => {
352
+ const text = el.textContent?.toLowerCase();
353
+ const indices = [];
354
+ let start_pos = 0;
355
+ while (text && start_pos < text.length) {
356
+ const index = text.indexOf(query, start_pos);
357
+ if (index === -1)
358
+ break;
359
+ indices.push(index);
360
+ start_pos = index + query.length;
361
+ }
362
+ // create range object for each str found in the text node
363
+ return indices.map((index) => {
364
+ const range = new Range();
365
+ range.setStart(el, index);
366
+ range.setEnd(el, index + query.length);
367
+ return range;
368
+ });
369
+ });
370
+ // create Highlight object from ranges and add to registry
371
+ // @ts-ignore
372
+ CSS.highlights.set(`sms-search-matches`, new Highlight(...ranges.flat()));
373
+ }
374
+ // reset form validation when required prop changes
375
+ // https://github.com/janosh/svelte-multiselect/issues/285
376
+ $: required, form_input?.setCustomValidity(``);
377
+ </script>
378
+
379
+ <svelte:window
380
+ on:click={on_click_outside}
381
+ on:touchstart={on_click_outside}
382
+ bind:innerWidth={window_width}
383
+ />
384
+
385
+ <div
386
+ bind:this={outerDiv}
387
+ class:disabled
388
+ class:single={maxSelect === 1}
389
+ class:open
390
+ class:invalid
391
+ class="multiselect {outerDivClass}"
392
+ on:mouseup|stopPropagation={open_dropdown}
393
+ title={disabled ? disabledInputTitle : null}
394
+ data-id={id}
395
+ role="searchbox"
396
+ tabindex="-1"
397
+ {style}
398
+ >
399
+ <!-- form control input invisible to the user, only purpose is to abort form submission if this component fails data validation -->
400
+ <!-- bind:value={selected} prevents form submission if required prop is true and no options are selected -->
401
+ <input
402
+ {name}
403
+ {required}
404
+ value={selected.length >= Number(required) ? JSON.stringify(selected) : null}
405
+ tabindex="-1"
406
+ aria-hidden="true"
407
+ aria-label="ignore this, used only to prevent form submission if select is required but empty"
408
+ class="form-control"
409
+ bind:this={form_input}
410
+ on:invalid={() => {
411
+ invalid = true
412
+ let msg
413
+ if (maxSelect && maxSelect > 1 && Number(required) > 1) {
414
+ msg = `Please select between ${required} and ${maxSelect} options`
415
+ } else if (Number(required) > 1) {
416
+ msg = `Please select at least ${required} options`
417
+ } else {
418
+ msg = `Please select an option`
419
+ }
420
+ form_input?.setCustomValidity(msg)
421
+ }}
422
+ />
423
+ <slot name="expand-icon" {open}>
424
+ <ChevronsUpDown size={16} />
425
+ </slot>
426
+ <ul class="selected {ulSelectedClass}" aria-label="selected options" style={ulSelectedStyle}>
427
+ {#each selected as option, idx (duplicates ? [key(option), idx] : key(option))}
428
+ <li
429
+ class={liSelectedClass}
430
+ role="option"
431
+ aria-selected="true"
432
+ animate:flip={{ duration: 100 }}
433
+ draggable={selectedOptionsDraggable && !disabled && selected.length > 1}
434
+ on:dragstart={dragstart(idx)}
435
+ on:drop|preventDefault={drop(idx)}
436
+ on:dragenter={() => (drag_idx = idx)}
437
+ on:dragover|preventDefault
438
+ class:active={drag_idx === idx}
439
+ style="{get_style(option, `selected`)} {liSelectedStyle}"
440
+ >
441
+ <!-- on:dragover|preventDefault needed for the drop to succeed https://stackoverflow.com/a/31085796 -->
442
+ <slot name="selected" {option} {idx}>
443
+ <slot {option} {idx}>
444
+ {#if parseLabelsAsHtml}
445
+ {@html get_label(option)}
446
+ {:else}
447
+ {get_label(option)}
448
+ {/if}
449
+ </slot>
450
+ </slot>
451
+ {#if !disabled && (minSelect === null || selected.length > minSelect)}
452
+ <button
453
+ on:mouseup|stopPropagation={() => remove(option)}
454
+ on:keydown={if_enter_or_space(() => remove(option))}
455
+ type="button"
456
+ title="{removeBtnTitle} {get_label(option)}"
457
+ class="remove"
458
+ >
459
+ <slot name="remove-icon">
460
+ <X size={20} class="text-primary dark:text-primary-inverse p-0.5" />
461
+ </slot>
462
+ </button>
463
+ {/if}
464
+ </li>
465
+ {/each}
466
+ <input
467
+ class={inputClass}
468
+ style={inputStyle}
469
+ bind:this={input}
470
+ bind:value={searchText}
471
+ on:mouseup|self|stopPropagation={(e) => open_dropdown(e)}
472
+ on:keydown|stopPropagation={(e) => handle_keydown(e)}
473
+ on:focus={(e) => open_dropdown(e)}
474
+ on:input={(e) => highlight_matching_options(e)}
475
+ {id}
476
+ {disabled}
477
+ {autocomplete}
478
+ {inputmode}
479
+ {pattern}
480
+ placeholder={selected.length === 0 ? placeholder : undefined}
481
+ aria-invalid={invalid ? 'true' : undefined}
482
+ on:blur
483
+ on:change
484
+ on:click
485
+ on:keydown
486
+ on:keyup
487
+ on:mousedown
488
+ on:mouseenter
489
+ on:mouseleave
490
+ on:touchcancel
491
+ on:touchend
492
+ on:touchmove
493
+ on:touchstart
494
+ />
495
+
496
+ <!-- the above on:* lines forward potentially useful DOM events -->
497
+ <slot name="after-input" {selected} {disabled} {invalid} {id} {placeholder} {open} {required} />
498
+ </ul>
499
+ {#if loading}
500
+ <slot name="spinner">spinner</slot>
501
+ {/if}
502
+ {#if disabled}
503
+ <slot name="disabled-icon">disable</slot>
504
+ {:else if selected.length > 0}
505
+ {#if maxSelect !== 1 && selected.length > 1 && !disableRemoveAll}
506
+ <button
507
+ type="button"
508
+ class="remove remove-all"
509
+ title={removeAllTitle}
510
+ on:mouseup|stopPropagation={remove_all}
511
+ on:keydown={if_enter_or_space(remove_all)}
512
+ >
513
+ <slot name="remove-icon">
514
+ <X
515
+ size={24}
516
+ class="text-secondary p-1 rounded-full bg-surface hover:bg-surface-secondary"
517
+ />
518
+ </slot>
519
+ </button>
520
+ {/if}
521
+ {/if}
522
+ <!-- only render options dropdown if options or searchText is not empty (needed to avoid briefly flashing empty dropdown) -->
523
+ {#if (searchText && noMatchingOptionsMsg) || options?.length > 0}
524
+ <div class="options bg-surface shadow-md rounded-component">
525
+ <VirtualList
526
+ width="100%"
527
+ height={Math.min(32 * matchingOptions.length, 320)}
528
+ itemCount={matchingOptions.length}
529
+ itemSize={32}
530
+ >
531
+ <div slot="item" let:index let:style {style}>
532
+ {@const option = matchingOptions[index]}
533
+ {@const {
534
+ label,
535
+ disabled = null,
536
+ title = null,
537
+ selectedTitle = null,
538
+ disabledTitle = defaultDisabledTitle
539
+ } = option instanceof Object ? option : { label: option }}
540
+
541
+ <!-- svelte-ignore a11y-interactive-supports-focus -->
542
+ <div
543
+ on:mousedown|stopPropagation
544
+ on:mouseup|stopPropagation={(event) => {
545
+ if (!disabled) add(option, event)
546
+ }}
547
+ title={disabled ? disabledTitle : (is_selected(label) && selectedTitle) || title}
548
+ class={twMerge('hover:bg-blue-100 hover:dark:bg-gray-900 cursor-pointer !px-2 py-1')}
549
+ on:mouseover={() => {
550
+ if (!disabled) activeIndex = index
551
+ }}
552
+ on:focus={() => {
553
+ if (!disabled) activeIndex = index
554
+ }}
555
+ on:mouseout={() => (activeIndex = null)}
556
+ on:blur={() => (activeIndex = null)}
557
+ role="option"
558
+ aria-selected="false"
559
+ style={get_style(option, `option`)}
560
+ >
561
+ <slot name="option" {option} {index}>
562
+ <slot {option} {index}>
563
+ {#if parseLabelsAsHtml}
564
+ {@html get_label(option)}
565
+ {:else}
566
+ {get_label(option)}
567
+ {/if}
568
+ </slot>
569
+ </slot>
570
+ </div>
571
+ </div>
572
+ <div slot="footer" class="h-0" />
573
+ </VirtualList>
574
+ {#if searchText}
575
+ {@const text_input_is_duplicate = selected.map(get_label).includes(searchText)}
576
+ {@const is_dupe = !duplicates && text_input_is_duplicate && `dupe`}
577
+ {@const can_create = Boolean(allowUserOptions && createOptionMsg) && `create`}
578
+ {@const no_match =
579
+ Boolean(matchingOptions?.length == 0 && noMatchingOptionsMsg) && `no-match`}
580
+ {@const msgType = is_dupe || can_create || no_match}
581
+ {#if msgType}
582
+ {@const msg = {
583
+ dupe: duplicateOptionMsg,
584
+ create: createOptionMsg,
585
+ 'no-match': noMatchingOptionsMsg
586
+ }[msgType]}
587
+ <!-- svelte-ignore a11y-interactive-supports-focus -->
588
+ <div
589
+ on:mousedown|stopPropagation
590
+ on:mouseup|stopPropagation={(event) => {
591
+ if (allowUserOptions) add(searchText, event)
592
+ }}
593
+ title={createOptionMsg}
594
+ class:active={option_msg_is_active}
595
+ on:mouseover={() => (option_msg_is_active = true)}
596
+ on:focus={() => (option_msg_is_active = true)}
597
+ on:mouseout={() => (option_msg_is_active = false)}
598
+ on:blur={() => (option_msg_is_active = false)}
599
+ role="option"
600
+ aria-selected="false"
601
+ class="user-msg p-1"
602
+ style:cursor={{
603
+ dupe: `not-allowed`,
604
+ create: `pointer`,
605
+ 'no-match': `default`
606
+ }[msgType]}
607
+ >
608
+ <slot name="user-msg" {searchText} {msgType} {msg}>
609
+ {msg}
610
+ </slot>
611
+ </div>
612
+ {/if}
613
+ {/if}
614
+ </div>
615
+ {/if}
616
+ </div>
617
+
618
+ <style>
619
+ :where(div.multiselect) {
620
+ position: relative;
621
+ align-items: center;
622
+ display: flex;
623
+ cursor: text;
624
+ box-sizing: border-box;
625
+ border: var(--sms-border, 1pt solid lightgray);
626
+ border-radius: var(--sms-border-radius, 3pt);
627
+ background: var(--sms-bg);
628
+ width: var(--sms-width);
629
+ max-width: var(--sms-max-width);
630
+ padding: var(--sms-padding, 0 3pt);
631
+ color: var(--sms-text-color);
632
+ font-size: var(--sms-font-size, inherit);
633
+ min-height: var(--sms-min-height, 22pt);
634
+ margin: var(--sms-margin);
635
+ }
636
+ :where(div.multiselect.open) {
637
+ /* increase z-index when open to ensure the dropdown of one <MultiSelect />
638
+ displays above that of another slightly below it on the page */
639
+ z-index: var(--sms-open-z-index, 4);
640
+ }
641
+ :where(div.multiselect:focus-within) {
642
+ border: var(--sms-focus-border, 1pt solid var(--sms-active-color, cornflowerblue));
643
+ }
644
+ :where(div.multiselect.disabled) {
645
+ background: var(--sms-disabled-bg, lightgray);
646
+ cursor: not-allowed;
647
+ }
648
+
649
+ :where(div.multiselect > ul.selected) {
650
+ display: flex;
651
+ flex: 1;
652
+ padding: 0;
653
+ margin: 0;
654
+ flex-wrap: wrap;
655
+ }
656
+ :where(div.multiselect > ul.selected > li) {
657
+ align-items: center;
658
+ border-radius: 3pt;
659
+ display: flex;
660
+ margin: 2pt;
661
+ line-height: normal;
662
+ transition: 0.3s;
663
+ white-space: nowrap;
664
+ background: var(--sms-selected-bg, rgba(0, 0, 0, 0.15));
665
+ padding: var(--sms-selected-li-padding, 1pt 5pt);
666
+ color: var(--sms-selected-text-color, var(--sms-text-color));
667
+ }
668
+ :where(div.multiselect > ul.selected > li[draggable='true']) {
669
+ cursor: grab;
670
+ }
671
+ :where(div.multiselect > ul.selected > li.active) {
672
+ background: var(--sms-li-active-bg, var(--sms-active-color, rgba(0, 0, 0, 0.15)));
673
+ }
674
+ :where(div.multiselect button) {
675
+ border-radius: 50%;
676
+ display: flex;
677
+ transition: 0.2s;
678
+ color: inherit;
679
+ background: transparent;
680
+ border: none;
681
+ cursor: pointer;
682
+ outline: none;
683
+ padding: 0;
684
+ margin: 0 0 0 3pt; /* CSS reset */
685
+ }
686
+ :where(div.multiselect button.remove-all) {
687
+ margin: 0 3pt;
688
+ }
689
+ :where(ul.selected > li button:hover, button.remove-all:hover, button:focus) {
690
+ color: var(--sms-remove-btn-hover-color, lightskyblue);
691
+ background: var(--sms-remove-btn-hover-bg, rgba(0, 0, 0, 0.2));
692
+ }
693
+
694
+ :where(div.multiselect input) {
695
+ margin: auto 0; /* CSS reset */
696
+ padding: 0; /* CSS reset */
697
+ }
698
+ :where(div.multiselect > ul.selected > input) {
699
+ border: none;
700
+ outline: none;
701
+ background: none;
702
+ flex: 1; /* this + next line fix issue #12 https://git.io/JiDe3 */
703
+ min-width: 2em;
704
+ /* ensure input uses text color and not --sms-selected-text-color */
705
+ color: var(--sms-text-color);
706
+ font-size: inherit;
707
+ cursor: inherit; /* needed for disabled state */
708
+ border-radius: 0; /* reset ul.selected > li */
709
+ }
710
+ /* don't wrap ::placeholder rules in :where() as it seems to be overpowered by browser defaults i.t.o. specificity */
711
+ div.multiselect > ul.selected > input::-moz-placeholder {
712
+ padding-left: 5pt;
713
+ color: var(--sms-placeholder-color);
714
+ opacity: var(--sms-placeholder-opacity);
715
+ }
716
+ div.multiselect > ul.selected > input::placeholder {
717
+ padding-left: 5pt;
718
+ color: var(--sms-placeholder-color);
719
+ opacity: var(--sms-placeholder-opacity);
720
+ }
721
+ :where(div.multiselect > input.form-control) {
722
+ width: 2em;
723
+ position: absolute;
724
+ background: transparent;
725
+ border: none;
726
+ outline: none;
727
+ z-index: -1;
728
+ opacity: 0;
729
+ pointer-events: none;
730
+ }
731
+
732
+ :where(div.multiselect > ul.options) {
733
+ list-style: none;
734
+ top: 100%;
735
+ left: 0;
736
+ width: 100%;
737
+ position: absolute;
738
+ overflow: auto;
739
+ transition: all 0.2s;
740
+ box-sizing: border-box;
741
+ background: var(--sms-options-bg, white);
742
+ max-height: var(--sms-options-max-height, 50vh);
743
+ overscroll-behavior: var(--sms-options-overscroll, none);
744
+ border: var(--sms-options-border);
745
+ border-width: var(--sms-options-border-width);
746
+ border-radius: var(--sms-options-border-radius, 1ex);
747
+ padding: var(--sms-options-padding);
748
+ margin: var(--sms-options-margin, inherit);
749
+ }
750
+ :where(div.multiselect > ul.options.hidden) {
751
+ visibility: hidden;
752
+ opacity: 0;
753
+ transform: translateY(50px);
754
+ }
755
+ :where(div.multiselect > ul.options > li) {
756
+ padding: 3pt 2ex;
757
+ cursor: pointer;
758
+ scroll-margin: var(--sms-options-scroll-margin, 100px);
759
+ }
760
+ :where(div.multiselect > ul.options .user-msg) {
761
+ /* block needed so vertical padding applies to span */
762
+ display: block;
763
+ padding: 3pt 2ex;
764
+ }
765
+ :where(div.multiselect > ul.options > li.selected) {
766
+ background: var(--sms-li-selected-bg);
767
+ color: var(--sms-li-selected-color);
768
+ }
769
+ :where(div.multiselect > ul.options > li.active) {
770
+ background: var(--sms-li-active-bg, var(--sms-active-color, rgba(0, 0, 0, 0.15)));
771
+ }
772
+ :where(div.multiselect > ul.options > li.disabled) {
773
+ cursor: not-allowed;
774
+ background: var(--sms-li-disabled-bg, #f5f5f6);
775
+ color: var(--sms-li-disabled-text, #b8b8b8);
776
+ }
777
+
778
+ :where(span.max-select-msg) {
779
+ padding: 0 3pt;
780
+ }
781
+ ::highlight(sms-search-matches) {
782
+ color: mediumaquamarine;
783
+ }</style>