@nocobase/plugin-flow-engine 2.1.0-beta.2 → 2.1.0-beta.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 (244) hide show
  1. package/LICENSE +201 -661
  2. package/README.md +79 -9
  3. package/dist/ai/ai-employees/nathan/index.d.ts +10 -0
  4. package/dist/ai/ai-employees/nathan/index.js +41 -0
  5. package/dist/ai/ai-employees/nathan/prompt.md +132 -0
  6. package/dist/ai/ai-employees/nathan/skills/frontend-developer/SKILLS.md +69 -0
  7. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.js +2 -2
  8. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.js +2 -2
  9. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.js +2 -2
  10. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.js +2 -2
  11. package/dist/ai/docs/runjs/context/block-model.md +35 -35
  12. package/dist/ai/docs/runjs/context/collection-field.md +53 -51
  13. package/dist/ai/docs/runjs/context/collection.md +39 -39
  14. package/dist/ai/docs/runjs/context/data-source-manager.md +40 -30
  15. package/dist/ai/docs/runjs/context/data-source.md +52 -44
  16. package/dist/ai/docs/runjs/context/element.md +44 -38
  17. package/dist/ai/docs/runjs/context/exit-all.md +37 -35
  18. package/dist/ai/docs/runjs/context/exit.md +38 -35
  19. package/dist/ai/docs/runjs/context/filter-manager.md +36 -30
  20. package/dist/ai/docs/runjs/context/form.md +57 -57
  21. package/dist/ai/docs/runjs/context/get-model.md +22 -21
  22. package/dist/ai/docs/runjs/context/get-value.md +20 -19
  23. package/dist/ai/docs/runjs/context/get-var.md +61 -55
  24. package/dist/ai/docs/runjs/context/i18n.md +17 -14
  25. package/dist/ai/docs/runjs/context/import-async.md +333 -45
  26. package/dist/ai/docs/runjs/context/init-resource.md +20 -20
  27. package/dist/ai/docs/runjs/context/libs.md +31 -31
  28. package/dist/ai/docs/runjs/context/location.md +34 -31
  29. package/dist/ai/docs/runjs/context/logger.md +41 -40
  30. package/dist/ai/docs/runjs/context/make-resource.md +27 -26
  31. package/dist/ai/docs/runjs/context/message.md +42 -41
  32. package/dist/ai/docs/runjs/context/modal.md +44 -44
  33. package/dist/ai/docs/runjs/context/model.md +36 -33
  34. package/dist/ai/docs/runjs/context/notification.md +41 -40
  35. package/dist/ai/docs/runjs/context/off.md +14 -14
  36. package/dist/ai/docs/runjs/context/on.md +30 -29
  37. package/dist/ai/docs/runjs/context/open-view.md +40 -40
  38. package/dist/ai/docs/runjs/context/render.md +37 -32
  39. package/dist/ai/docs/runjs/context/request.md +46 -45
  40. package/dist/ai/docs/runjs/context/require-async.md +28 -25
  41. package/dist/ai/docs/runjs/context/resource.md +34 -34
  42. package/dist/ai/docs/runjs/context/route.md +36 -34
  43. package/dist/ai/docs/runjs/context/router.md +43 -31
  44. package/dist/ai/docs/runjs/context/set-value.md +18 -17
  45. package/dist/ai/docs/runjs/context/sql.md +7 -15
  46. package/dist/ai/docs/runjs/context/t.md +20 -17
  47. package/dist/ai/docs/runjs/context/view.md +49 -46
  48. package/dist/ai/docs/runjs/document.md +1 -0
  49. package/dist/ai/docs/runjs/import-modules.md +32 -32
  50. package/dist/ai/docs/runjs/index.md +13 -13
  51. package/dist/ai/docs/runjs/jsx.md +19 -19
  52. package/dist/ai/docs/runjs/model/form-block-model.md +1 -3
  53. package/dist/ai/docs/runjs/render.md +15 -15
  54. package/dist/ai/docs/runjs/resource/api-resource.md +53 -53
  55. package/dist/ai/docs/runjs/resource/multi-record-resource.md +64 -64
  56. package/dist/ai/docs/runjs/resource/single-record-resource.md +55 -55
  57. package/dist/ai/docs/runjs/resource/sql-resource.md +57 -57
  58. package/dist/ai/docs/runjs/window.md +5 -5
  59. package/dist/client/index.js +1 -1
  60. package/dist/externalVersion.js +12 -11
  61. package/dist/locale/en-US.json +1 -0
  62. package/dist/locale/index.d.ts +2 -0
  63. package/dist/locale/zh-CN.json +1 -0
  64. package/dist/node_modules/ses/dist/ses.cjs +1 -1
  65. package/dist/node_modules/ses/package.json +1 -1
  66. package/dist/node_modules/zod/index.cjs +1 -1
  67. package/dist/node_modules/zod/package.json +1 -1
  68. package/dist/server/collections/flowsql.js +1 -0
  69. package/dist/server/flow-surfaces/action-scope.d.ts +39 -0
  70. package/dist/server/flow-surfaces/action-scope.js +156 -0
  71. package/dist/server/flow-surfaces/apply/compiler.d.ts +13 -0
  72. package/dist/server/flow-surfaces/apply/compiler.js +969 -0
  73. package/dist/server/flow-surfaces/apply/layout.d.ts +34 -0
  74. package/dist/server/flow-surfaces/apply/layout.js +175 -0
  75. package/dist/server/flow-surfaces/apply/matching.d.ts +16 -0
  76. package/dist/server/flow-surfaces/apply/matching.js +181 -0
  77. package/dist/server/flow-surfaces/approval/blueprint-service.d.ts +84 -0
  78. package/dist/server/flow-surfaces/approval/blueprint-service.js +589 -0
  79. package/dist/server/flow-surfaces/approval/blueprint.d.ts +21 -0
  80. package/dist/server/flow-surfaces/approval/blueprint.js +187 -0
  81. package/dist/server/flow-surfaces/approval/builder.d.ts +225 -0
  82. package/dist/server/flow-surfaces/approval/builder.js +384 -0
  83. package/dist/server/flow-surfaces/approval/catalog-specs.d.ts +33 -0
  84. package/dist/server/flow-surfaces/approval/catalog-specs.js +156 -0
  85. package/dist/server/flow-surfaces/approval/index.d.ts +14 -0
  86. package/dist/server/flow-surfaces/approval/index.js +40 -0
  87. package/dist/server/flow-surfaces/approval/runtime-config.d.ts +44 -0
  88. package/dist/server/flow-surfaces/approval/runtime-config.js +299 -0
  89. package/dist/server/flow-surfaces/approval/semantic-use.d.ts +23 -0
  90. package/dist/server/flow-surfaces/approval/semantic-use.js +155 -0
  91. package/dist/server/flow-surfaces/association-title-field.d.ts +20 -0
  92. package/dist/server/flow-surfaces/association-title-field.js +192 -0
  93. package/dist/server/flow-surfaces/blueprint/compile-blocks.d.ts +14 -0
  94. package/dist/server/flow-surfaces/blueprint/compile-blocks.js +1029 -0
  95. package/dist/server/flow-surfaces/blueprint/compile-plan.d.ts +13 -0
  96. package/dist/server/flow-surfaces/blueprint/compile-plan.js +308 -0
  97. package/dist/server/flow-surfaces/blueprint/compile-reaction.d.ts +11 -0
  98. package/dist/server/flow-surfaces/blueprint/compile-reaction.js +72 -0
  99. package/dist/server/flow-surfaces/blueprint/defaults.d.ts +26 -0
  100. package/dist/server/flow-surfaces/blueprint/defaults.js +133 -0
  101. package/dist/server/flow-surfaces/blueprint/index.d.ts +12 -0
  102. package/dist/server/flow-surfaces/blueprint/index.js +44 -0
  103. package/dist/server/flow-surfaces/blueprint/normalize-document.d.ts +10 -0
  104. package/dist/server/flow-surfaces/blueprint/normalize-document.js +416 -0
  105. package/dist/server/flow-surfaces/blueprint/private-utils.d.ts +26 -0
  106. package/dist/server/flow-surfaces/blueprint/private-utils.js +182 -0
  107. package/dist/server/flow-surfaces/blueprint/public-types.d.ts +193 -0
  108. package/dist/server/flow-surfaces/blueprint/public-types.js +24 -0
  109. package/dist/server/flow-surfaces/builder.d.ts +211 -0
  110. package/dist/server/flow-surfaces/builder.js +1097 -0
  111. package/dist/server/flow-surfaces/catalog-smart.d.ts +18 -0
  112. package/dist/server/flow-surfaces/catalog-smart.js +239 -0
  113. package/dist/server/flow-surfaces/catalog-smart.projector.d.ts +15 -0
  114. package/dist/server/flow-surfaces/catalog-smart.projector.js +157 -0
  115. package/dist/server/flow-surfaces/catalog-smart.types.d.ts +99 -0
  116. package/dist/server/flow-surfaces/catalog-smart.types.js +24 -0
  117. package/dist/server/flow-surfaces/catalog.d.ts +78 -0
  118. package/dist/server/flow-surfaces/catalog.js +3577 -0
  119. package/dist/server/flow-surfaces/chart-config.d.ts +121 -0
  120. package/dist/server/flow-surfaces/chart-config.js +1394 -0
  121. package/dist/server/flow-surfaces/compose-compiler.d.ts +108 -0
  122. package/dist/server/flow-surfaces/compose-compiler.js +167 -0
  123. package/dist/server/flow-surfaces/compose-runtime.d.ts +93 -0
  124. package/dist/server/flow-surfaces/compose-runtime.js +375 -0
  125. package/dist/server/flow-surfaces/configure-options.d.ts +23 -0
  126. package/dist/server/flow-surfaces/configure-options.js +860 -0
  127. package/dist/server/flow-surfaces/constants.d.ts +351 -0
  128. package/dist/server/flow-surfaces/constants.js +104 -0
  129. package/dist/server/flow-surfaces/context.d.ts +72 -0
  130. package/dist/server/flow-surfaces/context.js +556 -0
  131. package/dist/server/flow-surfaces/contract-guard.d.ts +19 -0
  132. package/dist/server/flow-surfaces/contract-guard.js +402 -0
  133. package/dist/server/flow-surfaces/core-field-default-bindings.d.ts +12 -0
  134. package/dist/server/flow-surfaces/core-field-default-bindings.js +157 -0
  135. package/dist/server/flow-surfaces/default-action-popup.d.ts +63 -0
  136. package/dist/server/flow-surfaces/default-action-popup.js +322 -0
  137. package/dist/server/flow-surfaces/default-block-actions.d.ts +32 -0
  138. package/dist/server/flow-surfaces/default-block-actions.js +209 -0
  139. package/dist/server/flow-surfaces/errors.d.ts +47 -0
  140. package/dist/server/flow-surfaces/errors.js +145 -0
  141. package/dist/server/flow-surfaces/executor.d.ts +23 -0
  142. package/dist/server/flow-surfaces/executor.js +132 -0
  143. package/dist/server/flow-surfaces/field-binding-registry.d.ts +23 -0
  144. package/dist/server/flow-surfaces/field-binding-registry.js +391 -0
  145. package/dist/server/flow-surfaces/field-semantics.d.ts +15 -0
  146. package/dist/server/flow-surfaces/field-semantics.js +83 -0
  147. package/dist/server/flow-surfaces/filter-group.d.ts +15 -0
  148. package/dist/server/flow-surfaces/filter-group.js +94 -0
  149. package/dist/server/flow-surfaces/index.d.ts +11 -0
  150. package/dist/server/flow-surfaces/index.js +302 -0
  151. package/dist/server/flow-surfaces/locator.d.ts +28 -0
  152. package/dist/server/flow-surfaces/locator.js +240 -0
  153. package/dist/server/flow-surfaces/node-use-sets.d.ts +15 -0
  154. package/dist/server/flow-surfaces/node-use-sets.js +134 -0
  155. package/dist/server/flow-surfaces/payload-shape.d.ts +9 -0
  156. package/dist/server/flow-surfaces/payload-shape.js +61 -0
  157. package/dist/server/flow-surfaces/placement.d.ts +33 -0
  158. package/dist/server/flow-surfaces/placement.js +198 -0
  159. package/dist/server/flow-surfaces/planning/action-specs.d.ts +179 -0
  160. package/dist/server/flow-surfaces/planning/action-specs.js +190 -0
  161. package/dist/server/flow-surfaces/planning/compiler.d.ts +37 -0
  162. package/dist/server/flow-surfaces/planning/compiler.js +376 -0
  163. package/dist/server/flow-surfaces/planning/context.d.ts +30 -0
  164. package/dist/server/flow-surfaces/planning/context.js +139 -0
  165. package/dist/server/flow-surfaces/planning/created-keys.d.ts +34 -0
  166. package/dist/server/flow-surfaces/planning/created-keys.js +375 -0
  167. package/dist/server/flow-surfaces/planning/key-kind.d.ts +11 -0
  168. package/dist/server/flow-surfaces/planning/key-kind.js +88 -0
  169. package/dist/server/flow-surfaces/planning/key-persistence.d.ts +34 -0
  170. package/dist/server/flow-surfaces/planning/key-persistence.js +148 -0
  171. package/dist/server/flow-surfaces/planning/key-registry.d.ts +40 -0
  172. package/dist/server/flow-surfaces/planning/key-registry.js +206 -0
  173. package/dist/server/flow-surfaces/planning/runtime.d.ts +37 -0
  174. package/dist/server/flow-surfaces/planning/runtime.js +259 -0
  175. package/dist/server/flow-surfaces/planning/step-link.d.ts +14 -0
  176. package/dist/server/flow-surfaces/planning/step-link.js +104 -0
  177. package/dist/server/flow-surfaces/planning/types.d.ts +55 -0
  178. package/dist/server/flow-surfaces/planning/types.js +24 -0
  179. package/dist/server/flow-surfaces/public-data-surface-default-filter.d.ts +24 -0
  180. package/dist/server/flow-surfaces/public-data-surface-default-filter.js +152 -0
  181. package/dist/server/flow-surfaces/reaction/errors.d.ts +20 -0
  182. package/dist/server/flow-surfaces/reaction/errors.js +69 -0
  183. package/dist/server/flow-surfaces/reaction/field-value.d.ts +34 -0
  184. package/dist/server/flow-surfaces/reaction/field-value.js +181 -0
  185. package/dist/server/flow-surfaces/reaction/fingerprint.d.ts +16 -0
  186. package/dist/server/flow-surfaces/reaction/fingerprint.js +71 -0
  187. package/dist/server/flow-surfaces/reaction/linkage.d.ts +136 -0
  188. package/dist/server/flow-surfaces/reaction/linkage.js +882 -0
  189. package/dist/server/flow-surfaces/reaction/meta.d.ts +11 -0
  190. package/dist/server/flow-surfaces/reaction/meta.js +451 -0
  191. package/dist/server/flow-surfaces/reaction/registry.d.ts +156 -0
  192. package/dist/server/flow-surfaces/reaction/registry.js +206 -0
  193. package/dist/server/flow-surfaces/reaction/resolver.d.ts +22 -0
  194. package/dist/server/flow-surfaces/reaction/resolver.js +202 -0
  195. package/dist/server/flow-surfaces/reaction/types.d.ts +241 -0
  196. package/dist/server/flow-surfaces/reaction/types.js +24 -0
  197. package/dist/server/flow-surfaces/reaction/utils.d.ts +17 -0
  198. package/dist/server/flow-surfaces/reaction/utils.js +67 -0
  199. package/dist/server/flow-surfaces/reaction/value-expr.d.ts +15 -0
  200. package/dist/server/flow-surfaces/reaction/value-expr.js +209 -0
  201. package/dist/server/flow-surfaces/reference-guards.d.ts +19 -0
  202. package/dist/server/flow-surfaces/reference-guards.js +103 -0
  203. package/dist/server/flow-surfaces/route-sync.d.ts +47 -0
  204. package/dist/server/flow-surfaces/route-sync.js +392 -0
  205. package/dist/server/flow-surfaces/service-helpers.d.ts +42 -0
  206. package/dist/server/flow-surfaces/service-helpers.js +310 -0
  207. package/dist/server/flow-surfaces/service-utils.d.ts +108 -0
  208. package/dist/server/flow-surfaces/service-utils.js +811 -0
  209. package/dist/server/flow-surfaces/service.d.ts +814 -0
  210. package/dist/server/flow-surfaces/service.js +14276 -0
  211. package/dist/server/flow-surfaces/support-matrix.d.ts +31 -0
  212. package/dist/server/flow-surfaces/support-matrix.js +271 -0
  213. package/dist/server/flow-surfaces/surface-context.d.ts +52 -0
  214. package/dist/server/flow-surfaces/surface-context.js +440 -0
  215. package/dist/server/flow-surfaces/template-compatibility.d.ts +42 -0
  216. package/dist/server/flow-surfaces/template-compatibility.js +189 -0
  217. package/dist/server/flow-surfaces/template-display.d.ts +20 -0
  218. package/dist/server/flow-surfaces/template-display.js +289 -0
  219. package/dist/server/flow-surfaces/template-service-utils.d.ts +62 -0
  220. package/dist/server/flow-surfaces/template-service-utils.js +281 -0
  221. package/dist/server/flow-surfaces/types.d.ts +288 -0
  222. package/dist/server/flow-surfaces/types.js +24 -0
  223. package/dist/server/index.d.ts +1 -0
  224. package/dist/server/index.js +7 -2
  225. package/dist/server/plugin.d.ts +0 -1
  226. package/dist/server/plugin.js +9 -34
  227. package/dist/server/repository.js +0 -5
  228. package/dist/server/variables/resolve.d.ts +21 -0
  229. package/dist/server/variables/resolve.js +79 -0
  230. package/dist/swagger/flow-surfaces.d.ts +5964 -0
  231. package/dist/swagger/flow-surfaces.examples.d.ts +1572 -0
  232. package/dist/swagger/flow-surfaces.examples.js +1805 -0
  233. package/dist/swagger/flow-surfaces.js +5322 -0
  234. package/dist/swagger/flow-surfaces.template-action-docs.d.ts +62 -0
  235. package/dist/swagger/flow-surfaces.template-action-docs.js +121 -0
  236. package/dist/swagger/flow-surfaces.template-schemas.d.ts +239 -0
  237. package/dist/swagger/flow-surfaces.template-schemas.js +255 -0
  238. package/dist/swagger/index.d.ts +5969 -0
  239. package/dist/swagger/index.js +50 -0
  240. package/package.json +3 -3
  241. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.d.ts +0 -0
  242. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.d.ts +0 -0
  243. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.d.ts +0 -0
  244. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.d.ts +0 -0
@@ -0,0 +1,1805 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var flow_surfaces_examples_exports = {};
28
+ __export(flow_surfaces_examples_exports, {
29
+ flowSurfaceExamples: () => flowSurfaceExamples
30
+ });
31
+ module.exports = __toCommonJS(flow_surfaces_examples_exports);
32
+ const makePublicBlockDefaultFilter = (items = [
33
+ {
34
+ path: "username",
35
+ operator: "$includes",
36
+ value: ""
37
+ },
38
+ {
39
+ path: "email",
40
+ operator: "$includes",
41
+ value: ""
42
+ },
43
+ {
44
+ path: "status",
45
+ operator: "$eq",
46
+ value: ""
47
+ }
48
+ ]) => ({
49
+ logic: "$and",
50
+ items
51
+ });
52
+ const flowSurfaceExamples = {
53
+ catalog: {
54
+ target: {
55
+ uid: "table-block-uid"
56
+ }
57
+ },
58
+ context: {
59
+ target: {
60
+ uid: "details-block-uid"
61
+ },
62
+ path: "record",
63
+ maxDepth: 3
64
+ },
65
+ getReactionMeta: {
66
+ target: {
67
+ uid: "employees-form-uid"
68
+ }
69
+ },
70
+ describeSurface: {
71
+ locator: {
72
+ pageSchemaUid: "employees-page-schema"
73
+ },
74
+ bindKeys: [
75
+ {
76
+ key: "employeesTable",
77
+ locator: {
78
+ uid: "employees-table-uid"
79
+ },
80
+ expectedKind: "block"
81
+ }
82
+ ]
83
+ },
84
+ applyBlueprint: {
85
+ version: "1",
86
+ mode: "create",
87
+ navigation: {
88
+ group: {
89
+ title: "Workspace"
90
+ },
91
+ item: {
92
+ title: "Employees"
93
+ }
94
+ },
95
+ page: {
96
+ title: "Employees",
97
+ documentTitle: "Employees workspace",
98
+ enableHeader: true,
99
+ displayTitle: true
100
+ },
101
+ tabs: [
102
+ {
103
+ key: "main",
104
+ title: "Overview",
105
+ blocks: [
106
+ {
107
+ key: "employeeForm",
108
+ type: "createForm",
109
+ collection: "employees",
110
+ fields: [
111
+ { key: "nicknameField", field: "nickname" },
112
+ { key: "statusField", field: "status" },
113
+ "amount",
114
+ "taxRate",
115
+ "subtotal",
116
+ "total"
117
+ ],
118
+ fieldsLayout: {
119
+ rows: [
120
+ ["nicknameField"],
121
+ [
122
+ { key: "statusField", span: 12 },
123
+ { key: "amount", span: 12 }
124
+ ],
125
+ ["taxRate"],
126
+ ["subtotal"],
127
+ ["total"]
128
+ ]
129
+ },
130
+ actions: ["submit"]
131
+ },
132
+ {
133
+ key: "employeesTable",
134
+ type: "table",
135
+ collection: "employees",
136
+ defaultFilter: makePublicBlockDefaultFilter([
137
+ {
138
+ path: "nickname",
139
+ operator: "$includes",
140
+ value: ""
141
+ },
142
+ {
143
+ path: "status",
144
+ operator: "$eq",
145
+ value: ""
146
+ }
147
+ ]),
148
+ fields: ["nickname", "status", "total"],
149
+ actions: [
150
+ {
151
+ key: "filterAction",
152
+ type: "filter",
153
+ settings: {
154
+ defaultFilter: makePublicBlockDefaultFilter([
155
+ {
156
+ path: "status",
157
+ operator: "$eq",
158
+ value: "active"
159
+ }
160
+ ])
161
+ }
162
+ },
163
+ {
164
+ key: "refreshAction",
165
+ type: "refresh"
166
+ }
167
+ ]
168
+ }
169
+ ],
170
+ layout: {
171
+ rows: [["main.employeeForm"], ["main.employeesTable"]]
172
+ }
173
+ }
174
+ ],
175
+ reaction: {
176
+ items: [
177
+ {
178
+ type: "setFieldValueRules",
179
+ target: "main.employeeForm",
180
+ rules: [
181
+ {
182
+ key: "defaultStatus",
183
+ targetPath: "status",
184
+ mode: "default",
185
+ value: {
186
+ source: "literal",
187
+ value: "draft"
188
+ }
189
+ }
190
+ ]
191
+ },
192
+ {
193
+ type: "setBlockLinkageRules",
194
+ target: "main.employeesTable",
195
+ rules: [
196
+ {
197
+ key: "hideTable",
198
+ when: {
199
+ logic: "$and",
200
+ items: [
201
+ {
202
+ path: "params.query.hideTable",
203
+ operator: "$isTruly"
204
+ }
205
+ ]
206
+ },
207
+ then: [{ type: "setBlockState", state: "hidden" }]
208
+ }
209
+ ]
210
+ },
211
+ {
212
+ type: "setFieldLinkageRules",
213
+ target: "main.employeeForm",
214
+ rules: [
215
+ {
216
+ key: "recomputeTotals",
217
+ when: {
218
+ logic: "$and",
219
+ items: [
220
+ {
221
+ path: "formValues.amount",
222
+ operator: "$notEmpty"
223
+ }
224
+ ]
225
+ },
226
+ then: [
227
+ {
228
+ type: "assignField",
229
+ items: [
230
+ {
231
+ targetPath: "subtotal",
232
+ value: {
233
+ source: "runjs",
234
+ version: "v2",
235
+ code: "const amount = Number(ctx.formValues?.amount || 0); return amount;"
236
+ }
237
+ },
238
+ {
239
+ targetPath: "total",
240
+ value: {
241
+ source: "runjs",
242
+ version: "v2",
243
+ code: "const amount = Number(ctx.formValues?.amount || 0); const taxRate = Number(ctx.formValues?.taxRate || 0); return amount + amount * taxRate;"
244
+ }
245
+ }
246
+ ]
247
+ }
248
+ ]
249
+ }
250
+ ]
251
+ },
252
+ {
253
+ type: "setActionLinkageRules",
254
+ target: "main.employeesTable.refreshAction",
255
+ rules: [
256
+ {
257
+ key: "disableRefresh",
258
+ when: {
259
+ logic: "$and",
260
+ items: [
261
+ {
262
+ path: "params.query.readonly",
263
+ operator: "$isTruly"
264
+ }
265
+ ]
266
+ },
267
+ then: [{ type: "setActionState", state: "disabled" }]
268
+ }
269
+ ]
270
+ }
271
+ ]
272
+ }
273
+ },
274
+ applyBlueprintReplace: {
275
+ version: "1",
276
+ mode: "replace",
277
+ target: {
278
+ pageSchemaUid: "employees-page-schema"
279
+ },
280
+ page: {
281
+ title: "Employees workspace",
282
+ documentTitle: "Employees replace flow",
283
+ displayTitle: false,
284
+ enableTabs: true
285
+ },
286
+ tabs: [
287
+ {
288
+ title: "Overview",
289
+ blocks: [
290
+ {
291
+ key: "employeesTable",
292
+ type: "table",
293
+ collection: "employees",
294
+ fields: ["nickname", "status", "total"]
295
+ }
296
+ ]
297
+ }
298
+ ]
299
+ },
300
+ applyBlueprintCalendar: {
301
+ version: "1",
302
+ mode: "create",
303
+ navigation: {
304
+ item: {
305
+ title: "Calendar"
306
+ }
307
+ },
308
+ page: {
309
+ title: "Calendar",
310
+ documentTitle: "Team calendar"
311
+ },
312
+ tabs: [
313
+ {
314
+ key: "schedule",
315
+ title: "Schedule",
316
+ blocks: [
317
+ {
318
+ key: "eventsCalendar",
319
+ type: "calendar",
320
+ collection: "calendar_events",
321
+ defaultFilter: makePublicBlockDefaultFilter([
322
+ {
323
+ path: "title",
324
+ operator: "$includes",
325
+ value: ""
326
+ },
327
+ {
328
+ path: "status",
329
+ operator: "$eq",
330
+ value: "planned"
331
+ }
332
+ ]),
333
+ settings: {
334
+ title: "Team events",
335
+ titleField: "title",
336
+ colorField: "status",
337
+ startField: "startsAt",
338
+ endField: "endsAt",
339
+ defaultView: "week"
340
+ },
341
+ actions: ["filter", "addNew", "refresh", "today", "turnPages", "title", "selectView"]
342
+ }
343
+ ]
344
+ }
345
+ ]
346
+ },
347
+ applyApprovalBlueprintInitiator: {
348
+ version: "1",
349
+ surface: "initiator",
350
+ workflowId: 101,
351
+ blocks: [
352
+ {
353
+ key: "initiatorForm",
354
+ type: "approvalInitiator",
355
+ resource: {
356
+ dataSourceKey: "main",
357
+ collectionName: "employees"
358
+ },
359
+ fields: ["nickname", "status"],
360
+ actions: ["approvalSaveDraft", "approvalWithdraw"]
361
+ }
362
+ ],
363
+ layout: {
364
+ rows: [["initiatorForm"]]
365
+ }
366
+ },
367
+ applyApprovalBlueprintApprover: {
368
+ version: "1",
369
+ surface: "approver",
370
+ nodeId: 201,
371
+ blocks: [
372
+ {
373
+ key: "processForm",
374
+ type: "approvalApprover",
375
+ resource: {
376
+ dataSourceKey: "main",
377
+ collectionName: "employees"
378
+ },
379
+ fields: ["nickname"],
380
+ actions: [
381
+ "approvalApprove",
382
+ "approvalReject",
383
+ {
384
+ type: "approvalReturn",
385
+ settings: {
386
+ approvalReturn: {
387
+ type: "count",
388
+ count: 1
389
+ }
390
+ }
391
+ }
392
+ ]
393
+ },
394
+ {
395
+ key: "approvalInfo",
396
+ type: "approvalInformation",
397
+ resource: {
398
+ dataSourceKey: "main",
399
+ collectionName: "employees"
400
+ },
401
+ fields: ["status"]
402
+ }
403
+ ],
404
+ layout: {
405
+ rows: [["processForm"], ["approvalInfo"]]
406
+ }
407
+ },
408
+ applyApprovalBlueprintTaskCard: {
409
+ version: "1",
410
+ surface: "taskCard",
411
+ nodeId: 201,
412
+ fields: [
413
+ {
414
+ key: "nickname",
415
+ fieldPath: "nickname"
416
+ },
417
+ {
418
+ key: "status",
419
+ fieldPath: "status"
420
+ }
421
+ ],
422
+ layout: {
423
+ rows: [["nickname", "status"]]
424
+ }
425
+ },
426
+ setFieldValueRules: {
427
+ target: {
428
+ uid: "employees-form-uid"
429
+ },
430
+ rules: [
431
+ {
432
+ key: "defaultStatus",
433
+ targetPath: "status",
434
+ mode: "default",
435
+ value: {
436
+ source: "literal",
437
+ value: "draft"
438
+ }
439
+ }
440
+ ],
441
+ expectedFingerprint: "field-value-fp-1"
442
+ },
443
+ setBlockLinkageRules: {
444
+ target: {
445
+ uid: "employees-table-uid"
446
+ },
447
+ rules: [
448
+ {
449
+ key: "hideTable",
450
+ when: {
451
+ logic: "$and",
452
+ items: [
453
+ {
454
+ path: "params.query.hideTable",
455
+ operator: "$isTruly"
456
+ }
457
+ ]
458
+ },
459
+ then: [{ type: "setBlockState", state: "hidden" }]
460
+ }
461
+ ],
462
+ expectedFingerprint: "block-linkage-fp-1"
463
+ },
464
+ setFieldLinkageRules: {
465
+ target: {
466
+ uid: "employees-form-uid"
467
+ },
468
+ rules: [
469
+ {
470
+ key: "recomputeTotals",
471
+ when: {
472
+ logic: "$and",
473
+ items: [
474
+ {
475
+ path: "formValues.amount",
476
+ operator: "$notEmpty"
477
+ }
478
+ ]
479
+ },
480
+ then: [
481
+ {
482
+ type: "assignField",
483
+ items: [
484
+ {
485
+ targetPath: "subtotal",
486
+ value: {
487
+ source: "runjs",
488
+ version: "v2",
489
+ code: "const amount = Number(ctx.formValues?.amount || 0); return amount;"
490
+ }
491
+ },
492
+ {
493
+ targetPath: "total",
494
+ value: {
495
+ source: "runjs",
496
+ version: "v2",
497
+ code: "const amount = Number(ctx.formValues?.amount || 0); const taxRate = Number(ctx.formValues?.taxRate || 0); return amount + amount * taxRate;"
498
+ }
499
+ }
500
+ ]
501
+ }
502
+ ]
503
+ }
504
+ ],
505
+ expectedFingerprint: "field-linkage-fp-1"
506
+ },
507
+ setActionLinkageRules: {
508
+ target: {
509
+ uid: "refresh-action-uid"
510
+ },
511
+ expectedFingerprint: "action-linkage-fp-1",
512
+ rules: [
513
+ {
514
+ key: "disableRefresh",
515
+ when: {
516
+ logic: "$and",
517
+ items: [
518
+ {
519
+ path: "params.query.readonly",
520
+ operator: "$isTruly"
521
+ }
522
+ ]
523
+ },
524
+ then: [{ type: "setActionState", state: "disabled" }]
525
+ }
526
+ ]
527
+ },
528
+ compose: {
529
+ target: {
530
+ uid: "page-grid-uid"
531
+ },
532
+ mode: "append",
533
+ blocks: [
534
+ {
535
+ key: "filter",
536
+ type: "filterForm",
537
+ resource: {
538
+ dataSourceKey: "main",
539
+ collectionName: "users"
540
+ },
541
+ fields: [
542
+ {
543
+ fieldPath: "username",
544
+ target: "table"
545
+ },
546
+ {
547
+ fieldPath: "nickname",
548
+ target: "table"
549
+ }
550
+ ],
551
+ fieldsLayout: {
552
+ rows: [
553
+ [
554
+ { key: "nickname", span: 12 },
555
+ { key: "username", span: 12 }
556
+ ]
557
+ ]
558
+ },
559
+ actions: ["submit", "reset", "collapse"]
560
+ },
561
+ {
562
+ key: "table",
563
+ type: "table",
564
+ resource: {
565
+ dataSourceKey: "main",
566
+ collectionName: "users"
567
+ },
568
+ defaultFilter: makePublicBlockDefaultFilter(),
569
+ fields: ["username", "nickname", { fieldPath: "roles.title" }],
570
+ actions: [
571
+ {
572
+ type: "filter",
573
+ settings: {
574
+ defaultFilter: makePublicBlockDefaultFilter([
575
+ {
576
+ path: "status",
577
+ operator: "$eq",
578
+ value: "active"
579
+ }
580
+ ])
581
+ }
582
+ },
583
+ "addNew",
584
+ "refresh",
585
+ "bulkDelete",
586
+ "link"
587
+ ],
588
+ recordActions: [
589
+ "view",
590
+ "edit",
591
+ {
592
+ type: "popup",
593
+ popup: {
594
+ mode: "replace",
595
+ blocks: [
596
+ {
597
+ key: "details",
598
+ type: "details",
599
+ resource: {
600
+ dataSourceKey: "main",
601
+ collectionName: "users"
602
+ },
603
+ fields: ["username", "nickname"]
604
+ }
605
+ ]
606
+ }
607
+ },
608
+ "updateRecord",
609
+ "delete"
610
+ ]
611
+ }
612
+ ],
613
+ layout: {
614
+ rows: [
615
+ [
616
+ {
617
+ key: "filter",
618
+ span: 3
619
+ },
620
+ {
621
+ key: "table",
622
+ span: 7
623
+ }
624
+ ]
625
+ ]
626
+ }
627
+ },
628
+ composeStatic: {
629
+ target: {
630
+ uid: "page-grid-uid"
631
+ },
632
+ blocks: [
633
+ {
634
+ key: "markdown",
635
+ type: "markdown",
636
+ settings: {
637
+ content: "# Team handbook"
638
+ }
639
+ },
640
+ {
641
+ key: "iframe",
642
+ type: "iframe",
643
+ settings: {
644
+ mode: "url",
645
+ url: "https://example.com/embed",
646
+ height: 360
647
+ }
648
+ },
649
+ {
650
+ key: "panel",
651
+ type: "actionPanel",
652
+ settings: {
653
+ layout: "list",
654
+ ellipsis: false
655
+ }
656
+ }
657
+ ],
658
+ layout: {
659
+ rows: [["markdown", "iframe"], ["panel"]]
660
+ }
661
+ },
662
+ composeListRich: {
663
+ target: {
664
+ uid: "page-grid-uid"
665
+ },
666
+ blocks: [
667
+ {
668
+ key: "employeesList",
669
+ type: "list",
670
+ resource: {
671
+ dataSourceKey: "main",
672
+ collectionName: "employees"
673
+ },
674
+ defaultFilter: makePublicBlockDefaultFilter([
675
+ {
676
+ path: "nickname",
677
+ operator: "$includes",
678
+ value: ""
679
+ }
680
+ ]),
681
+ fields: [
682
+ "nickname",
683
+ {
684
+ fieldPath: "department.name"
685
+ }
686
+ ],
687
+ actions: ["addNew", "refresh"],
688
+ recordActions: [
689
+ "view",
690
+ "edit",
691
+ {
692
+ type: "popup",
693
+ popup: {
694
+ mode: "replace",
695
+ blocks: [
696
+ {
697
+ key: "details",
698
+ type: "details",
699
+ resource: {
700
+ dataSourceKey: "main",
701
+ collectionName: "employees"
702
+ },
703
+ fields: ["nickname"]
704
+ }
705
+ ]
706
+ }
707
+ },
708
+ "delete"
709
+ ],
710
+ settings: {
711
+ pageSize: 20,
712
+ layout: "vertical"
713
+ }
714
+ }
715
+ ]
716
+ },
717
+ composeGridCardRich: {
718
+ target: {
719
+ uid: "page-grid-uid"
720
+ },
721
+ blocks: [
722
+ {
723
+ key: "employeeCards",
724
+ type: "gridCard",
725
+ resource: {
726
+ dataSourceKey: "main",
727
+ collectionName: "employees"
728
+ },
729
+ defaultFilter: makePublicBlockDefaultFilter([
730
+ {
731
+ path: "nickname",
732
+ operator: "$includes",
733
+ value: ""
734
+ }
735
+ ]),
736
+ fields: [
737
+ "nickname",
738
+ {
739
+ fieldPath: "department.name"
740
+ }
741
+ ],
742
+ actions: ["addNew", "refresh"],
743
+ recordActions: ["view", "edit", "updateRecord", "delete"],
744
+ settings: {
745
+ columns: 3,
746
+ rowCount: 2,
747
+ layout: "vertical"
748
+ }
749
+ }
750
+ ]
751
+ },
752
+ composeJsBlock: {
753
+ target: {
754
+ uid: "page-grid-uid"
755
+ },
756
+ blocks: [
757
+ {
758
+ key: "customHero",
759
+ type: "jsBlock",
760
+ settings: {
761
+ title: "Custom hero",
762
+ description: "Rendered by JS block runtime",
763
+ className: "hero-shell",
764
+ version: "1.0.0",
765
+ code: "ctx.render('<div>Hello from JS block</div>');"
766
+ }
767
+ }
768
+ ]
769
+ },
770
+ configure: {
771
+ target: {
772
+ uid: "details-field-uid"
773
+ },
774
+ changes: {
775
+ clickToOpen: true,
776
+ openView: {
777
+ dataSourceKey: "main",
778
+ collectionName: "departments",
779
+ associationName: "users.department",
780
+ mode: "drawer"
781
+ }
782
+ }
783
+ },
784
+ configureAssociationPopup: {
785
+ target: {
786
+ uid: "roles-field-wrapper-uid"
787
+ },
788
+ changes: {
789
+ clickToOpen: true,
790
+ openView: {
791
+ dataSourceKey: "main",
792
+ collectionName: "roles",
793
+ associationName: "users.roles",
794
+ mode: "drawer"
795
+ }
796
+ }
797
+ },
798
+ configureBlock: {
799
+ target: {
800
+ uid: "list-block-uid"
801
+ },
802
+ changes: {
803
+ pageSize: 50,
804
+ dataScope: {
805
+ logic: "$and",
806
+ items: [
807
+ {
808
+ path: "nickname",
809
+ operator: "$eq",
810
+ value: "beta"
811
+ }
812
+ ]
813
+ },
814
+ sorting: [
815
+ {
816
+ field: "username",
817
+ direction: "asc"
818
+ }
819
+ ],
820
+ layout: "vertical"
821
+ }
822
+ },
823
+ createMenu: {
824
+ title: "Employees",
825
+ type: "item",
826
+ parentMenuRouteId: 1001
827
+ },
828
+ updateMenu: {
829
+ menuRouteId: 1002,
830
+ title: "Employees Center",
831
+ parentMenuRouteId: null
832
+ },
833
+ configureAction: {
834
+ target: {
835
+ uid: "update-record-action-uid"
836
+ },
837
+ changes: {
838
+ title: "Quick update",
839
+ type: "primary",
840
+ color: "gold",
841
+ htmlType: "button",
842
+ position: "end",
843
+ confirm: {
844
+ enable: true,
845
+ title: "Confirm update",
846
+ content: "Apply assigned values?"
847
+ },
848
+ assignValues: {
849
+ status: "active"
850
+ }
851
+ }
852
+ },
853
+ configureJsBlock: {
854
+ target: {
855
+ uid: "js-block-uid"
856
+ },
857
+ changes: {
858
+ title: "Users hero",
859
+ description: "Rendered from FlowSurfaces configure",
860
+ className: "users-hero",
861
+ version: "1.0.1",
862
+ code: "ctx.render('<div>Users hero</div>');"
863
+ }
864
+ },
865
+ configureJsAction: {
866
+ target: {
867
+ uid: "js-action-uid"
868
+ },
869
+ changes: {
870
+ title: "Run diagnostics",
871
+ type: "primary",
872
+ version: "1.0.1",
873
+ code: `await ctx.runjs('console.log("diagnostics")');`
874
+ }
875
+ },
876
+ configureJsItemAction: {
877
+ target: {
878
+ uid: "js-item-action-uid"
879
+ },
880
+ changes: {
881
+ title: "Run item diagnostics",
882
+ type: "default",
883
+ version: "1.0.1",
884
+ code: `await ctx.runjs('console.log("item diagnostics")');`
885
+ }
886
+ },
887
+ configureJsField: {
888
+ target: {
889
+ uid: "js-field-wrapper-uid"
890
+ },
891
+ changes: {
892
+ label: "Custom renderer",
893
+ version: "1.0.1",
894
+ code: "ctx.render(String(ctx.record?.nickname?.toUpperCase?.() || ''));"
895
+ }
896
+ },
897
+ configureJsColumn: {
898
+ target: {
899
+ uid: "js-column-uid"
900
+ },
901
+ changes: {
902
+ title: "JS column",
903
+ width: 240,
904
+ fixed: "left",
905
+ version: "1.0.1",
906
+ code: "ctx.render(String(ctx.record?.username || ''));"
907
+ }
908
+ },
909
+ configureJsItem: {
910
+ target: {
911
+ uid: "js-item-uid"
912
+ },
913
+ changes: {
914
+ label: "JS item",
915
+ showLabel: true,
916
+ labelWidth: 120,
917
+ version: "1.0.1",
918
+ code: "ctx.render(String(ctx.record?.nickname || ''));"
919
+ }
920
+ },
921
+ configurePage: {
922
+ target: {
923
+ uid: "employees-page-uid"
924
+ },
925
+ changes: {
926
+ icon: "UserOutlined",
927
+ enableHeader: false
928
+ }
929
+ },
930
+ configureTableAdvanced: {
931
+ target: {
932
+ uid: "tree-table-block-uid"
933
+ },
934
+ changes: {
935
+ quickEdit: true,
936
+ treeTable: true,
937
+ defaultExpandAllRows: true,
938
+ dragSort: true,
939
+ dragSortBy: "sort"
940
+ }
941
+ },
942
+ configureEditForm: {
943
+ target: {
944
+ uid: "edit-form-block-uid"
945
+ },
946
+ changes: {
947
+ colon: false,
948
+ dataScope: {
949
+ logic: "$and",
950
+ items: [
951
+ {
952
+ path: "status",
953
+ operator: "$eq",
954
+ value: "draft"
955
+ }
956
+ ]
957
+ }
958
+ }
959
+ },
960
+ configureDetailsCompatibility: {
961
+ target: {
962
+ uid: "details-block-uid"
963
+ },
964
+ changes: {
965
+ colon: true,
966
+ linkageRules: [
967
+ {
968
+ when: {
969
+ path: "status",
970
+ operator: "$eq",
971
+ value: "archived"
972
+ },
973
+ set: {
974
+ hidden: true
975
+ }
976
+ }
977
+ ]
978
+ }
979
+ },
980
+ composePopupCurrentRecord: {
981
+ target: {
982
+ uid: "view-action-uid"
983
+ },
984
+ mode: "replace",
985
+ blocks: [
986
+ {
987
+ key: "details",
988
+ type: "details",
989
+ resource: {
990
+ binding: "currentRecord"
991
+ },
992
+ fields: ["nickname", "department.title"]
993
+ }
994
+ ]
995
+ },
996
+ composePopupAssociatedRecords: {
997
+ target: {
998
+ uid: "association-popup-action-uid"
999
+ },
1000
+ mode: "replace",
1001
+ blocks: [
1002
+ {
1003
+ key: "employees",
1004
+ type: "table",
1005
+ resource: {
1006
+ binding: "associatedRecords",
1007
+ associationField: "employee"
1008
+ },
1009
+ fields: ["nickname", "status"],
1010
+ actions: ["refresh"],
1011
+ recordActions: ["view", "edit"]
1012
+ }
1013
+ ]
1014
+ },
1015
+ configureActionModesCompatibility: {
1016
+ target: {
1017
+ uid: "compose-email-action-uid"
1018
+ },
1019
+ changes: {
1020
+ linkageRules: [
1021
+ {
1022
+ when: {
1023
+ path: "status",
1024
+ operator: "$eq",
1025
+ value: "draft"
1026
+ },
1027
+ set: {
1028
+ disabled: true
1029
+ }
1030
+ }
1031
+ ],
1032
+ editMode: "drawer",
1033
+ updateMode: "overwrite",
1034
+ duplicateMode: "popup",
1035
+ collapsedRows: 2,
1036
+ defaultCollapsed: true,
1037
+ emailFieldNames: ["email", "backupEmail"],
1038
+ defaultSelectAllRecords: true
1039
+ }
1040
+ },
1041
+ createPage: {
1042
+ menuRouteId: 1002,
1043
+ title: "Employees",
1044
+ tabTitle: "Overview",
1045
+ enableTabs: true,
1046
+ displayTitle: true,
1047
+ documentTitle: "Employees workspace",
1048
+ tabDocumentTitle: "Employees overview"
1049
+ },
1050
+ addTab: {
1051
+ target: {
1052
+ uid: "employees-page-uid"
1053
+ },
1054
+ title: "Details",
1055
+ icon: "TableOutlined",
1056
+ documentTitle: "Employee details tab"
1057
+ },
1058
+ updateTab: {
1059
+ target: {
1060
+ uid: "details-tab-schema"
1061
+ },
1062
+ title: "Details",
1063
+ icon: "TableOutlined",
1064
+ documentTitle: "Employee details tab",
1065
+ flowRegistry: {
1066
+ beforeRenderApply: {
1067
+ key: "beforeRenderApply",
1068
+ on: "beforeRender",
1069
+ steps: {}
1070
+ }
1071
+ }
1072
+ },
1073
+ addPopupTab: {
1074
+ target: {
1075
+ uid: "view-action-popup-page-uid"
1076
+ },
1077
+ title: "Popup details",
1078
+ icon: "TableOutlined",
1079
+ documentTitle: "Popup details tab"
1080
+ },
1081
+ updatePopupTab: {
1082
+ target: {
1083
+ uid: "popup-secondary-tab-uid"
1084
+ },
1085
+ title: "Popup details updated",
1086
+ icon: "AppstoreOutlined",
1087
+ documentTitle: "Popup details updated tab",
1088
+ flowRegistry: {
1089
+ beforeRenderApply: {
1090
+ key: "beforeRenderApply",
1091
+ on: "beforeRender",
1092
+ steps: {}
1093
+ }
1094
+ }
1095
+ },
1096
+ movePopupTab: {
1097
+ sourceUid: "popup-secondary-tab-uid",
1098
+ targetUid: "popup-primary-tab-uid",
1099
+ position: "before"
1100
+ },
1101
+ removePopupTab: {
1102
+ target: {
1103
+ uid: "popup-secondary-tab-uid"
1104
+ }
1105
+ },
1106
+ addBlock: {
1107
+ target: {
1108
+ uid: "view-action-uid"
1109
+ },
1110
+ type: "details",
1111
+ resource: {
1112
+ binding: "currentRecord"
1113
+ }
1114
+ },
1115
+ addTableBlockWithDefaultFilters: {
1116
+ target: {
1117
+ uid: "page-grid-uid"
1118
+ },
1119
+ type: "table",
1120
+ defaultFilter: makePublicBlockDefaultFilter([
1121
+ {
1122
+ path: "username",
1123
+ operator: "$includes",
1124
+ value: "staff"
1125
+ }
1126
+ ]),
1127
+ resourceInit: {
1128
+ dataSourceKey: "main",
1129
+ collectionName: "users"
1130
+ },
1131
+ defaultActionSettings: {
1132
+ filter: {
1133
+ filterableFieldNames: ["username", "email", "status"],
1134
+ defaultFilter: {
1135
+ logic: "$and",
1136
+ items: [
1137
+ {
1138
+ path: "username",
1139
+ operator: "$includes",
1140
+ value: ""
1141
+ },
1142
+ {
1143
+ path: "email",
1144
+ operator: "$includes",
1145
+ value: ""
1146
+ },
1147
+ {
1148
+ path: "status",
1149
+ operator: "$eq",
1150
+ value: ""
1151
+ }
1152
+ ]
1153
+ }
1154
+ }
1155
+ }
1156
+ },
1157
+ addPopupAssociatedBlock: {
1158
+ target: {
1159
+ uid: "association-popup-action-uid"
1160
+ },
1161
+ type: "table",
1162
+ resource: {
1163
+ binding: "associatedRecords",
1164
+ associationField: "employee"
1165
+ }
1166
+ },
1167
+ addPopupOtherRecordsBlock: {
1168
+ target: {
1169
+ uid: "popup-action-uid"
1170
+ },
1171
+ type: "table",
1172
+ resource: {
1173
+ binding: "otherRecords",
1174
+ dataSourceKey: "main",
1175
+ collectionName: "departments"
1176
+ }
1177
+ },
1178
+ addJsBlock: {
1179
+ target: {
1180
+ uid: "page-grid-uid"
1181
+ },
1182
+ type: "jsBlock",
1183
+ settings: {
1184
+ title: "Users banner",
1185
+ description: "Custom JS rendered banner",
1186
+ version: "1.0.0",
1187
+ code: "ctx.render('<div>Users banner</div>');"
1188
+ }
1189
+ },
1190
+ addField: {
1191
+ target: {
1192
+ uid: "create-form-block-uid"
1193
+ },
1194
+ fieldPath: "nickname",
1195
+ renderer: "js",
1196
+ settings: {
1197
+ label: "Nickname (JS)",
1198
+ code: "ctx.render(String(ctx.value?.toUpperCase?.() || ctx.value || ''));",
1199
+ version: "1.0.0"
1200
+ }
1201
+ },
1202
+ addAssociationField: {
1203
+ target: {
1204
+ uid: "table-block-uid"
1205
+ },
1206
+ fieldPath: "title",
1207
+ associationPathName: "department",
1208
+ settings: {
1209
+ title: "Department title",
1210
+ width: 240
1211
+ },
1212
+ popup: {
1213
+ mode: "replace",
1214
+ blocks: [
1215
+ {
1216
+ key: "departmentDetails",
1217
+ type: "details",
1218
+ resource: {
1219
+ binding: "currentRecord"
1220
+ },
1221
+ fields: ["title", "manager.nickname"]
1222
+ }
1223
+ ]
1224
+ }
1225
+ },
1226
+ addJsColumn: {
1227
+ target: {
1228
+ uid: "table-block-uid"
1229
+ },
1230
+ type: "jsColumn",
1231
+ settings: {
1232
+ title: "Runtime column",
1233
+ width: 240,
1234
+ version: "1.0.0",
1235
+ code: "ctx.render(String(ctx.record?.nickname || ''));"
1236
+ }
1237
+ },
1238
+ addJsItem: {
1239
+ target: {
1240
+ uid: "create-form-grid-uid"
1241
+ },
1242
+ type: "jsItem",
1243
+ settings: {
1244
+ label: "Runtime item",
1245
+ showLabel: true,
1246
+ version: "1.0.0",
1247
+ code: "ctx.render(String(ctx.record?.nickname || ''));"
1248
+ }
1249
+ },
1250
+ addFieldPopupTemplate: {
1251
+ target: {
1252
+ uid: "details-block-uid"
1253
+ },
1254
+ fieldPath: "nickname",
1255
+ popup: {
1256
+ template: {
1257
+ uid: "employee-popup-template",
1258
+ mode: "reference"
1259
+ }
1260
+ }
1261
+ },
1262
+ addFieldAutoPopupTemplate: {
1263
+ target: {
1264
+ uid: "details-block-uid"
1265
+ },
1266
+ fieldPath: "department.title",
1267
+ popup: {
1268
+ tryTemplate: true
1269
+ }
1270
+ },
1271
+ addFieldDefaultEditPopup: {
1272
+ target: {
1273
+ uid: "details-block-uid"
1274
+ },
1275
+ fieldPath: "department.title",
1276
+ popup: {
1277
+ defaultType: "edit"
1278
+ }
1279
+ },
1280
+ addFieldSavePopupTemplate: {
1281
+ target: {
1282
+ uid: "details-block-uid"
1283
+ },
1284
+ fieldPath: "nickname",
1285
+ popup: {
1286
+ blocks: [
1287
+ {
1288
+ key: "employee-popup-details",
1289
+ type: "details",
1290
+ resource: {
1291
+ binding: "currentRecord"
1292
+ },
1293
+ fields: ["nickname"]
1294
+ }
1295
+ ],
1296
+ saveAsTemplate: {
1297
+ name: "employee-popup-template",
1298
+ description: "Save this explicit field popup as a reusable popup template."
1299
+ }
1300
+ }
1301
+ },
1302
+ addAction: {
1303
+ target: {
1304
+ uid: "filter-form-block-uid"
1305
+ },
1306
+ type: "submit",
1307
+ settings: {
1308
+ title: "Apply filters",
1309
+ confirm: false
1310
+ }
1311
+ },
1312
+ addLinkAction: {
1313
+ target: {
1314
+ uid: "table-block-uid"
1315
+ },
1316
+ type: "link",
1317
+ settings: {
1318
+ title: "Open docs"
1319
+ }
1320
+ },
1321
+ addAutoPopupAction: {
1322
+ target: {
1323
+ uid: "table-block-uid"
1324
+ },
1325
+ type: "popup",
1326
+ popup: {
1327
+ tryTemplate: true
1328
+ }
1329
+ },
1330
+ addSavePopupAction: {
1331
+ target: {
1332
+ uid: "table-block-uid"
1333
+ },
1334
+ type: "popup",
1335
+ popup: {
1336
+ blocks: [
1337
+ {
1338
+ key: "employee-popup-table",
1339
+ type: "table",
1340
+ resource: {
1341
+ binding: "currentCollection"
1342
+ },
1343
+ fields: ["username", "nickname"]
1344
+ }
1345
+ ],
1346
+ saveAsTemplate: {
1347
+ name: "employee-popup-template",
1348
+ description: "Save this explicit action popup as a reusable popup template."
1349
+ }
1350
+ }
1351
+ },
1352
+ addJsAction: {
1353
+ target: {
1354
+ uid: "action-panel-uid"
1355
+ },
1356
+ type: "js",
1357
+ settings: {
1358
+ title: "Run JS",
1359
+ type: "primary",
1360
+ version: "1.0.0",
1361
+ code: `await ctx.runjs('console.log("hello")');`
1362
+ }
1363
+ },
1364
+ addJsItemAction: {
1365
+ target: {
1366
+ uid: "create-form-uid"
1367
+ },
1368
+ type: "jsItem",
1369
+ settings: {
1370
+ title: "Run item JS",
1371
+ type: "default",
1372
+ version: "1.0.0",
1373
+ code: `await ctx.runjs('console.log("item")');`
1374
+ }
1375
+ },
1376
+ addRecordAction: {
1377
+ target: {
1378
+ uid: "table-block-uid"
1379
+ },
1380
+ type: "view",
1381
+ settings: {
1382
+ title: "View user",
1383
+ openView: {
1384
+ dataSourceKey: "main",
1385
+ collectionName: "users",
1386
+ mode: "drawer"
1387
+ }
1388
+ },
1389
+ popup: {
1390
+ mode: "replace",
1391
+ blocks: [
1392
+ {
1393
+ key: "details",
1394
+ type: "details",
1395
+ resource: {
1396
+ dataSourceKey: "main",
1397
+ collectionName: "users"
1398
+ },
1399
+ fields: ["username", "nickname"]
1400
+ }
1401
+ ]
1402
+ }
1403
+ },
1404
+ addRecordAutoPopupTemplate: {
1405
+ target: {
1406
+ uid: "table-block-uid"
1407
+ },
1408
+ type: "view",
1409
+ popup: {
1410
+ tryTemplate: true
1411
+ }
1412
+ },
1413
+ addRecordSavePopupTemplate: {
1414
+ target: {
1415
+ uid: "table-block-uid"
1416
+ },
1417
+ type: "view",
1418
+ popup: {
1419
+ blocks: [
1420
+ {
1421
+ key: "employee-record-popup-details",
1422
+ type: "details",
1423
+ resource: {
1424
+ binding: "currentRecord"
1425
+ },
1426
+ fields: ["username", "nickname"]
1427
+ }
1428
+ ],
1429
+ saveAsTemplate: {
1430
+ name: "employee-popup-template",
1431
+ description: "Save this explicit record-action popup as a reusable popup template."
1432
+ }
1433
+ }
1434
+ },
1435
+ addRecordAddChildAction: {
1436
+ target: {
1437
+ uid: "tree-table-block-uid"
1438
+ },
1439
+ type: "addChild",
1440
+ settings: {
1441
+ title: "Add child category",
1442
+ openView: {
1443
+ dataSourceKey: "main",
1444
+ collectionName: "categories",
1445
+ mode: "drawer"
1446
+ }
1447
+ }
1448
+ },
1449
+ addRecordJsAction: {
1450
+ target: {
1451
+ uid: "details-block-uid"
1452
+ },
1453
+ type: "js",
1454
+ settings: {
1455
+ title: "Inspect record",
1456
+ type: "default",
1457
+ version: "1.0.0",
1458
+ code: "return currentRecord?.id;"
1459
+ }
1460
+ },
1461
+ addBlocks: {
1462
+ target: {
1463
+ uid: "page-grid-uid"
1464
+ },
1465
+ blocks: [
1466
+ {
1467
+ key: "usersTable",
1468
+ type: "table",
1469
+ defaultFilter: makePublicBlockDefaultFilter([
1470
+ {
1471
+ path: "username",
1472
+ operator: "$includes",
1473
+ value: "staff"
1474
+ }
1475
+ ]),
1476
+ resourceInit: {
1477
+ dataSourceKey: "main",
1478
+ collectionName: "users"
1479
+ },
1480
+ settings: {
1481
+ title: "Users table",
1482
+ pageSize: 50
1483
+ },
1484
+ defaultActionSettings: {
1485
+ filter: {
1486
+ filterableFieldNames: ["username", "email", "status"],
1487
+ defaultFilter: {
1488
+ logic: "$and",
1489
+ items: [
1490
+ {
1491
+ path: "username",
1492
+ operator: "$includes",
1493
+ value: ""
1494
+ },
1495
+ {
1496
+ path: "email",
1497
+ operator: "$includes",
1498
+ value: ""
1499
+ },
1500
+ {
1501
+ path: "status",
1502
+ operator: "$eq",
1503
+ value: ""
1504
+ }
1505
+ ]
1506
+ }
1507
+ }
1508
+ }
1509
+ },
1510
+ {
1511
+ key: "teamNotes",
1512
+ type: "markdown",
1513
+ settings: {
1514
+ content: "# Team notes"
1515
+ }
1516
+ }
1517
+ ]
1518
+ },
1519
+ addFields: {
1520
+ target: {
1521
+ uid: "table-block-uid"
1522
+ },
1523
+ fields: [
1524
+ {
1525
+ key: "username",
1526
+ fieldPath: "username",
1527
+ settings: {
1528
+ title: "User name",
1529
+ width: 220
1530
+ },
1531
+ popup: {
1532
+ mode: "replace",
1533
+ blocks: [
1534
+ {
1535
+ key: "details",
1536
+ type: "details",
1537
+ resource: {
1538
+ binding: "currentRecord"
1539
+ },
1540
+ fields: ["username", "nickname"]
1541
+ }
1542
+ ]
1543
+ }
1544
+ },
1545
+ {
1546
+ key: "nickname",
1547
+ fieldPath: "nickname",
1548
+ renderer: "js",
1549
+ settings: {
1550
+ label: "Nickname (JS)",
1551
+ code: "return value;",
1552
+ version: "1.0.0"
1553
+ }
1554
+ }
1555
+ ]
1556
+ },
1557
+ addActions: {
1558
+ target: {
1559
+ uid: "filter-form-block-uid"
1560
+ },
1561
+ actions: [
1562
+ {
1563
+ key: "submit",
1564
+ type: "submit",
1565
+ settings: {
1566
+ title: "Search",
1567
+ confirm: false
1568
+ }
1569
+ },
1570
+ {
1571
+ key: "reset",
1572
+ type: "reset",
1573
+ settings: {
1574
+ title: "Reset filters"
1575
+ }
1576
+ }
1577
+ ]
1578
+ },
1579
+ addRecordActions: {
1580
+ target: {
1581
+ uid: "table-block-uid"
1582
+ },
1583
+ recordActions: [
1584
+ {
1585
+ key: "view",
1586
+ type: "view",
1587
+ settings: {
1588
+ title: "View user",
1589
+ openView: {
1590
+ dataSourceKey: "main",
1591
+ collectionName: "users",
1592
+ mode: "drawer"
1593
+ }
1594
+ },
1595
+ popup: {
1596
+ mode: "replace",
1597
+ blocks: [
1598
+ {
1599
+ key: "details",
1600
+ type: "details",
1601
+ resource: {
1602
+ dataSourceKey: "main",
1603
+ collectionName: "users"
1604
+ },
1605
+ fields: ["username"]
1606
+ }
1607
+ ]
1608
+ }
1609
+ },
1610
+ {
1611
+ key: "edit",
1612
+ type: "edit",
1613
+ settings: {
1614
+ title: "Edit user"
1615
+ }
1616
+ },
1617
+ {
1618
+ key: "delete",
1619
+ type: "delete",
1620
+ settings: {
1621
+ title: "Delete user"
1622
+ }
1623
+ }
1624
+ ]
1625
+ },
1626
+ addRecordAddChildActions: {
1627
+ target: {
1628
+ uid: "tree-table-block-uid"
1629
+ },
1630
+ recordActions: [
1631
+ {
1632
+ key: "addChild",
1633
+ type: "addChild",
1634
+ settings: {
1635
+ title: "Add child category",
1636
+ openView: {
1637
+ dataSourceKey: "main",
1638
+ collectionName: "categories",
1639
+ mode: "drawer"
1640
+ }
1641
+ }
1642
+ }
1643
+ ]
1644
+ },
1645
+ updateSettings: {
1646
+ target: {
1647
+ uid: "table-block-uid"
1648
+ },
1649
+ stepParams: {
1650
+ tableSettings: {
1651
+ pageSize: {
1652
+ pageSize: 50
1653
+ },
1654
+ tableDensity: {
1655
+ size: "middle"
1656
+ }
1657
+ }
1658
+ },
1659
+ flowRegistry: {
1660
+ beforeRenderApply: {
1661
+ key: "beforeRenderApply",
1662
+ on: "beforeRender",
1663
+ steps: {}
1664
+ }
1665
+ }
1666
+ },
1667
+ setEventFlows: {
1668
+ target: {
1669
+ uid: "view-action-uid"
1670
+ },
1671
+ flowRegistry: {
1672
+ popupSettings: {
1673
+ key: "popupSettings",
1674
+ on: "click",
1675
+ steps: {
1676
+ openView: {
1677
+ params: {
1678
+ title: "Employee details",
1679
+ size: "large"
1680
+ }
1681
+ }
1682
+ }
1683
+ }
1684
+ }
1685
+ },
1686
+ setLayout: {
1687
+ target: {
1688
+ uid: "page-grid-uid"
1689
+ },
1690
+ rows: {
1691
+ row1: [["block-a"], ["block-b"]]
1692
+ },
1693
+ sizes: {
1694
+ row1: [12, 12]
1695
+ },
1696
+ rowOrder: ["row1"]
1697
+ },
1698
+ moveNode: {
1699
+ sourceUid: "block-b",
1700
+ targetUid: "block-a",
1701
+ position: "before"
1702
+ },
1703
+ removeNode: {
1704
+ target: {
1705
+ uid: "obsolete-block-uid"
1706
+ }
1707
+ },
1708
+ mutate: {
1709
+ atomic: true,
1710
+ ops: [
1711
+ {
1712
+ opId: "menu",
1713
+ type: "createMenu",
1714
+ values: {
1715
+ title: "Employees",
1716
+ type: "item"
1717
+ }
1718
+ },
1719
+ {
1720
+ opId: "page",
1721
+ type: "createPage",
1722
+ values: {
1723
+ menuRouteId: {
1724
+ step: "menu",
1725
+ path: "routeId"
1726
+ },
1727
+ tabTitle: "Overview"
1728
+ }
1729
+ },
1730
+ {
1731
+ opId: "table",
1732
+ type: "addBlock",
1733
+ values: {
1734
+ target: {
1735
+ uid: {
1736
+ step: "page",
1737
+ path: "tabSchemaUid"
1738
+ }
1739
+ },
1740
+ type: "table",
1741
+ resourceInit: {
1742
+ dataSourceKey: "main",
1743
+ collectionName: "employees"
1744
+ }
1745
+ }
1746
+ },
1747
+ {
1748
+ type: "addField",
1749
+ values: {
1750
+ target: {
1751
+ uid: {
1752
+ step: "table",
1753
+ path: "uid"
1754
+ }
1755
+ },
1756
+ fieldPath: "nickname"
1757
+ }
1758
+ }
1759
+ ]
1760
+ },
1761
+ apply: {
1762
+ target: {
1763
+ uid: "page-grid-uid"
1764
+ },
1765
+ mode: "replace",
1766
+ spec: {
1767
+ popup: {
1768
+ tryTemplate: true
1769
+ },
1770
+ subModels: {
1771
+ items: [
1772
+ {
1773
+ clientKey: "table-a",
1774
+ use: "TableBlockModel",
1775
+ stepParams: {
1776
+ resourceSettings: {
1777
+ init: {
1778
+ dataSourceKey: "main",
1779
+ collectionName: "employees"
1780
+ }
1781
+ }
1782
+ }
1783
+ },
1784
+ {
1785
+ clientKey: "markdown-a",
1786
+ use: "MarkdownBlockModel",
1787
+ props: {
1788
+ content: "Employee handbook"
1789
+ }
1790
+ }
1791
+ ]
1792
+ }
1793
+ }
1794
+ },
1795
+ getPopupQuery: {
1796
+ uid: "view-action-uid"
1797
+ },
1798
+ getPageQuery: {
1799
+ pageSchemaUid: "employees-page-schema"
1800
+ }
1801
+ };
1802
+ // Annotate the CommonJS export names for ESM import in node:
1803
+ 0 && (module.exports = {
1804
+ flowSurfaceExamples
1805
+ });