@nocobase/plugin-flow-engine 2.1.0-beta.20 → 2.1.0-beta.21

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 (34) hide show
  1. package/dist/externalVersion.js +10 -10
  2. package/dist/node_modules/ses/package.json +1 -1
  3. package/dist/node_modules/zod/package.json +1 -1
  4. package/dist/server/flow-surfaces/apply/compiler.js +4 -2
  5. package/dist/server/flow-surfaces/association-interfaces.d.ts +10 -0
  6. package/dist/server/flow-surfaces/association-interfaces.js +39 -0
  7. package/dist/server/flow-surfaces/blueprint/compile-blocks.js +50 -5
  8. package/dist/server/flow-surfaces/blueprint/public-types.d.ts +9 -1
  9. package/dist/server/flow-surfaces/builder.d.ts +27 -1
  10. package/dist/server/flow-surfaces/builder.js +36 -4
  11. package/dist/server/flow-surfaces/catalog.d.ts +1 -0
  12. package/dist/server/flow-surfaces/catalog.js +129 -13
  13. package/dist/server/flow-surfaces/compose-compiler.d.ts +8 -0
  14. package/dist/server/flow-surfaces/compose-compiler.js +8 -0
  15. package/dist/server/flow-surfaces/configure-options.js +39 -6
  16. package/dist/server/flow-surfaces/default-action-popup.js +2 -2
  17. package/dist/server/flow-surfaces/field-binding-registry.d.ts +1 -0
  18. package/dist/server/flow-surfaces/field-binding-registry.js +5 -0
  19. package/dist/server/flow-surfaces/field-semantics.d.ts +1 -1
  20. package/dist/server/flow-surfaces/field-semantics.js +4 -3
  21. package/dist/server/flow-surfaces/field-type-resolver.d.ts +46 -0
  22. package/dist/server/flow-surfaces/field-type-resolver.js +322 -0
  23. package/dist/server/flow-surfaces/node-use-sets.js +1 -0
  24. package/dist/server/flow-surfaces/service-utils.d.ts +13 -1
  25. package/dist/server/flow-surfaces/service-utils.js +58 -6
  26. package/dist/server/flow-surfaces/service.d.ts +17 -1
  27. package/dist/server/flow-surfaces/service.js +820 -53
  28. package/dist/server/flow-surfaces/support-matrix.js +11 -0
  29. package/dist/swagger/flow-surfaces.d.ts +173 -2
  30. package/dist/swagger/flow-surfaces.examples.d.ts +20 -15
  31. package/dist/swagger/flow-surfaces.examples.js +22 -11
  32. package/dist/swagger/flow-surfaces.js +72 -10
  33. package/dist/swagger/index.d.ts +173 -2
  34. package/package.json +2 -2
@@ -238,6 +238,17 @@ const FLOW_SURFACE_BLOCK_SUPPORT_MATRIX = [
238
238
  fixtureCaptured: true,
239
239
  readbackSupported: true,
240
240
  createSupported: true
241
+ },
242
+ {
243
+ key: "tree",
244
+ label: "Tree",
245
+ modelUse: "TreeBlockModel",
246
+ ownerPlugin: "@nocobase/plugin-block-tree",
247
+ topLevelAddable: true,
248
+ formalBuiltin: false,
249
+ fixtureCaptured: false,
250
+ readbackSupported: true,
251
+ createSupported: true
241
252
  }
242
253
  ];
243
254
  function hasFormalFlowSurfaceBlockKey(entry) {
@@ -117,6 +117,44 @@ declare const _default: {
117
117
  fieldPath: {
118
118
  type: string;
119
119
  };
120
+ fieldType: {
121
+ type: string;
122
+ enum: string[];
123
+ description: string;
124
+ };
125
+ fields: {
126
+ type: string;
127
+ items: {
128
+ type: string;
129
+ };
130
+ description: string;
131
+ };
132
+ selectorFields: {
133
+ type: string;
134
+ items: {
135
+ type: string;
136
+ };
137
+ description: string;
138
+ };
139
+ titleField: {
140
+ type: string;
141
+ };
142
+ openMode: {
143
+ type: string;
144
+ example: string;
145
+ };
146
+ popupSize: {
147
+ type: string;
148
+ example: string;
149
+ };
150
+ pageSize: {
151
+ type: string;
152
+ example: number;
153
+ };
154
+ showIndex: {
155
+ type: string;
156
+ example: boolean;
157
+ };
120
158
  renderer: {
121
159
  type: string;
122
160
  enum: string[];
@@ -157,6 +195,14 @@ declare const _default: {
157
195
  additionalProperties: boolean;
158
196
  };
159
197
  fieldPath?: undefined;
198
+ fieldType?: undefined;
199
+ fields?: undefined;
200
+ selectorFields?: undefined;
201
+ titleField?: undefined;
202
+ openMode?: undefined;
203
+ popupSize?: undefined;
204
+ pageSize?: undefined;
205
+ showIndex?: undefined;
160
206
  renderer?: undefined;
161
207
  associationPathName?: undefined;
162
208
  target?: undefined;
@@ -2025,6 +2071,44 @@ declare const _default: {
2025
2071
  type: {
2026
2072
  type: string;
2027
2073
  };
2074
+ fieldType: {
2075
+ type: string;
2076
+ enum: string[];
2077
+ description: string;
2078
+ };
2079
+ fields: {
2080
+ type: string;
2081
+ items: {
2082
+ type: string;
2083
+ };
2084
+ description: string;
2085
+ };
2086
+ selectorFields: {
2087
+ type: string;
2088
+ items: {
2089
+ type: string;
2090
+ };
2091
+ description: string;
2092
+ };
2093
+ titleField: {
2094
+ type: string;
2095
+ };
2096
+ openMode: {
2097
+ type: string;
2098
+ example: string;
2099
+ };
2100
+ popupSize: {
2101
+ type: string;
2102
+ example: string;
2103
+ };
2104
+ pageSize: {
2105
+ type: string;
2106
+ example: number;
2107
+ };
2108
+ showIndex: {
2109
+ type: string;
2110
+ example: boolean;
2111
+ };
2028
2112
  label: {
2029
2113
  type: string;
2030
2114
  };
@@ -3201,6 +3285,15 @@ declare const _default: {
3201
3285
  resourceInit: {
3202
3286
  $ref: string;
3203
3287
  };
3288
+ fields: {
3289
+ type: string;
3290
+ items: {
3291
+ $ref: string;
3292
+ };
3293
+ };
3294
+ fieldsLayout: {
3295
+ $ref: string;
3296
+ };
3204
3297
  settings: {
3205
3298
  type: string;
3206
3299
  additionalProperties: boolean;
@@ -3304,10 +3397,44 @@ declare const _default: {
3304
3397
  collectionName: {
3305
3398
  type: string;
3306
3399
  };
3307
- fieldUse: {
3400
+ fieldType: {
3308
3401
  type: string;
3402
+ enum: string[];
3403
+ description: string;
3404
+ };
3405
+ fields: {
3406
+ type: string;
3407
+ items: {
3408
+ type: string;
3409
+ };
3309
3410
  description: string;
3310
3411
  };
3412
+ selectorFields: {
3413
+ type: string;
3414
+ items: {
3415
+ type: string;
3416
+ };
3417
+ description: string;
3418
+ };
3419
+ titleField: {
3420
+ type: string;
3421
+ };
3422
+ openMode: {
3423
+ type: string;
3424
+ example: string;
3425
+ };
3426
+ popupSize: {
3427
+ type: string;
3428
+ example: string;
3429
+ };
3430
+ pageSize: {
3431
+ type: string;
3432
+ example: number;
3433
+ };
3434
+ showIndex: {
3435
+ type: string;
3436
+ example: boolean;
3437
+ };
3311
3438
  defaultTargetUid: {
3312
3439
  type: string;
3313
3440
  };
@@ -3513,6 +3640,15 @@ declare const _default: {
3513
3640
  resourceInit: {
3514
3641
  $ref: string;
3515
3642
  };
3643
+ fields: {
3644
+ type: string;
3645
+ items: {
3646
+ $ref: string;
3647
+ };
3648
+ };
3649
+ fieldsLayout: {
3650
+ $ref: string;
3651
+ };
3516
3652
  settings: {
3517
3653
  type: string;
3518
3654
  additionalProperties: boolean;
@@ -3567,8 +3703,43 @@ declare const _default: {
3567
3703
  collectionName: {
3568
3704
  type: string;
3569
3705
  };
3570
- fieldUse: {
3706
+ fieldType: {
3707
+ type: string;
3708
+ enum: string[];
3709
+ description: string;
3710
+ };
3711
+ fields: {
3712
+ type: string;
3713
+ items: {
3714
+ type: string;
3715
+ };
3716
+ description: string;
3717
+ };
3718
+ selectorFields: {
3719
+ type: string;
3720
+ items: {
3721
+ type: string;
3722
+ };
3723
+ description: string;
3724
+ };
3725
+ titleField: {
3726
+ type: string;
3727
+ };
3728
+ openMode: {
3729
+ type: string;
3730
+ example: string;
3731
+ };
3732
+ popupSize: {
3733
+ type: string;
3734
+ example: string;
3735
+ };
3736
+ pageSize: {
3737
+ type: string;
3738
+ example: number;
3739
+ };
3740
+ showIndex: {
3571
3741
  type: string;
3742
+ example: boolean;
3572
3743
  };
3573
3744
  defaultTargetUid: {
3574
3745
  type: string;
@@ -1257,7 +1257,6 @@ export declare const flowSurfaceExamples: {
1257
1257
  settings: {
1258
1258
  title: string;
1259
1259
  pageSize: number;
1260
- content?: undefined;
1261
1260
  };
1262
1261
  defaultActionSettings: {
1263
1262
  filter: {
@@ -1272,16 +1271,26 @@ export declare const flowSurfaceExamples: {
1272
1271
  };
1273
1272
  };
1274
1273
  };
1274
+ fields?: undefined;
1275
+ fieldsLayout?: undefined;
1275
1276
  } | {
1276
1277
  key: string;
1277
1278
  type: string;
1278
- settings: {
1279
- content: string;
1280
- title?: undefined;
1281
- pageSize?: undefined;
1279
+ resourceInit: {
1280
+ dataSourceKey: string;
1281
+ collectionName: string;
1282
+ };
1283
+ fields: {
1284
+ key: string;
1285
+ fieldPath: string;
1286
+ fieldType: string;
1287
+ fields: string[];
1288
+ }[];
1289
+ fieldsLayout: {
1290
+ rows: string[][];
1282
1291
  };
1283
1292
  defaultFilter?: undefined;
1284
- resourceInit?: undefined;
1293
+ settings?: undefined;
1285
1294
  defaultActionSettings?: undefined;
1286
1295
  })[];
1287
1296
  };
@@ -1295,9 +1304,6 @@ export declare const flowSurfaceExamples: {
1295
1304
  settings: {
1296
1305
  title: string;
1297
1306
  width: number;
1298
- label?: undefined;
1299
- code?: undefined;
1300
- version?: undefined;
1301
1307
  };
1302
1308
  popup: {
1303
1309
  mode: string;
@@ -1310,16 +1316,15 @@ export declare const flowSurfaceExamples: {
1310
1316
  fields: string[];
1311
1317
  }[];
1312
1318
  };
1313
- renderer?: undefined;
1319
+ fieldType?: undefined;
1320
+ fields?: undefined;
1314
1321
  } | {
1315
1322
  key: string;
1316
1323
  fieldPath: string;
1317
- renderer: string;
1324
+ fieldType: string;
1325
+ fields: string[];
1318
1326
  settings: {
1319
- label: string;
1320
- code: string;
1321
- version: string;
1322
- title?: undefined;
1327
+ title: string;
1323
1328
  width?: undefined;
1324
1329
  };
1325
1330
  popup?: undefined;
@@ -1508,17 +1508,29 @@ const flowSurfaceExamples = {
1508
1508
  }
1509
1509
  },
1510
1510
  {
1511
- key: "teamNotes",
1512
- type: "markdown",
1513
- settings: {
1514
- content: "# Team notes"
1511
+ key: "userForm",
1512
+ type: "createForm",
1513
+ resourceInit: {
1514
+ dataSourceKey: "main",
1515
+ collectionName: "users"
1516
+ },
1517
+ fields: [
1518
+ {
1519
+ key: "rolesField",
1520
+ fieldPath: "roles",
1521
+ fieldType: "popupSubTable",
1522
+ fields: ["title", "name"]
1523
+ }
1524
+ ],
1525
+ fieldsLayout: {
1526
+ rows: [["rolesField"]]
1515
1527
  }
1516
1528
  }
1517
1529
  ]
1518
1530
  },
1519
1531
  addFields: {
1520
1532
  target: {
1521
- uid: "table-block-uid"
1533
+ uid: "create-form-block-uid"
1522
1534
  },
1523
1535
  fields: [
1524
1536
  {
@@ -1543,13 +1555,12 @@ const flowSurfaceExamples = {
1543
1555
  }
1544
1556
  },
1545
1557
  {
1546
- key: "nickname",
1547
- fieldPath: "nickname",
1548
- renderer: "js",
1558
+ key: "rolesField",
1559
+ fieldPath: "roles",
1560
+ fieldType: "popupSubTable",
1561
+ fields: ["title", "name"],
1549
1562
  settings: {
1550
- label: "Nickname (JS)",
1551
- code: "return value;",
1552
- version: "1.0.0"
1563
+ title: "Roles"
1553
1564
  }
1554
1565
  }
1555
1566
  ]
@@ -132,10 +132,37 @@ const APPLY_BLUEPRINT_BLOCK_TYPE_ENUM = [
132
132
  "iframe",
133
133
  "chart",
134
134
  "actionPanel",
135
- "jsBlock"
135
+ "jsBlock",
136
+ "tree"
136
137
  ];
137
138
  const APPROVAL_BLUEPRINT_BLOCK_TYPE_ENUM = [...import_catalog_specs.APPROVAL_BLOCK_PUBLIC_KEYS];
138
139
  const COMPOSE_BLOCK_TYPE_ENUM = [...APPLY_BLUEPRINT_BLOCK_TYPE_ENUM, ...import_catalog_specs.APPROVAL_BLOCK_PUBLIC_KEYS];
140
+ const RELATION_FIELD_TYPE_ENUM = [
141
+ "text",
142
+ "select",
143
+ "picker",
144
+ "subForm",
145
+ "subFormList",
146
+ "subDetails",
147
+ "subDetailsList",
148
+ "subTable",
149
+ "popupSubTable"
150
+ ];
151
+ const RELATION_FIELD_TYPE_SCHEMA = {
152
+ type: "string",
153
+ enum: RELATION_FIELD_TYPE_ENUM,
154
+ description: "Public relation field UI presentation type. This is not the collection field data type/interface."
155
+ };
156
+ const RELATION_TARGET_FIELDS_SCHEMA = {
157
+ type: "array",
158
+ items: { type: "string" },
159
+ description: "Relation target record fields used as sub-table columns or embedded sub-form/detail fields."
160
+ };
161
+ const RELATION_SELECTOR_FIELDS_SCHEMA = {
162
+ type: "array",
163
+ items: { type: "string" },
164
+ description: "Record picker selector table fields. Do not mix with fields on the same field object."
165
+ };
139
166
  const ADD_CHILD_TREE_TABLE_NOTE = "`addChild` is only valid when the live target `catalog.recordActions` exposes it, which normally means a table bound to a tree collection with `treeTable` enabled.";
140
167
  const APPLY_BLUEPRINT_ADD_CHILD_NOTE = "`addChild` is not auto-promoted from `actions`; author it only under `recordActions`, and only when the live target `catalog.recordActions` exposes it for a tree table.";
141
168
  const REACTION_FINGERPRINT_DESCRIPTION = "Optional optimistic-concurrency fingerprint from `getReactionMeta.capabilities[].fingerprint`. When provided, the write fails with HTTP 409 if the current slot fingerprint no longer matches.";
@@ -811,7 +838,7 @@ const actionDocs = {
811
838
  tags: [FLOW_SURFACES_TAG],
812
839
  summary: "Add a field wrapper and inner field under a field container",
813
840
  description: valuesCompatibilityNote(
814
- "Automatically derives the wrapper/inner-field combination from the container use and the field interface. It can also import a form template through `template`, using `reference` or `copy` mode for the target form grid. `fieldUse` is only kept as a compatibility check and is no longer an arbitrary creation entry. Direct add does not accept raw `wrapperProps` / `fieldProps` / `props` / `decoratorProps` / `stepParams` / `flowRegistry`. Use `settings` and reuse the public configuration semantics from `configure.changes` plus the catalog item/node `configureOptions`. Popup-capable fields can also pass `popup` directly to append a local popup subtree or `popup.template` to reuse a saved popup template in `reference` / `copy` mode. `popup.tryTemplate=true` asks the backend to auto-select a compatible popup template first, preferring the same relation when one exists and otherwise falling back to a compatible non-relation template. It may be combined with `popup.saveAsTemplate={ name, description }`: a hit reuses the matched template directly, while a miss requires explicit local `popup.blocks` so the fallback popup can be saved as a template reference. When `popup.template` is present, `popup.title` still applies, while local `popup.mode` / `popup.blocks` / `popup.layout` are accepted but ignored. If local openView is enabled but no popup content is provided, the server fills in the popup page/tab/grid shell automatically. Under approval forms, direct field creation preserves the `PatternFormFieldModel` inner node semantics and does not allow standalone `jsItem`."
841
+ "Automatically derives the wrapper/inner-field combination from the container use and the field interface. Relation fields can request a public `fieldType` such as `picker`, `subTable`, or `popupSubTable`, with optional flat `fields`, `selectorFields`, and `titleField`. Direct add does not accept raw `wrapperProps` / `fieldProps` / `props` / `decoratorProps` / `stepParams` / `flowRegistry` or internal field model keys. Use `settings` and reuse the public configuration semantics from `configure.changes` plus the catalog item/node `configureOptions`. Popup-capable fields can also pass `popup` directly to append a local popup subtree or `popup.template` to reuse a saved popup template in `reference` / `copy` mode. `popup.tryTemplate=true` asks the backend to auto-select a compatible popup template first, preferring the same relation when one exists and otherwise falling back to a compatible non-relation template. It may be combined with `popup.saveAsTemplate={ name, description }`: a hit reuses the matched template directly, while a miss requires explicit local `popup.blocks` so the fallback popup can be saved as a template reference. When `popup.template` is present, `popup.title` still applies, while local `popup.mode` / `popup.blocks` / `popup.layout` are accepted but ignored. If local openView is enabled but no popup content is provided, the server fills in the popup page/tab/grid shell automatically. Under approval forms, direct field creation preserves the `PatternFormFieldModel` inner node semantics and does not allow standalone `jsItem`."
815
842
  ),
816
843
  requestBody: {
817
844
  required: true,
@@ -941,7 +968,7 @@ const actionDocs = {
941
968
  tags: [FLOW_SURFACES_TAG],
942
969
  summary: "Add multiple blocks sequentially under the same target",
943
970
  description: valuesCompatibilityNote(
944
- "Creates multiple blocks sequentially under the same target. Each item may include `settings`, `defaultFilter`, `defaultActionSettings`, or `template`, but raw `props` / `decoratorProps` / `stepParams` / `flowRegistry` are not accepted. Direct `table` / `list` / `gridCard` / `calendar` / `kanban` items may use block-level `defaultFilter` to backfill the auto-created default filter action; backend runtime compatibility remains tolerant of omitted or empty values. Legacy `defaultActionSettings.filter.defaultFilter` is still supported for compatibility and wins when both are provided. Partial-success semantics apply: a failure in one item does not roll back the others. Results are returned in input order as `index/key/ok/result/error`, and each `error` always includes `message/type/code/status`."
971
+ "Creates multiple blocks sequentially under the same target. Each item may include `settings`, `defaultFilter`, `defaultActionSettings`, `template`, or inline `fields` / `fieldsLayout`, but raw `props` / `decoratorProps` / `stepParams` / `flowRegistry` are not accepted. Inline fields use the same public field semantics as compose/addField, including relation `fieldType`. Direct `table` / `list` / `gridCard` / `calendar` / `kanban` items may use block-level `defaultFilter` to backfill the auto-created default filter action; backend runtime compatibility remains tolerant of omitted or empty values. Legacy `defaultActionSettings.filter.defaultFilter` is still supported for compatibility and wins when both are provided. Partial-success semantics apply: a failure in one item does not roll back the others. Results are returned in input order as `index/key/ok/result/error`, and each `error` always includes `message/type/code/status`."
945
972
  ),
946
973
  requestBody: requestBody("FlowSurfaceAddBlocksRequest", import_flow_surfaces.flowSurfaceExamples.addBlocks),
947
974
  responses: responses("FlowSurfaceAddBlocksResult")
@@ -2124,6 +2151,14 @@ const schemas = {
2124
2151
  fieldPath: {
2125
2152
  type: "string"
2126
2153
  },
2154
+ fieldType: RELATION_FIELD_TYPE_SCHEMA,
2155
+ fields: RELATION_TARGET_FIELDS_SCHEMA,
2156
+ selectorFields: RELATION_SELECTOR_FIELDS_SCHEMA,
2157
+ titleField: { type: "string" },
2158
+ openMode: { type: "string", example: "drawer" },
2159
+ popupSize: { type: "string", example: "medium" },
2160
+ pageSize: { type: "number", example: 10 },
2161
+ showIndex: { type: "boolean", example: true },
2127
2162
  renderer: {
2128
2163
  type: "string",
2129
2164
  enum: ["js"],
@@ -3384,6 +3419,14 @@ const schemas = {
3384
3419
  associationPathName: { type: "string" },
3385
3420
  renderer: { type: "string" },
3386
3421
  type: { type: "string" },
3422
+ fieldType: RELATION_FIELD_TYPE_SCHEMA,
3423
+ fields: RELATION_TARGET_FIELDS_SCHEMA,
3424
+ selectorFields: RELATION_SELECTOR_FIELDS_SCHEMA,
3425
+ titleField: { type: "string" },
3426
+ openMode: { type: "string", example: "drawer" },
3427
+ popupSize: { type: "string", example: "medium" },
3428
+ pageSize: { type: "number", example: 10 },
3429
+ showIndex: { type: "boolean", example: true },
3387
3430
  label: { type: "string" },
3388
3431
  target: {
3389
3432
  type: "string",
@@ -4284,6 +4327,11 @@ const schemas = {
4284
4327
  template: ref("FlowSurfaceBlockTemplateRef"),
4285
4328
  resource: ref("FlowSurfaceBlockResourceInput"),
4286
4329
  resourceInit: ref("FlowSurfaceResourceInit"),
4330
+ fields: {
4331
+ type: "array",
4332
+ items: ref("FlowSurfaceComposeFieldSpec")
4333
+ },
4334
+ fieldsLayout: ref("FlowSurfaceComposeLayout"),
4287
4335
  settings: ANY_OBJECT_SCHEMA,
4288
4336
  defaultFilter: {
4289
4337
  allOf: [ref("FlowSurfaceFilterGroup")],
@@ -4375,10 +4423,14 @@ const schemas = {
4375
4423
  collectionName: {
4376
4424
  type: "string"
4377
4425
  },
4378
- fieldUse: {
4379
- type: "string",
4380
- description: "Optional compatibility check. The server infers the actual field use from catalog capabilities."
4381
- },
4426
+ fieldType: RELATION_FIELD_TYPE_SCHEMA,
4427
+ fields: RELATION_TARGET_FIELDS_SCHEMA,
4428
+ selectorFields: RELATION_SELECTOR_FIELDS_SCHEMA,
4429
+ titleField: { type: "string" },
4430
+ openMode: { type: "string", example: "drawer" },
4431
+ popupSize: { type: "string", example: "medium" },
4432
+ pageSize: { type: "number", example: 10 },
4433
+ showIndex: { type: "boolean", example: true },
4382
4434
  defaultTargetUid: {
4383
4435
  type: "string"
4384
4436
  },
@@ -4553,6 +4605,11 @@ const schemas = {
4553
4605
  template: ref("FlowSurfaceBlockTemplateRef"),
4554
4606
  resource: ref("FlowSurfaceBlockResourceInput"),
4555
4607
  resourceInit: ref("FlowSurfaceResourceInit"),
4608
+ fields: {
4609
+ type: "array",
4610
+ items: ref("FlowSurfaceComposeFieldSpec")
4611
+ },
4612
+ fieldsLayout: ref("FlowSurfaceComposeLayout"),
4556
4613
  settings: ANY_OBJECT_SCHEMA,
4557
4614
  defaultFilter: {
4558
4615
  allOf: [ref("FlowSurfaceFilterGroup")],
@@ -4597,9 +4654,14 @@ const schemas = {
4597
4654
  collectionName: {
4598
4655
  type: "string"
4599
4656
  },
4600
- fieldUse: {
4601
- type: "string"
4602
- },
4657
+ fieldType: RELATION_FIELD_TYPE_SCHEMA,
4658
+ fields: RELATION_TARGET_FIELDS_SCHEMA,
4659
+ selectorFields: RELATION_SELECTOR_FIELDS_SCHEMA,
4660
+ titleField: { type: "string" },
4661
+ openMode: { type: "string", example: "drawer" },
4662
+ popupSize: { type: "string", example: "medium" },
4663
+ pageSize: { type: "number", example: 10 },
4664
+ showIndex: { type: "boolean", example: true },
4603
4665
  defaultTargetUid: {
4604
4666
  type: "string"
4605
4667
  },