@nocobase/flow-engine 2.0.0-alpha.2 → 2.0.0-alpha.20

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 (387) 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 +2 -2
  6. package/lib/JSRunner.js +3 -0
  7. package/lib/ViewScopedFlowEngine.d.ts +1 -1
  8. package/lib/components/FieldModelRenderer.js +10 -4
  9. package/lib/components/FieldSkeleton.d.ts +10 -0
  10. package/lib/components/FieldSkeleton.js +64 -0
  11. package/lib/components/FlowContextSelector.js +7 -2
  12. package/lib/components/FlowModelRenderer.d.ts +2 -5
  13. package/lib/components/FlowModelRenderer.js +16 -47
  14. package/lib/components/FormItem.js +5 -1
  15. package/lib/{runjs-context/snippets/global/requireAsync.snippet.d.ts → components/dnd/findModelUidPosition.d.ts} +4 -7
  16. package/lib/{runjs-context/snippets/scene/jsblock/jsx-mount.snippet.js → components/dnd/findModelUidPosition.js} +23 -19
  17. package/lib/components/dnd/gridDragPlanner.d.ts +130 -0
  18. package/lib/components/dnd/gridDragPlanner.js +497 -0
  19. package/lib/components/dnd/index.d.ts +2 -2
  20. package/lib/components/dnd/index.js +5 -5
  21. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
  22. package/lib/components/variables/VariableInput.js +16 -2
  23. package/lib/components/variables/VariableTag.js +43 -2
  24. package/lib/components/variables/types.d.ts +2 -0
  25. package/lib/data-source/index.d.ts +12 -4
  26. package/lib/data-source/index.js +18 -12
  27. package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
  28. package/lib/data-source/sortCollectionsByInherits.js +71 -0
  29. package/lib/executor/FlowExecutor.d.ts +4 -5
  30. package/lib/executor/FlowExecutor.js +122 -94
  31. package/lib/flowContext.d.ts +33 -5
  32. package/lib/flowContext.js +145 -74
  33. package/lib/flowEngine.d.ts +8 -1
  34. package/lib/flowEngine.js +12 -2
  35. package/lib/flowSettings.d.ts +2 -1
  36. package/lib/flowSettings.js +7 -3
  37. package/lib/hooks/useApplyAutoFlows.js +2 -1
  38. package/lib/index.d.ts +6 -1
  39. package/lib/index.js +29 -3
  40. package/lib/models/CollectionFieldModel.d.ts +2 -0
  41. package/lib/models/CollectionFieldModel.js +43 -3
  42. package/lib/models/flowModel.d.ts +28 -29
  43. package/lib/models/flowModel.js +110 -88
  44. package/lib/models/forkFlowModel.d.ts +2 -2
  45. package/lib/models/forkFlowModel.js +29 -6
  46. package/lib/provider.d.ts +3 -1
  47. package/lib/provider.js +7 -5
  48. package/lib/resources/multiRecordResource.js +2 -0
  49. package/lib/resources/singleRecordResource.js +1 -0
  50. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  51. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
  52. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  53. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  54. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  55. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  56. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  57. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  58. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  59. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  60. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  61. package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
  62. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  63. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  64. package/lib/runjs-context/contexts/base.d.ts +9 -0
  65. package/lib/runjs-context/contexts/base.js +169 -0
  66. package/lib/runjs-context/helpers.d.ts +5 -2
  67. package/lib/runjs-context/helpers.js +36 -27
  68. package/lib/runjs-context/registry.d.ts +7 -4
  69. package/lib/runjs-context/registry.js +10 -42
  70. package/lib/runjs-context/setup.d.ts +9 -0
  71. package/lib/runjs-context/setup.js +82 -0
  72. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  73. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  74. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  75. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  76. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  77. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  78. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  79. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  80. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  81. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  82. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  83. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  84. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  85. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  86. package/lib/runjs-context/snippets/index.d.ts +14 -3
  87. package/lib/runjs-context/snippets/index.js +160 -40
  88. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  89. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  90. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  91. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  92. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  93. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  94. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  95. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  96. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +12 -6
  97. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  98. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  99. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  100. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +72 -0
  101. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  102. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +12 -11
  103. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  104. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +100 -0
  105. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  106. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +85 -0
  107. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  108. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  109. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  110. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  111. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  112. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  113. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  114. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  115. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  116. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  117. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  118. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  119. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  120. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  121. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  122. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  123. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  124. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  125. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  126. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  127. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  128. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  129. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  130. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  131. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  132. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  133. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  134. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  135. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  136. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  137. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  138. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  139. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  140. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  141. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  142. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  143. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  144. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  145. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  146. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  147. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  148. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  149. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  150. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  151. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  152. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  153. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  154. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  155. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  156. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  157. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  158. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  159. package/lib/runjs-context/snippets/types.d.ts +9 -1
  160. package/lib/types.d.ts +15 -3
  161. package/lib/types.js +4 -3
  162. package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
  163. package/lib/utils/buildSettingsViewInputArgs.js +75 -0
  164. package/lib/utils/index.d.ts +3 -2
  165. package/lib/utils/index.js +5 -2
  166. package/lib/utils/params-resolvers.js +2 -2
  167. package/lib/utils/safeGlobals.d.ts +5 -3
  168. package/lib/utils/safeGlobals.js +40 -0
  169. package/lib/utils/serverContextParams.d.ts +1 -0
  170. package/lib/utils/variablesParams.d.ts +9 -5
  171. package/lib/utils/variablesParams.js +47 -36
  172. package/lib/views/PageComponent.js +2 -1
  173. package/lib/views/createViewMeta.d.ts +29 -1
  174. package/lib/views/createViewMeta.js +321 -72
  175. package/lib/views/index.d.ts +1 -0
  176. package/lib/views/index.js +3 -0
  177. package/lib/views/useDialog.d.ts +8 -8
  178. package/lib/views/useDialog.js +8 -7
  179. package/lib/views/useDrawer.d.ts +8 -8
  180. package/lib/views/useDrawer.js +40 -26
  181. package/lib/views/usePage.d.ts +8 -8
  182. package/lib/views/usePage.js +8 -7
  183. package/package.json +4 -3
  184. package/src/BlockScopedFlowEngine.ts +86 -0
  185. package/src/FlowContextProvider.tsx +4 -2
  186. package/src/JSRunner.ts +3 -0
  187. package/src/ViewScopedFlowEngine.ts +1 -1
  188. package/src/__tests__/JSRunner.test.ts +62 -53
  189. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  190. package/src/__tests__/flow-engine.test.ts +3 -0
  191. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  192. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  193. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  194. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  195. package/src/__tests__/runjsContext.test.ts +216 -35
  196. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  197. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  198. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  199. package/src/__tests__/runjsLocales.test.ts +36 -0
  200. package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
  201. package/src/__tests__/runjsSnippets.test.ts +140 -0
  202. package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
  203. package/src/components/DynamicFlowsEditor.tsx +3 -4
  204. package/src/components/FieldModelRenderer.tsx +16 -5
  205. package/src/components/FieldSkeleton.tsx +27 -0
  206. package/src/components/FlowContextSelector.tsx +6 -2
  207. package/src/components/FlowModelRenderer.tsx +30 -78
  208. package/src/components/FormItem.tsx +8 -1
  209. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +5 -5
  210. package/src/components/__tests__/gridDragPlanner.test.ts +494 -0
  211. package/src/components/dnd/README.md +149 -0
  212. package/src/components/dnd/findModelUidPosition.ts +26 -0
  213. package/src/components/dnd/gridDragPlanner.ts +659 -0
  214. package/src/components/dnd/index.tsx +3 -3
  215. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
  216. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +1 -0
  217. package/src/components/variables/VariableInput.tsx +22 -2
  218. package/src/components/variables/VariableTag.tsx +54 -2
  219. package/src/components/variables/types.ts +2 -0
  220. package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
  221. package/src/data-source/index.ts +16 -10
  222. package/src/data-source/sortCollectionsByInherits.ts +61 -0
  223. package/src/executor/FlowExecutor.ts +160 -114
  224. package/src/executor/__tests__/flowExecutor.test.ts +151 -5
  225. package/src/flowContext.ts +196 -93
  226. package/src/flowEngine.ts +13 -2
  227. package/src/flowSettings.ts +8 -3
  228. package/src/hooks/useApplyAutoFlows.ts +3 -1
  229. package/src/index.ts +11 -1
  230. package/src/models/CollectionFieldModel.tsx +43 -4
  231. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +4 -4
  232. package/src/models/__tests__/flowModel.test.ts +218 -95
  233. package/src/models/flowModel.tsx +146 -122
  234. package/src/models/forkFlowModel.ts +37 -5
  235. package/src/provider.tsx +10 -7
  236. package/src/resources/multiRecordResource.ts +2 -0
  237. package/src/resources/singleRecordResource.ts +1 -0
  238. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
  239. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
  240. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  241. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  242. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  243. package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
  244. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  245. package/src/runjs-context/contexts/base.ts +155 -0
  246. package/src/runjs-context/helpers.ts +32 -30
  247. package/src/runjs-context/registry.ts +16 -47
  248. package/src/runjs-context/setup.ts +51 -0
  249. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  250. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  251. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  252. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  253. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  254. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  255. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  256. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  257. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  258. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  259. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  260. package/src/runjs-context/snippets/index.ts +176 -39
  261. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  262. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  263. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  264. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  265. package/src/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.ts +15 -6
  266. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  267. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +53 -0
  268. package/src/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.ts +15 -11
  269. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +81 -0
  270. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +66 -0
  271. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  272. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  273. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  274. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  275. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  276. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  277. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  278. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  279. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  280. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  281. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  282. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  283. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  284. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  285. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  286. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  287. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  288. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  289. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  290. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  291. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  292. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  293. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  294. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  295. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  296. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  297. package/src/runjs-context/snippets/types.ts +5 -1
  298. package/src/types.ts +13 -0
  299. package/src/utils/__tests__/safeGlobals.test.ts +22 -1
  300. package/src/utils/buildSettingsViewInputArgs.ts +72 -0
  301. package/src/utils/index.ts +2 -2
  302. package/src/utils/params-resolvers.ts +1 -1
  303. package/src/utils/safeGlobals.ts +49 -3
  304. package/src/utils/serverContextParams.ts +1 -0
  305. package/src/utils/variablesParams.ts +50 -38
  306. package/src/views/PageComponent.tsx +1 -1
  307. package/src/views/createViewMeta.ts +372 -70
  308. package/src/views/index.tsx +1 -0
  309. package/src/views/useDialog.tsx +12 -10
  310. package/src/views/useDrawer.tsx +60 -36
  311. package/src/views/usePage.tsx +13 -10
  312. package/lib/components/dnd/getMousePositionOnElement.d.ts +0 -50
  313. package/lib/components/dnd/getMousePositionOnElement.js +0 -95
  314. package/lib/components/dnd/moveBlock.d.ts +0 -33
  315. package/lib/components/dnd/moveBlock.js +0 -302
  316. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  317. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  318. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  319. package/lib/runjs-context/index.d.ts +0 -19
  320. package/lib/runjs-context/index.js +0 -57
  321. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  322. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  323. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  324. package/lib/runjs-context/snippets/global/api-request-post.snippet.js +0 -42
  325. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  326. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
  327. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  328. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  329. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  330. package/lib/runjs-context/snippets/global/try-catch-async.snippet.js +0 -44
  331. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  332. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  333. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  334. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  335. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  336. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  337. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  338. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  339. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  340. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  341. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  342. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  343. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  344. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  345. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  346. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  347. package/lib/runjs-context/snippets/scene/jsblock/render-card.snippet.js +0 -45
  348. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  349. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  350. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  351. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  352. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  353. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  354. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  355. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  356. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  357. package/src/components/dnd/getMousePositionOnElement.ts +0 -115
  358. package/src/components/dnd/moveBlock.ts +0 -379
  359. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  360. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  361. package/src/runjs-context/index.ts +0 -20
  362. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  363. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  364. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  365. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  366. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  367. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  368. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  369. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  370. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  371. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  372. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  373. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  374. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  375. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  376. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  377. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  378. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  379. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  380. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  381. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  382. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  383. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  384. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  385. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  386. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  387. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -18,7 +18,8 @@ import type { Location } from 'react-router-dom';
18
18
  import { DataSourceManager } from './data-source';
19
19
  import { FlowEngine } from './flowEngine';
20
20
  import { JSRunner, JSRunnerOptions } from './JSRunner';
21
- import { FlowModel, ForkFlowModel } from './models';
21
+ import type { FlowModel } from './models/flowModel';
22
+ import type { ForkFlowModel } from './models/forkFlowModel';
22
23
  import { FlowResource, FlowSQLRepository } from './resources';
23
24
  import type { ActionDefinition, EventDefinition, ResourceType } from './types';
24
25
  import { JSONValue } from './utils/params-resolvers';
@@ -138,13 +139,11 @@ export declare class FlowContext {
138
139
  */
139
140
  getPropertyOptions(key: string): PropertyOptions | undefined;
140
141
  }
141
- export declare class FlowRunjsContext extends FlowContext {
142
- constructor(delegate: FlowContext);
143
- }
144
142
  declare class BaseFlowEngineContext extends FlowContext {
145
143
  router: Router;
146
144
  dataSourceManager: DataSourceManager;
147
145
  requireAsync: (url: string) => Promise<any>;
146
+ importAsync: (url: string) => Promise<any>;
148
147
  createJSRunner: (options?: JSRunnerOptions) => JSRunner;
149
148
  /**
150
149
  * @deprecated use `resolveJsonTemplate` instead
@@ -152,7 +151,6 @@ declare class BaseFlowEngineContext extends FlowContext {
152
151
  renderJson: (template: JSONValue) => Promise<any>;
153
152
  resolveJsonTemplate: (template: JSONValue) => Promise<any>;
154
153
  runjs: (code: string, variables?: Record<string, any>, options?: JSRunnerOptions) => Promise<any>;
155
- copyToClipboard: (text: string) => Promise<void>;
156
154
  getAction: <TModel extends FlowModel = FlowModel, TCtx extends FlowContext = FlowContext>(name: string) => ActionDefinition<TModel, TCtx> | undefined;
157
155
  getActions: <TModel extends FlowModel = FlowModel, TCtx extends FlowContext = FlowContext>() => Map<string, ActionDefinition<TModel, TCtx>>;
158
156
  getEvents: <TModel extends FlowModel = FlowModel, TCtx extends FlowContext = FlowContext>() => Map<string, EventDefinition<TModel, TCtx>>;
@@ -212,4 +210,34 @@ export declare class FlowRuntimeContext<TModel extends FlowModel = FlowModel, TM
212
210
  get mode(): TMode;
213
211
  }
214
212
  export type FlowSettingsContext<TModel extends FlowModel = FlowModel> = FlowRuntimeContext<TModel, 'settings'>;
213
+ export type RunJSDocCompletionDoc = {
214
+ insertText?: string;
215
+ };
216
+ export type RunJSDocPropertyDoc = string | {
217
+ description?: string;
218
+ detail?: string;
219
+ type?: string;
220
+ examples?: string[];
221
+ completion?: RunJSDocCompletionDoc;
222
+ properties?: Record<string, RunJSDocPropertyDoc>;
223
+ };
224
+ export type RunJSDocMethodDoc = string | {
225
+ description?: string;
226
+ detail?: string;
227
+ examples?: string[];
228
+ completion?: RunJSDocCompletionDoc;
229
+ };
230
+ export type RunJSDocMeta = {
231
+ label?: string;
232
+ properties?: Record<string, RunJSDocPropertyDoc>;
233
+ methods?: Record<string, RunJSDocMethodDoc>;
234
+ snippets?: Record<string, any>;
235
+ };
236
+ export declare class FlowRunJSContext extends FlowContext {
237
+ constructor(delegate: FlowContext);
238
+ static define(meta: RunJSDocMeta, options?: {
239
+ locale?: string;
240
+ }): void;
241
+ static getDoc(locale?: string): RunJSDocMeta;
242
+ }
215
243
  export {};
@@ -51,7 +51,7 @@ __export(flowContext_exports, {
51
51
  FlowEngineContext: () => FlowEngineContext,
52
52
  FlowForkModelContext: () => FlowForkModelContext,
53
53
  FlowModelContext: () => FlowModelContext,
54
- FlowRunjsContext: () => FlowRunjsContext,
54
+ FlowRunJSContext: () => FlowRunJSContext,
55
55
  FlowRuntimeContext: () => FlowRuntimeContext
56
56
  });
57
57
  module.exports = __toCommonJS(flowContext_exports);
@@ -60,18 +60,19 @@ var antd = __toESM(require("antd"));
60
60
  var import_lodash = __toESM(require("lodash"));
61
61
  var import_qs = __toESM(require("qs"));
62
62
  var import_react = __toESM(require("react"));
63
+ var ReactDOMClient = __toESM(require("react-dom/client"));
63
64
  var import_Acl = require("./acl/Acl");
64
65
  var import_ContextPathProxy = require("./ContextPathProxy");
65
66
  var import_data_source = require("./data-source");
66
67
  var import_flowEngine = require("./flowEngine");
67
68
  var import_flowI18n = require("./flowI18n");
68
69
  var import_JSRunner = require("./JSRunner");
69
- var import_models = require("./models");
70
70
  var import_resources = require("./resources");
71
71
  var import_utils = require("./utils");
72
72
  var import_exceptions = require("./utils/exceptions");
73
73
  var import_params_resolvers = require("./utils/params-resolvers");
74
74
  var import_serverContextParams = require("./utils/serverContextParams");
75
+ var import_registry = require("./runjs-context/registry");
75
76
  var _proxy, _FlowContext_instances, createChildNodes_fn, findMetaByPath_fn, findMetaInDelegatesDeep_fn, findMetaInProperty_fn, resolvePathInMeta_fn, resolvePathInMetaAsync_fn, buildParentTitles_fn, toTreeNode_fn;
76
77
  function isRecordRefLike(val) {
77
78
  return !!(val && typeof val === "object" && "collection" in val && "filterByTk" in val);
@@ -657,34 +658,6 @@ toTreeNode_fn = /* @__PURE__ */ __name(function(name, metaOrFactory, paths = [na
657
658
  }, "#toTreeNode");
658
659
  __name(_FlowContext, "FlowContext");
659
660
  let FlowContext = _FlowContext;
660
- const _FlowRunjsContext = class _FlowRunjsContext extends FlowContext {
661
- constructor(delegate) {
662
- super();
663
- this.addDelegate(delegate);
664
- this.defineProperty("React", { value: import_react.default });
665
- this.defineProperty("antd", { value: antd });
666
- this.defineMethod(
667
- "dispatchModelEvent",
668
- async (modelOrUid, eventName, inputArgs) => {
669
- var _a, _b;
670
- let model = null;
671
- if (typeof modelOrUid === "string") {
672
- model = await this.engine.loadModel({ uid: modelOrUid });
673
- } else if (modelOrUid instanceof import_models.FlowModel) {
674
- model = modelOrUid;
675
- }
676
- if (model) {
677
- model.context.addDelegate(this);
678
- model.dispatchEvent(eventName, { navigation: false, ...(_b = (_a = this.model) == null ? void 0 : _a["getInputArgs"]) == null ? void 0 : _b.call(_a), ...inputArgs });
679
- } else {
680
- this.message.error(this.t("Model with ID {{uid}} not found", { uid: modelOrUid }));
681
- }
682
- }
683
- );
684
- }
685
- };
686
- __name(_FlowRunjsContext, "FlowRunjsContext");
687
- let FlowRunjsContext = _FlowRunjsContext;
688
661
  const _BaseFlowEngineContext = class _BaseFlowEngineContext extends FlowContext {
689
662
  };
690
663
  __name(_BaseFlowEngineContext, "BaseFlowEngineContext");
@@ -724,7 +697,7 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
724
697
  });
725
698
  this.defineMethod("runjs", async (code, variables, options) => {
726
699
  const mergedGlobals = { ...(options == null ? void 0 : options.globals) || {}, ...variables || {} };
727
- const runner = this.createJSRunner({
700
+ const runner = await this.createJSRunner({
728
701
  ...options || {},
729
702
  globals: mergedGlobals
730
703
  });
@@ -930,45 +903,54 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
930
903
  );
931
904
  });
932
905
  });
933
- this.defineMethod("createJSRunner", function(options) {
934
- const runCtx = new FlowRunjsContext(this.createProxy());
935
- return new import_JSRunner.JSRunner({
936
- ...options,
937
- globals: {
938
- ctx: runCtx,
939
- window: (0, import_utils.createSafeWindow)(),
940
- document: (0, import_utils.createSafeDocument)(),
941
- ...options == null ? void 0 : options.globals
942
- }
943
- });
944
- });
945
- this.defineMethod("copyToClipboard", async (text) => {
946
- const content = String(text ?? "");
947
- try {
948
- if (typeof navigator !== "undefined" && navigator.clipboard && navigator.clipboard.writeText) {
949
- await navigator.clipboard.writeText(content);
950
- return;
951
- }
952
- } catch (e) {
906
+ this.defineMethod("importAsync", async (url) => {
907
+ if (!url || typeof url !== "string") {
908
+ throw new Error("invalid url");
953
909
  }
954
- return new Promise((resolve, reject) => {
910
+ const u = url.trim();
911
+ const g = globalThis;
912
+ g.__nocobaseImportAsyncCache = g.__nocobaseImportAsyncCache || /* @__PURE__ */ new Map();
913
+ const cache = g.__nocobaseImportAsyncCache;
914
+ if (cache.has(u)) return cache.get(u);
915
+ const nativeImport = /* @__PURE__ */ __name(() => import(
916
+ /* @vite-ignore */
917
+ /* webpackIgnore: true */
918
+ u
919
+ ), "nativeImport");
920
+ const evalImport = /* @__PURE__ */ __name(() => {
921
+ const importer = (0, eval)("u => import(u)");
922
+ return importer(u);
923
+ }, "evalImport");
924
+ const p = (async () => {
955
925
  try {
956
- const ta = document.createElement("textarea");
957
- ta.value = content;
958
- ta.setAttribute("readonly", "");
959
- ta.style.position = "fixed";
960
- ta.style.top = "-9999px";
961
- document.body.appendChild(ta);
962
- ta.focus();
963
- ta.select();
964
- const ok = document.execCommand("copy");
965
- document.body.removeChild(ta);
966
- if (ok) resolve();
967
- else reject(new Error("execCommand copy failed"));
926
+ return await nativeImport();
968
927
  } catch (err) {
969
- reject(err);
928
+ try {
929
+ return await evalImport();
930
+ } catch (err2) {
931
+ throw err2 || err;
932
+ }
970
933
  }
971
- });
934
+ })();
935
+ cache.set(u, p);
936
+ return p;
937
+ });
938
+ this.defineMethod("createJSRunner", async function(options) {
939
+ try {
940
+ const mod = await import("./runjs-context/setup");
941
+ if (typeof (mod == null ? void 0 : mod.setupRunJSContexts) === "function") await mod.setupRunJSContexts();
942
+ } catch (_2) {
943
+ }
944
+ const version = (options == null ? void 0 : options.version) || "v1";
945
+ const modelClass = (0, import_registry.getModelClassName)(this);
946
+ const Ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve(version, "*") || FlowRunJSContext;
947
+ let runCtx;
948
+ if (Ctor) {
949
+ runCtx = new Ctor(this);
950
+ }
951
+ const globals = { ctx: runCtx, ...(options == null ? void 0 : options.globals) || {} };
952
+ const { timeoutMs } = options || {};
953
+ return new import_JSRunner.JSRunner({ globals, timeoutMs });
972
954
  });
973
955
  this.defineMethod("buildServerContextParams", function(input) {
974
956
  return (0, import_serverContextParams.buildServerContextParams)(this, input);
@@ -1019,13 +1001,22 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
1019
1001
  context: this.createProxy()
1020
1002
  });
1021
1003
  });
1004
+ this.defineMethod(
1005
+ "useResource",
1006
+ function(className) {
1007
+ if (this.has("resource")) return;
1008
+ this.defineProperty("resource", {
1009
+ get: /* @__PURE__ */ __name(() => this.createResource(className), "get")
1010
+ });
1011
+ }
1012
+ );
1022
1013
  }
1023
1014
  };
1024
1015
  __name(_FlowEngineContext, "FlowEngineContext");
1025
1016
  let FlowEngineContext = _FlowEngineContext;
1026
1017
  const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1027
1018
  constructor(model) {
1028
- if (!(model instanceof import_models.FlowModel)) {
1019
+ if (!model || typeof model !== "object") {
1029
1020
  throw new Error("Invalid FlowModel instance");
1030
1021
  }
1031
1022
  super();
@@ -1034,7 +1025,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1034
1025
  this.engine.reactView.onRefReady(ref, cb, timeout);
1035
1026
  });
1036
1027
  this.defineMethod("runjs", async (code, variables, options) => {
1037
- const runner = this.createJSRunner({
1028
+ const runner = await this.createJSRunner({
1038
1029
  globals: variables,
1039
1030
  version: options == null ? void 0 : options.version
1040
1031
  });
@@ -1043,10 +1034,11 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1043
1034
  this.defineProperty("model", {
1044
1035
  value: model
1045
1036
  });
1037
+ const stableRef = (0, import_react.createRef)();
1046
1038
  this.defineProperty("ref", {
1047
1039
  get: /* @__PURE__ */ __name(() => {
1048
1040
  this.model["_refCreated"] = true;
1049
- return (0, import_react.createRef)();
1041
+ return stableRef;
1050
1042
  }, "get")
1051
1043
  });
1052
1044
  this.defineMethod("openView", async function(uid, options) {
@@ -1143,7 +1135,7 @@ __name(_FlowModelContext, "FlowModelContext");
1143
1135
  let FlowModelContext = _FlowModelContext;
1144
1136
  const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelContext {
1145
1137
  constructor(master, fork) {
1146
- if (!(master instanceof import_models.FlowModel)) {
1138
+ if (!master || typeof master !== "object") {
1147
1139
  throw new Error("Invalid FlowModel instance");
1148
1140
  }
1149
1141
  super();
@@ -1156,14 +1148,15 @@ const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelC
1156
1148
  this.defineProperty("model", {
1157
1149
  get: /* @__PURE__ */ __name(() => this.fork, "get")
1158
1150
  });
1151
+ const stableRef = (0, import_react.createRef)();
1159
1152
  this.defineProperty("ref", {
1160
1153
  get: /* @__PURE__ */ __name(() => {
1161
1154
  this.fork["_refCreated"] = true;
1162
- return (0, import_react.createRef)();
1155
+ return stableRef;
1163
1156
  }, "get")
1164
1157
  });
1165
1158
  this.defineMethod("runjs", async (code, variables, options) => {
1166
- const runner = this.createJSRunner({
1159
+ const runner = await this.createJSRunner({
1167
1160
  globals: variables,
1168
1161
  version: options == null ? void 0 : options.version
1169
1162
  });
@@ -1214,7 +1207,7 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
1214
1207
  this.engine.reactView.onRefReady(ref, cb, timeout);
1215
1208
  });
1216
1209
  this.defineMethod("runjs", async (code, variables, options) => {
1217
- const runner = this.createJSRunner({
1210
+ const runner = await this.createJSRunner({
1218
1211
  globals: variables,
1219
1212
  version: options == null ? void 0 : options.version
1220
1213
  });
@@ -1255,12 +1248,90 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
1255
1248
  };
1256
1249
  __name(_FlowRuntimeContext, "FlowRuntimeContext");
1257
1250
  let FlowRuntimeContext = _FlowRuntimeContext;
1251
+ const __runjsClassDefaultMeta = /* @__PURE__ */ new WeakMap();
1252
+ const __runjsClassLocaleMeta = /* @__PURE__ */ new WeakMap();
1253
+ const __runjsDocCache = /* @__PURE__ */ new WeakMap();
1254
+ function __runjsDeepMerge(base, patch) {
1255
+ if (patch === null) return void 0;
1256
+ if (Array.isArray(base) || Array.isArray(patch) || typeof base !== "object" || typeof patch !== "object") {
1257
+ return patch ?? base;
1258
+ }
1259
+ const out = { ...base };
1260
+ for (const k of Object.keys(patch)) {
1261
+ const v = __runjsDeepMerge(base == null ? void 0 : base[k], patch[k]);
1262
+ if (typeof v === "undefined") delete out[k];
1263
+ else out[k] = v;
1264
+ }
1265
+ return out;
1266
+ }
1267
+ __name(__runjsDeepMerge, "__runjsDeepMerge");
1268
+ const _FlowRunJSContext = class _FlowRunJSContext extends FlowContext {
1269
+ constructor(delegate) {
1270
+ super();
1271
+ this.addDelegate(delegate);
1272
+ this.defineProperty("React", { value: import_react.default });
1273
+ this.defineProperty("antd", { value: antd });
1274
+ const ReactDOMShim = {
1275
+ ...ReactDOMClient,
1276
+ createRoot: /* @__PURE__ */ __name((container, options) => {
1277
+ const realContainer = (container == null ? void 0 : container.__el) || container;
1278
+ return this.engine.reactView.createRoot(realContainer, options);
1279
+ }, "createRoot")
1280
+ };
1281
+ this.defineProperty("ReactDOM", { value: ReactDOMShim });
1282
+ }
1283
+ static define(meta, options) {
1284
+ const locale = options == null ? void 0 : options.locale;
1285
+ if (locale) {
1286
+ const map = __runjsClassLocaleMeta.get(this) || /* @__PURE__ */ new Map();
1287
+ const prev = map.get(locale) || {};
1288
+ map.set(locale, __runjsDeepMerge(prev, meta));
1289
+ __runjsClassLocaleMeta.set(this, map);
1290
+ } else {
1291
+ const prev = __runjsClassDefaultMeta.get(this) || {};
1292
+ __runjsClassDefaultMeta.set(this, __runjsDeepMerge(prev, meta));
1293
+ }
1294
+ __runjsDocCache.delete(this);
1295
+ }
1296
+ static getDoc(locale) {
1297
+ const self = this;
1298
+ let cacheForClass = __runjsDocCache.get(self);
1299
+ const cacheKey = String(locale || "default");
1300
+ if (cacheForClass && cacheForClass.has(cacheKey)) return cacheForClass.get(cacheKey);
1301
+ const chain = [];
1302
+ let cur = self;
1303
+ while (cur && cur.prototype) {
1304
+ chain.unshift(cur);
1305
+ cur = Object.getPrototypeOf(cur);
1306
+ }
1307
+ let merged = {};
1308
+ for (const cls of chain) {
1309
+ merged = __runjsDeepMerge(merged, __runjsClassDefaultMeta.get(cls) || {});
1310
+ }
1311
+ if (locale) {
1312
+ for (const cls of chain) {
1313
+ const lmap = __runjsClassLocaleMeta.get(cls);
1314
+ if (lmap && lmap.has(locale)) {
1315
+ merged = __runjsDeepMerge(merged, lmap.get(locale));
1316
+ }
1317
+ }
1318
+ }
1319
+ if (!cacheForClass) {
1320
+ cacheForClass = /* @__PURE__ */ new Map();
1321
+ __runjsDocCache.set(self, cacheForClass);
1322
+ }
1323
+ cacheForClass.set(cacheKey, merged);
1324
+ return merged;
1325
+ }
1326
+ };
1327
+ __name(_FlowRunJSContext, "FlowRunJSContext");
1328
+ let FlowRunJSContext = _FlowRunJSContext;
1258
1329
  // Annotate the CommonJS export names for ESM import in node:
1259
1330
  0 && (module.exports = {
1260
1331
  FlowContext,
1261
1332
  FlowEngineContext,
1262
1333
  FlowForkModelContext,
1263
1334
  FlowModelContext,
1264
- FlowRunjsContext,
1335
+ FlowRunJSContext,
1265
1336
  FlowRuntimeContext
1266
1337
  });
@@ -95,7 +95,7 @@ export declare class FlowEngine {
95
95
  */
96
96
  reactView: ReactView;
97
97
  /**
98
- * Flow executor that runs flows and auto-flows.
98
+ * Flow executor that runs event flows.
99
99
  */
100
100
  executor: FlowExecutor;
101
101
  /**
@@ -304,6 +304,13 @@ export declare class FlowEngine {
304
304
  * @returns {Promise<boolean>} Whether destroyed successfully
305
305
  */
306
306
  destroyModel(uid: string): Promise<boolean>;
307
+ /**
308
+ * Duplicate a model tree via repository API.
309
+ * Returns the duplicated model JSON (root with subModels) or null if not available.
310
+ * @param {string} uid UID of the model to duplicate
311
+ * @returns {Promise<any | null>} Duplicated model JSON or null
312
+ */
313
+ duplicateModel(uid: string): Promise<Record<string, any>>;
307
314
  /**
308
315
  * Replace a model instance with a new instance of a class.
309
316
  * @template T New model type
package/lib/flowEngine.js CHANGED
@@ -132,7 +132,7 @@ const _FlowEngine = class _FlowEngine {
132
132
  */
133
133
  __publicField(this, "reactView");
134
134
  /**
135
- * Flow executor that runs flows and auto-flows.
135
+ * Flow executor that runs event flows.
136
136
  */
137
137
  __publicField(this, "executor");
138
138
  this.reactView = new import_ReactView.ReactView(this);
@@ -629,6 +629,16 @@ const _FlowEngine = class _FlowEngine {
629
629
  }
630
630
  return this.removeModel(uid);
631
631
  }
632
+ /**
633
+ * Duplicate a model tree via repository API.
634
+ * Returns the duplicated model JSON (root with subModels) or null if not available.
635
+ * @param {string} uid UID of the model to duplicate
636
+ * @returns {Promise<any | null>} Duplicated model JSON or null
637
+ */
638
+ async duplicateModel(uid) {
639
+ if (!this.ensureModelRepository()) return null;
640
+ return this._modelRepository.duplicate(uid);
641
+ }
632
642
  /**
633
643
  * Replace a model instance with a new instance of a class.
634
644
  * @template T New model type
@@ -674,7 +684,7 @@ const _FlowEngine = class _FlowEngine {
674
684
  }
675
685
  if (currentParent) {
676
686
  currentParent.emitter.setPaused(false);
677
- currentParent.parent.invalidateAutoFlowCache(true);
687
+ currentParent.parent.invalidateFlowCache("beforeRender", true);
678
688
  (_a = currentParent.parent) == null ? void 0 : _a.rerender();
679
689
  currentParent.emitter.emit("onSubModelReplaced", { oldModel, newModel });
680
690
  }
@@ -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) || {},
@@ -602,6 +604,8 @@ const _FlowSettings = class _FlowSettings {
602
604
  zIndex: 5e3,
603
605
  // 允许透传其它 props(如 maskClosable、footer 等),但确保 content 由我们接管
604
606
  ...modeProps,
607
+ // 统一构造 settings 弹窗的 inputArgs(集合/记录/父导航/关联)
608
+ inputArgs: (0, import_utils.buildSettingsViewInputArgs)(model, modeProps == null ? void 0 : modeProps.inputArgs),
605
609
  content: /* @__PURE__ */ __name((currentView, viewCtx) => {
606
610
  viewCtx == null ? void 0 : viewCtx.defineMethod("getStepFormValues", (flowKey2, stepKey2) => {
607
611
  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
@@ -22,6 +22,11 @@ export * from './ElementProxy';
22
22
  export * from './flowContext';
23
23
  export * from './FlowContextProvider';
24
24
  export * from './JSRunner';
25
- export * from './runjs-context';
25
+ export { getRunJSDocFor, createJSRunnerWithVersion, getRunJSScenesForModel, getRunJSScenesForContext, } from './runjs-context/helpers';
26
+ export { RunJSContextRegistry, getModelClassName } from './runjs-context/registry';
27
+ export { setupRunJSContexts } from './runjs-context/setup';
28
+ export { getSnippetBody, listSnippetsForContext } from './runjs-context/snippets';
26
29
  export * from './views';
27
30
  export * from './FlowDefinition';
31
+ export { createViewScopedEngine } from './ViewScopedFlowEngine';
32
+ export { createBlockScopedEngine } from './BlockScopedFlowEngine';
package/lib/index.js CHANGED
@@ -27,7 +27,18 @@ 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
+ createBlockScopedEngine: () => import_BlockScopedFlowEngine.createBlockScopedEngine,
32
+ createJSRunnerWithVersion: () => import_helpers.createJSRunnerWithVersion,
33
+ createViewScopedEngine: () => import_ViewScopedFlowEngine.createViewScopedEngine,
34
+ getModelClassName: () => import_registry.getModelClassName,
35
+ getRunJSDocFor: () => import_helpers.getRunJSDocFor,
36
+ getRunJSScenesForContext: () => import_helpers.getRunJSScenesForContext,
37
+ getRunJSScenesForModel: () => import_helpers.getRunJSScenesForModel,
38
+ getSnippetBody: () => import_snippets.getSnippetBody,
39
+ listSnippetsForContext: () => import_snippets.listSnippetsForContext,
40
+ observer: () => import_reactive_react.observer,
41
+ setupRunJSContexts: () => import_setup.setupRunJSContexts
31
42
  });
32
43
  module.exports = __toCommonJS(src_exports);
33
44
  __reExport(src_exports, require("./types"), module.exports);
@@ -46,12 +57,28 @@ __reExport(src_exports, require("./ElementProxy"), module.exports);
46
57
  __reExport(src_exports, require("./flowContext"), module.exports);
47
58
  __reExport(src_exports, require("./FlowContextProvider"), module.exports);
48
59
  __reExport(src_exports, require("./JSRunner"), module.exports);
49
- __reExport(src_exports, require("./runjs-context"), module.exports);
60
+ var import_helpers = require("./runjs-context/helpers");
61
+ var import_registry = require("./runjs-context/registry");
62
+ var import_setup = require("./runjs-context/setup");
63
+ var import_snippets = require("./runjs-context/snippets");
50
64
  __reExport(src_exports, require("./views"), module.exports);
51
65
  __reExport(src_exports, require("./FlowDefinition"), module.exports);
66
+ var import_ViewScopedFlowEngine = require("./ViewScopedFlowEngine");
67
+ var import_BlockScopedFlowEngine = require("./BlockScopedFlowEngine");
52
68
  // Annotate the CommonJS export names for ESM import in node:
53
69
  0 && (module.exports = {
70
+ RunJSContextRegistry,
71
+ createBlockScopedEngine,
72
+ createJSRunnerWithVersion,
73
+ createViewScopedEngine,
74
+ getModelClassName,
75
+ getRunJSDocFor,
76
+ getRunJSScenesForContext,
77
+ getRunJSScenesForModel,
78
+ getSnippetBody,
79
+ listSnippetsForContext,
54
80
  observer,
81
+ setupRunJSContexts,
55
82
  ...require("./types"),
56
83
  ...require("./utils"),
57
84
  ...require("./resources"),
@@ -67,7 +94,6 @@ __reExport(src_exports, require("./FlowDefinition"), module.exports);
67
94
  ...require("./flowContext"),
68
95
  ...require("./FlowContextProvider"),
69
96
  ...require("./JSRunner"),
70
- ...require("./runjs-context"),
71
97
  ...require("./views"),
72
98
  ...require("./FlowDefinition")
73
99
  });
@@ -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;