@nocobase/flow-engine 2.0.0-alpha.7 → 2.0.0-alpha.71

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 (589) hide show
  1. package/lib/BlockScopedFlowEngine.d.ts +23 -0
  2. package/lib/BlockScopedFlowEngine.js +91 -0
  3. package/lib/FlowContextProvider.d.ts +2 -2
  4. package/lib/FlowContextProvider.js +3 -3
  5. package/lib/FlowDefinition.d.ts +6 -4
  6. package/lib/JSRunner.d.ts +6 -0
  7. package/lib/JSRunner.js +27 -1
  8. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  9. package/lib/ViewScopedFlowEngine.js +18 -1
  10. package/lib/acl/Acl.d.ts +12 -12
  11. package/lib/acl/Acl.js +88 -30
  12. package/lib/components/DynamicFlowsEditor.js +2 -4
  13. package/lib/components/FieldModelRenderer.js +17 -9
  14. package/lib/components/FieldSkeleton.d.ts +10 -0
  15. package/lib/components/FieldSkeleton.js +64 -0
  16. package/lib/components/FlowContextSelector.js +19 -3
  17. package/lib/components/FlowModelRenderer.d.ts +4 -6
  18. package/lib/components/FlowModelRenderer.js +35 -53
  19. package/lib/components/FormItem.js +5 -1
  20. package/lib/components/MobilePopup.d.ts +20 -0
  21. package/lib/components/MobilePopup.js +102 -0
  22. package/lib/components/MobilePopup.style.d.ts +17 -0
  23. package/lib/components/MobilePopup.style.js +186 -0
  24. package/lib/components/common/withFlowDesignMode.d.ts +1 -1
  25. package/lib/components/common/withFlowDesignMode.js +5 -5
  26. package/lib/components/dnd/gridDragPlanner.d.ts +1 -0
  27. package/lib/components/dnd/gridDragPlanner.js +53 -1
  28. package/lib/components/index.d.ts +1 -0
  29. package/lib/components/index.js +3 -1
  30. package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +71 -53
  31. package/lib/components/settings/wrappers/component/SelectWithTitle.d.ts +19 -0
  32. package/lib/components/settings/wrappers/component/SelectWithTitle.js +136 -0
  33. package/lib/components/settings/wrappers/component/SwitchWithTitle.d.ts +10 -0
  34. package/lib/components/settings/wrappers/component/SwitchWithTitle.js +111 -0
  35. package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +233 -97
  36. package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +71 -54
  37. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
  38. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +63 -23
  39. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +13 -2
  40. package/lib/components/settings/wrappers/embedded/FlowSettings.js +42 -28
  41. package/lib/components/settings/wrappers/embedded/FlowsSettings.js +3 -3
  42. package/lib/components/settings/wrappers/embedded/FlowsSettingsContent.js +52 -32
  43. package/lib/components/subModel/AddSubModelButton.d.ts +7 -0
  44. package/lib/components/subModel/AddSubModelButton.js +78 -8
  45. package/lib/components/subModel/LazyDropdown.js +14 -15
  46. package/lib/components/subModel/utils.d.ts +1 -1
  47. package/lib/components/subModel/utils.js +21 -11
  48. package/lib/components/variables/VariableInput.js +26 -6
  49. package/lib/components/variables/VariableTag.js +43 -2
  50. package/lib/components/variables/types.d.ts +2 -0
  51. package/lib/components/variables/utils.js +4 -2
  52. package/lib/data-source/index.d.ts +23 -4
  53. package/lib/data-source/index.js +135 -14
  54. package/lib/data-source/jioToJoiSchema.js +1 -0
  55. package/lib/emitter.d.ts +6 -0
  56. package/lib/emitter.js +12 -0
  57. package/lib/executor/FlowExecutor.d.ts +6 -6
  58. package/lib/executor/FlowExecutor.js +302 -99
  59. package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
  60. package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
  61. package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
  62. package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
  63. package/lib/flowContext.d.ts +105 -6
  64. package/lib/flowContext.js +447 -139
  65. package/lib/flowEngine.d.ts +71 -1
  66. package/lib/flowEngine.js +319 -16
  67. package/lib/flowSettings.d.ts +4 -3
  68. package/lib/flowSettings.js +45 -21
  69. package/lib/hooks/useApplyAutoFlows.d.ts +1 -0
  70. package/lib/hooks/useApplyAutoFlows.js +3 -2
  71. package/lib/index.d.ts +14 -3
  72. package/lib/index.js +54 -7
  73. package/lib/locale/de-DE.json +62 -0
  74. package/lib/locale/en-US.json +57 -45
  75. package/lib/locale/es-ES.json +62 -0
  76. package/lib/locale/fr-FR.json +62 -0
  77. package/lib/locale/hu-HU.json +62 -0
  78. package/lib/locale/id-ID.json +62 -0
  79. package/lib/locale/index.d.ts +114 -90
  80. package/lib/locale/it-IT.json +62 -0
  81. package/lib/locale/ja-JP.json +62 -0
  82. package/lib/locale/ko-KR.json +62 -0
  83. package/lib/locale/nl-NL.json +62 -0
  84. package/lib/locale/pt-BR.json +62 -0
  85. package/lib/locale/ru-RU.json +62 -0
  86. package/lib/locale/tr-TR.json +62 -0
  87. package/lib/locale/uk-UA.json +62 -0
  88. package/lib/locale/vi-VN.json +62 -0
  89. package/lib/locale/zh-CN.json +58 -46
  90. package/lib/locale/zh-TW.json +62 -0
  91. package/lib/models/CollectionFieldModel.d.ts +7 -2
  92. package/lib/models/CollectionFieldModel.js +63 -16
  93. package/lib/models/flowModel.d.ts +76 -32
  94. package/lib/models/flowModel.js +300 -112
  95. package/lib/models/forkFlowModel.d.ts +8 -4
  96. package/lib/models/forkFlowModel.js +38 -8
  97. package/lib/provider.d.ts +3 -1
  98. package/lib/provider.js +14 -11
  99. package/lib/reactive/index.d.ts +10 -0
  100. package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → reactive/index.js} +14 -15
  101. package/lib/reactive/observer.d.ts +19 -0
  102. package/lib/reactive/observer.js +109 -0
  103. package/lib/resources/baseRecordResource.d.ts +6 -0
  104. package/lib/resources/baseRecordResource.js +38 -3
  105. package/lib/resources/multiRecordResource.d.ts +5 -2
  106. package/lib/resources/multiRecordResource.js +26 -10
  107. package/lib/resources/singleRecordResource.js +8 -3
  108. package/lib/resources/sqlResource.d.ts +5 -3
  109. package/lib/resources/sqlResource.js +30 -28
  110. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  111. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +37 -20
  112. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  113. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  114. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  115. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  116. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  117. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  118. package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.d.ts +16 -0
  119. package/lib/runjs-context/contexts/JSEditableFieldRunJSContext.js +125 -0
  120. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  121. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  122. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  123. package/lib/runjs-context/contexts/JSItemRunJSContext.js +34 -20
  124. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  125. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  126. package/lib/runjs-context/contexts/base.d.ts +9 -0
  127. package/lib/runjs-context/contexts/base.js +879 -0
  128. package/lib/runjs-context/contributions.d.ts +33 -0
  129. package/lib/runjs-context/contributions.js +88 -0
  130. package/lib/runjs-context/helpers.d.ts +5 -2
  131. package/lib/runjs-context/helpers.js +36 -27
  132. package/lib/runjs-context/registry.d.ts +7 -4
  133. package/lib/runjs-context/registry.js +10 -42
  134. package/lib/runjs-context/setup.d.ts +9 -0
  135. package/lib/runjs-context/setup.js +88 -0
  136. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  137. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  138. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  139. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  140. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  141. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  142. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  143. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  144. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  145. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  146. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  147. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  148. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  149. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  150. package/lib/runjs-context/snippets/index.d.ts +24 -3
  151. package/lib/runjs-context/snippets/index.js +183 -40
  152. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  153. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  154. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  155. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  156. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  157. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  158. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  159. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.d.ts +11 -0
  160. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
  161. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  162. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  163. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  164. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  165. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  166. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  167. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  168. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  169. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  170. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  171. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  172. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  173. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  174. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  175. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  176. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  177. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  178. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  179. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  180. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  181. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  182. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  183. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  184. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  185. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  186. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  187. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  188. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  189. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  190. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  191. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  192. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  193. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  194. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  195. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  196. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  197. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  198. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  199. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  200. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  201. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  202. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  203. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  204. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  205. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  206. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  207. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  208. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  209. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  210. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  211. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  212. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  213. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  214. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  215. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  216. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  217. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  218. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  219. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  220. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  221. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  222. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  223. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  224. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  225. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  226. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  227. package/lib/runjs-context/snippets/types.d.ts +9 -1
  228. package/lib/runjsLibs.d.ts +28 -0
  229. package/lib/runjsLibs.js +532 -0
  230. package/lib/scheduler/ModelOperationScheduler.d.ts +53 -0
  231. package/lib/scheduler/ModelOperationScheduler.js +262 -0
  232. package/lib/types.d.ts +66 -7
  233. package/lib/types.js +4 -3
  234. package/lib/utils/associationObjectVariable.d.ts +32 -0
  235. package/lib/utils/associationObjectVariable.js +157 -0
  236. package/lib/utils/createCollectionContextMeta.d.ts +1 -1
  237. package/lib/utils/createCollectionContextMeta.js +9 -4
  238. package/lib/utils/createEphemeralContext.d.ts +13 -0
  239. package/lib/utils/createEphemeralContext.js +140 -0
  240. package/lib/utils/flows.d.ts +10 -0
  241. package/lib/{runjs-context/snippets/global/console-log-ctx.snippet.js → utils/flows.js} +21 -14
  242. package/lib/utils/index.d.ts +9 -3
  243. package/lib/utils/index.js +30 -2
  244. package/lib/utils/jsxTransform.d.ts +15 -0
  245. package/lib/utils/jsxTransform.js +68 -0
  246. package/lib/utils/params-resolvers.js +19 -12
  247. package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
  248. package/lib/utils/parsePathnameToViewParams.js +41 -5
  249. package/lib/utils/pruneFilter.d.ts +21 -0
  250. package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
  251. package/lib/utils/resolveModuleUrl.d.ts +58 -0
  252. package/lib/utils/resolveModuleUrl.js +65 -0
  253. package/lib/utils/runjsModuleLoader.d.ts +58 -0
  254. package/lib/utils/runjsModuleLoader.js +422 -0
  255. package/lib/utils/runjsTemplateCompat.d.ts +35 -0
  256. package/lib/utils/runjsTemplateCompat.js +743 -0
  257. package/lib/utils/safeGlobals.d.ts +6 -8
  258. package/lib/utils/safeGlobals.js +169 -14
  259. package/lib/utils/schema-utils.d.ts +6 -0
  260. package/lib/utils/schema-utils.js +71 -6
  261. package/lib/utils/serverContextParams.d.ts +4 -0
  262. package/lib/utils/serverContextParams.js +2 -0
  263. package/lib/utils/translation.d.ts +4 -1
  264. package/lib/utils/translation.js +6 -2
  265. package/lib/utils/variablesParams.d.ts +22 -5
  266. package/lib/utils/variablesParams.js +141 -61
  267. package/lib/views/DialogComponent.js +1 -5
  268. package/lib/views/DrawerComponent.js +18 -9
  269. package/lib/views/PageComponent.js +5 -5
  270. package/lib/views/ViewNavigation.d.ts +11 -15
  271. package/lib/views/ViewNavigation.js +37 -19
  272. package/lib/views/createViewMeta.d.ts +27 -5
  273. package/lib/views/createViewMeta.js +338 -72
  274. package/lib/views/index.d.ts +1 -1
  275. package/lib/views/index.js +4 -0
  276. package/lib/views/useDialog.d.ts +10 -9
  277. package/lib/views/useDialog.js +46 -34
  278. package/lib/views/useDrawer.d.ts +10 -9
  279. package/lib/views/useDrawer.js +74 -48
  280. package/lib/views/usePage.d.ts +14 -9
  281. package/lib/views/usePage.js +82 -33
  282. package/lib/views/usePopover.js +4 -1
  283. package/lib/views/viewEvents.d.ts +17 -0
  284. package/lib/views/viewEvents.js +90 -0
  285. package/package.json +6 -3
  286. package/src/BlockScopedFlowEngine.ts +85 -0
  287. package/src/FlowContextProvider.tsx +4 -2
  288. package/src/JSRunner.ts +39 -1
  289. package/src/ViewScopedFlowEngine.ts +21 -1
  290. package/src/__tests__/JSRunner.test.ts +125 -52
  291. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  292. package/src/__tests__/createViewMeta.popup.test.ts +203 -0
  293. package/src/__tests__/flow-engine.test.ts +3 -0
  294. package/src/__tests__/flowContext.test.ts +160 -0
  295. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  296. package/src/__tests__/flowEngine.dataSourceDirty.test.ts +63 -0
  297. package/src/__tests__/flowEngine.destroyModel.test.ts +74 -0
  298. package/src/__tests__/flowEngine.moveModel.test.ts +43 -0
  299. package/src/__tests__/flowEngine.removeModel.test.ts +72 -0
  300. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  301. package/src/__tests__/flowModel.openView.navigation.test.ts +31 -2
  302. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  303. package/src/__tests__/flowSettings.open.test.tsx +71 -15
  304. package/src/__tests__/flowSettings.test.ts +2 -0
  305. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  306. package/src/__tests__/modelOperationScheduler.test.ts +346 -0
  307. package/src/__tests__/objectVariable.test.ts +464 -0
  308. package/src/__tests__/provider.test.tsx +0 -5
  309. package/src/__tests__/runjsContext.test.ts +219 -35
  310. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  311. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  312. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  313. package/src/__tests__/runjsExternalLibs.test.ts +242 -0
  314. package/src/__tests__/runjsLibsLazyLoading.test.ts +44 -0
  315. package/src/__tests__/runjsLocales.test.ts +39 -0
  316. package/src/__tests__/runjsPreprocessDefault.test.ts +49 -0
  317. package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
  318. package/src/__tests__/runjsSnippets.test.ts +140 -0
  319. package/src/__tests__/viewScopedFlowEngine.test.ts +101 -3
  320. package/src/acl/Acl.tsx +85 -31
  321. package/src/acl/__tests__/Acl.test.tsx +43 -1
  322. package/src/components/DynamicFlowsEditor.tsx +0 -10
  323. package/src/components/FieldModelRenderer.tsx +22 -9
  324. package/src/components/FieldSkeleton.tsx +27 -0
  325. package/src/components/FlowContextSelector.tsx +20 -2
  326. package/src/components/FlowModelRenderer.tsx +52 -84
  327. package/src/components/FormItem.tsx +8 -1
  328. package/src/components/MobilePopup.style.ts +220 -0
  329. package/src/components/MobilePopup.tsx +86 -0
  330. package/src/components/__tests__/FlowModelRenderer.test.tsx +89 -0
  331. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
  332. package/src/components/__tests__/gridDragPlanner.test.ts +141 -1
  333. package/src/components/common/withFlowDesignMode.tsx +5 -5
  334. package/src/components/dnd/gridDragPlanner.ts +60 -0
  335. package/src/components/index.ts +1 -0
  336. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +34 -17
  337. package/src/components/settings/wrappers/component/SelectWithTitle.tsx +110 -0
  338. package/src/components/settings/wrappers/component/SwitchWithTitle.tsx +83 -0
  339. package/src/components/settings/wrappers/component/__tests__/InlineControls.test.tsx +74 -0
  340. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +272 -125
  341. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +34 -18
  342. package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +56 -18
  343. package/src/components/settings/wrappers/contextual/StepSettings.tsx +1 -2
  344. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +13 -1
  345. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +624 -0
  346. package/src/components/settings/wrappers/embedded/FlowSettings.tsx +47 -35
  347. package/src/components/settings/wrappers/embedded/FlowsSettings.tsx +1 -1
  348. package/src/components/settings/wrappers/embedded/FlowsSettingsContent.tsx +64 -42
  349. package/src/components/subModel/AddSubModelButton.tsx +104 -9
  350. package/src/components/subModel/LazyDropdown.tsx +14 -14
  351. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +168 -7
  352. package/src/components/subModel/__tests__/utils.test.ts +12 -12
  353. package/src/components/subModel/utils.ts +25 -6
  354. package/src/components/variables/VariableInput.tsx +32 -6
  355. package/src/components/variables/VariableTag.tsx +54 -2
  356. package/src/components/variables/types.ts +2 -0
  357. package/src/components/variables/utils.ts +7 -3
  358. package/src/data-source/index.ts +143 -12
  359. package/src/data-source/jioToJoiSchema.ts +1 -0
  360. package/src/emitter.ts +14 -0
  361. package/src/executor/FlowExecutor.ts +383 -119
  362. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  363. package/src/executor/__tests__/flowExecutor.test.ts +217 -5
  364. package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
  365. package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
  366. package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
  367. package/src/flowContext.ts +646 -158
  368. package/src/flowEngine.ts +385 -14
  369. package/src/flowSettings.ts +59 -30
  370. package/src/hooks/useApplyAutoFlows.ts +5 -3
  371. package/src/index.ts +26 -3
  372. package/src/locale/de-DE.json +62 -0
  373. package/src/locale/en-US.json +57 -45
  374. package/src/locale/es-ES.json +62 -0
  375. package/src/locale/fr-FR.json +62 -0
  376. package/src/locale/hu-HU.json +62 -0
  377. package/src/locale/id-ID.json +62 -0
  378. package/src/locale/it-IT.json +62 -0
  379. package/src/locale/ja-JP.json +62 -0
  380. package/src/locale/ko-KR.json +62 -0
  381. package/src/locale/nl-NL.json +62 -0
  382. package/src/locale/pt-BR.json +62 -0
  383. package/src/locale/ru-RU.json +62 -0
  384. package/src/locale/tr-TR.json +62 -0
  385. package/src/locale/uk-UA.json +62 -0
  386. package/src/locale/vi-VN.json +62 -0
  387. package/src/locale/zh-CN.json +58 -46
  388. package/src/locale/zh-TW.json +62 -0
  389. package/src/models/CollectionFieldModel.tsx +82 -18
  390. package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
  391. package/src/models/__tests__/dispatchEvent.when.test.ts +356 -0
  392. package/src/models/__tests__/flowEngine.resolveUse.test.ts +170 -0
  393. package/src/models/__tests__/flowModel.clone.test.ts +416 -0
  394. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
  395. package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
  396. package/src/models/__tests__/flowModel.test.ts +296 -119
  397. package/src/models/__tests__/forkFlowModel.test.ts +40 -7
  398. package/src/models/flowModel.tsx +426 -148
  399. package/src/models/forkFlowModel.ts +48 -8
  400. package/src/provider.tsx +18 -14
  401. package/src/reactive/__tests__/observer.test.tsx +211 -0
  402. package/src/reactive/index.ts +11 -0
  403. package/src/reactive/observer.tsx +101 -0
  404. package/src/resources/__tests__/multiRecordResource.test.ts +44 -0
  405. package/src/resources/__tests__/sqlResource.test.ts +60 -0
  406. package/src/resources/baseRecordResource.ts +46 -3
  407. package/src/resources/multiRecordResource.ts +28 -12
  408. package/src/resources/singleRecordResource.ts +9 -3
  409. package/src/resources/sqlResource.ts +33 -32
  410. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +38 -21
  411. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +50 -34
  412. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  413. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  414. package/src/runjs-context/contexts/JSEditableFieldRunJSContext.ts +106 -0
  415. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  416. package/src/runjs-context/contexts/JSItemRunJSContext.ts +35 -21
  417. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  418. package/src/runjs-context/contexts/base.ts +871 -0
  419. package/src/runjs-context/contributions.ts +88 -0
  420. package/src/runjs-context/helpers.ts +32 -30
  421. package/src/runjs-context/registry.ts +16 -47
  422. package/src/runjs-context/setup.ts +57 -0
  423. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  424. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  425. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  426. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  427. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  428. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  429. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  430. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  431. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  432. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  433. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  434. package/src/runjs-context/snippets/index.ts +212 -39
  435. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  436. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  437. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  438. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  439. package/src/runjs-context/snippets/scene/block/render-antd-icons.snippet.ts +46 -0
  440. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  441. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  442. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  443. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  444. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  445. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  446. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  447. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  448. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  449. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  450. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  451. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  452. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  453. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  454. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  455. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  456. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  457. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  458. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  459. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  460. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  461. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  462. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  463. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  464. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  465. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  466. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  467. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  468. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  469. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  470. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  471. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  472. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  473. package/src/runjs-context/snippets/types.ts +5 -1
  474. package/src/runjsLibs.ts +622 -0
  475. package/src/scheduler/ModelOperationScheduler.ts +306 -0
  476. package/src/types.ts +86 -5
  477. package/src/utils/__tests__/createCollectionContextMeta.test.ts +51 -0
  478. package/src/utils/__tests__/flows.test.ts +65 -0
  479. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  480. package/src/utils/__tests__/params-resolvers.test.ts +40 -0
  481. package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
  482. package/src/utils/__tests__/pruneFilter.test.ts +38 -0
  483. package/src/utils/__tests__/runjsRequireAsyncAutoWhitelist.test.ts +38 -0
  484. package/src/utils/__tests__/runjsTemplateCompat.test.ts +159 -0
  485. package/src/utils/__tests__/safeGlobals.test.ts +79 -2
  486. package/src/utils/__tests__/utils.test.ts +114 -15
  487. package/src/utils/__tests__/variablesParams.test.ts +120 -0
  488. package/src/utils/associationObjectVariable.ts +180 -0
  489. package/src/utils/createCollectionContextMeta.ts +9 -3
  490. package/src/utils/createEphemeralContext.ts +142 -0
  491. package/src/utils/flows.ts +23 -0
  492. package/src/utils/index.ts +17 -3
  493. package/src/utils/jsxTransform.ts +39 -0
  494. package/src/utils/params-resolvers.ts +25 -11
  495. package/src/utils/parsePathnameToViewParams.ts +50 -6
  496. package/src/utils/pruneFilter.ts +41 -0
  497. package/src/utils/resolveModuleUrl.ts +91 -0
  498. package/src/utils/runjsModuleLoader.ts +553 -0
  499. package/src/utils/runjsTemplateCompat.ts +828 -0
  500. package/src/utils/safeGlobals.ts +181 -15
  501. package/src/utils/schema-utils.ts +81 -3
  502. package/src/utils/serverContextParams.ts +6 -0
  503. package/src/utils/translation.ts +7 -2
  504. package/src/utils/variablesParams.ts +164 -72
  505. package/src/views/DialogComponent.tsx +1 -4
  506. package/src/views/DrawerComponent.tsx +19 -7
  507. package/src/views/PageComponent.tsx +3 -5
  508. package/src/views/ViewNavigation.ts +49 -43
  509. package/src/views/__tests__/FlowView.usePage.test.tsx +186 -0
  510. package/src/views/__tests__/ViewNavigation.test.ts +54 -34
  511. package/src/views/__tests__/useDialog.closeDestroy.test.tsx +159 -0
  512. package/src/views/__tests__/viewEvents.resolveOpenerEngine.test.ts +28 -0
  513. package/src/views/createViewMeta.ts +402 -73
  514. package/src/views/index.tsx +1 -1
  515. package/src/views/useDialog.tsx +52 -31
  516. package/src/views/useDrawer.tsx +99 -55
  517. package/src/views/usePage.tsx +101 -33
  518. package/src/views/usePopover.tsx +4 -1
  519. package/src/views/viewEvents.ts +55 -0
  520. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  521. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  522. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  523. package/lib/runjs-context/index.d.ts +0 -19
  524. package/lib/runjs-context/index.js +0 -57
  525. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  526. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  527. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  528. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  529. package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
  530. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  531. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  532. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  533. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  534. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  535. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  536. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  537. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  538. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  539. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  540. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  541. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  542. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  543. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  544. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
  545. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  546. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  547. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  548. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  549. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  550. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  551. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  552. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  553. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  554. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  555. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  556. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  557. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  558. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  559. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  560. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  561. package/src/runjs-context/index.ts +0 -20
  562. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  563. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  564. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  565. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  566. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  567. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  568. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  569. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  570. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  571. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  572. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  573. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  574. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  575. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  576. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  577. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  578. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  579. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  580. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  581. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  582. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  583. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  584. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  585. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  586. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  587. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  588. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  589. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -53,7 +53,6 @@ __export(flowModel_exports, {
53
53
  });
54
54
  module.exports = __toCommonJS(flowModel_exports);
55
55
  var import_reactive = require("@formily/reactive");
56
- var import_reactive_react = require("@formily/reactive-react");
57
56
  var import_lodash = __toESM(require("lodash"));
58
57
  var import_react = __toESM(require("react"));
59
58
  var import_secure = require("uid/secure");
@@ -62,7 +61,6 @@ var import_StepSettingsDialog = require("../components/settings/wrappers/context
62
61
  var import_emitter = require("../emitter");
63
62
  var import_InstanceFlowRegistry = require("../flow-registry/InstanceFlowRegistry");
64
63
  var import_flowContext = require("../flowContext");
65
- var import_flowEngine = require("../flowEngine");
66
64
  var import_utils = require("../utils");
67
65
  var import_lib = require("antd/lib");
68
66
  var import_ModelActionRegistry = require("../action-registry/ModelActionRegistry");
@@ -70,11 +68,13 @@ var import_utils2 = require("../components/subModel/utils");
70
68
  var import_ModelEventRegistry = require("../event-registry/ModelEventRegistry");
71
69
  var import_GlobalFlowRegistry = require("../flow-registry/GlobalFlowRegistry");
72
70
  var import_forkFlowModel = require("./forkFlowModel");
71
+ var import__ = require("..");
73
72
  var _flowContext;
74
73
  const classActionRegistries = /* @__PURE__ */ new WeakMap();
75
74
  const classEventRegistries = /* @__PURE__ */ new WeakMap();
76
75
  const modelMetas = /* @__PURE__ */ new WeakMap();
77
76
  const modelGlobalRegistries = /* @__PURE__ */ new WeakMap();
77
+ const classMenuExtensions = /* @__PURE__ */ new WeakMap();
78
78
  var ModelRenderMode = /* @__PURE__ */ ((ModelRenderMode2) => {
79
79
  ModelRenderMode2["ReactElement"] = "reactElement";
80
80
  ModelRenderMode2["RenderFunction"] = "renderFunction";
@@ -92,8 +92,11 @@ const _FlowModel = class _FlowModel {
92
92
  __publicField(this, "subModels");
93
93
  __publicField(this, "_options");
94
94
  __publicField(this, "_title");
95
+ __publicField(this, "_extraTitle");
95
96
  __publicField(this, "isNew", false);
96
97
  // 标记是否为新建状态
98
+ __publicField(this, "skeleton", null);
99
+ __publicField(this, "forbidden", null);
97
100
  /**
98
101
  * 所有 fork 实例的引用集合。
99
102
  * 使用 Set 便于在销毁时主动遍历并调用 dispose,避免悬挂引用。
@@ -105,7 +108,7 @@ const _FlowModel = class _FlowModel {
105
108
  */
106
109
  __publicField(this, "forkCache", /* @__PURE__ */ new Map());
107
110
  /**
108
- * 上一次 applyAutoFlows 的执行参数
111
+ * 上一次 beforeRender 的执行参数
109
112
  */
110
113
  __publicField(this, "_lastAutoRunParams", null);
111
114
  __publicField(this, "observerDispose");
@@ -120,18 +123,23 @@ const _FlowModel = class _FlowModel {
120
123
  __publicField(this, "_reactiveWrapperCache");
121
124
  __publicField(this, "flowRegistry");
122
125
  __publicField(this, "_cleanRun");
123
- __publicField(this, "_dispatchEventWithDebounce", import_lodash.default.debounce(async (eventName, inputArgs) => {
124
- return this._dispatchEvent(eventName, inputArgs);
125
- }, 100));
126
+ __publicField(this, "_dispatchEventWithDebounce", import_lodash.default.debounce(
127
+ async function(eventName, inputArgs, options) {
128
+ return this._dispatchEvent(eventName, inputArgs, options);
129
+ },
130
+ 500,
131
+ { leading: true }
132
+ ));
126
133
  /**
127
- * 重新执行上一次的 applyAutoFlows,保持参数一致
134
+ * 重新执行上一次的 beforeRender,保持参数一致
128
135
  * 如果之前没有执行过,则直接跳过
129
136
  * 使用 lodash debounce 避免频繁调用
130
137
  */
131
138
  __publicField(this, "_rerunLastAutoRun", import_lodash.default.debounce(async () => {
132
139
  if (this._lastAutoRunParams) {
133
140
  try {
134
- await this.applyAutoFlows(...this._lastAutoRunParams);
141
+ const [inputArgs] = this._lastAutoRunParams;
142
+ await this.dispatchEvent("beforeRender", inputArgs);
135
143
  } catch (error) {
136
144
  console.error("FlowModel._rerunLastAutoRun: Error during rerun:", error);
137
145
  }
@@ -155,11 +163,15 @@ const _FlowModel = class _FlowModel {
155
163
  this.subModels = {};
156
164
  this.sortIndex = options.sortIndex || 0;
157
165
  this._options = options;
166
+ this._title = "";
167
+ this._extraTitle = "";
158
168
  (0, import_reactive.define)(this, {
159
169
  hidden: import_reactive.observable,
160
170
  props: import_reactive.observable,
161
171
  subModels: import_reactive.observable.shallow,
162
172
  stepParams: import_reactive.observable,
173
+ _title: import_reactive.observable,
174
+ _extraTitle: import_reactive.observable,
163
175
  // setProps: action,
164
176
  setProps: import_reactive.batch,
165
177
  // setStepParams: action,
@@ -172,7 +184,7 @@ const _FlowModel = class _FlowModel {
172
184
  return;
173
185
  }
174
186
  if (this.flowEngine) {
175
- this.invalidateAutoFlowCache();
187
+ this.invalidateFlowCache("beforeRender");
176
188
  }
177
189
  this._rerunLastAutoRun();
178
190
  this.forks.forEach((fork) => {
@@ -190,13 +202,16 @@ const _FlowModel = class _FlowModel {
190
202
  this._cleanRun = !!options["cleanRun"];
191
203
  }
192
204
  /**
193
- * 当 flowSettings.enabled 且 model.hidden 为 true 时用于渲染设置态组件(实例方法,子类可覆盖)。
205
+ * 当 flowSettingsEnabled 且 model.hidden 为 true 时用于渲染设置态组件(实例方法,子类可覆盖)。
194
206
  * 基类默认仅返回一个透明度降低的占位元素
195
207
  */
196
208
  renderHiddenInConfig() {
197
209
  var _a;
198
210
  return /* @__PURE__ */ import_react.default.createElement("span", { style: { opacity: 0.5 } }, ((_a = this.translate) == null ? void 0 : _a.call(this, "Hidden")) || "Hidden");
199
211
  }
212
+ renderOriginal() {
213
+ return this._originalRender();
214
+ }
200
215
  /**
201
216
  * 对外暴露的上下文:
202
217
  */
@@ -234,6 +249,10 @@ const _FlowModel = class _FlowModel {
234
249
  get parentId() {
235
250
  return this._options.parentId;
236
251
  }
252
+ scheduleModelOperation(toUid, fn, options) {
253
+ var _a;
254
+ return (_a = this.flowEngine) == null ? void 0 : _a.scheduleModelOperation(this, toUid, fn, options);
255
+ }
237
256
  static get meta() {
238
257
  return modelMetas.get(this);
239
258
  }
@@ -308,16 +327,22 @@ const _FlowModel = class _FlowModel {
308
327
  static registerEvents(events) {
309
328
  this.eventRegistry.registerEvents(events);
310
329
  }
311
- static buildChildrenFromModels(ctx, Models) {
312
- return Models.map((M) => (0, import_utils2.buildSubModelItem)(M, ctx, true));
330
+ static async buildChildrenFromModels(ctx, Models) {
331
+ return Promise.all(Models.map((M) => (0, import_utils2.buildSubModelItem)(M, ctx, true)));
313
332
  }
314
333
  get title() {
315
334
  var _a;
316
335
  return this.translate(this._title) || this.translate((_a = this.constructor["meta"]) == null ? void 0 : _a.label);
317
336
  }
337
+ get extraTitle() {
338
+ return this._extraTitle ? this.translate(this._extraTitle) : "";
339
+ }
318
340
  setTitle(value) {
319
341
  this._title = value;
320
342
  }
343
+ setExtraTitle(value) {
344
+ this._extraTitle = value || "";
345
+ }
321
346
  setHidden(value) {
322
347
  this.hidden = !!value;
323
348
  }
@@ -328,7 +353,18 @@ const _FlowModel = class _FlowModel {
328
353
  const meta = Cls.meta;
329
354
  const metaCreate = meta == null ? void 0 : meta.createModelOptions;
330
355
  if (metaCreate && typeof metaCreate === "object" && metaCreate.subModels) {
331
- mergedSubModels = import_lodash.default.merge({}, import_lodash.default.cloneDeep(metaCreate.subModels || {}), import_lodash.default.cloneDeep(subModels || {}));
356
+ const replaceArrays = /* @__PURE__ */ __name((objValue, srcValue) => {
357
+ if (Array.isArray(objValue) && Array.isArray(srcValue)) {
358
+ return srcValue;
359
+ }
360
+ return void 0;
361
+ }, "replaceArrays");
362
+ mergedSubModels = import_lodash.default.mergeWith(
363
+ {},
364
+ import_lodash.default.cloneDeep(metaCreate.subModels || {}),
365
+ import_lodash.default.cloneDeep(subModels || {}),
366
+ replaceArrays
367
+ );
332
368
  }
333
369
  } catch (e) {
334
370
  }
@@ -342,13 +378,57 @@ const _FlowModel = class _FlowModel {
342
378
  }
343
379
  });
344
380
  }
345
- invalidateAutoFlowCache(deep = false) {
381
+ /**
382
+ * 失效指定事件的流程缓存;未指定 eventName 时,失效当前模型全部事件缓存。
383
+ * - 默认 beforeRender 与其它事件共享同一缓存体系:prefix=`event:${scope}`,flowKey=`eventName`,uid=`model.uid`
384
+ */
385
+ invalidateFlowCache(eventName, deep = false) {
346
386
  if (this.flowEngine) {
347
- const cacheKey = import_flowEngine.FlowEngine.generateApplyFlowCacheKey("autoFlow", "all", this.uid);
348
- this.flowEngine.applyFlowCache.delete(cacheKey);
387
+ const scope = `event:${this.getFlowCacheScope(eventName || "beforeRender")}`;
388
+ const cache = this.flowEngine.applyFlowCache;
389
+ if (eventName) {
390
+ const altScope = scope.replace(/:/g, "-");
391
+ const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
392
+ const eventSegments = [`:${eventName}:`, `-${eventName}-`];
393
+ for (const key of cache.keys()) {
394
+ const startMatches = key.startsWith(scope) || key.startsWith(altScope);
395
+ const endMatches = uidSuffixes.some((s) => key.endsWith(s));
396
+ const eventMatches = eventSegments.some((seg) => key.includes(seg));
397
+ if (startMatches && endMatches && eventMatches) {
398
+ cache.delete(key);
399
+ }
400
+ }
401
+ } else {
402
+ const altScope = `${scope}:`.replace(/:/g, "-");
403
+ const prefixes = [`${scope}:`, altScope];
404
+ const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
405
+ for (const key of cache.keys()) {
406
+ const startMatches = prefixes.some((p) => key.startsWith(p));
407
+ const endMatches = uidSuffixes.some((s) => key.endsWith(s));
408
+ if (startMatches && endMatches) cache.delete(key);
409
+ }
410
+ }
349
411
  this.forks.forEach((fork) => {
350
- const forkCacheKey = import_flowEngine.FlowEngine.generateApplyFlowCacheKey(`${fork["forkId"]}`, "all", this.uid);
351
- this.flowEngine.applyFlowCache.delete(forkCacheKey);
412
+ var _a;
413
+ const forkScope = `event:${((_a = fork.getFlowCacheScope) == null ? void 0 : _a.call(fork, eventName || "beforeRender")) ?? String(fork["forkId"])}`;
414
+ const altForkScope = forkScope.replace(/:/g, "-");
415
+ const uidSuffixes = [`:${this.uid}`, `-${this.uid}`];
416
+ if (eventName) {
417
+ const eventSegments = [`:${eventName}:`, `-${eventName}-`];
418
+ for (const key of this.flowEngine.applyFlowCache.keys()) {
419
+ const startMatches = key.startsWith(forkScope) || key.startsWith(altForkScope);
420
+ const endMatches = uidSuffixes.some((s) => key.endsWith(s));
421
+ const eventMatches = eventSegments.some((seg) => key.includes(seg));
422
+ if (startMatches && endMatches && eventMatches) this.flowEngine.applyFlowCache.delete(key);
423
+ }
424
+ } else {
425
+ const prefixes = [`${forkScope}:`, `${altForkScope}-`];
426
+ for (const key of this.flowEngine.applyFlowCache.keys()) {
427
+ const startMatches = prefixes.some((p) => key.startsWith(p));
428
+ const endMatches = uidSuffixes.some((s) => key.endsWith(s));
429
+ if (startMatches && endMatches) this.flowEngine.applyFlowCache.delete(key);
430
+ }
431
+ }
352
432
  });
353
433
  }
354
434
  if (deep) {
@@ -357,10 +437,10 @@ const _FlowModel = class _FlowModel {
357
437
  const subModelValue = this.subModels[subModelKey];
358
438
  if (Array.isArray(subModelValue)) {
359
439
  for (const subModel of subModelValue) {
360
- subModel.invalidateAutoFlowCache(deep);
440
+ subModel.invalidateFlowCache(eventName, deep);
361
441
  }
362
442
  } else if (subModelValue instanceof _FlowModel) {
363
- subModelValue.invalidateAutoFlowCache(deep);
443
+ subModelValue.invalidateFlowCache(eventName, deep);
364
444
  }
365
445
  }
366
446
  }
@@ -480,14 +560,15 @@ const _FlowModel = class _FlowModel {
480
560
  const instanceKeys = new Set(instanceFlows.keys());
481
561
  const staticEntries = Array.from(staticFlows.entries()).filter(([key]) => !instanceKeys.has(key));
482
562
  const instanceEntries = Array.from(instanceFlows.entries());
483
- const allEntries = [...staticEntries, ...instanceEntries];
484
- allEntries.sort(([, a], [, b]) => {
485
- const sa = a.sort ?? 0;
486
- const sb = b.sort ?? 0;
563
+ const instanceEntriesWithIndex = instanceEntries.map((e, i) => ({ e, i }));
564
+ instanceEntriesWithIndex.sort((a, b) => {
565
+ const sa = a.e[1].sort ?? 0;
566
+ const sb = b.e[1].sort ?? 0;
487
567
  if (sa !== sb) return sa - sb;
488
- return 0;
568
+ return a.i - b.i;
489
569
  });
490
- return new Map(allEntries);
570
+ const merged = [...instanceEntriesWithIndex.map(({ e }) => e), ...staticEntries];
571
+ return new Map(merged);
491
572
  }
492
573
  setProps(props, value) {
493
574
  if (typeof props === "string") {
@@ -520,6 +601,7 @@ const _FlowModel = class _FlowModel {
520
601
  }
521
602
  }
522
603
  }
604
+ this.emitter.emit("onStepParamsChanged");
523
605
  }
524
606
  getStepParams(flowKey, stepKey) {
525
607
  var _a;
@@ -544,7 +626,7 @@ const _FlowModel = class _FlowModel {
544
626
  );
545
627
  return currentFlowEngine.executor.runFlow(target, flowKey, inputArgs, runId);
546
628
  }
547
- async _dispatchEvent(eventName, inputArgs) {
629
+ async _dispatchEvent(eventName, inputArgs, options) {
548
630
  const currentFlowEngine = this.flowEngine;
549
631
  if (!currentFlowEngine) {
550
632
  console.warn("FlowEngine not available on this model for dispatchEvent. Please set flowEngine on the model.");
@@ -555,93 +637,63 @@ const _FlowModel = class _FlowModel {
555
637
  console.log(
556
638
  `[FlowModel] dispatchEvent: uid=${this.uid}, event=${eventName}, isFork=${isFork}, cleanRun=${this.cleanRun}, targetIsFork=${(target == null ? void 0 : target.isFork) === true}`
557
639
  );
558
- await currentFlowEngine.executor.dispatchEvent(target, eventName, inputArgs);
640
+ return await currentFlowEngine.executor.dispatchEvent(target, eventName, inputArgs, options);
559
641
  }
560
642
  async dispatchEvent(eventName, inputArgs, options) {
643
+ const isBeforeRender = eventName === "beforeRender";
644
+ const defaults = isBeforeRender ? { sequential: true, useCache: true } : { sequential: true };
645
+ const execOptions = {
646
+ sequential: (options == null ? void 0 : options.sequential) ?? defaults.sequential,
647
+ useCache: (options == null ? void 0 : options.useCache) ?? defaults.useCache
648
+ };
649
+ if (isBeforeRender) {
650
+ this._lastAutoRunParams = [inputArgs, execOptions.useCache];
651
+ }
561
652
  if (options == null ? void 0 : options.debounce) {
562
- return this._dispatchEventWithDebounce(eventName, inputArgs);
653
+ return this._dispatchEventWithDebounce(eventName, inputArgs, execOptions);
563
654
  }
564
- return this._dispatchEvent(eventName, inputArgs);
655
+ return this._dispatchEvent(eventName, inputArgs, execOptions);
565
656
  }
566
657
  /**
567
- * 获取所有自动应用流程定义(保持 getFlows 的顺序,即按 sort 排序)
568
- * @returns {FlowDefinition[]} 自动应用流程定义数组(已按 sort 排序)
658
+ * 按事件名获取对应的流程集合(保持 getFlows 的顺序,即按 sort 排序)。
659
+ * - beforeRender 兼容:除显式 on: 'beforeRender' 外,包含未声明 on 且 manual !== true 的流程。
569
660
  */
570
- getAutoFlows() {
661
+ getEventFlows(eventName) {
571
662
  const allFlows = this.getFlows();
572
- const autoFlows = Array.from(allFlows.values()).filter((flow) => {
573
- if (flow.on) {
574
- return false;
575
- }
576
- if (flow.manual === true) {
577
- return false;
663
+ const beforeRender = eventName === "beforeRender";
664
+ const isMatch = /* @__PURE__ */ __name((flow) => {
665
+ var _a;
666
+ if (beforeRender) {
667
+ if (flow.manual === true) return false;
668
+ if (!flow.on) return true;
669
+ return typeof flow.on === "string" ? flow.on === "beforeRender" : ((_a = flow.on) == null ? void 0 : _a.eventName) === "beforeRender";
578
670
  }
579
- return true;
580
- });
581
- return autoFlows;
671
+ const on = flow.on;
672
+ if (!on) return false;
673
+ return typeof on === "string" ? on === eventName : (on == null ? void 0 : on.eventName) === eventName;
674
+ }, "isMatch");
675
+ return Array.from(allFlows.values()).filter(isMatch);
582
676
  }
583
677
  /**
584
- * 自动流程执行前钩子。
585
- * 子类可覆盖;可抛出 FlowExitException 提前终止。
678
+ * 通用事件分发钩子:开始
679
+ * 子类可覆盖;beforeRender 事件可通过抛出 FlowExitException 提前终止。
586
680
  */
587
- async onBeforeAutoFlows(inputArgs) {
681
+ async onDispatchEventStart(eventName, options, inputArgs) {
588
682
  }
589
683
  /**
590
- * 自动流程执行后钩子。
684
+ * 通用事件分发钩子:结束
591
685
  * 子类可覆盖。
592
686
  */
593
- async onAfterAutoFlows(results, inputArgs) {
687
+ async onDispatchEventEnd(eventName, options, inputArgs, results) {
594
688
  }
595
689
  /**
596
- * 自动流程错误钩子。
690
+ * 通用事件分发钩子:错误
597
691
  * 子类可覆盖。
598
692
  */
599
- async onAutoFlowsError(error, inputArgs) {
693
+ async onDispatchEventError(eventName, options, inputArgs, error) {
600
694
  }
601
695
  useHooksBeforeRender() {
602
696
  }
603
- async applyAutoFlows(...args) {
604
- var _a, _b;
605
- const [inputArgs, useCache = true] = args;
606
- const cacheKey = useCache ? import_flowEngine.FlowEngine.generateApplyFlowCacheKey(this["forkId"] ?? "autoFlow", "all", this.uid) : null;
607
- if (!import_lodash.default.isEqual(inputArgs, (_a = this._lastAutoRunParams) == null ? void 0 : _a[0]) && cacheKey) {
608
- this.flowEngine.applyFlowCache.delete(cacheKey);
609
- }
610
- this._lastAutoRunParams = args;
611
- try {
612
- await this.onBeforeAutoFlows(inputArgs);
613
- } catch (error) {
614
- if (error instanceof import_utils.FlowExitException) {
615
- (_b = this.context.logger) == null ? void 0 : _b.debug(`[FlowModel.applyAutoFlows] ${error.message}`);
616
- return [];
617
- }
618
- try {
619
- await this.onAutoFlowsError(error, inputArgs);
620
- } catch (_2) {
621
- }
622
- throw error;
623
- }
624
- let results = [];
625
- try {
626
- results = await this.flowEngine.executor.runAutoFlows(this, inputArgs, useCache);
627
- } catch (error) {
628
- try {
629
- await this.onAutoFlowsError(error, inputArgs);
630
- } catch (_2) {
631
- }
632
- throw error;
633
- }
634
- try {
635
- await this.onAfterAutoFlows(results, inputArgs);
636
- } catch (error) {
637
- try {
638
- await this.onAutoFlowsError(error, inputArgs);
639
- } catch (_2) {
640
- }
641
- throw error;
642
- }
643
- return results;
644
- }
645
697
  /**
646
698
  * 智能检测是否应该跳过响应式包装
647
699
  * 说明:
@@ -675,11 +727,11 @@ const _FlowModel = class _FlowModel {
675
727
  }
676
728
  if (this.shouldSkipReactiveWrapping()) {
677
729
  const wrappedNonReactive = /* @__PURE__ */ __name(function() {
678
- var _a, _b, _c;
679
- const isConfigMode = !!((_b = (_a = this == null ? void 0 : this.flowEngine) == null ? void 0 : _a.flowSettings) == null ? void 0 : _b.enabled);
730
+ var _a, _b;
731
+ const isConfigMode = !!((_a = this == null ? void 0 : this.context) == null ? void 0 : _a.flowSettingsEnabled);
680
732
  if (this.hidden) {
681
733
  if (!isConfigMode) return null;
682
- const rendered = (_c = this.renderHiddenInConfig) == null ? void 0 : _c.call(this);
734
+ const rendered = (_b = this.renderHiddenInConfig) == null ? void 0 : _b.call(this);
683
735
  const Cls = this.constructor;
684
736
  const returnsFunction = Cls.renderMode === "renderFunction" /* RenderFunction */;
685
737
  return returnsFunction ? typeof rendered === "function" ? rendered : () => rendered : rendered;
@@ -691,8 +743,8 @@ const _FlowModel = class _FlowModel {
691
743
  return;
692
744
  }
693
745
  const createReactiveWrapper = /* @__PURE__ */ __name((modelInstance) => {
694
- const ReactiveWrapper = (0, import_reactive_react.observer)(() => {
695
- var _a, _b, _c;
746
+ const ReactiveWrapper = (0, import__.observer)(() => {
747
+ var _a, _b;
696
748
  const renderTarget = modelInstance;
697
749
  if (renderTarget !== modelInstance && (renderTarget == null ? void 0 : renderTarget.localProps) !== void 0) {
698
750
  renderTarget.localProps;
@@ -701,22 +753,33 @@ const _FlowModel = class _FlowModel {
701
753
  modelInstance.props;
702
754
  }
703
755
  import_react.default.useEffect(() => {
756
+ var _a2, _b2;
704
757
  if (typeof renderTarget.onMount === "function") {
705
758
  renderTarget.onMount();
706
759
  }
760
+ void ((_b2 = (_a2 = renderTarget.flowEngine) == null ? void 0 : _a2.emitter) == null ? void 0 : _b2.emitAsync("model:mounted", {
761
+ uid: renderTarget.uid,
762
+ model: renderTarget
763
+ }));
707
764
  return () => {
765
+ var _a3, _b3;
708
766
  if (typeof renderTarget.onUnmount === "function") {
709
767
  renderTarget.onUnmount();
710
768
  }
769
+ void ((_b3 = (_a3 = renderTarget.flowEngine) == null ? void 0 : _a3.emitter) == null ? void 0 : _b3.emitAsync("model:unmounted", {
770
+ uid: renderTarget.uid,
771
+ model: renderTarget
772
+ }));
711
773
  };
712
774
  }, [renderTarget]);
713
- const isConfigMode = !!((_b = (_a = modelInstance == null ? void 0 : modelInstance.flowEngine) == null ? void 0 : _a.flowSettings) == null ? void 0 : _b.enabled);
775
+ const isConfigMode = !!((_a = modelInstance == null ? void 0 : modelInstance.context) == null ? void 0 : _a.flowSettingsEnabled);
714
776
  if (modelInstance.hidden) {
715
777
  if (!isConfigMode) {
716
778
  return null;
717
779
  }
718
- return (_c = modelInstance.renderHiddenInConfig) == null ? void 0 : _c.call(modelInstance);
780
+ return (_b = modelInstance.renderHiddenInConfig) == null ? void 0 : _b.call(modelInstance);
719
781
  }
782
+ modelInstance.stepParams;
720
783
  return originalRender.call(renderTarget);
721
784
  });
722
785
  ReactiveWrapper.displayName = `ReactiveWrapper(${modelInstance.constructor.name})`;
@@ -768,13 +831,13 @@ const _FlowModel = class _FlowModel {
768
831
  }
769
832
  async rerender() {
770
833
  var _a;
771
- await this.applyAutoFlows((_a = this._lastAutoRunParams) == null ? void 0 : _a[0], false);
834
+ await this.dispatchEvent("beforeRender", (_a = this._lastAutoRunParams) == null ? void 0 : _a[0], { useCache: false });
772
835
  }
773
836
  /**
774
- * 自动流程缓存的作用域标识;fork 实例可覆盖以区分缓存。
837
+ * 事件缓存的作用域标识;可按事件区分(默认与事件无关的 scope 返回 'default')。
775
838
  */
776
- getAutoFlowCacheScope() {
777
- return "autoFlow";
839
+ getFlowCacheScope(eventName) {
840
+ return String(eventName);
778
841
  }
779
842
  setParent(parent) {
780
843
  const isValidParent = parent && (parent.constructor === _FlowModel || (0, import_utils.isInheritedFrom)(parent.constructor, _FlowModel));
@@ -794,7 +857,7 @@ const _FlowModel = class _FlowModel {
794
857
  this.context.removeDelegate(this.parent.context);
795
858
  }
796
859
  addSubModel(subKey, options) {
797
- var _a;
860
+ var _a, _b, _c;
798
861
  const actualParent = this["master"] || this;
799
862
  let model;
800
863
  if (options instanceof _FlowModel) {
@@ -821,10 +884,16 @@ const _FlowModel = class _FlowModel {
821
884
  model.sortIndex = maxSortIndex + 1;
822
885
  subModels[subKey].push(model);
823
886
  actualParent.emitter.emit("onSubModelAdded", model);
887
+ (_c = (_b = actualParent.flowEngine) == null ? void 0 : _b.emitter) == null ? void 0 : _c.emit("model:subModel:added", {
888
+ parentUid: actualParent.uid,
889
+ parent: actualParent,
890
+ subKey,
891
+ model
892
+ });
824
893
  return model;
825
894
  }
826
895
  setSubModel(subKey, options) {
827
- var _a;
896
+ var _a, _b, _c;
828
897
  const actualParent = this["master"] || this;
829
898
  let model;
830
899
  if (options instanceof _FlowModel) {
@@ -845,6 +914,12 @@ const _FlowModel = class _FlowModel {
845
914
  model.setParent(actualParent);
846
915
  actualParent.subModels[subKey] = model;
847
916
  actualParent.emitter.emit("onSubModelAdded", model);
917
+ (_c = (_b = actualParent.flowEngine) == null ? void 0 : _b.emitter) == null ? void 0 : _c.emit("model:subModel:added", {
918
+ parentUid: actualParent.uid,
919
+ parent: actualParent,
920
+ subKey,
921
+ model
922
+ });
848
923
  return model;
849
924
  }
850
925
  filterSubModels(subKey, callback) {
@@ -892,10 +967,13 @@ const _FlowModel = class _FlowModel {
892
967
  createRootModel(options) {
893
968
  return this.flowEngine.createModel(options);
894
969
  }
895
- async applySubModelsAutoFlows(subKey, inputArgs, shared) {
970
+ /**
971
+ * 对指定子模型派发 beforeRender 事件(顺序执行并使用缓存)。
972
+ */
973
+ async applySubModelsBeforeRenderFlows(subKey, inputArgs, shared) {
896
974
  await Promise.all(
897
975
  this.mapSubModels(subKey, async (sub) => {
898
- await sub.applyAutoFlows(inputArgs);
976
+ await sub.dispatchEvent("beforeRender", inputArgs);
899
977
  })
900
978
  );
901
979
  }
@@ -913,7 +991,7 @@ const _FlowModel = class _FlowModel {
913
991
  return cachedFork;
914
992
  }
915
993
  }
916
- const forkId = this.forks.size;
994
+ const forkId = (0, import_secure.uid)();
917
995
  const fork = new import_forkFlowModel.ForkFlowModel(this, localProps, forkId);
918
996
  if ((options == null ? void 0 : options.register) !== false) {
919
997
  this.forks.add(fork);
@@ -952,7 +1030,7 @@ const _FlowModel = class _FlowModel {
952
1030
  throw new Error("FlowEngine is not set on this model. Please set flowEngine before saving.");
953
1031
  }
954
1032
  this.observerDispose();
955
- this.invalidateAutoFlowCache(true);
1033
+ this.invalidateFlowCache("beforeRender", true);
956
1034
  return this.flowEngine.removeModel(this.uid);
957
1035
  }
958
1036
  async save() {
@@ -969,7 +1047,7 @@ const _FlowModel = class _FlowModel {
969
1047
  throw new Error("FlowEngine is not set on this model. Please set flowEngine before deleting.");
970
1048
  }
971
1049
  this.observerDispose();
972
- this.invalidateAutoFlowCache(true);
1050
+ this.invalidateFlowCache("beforeRender", true);
973
1051
  return this.flowEngine.destroyModel(this.uid);
974
1052
  }
975
1053
  /**
@@ -1032,7 +1110,8 @@ const _FlowModel = class _FlowModel {
1032
1110
  uid: this.uid,
1033
1111
  ...import_lodash.default.omit(this._options, ["flowEngine"]),
1034
1112
  stepParams: this.stepParams,
1035
- sortIndex: this.sortIndex
1113
+ sortIndex: this.sortIndex,
1114
+ flowRegistry: {}
1036
1115
  };
1037
1116
  const subModels = this.subModels;
1038
1117
  for (const subModelKey in subModels) {
@@ -1047,11 +1126,64 @@ const _FlowModel = class _FlowModel {
1047
1126
  }
1048
1127
  }
1049
1128
  for (const [key, flow] of this.flowRegistry.getFlows()) {
1050
- data["flowRegistry"] = data["flowRegistry"] || {};
1051
- data["flowRegistry"][key] = flow.toData();
1129
+ data.flowRegistry[key] = flow.toData();
1052
1130
  }
1053
1131
  return data;
1054
1132
  }
1133
+ /**
1134
+ * 复制当前模型实例为一个新的实例。
1135
+ * 新实例及其所有子模型都会有新的 uid,且不保留 root model 的 parent 关系。
1136
+ * 内部所有引用旧 uid 的地方(如 parentId, parentUid 等)都会被替换为对应的新 uid。
1137
+ * @returns {FlowModel} 复制后的新模型实例
1138
+ */
1139
+ clone() {
1140
+ if (!this.flowEngine) {
1141
+ throw new Error("FlowEngine is not set on this model. Please set flowEngine before cloning.");
1142
+ }
1143
+ const serialized = this.serialize();
1144
+ const uidMap = /* @__PURE__ */ new Map();
1145
+ const collectUids = /* @__PURE__ */ __name((data) => {
1146
+ if (data.uid && typeof data.uid === "string") {
1147
+ uidMap.set(data.uid, (0, import_secure.uid)());
1148
+ }
1149
+ if (data.subModels) {
1150
+ for (const key in data.subModels) {
1151
+ const subModel = data.subModels[key];
1152
+ if (Array.isArray(subModel)) {
1153
+ subModel.forEach((item) => collectUids(item));
1154
+ } else if (subModel && typeof subModel === "object") {
1155
+ collectUids(subModel);
1156
+ }
1157
+ }
1158
+ }
1159
+ }, "collectUids");
1160
+ collectUids(serialized);
1161
+ const replaceUidReferences = /* @__PURE__ */ __name((data, isRoot = false) => {
1162
+ if (data === null || data === void 0) {
1163
+ return data;
1164
+ }
1165
+ if (typeof data === "string") {
1166
+ return uidMap.get(data) ?? data;
1167
+ }
1168
+ if (Array.isArray(data)) {
1169
+ return data.map((item) => replaceUidReferences(item, false));
1170
+ }
1171
+ if (typeof data === "object") {
1172
+ const result = {};
1173
+ for (const key in data) {
1174
+ if (!Object.prototype.hasOwnProperty.call(data, key)) continue;
1175
+ if (isRoot && key === "parentId") {
1176
+ continue;
1177
+ }
1178
+ result[key] = replaceUidReferences(data[key], false);
1179
+ }
1180
+ return result;
1181
+ }
1182
+ return data;
1183
+ }, "replaceUidReferences");
1184
+ const clonedData = replaceUidReferences(serialized, true);
1185
+ return this.flowEngine.createModel(clonedData);
1186
+ }
1055
1187
  /**
1056
1188
  * Opens the flow settings dialog for this flow model.
1057
1189
  * @param options - Configuration options for opening flow settings, excluding the model property
@@ -1063,6 +1195,62 @@ const _FlowModel = class _FlowModel {
1063
1195
  ...options
1064
1196
  });
1065
1197
  }
1198
+ /** 注册设置菜单的额外项(静态,按类缓存,可继承合并) */
1199
+ static registerExtraMenuItems(opts) {
1200
+ const ModelClass = this;
1201
+ const registry = classMenuExtensions.get(ModelClass) || /* @__PURE__ */ new Set();
1202
+ let entry;
1203
+ if (typeof opts === "function") {
1204
+ entry = { items: opts };
1205
+ } else {
1206
+ entry = opts;
1207
+ }
1208
+ registry.add(entry);
1209
+ classMenuExtensions.set(ModelClass, registry);
1210
+ return () => {
1211
+ const reg = classMenuExtensions.get(ModelClass);
1212
+ reg == null ? void 0 : reg.delete(entry);
1213
+ };
1214
+ }
1215
+ static async getExtraMenuItems(model, t) {
1216
+ const ModelClass = this;
1217
+ const collected = [];
1218
+ const seen = /* @__PURE__ */ new Set();
1219
+ const walk = /* @__PURE__ */ __name(async (Cls) => {
1220
+ if (!Cls || seen.has(Cls)) return;
1221
+ seen.add(Cls);
1222
+ const reg = classMenuExtensions.get(Cls);
1223
+ if (reg) {
1224
+ for (const entry of reg) {
1225
+ if (entry.matcher && !entry.matcher(model)) continue;
1226
+ const items = typeof entry.items === "function" ? await entry.items(model, t) : await Promise.resolve(entry.items || []);
1227
+ const group = entry.group || "common-actions";
1228
+ const sort = entry.sort ?? 0;
1229
+ const prefix = entry.keyPrefix || Cls.name || "extra";
1230
+ (items || []).forEach((it, idx) => {
1231
+ if (!it) return;
1232
+ const key = it.key ?? `${prefix}-${group}-${idx}-${Math.random().toString(36).slice(2, 6)}`;
1233
+ collected.push({
1234
+ ...it,
1235
+ key,
1236
+ group: it.group || group,
1237
+ sort: typeof it.sort === "number" ? it.sort : sort
1238
+ });
1239
+ });
1240
+ }
1241
+ }
1242
+ const ParentClass = Object.getPrototypeOf(Cls);
1243
+ const isFlowModelCtor = ParentClass === _FlowModel || (ParentClass == null ? void 0 : ParentClass.prototype) instanceof _FlowModel;
1244
+ if (isFlowModelCtor) {
1245
+ await walk(ParentClass);
1246
+ }
1247
+ }, "walk");
1248
+ await walk(ModelClass);
1249
+ return collected;
1250
+ }
1251
+ refresh() {
1252
+ return this.rerender();
1253
+ }
1066
1254
  // =============================
1067
1255
  // Dynamic flows (disabled)
1068
1256
  // The following APIs are kept as comments to preserve context