@nocobase/flow-engine 2.0.0-alpha.3 → 2.0.0-alpha.30

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 (418) 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/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/independents/dropdown/FlowsDropdownButton.js +2 -2
  22. package/lib/components/settings/wrappers/contextual/DefaultSettingsIcon.js +17 -5
  23. package/lib/components/settings/wrappers/contextual/FlowsContextMenu.js +2 -2
  24. package/lib/components/settings/wrappers/contextual/StepSettingsDialog.js +7 -1
  25. package/lib/components/variables/VariableInput.js +16 -2
  26. package/lib/components/variables/VariableTag.js +43 -2
  27. package/lib/components/variables/types.d.ts +2 -0
  28. package/lib/data-source/index.d.ts +12 -4
  29. package/lib/data-source/index.js +19 -13
  30. package/lib/data-source/sortCollectionsByInherits.d.ts +10 -0
  31. package/lib/data-source/sortCollectionsByInherits.js +71 -0
  32. package/lib/executor/FlowExecutor.d.ts +4 -5
  33. package/lib/executor/FlowExecutor.js +135 -100
  34. package/lib/flowContext.d.ts +33 -5
  35. package/lib/flowContext.js +193 -76
  36. package/lib/flowEngine.d.ts +8 -1
  37. package/lib/flowEngine.js +18 -6
  38. package/lib/flowSettings.d.ts +2 -1
  39. package/lib/flowSettings.js +12 -8
  40. package/lib/hooks/useApplyAutoFlows.js +2 -1
  41. package/lib/index.d.ts +7 -1
  42. package/lib/index.js +32 -3
  43. package/lib/locale/en-US.json +4 -2
  44. package/lib/locale/index.d.ts +4 -0
  45. package/lib/locale/zh-CN.json +4 -2
  46. package/lib/models/CollectionFieldModel.d.ts +2 -0
  47. package/lib/models/CollectionFieldModel.js +43 -3
  48. package/lib/models/flowModel.d.ts +28 -29
  49. package/lib/models/flowModel.js +114 -92
  50. package/lib/models/forkFlowModel.d.ts +4 -4
  51. package/lib/models/forkFlowModel.js +32 -8
  52. package/lib/provider.d.ts +3 -1
  53. package/lib/provider.js +7 -5
  54. package/lib/resources/multiRecordResource.js +2 -0
  55. package/lib/resources/singleRecordResource.js +1 -0
  56. package/lib/resources/sqlResource.d.ts +1 -0
  57. package/lib/resources/sqlResource.js +20 -24
  58. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.d.ts +1 -6
  59. package/lib/runjs-context/contexts/FormJSFieldItemRunJSContext.js +27 -20
  60. package/lib/runjs-context/contexts/JSBlockRunJSContext.d.ts +1 -6
  61. package/lib/runjs-context/contexts/JSBlockRunJSContext.js +46 -33
  62. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.d.ts +1 -2
  63. package/lib/runjs-context/contexts/JSCollectionActionRunJSContext.js +14 -15
  64. package/lib/runjs-context/contexts/{LinkageRunJSContext.d.ts → JSColumnRunJSContext.d.ts} +6 -3
  65. package/lib/runjs-context/contexts/JSColumnRunJSContext.js +78 -0
  66. package/lib/runjs-context/contexts/JSFieldRunJSContext.d.ts +1 -6
  67. package/lib/runjs-context/contexts/JSFieldRunJSContext.js +28 -24
  68. package/lib/runjs-context/contexts/JSItemRunJSContext.d.ts +1 -6
  69. package/lib/runjs-context/contexts/JSItemRunJSContext.js +24 -20
  70. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.d.ts +1 -2
  71. package/lib/runjs-context/contexts/JSRecordActionRunJSContext.js +16 -17
  72. package/lib/runjs-context/contexts/base.d.ts +9 -0
  73. package/lib/runjs-context/contexts/base.js +183 -0
  74. package/lib/runjs-context/helpers.d.ts +5 -2
  75. package/lib/runjs-context/helpers.js +36 -27
  76. package/lib/runjs-context/registry.d.ts +7 -4
  77. package/lib/runjs-context/registry.js +10 -42
  78. package/lib/runjs-context/setup.d.ts +9 -0
  79. package/lib/runjs-context/setup.js +82 -0
  80. package/lib/runjs-context/snippets/global/{copy-record-json.snippet.js → api-request.snippet.js} +25 -10
  81. package/lib/runjs-context/snippets/global/clipboard-copy-text.snippet.js +61 -0
  82. package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.js → import-esm.snippet.js} +26 -12
  83. package/lib/runjs-context/snippets/global/message-error.snippet.js +6 -0
  84. package/lib/runjs-context/snippets/global/message-success.snippet.js +6 -0
  85. package/lib/runjs-context/snippets/global/notification-open.snippet.d.ts +3 -8
  86. package/lib/runjs-context/snippets/global/notification-open.snippet.js +8 -1
  87. package/lib/runjs-context/snippets/global/open-view-dialog.snippet.js +10 -3
  88. package/lib/runjs-context/snippets/global/open-view-drawer.snippet.js +10 -3
  89. package/lib/runjs-context/snippets/global/query-selector.snippet.js +53 -0
  90. package/lib/runjs-context/snippets/global/require-amd.snippet.d.ts +11 -0
  91. package/lib/runjs-context/snippets/global/{requireAsync.snippet.js → require-amd.snippet.js} +16 -13
  92. package/lib/runjs-context/snippets/global/window-open.snippet.d.ts +3 -8
  93. package/lib/runjs-context/snippets/global/window-open.snippet.js +8 -1
  94. package/lib/runjs-context/snippets/index.d.ts +14 -3
  95. package/lib/runjs-context/snippets/index.js +161 -40
  96. package/lib/runjs-context/snippets/scene/block/add-event-listener.snippet.d.ts +11 -0
  97. package/lib/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.js +11 -2
  98. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.d.ts +11 -0
  99. package/lib/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.js +64 -0
  100. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.d.ts +11 -0
  101. package/lib/runjs-context/snippets/scene/block/chartjs-bar.snippet.js +99 -0
  102. package/lib/runjs-context/snippets/{libs → scene/block}/echarts-init.snippet.js +24 -7
  103. package/lib/runjs-context/snippets/scene/block/render-button-handler.snippet.d.ts +11 -0
  104. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-button-handler.snippet.js +17 -9
  105. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.d.ts +11 -0
  106. package/lib/runjs-context/snippets/scene/block/render-iframe.snippet.js +57 -0
  107. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.d.ts +11 -0
  108. package/lib/runjs-context/snippets/scene/block/render-info-card.snippet.js +71 -0
  109. package/lib/runjs-context/snippets/scene/block/render-react-jsx.snippet.d.ts +11 -0
  110. package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.js → block/render-react-jsx.snippet.js} +26 -13
  111. package/lib/runjs-context/snippets/scene/block/render-react.snippet.d.ts +11 -0
  112. package/lib/runjs-context/snippets/scene/{jsblock → block}/render-react.snippet.js +18 -17
  113. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.d.ts +11 -0
  114. package/lib/runjs-context/snippets/scene/block/render-statistics.snippet.js +95 -0
  115. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.d.ts +11 -0
  116. package/lib/runjs-context/snippets/scene/block/render-timeline.snippet.js +84 -0
  117. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.d.ts +11 -0
  118. package/lib/runjs-context/snippets/scene/block/resource-example.snippet.js +60 -0
  119. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.d.ts +11 -0
  120. package/lib/runjs-context/snippets/scene/block/three-users-orbit.snippet.js +283 -0
  121. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.d.ts +11 -0
  122. package/lib/runjs-context/snippets/scene/block/vue-component.snippet.js +124 -0
  123. package/lib/runjs-context/snippets/scene/detail/color-by-value.snippet.d.ts +11 -0
  124. package/lib/runjs-context/snippets/scene/{jsfield → detail}/color-by-value.snippet.js +13 -3
  125. package/lib/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.d.ts +11 -0
  126. package/lib/runjs-context/snippets/{global → scene/detail}/copy-to-clipboard.snippet.js +28 -6
  127. package/lib/runjs-context/snippets/scene/detail/format-number.snippet.d.ts +11 -0
  128. package/lib/runjs-context/snippets/scene/{jsfield → detail}/format-number.snippet.js +13 -3
  129. package/lib/runjs-context/snippets/scene/detail/innerHTML-value.snippet.d.ts +11 -0
  130. package/lib/runjs-context/snippets/scene/{jsfield → detail}/innerHTML-value.snippet.js +13 -3
  131. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.d.ts +11 -0
  132. package/lib/runjs-context/snippets/scene/detail/percentage-bar.snippet.js +82 -0
  133. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.d.ts +11 -0
  134. package/lib/runjs-context/snippets/scene/detail/relative-time.snippet.js +80 -0
  135. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.d.ts +11 -0
  136. package/lib/runjs-context/snippets/scene/detail/status-tag.snippet.js +74 -0
  137. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.d.ts +11 -0
  138. package/lib/runjs-context/snippets/scene/form/calculate-total.snippet.js +63 -0
  139. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.d.ts +11 -0
  140. package/lib/runjs-context/snippets/scene/form/cascade-select.snippet.js +81 -0
  141. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.d.ts +11 -0
  142. package/lib/runjs-context/snippets/scene/form/conditional-required.snippet.js +64 -0
  143. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.d.ts +11 -0
  144. package/lib/runjs-context/snippets/scene/form/copy-field-values.snippet.js +74 -0
  145. package/lib/runjs-context/snippets/scene/form/render-basic.snippet.d.ts +11 -0
  146. package/lib/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.js +11 -2
  147. package/lib/runjs-context/snippets/scene/form/set-disabled.snippet.d.ts +11 -0
  148. package/lib/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.js +12 -3
  149. package/lib/runjs-context/snippets/scene/form/set-field-value.snippet.d.ts +11 -0
  150. package/lib/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.js +12 -3
  151. package/lib/runjs-context/snippets/scene/form/set-required.snippet.d.ts +11 -0
  152. package/lib/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.js +12 -3
  153. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.d.ts +11 -0
  154. package/lib/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.js +67 -0
  155. package/lib/runjs-context/snippets/scene/form/toggle-visible.snippet.d.ts +11 -0
  156. package/lib/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.js +12 -3
  157. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.d.ts +11 -0
  158. package/lib/runjs-context/snippets/scene/table/cell-open-dialog.snippet.js +64 -0
  159. package/lib/runjs-context/snippets/scene/table/collection-selected-count.snippet.d.ts +11 -0
  160. package/lib/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.js +11 -2
  161. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.d.ts +11 -0
  162. package/lib/runjs-context/snippets/scene/table/concat-fields.snippet.js +79 -0
  163. package/lib/runjs-context/snippets/scene/table/destroy-selected.snippet.d.ts +11 -0
  164. package/lib/runjs-context/snippets/{global/log-json-record.snippet.js → scene/table/destroy-selected.snippet.js} +24 -11
  165. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.d.ts +11 -0
  166. package/lib/runjs-context/snippets/scene/table/export-selected-json.snippet.js +64 -0
  167. package/lib/runjs-context/snippets/scene/table/iterate-selected-rows.snippet.d.ts +11 -0
  168. package/lib/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.js +11 -2
  169. package/lib/runjs-context/snippets/types.d.ts +9 -1
  170. package/lib/types.d.ts +28 -3
  171. package/lib/types.js +4 -3
  172. package/lib/utils/buildSettingsViewInputArgs.d.ts +19 -0
  173. package/lib/utils/buildSettingsViewInputArgs.js +75 -0
  174. package/lib/utils/createEphemeralContext.d.ts +13 -0
  175. package/lib/utils/createEphemeralContext.js +140 -0
  176. package/lib/utils/index.d.ts +3 -2
  177. package/lib/utils/index.js +5 -2
  178. package/lib/utils/jsxTransform.d.ts +15 -0
  179. package/lib/utils/jsxTransform.js +68 -0
  180. package/lib/utils/params-resolvers.js +3 -3
  181. package/lib/utils/safeGlobals.d.ts +5 -3
  182. package/lib/utils/safeGlobals.js +40 -0
  183. package/lib/utils/schema-utils.js +2 -2
  184. package/lib/utils/serverContextParams.d.ts +1 -0
  185. package/lib/utils/variablesParams.d.ts +9 -5
  186. package/lib/utils/variablesParams.js +47 -36
  187. package/lib/views/PageComponent.js +2 -1
  188. package/lib/views/createViewMeta.d.ts +29 -1
  189. package/lib/views/createViewMeta.js +338 -72
  190. package/lib/views/index.d.ts +1 -0
  191. package/lib/views/index.js +3 -0
  192. package/lib/views/useDialog.d.ts +8 -8
  193. package/lib/views/useDialog.js +8 -7
  194. package/lib/views/useDrawer.d.ts +8 -8
  195. package/lib/views/useDrawer.js +40 -26
  196. package/lib/views/usePage.d.ts +8 -8
  197. package/lib/views/usePage.js +8 -7
  198. package/package.json +5 -3
  199. package/src/BlockScopedFlowEngine.ts +86 -0
  200. package/src/FlowContextProvider.tsx +4 -2
  201. package/src/JSRunner.ts +3 -0
  202. package/src/ViewScopedFlowEngine.ts +1 -1
  203. package/src/__tests__/JSRunner.test.ts +62 -53
  204. package/src/__tests__/blockScopedFlowEngine.test.ts +154 -0
  205. package/src/__tests__/createViewMeta.popup.test.ts +132 -0
  206. package/src/__tests__/flow-engine.test.ts +3 -0
  207. package/src/__tests__/flowContextCreateJSRunner.test.ts +163 -0
  208. package/src/__tests__/flowEngine.saveModel.test.ts +4 -0
  209. package/src/__tests__/flowRunJSContextDefine.test.ts +508 -0
  210. package/src/__tests__/globalFlowRegistry.test.ts +1 -1
  211. package/src/__tests__/runjsContext.test.ts +216 -35
  212. package/src/__tests__/runjsContextImplementations.test.ts +217 -0
  213. package/src/__tests__/runjsContextRuntime.test.ts +269 -0
  214. package/src/__tests__/runjsEdgeCases.test.ts +281 -0
  215. package/src/__tests__/runjsLocales.test.ts +36 -0
  216. package/src/__tests__/runjsRuntimeFeatures.test.ts +449 -0
  217. package/src/__tests__/runjsSnippets.test.ts +140 -0
  218. package/src/__tests__/viewScopedFlowEngine.test.ts +3 -3
  219. package/src/components/DynamicFlowsEditor.tsx +3 -4
  220. package/src/components/FieldModelRenderer.tsx +16 -5
  221. package/src/components/FieldSkeleton.tsx +27 -0
  222. package/src/components/FlowContextSelector.tsx +6 -2
  223. package/src/components/FlowModelRenderer.tsx +30 -78
  224. package/src/components/FormItem.tsx +8 -1
  225. package/src/components/__tests__/flow-model-render-error-fallback.test.tsx +5 -5
  226. package/src/components/__tests__/gridDragPlanner.test.ts +494 -0
  227. package/src/components/dnd/README.md +149 -0
  228. package/src/components/dnd/findModelUidPosition.ts +26 -0
  229. package/src/components/dnd/gridDragPlanner.ts +659 -0
  230. package/src/components/dnd/index.tsx +3 -3
  231. package/src/components/settings/independents/dropdown/FlowsDropdownButton.tsx +1 -1
  232. package/src/components/settings/wrappers/contextual/DefaultSettingsIcon.tsx +17 -4
  233. package/src/components/settings/wrappers/contextual/FlowsContextMenu.tsx +1 -1
  234. package/src/components/settings/wrappers/contextual/StepSettingsDialog.tsx +14 -1
  235. package/src/components/settings/wrappers/contextual/__tests__/DefaultSettingsIcon.test.tsx +424 -0
  236. package/src/components/subModel/__tests__/AddSubModelButton.test.tsx +5 -7
  237. package/src/components/variables/VariableInput.tsx +22 -2
  238. package/src/components/variables/VariableTag.tsx +54 -2
  239. package/src/components/variables/types.ts +2 -0
  240. package/src/data-source/__tests__/sortCollectionsByInherits.test.ts +125 -0
  241. package/src/data-source/index.ts +17 -11
  242. package/src/data-source/sortCollectionsByInherits.ts +61 -0
  243. package/src/executor/FlowExecutor.ts +178 -121
  244. package/src/executor/__tests__/ctx-defs-injection.test.ts +197 -0
  245. package/src/executor/__tests__/flowExecutor.test.ts +151 -5
  246. package/src/flowContext.ts +266 -97
  247. package/src/flowEngine.ts +21 -6
  248. package/src/flowSettings.ts +9 -4
  249. package/src/hooks/useApplyAutoFlows.ts +3 -1
  250. package/src/index.ts +12 -1
  251. package/src/locale/en-US.json +4 -2
  252. package/src/locale/zh-CN.json +4 -2
  253. package/src/models/CollectionFieldModel.tsx +43 -4
  254. package/src/models/__tests__/flowModel.getFlows.sort.test.ts +4 -4
  255. package/src/models/__tests__/flowModel.test.ts +234 -111
  256. package/src/models/__tests__/forkFlowModel.test.ts +22 -7
  257. package/src/models/flowModel.tsx +149 -125
  258. package/src/models/forkFlowModel.ts +41 -8
  259. package/src/provider.tsx +10 -7
  260. package/src/resources/multiRecordResource.ts +2 -0
  261. package/src/resources/singleRecordResource.ts +1 -0
  262. package/src/resources/sqlResource.ts +20 -25
  263. package/src/runjs-context/contexts/FormJSFieldItemRunJSContext.ts +28 -21
  264. package/src/runjs-context/contexts/JSBlockRunJSContext.ts +46 -34
  265. package/src/runjs-context/contexts/JSCollectionActionRunJSContext.ts +15 -16
  266. package/src/runjs-context/contexts/JSColumnRunJSContext.ts +58 -0
  267. package/src/runjs-context/contexts/JSFieldRunJSContext.ts +30 -25
  268. package/src/runjs-context/contexts/JSItemRunJSContext.ts +25 -21
  269. package/src/runjs-context/contexts/JSRecordActionRunJSContext.ts +17 -18
  270. package/src/runjs-context/contexts/base.ts +171 -0
  271. package/src/runjs-context/helpers.ts +32 -30
  272. package/src/runjs-context/registry.ts +16 -47
  273. package/src/runjs-context/setup.ts +51 -0
  274. package/src/runjs-context/snippets/global/api-request.snippet.ts +38 -0
  275. package/src/runjs-context/snippets/global/clipboard-copy-text.snippet.ts +42 -0
  276. package/src/runjs-context/snippets/global/import-esm.snippet.ts +39 -0
  277. package/src/runjs-context/snippets/global/message-error.snippet.ts +6 -0
  278. package/src/runjs-context/snippets/global/message-success.snippet.ts +6 -0
  279. package/src/runjs-context/snippets/global/notification-open.snippet.ts +11 -1
  280. package/src/runjs-context/snippets/global/open-view-dialog.snippet.ts +10 -3
  281. package/src/runjs-context/snippets/global/open-view-drawer.snippet.ts +10 -3
  282. package/src/runjs-context/snippets/global/query-selector.snippet.ts +34 -0
  283. package/src/runjs-context/snippets/global/require-amd.snippet.ts +30 -0
  284. package/src/runjs-context/snippets/global/window-open.snippet.ts +11 -1
  285. package/src/runjs-context/snippets/index.ts +177 -39
  286. package/src/runjs-context/snippets/scene/{jsblock → block}/add-event-listener.snippet.ts +14 -2
  287. package/src/runjs-context/snippets/scene/block/api-fetch-render-list.snippet.ts +45 -0
  288. package/src/runjs-context/snippets/scene/block/chartjs-bar.snippet.ts +80 -0
  289. package/src/runjs-context/snippets/scene/block/echarts-init.snippet.ts +44 -0
  290. package/src/runjs-context/snippets/scene/block/render-button-handler.snippet.ts +35 -0
  291. package/src/runjs-context/snippets/scene/block/render-iframe.snippet.ts +38 -0
  292. package/src/runjs-context/snippets/scene/block/render-info-card.snippet.ts +52 -0
  293. package/src/runjs-context/snippets/scene/block/render-react-jsx.snippet.ts +39 -0
  294. package/src/runjs-context/snippets/scene/block/render-react.snippet.ts +38 -0
  295. package/src/runjs-context/snippets/scene/block/render-statistics.snippet.ts +76 -0
  296. package/src/runjs-context/snippets/scene/block/render-timeline.snippet.ts +65 -0
  297. package/src/runjs-context/snippets/scene/block/resource-example.snippet.ts +46 -0
  298. package/src/runjs-context/snippets/scene/block/three-users-orbit.snippet.ts +264 -0
  299. package/src/runjs-context/snippets/scene/block/vue-component.snippet.ts +105 -0
  300. package/src/runjs-context/snippets/scene/detail/color-by-value.snippet.ts +33 -0
  301. package/src/runjs-context/snippets/scene/detail/copy-to-clipboard.snippet.ts +45 -0
  302. package/src/runjs-context/snippets/scene/detail/format-number.snippet.ts +32 -0
  303. package/src/runjs-context/snippets/scene/detail/innerHTML-value.snippet.ts +31 -0
  304. package/src/runjs-context/snippets/scene/detail/percentage-bar.snippet.ts +63 -0
  305. package/src/runjs-context/snippets/scene/detail/relative-time.snippet.ts +61 -0
  306. package/src/runjs-context/snippets/scene/detail/status-tag.snippet.ts +55 -0
  307. package/src/runjs-context/snippets/scene/form/calculate-total.snippet.ts +44 -0
  308. package/src/runjs-context/snippets/scene/form/cascade-select.snippet.ts +62 -0
  309. package/src/runjs-context/snippets/scene/form/conditional-required.snippet.ts +45 -0
  310. package/src/runjs-context/snippets/scene/form/copy-field-values.snippet.ts +55 -0
  311. package/src/runjs-context/snippets/scene/{jsitem → form}/render-basic.snippet.ts +14 -2
  312. package/src/runjs-context/snippets/scene/{linkage → form}/set-disabled.snippet.ts +15 -3
  313. package/src/runjs-context/snippets/scene/{linkage → form}/set-field-value.snippet.ts +15 -3
  314. package/src/runjs-context/snippets/scene/{linkage → form}/set-required.snippet.ts +15 -3
  315. package/src/runjs-context/snippets/scene/form/toggle-multiple-fields.snippet.ts +48 -0
  316. package/src/runjs-context/snippets/scene/{linkage → form}/toggle-visible.snippet.ts +15 -3
  317. package/src/runjs-context/snippets/scene/table/cell-open-dialog.snippet.ts +45 -0
  318. package/src/runjs-context/snippets/scene/{actions → table}/collection-selected-count.snippet.ts +14 -2
  319. package/src/runjs-context/snippets/scene/table/concat-fields.snippet.ts +60 -0
  320. package/src/runjs-context/snippets/scene/table/destroy-selected.snippet.ts +36 -0
  321. package/src/runjs-context/snippets/scene/table/export-selected-json.snippet.ts +45 -0
  322. package/src/runjs-context/snippets/scene/{actions → table}/iterate-selected-rows.snippet.ts +14 -2
  323. package/src/runjs-context/snippets/types.ts +5 -1
  324. package/src/types.ts +34 -0
  325. package/src/utils/__tests__/jsxTransform.test.ts +38 -0
  326. package/src/utils/__tests__/safeGlobals.test.ts +22 -1
  327. package/src/utils/buildSettingsViewInputArgs.ts +72 -0
  328. package/src/utils/createEphemeralContext.ts +142 -0
  329. package/src/utils/index.ts +2 -2
  330. package/src/utils/jsxTransform.ts +39 -0
  331. package/src/utils/params-resolvers.ts +2 -2
  332. package/src/utils/safeGlobals.ts +49 -3
  333. package/src/utils/schema-utils.ts +1 -1
  334. package/src/utils/serverContextParams.ts +1 -0
  335. package/src/utils/variablesParams.ts +50 -38
  336. package/src/views/PageComponent.tsx +1 -1
  337. package/src/views/createViewMeta.ts +393 -70
  338. package/src/views/index.tsx +1 -0
  339. package/src/views/useDialog.tsx +12 -10
  340. package/src/views/useDrawer.tsx +60 -36
  341. package/src/views/usePage.tsx +13 -10
  342. package/lib/components/dnd/getMousePositionOnElement.d.ts +0 -50
  343. package/lib/components/dnd/getMousePositionOnElement.js +0 -95
  344. package/lib/components/dnd/moveBlock.d.ts +0 -33
  345. package/lib/components/dnd/moveBlock.js +0 -302
  346. package/lib/runjs-context/contexts/FlowRunJSContext.d.ts +0 -38
  347. package/lib/runjs-context/contexts/FlowRunJSContext.js +0 -217
  348. package/lib/runjs-context/contexts/LinkageRunJSContext.js +0 -62
  349. package/lib/runjs-context/index.d.ts +0 -19
  350. package/lib/runjs-context/index.js +0 -57
  351. package/lib/runjs-context/snippets/global/api-request-get.snippet.d.ts +0 -16
  352. package/lib/runjs-context/snippets/global/api-request-get.snippet.js +0 -42
  353. package/lib/runjs-context/snippets/global/api-request-post.snippet.d.ts +0 -16
  354. package/lib/runjs-context/snippets/global/api-request-post.snippet.js +0 -42
  355. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.d.ts +0 -16
  356. package/lib/runjs-context/snippets/global/console-log-ctx.snippet.js +0 -41
  357. package/lib/runjs-context/snippets/global/sleep.snippet.d.ts +0 -16
  358. package/lib/runjs-context/snippets/global/sleep.snippet.js +0 -43
  359. package/lib/runjs-context/snippets/global/try-catch-async.snippet.d.ts +0 -16
  360. package/lib/runjs-context/snippets/global/try-catch-async.snippet.js +0 -44
  361. package/lib/runjs-context/snippets/libs/echarts-init.snippet.d.ts +0 -15
  362. package/lib/runjs-context/snippets/scene/actions/collection-selected-count.snippet.d.ts +0 -15
  363. package/lib/runjs-context/snippets/scene/actions/iterate-selected-rows.snippet.d.ts +0 -15
  364. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.d.ts +0 -15
  365. package/lib/runjs-context/snippets/scene/actions/record-id-message.snippet.js +0 -43
  366. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.d.ts +0 -15
  367. package/lib/runjs-context/snippets/scene/actions/run-action-basic.snippet.js +0 -40
  368. package/lib/runjs-context/snippets/scene/jsblock/add-event-listener.snippet.d.ts +0 -15
  369. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.d.ts +0 -15
  370. package/lib/runjs-context/snippets/scene/jsblock/append-style.snippet.js +0 -42
  371. package/lib/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.d.ts +0 -15
  372. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.d.ts +0 -15
  373. package/lib/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.js +0 -41
  374. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.d.ts +0 -15
  375. package/lib/runjs-context/snippets/scene/jsblock/render-basic.snippet.js +0 -41
  376. package/lib/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.d.ts +0 -15
  377. package/lib/runjs-context/snippets/scene/jsblock/render-react.snippet.d.ts +0 -15
  378. package/lib/runjs-context/snippets/scene/jsfield/color-by-value.snippet.d.ts +0 -15
  379. package/lib/runjs-context/snippets/scene/jsfield/format-number.snippet.d.ts +0 -15
  380. package/lib/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.d.ts +0 -15
  381. package/lib/runjs-context/snippets/scene/jsitem/render-basic.snippet.d.ts +0 -15
  382. package/lib/runjs-context/snippets/scene/linkage/set-disabled.snippet.d.ts +0 -15
  383. package/lib/runjs-context/snippets/scene/linkage/set-field-value.snippet.d.ts +0 -15
  384. package/lib/runjs-context/snippets/scene/linkage/set-required.snippet.d.ts +0 -15
  385. package/lib/runjs-context/snippets/scene/linkage/toggle-visible.snippet.d.ts +0 -15
  386. package/src/components/dnd/getMousePositionOnElement.ts +0 -115
  387. package/src/components/dnd/moveBlock.ts +0 -379
  388. package/src/runjs-context/contexts/FlowRunJSContext.ts +0 -190
  389. package/src/runjs-context/contexts/LinkageRunJSContext.ts +0 -35
  390. package/src/runjs-context/index.ts +0 -20
  391. package/src/runjs-context/snippets/global/api-request-get.snippet.ts +0 -20
  392. package/src/runjs-context/snippets/global/api-request-post.snippet.ts +0 -20
  393. package/src/runjs-context/snippets/global/console-log-ctx.snippet.ts +0 -19
  394. package/src/runjs-context/snippets/global/copy-record-json.snippet.ts +0 -21
  395. package/src/runjs-context/snippets/global/copy-to-clipboard.snippet.ts +0 -21
  396. package/src/runjs-context/snippets/global/log-json-record.snippet.ts +0 -21
  397. package/src/runjs-context/snippets/global/requireAsync.snippet.ts +0 -24
  398. package/src/runjs-context/snippets/global/sleep.snippet.ts +0 -21
  399. package/src/runjs-context/snippets/global/try-catch-async.snippet.ts +0 -22
  400. package/src/runjs-context/snippets/global/view-navigation-push.snippet.ts +0 -23
  401. package/src/runjs-context/snippets/libs/echarts-init.snippet.ts +0 -24
  402. package/src/runjs-context/snippets/scene/actions/record-id-message.snippet.ts +0 -21
  403. package/src/runjs-context/snippets/scene/actions/run-action-basic.snippet.ts +0 -18
  404. package/src/runjs-context/snippets/scene/jsblock/append-style.snippet.ts +0 -20
  405. package/src/runjs-context/snippets/scene/jsblock/jsx-mount.snippet.ts +0 -24
  406. package/src/runjs-context/snippets/scene/jsblock/jsx-unmount.snippet.ts +0 -19
  407. package/src/runjs-context/snippets/scene/jsblock/render-basic.snippet.ts +0 -24
  408. package/src/runjs-context/snippets/scene/jsblock/render-button-handler.snippet.ts +0 -24
  409. package/src/runjs-context/snippets/scene/jsblock/render-card.snippet.ts +0 -30
  410. package/src/runjs-context/snippets/scene/jsblock/render-react.snippet.ts +0 -34
  411. package/src/runjs-context/snippets/scene/jsfield/color-by-value.snippet.ts +0 -20
  412. package/src/runjs-context/snippets/scene/jsfield/format-number.snippet.ts +0 -19
  413. package/src/runjs-context/snippets/scene/jsfield/innerHTML-value.snippet.ts +0 -18
  414. /package/lib/runjs-context/snippets/global/{copy-record-json.snippet.d.ts → api-request.snippet.d.ts} +0 -0
  415. /package/lib/runjs-context/snippets/global/{copy-to-clipboard.snippet.d.ts → clipboard-copy-text.snippet.d.ts} +0 -0
  416. /package/lib/runjs-context/snippets/global/{log-json-record.snippet.d.ts → import-esm.snippet.d.ts} +0 -0
  417. /package/lib/runjs-context/snippets/global/{view-navigation-push.snippet.d.ts → query-selector.snippet.d.ts} +0 -0
  418. /package/lib/runjs-context/snippets/scene/{jsblock/render-card.snippet.d.ts → block/echarts-init.snippet.d.ts} +0 -0
@@ -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,21 @@ 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"));
64
+ var import_ElementProxy = require("./ElementProxy");
63
65
  var import_Acl = require("./acl/Acl");
64
66
  var import_ContextPathProxy = require("./ContextPathProxy");
65
67
  var import_data_source = require("./data-source");
66
68
  var import_flowEngine = require("./flowEngine");
67
69
  var import_flowI18n = require("./flowI18n");
68
70
  var import_JSRunner = require("./JSRunner");
69
- var import_models = require("./models");
70
71
  var import_resources = require("./resources");
71
72
  var import_utils = require("./utils");
72
73
  var import_exceptions = require("./utils/exceptions");
73
74
  var import_params_resolvers = require("./utils/params-resolvers");
74
75
  var import_serverContextParams = require("./utils/serverContextParams");
76
+ var import_registry = require("./runjs-context/registry");
77
+ var import_createEphemeralContext = require("./utils/createEphemeralContext");
75
78
  var _proxy, _FlowContext_instances, createChildNodes_fn, findMetaByPath_fn, findMetaInDelegatesDeep_fn, findMetaInProperty_fn, resolvePathInMeta_fn, resolvePathInMetaAsync_fn, buildParentTitles_fn, toTreeNode_fn;
76
79
  function isRecordRefLike(val) {
77
80
  return !!(val && typeof val === "object" && "collection" in val && "filterByTk" in val);
@@ -657,34 +660,6 @@ toTreeNode_fn = /* @__PURE__ */ __name(function(name, metaOrFactory, paths = [na
657
660
  }, "#toTreeNode");
658
661
  __name(_FlowContext, "FlowContext");
659
662
  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
663
  const _BaseFlowEngineContext = class _BaseFlowEngineContext extends FlowContext {
689
664
  };
690
665
  __name(_BaseFlowEngineContext, "BaseFlowEngineContext");
@@ -724,7 +699,7 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
724
699
  });
725
700
  this.defineMethod("runjs", async (code, variables, options) => {
726
701
  const mergedGlobals = { ...(options == null ? void 0 : options.globals) || {}, ...variables || {} };
727
- const runner = this.createJSRunner({
702
+ const runner = await this.createJSRunner({
728
703
  ...options || {},
729
704
  globals: mergedGlobals
730
705
  });
@@ -930,45 +905,54 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
930
905
  );
931
906
  });
932
907
  });
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) {
908
+ this.defineMethod("importAsync", async (url) => {
909
+ if (!url || typeof url !== "string") {
910
+ throw new Error("invalid url");
953
911
  }
954
- return new Promise((resolve, reject) => {
912
+ const u = url.trim();
913
+ const g = globalThis;
914
+ g.__nocobaseImportAsyncCache = g.__nocobaseImportAsyncCache || /* @__PURE__ */ new Map();
915
+ const cache = g.__nocobaseImportAsyncCache;
916
+ if (cache.has(u)) return cache.get(u);
917
+ const nativeImport = /* @__PURE__ */ __name(() => import(
918
+ /* @vite-ignore */
919
+ /* webpackIgnore: true */
920
+ u
921
+ ), "nativeImport");
922
+ const evalImport = /* @__PURE__ */ __name(() => {
923
+ const importer = (0, eval)("u => import(u)");
924
+ return importer(u);
925
+ }, "evalImport");
926
+ const p = (async () => {
955
927
  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"));
928
+ return await nativeImport();
968
929
  } catch (err) {
969
- reject(err);
930
+ try {
931
+ return await evalImport();
932
+ } catch (err2) {
933
+ throw err2 || err;
934
+ }
970
935
  }
971
- });
936
+ })();
937
+ cache.set(u, p);
938
+ return p;
939
+ });
940
+ this.defineMethod("createJSRunner", async function(options) {
941
+ try {
942
+ const mod = await import("./runjs-context/setup");
943
+ if (typeof (mod == null ? void 0 : mod.setupRunJSContexts) === "function") await mod.setupRunJSContexts();
944
+ } catch (_2) {
945
+ }
946
+ const version = (options == null ? void 0 : options.version) || "v1";
947
+ const modelClass = (0, import_registry.getModelClassName)(this);
948
+ const Ctor = import_registry.RunJSContextRegistry.resolve(version, modelClass) || import_registry.RunJSContextRegistry.resolve(version, "*") || FlowRunJSContext;
949
+ let runCtx;
950
+ if (Ctor) {
951
+ runCtx = new Ctor(this);
952
+ }
953
+ const globals = { ctx: runCtx, ...(options == null ? void 0 : options.globals) || {} };
954
+ const { timeoutMs } = options || {};
955
+ return new import_JSRunner.JSRunner({ globals, timeoutMs });
972
956
  });
973
957
  this.defineMethod("buildServerContextParams", function(input) {
974
958
  return (0, import_serverContextParams.buildServerContextParams)(this, input);
@@ -986,7 +970,7 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
986
970
  "runAction",
987
971
  async function(actionName, params) {
988
972
  const def = this.engine.getAction(actionName);
989
- const ctx = this.createProxy();
973
+ const ctx = await (0, import_createEphemeralContext.createEphemeralContext)(this, def);
990
974
  if (!def) {
991
975
  throw new Error(`Action '${actionName}' not found.`);
992
976
  }
@@ -1019,13 +1003,22 @@ const _FlowEngineContext = class _FlowEngineContext extends BaseFlowEngineContex
1019
1003
  context: this.createProxy()
1020
1004
  });
1021
1005
  });
1006
+ this.defineMethod(
1007
+ "useResource",
1008
+ function(className) {
1009
+ if (this.has("resource")) return;
1010
+ this.defineProperty("resource", {
1011
+ get: /* @__PURE__ */ __name(() => this.createResource(className), "get")
1012
+ });
1013
+ }
1014
+ );
1022
1015
  }
1023
1016
  };
1024
1017
  __name(_FlowEngineContext, "FlowEngineContext");
1025
1018
  let FlowEngineContext = _FlowEngineContext;
1026
1019
  const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1027
1020
  constructor(model) {
1028
- if (!(model instanceof import_models.FlowModel)) {
1021
+ if (!model || typeof model !== "object") {
1029
1022
  throw new Error("Invalid FlowModel instance");
1030
1023
  }
1031
1024
  super();
@@ -1034,7 +1027,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1034
1027
  this.engine.reactView.onRefReady(ref, cb, timeout);
1035
1028
  });
1036
1029
  this.defineMethod("runjs", async (code, variables, options) => {
1037
- const runner = this.createJSRunner({
1030
+ const runner = await this.createJSRunner({
1038
1031
  globals: variables,
1039
1032
  version: options == null ? void 0 : options.version
1040
1033
  });
@@ -1043,10 +1036,11 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1043
1036
  this.defineProperty("model", {
1044
1037
  value: model
1045
1038
  });
1039
+ const stableRef = (0, import_react.createRef)();
1046
1040
  this.defineProperty("ref", {
1047
1041
  get: /* @__PURE__ */ __name(() => {
1048
1042
  this.model["_refCreated"] = true;
1049
- return (0, import_react.createRef)();
1043
+ return stableRef;
1050
1044
  }, "get")
1051
1045
  });
1052
1046
  this.defineMethod("openView", async function(uid, options) {
@@ -1118,7 +1112,7 @@ const _FlowModelContext = class _FlowModelContext extends BaseFlowModelContext {
1118
1112
  "runAction",
1119
1113
  async function(actionName, params) {
1120
1114
  const def = this.model.getAction(actionName);
1121
- const ctx = this.createProxy();
1115
+ const ctx = await (0, import_createEphemeralContext.createEphemeralContext)(this, def);
1122
1116
  if (!def) {
1123
1117
  throw new Error(`Action '${actionName}' not found.`);
1124
1118
  }
@@ -1143,7 +1137,7 @@ __name(_FlowModelContext, "FlowModelContext");
1143
1137
  let FlowModelContext = _FlowModelContext;
1144
1138
  const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelContext {
1145
1139
  constructor(master, fork) {
1146
- if (!(master instanceof import_models.FlowModel)) {
1140
+ if (!master || typeof master !== "object") {
1147
1141
  throw new Error("Invalid FlowModel instance");
1148
1142
  }
1149
1143
  super();
@@ -1156,14 +1150,15 @@ const _FlowForkModelContext = class _FlowForkModelContext extends BaseFlowModelC
1156
1150
  this.defineProperty("model", {
1157
1151
  get: /* @__PURE__ */ __name(() => this.fork, "get")
1158
1152
  });
1153
+ const stableRef = (0, import_react.createRef)();
1159
1154
  this.defineProperty("ref", {
1160
1155
  get: /* @__PURE__ */ __name(() => {
1161
1156
  this.fork["_refCreated"] = true;
1162
- return (0, import_react.createRef)();
1157
+ return stableRef;
1163
1158
  }, "get")
1164
1159
  });
1165
1160
  this.defineMethod("runjs", async (code, variables, options) => {
1166
- const runner = this.createJSRunner({
1161
+ const runner = await this.createJSRunner({
1167
1162
  globals: variables,
1168
1163
  version: options == null ? void 0 : options.version
1169
1164
  });
@@ -1214,7 +1209,7 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
1214
1209
  this.engine.reactView.onRefReady(ref, cb, timeout);
1215
1210
  });
1216
1211
  this.defineMethod("runjs", async (code, variables, options) => {
1217
- const runner = this.createJSRunner({
1212
+ const runner = await this.createJSRunner({
1218
1213
  globals: variables,
1219
1214
  version: options == null ? void 0 : options.version
1220
1215
  });
@@ -1255,12 +1250,134 @@ const _FlowRuntimeContext = class _FlowRuntimeContext extends BaseFlowModelConte
1255
1250
  };
1256
1251
  __name(_FlowRuntimeContext, "FlowRuntimeContext");
1257
1252
  let FlowRuntimeContext = _FlowRuntimeContext;
1253
+ const __runjsClassDefaultMeta = /* @__PURE__ */ new WeakMap();
1254
+ const __runjsClassLocaleMeta = /* @__PURE__ */ new WeakMap();
1255
+ const __runjsDocCache = /* @__PURE__ */ new WeakMap();
1256
+ function __runjsDeepMerge(base, patch) {
1257
+ if (patch === null) return void 0;
1258
+ if (Array.isArray(base) || Array.isArray(patch) || typeof base !== "object" || typeof patch !== "object") {
1259
+ return patch ?? base;
1260
+ }
1261
+ const out = { ...base };
1262
+ for (const k of Object.keys(patch)) {
1263
+ const v = __runjsDeepMerge(base == null ? void 0 : base[k], patch[k]);
1264
+ if (typeof v === "undefined") delete out[k];
1265
+ else out[k] = v;
1266
+ }
1267
+ return out;
1268
+ }
1269
+ __name(__runjsDeepMerge, "__runjsDeepMerge");
1270
+ const _FlowRunJSContext = class _FlowRunJSContext extends FlowContext {
1271
+ constructor(delegate) {
1272
+ super();
1273
+ this.addDelegate(delegate);
1274
+ this.defineProperty("React", { value: import_react.default });
1275
+ this.defineProperty("antd", { value: antd });
1276
+ const ReactDOMShim = {
1277
+ ...ReactDOMClient,
1278
+ createRoot: /* @__PURE__ */ __name((container, options) => {
1279
+ const realContainer = (container == null ? void 0 : container.__el) || container;
1280
+ return this.engine.reactView.createRoot(realContainer, options);
1281
+ }, "createRoot")
1282
+ };
1283
+ this.defineProperty("ReactDOM", { value: ReactDOMShim });
1284
+ this.defineMethod(
1285
+ "render",
1286
+ function(vnode, container) {
1287
+ const el = container || this.element;
1288
+ if (!el) throw new Error("ctx.render: container not provided and ctx.element is not available");
1289
+ const containerEl = (el == null ? void 0 : el.__el) || el;
1290
+ const globalRef = globalThis;
1291
+ globalRef.__nbRunjsRoots = globalRef.__nbRunjsRoots || /* @__PURE__ */ new WeakMap();
1292
+ const rootMap = globalRef.__nbRunjsRoots;
1293
+ if (typeof vnode === "string") {
1294
+ const existingRoot = rootMap.get(containerEl);
1295
+ if (existingRoot && typeof existingRoot.unmount === "function") {
1296
+ try {
1297
+ existingRoot.unmount();
1298
+ } finally {
1299
+ rootMap.delete(containerEl);
1300
+ }
1301
+ }
1302
+ const proxy = new import_ElementProxy.ElementProxy(containerEl);
1303
+ proxy.innerHTML = String(vnode ?? "");
1304
+ return null;
1305
+ }
1306
+ if (vnode && vnode.nodeType && (vnode.nodeType === 1 || vnode.nodeType === 3 || vnode.nodeType === 11)) {
1307
+ const existingRoot = rootMap.get(containerEl);
1308
+ if (existingRoot && typeof existingRoot.unmount === "function") {
1309
+ try {
1310
+ existingRoot.unmount();
1311
+ } finally {
1312
+ rootMap.delete(containerEl);
1313
+ }
1314
+ }
1315
+ while (containerEl.firstChild) containerEl.removeChild(containerEl.firstChild);
1316
+ containerEl.appendChild(vnode);
1317
+ return null;
1318
+ }
1319
+ let root = rootMap.get(containerEl);
1320
+ if (!root) {
1321
+ root = this.ReactDOM.createRoot(containerEl);
1322
+ rootMap.set(containerEl, root);
1323
+ }
1324
+ root.render(vnode);
1325
+ return root;
1326
+ }
1327
+ );
1328
+ }
1329
+ static define(meta, options) {
1330
+ const locale = options == null ? void 0 : options.locale;
1331
+ if (locale) {
1332
+ const map = __runjsClassLocaleMeta.get(this) || /* @__PURE__ */ new Map();
1333
+ const prev = map.get(locale) || {};
1334
+ map.set(locale, __runjsDeepMerge(prev, meta));
1335
+ __runjsClassLocaleMeta.set(this, map);
1336
+ } else {
1337
+ const prev = __runjsClassDefaultMeta.get(this) || {};
1338
+ __runjsClassDefaultMeta.set(this, __runjsDeepMerge(prev, meta));
1339
+ }
1340
+ __runjsDocCache.delete(this);
1341
+ }
1342
+ static getDoc(locale) {
1343
+ const self = this;
1344
+ let cacheForClass = __runjsDocCache.get(self);
1345
+ const cacheKey = String(locale || "default");
1346
+ if (cacheForClass && cacheForClass.has(cacheKey)) return cacheForClass.get(cacheKey);
1347
+ const chain = [];
1348
+ let cur = self;
1349
+ while (cur && cur.prototype) {
1350
+ chain.unshift(cur);
1351
+ cur = Object.getPrototypeOf(cur);
1352
+ }
1353
+ let merged = {};
1354
+ for (const cls of chain) {
1355
+ merged = __runjsDeepMerge(merged, __runjsClassDefaultMeta.get(cls) || {});
1356
+ }
1357
+ if (locale) {
1358
+ for (const cls of chain) {
1359
+ const lmap = __runjsClassLocaleMeta.get(cls);
1360
+ if (lmap && lmap.has(locale)) {
1361
+ merged = __runjsDeepMerge(merged, lmap.get(locale));
1362
+ }
1363
+ }
1364
+ }
1365
+ if (!cacheForClass) {
1366
+ cacheForClass = /* @__PURE__ */ new Map();
1367
+ __runjsDocCache.set(self, cacheForClass);
1368
+ }
1369
+ cacheForClass.set(cacheKey, merged);
1370
+ return merged;
1371
+ }
1372
+ };
1373
+ __name(_FlowRunJSContext, "FlowRunJSContext");
1374
+ let FlowRunJSContext = _FlowRunJSContext;
1258
1375
  // Annotate the CommonJS export names for ESM import in node:
1259
1376
  0 && (module.exports = {
1260
1377
  FlowContext,
1261
1378
  FlowEngineContext,
1262
1379
  FlowForkModelContext,
1263
1380
  FlowModelContext,
1264
- FlowRunjsContext,
1381
+ FlowRunJSContext,
1265
1382
  FlowRuntimeContext
1266
1383
  });
@@ -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
  }
@@ -704,7 +714,8 @@ const _FlowEngine = class _FlowEngine {
704
714
  console.error("FlowModel.moveTo: Parent subModels must be an array to perform move operation.");
705
715
  return false;
706
716
  }
707
- const findIndex = /* @__PURE__ */ __name((model) => subModels.findIndex((item) => item.uid === model.uid), "findIndex");
717
+ const subModelsCopy = [...subModels];
718
+ const findIndex = /* @__PURE__ */ __name((model) => subModelsCopy.findIndex((item) => item.uid === model.uid), "findIndex");
708
719
  const currentIndex = findIndex(sourceModel2);
709
720
  const targetIndex = findIndex(targetModel2);
710
721
  if (currentIndex === -1 || targetIndex === -1) {
@@ -715,11 +726,12 @@ const _FlowEngine = class _FlowEngine {
715
726
  console.warn("FlowModel.moveTo: Current model is already at the target position. No action taken.");
716
727
  return false;
717
728
  }
718
- const [movedModel] = subModels.splice(currentIndex, 1);
719
- subModels.splice(targetIndex, 0, movedModel);
720
- subModels.forEach((model, index) => {
729
+ const [movedModel] = subModelsCopy.splice(currentIndex, 1);
730
+ subModelsCopy.splice(targetIndex, 0, movedModel);
731
+ subModelsCopy.forEach((model, index) => {
721
732
  model.sortIndex = index;
722
733
  });
734
+ sourceModel2.parent.subModels[sourceModel2.subKey] = subModelsCopy;
723
735
  return true;
724
736
  }, "move");
725
737
  move(sourceModel, targetModel);
@@ -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;
@@ -509,7 +511,7 @@ const _FlowSettings = class _FlowSettings {
509
511
  }
510
512
  if (entries.length === 0) {
511
513
  if (!preset) {
512
- (_d = message == null ? void 0 : message.info) == null ? void 0 : _d.call(message, t("This model has no configurable flow settings"));
514
+ (_c = message == null ? void 0 : message.info) == null ? void 0 : _c.call(message, t("This model has no configurable flow settings"));
513
515
  }
514
516
  return false;
515
517
  }
@@ -521,7 +523,7 @@ const _FlowSettings = class _FlowSettings {
521
523
  const scopes = {
522
524
  // 为 schema 表达式提供上下文能力(可在表达式中使用 useFlowSettingsContext 等)
523
525
  useFlowSettingsContext: import_useFlowSettingsContext.useFlowSettingsContext,
524
- ...((_e = flowEngine == null ? void 0 : flowEngine.flowSettings) == null ? void 0 : _e.scopes) || {}
526
+ ...((_d = flowEngine == null ? void 0 : flowEngine.flowSettings) == null ? void 0 : _d.scopes) || {}
525
527
  };
526
528
  let modeProps = typeof resolvedUiMode === "object" && resolvedUiMode ? resolvedUiMode.props || {} : {};
527
529
  if (modeType === "embed") {
@@ -535,7 +537,7 @@ const _FlowSettings = class _FlowSettings {
535
537
  target,
536
538
  styles: {
537
539
  body: {
538
- padding: (_f = flowEngine.context.themeToken) == null ? void 0 : _f.padding
540
+ padding: (_e = flowEngine.context.themeToken) == null ? void 0 : _e.padding
539
541
  }
540
542
  },
541
543
  ...modeProps,
@@ -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
@@ -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';