@nocobase/flow-engine 2.0.0-alpha.4 → 2.0.0-alpha.41

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 (466) hide show
  1. package/lib/BlockScopedFlowEngine.d.ts +23 -0
  2. package/lib/BlockScopedFlowEngine.js +90 -0
  3. package/lib/FlowContextProvider.d.ts +2 -2
  4. package/lib/FlowContextProvider.js +3 -3
  5. package/lib/FlowDefinition.d.ts +4 -2
  6. package/lib/JSRunner.js +3 -0
  7. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  8. package/lib/ViewScopedFlowEngine.js +12 -0
  9. package/lib/acl/Acl.d.ts +1 -0
  10. package/lib/acl/Acl.js +11 -0
  11. package/lib/components/FieldModelRenderer.js +14 -6
  12. package/lib/components/FieldSkeleton.d.ts +10 -0
  13. package/lib/components/FieldSkeleton.js +64 -0
  14. package/lib/components/FlowContextSelector.js +7 -2
  15. package/lib/components/FlowModelRenderer.d.ts +3 -6
  16. package/lib/components/FlowModelRenderer.js +16 -47
  17. package/lib/components/FormItem.js +5 -1
  18. package/lib/components/MobilePopup.d.ts +20 -0
  19. package/lib/components/MobilePopup.js +102 -0
  20. package/lib/components/MobilePopup.style.d.ts +17 -0
  21. package/lib/components/MobilePopup.style.js +186 -0
  22. package/lib/components/index.d.ts +1 -0
  23. package/lib/components/index.js +3 -1
  24. package/lib/components/settings/independents/dropdown/FlowsDropdownButton.js +2 -2
  25. package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +17 -5
  26. package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +2 -2
  27. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.d.ts +2 -2
  28. package/lib/components/settings/wrappers/contextual/FlowsFloatContextMenu.js +35 -6
  29. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
  30. package/lib/components/variables/VariableInput.js +19 -5
  31. package/lib/components/variables/VariableTag.js +43 -2
  32. package/lib/components/variables/types.d.ts +2 -0
  33. package/lib/data-source/index.d.ts +15 -4
  34. package/lib/data-source/index.js +42 -13
  35. package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
  36. package/lib/data-source/sortCollectionsByInherits.js +71 -0
  37. package/lib/emitter.d.ts +6 -0
  38. package/lib/emitter.js +12 -0
  39. package/lib/executor/FlowExecutor.d.ts +4 -5
  40. package/lib/executor/FlowExecutor.js +168 -99
  41. package/lib/flow-registry/GlobalFlowRegistry.d.ts +1 -0
  42. package/lib/flow-registry/GlobalFlowRegistry.js +3 -0
  43. package/lib/flow-registry/InstanceFlowRegistry.d.ts +1 -0
  44. package/lib/flow-registry/InstanceFlowRegistry.js +3 -0
  45. package/lib/flowContext.d.ts +37 -5
  46. package/lib/flowContext.js +224 -87
  47. package/lib/flowEngine.d.ts +24 -1
  48. package/lib/flowEngine.js +81 -8
  49. package/lib/flowSettings.d.ts +2 -1
  50. package/lib/flowSettings.js +16 -8
  51. package/lib/hooks/useApplyAutoFlows.js +2 -1
  52. package/lib/index.d.ts +7 -1
  53. package/lib/index.js +32 -3
  54. package/lib/locale/en-US.json +4 -2
  55. package/lib/locale/index.d.ts +4 -0
  56. package/lib/locale/zh-CN.json +4 -2
  57. package/lib/models/CollectionFieldModel.d.ts +3 -0
  58. package/lib/models/CollectionFieldModel.js +52 -6
  59. package/lib/models/flowModel.d.ts +30 -29
  60. package/lib/models/flowModel.js +153 -100
  61. package/lib/models/forkFlowModel.d.ts +8 -4
  62. package/lib/models/forkFlowModel.js +38 -8
  63. package/lib/provider.d.ts +3 -1
  64. package/lib/provider.js +7 -5
  65. package/lib/resources/multiRecordResource.js +25 -1
  66. package/lib/resources/singleRecordResource.js +19 -1
  67. package/lib/resources/sqlResource.d.ts +1 -0
  68. package/lib/resources/sqlResource.js +20 -24
  69. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  70. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
  71. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  72. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  73. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  74. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  75. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  76. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  77. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  78. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  79. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  80. package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
  81. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  82. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  83. package/lib/runjs-context/contexts/base.d.ts +9 -0
  84. package/lib/runjs-context/contexts/base.js +205 -0
  85. package/lib/runjs-context/helpers.d.ts +5 -2
  86. package/lib/runjs-context/helpers.js +36 -27
  87. package/lib/runjs-context/registry.d.ts +7 -4
  88. package/lib/runjs-context/registry.js +10 -42
  89. package/lib/runjs-context/setup.d.ts +9 -0
  90. package/lib/runjs-context/setup.js +82 -0
  91. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  92. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  93. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  94. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  95. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  96. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  97. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  98. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  99. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  100. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  101. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  102. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  103. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  104. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  105. package/lib/runjs-context/snippets/index.d.ts +14 -3
  106. package/lib/runjs-context/snippets/index.js +162 -40
  107. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  108. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  109. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  110. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  111. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  112. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  113. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  114. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.d.ts +11 -0
  115. package/lib/runjs-context/snippets/scene/block/render-antd-icons.snippet.js +65 -0
  116. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  117. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  118. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  119. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  120. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  121. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  122. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  123. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  124. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  125. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  126. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  127. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  128. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  129. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  130. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  131. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  132. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  133. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  134. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  135. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  136. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  137. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  138. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  139. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  140. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  141. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  142. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  143. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  144. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  145. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  146. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  147. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  148. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  149. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  150. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  151. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  152. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  153. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  154. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  155. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  156. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  157. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  158. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  159. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  160. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  161. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  162. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  163. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  164. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  165. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  166. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  167. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  168. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  169. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  170. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  171. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  172. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  173. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  174. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  175. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  176. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  177. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  178. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  179. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  180. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  181. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  182. package/lib/runjs-context/snippets/types.d.ts +9 -1
  183. package/lib/scheduler/ModelOperationScheduler.d.ts +51 -0
  184. package/lib/scheduler/ModelOperationScheduler.js +262 -0
  185. package/lib/types.d.ts +28 -3
  186. package/lib/types.js +4 -3
  187. package/lib/utils/associationObjectVariable.d.ts +32 -0
  188. package/lib/utils/associationObjectVariable.js +157 -0
  189. package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
  190. package/lib/utils/buildSettingsViewInputArgs.js +75 -0
  191. package/lib/utils/createEphemeralContext.d.ts +13 -0
  192. package/lib/utils/createEphemeralContext.js +140 -0
  193. package/lib/utils/flows.d.ts +10 -0
  194. package/lib/{runjs-context/snippets/global/api-request-post.snippet.js → utils/flows.js} +21 -15
  195. package/lib/utils/index.d.ts +7 -2
  196. package/lib/utils/index.js +21 -2
  197. package/lib/utils/jsxTransform.d.ts +15 -0
  198. package/lib/utils/jsxTransform.js +68 -0
  199. package/lib/utils/params-resolvers.js +3 -3
  200. package/lib/utils/parsePathnameToViewParams.d.ts +1 -1
  201. package/lib/utils/parsePathnameToViewParams.js +41 -5
  202. package/lib/utils/pruneFilter.d.ts +21 -0
  203. package/lib/{runjs-context/snippets/global/try-catch-async.snippet.js → utils/pruneFilter.js} +24 -16
  204. package/lib/utils/safeGlobals.d.ts +5 -3
  205. package/lib/utils/safeGlobals.js +40 -0
  206. package/lib/utils/schema-utils.js +2 -2
  207. package/lib/utils/serverContextParams.d.ts +1 -0
  208. package/lib/utils/translation.d.ts +4 -1
  209. package/lib/utils/translation.js +6 -2
  210. package/lib/utils/variablesParams.d.ts +22 -5
  211. package/lib/utils/variablesParams.js +132 -36
  212. package/lib/views/DrawerComponent.js +21 -2
  213. package/lib/views/PageComponent.js +2 -1
  214. package/lib/views/ViewNavigation.d.ts +3 -9
  215. package/lib/views/ViewNavigation.js +16 -2
  216. package/lib/views/createViewMeta.d.ts +29 -1
  217. package/lib/views/createViewMeta.js +338 -72
  218. package/lib/views/index.d.ts +1 -0
  219. package/lib/views/index.js +3 -0
  220. package/lib/views/useDialog.d.ts +9 -8
  221. package/lib/views/useDialog.js +19 -14
  222. package/lib/views/useDrawer.d.ts +9 -8
  223. package/lib/views/useDrawer.js +54 -35
  224. package/lib/views/usePage.d.ts +9 -8
  225. package/lib/views/usePage.js +20 -14
  226. package/package.json +6 -3
  227. package/src/BlockScopedFlowEngine.ts +86 -0
  228. package/src/FlowContextProvider.tsx +4 -2
  229. package/src/JSRunner.ts +3 -0
  230. package/src/ViewScopedFlowEngine.ts +15 -1
  231. package/src/__tests__/JSRunner.test.ts +62 -53
  232. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  233. package/src/__tests__/createViewMeta.popup.test.ts +132 -0
  234. package/src/__tests__/flow-engine.test.ts +3 -0
  235. package/src/__tests__/flowContext.test.ts +52 -0
  236. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  237. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  238. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  239. package/src/__tests__/flowSettings.open.test.tsx +2 -0
  240. package/src/__tests__/flowSettings.test.ts +2 -0
  241. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  242. package/src/__tests__/modelOperationScheduler.test.ts +346 -0
  243. package/src/__tests__/objectVariable.test.ts +464 -0
  244. package/src/__tests__/runjsContext.test.ts +216 -35
  245. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  246. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  247. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  248. package/src/__tests__/runjsLocales.test.ts +36 -0
  249. package/src/__tests__/runjsRuntimeFeatures.test.ts +461 -0
  250. package/src/__tests__/runjsSnippets.test.ts +140 -0
  251. package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
  252. package/src/acl/Acl.tsx +14 -0
  253. package/src/acl/__tests__/Acl.test.tsx +43 -0
  254. package/src/components/DynamicFlowsEditor.tsx +3 -4
  255. package/src/components/FieldModelRenderer.tsx +20 -7
  256. package/src/components/FieldSkeleton.tsx +27 -0
  257. package/src/components/FlowContextSelector.tsx +6 -2
  258. package/src/components/FlowModelRenderer.tsx +33 -81
  259. package/src/components/FormItem.tsx +8 -1
  260. package/src/components/MobilePopup.style.ts +220 -0
  261. package/src/components/MobilePopup.tsx +86 -0
  262. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +6 -6
  263. package/src/components/index.ts +1 -0
  264. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
  265. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
  266. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
  267. package/src/components/settings/wrappers/contextual/FlowsFloatContextMenu.tsx +39 -10
  268. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
  269. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +425 -0
  270. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
  271. package/src/components/variables/VariableInput.tsx +25 -5
  272. package/src/components/variables/VariableTag.tsx +54 -2
  273. package/src/components/variables/types.ts +2 -0
  274. package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
  275. package/src/data-source/index.ts +42 -11
  276. package/src/data-source/sortCollectionsByInherits.ts +61 -0
  277. package/src/emitter.ts +14 -0
  278. package/src/executor/FlowExecutor.ts +213 -119
  279. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  280. package/src/executor/__tests__/flowExecutor.test.ts +151 -5
  281. package/src/flow-registry/GlobalFlowRegistry.ts +1 -0
  282. package/src/flow-registry/InstanceFlowRegistry.ts +1 -0
  283. package/src/flow-registry/__tests__/globalFlowRegistry.test.ts +54 -0
  284. package/src/flowContext.ts +303 -104
  285. package/src/flowEngine.ts +96 -6
  286. package/src/flowSettings.ts +12 -4
  287. package/src/hooks/useApplyAutoFlows.ts +3 -1
  288. package/src/index.ts +12 -1
  289. package/src/locale/en-US.json +4 -2
  290. package/src/locale/zh-CN.json +4 -2
  291. package/src/models/CollectionFieldModel.tsx +60 -8
  292. package/src/models/__tests__/dispatchEvent.behavior.test.ts +169 -0
  293. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +33 -9
  294. package/src/models/__tests__/flowModel.scheduleModelOperation.test.tsx +129 -0
  295. package/src/models/__tests__/flowModel.test.ts +234 -111
  296. package/src/models/__tests__/forkFlowModel.test.ts +40 -7
  297. package/src/models/flowModel.tsx +197 -132
  298. package/src/models/forkFlowModel.ts +48 -8
  299. package/src/provider.tsx +10 -7
  300. package/src/resources/multiRecordResource.ts +28 -1
  301. package/src/resources/singleRecordResource.ts +19 -1
  302. package/src/resources/sqlResource.ts +20 -25
  303. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
  304. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
  305. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  306. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  307. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  308. package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
  309. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  310. package/src/runjs-context/contexts/base.ts +196 -0
  311. package/src/runjs-context/helpers.ts +32 -30
  312. package/src/runjs-context/registry.ts +16 -47
  313. package/src/runjs-context/setup.ts +51 -0
  314. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  315. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  316. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  317. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  318. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  319. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  320. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  321. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  322. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  323. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  324. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  325. package/src/runjs-context/snippets/index.ts +178 -39
  326. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  327. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  328. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  329. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  330. package/src/runjs-context/snippets/scene/block/render-antd-icons.snippet.ts +46 -0
  331. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  332. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  333. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  334. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  335. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  336. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  337. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  338. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  339. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  340. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  341. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  342. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  343. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  344. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  345. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  346. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  347. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  348. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  349. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  350. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  351. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  352. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  353. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  354. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  355. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  356. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  357. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  358. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  359. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  360. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  361. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  362. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  363. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  364. package/src/runjs-context/snippets/types.ts +5 -1
  365. package/src/scheduler/ModelOperationScheduler.ts +304 -0
  366. package/src/types.ts +34 -0
  367. package/src/utils/__tests__/flows.test.ts +65 -0
  368. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  369. package/src/utils/__tests__/parsePathnameToViewParams.test.ts +25 -0
  370. package/src/utils/__tests__/pruneFilter.test.ts +38 -0
  371. package/src/utils/__tests__/safeGlobals.test.ts +22 -1
  372. package/src/utils/__tests__/variablesParams.test.ts +63 -0
  373. package/src/utils/associationObjectVariable.ts +180 -0
  374. package/src/utils/buildSettingsViewInputArgs.ts +72 -0
  375. package/src/utils/createEphemeralContext.ts +142 -0
  376. package/src/utils/flows.ts +23 -0
  377. package/src/utils/index.ts +11 -2
  378. package/src/utils/jsxTransform.ts +39 -0
  379. package/src/utils/params-resolvers.ts +2 -2
  380. package/src/utils/parsePathnameToViewParams.ts +50 -6
  381. package/src/utils/pruneFilter.ts +41 -0
  382. package/src/utils/safeGlobals.ts +49 -3
  383. package/src/utils/schema-utils.ts +1 -1
  384. package/src/utils/serverContextParams.ts +1 -0
  385. package/src/utils/translation.ts +7 -2
  386. package/src/utils/variablesParams.ts +156 -38
  387. package/src/views/DrawerComponent.tsx +21 -2
  388. package/src/views/PageComponent.tsx +1 -1
  389. package/src/views/ViewNavigation.ts +20 -12
  390. package/src/views/__tests__/ViewNavigation.test.ts +10 -0
  391. package/src/views/createViewMeta.ts +393 -70
  392. package/src/views/index.tsx +1 -0
  393. package/src/views/useDialog.tsx +24 -18
  394. package/src/views/useDrawer.tsx +74 -45
  395. package/src/views/usePage.tsx +26 -17
  396. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  397. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  398. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  399. package/lib/runjs-context/index.d.ts +0 -19
  400. package/lib/runjs-context/index.js +0 -57
  401. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  402. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  403. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  404. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  405. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
  406. package/lib/runjs-context/snippets/global/requireAsync.snippet.d.ts +0 -16
  407. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  408. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  409. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  410. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  411. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  412. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  413. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  414. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  415. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  416. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  417. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  418. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  419. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  420. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  421. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js +0 -46
  422. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  423. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  424. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  425. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  426. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  427. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  428. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  429. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  430. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  431. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  432. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  433. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  434. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  435. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  436. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  437. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  438. package/src/runjs-context/index.ts +0 -20
  439. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  440. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  441. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  442. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  443. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  444. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  445. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  446. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  447. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  448. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  449. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  450. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  451. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  452. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  453. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  454. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  455. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  456. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  457. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  458. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  459. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  460. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  461. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  462. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  463. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  464. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  465. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  466. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
package/lib/flowEngine.js CHANGED
@@ -59,6 +59,8 @@ var import_flowSettings = require("./flowSettings");
59
59
  var import_models = require("./models");
60
60
  var import_ReactView = require("./ReactView");
61
61
  var import_resources = require("./resources");
62
+ var import_emitter = require("./emitter");
63
+ var import_ModelOperationScheduler = __toESM(require("./scheduler/ModelOperationScheduler"));
62
64
  var import_utils = require("./utils");
63
65
  var _FlowEngine_instances, registerModel_fn;
64
66
  const _FlowEngine = class _FlowEngine {
@@ -118,6 +120,13 @@ const _FlowEngine = class _FlowEngine {
118
120
  __publicField(this, "_previousEngine");
119
121
  __publicField(this, "_nextEngine");
120
122
  __publicField(this, "_resources", /* @__PURE__ */ new Map());
123
+ /**
124
+ * 引擎事件总线(目前用于模型生命周期等事件)。
125
+ * ViewScopedFlowEngine 持有自己的实例,实现作用域隔离。
126
+ */
127
+ __publicField(this, "emitter", new import_emitter.Emitter());
128
+ /** 调度器:仅在 View 作用域引擎本地启用;根/Block 作用域默认不持有 */
129
+ __publicField(this, "_modelOperationScheduler");
121
130
  __publicField(this, "logger");
122
131
  /**
123
132
  * Flow settings, including components and form scopes.
@@ -132,7 +141,7 @@ const _FlowEngine = class _FlowEngine {
132
141
  */
133
142
  __publicField(this, "reactView");
134
143
  /**
135
- * Flow executor that runs flows and auto-flows.
144
+ * Flow executor that runs event flows.
136
145
  */
137
146
  __publicField(this, "executor");
138
147
  this.reactView = new import_ReactView.ReactView(this);
@@ -161,6 +170,27 @@ const _FlowEngine = class _FlowEngine {
161
170
  });
162
171
  this.executor = new import_FlowExecutor.FlowExecutor(this);
163
172
  }
173
+ /** 获取/创建当前引擎的调度器(仅在本地作用域) */
174
+ getScheduler() {
175
+ if (!this._modelOperationScheduler) {
176
+ this._modelOperationScheduler = new import_ModelOperationScheduler.default(this);
177
+ }
178
+ return this._modelOperationScheduler;
179
+ }
180
+ /** 释放并清理当前引擎本地调度器(若存在) */
181
+ disposeScheduler() {
182
+ if (this._modelOperationScheduler) {
183
+ try {
184
+ this._modelOperationScheduler.dispose();
185
+ } finally {
186
+ this._modelOperationScheduler = void 0;
187
+ }
188
+ }
189
+ }
190
+ /** 在目标模型生命周期达成时执行操作(仅在 View 引擎本地存储计划) */
191
+ scheduleModelOperation(fromModelOrUid, toUid, fn, options) {
192
+ return this.getScheduler().schedule(fromModelOrUid, toUid, fn, options);
193
+ }
164
194
  /** 上一个引擎(根引擎为 undefined) */
165
195
  get previousEngine() {
166
196
  return this._previousEngine;
@@ -384,6 +414,10 @@ const _FlowEngine = class _FlowEngine {
384
414
  }
385
415
  this._modelInstances.set(modelInstance.uid, modelInstance);
386
416
  modelInstance.onInit(options);
417
+ void this.emitter.emitAsync("model:created", {
418
+ uid: modelInstance.uid,
419
+ model: modelInstance
420
+ });
387
421
  this._applyFlowDefinitionDefaultParams(modelInstance).catch((err) => {
388
422
  console.warn("FlowEngine: apply flow defaultParams failed:", err);
389
423
  });
@@ -460,7 +494,7 @@ const _FlowEngine = class _FlowEngine {
460
494
  * @returns {boolean} Returns true if successfully destroyed, false otherwise (e.g. instance does not exist)
461
495
  */
462
496
  removeModel(uid) {
463
- var _a;
497
+ var _a, _b, _c;
464
498
  if (!this._modelInstances.has(uid)) {
465
499
  console.warn(`FlowEngine: Model with UID '${uid}' does not exist.`);
466
500
  return false;
@@ -475,16 +509,30 @@ const _FlowEngine = class _FlowEngine {
475
509
  if (index !== -1) {
476
510
  subModelValue.splice(index, 1);
477
511
  modelInstance.parent.emitter.emit("onSubModelRemoved", modelInstance);
512
+ (_b = this.emitter) == null ? void 0 : _b.emit("model:subModel:removed", {
513
+ parentUid: modelInstance.parent.uid,
514
+ parent: modelInstance.parent,
515
+ model: modelInstance
516
+ });
478
517
  break;
479
518
  }
480
519
  } else if (subModelValue && subModelValue === modelInstance) {
481
520
  delete modelInstance.parent.subModels[subKey];
482
521
  modelInstance.parent.emitter.emit("onSubModelRemoved", modelInstance);
522
+ (_c = this.emitter) == null ? void 0 : _c.emit("model:subModel:removed", {
523
+ parentUid: modelInstance.parent.uid,
524
+ parent: modelInstance.parent,
525
+ model: modelInstance
526
+ });
483
527
  break;
484
528
  }
485
529
  }
486
530
  }
487
531
  this._modelInstances.delete(uid);
532
+ void this.emitter.emitAsync("model:destroyed", {
533
+ uid,
534
+ model: modelInstance
535
+ });
488
536
  return true;
489
537
  }
490
538
  /**
@@ -629,6 +677,16 @@ const _FlowEngine = class _FlowEngine {
629
677
  }
630
678
  return this.removeModel(uid);
631
679
  }
680
+ /**
681
+ * Duplicate a model tree via repository API.
682
+ * Returns the duplicated model JSON (root with subModels) or null if not available.
683
+ * @param {string} uid UID of the model to duplicate
684
+ * @returns {Promise<any | null>} Duplicated model JSON or null
685
+ */
686
+ async duplicateModel(uid) {
687
+ if (!this.ensureModelRepository()) return null;
688
+ return this._modelRepository.duplicate(uid);
689
+ }
632
690
  /**
633
691
  * Replace a model instance with a new instance of a class.
634
692
  * @template T New model type
@@ -640,7 +698,7 @@ const _FlowEngine = class _FlowEngine {
640
698
  * @returns {Promise<T | null>} Newly created model instance
641
699
  */
642
700
  async replaceModel(uid, optionsOrFn) {
643
- var _a;
701
+ var _a, _b;
644
702
  const oldModel = this.getModel(uid);
645
703
  if (!oldModel) {
646
704
  console.warn(`FlowEngine: Cannot replace model. Model with UID '${uid}' not found.`);
@@ -674,9 +732,15 @@ const _FlowEngine = class _FlowEngine {
674
732
  }
675
733
  if (currentParent) {
676
734
  currentParent.emitter.setPaused(false);
677
- currentParent.parent.invalidateAutoFlowCache(true);
735
+ currentParent.parent.invalidateFlowCache("beforeRender", true);
678
736
  (_a = currentParent.parent) == null ? void 0 : _a.rerender();
679
737
  currentParent.emitter.emit("onSubModelReplaced", { oldModel, newModel });
738
+ (_b = this.emitter) == null ? void 0 : _b.emit("model:subModel:replaced", {
739
+ parentUid: currentParent.uid,
740
+ parent: currentParent,
741
+ oldModel,
742
+ newModel
743
+ });
680
744
  }
681
745
  await newModel.save();
682
746
  return newModel;
@@ -688,6 +752,7 @@ const _FlowEngine = class _FlowEngine {
688
752
  * @returns {Promise<void>} No return value
689
753
  */
690
754
  async moveModel(sourceId, targetId, options) {
755
+ var _a, _b;
691
756
  const sourceModel = this.getModel(sourceId);
692
757
  const targetModel = this.getModel(targetId);
693
758
  if (!sourceModel || !targetModel) {
@@ -704,7 +769,8 @@ const _FlowEngine = class _FlowEngine {
704
769
  console.error("FlowModel.moveTo: Parent subModels must be an array to perform move operation.");
705
770
  return false;
706
771
  }
707
- const findIndex = /* @__PURE__ */ __name((model) => subModels.findIndex((item) => item.uid === model.uid), "findIndex");
772
+ const subModelsCopy = [...subModels];
773
+ const findIndex = /* @__PURE__ */ __name((model) => subModelsCopy.findIndex((item) => item.uid === model.uid), "findIndex");
708
774
  const currentIndex = findIndex(sourceModel2);
709
775
  const targetIndex = findIndex(targetModel2);
710
776
  if (currentIndex === -1 || targetIndex === -1) {
@@ -715,11 +781,12 @@ const _FlowEngine = class _FlowEngine {
715
781
  console.warn("FlowModel.moveTo: Current model is already at the target position. No action taken.");
716
782
  return false;
717
783
  }
718
- const [movedModel] = subModels.splice(currentIndex, 1);
719
- subModels.splice(targetIndex, 0, movedModel);
720
- subModels.forEach((model, index) => {
784
+ const [movedModel] = subModelsCopy.splice(currentIndex, 1);
785
+ subModelsCopy.splice(targetIndex, 0, movedModel);
786
+ subModelsCopy.forEach((model, index) => {
721
787
  model.sortIndex = index;
722
788
  });
789
+ sourceModel2.parent.subModels[sourceModel2.subKey] = subModelsCopy;
723
790
  return true;
724
791
  }, "move");
725
792
  move(sourceModel, targetModel);
@@ -728,6 +795,12 @@ const _FlowEngine = class _FlowEngine {
728
795
  await this._modelRepository.move(sourceId, targetId, position);
729
796
  }
730
797
  sourceModel.parent.emitter.emit("onSubModelMoved", { source: sourceModel, target: targetModel });
798
+ (_b = this.emitter) == null ? void 0 : _b.emit("model:subModel:moved", {
799
+ parentUid: (_a = sourceModel.parent) == null ? void 0 : _a.uid,
800
+ parent: sourceModel.parent,
801
+ source: sourceModel,
802
+ target: targetModel
803
+ });
731
804
  }
732
805
  /**
733
806
  * Filter model classes by parent class (supports multi-level inheritance).
@@ -227,12 +227,13 @@ export declare class FlowSettings {
227
227
  * @param {any} form 表单实例(从外部传入以便统一管理)
228
228
  * @returns {React.ReactElement} 渲染的表单元素
229
229
  */
230
- renderStepForm({ uiSchema, initialValues, flowEngine, form, onFormValuesChange, }: {
230
+ renderStepForm({ uiSchema, initialValues, flowEngine, form, onFormValuesChange, key, }: {
231
231
  uiSchema: any;
232
232
  initialValues: any;
233
233
  flowEngine: any;
234
234
  form?: any;
235
235
  onFormValuesChange?: (form: any) => void;
236
+ key?: string;
236
237
  }): React.ReactElement;
237
238
  /**
238
239
  * 打开流程设置入口(聚合渲染多个 flow 的可配置步骤)
@@ -152,7 +152,7 @@ const _FlowSettings = class _FlowSettings {
152
152
  TreeSelect,
153
153
  Upload
154
154
  } = await import("@formily/antd-v5");
155
- const { Button: Button2 } = await import("antd");
155
+ const { Button: Button2, Alert } = await import("antd");
156
156
  this.components.Form = Form;
157
157
  this.components.FormDialog = FormDialog;
158
158
  this.components.FormDrawer = FormDrawer;
@@ -186,6 +186,7 @@ const _FlowSettings = class _FlowSettings {
186
186
  this.components.Space = Space2;
187
187
  this.components.Editable = Editable;
188
188
  this.components.PreviewText = PreviewText;
189
+ this.components.Alert = Alert;
189
190
  this.components.Button = Button2;
190
191
  this.components.Submit = Submit;
191
192
  this.components.Reset = Reset;
@@ -376,7 +377,8 @@ const _FlowSettings = class _FlowSettings {
376
377
  initialValues,
377
378
  flowEngine,
378
379
  form,
379
- onFormValuesChange: onFormValuesChange2
380
+ onFormValuesChange: onFormValuesChange2,
381
+ key
380
382
  }) {
381
383
  var _a, _b;
382
384
  const scopes = {
@@ -399,7 +401,7 @@ const _FlowSettings = class _FlowSettings {
399
401
  const SchemaField = (0, import_react.createSchemaField)();
400
402
  return import_react2.default.createElement(
401
403
  FormProviderWithForm,
402
- { form, initialValues, onFormValuesChange: onFormValuesChange2 },
404
+ { form, initialValues, onFormValuesChange: onFormValuesChange2, key },
403
405
  import_react2.default.createElement(SchemaField, {
404
406
  schema: compiledSchema,
405
407
  components: ((_b = flowEngine == null ? void 0 : flowEngine.flowSettings) == null ? void 0 : _b.components) || {},
@@ -436,7 +438,7 @@ const _FlowSettings = class _FlowSettings {
436
438
  * @returns {Promise<boolean>} 是否成功打开弹窗
437
439
  */
438
440
  async open(options) {
439
- var _a, _b, _c, _d, _e, _f;
441
+ var _a, _b, _c, _d, _e;
440
442
  __privateGet(this, _emitter).emit("beforeOpen", options);
441
443
  const { model, flowKey, flowKeys, stepKey, uiMode = "dialog", preset, onCancel, onSaved } = options;
442
444
  if (!model) {
@@ -471,7 +473,7 @@ const _FlowSettings = class _FlowSettings {
471
473
  let actionDefaultParams = {};
472
474
  let uiMode2;
473
475
  if (step.use) {
474
- const action = (_c = (_b = model.flowEngine) == null ? void 0 : _b.getAction) == null ? void 0 : _c.call(_b, step.use);
476
+ const action = (_b = model.getAction) == null ? void 0 : _b.call(model, step.use);
475
477
  if (action) {
476
478
  actionDefaultParams = action.defaultParams || {};
477
479
  stepTitle = stepTitle || action.title;
@@ -483,6 +485,10 @@ const _FlowSettings = class _FlowSettings {
483
485
  const flowRuntimeContext = new import_flowContext.FlowRuntimeContext(model, fk, "settings");
484
486
  (0, import_utils.setupRuntimeContextSteps)(flowRuntimeContext, flow.steps, model, fk);
485
487
  flowRuntimeContext.defineProperty("currentStep", { value: step });
488
+ flowRuntimeContext.defineMethod("getStepFormValues", (flowKey2, stepKey2) => {
489
+ var _a2;
490
+ return (_a2 = forms.get(keyOf({ flowKey: flowKey2, stepKey: stepKey2 }))) == null ? void 0 : _a2.values;
491
+ });
486
492
  const modelStepParams = model.getStepParams(fk, sk) || {};
487
493
  const resolvedDefaultParams = await (0, import_utils.resolveDefaultParams)(step.defaultParams, flowRuntimeContext);
488
494
  const resolvedActionDefaults = await (0, import_utils.resolveDefaultParams)(actionDefaultParams, flowRuntimeContext);
@@ -509,7 +515,7 @@ const _FlowSettings = class _FlowSettings {
509
515
  }
510
516
  if (entries.length === 0) {
511
517
  if (!preset) {
512
- (_d = message == null ? void 0 : message.info) == null ? void 0 : _d.call(message, t("This model has no configurable flow settings"));
518
+ (_c = message == null ? void 0 : message.info) == null ? void 0 : _c.call(message, t("This model has no configurable flow settings"));
513
519
  }
514
520
  return false;
515
521
  }
@@ -521,7 +527,7 @@ const _FlowSettings = class _FlowSettings {
521
527
  const scopes = {
522
528
  // 为 schema 表达式提供上下文能力(可在表达式中使用 useFlowSettingsContext 等)
523
529
  useFlowSettingsContext: import_useFlowSettingsContext.useFlowSettingsContext,
524
- ...((_e = flowEngine == null ? void 0 : flowEngine.flowSettings) == null ? void 0 : _e.scopes) || {}
530
+ ...((_d = flowEngine == null ? void 0 : flowEngine.flowSettings) == null ? void 0 : _d.scopes) || {}
525
531
  };
526
532
  let modeProps = typeof resolvedUiMode === "object" && resolvedUiMode ? resolvedUiMode.props || {} : {};
527
533
  if (modeType === "embed") {
@@ -535,7 +541,7 @@ const _FlowSettings = class _FlowSettings {
535
541
  target,
536
542
  styles: {
537
543
  body: {
538
- padding: (_f = flowEngine.context.themeToken) == null ? void 0 : _f.padding
544
+ padding: (_e = flowEngine.context.themeToken) == null ? void 0 : _e.padding
539
545
  }
540
546
  },
541
547
  ...modeProps,
@@ -602,6 +608,8 @@ const _FlowSettings = class _FlowSettings {
602
608
  zIndex: 5e3,
603
609
  // 允许透传其它 props(如 maskClosable、footer 等),但确保 content 由我们接管
604
610
  ...modeProps,
611
+ // 统一构造 settings 弹窗的 inputArgs(集合/记录/父导航/关联)
612
+ inputArgs: (0, import_utils.buildSettingsViewInputArgs)(model, modeProps == null ? void 0 : modeProps.inputArgs),
605
613
  content: /* @__PURE__ */ __name((currentView, viewCtx) => {
606
614
  viewCtx == null ? void 0 : viewCtx.defineMethod("getStepFormValues", (flowKey2, stepKey2) => {
607
615
  var _a2;
@@ -44,7 +44,8 @@ function useApplyAutoFlows(modelOrUid, inputArgs, options) {
44
44
  model == null ? void 0 : model.useHooksBeforeRender();
45
45
  const { loading, error } = (0, import_ahooks.useRequest)(
46
46
  async () => {
47
- await model.applyAutoFlows(inputArgs);
47
+ if (!model) return;
48
+ await model.dispatchEvent("beforeRender", inputArgs);
48
49
  },
49
50
  {
50
51
  refreshDeps: [model, inputArgs]
package/lib/index.d.ts CHANGED
@@ -8,6 +8,7 @@
8
8
  */
9
9
  export * from './types';
10
10
  export * from './utils';
11
+ export { compileRunJs } from './utils/jsxTransform';
11
12
  export * from './resources';
12
13
  export * from './flowEngine';
13
14
  export * from './hooks';
@@ -22,6 +23,11 @@ export * from './ElementProxy';
22
23
  export * from './flowContext';
23
24
  export * from './FlowContextProvider';
24
25
  export * from './JSRunner';
25
- export * from './runjs-context';
26
+ export { getRunJSDocFor, createJSRunnerWithVersion, getRunJSScenesForModel, getRunJSScenesForContext, } from './runjs-context/helpers';
27
+ export { RunJSContextRegistry, getModelClassName } from './runjs-context/registry';
28
+ export { setupRunJSContexts } from './runjs-context/setup';
29
+ export { getSnippetBody, listSnippetsForContext } from './runjs-context/snippets';
26
30
  export * from './views';
27
31
  export * from './FlowDefinition';
32
+ export { createViewScopedEngine } from './ViewScopedFlowEngine';
33
+ export { createBlockScopedEngine } from './BlockScopedFlowEngine';
package/lib/index.js CHANGED
@@ -27,11 +27,24 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
27
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
28
  var src_exports = {};
29
29
  __export(src_exports, {
30
- observer: () => import_reactive_react.observer
30
+ RunJSContextRegistry: () => import_registry.RunJSContextRegistry,
31
+ compileRunJs: () => import_jsxTransform.compileRunJs,
32
+ createBlockScopedEngine: () => import_BlockScopedFlowEngine.createBlockScopedEngine,
33
+ createJSRunnerWithVersion: () => import_helpers.createJSRunnerWithVersion,
34
+ createViewScopedEngine: () => import_ViewScopedFlowEngine.createViewScopedEngine,
35
+ getModelClassName: () => import_registry.getModelClassName,
36
+ getRunJSDocFor: () => import_helpers.getRunJSDocFor,
37
+ getRunJSScenesForContext: () => import_helpers.getRunJSScenesForContext,
38
+ getRunJSScenesForModel: () => import_helpers.getRunJSScenesForModel,
39
+ getSnippetBody: () => import_snippets.getSnippetBody,
40
+ listSnippetsForContext: () => import_snippets.listSnippetsForContext,
41
+ observer: () => import_reactive_react.observer,
42
+ setupRunJSContexts: () => import_setup.setupRunJSContexts
31
43
  });
32
44
  module.exports = __toCommonJS(src_exports);
33
45
  __reExport(src_exports, require("./types"), module.exports);
34
46
  __reExport(src_exports, require("./utils"), module.exports);
47
+ var import_jsxTransform = require("./utils/jsxTransform");
35
48
  __reExport(src_exports, require("./resources"), module.exports);
36
49
  __reExport(src_exports, require("./flowEngine"), module.exports);
37
50
  __reExport(src_exports, require("./hooks"), module.exports);
@@ -46,12 +59,29 @@ __reExport(src_exports, require("./ElementProxy"), module.exports);
46
59
  __reExport(src_exports, require("./flowContext"), module.exports);
47
60
  __reExport(src_exports, require("./FlowContextProvider"), module.exports);
48
61
  __reExport(src_exports, require("./JSRunner"), module.exports);
49
- __reExport(src_exports, require("./runjs-context"), module.exports);
62
+ var import_helpers = require("./runjs-context/helpers");
63
+ var import_registry = require("./runjs-context/registry");
64
+ var import_setup = require("./runjs-context/setup");
65
+ var import_snippets = require("./runjs-context/snippets");
50
66
  __reExport(src_exports, require("./views"), module.exports);
51
67
  __reExport(src_exports, require("./FlowDefinition"), module.exports);
68
+ var import_ViewScopedFlowEngine = require("./ViewScopedFlowEngine");
69
+ var import_BlockScopedFlowEngine = require("./BlockScopedFlowEngine");
52
70
  // Annotate the CommonJS export names for ESM import in node:
53
71
  0 && (module.exports = {
72
+ RunJSContextRegistry,
73
+ compileRunJs,
74
+ createBlockScopedEngine,
75
+ createJSRunnerWithVersion,
76
+ createViewScopedEngine,
77
+ getModelClassName,
78
+ getRunJSDocFor,
79
+ getRunJSScenesForContext,
80
+ getRunJSScenesForModel,
81
+ getSnippetBody,
82
+ listSnippetsForContext,
54
83
  observer,
84
+ setupRunJSContexts,
55
85
  ...require("./types"),
56
86
  ...require("./utils"),
57
87
  ...require("./resources"),
@@ -67,7 +97,6 @@ __reExport(src_exports, require("./FlowDefinition"), module.exports);
67
97
  ...require("./flowContext"),
68
98
  ...require("./FlowContextProvider"),
69
99
  ...require("./JSRunner"),
70
- ...require("./runjs-context"),
71
100
  ...require("./views"),
72
101
  ...require("./FlowDefinition")
73
102
  });
@@ -23,6 +23,7 @@
23
23
  "UID copied to clipboard": "UID copied to clipboard",
24
24
  "Copy failed": "Copy failed",
25
25
  "Copy failed, please copy [{{uid}}] manually.": "Copy failed, please copy [{{uid}}] manually.",
26
+ "Copy failed under HTTP. Clipboard API is unavailable on non-HTTPS pages. Please copy [{{uid}}] manually.": "Copy failed under HTTP. Clipboard API is unavailable on non-HTTPS pages. Please copy [{{uid}}] manually.",
26
27
  "Confirm delete": "Confirm delete",
27
28
  "Are you sure you want to delete this item? This action cannot be undone.": "Are you sure you want to delete this item? This action cannot be undone.",
28
29
  "Delete operation failed": "Delete operation failed",
@@ -57,5 +58,6 @@
57
58
  "Name": "Name",
58
59
  "Model with ID {{uid}} not found": "Model with ID {{uid}} not found",
59
60
  "Common actions": "Common actions",
60
- "This variable is not available": "This variable is not available"
61
- }
61
+ "This variable is not available": "This variable is not available",
62
+ "Copy popup UID": "Copy popup UID"
63
+ }
@@ -32,6 +32,7 @@ export declare const locales: {
32
32
  "UID copied to clipboard": string;
33
33
  "Copy failed": string;
34
34
  "Copy failed, please copy [{{uid}}] manually.": string;
35
+ "Copy failed under HTTP. Clipboard API is unavailable on non-HTTPS pages. Please copy [{{uid}}] manually.": string;
35
36
  "Confirm delete": string;
36
37
  "Are you sure you want to delete this item? This action cannot be undone.": string;
37
38
  "Delete operation failed": string;
@@ -67,6 +68,7 @@ export declare const locales: {
67
68
  "Model with ID {{uid}} not found": string;
68
69
  "Common actions": string;
69
70
  "This variable is not available": string;
71
+ "Copy popup UID": string;
70
72
  };
71
73
  'zh-CN': {
72
74
  "Invalid model provided": string;
@@ -93,6 +95,7 @@ export declare const locales: {
93
95
  "UID copied to clipboard": string;
94
96
  "Copy failed": string;
95
97
  "Copy failed, please copy [{{uid}}] manually.": string;
98
+ "Copy failed under HTTP. Clipboard API is unavailable on non-HTTPS pages. Please copy [{{uid}}] manually.": string;
96
99
  "Confirm delete": string;
97
100
  "Are you sure you want to delete this item? This action cannot be undone.": string;
98
101
  "Delete operation failed": string;
@@ -128,6 +131,7 @@ export declare const locales: {
128
131
  "Model with ID {{uid}} not found": string;
129
132
  "Common actions": string;
130
133
  "This variable is not available": string;
134
+ "Copy popup UID": string;
131
135
  };
132
136
  };
133
137
  /**
@@ -23,6 +23,7 @@
23
23
  "UID copied to clipboard": "UID 已复制到剪贴板",
24
24
  "Copy failed": "复制失败",
25
25
  "Copy failed, please copy [{{uid}}] manually.": "复制失败,请手动复制 [{{uid}}]。",
26
+ "Copy failed under HTTP. Clipboard API is unavailable on non-HTTPS pages. Please copy [{{uid}}] manually.": "HTTP 环境下复制失败。非 HTTPS 页面不支持剪贴板 API,请手动复制 [{{uid}}]。",
26
27
  "Confirm delete": "确认删除",
27
28
  "Are you sure you want to delete this item? This action cannot be undone.": "确定要删除此项吗?此操作不可撤销。",
28
29
  "Delete operation failed": "删除操作失败",
@@ -57,5 +58,6 @@
57
58
  "Name": "名称",
58
59
  "Model with ID {{uid}} not found": "未找到 ID 为 {{uid}} 的模型",
59
60
  "Common actions": "通用操作",
60
- "This variable is not available": "此变量不可用"
61
- }
61
+ "This variable is not available": "此变量不可用",
62
+ "Copy popup UID": "复制弹窗 UID"
63
+ }
@@ -12,6 +12,7 @@ import { FlowEngineContext } from '../flowContext';
12
12
  import { DefaultStructure } from '../types';
13
13
  import { FlowModel } from './flowModel';
14
14
  export declare function FieldPlaceholder(): React.JSX.Element;
15
+ export declare function FieldDeletePlaceholder(): React.JSX.Element;
15
16
  export interface FieldSettingsInitParams {
16
17
  dataSourceKey: string;
17
18
  collectionName: string;
@@ -26,6 +27,7 @@ export interface BindingOptions {
26
27
  }
27
28
  export declare class CollectionFieldModel<T extends DefaultStructure = DefaultStructure> extends FlowModel<T> {
28
29
  private static _bindings;
30
+ fieldDeleted: boolean;
29
31
  renderHiddenInConfig(): React.ReactNode | undefined;
30
32
  get title(): any;
31
33
  onInit(options: any): void;
@@ -38,6 +40,7 @@ export declare class CollectionFieldModel<T extends DefaultStructure = DefaultSt
38
40
  static getDefaultBindingByField(ctx: FlowEngineContext, collectionField: CollectionField, options?: {
39
41
  useStrict?: boolean;
40
42
  fallbackToTargetTitleField?: boolean;
43
+ targetCollectionTitleField?: CollectionField;
41
44
  }): BindingOptions | null;
42
45
  static bindModelToInterface(modelName: string, interfaceName: string | string[], options?: {
43
46
  isDefault?: boolean;
@@ -40,14 +40,18 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
40
40
  var CollectionFieldModel_exports = {};
41
41
  __export(CollectionFieldModel_exports, {
42
42
  CollectionFieldModel: () => CollectionFieldModel,
43
+ FieldDeletePlaceholder: () => FieldDeletePlaceholder,
43
44
  FieldPlaceholder: () => FieldPlaceholder
44
45
  });
45
46
  module.exports = __toCommonJS(CollectionFieldModel_exports);
46
47
  var import_antd = require("antd");
47
48
  var import_react = __toESM(require("react"));
49
+ var import_react_i18next = require("react-i18next");
50
+ var import_hooks = require("../hooks");
48
51
  var import_utils = require("../utils");
49
52
  var import_flowModel = require("./flowModel");
50
53
  function FieldPlaceholder() {
54
+ const { t } = (0, import_react_i18next.useTranslation)();
51
55
  return /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, null, /* @__PURE__ */ import_react.default.createElement(
52
56
  import_antd.Card,
53
57
  {
@@ -58,13 +62,46 @@ function FieldPlaceholder() {
58
62
  }
59
63
  }
60
64
  },
61
- "\u8BE5\u5B57\u6BB5\u5DF2\u88AB\u9690\u85CF\uFF0C\u4F60\u65E0\u6CD5\u67E5\u770B\uFF08\u8BE5\u5185\u5BB9\u4EC5\u5728\u6FC0\u6D3B UI Editor \u65F6\u663E\u793A\uFF09\u3002"
65
+ t(
66
+ "This field has been hidden and you cannot view it (this content is only visible when the UI Editor is activated)."
67
+ )
62
68
  ));
63
69
  }
64
70
  __name(FieldPlaceholder, "FieldPlaceholder");
71
+ function FieldDeletePlaceholder() {
72
+ const { t } = (0, import_react_i18next.useTranslation)();
73
+ const model = (0, import_hooks.useFlowModel)();
74
+ const blockModel = model.context.blockModel;
75
+ const dataSource = blockModel.collection.dataSource;
76
+ const collection = blockModel.collection;
77
+ const name = model.fieldPath;
78
+ const nameValue = (0, import_react.useMemo)(() => {
79
+ const dataSourcePrefix = `${t(dataSource.displayName || dataSource.key)} > `;
80
+ const collectionPrefix = collection ? `${t(collection.title) || collection.name || collection.tableName} > ` : "";
81
+ return `${dataSourcePrefix}${collectionPrefix}${name}`;
82
+ }, []);
83
+ return /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, null, /* @__PURE__ */ import_react.default.createElement(
84
+ "div",
85
+ {
86
+ style: {
87
+ color: "rgba(0,0,0,0.45)"
88
+ }
89
+ },
90
+ t(`The {{type}} "{{name}}" may have been deleted. Please remove this {{blockType}}.`, {
91
+ type: t("Field"),
92
+ name: nameValue,
93
+ blockType: t("Field")
94
+ }).replaceAll("&gt;", ">")
95
+ ));
96
+ }
97
+ __name(FieldDeletePlaceholder, "FieldDeletePlaceholder");
65
98
  const defaultWhen = /* @__PURE__ */ __name(() => true, "defaultWhen");
66
99
  const _CollectionFieldModel = class _CollectionFieldModel extends import_flowModel.FlowModel {
100
+ fieldDeleted = false;
67
101
  renderHiddenInConfig() {
102
+ if (this.fieldDeleted) {
103
+ return /* @__PURE__ */ import_react.default.createElement(FieldDeletePlaceholder, null);
104
+ }
68
105
  return /* @__PURE__ */ import_react.default.createElement(FieldPlaceholder, null);
69
106
  }
70
107
  get title() {
@@ -86,11 +123,13 @@ const _CollectionFieldModel = class _CollectionFieldModel extends import_flowMod
86
123
  return this.fieldPath;
87
124
  }, "get")
88
125
  });
89
- this.context.blockModel.addAppends(this.fieldPath);
90
- this.context.blockModel.addAppends(this.associationPathName);
126
+ if (this.context.blockModel) {
127
+ this.context.blockModel.addAppends(this.fieldPath);
128
+ this.context.blockModel.addAppends(this.associationPathName);
129
+ }
91
130
  }
92
131
  getFieldSettingsInitParams() {
93
- return this.getStepParams("fieldSettings", "init");
132
+ return this.getStepParams("fieldSettings", "init") || {};
94
133
  }
95
134
  get fieldPath() {
96
135
  return this.getFieldSettingsInitParams().fieldPath;
@@ -107,6 +146,9 @@ const _CollectionFieldModel = class _CollectionFieldModel extends import_flowMod
107
146
  }
108
147
  }
109
148
  static getBindingsByField(ctx, collectionField) {
149
+ if (!collectionField) {
150
+ return;
151
+ }
110
152
  const interfaceName = collectionField.interface;
111
153
  if (!this.bindings.has(interfaceName)) {
112
154
  return [];
@@ -120,8 +162,11 @@ const _CollectionFieldModel = class _CollectionFieldModel extends import_flowMod
120
162
  if (options.fallbackToTargetTitleField) {
121
163
  const binding = this.getDefaultBindingByField(ctx, collectionField, { useStrict: true });
122
164
  if (!binding) {
123
- if (collectionField.isAssociationField() && collectionField.targetCollectionTitleField) {
124
- return this.getDefaultBindingByField(ctx, collectionField.targetCollectionTitleField);
165
+ if (collectionField.isAssociationField() && (options == null ? void 0 : options.targetCollectionTitleField) || collectionField.targetCollectionTitleField) {
166
+ return this.getDefaultBindingByField(
167
+ ctx,
168
+ (options == null ? void 0 : options.targetCollectionTitleField) || collectionField.targetCollectionTitleField
169
+ );
125
170
  }
126
171
  }
127
172
  return binding;
@@ -238,5 +283,6 @@ CollectionFieldModel.registerFlow({
238
283
  // Annotate the CommonJS export names for ESM import in node:
239
284
  0 && (module.exports = {
240
285
  CollectionFieldModel,
286
+ FieldDeletePlaceholder,
241
287
  FieldPlaceholder
242
288
  });