windmill-components 1.70.0 → 1.75.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 (408) hide show
  1. package/assets/app.css +12 -1
  2. package/components/AppConnect.svelte +4 -3
  3. package/components/DisplayResult.svelte +27 -9
  4. package/components/FieldHeader.svelte +12 -8
  5. package/components/FlowBuilder.svelte +107 -39
  6. package/components/FlowBuilder.svelte.d.ts +5 -0
  7. package/components/FlowGraphViewer.svelte +5 -4
  8. package/components/FlowJobResult.svelte +3 -3
  9. package/components/FlowPreviewContent.svelte +3 -8
  10. package/components/FlowStatusViewer.svelte +21 -8
  11. package/components/GroupEditor.svelte +8 -0
  12. package/components/InputTransformForm.svelte +13 -20
  13. package/components/InputTransformSchemaForm.svelte +103 -0
  14. package/components/InputTransformSchemaForm.svelte.d.ts +24 -0
  15. package/components/LogViewer.svelte +1 -1
  16. package/components/ModulePreview.svelte +3 -2
  17. package/components/Multiselect.svelte +1 -1
  18. package/components/Path.svelte +15 -11
  19. package/components/Popover.svelte +2 -13
  20. package/components/ResourcePicker.svelte +33 -14
  21. package/components/RunChart.svelte +24 -5
  22. package/components/RunForm.svelte +5 -6
  23. package/components/RunForm.svelte.d.ts +1 -0
  24. package/components/SchemaForm.svelte +59 -57
  25. package/components/SchemaForm.svelte.d.ts +0 -5
  26. package/components/ScriptBuilder.svelte +30 -14
  27. package/components/ScriptPicker.svelte +3 -0
  28. package/components/SimpleEditor.svelte +4 -1
  29. package/components/SimpleEditor.svelte.d.ts +2 -0
  30. package/components/Slider.svelte +6 -1
  31. package/components/Slider.svelte.d.ts +1 -0
  32. package/components/TemplateEditor.svelte +1 -1
  33. package/components/TestJobLoader.svelte +2 -2
  34. package/components/Toggle.svelte +17 -4
  35. package/components/Toggle.svelte.d.ts +2 -0
  36. package/components/Tooltip.svelte +1 -1
  37. package/components/UserSettings.svelte +2 -0
  38. package/components/apps/components/buttons/AppButton.svelte +38 -22
  39. package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
  40. package/components/apps/components/buttons/AppForm.svelte +16 -6
  41. package/components/apps/components/buttons/AppForm.svelte.d.ts +3 -0
  42. package/components/apps/components/buttons/AppFormButton.svelte +12 -4
  43. package/components/apps/components/buttons/AppFormButton.svelte.d.ts +3 -0
  44. package/components/apps/components/display/AppBarChart.svelte +15 -7
  45. package/components/apps/components/display/AppBarChart.svelte.d.ts +3 -0
  46. package/components/apps/components/display/AppDisplayComponent.svelte +17 -12
  47. package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +1 -0
  48. package/components/apps/components/display/AppHtml.svelte +18 -4
  49. package/components/apps/components/display/AppHtml.svelte.d.ts +3 -0
  50. package/components/apps/components/display/AppIcon.svelte +20 -8
  51. package/components/apps/components/display/AppIcon.svelte.d.ts +3 -0
  52. package/components/apps/components/display/AppImage.svelte +17 -10
  53. package/components/apps/components/display/AppImage.svelte.d.ts +3 -0
  54. package/components/apps/components/display/AppMap.svelte +214 -0
  55. package/components/apps/components/display/AppMap.svelte.d.ts +23 -0
  56. package/components/apps/components/display/AppPdf.svelte +304 -0
  57. package/components/apps/components/display/AppPdf.svelte.d.ts +24 -0
  58. package/components/apps/components/display/AppPieChart.svelte +15 -7
  59. package/components/apps/components/display/AppPieChart.svelte.d.ts +3 -0
  60. package/components/apps/components/display/AppScatterChart.svelte +12 -4
  61. package/components/apps/components/display/AppScatterChart.svelte.d.ts +3 -0
  62. package/components/apps/components/display/AppText.svelte +38 -32
  63. package/components/apps/components/display/AppText.svelte.d.ts +1 -0
  64. package/components/apps/components/display/AppTimeseries.svelte +12 -4
  65. package/components/apps/components/display/AppTimeseries.svelte.d.ts +3 -0
  66. package/components/apps/components/display/PlotlyHtml.svelte +8 -14
  67. package/components/apps/components/display/PlotlyHtml.svelte.d.ts +1 -1
  68. package/components/apps/components/display/VegaLiteHtml.svelte +3 -8
  69. package/components/apps/components/display/VegaLiteHtml.svelte.d.ts +1 -0
  70. package/components/apps/components/display/index.d.ts +3 -0
  71. package/components/apps/components/display/index.js +3 -0
  72. package/components/apps/components/display/table/AppAggridTable.svelte +16 -7
  73. package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
  74. package/components/apps/components/display/table/AppTable.svelte +65 -20
  75. package/components/apps/components/display/table/AppTable.svelte.d.ts +3 -1
  76. package/components/apps/components/display/table/AppTableFooter.svelte +8 -1
  77. package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +2 -0
  78. package/components/apps/components/helpers/AlignWrapper.svelte +13 -7
  79. package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +3 -1
  80. package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
  81. package/components/apps/components/helpers/InputValue.svelte +38 -15
  82. package/components/apps/components/helpers/NonRunnableComponent.svelte +18 -3
  83. package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -0
  84. package/components/apps/components/helpers/RefreshButton.svelte +1 -1
  85. package/components/apps/components/helpers/ResizeWrapper.svelte +24 -0
  86. package/components/apps/components/helpers/ResizeWrapper.svelte.d.ts +19 -0
  87. package/components/apps/components/helpers/RunnableComponent.svelte +76 -68
  88. package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -1
  89. package/components/apps/components/helpers/RunnableWrapper.svelte +9 -5
  90. package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +3 -1
  91. package/components/apps/components/inputs/AppCheckbox.svelte +8 -2
  92. package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +3 -0
  93. package/components/apps/components/inputs/AppDateInput.svelte +25 -18
  94. package/components/apps/components/inputs/AppDateInput.svelte.d.ts +6 -1
  95. package/components/apps/components/inputs/AppFileInput.svelte +22 -14
  96. package/components/apps/components/inputs/AppFileInput.svelte.d.ts +3 -0
  97. package/components/apps/components/inputs/AppMultiSelect.svelte +82 -0
  98. package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +27 -0
  99. package/components/apps/components/inputs/AppNumberInput.svelte +20 -16
  100. package/components/apps/components/inputs/AppNumberInput.svelte.d.ts +5 -0
  101. package/components/apps/components/inputs/AppRangeInput.svelte +55 -14
  102. package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +3 -0
  103. package/components/apps/components/inputs/AppSelect.svelte +58 -21
  104. package/components/apps/components/inputs/AppSelect.svelte.d.ts +3 -0
  105. package/components/apps/components/inputs/AppSliderInputs.svelte +41 -9
  106. package/components/apps/components/inputs/AppSliderInputs.svelte.d.ts +3 -0
  107. package/components/apps/components/inputs/AppTextInput.svelte +53 -19
  108. package/components/apps/components/inputs/AppTextInput.svelte.d.ts +6 -0
  109. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +13 -3
  110. package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +3 -0
  111. package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -0
  112. package/components/apps/components/inputs/currency/CurrencyInput.svelte.d.ts +1 -0
  113. package/components/apps/components/layout/AppContainer.svelte +21 -13
  114. package/components/apps/components/layout/AppContainer.svelte.d.ts +3 -0
  115. package/components/apps/components/layout/AppDivider.svelte +24 -4
  116. package/components/apps/components/layout/AppDivider.svelte.d.ts +3 -1
  117. package/components/apps/components/layout/AppDrawer.svelte +89 -0
  118. package/components/apps/components/layout/AppDrawer.svelte.d.ts +24 -0
  119. package/components/apps/components/layout/AppSplitpanes.svelte +88 -0
  120. package/components/apps/components/layout/AppSplitpanes.svelte.d.ts +26 -0
  121. package/components/apps/components/layout/AppTabs.svelte +62 -21
  122. package/components/apps/components/layout/AppTabs.svelte.d.ts +3 -0
  123. package/components/apps/components/layout/index.d.ts +2 -0
  124. package/components/apps/components/layout/index.js +2 -0
  125. package/components/apps/editor/AppEditor.svelte +83 -19
  126. package/components/apps/editor/AppEditor.svelte.d.ts +3 -1
  127. package/components/apps/editor/AppEditorHeader.svelte +107 -32
  128. package/components/apps/editor/AppInputs.svelte +3 -3
  129. package/components/apps/editor/AppPreview.svelte +20 -7
  130. package/components/apps/editor/ComponentHeader.svelte +14 -3
  131. package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -0
  132. package/components/apps/editor/GridEditor.svelte +85 -71
  133. package/components/apps/editor/GridPanel.svelte +29 -0
  134. package/components/apps/editor/GridPanel.svelte.d.ts +18 -0
  135. package/components/apps/editor/RecomputeAllComponents.svelte +8 -6
  136. package/components/apps/editor/SettingsPanel.svelte +14 -24
  137. package/components/apps/editor/SubGridEditor.svelte +46 -18
  138. package/components/apps/editor/SubGridEditor.svelte.d.ts +5 -0
  139. package/components/apps/editor/appUtils.d.ts +12 -2
  140. package/components/apps/editor/appUtils.js +121 -21
  141. package/components/apps/editor/component/Component.svelte +282 -57
  142. package/components/apps/editor/component/Component.svelte.d.ts +3 -1
  143. package/components/apps/editor/component/ComponentNavigation.svelte +125 -0
  144. package/components/apps/editor/component/ComponentNavigation.svelte.d.ts +14 -0
  145. package/components/apps/editor/component/components.d.ts +14 -2
  146. package/components/apps/editor/component/components.js +417 -43
  147. package/components/apps/editor/component/default-codes.js +6 -6
  148. package/components/apps/editor/component/sets.js +11 -3
  149. package/components/apps/editor/componentsPanel/ComponentList.svelte +72 -29
  150. package/components/apps/editor/componentsPanel/CssProperty.svelte +59 -23
  151. package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +2 -1
  152. package/components/apps/editor/componentsPanel/CssSettings.svelte +56 -9
  153. package/components/apps/editor/componentsPanel/ListItem.svelte +23 -12
  154. package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +1 -0
  155. package/components/apps/editor/componentsPanel/componentStaticValues.js +14 -2
  156. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
  157. package/components/apps/editor/contextPanel/ContextPanel.svelte +107 -61
  158. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +13 -3
  159. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
  160. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +63 -25
  161. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +5 -0
  162. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +11 -5
  163. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
  164. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +26 -17
  165. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +95 -85
  166. package/components/apps/editor/inlineScriptsPanel/utils.d.ts +5 -9
  167. package/components/apps/editor/inlineScriptsPanel/utils.js +19 -8
  168. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +10 -9
  169. package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +21 -12
  170. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
  171. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +95 -56
  172. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +1 -0
  173. package/components/apps/editor/settingsPanel/GridPane.svelte +75 -0
  174. package/components/apps/editor/settingsPanel/GridPane.svelte.d.ts +20 -0
  175. package/components/apps/editor/settingsPanel/GridTab.svelte +5 -5
  176. package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +2 -0
  177. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
  178. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -1
  179. package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte +13 -6
  180. package/components/apps/editor/settingsPanel/Recompute.svelte +1 -1
  181. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +1 -1
  182. package/components/apps/editor/settingsPanel/TableActions.svelte +28 -1
  183. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +2 -2
  184. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +48 -0
  185. package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +19 -0
  186. package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +1 -1
  187. package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +1 -1
  188. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +27 -3
  189. package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +2 -0
  190. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +2 -2
  191. package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +2 -1
  192. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +54 -6
  193. package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +1 -0
  194. package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte +7 -9
  195. package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte.d.ts +1 -1
  196. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +1 -0
  197. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte.d.ts +1 -0
  198. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +1 -1
  199. package/components/apps/inputType.d.ts +6 -5
  200. package/components/apps/rx.js +2 -1
  201. package/components/apps/store.d.ts +6 -1
  202. package/components/apps/types.d.ts +14 -4
  203. package/components/apps/utils.d.ts +2 -2
  204. package/components/apps/utils.js +21 -49
  205. package/components/common/button/ButtonPopup.svelte +2 -0
  206. package/components/common/button/ButtonPopup.svelte.d.ts +1 -0
  207. package/components/common/button/UndoRedo.svelte +32 -0
  208. package/components/common/button/UndoRedo.svelte.d.ts +20 -0
  209. package/components/common/drawer/Drawer.svelte +10 -4
  210. package/components/common/drawer/Drawer.svelte.d.ts +3 -1
  211. package/components/common/drawer/DrawerContent.svelte +0 -1
  212. package/components/common/fileInput/FileInput.svelte +47 -21
  213. package/components/common/fileInput/FileInput.svelte.d.ts +3 -1
  214. package/components/common/fileInput/model.d.ts +1 -0
  215. package/components/common/fileInput/model.js +1 -0
  216. package/components/common/index.d.ts +1 -0
  217. package/components/common/index.js +1 -0
  218. package/components/common/menu/Menu.svelte +3 -2
  219. package/components/common/menu/Menu.svelte.d.ts +2 -1
  220. package/components/common/modal/Modal.svelte +9 -4
  221. package/components/common/modal/Modal.svelte.d.ts +2 -0
  222. package/components/common/table/AppRow.svelte +13 -4
  223. package/components/common/table/AppRow.svelte.d.ts +1 -0
  224. package/components/common/table/FlowRow.svelte +21 -8
  225. package/components/common/table/FlowRow.svelte.d.ts +1 -0
  226. package/components/common/table/ScriptRow.svelte +42 -10
  227. package/components/common/table/ScriptRow.svelte.d.ts +1 -0
  228. package/components/common/tabs/Tab.svelte +12 -5
  229. package/components/common/tabs/Tab.svelte.d.ts +4 -1
  230. package/components/common/tabs/Tabs.svelte +8 -6
  231. package/components/common/tabs/Tabs.svelte.d.ts +3 -1
  232. package/components/flows/FlowEditor.svelte +6 -4
  233. package/components/flows/common/FlowCardHeader.svelte +4 -1
  234. package/components/flows/content/BranchPredicateEditor.svelte +3 -4
  235. package/components/flows/content/CapturePayload.svelte +1 -2
  236. package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
  237. package/components/flows/content/FlowConstants.svelte +7 -13
  238. package/components/flows/content/FlowEditorPanel.svelte +4 -3
  239. package/components/flows/content/FlowFailureModule.svelte +2 -1
  240. package/components/flows/content/FlowInput.svelte +4 -2
  241. package/components/flows/content/FlowLoop.svelte +3 -4
  242. package/components/flows/content/FlowModuleComponent.svelte +23 -11
  243. package/components/flows/content/FlowModuleEarlyStop.svelte +3 -1
  244. package/components/flows/content/FlowModuleHeader.svelte +26 -3
  245. package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
  246. package/components/flows/content/FlowModuleSleep.svelte +2 -2
  247. package/components/flows/content/FlowModuleWrapper.svelte +2 -8
  248. package/components/flows/content/FlowSchedules.svelte +1 -2
  249. package/components/flows/content/FlowSettings.svelte +17 -37
  250. package/components/flows/content/ScriptEditorDrawer.svelte +98 -0
  251. package/components/flows/content/ScriptEditorDrawer.svelte.d.ts +19 -0
  252. package/components/flows/flowState.d.ts +2 -3
  253. package/components/flows/flowState.js +1 -4
  254. package/components/flows/flowStateUtils.d.ts +7 -6
  255. package/components/flows/flowStateUtils.js +5 -9
  256. package/components/flows/flowStore.d.ts +5 -4
  257. package/components/flows/flowStore.js +5 -17
  258. package/components/flows/header/FlowImportExportMenu.svelte +2 -1
  259. package/components/flows/map/FlowConstantsItem.svelte +2 -2
  260. package/components/flows/map/FlowErrorHandlerItem.svelte +12 -13
  261. package/components/flows/map/FlowInputsItem.svelte +2 -3
  262. package/components/flows/map/FlowModuleSchemaItem.svelte +88 -91
  263. package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +3 -3
  264. package/components/flows/map/FlowModuleSchemaMap.svelte +164 -138
  265. package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -2
  266. package/components/flows/map/FlowSettingsItem.svelte +5 -4
  267. package/components/flows/map/InsertModuleButton.svelte +12 -10
  268. package/components/flows/map/InsertModuleButton.svelte.d.ts +1 -0
  269. package/components/flows/map/MapItem.svelte +176 -103
  270. package/components/flows/map/MapItem.svelte.d.ts +20 -2
  271. package/components/flows/map/VirtualItem.svelte +129 -0
  272. package/components/flows/map/VirtualItem.svelte.d.ts +44 -0
  273. package/components/flows/pickers/WorkspaceScriptPicker.svelte +1 -1
  274. package/components/flows/previousResults.d.ts +1 -1
  275. package/components/flows/previousResults.js +32 -17
  276. package/components/flows/types.d.ts +13 -1
  277. package/components/flows/utils.js +1 -1
  278. package/components/graph/FlowGraph.svelte +227 -167
  279. package/components/graph/FlowGraph.svelte.d.ts +14 -1
  280. package/components/graph/model.d.ts +6 -36
  281. package/components/graph/model.js +1 -1
  282. package/components/graph/svelvet/LICENSE +21 -0
  283. package/components/graph/svelvet/collapsible/controllers/util.d.ts +15 -0
  284. package/components/graph/svelvet/collapsible/controllers/util.js +144 -0
  285. package/components/graph/svelvet/collapsible/models/Collapsible.d.ts +17 -0
  286. package/components/graph/svelvet/collapsible/models/Collapsible.js +25 -0
  287. package/components/graph/svelvet/collapsible/types/types.d.ts +8 -0
  288. package/components/graph/svelvet/collapsible/types/types.js +1 -0
  289. package/components/graph/svelvet/container/README.md +7 -0
  290. package/components/graph/svelvet/container/controllers/middleware.d.ts +18 -0
  291. package/components/graph/svelvet/container/controllers/middleware.js +101 -0
  292. package/components/graph/svelvet/container/views/GraphView.svelte +252 -0
  293. package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +25 -0
  294. package/components/graph/svelvet/container/views/Svelvet.svelte +131 -0
  295. package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +41 -0
  296. package/components/graph/svelvet/customCss/controllers/getCss.d.ts +2 -0
  297. package/components/graph/svelvet/customCss/controllers/getCss.js +57 -0
  298. package/components/graph/svelvet/d3/controllers/README.md +3 -0
  299. package/components/graph/svelvet/d3/controllers/d3.d.ts +5 -0
  300. package/components/graph/svelvet/d3/controllers/d3.js +59 -0
  301. package/components/graph/svelvet/d3/controllers/d3Old.d.ts +1 -0
  302. package/components/graph/svelvet/d3/controllers/d3Old.js +43 -0
  303. package/components/graph/svelvet/docs/CHANGELOG.md +145 -0
  304. package/components/graph/svelvet/docs/DESIGN_PATTERNS.md +44 -0
  305. package/components/graph/svelvet/docs/DOCUMENTATION.md +5 -0
  306. package/components/graph/svelvet/docs/README.md +34 -0
  307. package/components/graph/svelvet/docs/TODO.md +14 -0
  308. package/components/graph/svelvet/docs/Tutorials.md +25 -0
  309. package/components/graph/svelvet/docs/images/css-background-after.png +0 -0
  310. package/components/graph/svelvet/docs/images/css-background-before.png +0 -0
  311. package/components/graph/svelvet/docs/images/custom-edges-after.png +0 -0
  312. package/components/graph/svelvet/docs/images/custom-edges-before.png +0 -0
  313. package/components/graph/svelvet/docs/images/custom-nodes-after.png +0 -0
  314. package/components/graph/svelvet/docs/images/custom-nodes-before.png +0 -0
  315. package/components/graph/svelvet/docs/images/custom-svelte-components-after.png +0 -0
  316. package/components/graph/svelvet/docs/images/custom-svelte-components-before.png +0 -0
  317. package/components/graph/svelvet/docs/images/html-docs-after.png +0 -0
  318. package/components/graph/svelvet/docs/images/html-docs-before.png +0 -0
  319. package/components/graph/svelvet/docs/images/minimap-after.png +0 -0
  320. package/components/graph/svelvet/docs/images/minimap-before.png +0 -0
  321. package/components/graph/svelvet/docs/images/node-classes-after.png +0 -0
  322. package/components/graph/svelvet/docs/images/node-classes-before.png +0 -0
  323. package/components/graph/svelvet/docs/images/node-create-after.png +0 -0
  324. package/components/graph/svelvet/docs/images/node-create-before.png +0 -0
  325. package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +4 -0
  326. package/components/graph/svelvet/edges/controllers/anchorCbDev.js +92 -0
  327. package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +57 -0
  328. package/components/graph/svelvet/edges/controllers/anchorCbUser.js +73 -0
  329. package/components/graph/svelvet/edges/controllers/util.d.ts +37 -0
  330. package/components/graph/svelvet/edges/controllers/util.js +72 -0
  331. package/components/graph/svelvet/edges/models/Anchor.d.ts +48 -0
  332. package/components/graph/svelvet/edges/models/Anchor.js +122 -0
  333. package/components/graph/svelvet/edges/models/Edge.d.ts +47 -0
  334. package/components/graph/svelvet/edges/models/Edge.js +107 -0
  335. package/components/graph/svelvet/edges/types/types.d.ts +18 -0
  336. package/components/graph/svelvet/edges/types/types.js +1 -0
  337. package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +105 -0
  338. package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +18 -0
  339. package/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte +12 -0
  340. package/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte.d.ts +17 -0
  341. package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +43 -0
  342. package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +17 -0
  343. package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +137 -0
  344. package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +17 -0
  345. package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +176 -0
  346. package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +60 -0
  347. package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +8 -0
  348. package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +25 -0
  349. package/components/graph/svelvet/edges/views/Edges/types.d.ts +52 -0
  350. package/components/graph/svelvet/edges/views/Edges/types.js +1 -0
  351. package/components/graph/svelvet/edges/views/Edges/utils.d.ts +33 -0
  352. package/components/graph/svelvet/edges/views/Edges/utils.js +31 -0
  353. package/components/graph/svelvet/editEdges/views/EditEdge.svelte +151 -0
  354. package/components/graph/svelvet/editEdges/views/EditEdge.svelte.d.ts +20 -0
  355. package/components/graph/svelvet/nodes/controllers/util.d.ts +9 -0
  356. package/components/graph/svelvet/nodes/controllers/util.js +13 -0
  357. package/components/graph/svelvet/nodes/models/Node.d.ts +78 -0
  358. package/components/graph/svelvet/nodes/models/Node.js +195 -0
  359. package/components/graph/svelvet/nodes/views/EditNode.svelte +147 -0
  360. package/components/graph/svelvet/nodes/views/EditNode.svelte.d.ts +33 -0
  361. package/components/graph/svelvet/nodes/views/Node.svelte +85 -0
  362. package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +22 -0
  363. package/components/graph/svelvet/resizableNodes/controllers/util.d.ts +11 -0
  364. package/components/graph/svelvet/resizableNodes/controllers/util.js +24 -0
  365. package/components/graph/svelvet/resizableNodes/models/ResizeNode.d.ts +33 -0
  366. package/components/graph/svelvet/resizableNodes/models/ResizeNode.js +71 -0
  367. package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte +81 -0
  368. package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte.d.ts +20 -0
  369. package/components/graph/svelvet/store/controllers/storeApi.d.ts +32 -0
  370. package/components/graph/svelvet/store/controllers/storeApi.js +111 -0
  371. package/components/graph/svelvet/store/controllers/userApi.d.ts +3 -0
  372. package/components/graph/svelvet/store/controllers/userApi.js +18 -0
  373. package/components/graph/svelvet/store/controllers/util.d.ts +31 -0
  374. package/components/graph/svelvet/store/controllers/util.js +180 -0
  375. package/components/graph/svelvet/store/models/store.d.ts +12 -0
  376. package/components/graph/svelvet/store/models/store.js +9 -0
  377. package/components/graph/svelvet/store/types/types.d.ts +134 -0
  378. package/components/graph/svelvet/store/types/types.js +1 -0
  379. package/components/graph/svelvet/types/README.md +3 -0
  380. package/components/graph/svelvet/types/index.d.ts +2 -0
  381. package/components/graph/svelvet/types/index.js +1 -0
  382. package/components/graph/svelvet/types/types.d.ts +49 -0
  383. package/components/graph/svelvet/types/types.js +18 -0
  384. package/components/graph/util.js +2 -2
  385. package/components/home/ItemsList.svelte +53 -5
  386. package/components/home/ItemsList.svelte.d.ts +1 -0
  387. package/components/home/ListFilters.svelte +7 -2
  388. package/components/jobs/JobDetail.svelte +12 -1
  389. package/components/propertyPicker/ObjectViewer.svelte +6 -4
  390. package/consts.d.ts +1 -0
  391. package/consts.js +1 -0
  392. package/defaults.d.ts +4 -0
  393. package/defaults.js +4 -0
  394. package/history.d.ts +9 -0
  395. package/history.js +56 -0
  396. package/package.json +92 -8
  397. package/script_helpers.d.ts +1 -1
  398. package/script_helpers.js +1 -0
  399. package/scripts.d.ts +1 -1
  400. package/scripts.js +8 -1
  401. package/utils.d.ts +9 -4
  402. package/utils.js +44 -8
  403. package/components/apps/editor/TablePanel.svelte +0 -19
  404. package/components/apps/editor/TablePanel.svelte.d.ts +0 -17
  405. package/components/flows/map/FlowBranchAllMap.svelte +0 -100
  406. package/components/flows/map/FlowBranchAllMap.svelte.d.ts +0 -17
  407. package/components/flows/map/FlowBranchOneMap.svelte +0 -124
  408. package/components/flows/map/FlowBranchOneMap.svelte.d.ts +0 -17
@@ -1,5 +1,5 @@
1
1
  export function isNode(item) {
2
- return typeof item?.['id'] === 'number';
2
+ return item?.['type'] === 'node';
3
3
  }
4
4
  export function isLoop(item) {
5
5
  return item?.['type'] === 'loop';
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 OSLabs Beta
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,15 @@
1
+ import type { EdgeType, NodeType, ResizeNodeType, StoreType } from '../../store/types/types';
2
+ import type { UserEdgeType, UserNodeType } from '../../types/types';
3
+ import type { CollapsibleType } from '../types/types';
4
+ import type { AnchorType } from '../../edges/types/types';
5
+ export declare function populateCollapsibleStore(store: StoreType, userNodes: UserNodeType[], userEdges: UserEdgeType[], canvasId: string): void;
6
+ export declare function toggleExpandAndCollapse(store: StoreType, nodeId: string): void;
7
+ export declare function getCollapsibles(store: StoreType, filter?: {
8
+ [key: string]: any;
9
+ }): CollapsibleType[];
10
+ export declare function filterByCollapsible(store: StoreType, nodes: NodeType[], resizeNodes: ResizeNodeType[], anchors: AnchorType[], edges: EdgeType[]): {
11
+ filteredNodes: NodeType[];
12
+ filteredResizeNodes: ResizeNodeType[];
13
+ filteredAnchors: AnchorType[];
14
+ filteredEdges: EdgeType[];
15
+ };
@@ -0,0 +1,144 @@
1
+ import { Collapsible } from '../models/Collapsible';
2
+ import { get } from 'svelte/store';
3
+ import { getAnchorById } from '../../edges/controllers/util';
4
+ import { getAnchors } from '../../edges/controllers/util';
5
+ const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7);
6
+ /*
7
+ Initializes store with array of Collapsible objects. You shoould only use this if you want the collapsible feature enabled.
8
+ */
9
+ export function populateCollapsibleStore(store, userNodes, userEdges, canvasId) {
10
+ const newCollapsibleStore = [];
11
+ for (let userNode of userNodes) {
12
+ const collapsible = new Collapsible(pkStringGenerator(), userNode.id, 0, 'expanded');
13
+ newCollapsibleStore.push(collapsible);
14
+ }
15
+ store.collapsibleStore.set(newCollapsibleStore);
16
+ }
17
+ /*
18
+
19
+ */
20
+ function incrementHideCount(store, nodeId) {
21
+ const collapsibles = get(store.collapsibleStore);
22
+ for (let collapsible of collapsibles)
23
+ if (collapsible.nodeId === nodeId)
24
+ collapsible.hideCount++;
25
+ store.collapsibleStore.set(collapsibles);
26
+ }
27
+ // Given a nodeId, find ids of all connecting target nodes
28
+ function findTargets(store, nodeId) {
29
+ // get source anchors on the node
30
+ const anchors = getAnchors(store, {
31
+ nodeId: nodeId,
32
+ sourceOrTarget: 'source',
33
+ });
34
+ // get target anchors on other node, and record the node id
35
+ const targetNodeIds = [];
36
+ for (const anchor of anchors) {
37
+ const targetAnchorId = anchor.getOtherAnchorId();
38
+ const targetAnchor = getAnchorById(store, targetAnchorId);
39
+ targetNodeIds.push(targetAnchor.nodeId);
40
+ }
41
+ return targetNodeIds;
42
+ }
43
+ // traverses tree and increments hideCount
44
+ function traverseAndIncrement(store, nodeId, operation) {
45
+ const collapsibles = get(store.collapsibleStore);
46
+ recursiveTraverse(nodeId);
47
+ store.collapsibleStore.set(collapsibles);
48
+ function recursiveTraverse(nId) {
49
+ for (const collapsible of collapsibles) {
50
+ if (collapsible.nodeId === nId) {
51
+ if (operation === 'increment')
52
+ collapsible.hideCount++;
53
+ else
54
+ collapsible.hideCount--;
55
+ const targetIds = findTargets(store, nId);
56
+ for (const targetId of targetIds) {
57
+ recursiveTraverse(targetId);
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+ function collapse(store, nodeId) {
64
+ const targetNodeIds = findTargets(store, nodeId);
65
+ for (const targetNodeId of targetNodeIds)
66
+ traverseAndIncrement(store, targetNodeId, 'increment');
67
+ }
68
+ function expand(store, nodeId) {
69
+ const targetNodeIds = findTargets(store, nodeId);
70
+ for (const targetNodeId of targetNodeIds)
71
+ traverseAndIncrement(store, targetNodeId, 'decrement');
72
+ }
73
+ export function toggleExpandAndCollapse(store, nodeId) {
74
+ const collapsibles = getCollapsibles(store, { nodeId: nodeId });
75
+ if (collapsibles.length === 0)
76
+ return; // when the collapsible feature is disabled, there will be no collapbsible objects
77
+ if (collapsibles.length > 1)
78
+ throw 'there should only be one collapsible object per node';
79
+ const collapsible = collapsibles[0];
80
+ if (collapsible.state === 'expanded')
81
+ collapse(store, nodeId);
82
+ else
83
+ expand(store, nodeId);
84
+ store.collapsibleStore.update((arr) => {
85
+ for (const c of arr)
86
+ if (c.id === collapsible.id)
87
+ c.toggleState();
88
+ return [...arr];
89
+ });
90
+ }
91
+ export function getCollapsibles(store, filter) {
92
+ let collapsibles = Object.values(get(store.collapsibleStore));
93
+ // filter the array of anchors for elements that match filter
94
+ // Example: if filter = {sourceOrTarget: 'source', positionX: 35} then we will
95
+ //return all anchors with sourceOrTarget = source AND poxitionX = 35
96
+ if (filter !== undefined) {
97
+ collapsibles = collapsibles.filter((collapsible) => {
98
+ for (let filterKey in filter) {
99
+ const filterValue = filter[filterKey];
100
+ if (collapsible[filterKey] !== filterValue)
101
+ return false;
102
+ }
103
+ return true;
104
+ });
105
+ }
106
+ // return list of anchors
107
+ return collapsibles;
108
+ }
109
+ /*
110
+ This function is responsible for filtering nodes should be displayed based on Collapsible.
111
+ It also filters node-associated elements such as anchors, edges, etc. so that when you collapse a node, the
112
+ edges also hide.
113
+ There is a better way to implement this with foreign keys; when collapsing a node, you would also collapse any rows with a foreign key
114
+ linking to that node (like a cascading delete in SQL, but with hiding instead of deleting)
115
+ */
116
+ export function filterByCollapsible(store, nodes, resizeNodes, anchors, edges) {
117
+ // filter nodes for the collapsible nodes feature
118
+ const filteredNodes = nodes.filter((node) => {
119
+ const nodeId = node.id;
120
+ const collapssibleObj = get(store.collapsibleStore).find((e) => e.nodeId === nodeId);
121
+ if (collapssibleObj === undefined)
122
+ return true;
123
+ return collapssibleObj.isHidden() === false;
124
+ });
125
+ const filteredNodeIds = filteredNodes.map((e) => e.id);
126
+ // filter resizeNodes
127
+ const filteredResizeNodes = resizeNodes.filter((resizeNode) => filteredNodeIds.includes(resizeNode.nodeId));
128
+ const filteredAnchors = anchors.filter((selfAnchor) => {
129
+ const otherAnchorId = selfAnchor.getOtherAnchorId();
130
+ const otherAnchor = get(store.anchorsStore)[otherAnchorId];
131
+ if (filteredNodeIds.includes(selfAnchor.nodeId) &&
132
+ filteredNodeIds.includes(otherAnchor.nodeId))
133
+ return true;
134
+ return false;
135
+ });
136
+ const filteredEdgeIds = new Set(filteredAnchors.map((e) => e.edgeId));
137
+ const filteredEdges = edges.filter((edge) => filteredEdgeIds.has(edge.id));
138
+ return {
139
+ filteredNodes,
140
+ filteredResizeNodes,
141
+ filteredAnchors,
142
+ filteredEdges,
143
+ };
144
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * This model implements functionality for nodes to expand and collapse their children
3
+ */
4
+ import type { CollapsibleType } from '../types/types';
5
+ /** Class that implements collapsible/expandable functionality for Node objects
6
+ * @param {string} id Unique string that serves as a primary key
7
+ * @param {string} nodeId Foreign key to a Node Object
8
+ */
9
+ export declare class Collapsible implements CollapsibleType {
10
+ id: string;
11
+ nodeId: string;
12
+ hideCount: number;
13
+ state: 'expanded' | 'collapsed';
14
+ constructor(id: string, nodeId: string, hideCount: number, state: 'expanded' | 'collapsed');
15
+ isHidden(): boolean;
16
+ toggleState(): void;
17
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This model implements functionality for nodes to expand and collapse their children
3
+ */
4
+ /** Class that implements collapsible/expandable functionality for Node objects
5
+ * @param {string} id Unique string that serves as a primary key
6
+ * @param {string} nodeId Foreign key to a Node Object
7
+ */
8
+ export class Collapsible {
9
+ id;
10
+ nodeId;
11
+ hideCount;
12
+ state;
13
+ constructor(id, nodeId, hideCount, state) {
14
+ this.id = id;
15
+ this.nodeId = nodeId;
16
+ this.hideCount = hideCount;
17
+ this.state = state;
18
+ }
19
+ isHidden() {
20
+ return this.hideCount > 0;
21
+ }
22
+ toggleState() {
23
+ this.state = this.state === 'expanded' ? 'collapsed' : 'expanded';
24
+ }
25
+ }
@@ -0,0 +1,8 @@
1
+ export interface CollapsibleType {
2
+ id: string;
3
+ nodeId: string;
4
+ hideCount: number;
5
+ state: 'expanded' | 'collapsed';
6
+ isHidden: Function;
7
+ toggleState: Function;
8
+ }
@@ -0,0 +1,7 @@
1
+ # Container
2
+
3
+ This folder contains two containers: Svelvet and Canvas.
4
+
5
+ ## Svelvet.svelte
6
+
7
+ Svelvet.svelte is the top level component
@@ -0,0 +1,18 @@
1
+ import type { StoreType } from '../../store/types/types';
2
+ import type { UserEdgeType, UserNodeType } from '../../types/types';
3
+ /**
4
+ * sanitizeCanvasOptions will sanitize the canvas level options so that incompatible features will not be run simulataneously
5
+ * @param store The array of nodes that have a UserNodeType
6
+ * @returns void. The store is modified directly
7
+ */
8
+ export declare function sanitizeCanvasOptions(store: StoreType): void;
9
+ /**
10
+ * sanitizeUserNodesAndEdges will sanitize the data initially passed in to Svelvet component. For example, the node that user specified have an integar as its id but to instantiate a Node and be compatible with uuid we will need to convert the integar id to a string.
11
+ * @param userNodes The array of nodes that have a UserNodeType
12
+ * @param userEdges The array of edges that have a UserEdgeType
13
+ * @returns An object of sanitized userNodes and userEdges
14
+ */
15
+ export declare function sanitizeUserNodesAndEdges(userNodes: UserNodeType[], userEdges: UserEdgeType[]): {
16
+ userNodes: UserNodeType[];
17
+ userEdges: UserEdgeType[];
18
+ };
@@ -0,0 +1,101 @@
1
+ /*
2
+ This file contains "middleware" functions that sanitize user input (UserNodeType and UserEdgeType). Put functions that
3
+ maintain consistency between previous
4
+
5
+ */
6
+ import { get } from 'svelte/store';
7
+ import { bottomCb, leftCb, rightCb, topCb, } from '../../edges/controllers/anchorCbUser';
8
+ /**
9
+ * sanitizeCanvasOptions will sanitize the canvas level options so that incompatible features will not be run simulataneously
10
+ * @param store The array of nodes that have a UserNodeType
11
+ * @returns void. The store is modified directly
12
+ */
13
+ export function sanitizeCanvasOptions(store) {
14
+ enforceCollapsibleCompatibility(store);
15
+ }
16
+ function enforceCollapsibleCompatibility(store) {
17
+ if (get(store.collapsibleOption)) {
18
+ store.nodeCreate.set(false);
19
+ }
20
+ }
21
+ /**
22
+ * sanitizeUserNodesAndEdges will sanitize the data initially passed in to Svelvet component. For example, the node that user specified have an integar as its id but to instantiate a Node and be compatible with uuid we will need to convert the integar id to a string.
23
+ * @param userNodes The array of nodes that have a UserNodeType
24
+ * @param userEdges The array of edges that have a UserEdgeType
25
+ * @returns An object of sanitized userNodes and userEdges
26
+ */
27
+ export function sanitizeUserNodesAndEdges(userNodes, userEdges) {
28
+ convertIdToString(userNodes);
29
+ convertEdgeIdsToString(userEdges);
30
+ convertAnchorPositionsToCallbacks(userNodes, userEdges);
31
+ setDefaultEdgeType(userEdges);
32
+ return { userNodes, userEdges };
33
+ }
34
+ /**
35
+ * setDefaultEdgeType ensures a default edge type of 'bezier' if the user does not set one, or sets a nonsense type.
36
+ * @param userEdges The array of edges that have a UserEdgeType
37
+ * @returns No return, the function edits the objects in place
38
+ */
39
+ function setDefaultEdgeType(userEdges) {
40
+ for (let userEdge of userEdges) {
41
+ if (!['smoothstep', 'step', 'bezier', 'straight'].includes(userEdge.type))
42
+ userEdge.type = 'bezier';
43
+ }
44
+ }
45
+ /**
46
+ * convertAnchorPositionsToCallbacks
47
+ * @description
48
+ * WHY: This function is in order to maintain compliance with earlier versions of Svelvet.
49
+ * HISTORY: In Svelvet<=5, anchor points were hard-coded onto each node. Each node had a "sourcePosition"
50
+ * "targetPosition" where the edges would be attached. In Svelvet6, the store was re-designed
51
+ * from the ground up into an object-relational data model where anchor points could be attached
52
+ * at any point on the node using callbacks. This enabled features such as custom edge position,
53
+ * adaptive edge positioning, and dynamic edges.
54
+ * The purpose of this function is to parse the old way of specifying edge positions (as two source/target
55
+ * anchors on the node) into the Svelvet6 (where anchors are separate objects) in order to maintain a
56
+ * consistent user experience. However, we suggest that this functionality (parsing Svelvet5 syntax into
57
+ * Svelvet6 syntax) be removed completely in favor of only using Svelvet6 syntax in order to reduce edge cases.
58
+ */
59
+ function convertAnchorPositionsToCallbacks(userNodes, userEdges) {
60
+ // convert userNodes array into object for constant time lookup by id
61
+ const userNodesObj = {};
62
+ for (let userNode of userNodes)
63
+ userNodesObj[userNode.id] = userNode;
64
+ // iterate through userEdges, and check the source/target nodes.
65
+ for (let userEdge of userEdges) {
66
+ const userNodeSource = userNodesObj[userEdge.source];
67
+ const userNodeTarget = userNodesObj[userEdge.target];
68
+ const sourcePosition = userNodeSource.sourcePosition;
69
+ const targetPosition = userNodeTarget.targetPosition;
70
+ const cbs = { left: leftCb, right: rightCb, top: topCb, bottom: bottomCb };
71
+ if (sourcePosition)
72
+ userEdge.sourceAnchorCb = cbs[sourcePosition];
73
+ if (targetPosition)
74
+ userEdge.targetAnchorCb = cbs[targetPosition];
75
+ }
76
+ }
77
+ /**
78
+ * Converts node id's to strings. For Svelvet<6, node id's were numbers. These were switched to strings for compatibility with uuid. This function does not return a new array, instead it mutates and sanitizes the original array.
79
+ * @param userNodes The array of userNodes (not yet sanitized)
80
+ */
81
+ function convertIdToString(userNodes) {
82
+ userNodes = userNodes.map((node) => {
83
+ node.id = node.id.toString();
84
+ node.childNodes =
85
+ node.childNodes === undefined
86
+ ? []
87
+ : node.childNodes.map((childId) => childId.toString());
88
+ return node;
89
+ });
90
+ }
91
+ /**
92
+ * Converts source/target node id's to string. For Svelvet<6, id's were numbers. These were switched to strings for compatibility with uuid. This function does not return a new array, instead it mutates and sanitizes the original array.
93
+ * @param userEdges The array of userEdges (not yet sanitized)
94
+ */
95
+ function convertEdgeIdsToString(userEdges) {
96
+ userEdges = userEdges.map((edge) => {
97
+ edge.source = edge.source.toString();
98
+ edge.target = edge.target.toString();
99
+ return edge;
100
+ });
101
+ }
@@ -0,0 +1,252 @@
1
+ <script>import { onMount } from 'svelte';
2
+ import { zoom, zoomTransform, zoomIdentity } from 'd3-zoom';
3
+ import { select, selectAll, pointer } from 'd3-selection';
4
+ import SimpleBezierEdge from '../../edges/views/Edges/SimpleBezierEdge.svelte';
5
+ import StepEdge from '../../edges/views/Edges/StepEdge.svelte';
6
+ import SmoothStepEdge from '../../edges/views/Edges/SmoothStepEdge.svelte';
7
+ import Node from '../../nodes/views/Node.svelte';
8
+ import { findStore } from '../../store/controllers/storeApi';
9
+ import { determineD3Instance, zoomInit } from '../..//d3/controllers/d3';
10
+ import { filterByCollapsible } from '../../collapsible/controllers/util';
11
+ import { onDestroy } from 'svelte';
12
+ //these are typscripted as any, however they have been transformed inside of store.ts
13
+ export let canvasId;
14
+ export let width;
15
+ export let height;
16
+ export let initialZoom = 3;
17
+ export let initialLocation;
18
+ export let boundary = false;
19
+ export let minimap = false;
20
+ export let scroll = false;
21
+ // here we lookup the store using the unique key
22
+ const store = findStore(canvasId);
23
+ const { edgesStore, nodesStore, anchorsStore, potentialAnchorsStore, temporaryEdgeStore, resizeNodesStore, nodeSelected, backgroundStore, movementStore, widthStore, heightStore, d3Scale, collapsibleStore } = store;
24
+ $: nodes = Object.values($nodesStore);
25
+ $: edges = Object.values($edgesStore);
26
+ $: anchors = Object.values($anchorsStore);
27
+ $: resizeNodes = Object.values($resizeNodesStore);
28
+ $: potentialAnchors = Object.values($potentialAnchorsStore);
29
+ $: tempEdges = $temporaryEdgeStore;
30
+ /*
31
+ This block of code is responsible for reactivity of the collapsible feature
32
+ When collaspsibleStore changes, nodes/edges/resizeNodes/anchors are filtered so that
33
+ only the visible ones are displayed
34
+ */
35
+ let filteredNodes;
36
+ let filteredEdges;
37
+ let filteredResizeNodes;
38
+ let filteredAnchors;
39
+ $: {
40
+ const tmp = $collapsibleStore; // assignment is necessary for reactivity
41
+ const obj = filterByCollapsible(store, nodes, resizeNodes, anchors, edges);
42
+ filteredNodes = obj['filteredNodes'];
43
+ filteredEdges = obj['filteredEdges'];
44
+ filteredResizeNodes = obj['filteredResizeNodes'];
45
+ filteredAnchors = obj['filteredAnchors'];
46
+ }
47
+ // declaring the grid and dot size for d3's transformations and zoom
48
+ const gridSize = 15;
49
+ const dotSize = 10;
50
+ // leveraging d3 library to zoom/pan
51
+ let d3 = {
52
+ zoom,
53
+ zoomTransform,
54
+ zoomIdentity,
55
+ select,
56
+ selectAll,
57
+ pointer
58
+ };
59
+ let d3Zoom = determineD3Instance(boundary, d3, nodeSelected, width, height, movementStore, backgroundStore, gridSize, dotSize, canvasId, d3Scale, handleZoom);
60
+ // d3Translate is used for the minimap
61
+ let d3Translate = { x: 0, y: 0, k: 1 };
62
+ onMount(() => {
63
+ // actualizes the d3 instance
64
+ const nodes = d3.select(`.zoomable`).call(d3Zoom).on('dblclick.zoom', null);
65
+ if (!scroll) {
66
+ ;
67
+ [nodes].forEach((d3Instance) => {
68
+ d3Instance
69
+ .on('wheel.zoom', null)
70
+ .on('mousewheel.zoom', null)
71
+ .on('mousemove.zoom', null)
72
+ .on('DOMMouseScroll.zoom', null);
73
+ });
74
+ }
75
+ d3.select('#zoom_in').on('click', function () {
76
+ try {
77
+ d3Zoom.scaleBy(nodes.transition().duration(250), 1.4);
78
+ // d3Zoom.translateTo(edgesd3, d3Translate.x, d3Translate.y)
79
+ // d3Zoom.translateTo(nodesd3, d3Translate.x, d3Translate.y)
80
+ }
81
+ catch (e) {
82
+ console.log('error', e);
83
+ }
84
+ });
85
+ d3.select('#zoom_out').on('click', function () {
86
+ try {
87
+ d3Zoom.scaleBy(nodes.transition().duration(250), 0.714);
88
+ // d3Zoom.translateTo(edgesd3.transition().duration(0), d3Translate.x, d3Translate.y)
89
+ // d3Zoom.translateTo(nodesd3.transition().duration(0), d3Translate.x, d3Translate.y)
90
+ }
91
+ catch (e) {
92
+ console.log('error', e);
93
+ }
94
+ });
95
+ // })
96
+ // d3Translate = zoomInit(d3, canvasId, d3Zoom, d3Translate, initialLocation, initialZoom, d3Scale)
97
+ });
98
+ onDestroy(() => {
99
+ d3.select('svg').remove();
100
+ });
101
+ // This is necessary to make Graphview reactive to changes in initialZoom
102
+ // When initialZoom changes, then zoomInit will set the zoom/position
103
+ // let prevZoom = initialZoom
104
+ // let prevInitialLocationX = initialLocation.x
105
+ // let prevInitialLocationY = initialLocation.y
106
+ // $: if (
107
+ // initialZoom !== prevZoom ||
108
+ // prevInitialLocationX !== initialLocation.x ||
109
+ // prevInitialLocationY !== initialLocation.y
110
+ // ) {
111
+ // prevZoom = initialZoom
112
+ // prevInitialLocationX = initialLocation.x
113
+ // prevInitialLocationY = initialLocation.y
114
+ // d3Translate = zoomInit(d3, canvasId, d3Zoom, d3Translate, initialLocation, initialZoom, d3Scale)
115
+ // }
116
+ // moves canvas when you click on the minimap
117
+ // handles case for when minimap sends message back to initiate translation event (click to traverse minimap)
118
+ // moves camera to the clicked node
119
+ const key = canvasId;
120
+ function handleZoom(e) {
121
+ if (!$movementStore)
122
+ return;
123
+ //add a store that contains the current value of the d3-zoom's scale to be used in onMouseMove function
124
+ d3Scale.set(e.transform.k);
125
+ // transform 'g' SVG elements (edge, edge text, edge anchor)
126
+ d3.select(`.Edges-${canvasId} g`).attr('transform', e.transform);
127
+ // transform div elements (nodes)
128
+ //@ts-ignore
129
+ let transform = d3.zoomTransform(this);
130
+ d3Translate = transform;
131
+ store.d3ZoomParameters.set({ ...transform }); // record x,y position of pan, and zoom level
132
+ // selects and transforms all node divs from class 'Node' and performs transformation
133
+ d3.select(`.Node-${canvasId}`)
134
+ .style('transform', 'translate(' + transform.x + 'px,' + transform.y + 'px) scale(' + transform.k + ')')
135
+ .style('transform-origin', '0 0');
136
+ }
137
+ </script>
138
+
139
+ <div class="zoomable">
140
+ <!-- This is the container that holds GraphView and we have disabled right click functionality to prevent a sticking behavior -->
141
+ <div id="graphview-container">
142
+ <div class={`Nodes Nodes-${canvasId}`} on:contextmenu|preventDefault>
143
+ <!-- This container is transformed by d3zoom -->
144
+ <div class={`Node Node-${canvasId}`}>
145
+ {#each filteredNodes as node}
146
+ {#if node.data.html}
147
+ <Node {node} {canvasId} nodeId={node.id}>{@html node.data.html}</Node>
148
+ {:else if node.data.custom}
149
+ <Node isCustom {node} {canvasId} nodeId={node.id}>
150
+ <svelte:component
151
+ this={node.data.custom.component}
152
+ on:new={(e) => node?.data?.custom?.cb?.('new', e.detail)}
153
+ on:delete={(e) => node?.data?.custom?.cb?.('delete', e.detail)}
154
+ on:select={(e) => node?.data?.custom?.cb?.('select', e.detail)}
155
+ on:insert={(e) => node?.data?.custom?.cb?.('insert', e.detail)}
156
+ on:newBranch={(e) => node?.data?.custom?.cb?.('newBranch', e.detail)}
157
+ on:deleteBranch={(e) => node?.data?.custom?.cb?.('deleteBranch', e.detail)}
158
+ on:move={(e) => node?.data?.custom?.cb?.('move', e.detail)}
159
+ {...node.data.custom.props}
160
+ />
161
+ </Node>
162
+ {:else}
163
+ <Node {node} {canvasId} nodeId={node.id}>{node.data.label}</Node>
164
+ {/if}
165
+ {/each}
166
+ </div>
167
+ </div>
168
+ </div>
169
+ <!-- rendering dots on the background depending on the zoom level -->
170
+ <svg
171
+ class={`Edges Edges-${canvasId}`}
172
+ viewBox="0 0 {$widthStore} {$heightStore}"
173
+ on:contextmenu|preventDefault
174
+ >
175
+ <defs>
176
+ <pattern
177
+ id={`background-${canvasId}`}
178
+ x="0"
179
+ y="0"
180
+ width={gridSize}
181
+ height={gridSize}
182
+ patternUnits="userSpaceOnUse"
183
+ >
184
+ <circle
185
+ id="dot"
186
+ cx={gridSize / 2 - dotSize / 2}
187
+ cy={gridSize / 2 - dotSize / 2}
188
+ r="0.5"
189
+ style="fill: gray"
190
+ />
191
+ </pattern>
192
+ </defs>
193
+
194
+ <!-- <g> tag defines which edge type to render depending on properties of edge object -->
195
+ <g>
196
+ {#each filteredEdges as edge}
197
+ {#if edge.type === 'smoothstep'}
198
+ <SmoothStepEdge {edge} {canvasId} />
199
+ {:else if edge.type === 'step'}
200
+ <StepEdge {edge} {canvasId} />
201
+ {:else}
202
+ <SimpleBezierEdge edgeId={edge.id} {canvasId} />
203
+ {/if}
204
+ {/each}
205
+
206
+ <!-- {#each filteredAnchors as anchor} -->
207
+ <!-- note that these are SVG -->
208
+ <!-- <EdgeAnchor x={anchor.positionX} y={anchor.positionY} /> -->
209
+ <!-- {/each} -->
210
+ </g>
211
+ </svg>
212
+ </div>
213
+ <div id="buttons">
214
+ <button id="zoom_in">+</button>
215
+ <button id="zoom_out">-</button>
216
+ </div>
217
+
218
+ <style>
219
+ #buttons {
220
+ position: absolute;
221
+ top: 4px;
222
+ right: 4px;
223
+ z-index: 20;
224
+ }
225
+
226
+ #buttons > button {
227
+ border-radius: 4px;
228
+ background-color: white;
229
+ border: #999 solid 1px;
230
+ padding-right: 4px;
231
+ padding-left: 4px;
232
+ width: 24px;
233
+ }
234
+
235
+ svg {
236
+ }
237
+ .Nodes {
238
+ position: absolute;
239
+ width: 100%;
240
+ height: 100%;
241
+ }
242
+ .Node {
243
+ color: black; /* remove this once color is set to default via types */
244
+ width: 100%;
245
+ height: 100%;
246
+ }
247
+ #graphview-container {
248
+ pointer-events: none;
249
+ }
250
+ .pointer-events-auto {
251
+ pointer-events: auto;
252
+ }</style>
@@ -0,0 +1,25 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ canvasId: string;
5
+ width: number;
6
+ height: number;
7
+ initialZoom?: number | undefined;
8
+ initialLocation: any;
9
+ boundary?: boolean | undefined;
10
+ minimap?: boolean | undefined;
11
+ scroll?: boolean | undefined;
12
+ };
13
+ events: {
14
+ contextmenu: MouseEvent;
15
+ } & {
16
+ [evt: string]: CustomEvent<any>;
17
+ };
18
+ slots: {};
19
+ };
20
+ export type GraphViewProps = typeof __propDef.props;
21
+ export type GraphViewEvents = typeof __propDef.events;
22
+ export type GraphViewSlots = typeof __propDef.slots;
23
+ export default class GraphView extends SvelteComponentTyped<GraphViewProps, GraphViewEvents, GraphViewSlots> {
24
+ }
25
+ export {};