@nocobase/plugin-flow-engine 2.1.0-alpha.23 → 2.1.0-alpha.25

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 (49) hide show
  1. package/dist/ai/ai-employees/nathan/skills/frontend-developer/SKILLS.md +2 -2
  2. package/dist/externalVersion.js +10 -10
  3. package/dist/node_modules/ses/package.json +1 -1
  4. package/dist/node_modules/zod/package.json +1 -1
  5. package/dist/server/flow-surfaces/action-scope.d.ts +1 -0
  6. package/dist/server/flow-surfaces/action-scope.js +4 -0
  7. package/dist/server/flow-surfaces/apply/compiler.js +4 -2
  8. package/dist/server/flow-surfaces/association-interfaces.d.ts +10 -0
  9. package/dist/server/flow-surfaces/association-interfaces.js +39 -0
  10. package/dist/server/flow-surfaces/association-title-field.d.ts +1 -1
  11. package/dist/server/flow-surfaces/association-title-field.js +38 -4
  12. package/dist/server/flow-surfaces/blueprint/compile-blocks.js +72 -5
  13. package/dist/server/flow-surfaces/blueprint/public-types.d.ts +9 -1
  14. package/dist/server/flow-surfaces/builder.d.ts +27 -1
  15. package/dist/server/flow-surfaces/builder.js +105 -5
  16. package/dist/server/flow-surfaces/catalog.d.ts +2 -1
  17. package/dist/server/flow-surfaces/catalog.js +316 -119
  18. package/dist/server/flow-surfaces/compose-compiler.d.ts +8 -0
  19. package/dist/server/flow-surfaces/compose-compiler.js +9 -1
  20. package/dist/server/flow-surfaces/configure-options.js +72 -6
  21. package/dist/server/flow-surfaces/core-field-default-bindings.d.ts +12 -0
  22. package/dist/server/flow-surfaces/core-field-default-bindings.js +157 -0
  23. package/dist/server/flow-surfaces/default-action-popup.js +2 -2
  24. package/dist/server/flow-surfaces/default-block-actions.js +24 -0
  25. package/dist/server/flow-surfaces/field-binding-registry.d.ts +1 -0
  26. package/dist/server/flow-surfaces/field-binding-registry.js +5 -0
  27. package/dist/server/flow-surfaces/field-semantics.d.ts +1 -1
  28. package/dist/server/flow-surfaces/field-semantics.js +7 -4
  29. package/dist/server/flow-surfaces/field-type-resolver.d.ts +46 -0
  30. package/dist/server/flow-surfaces/field-type-resolver.js +322 -0
  31. package/dist/server/flow-surfaces/index.js +61 -2
  32. package/dist/server/flow-surfaces/node-use-sets.js +4 -0
  33. package/dist/server/flow-surfaces/placement.js +3 -0
  34. package/dist/server/flow-surfaces/public-data-surface-default-filter.d.ts +4 -0
  35. package/dist/server/flow-surfaces/public-data-surface-default-filter.js +45 -4
  36. package/dist/server/flow-surfaces/service-helpers.js +3 -70
  37. package/dist/server/flow-surfaces/service-utils.d.ts +13 -1
  38. package/dist/server/flow-surfaces/service-utils.js +58 -6
  39. package/dist/server/flow-surfaces/service.d.ts +59 -2
  40. package/dist/server/flow-surfaces/service.js +2269 -234
  41. package/dist/server/flow-surfaces/support-matrix.d.ts +1 -1
  42. package/dist/server/flow-surfaces/support-matrix.js +23 -0
  43. package/dist/server/flow-surfaces/surface-context.js +8 -5
  44. package/dist/swagger/flow-surfaces.d.ts +173 -2
  45. package/dist/swagger/flow-surfaces.examples.d.ts +59 -15
  46. package/dist/swagger/flow-surfaces.examples.js +69 -11
  47. package/dist/swagger/flow-surfaces.js +86 -17
  48. package/dist/swagger/index.d.ts +173 -2
  49. package/package.json +2 -2
@@ -43,8 +43,9 @@ const FILTER_GROUP_EXAMPLE = {
43
43
  logic: "$and",
44
44
  items: []
45
45
  };
46
- const PUBLIC_DATA_SURFACE_BLOCK_DEFAULT_FILTER_DESCRIPTION = "Supported only on direct `table`, `list`, or `gridCard` blocks. Backfills the default `filter` action `settings.defaultFilter` when that action exists or is auto-created. If the filter action already provides `settings.defaultFilter`, the action-level value wins.";
47
- const DIRECT_ADD_DEFAULT_FILTER_COMPAT_DESCRIPTION = "Public block-level `defaultFilter` is supported on direct `table` / `list` / `gridCard` creates. Legacy `defaultActionSettings.filter.defaultFilter` remains supported for compatibility and wins when both are provided.";
46
+ const PUBLIC_DATA_SURFACE_BLOCK_DEFAULT_FILTER_DESCRIPTION = 'Supported only on direct `table`, `list`, `gridCard`, `calendar`, or `kanban` blocks. The backend runtime keeps this input optional and compatibility-tolerant: omitted, `{}`, `null`, or `{ logic: "$and", items: [] }` normalize to the empty filter group. When a non-empty value is provided, it backfills the default `filter` action `settings.defaultFilter` when that action exists or is auto-created. If the filter action already provides `settings.defaultFilter`, the action-level value wins.';
47
+ const APPLY_BLUEPRINT_DATA_SURFACE_BLOCK_DEFAULT_FILTER_DESCRIPTION = "Supported only on direct `table`, `list`, `gridCard`, `calendar`, or `kanban` blocks, and must contain at least one concrete filter item. Backfills the default `filter` action `settings.defaultFilter` when that action exists or is auto-created. If the filter action already provides `settings.defaultFilter`, the action-level value wins.";
48
+ const DIRECT_ADD_DEFAULT_FILTER_COMPAT_DESCRIPTION = "Public block-level `defaultFilter` is supported on direct `table` / `list` / `gridCard` / `calendar` / `kanban` creates. Backend runtime compatibility is preserved: omitted or empty values remain accepted and normalize to the empty filter group. Legacy `defaultActionSettings.filter.defaultFilter` remains supported for compatibility and wins when both are provided.";
48
49
  const STRING_OR_INTEGER_SCHEMA = {
49
50
  oneOf: [{ type: "string" }, { type: "integer" }]
50
51
  };
@@ -119,6 +120,8 @@ const RECORD_ACTION_TYPE_ENUM = [
119
120
  ];
120
121
  const APPLY_BLUEPRINT_BLOCK_TYPE_ENUM = [
121
122
  "table",
123
+ "calendar",
124
+ "kanban",
122
125
  "createForm",
123
126
  "editForm",
124
127
  "details",
@@ -129,10 +132,37 @@ const APPLY_BLUEPRINT_BLOCK_TYPE_ENUM = [
129
132
  "iframe",
130
133
  "chart",
131
134
  "actionPanel",
132
- "jsBlock"
135
+ "jsBlock",
136
+ "tree"
133
137
  ];
134
138
  const APPROVAL_BLUEPRINT_BLOCK_TYPE_ENUM = [...import_catalog_specs.APPROVAL_BLOCK_PUBLIC_KEYS];
135
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
+ };
136
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.";
137
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.";
138
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.";
@@ -468,7 +498,7 @@ const actionDocs = {
468
498
  tags: [FLOW_SURFACES_TAG],
469
499
  summary: "Apply a page blueprint to create or replace one Modern page",
470
500
  description: valuesCompatibilityNote(
471
- 'Accepts one simplified JSON page blueprint and compiles it to internal flow-surface operations. The public blueprint describes page structure (`create` or `replace`, page metadata, ordered tabs, blocks, fields, actions, inline popups, optional reusable assets) and optional top-level `reaction.items[]` for whole-page interaction authoring. Each reaction item targets an explicit local key / bind key produced by the same blueprint run. Only explicitly listed reaction items are written. `rules: []` clears the targeted slot. Repeating the same `(type, target)` reaction slot in one blueprint is invalid. In `replace`, reaction targets always bind to the newly produced blueprint result, not historical nodes from the previous page version; if a slot must exist in the resulting surface, include it explicitly instead of relying on omission. Localized reaction edits on an existing surface should use `getReactionMeta` + `set*Rules` instead of applying a whole page blueprint again. The request body is that page-document JSON object itself and must not be JSON-stringified. Wrong: `{ "requestBody": "{\\"version\\":\\"1\\"}" }`. Internal planning details stay hidden. In `create`, `navigation.group.routeId` is the preferred way to target an existing menu group. It is exact-targeting only and cannot be mixed with existing-group metadata such as `icon`, `tooltip`, or `hideInMenu`; applyBlueprint create mode does not mutate existing group metadata, so callers should use `updateMenu` separately when that is required. When only `navigation.group.title` is provided, applyBlueprint reuses one existing same-title group when it is unique, creates a new group when none exists, and rejects ambiguous multi-match cases. Same-title reuse is title-only; if an existing group\'s metadata must change, use low-level `updateMenu` instead of applyBlueprint create. `replace` uses `target.pageSchemaUid`, updates only the explicit page-level fields provided in `page`, maps blueprint tabs to existing route-backed tab slots by index, rewrites each slot in order, removes trailing old tabs, and appends extra new tabs when needed. Tab and block keys are optional in the public blueprint; omit them unless custom layout or cross-block targeting needs a stable in-document identifier. `layout` is only allowed on tabs and inline popup documents; blocks themselves do not accept a `layout` property. Public applyBlueprint blocks do not support generic `form`; use `editForm` or `createForm`. Direct `table` / `list` / `gridCard` blocks may also provide block-level `defaultFilter`, which backfills the default `filter` action `settings.defaultFilter`; explicit filter-action `settings.defaultFilter` still wins. Inline popup documents may set `popup.tryTemplate=true` to ask the backend for the best compatible popup template before falling back to local popup content. Inline popup documents may also combine `popup.tryTemplate` with `popup.saveAsTemplate={ name, description, local? }`: a hit binds the matched template immediately and lets later inline popups in the same blueprint reuse that final bound template through `popup.template={ local, mode }`, while a miss requires explicit local `popup.blocks` so the fallback popup can be saved and reused. Custom `edit` popups that provide `popup.blocks` must include exactly one `editForm` block; that `editForm` may omit `resource` and then inherits the opener\'s current-record context. When layout is omitted, applyBlueprint auto-generates a simple top-to-bottom layout. When a `replace` run expands a page to multiple tabs while the current page still has `enableTabs=false`, callers must set `page.enableTabs=true` explicitly. The response hides execution internals and returns only the resolved page target and final surface readback.'
501
+ 'Accepts one simplified JSON page blueprint and compiles it to internal flow-surface operations. The public blueprint describes page structure (`create` or `replace`, page metadata, ordered tabs, blocks, fields, actions, inline popups, optional reusable assets) and optional top-level `reaction.items[]` for whole-page interaction authoring. Each reaction item targets an explicit local key / bind key produced by the same blueprint run. Only explicitly listed reaction items are written. `rules: []` clears the targeted slot. Repeating the same `(type, target)` reaction slot in one blueprint is invalid. In `replace`, reaction targets always bind to the newly produced blueprint result, not historical nodes from the previous page version; if a slot must exist in the resulting surface, include it explicitly instead of relying on omission. Localized reaction edits on an existing surface should use `getReactionMeta` + `set*Rules` instead of applying a whole page blueprint again. The request body is that page-document JSON object itself and must not be JSON-stringified. Wrong: `{ "requestBody": "{\\"version\\":\\"1\\"}" }`. Internal planning details stay hidden. In `create`, `navigation.group.routeId` is the preferred way to target an existing menu group. It is exact-targeting only and cannot be mixed with existing-group metadata such as `icon`, `tooltip`, or `hideInMenu`; applyBlueprint create mode does not mutate existing group metadata, so callers should use `updateMenu` separately when that is required. When only `navigation.group.title` is provided, applyBlueprint reuses one existing same-title group when it is unique, creates a new group when none exists, and rejects ambiguous multi-match cases. Same-title reuse is title-only; if an existing group\'s metadata must change, use low-level `updateMenu` instead of applyBlueprint create. `replace` uses `target.pageSchemaUid`, updates only the explicit page-level fields provided in `page`, maps blueprint tabs to existing route-backed tab slots by index, rewrites each slot in order, removes trailing old tabs, and appends extra new tabs when needed. Tab and block keys are optional in the public blueprint; omit them unless custom layout or cross-block targeting needs a stable in-document identifier. `layout` is only allowed on tabs and inline popup documents; blocks themselves do not accept a `layout` property. Public applyBlueprint blocks do not support generic `form`; use `editForm` or `createForm`. Direct `table` / `list` / `gridCard` / `calendar` / `kanban` blocks may also provide non-empty block-level `defaultFilter`, which backfills the default `filter` action `settings.defaultFilter`; explicit filter-action `settings.defaultFilter` still wins. Inline popup documents may set `popup.tryTemplate=true` to ask the backend for the best compatible popup template before falling back to local popup content. Inline popup documents may also combine `popup.tryTemplate` with `popup.saveAsTemplate={ name, description, local? }`: a hit binds the matched template immediately and lets later inline popups in the same blueprint reuse that final bound template through `popup.template={ local, mode }`, while a miss requires explicit local `popup.blocks` so the fallback popup can be saved and reused. Custom `edit` popups that provide `popup.blocks` must include exactly one `editForm` block; that `editForm` may omit `resource` and then inherits the opener\'s current-record context. When layout is omitted, applyBlueprint auto-generates a simple top-to-bottom layout. When a `replace` run expands a page to multiple tabs while the current page still has `enableTabs=false`, callers must set `page.enableTabs=true` explicitly. The response hides execution internals and returns only the resolved page target and final surface readback.'
472
502
  ),
473
503
  requestBody: {
474
504
  required: true,
@@ -484,6 +514,10 @@ const actionDocs = {
484
514
  replacePage: {
485
515
  summary: "Replace one existing Modern page by pageSchemaUid",
486
516
  value: import_flow_surfaces.flowSurfaceExamples.applyBlueprintReplace
517
+ },
518
+ calendarPage: {
519
+ summary: "Create a direct calendar block with block-level defaultFilter",
520
+ value: import_flow_surfaces.flowSurfaceExamples.applyBlueprintCalendar
487
521
  }
488
522
  }
489
523
  }
@@ -526,7 +560,7 @@ const actionDocs = {
526
560
  tags: [FLOW_SURFACES_TAG],
527
561
  summary: "Compose blocks, fields, actions and simple layout under an existing surface",
528
562
  description: valuesCompatibilityNote(
529
- 'Organizes content under an existing page/tab/grid/popup using the public block/action/field semantics as a low-level building primitive. The caller does not need to pass raw `use`, `fieldUse`, or `stepParams`. Blocks, fields, and actions can declare stable `key` values, and the compose result returns the same keys so later orchestration can reference nested popup or form nodes deterministically. Direct `table` / `list` / `gridCard` blocks may provide block-level `defaultFilter`, which backfills the default `filter` action `settings.defaultFilter`; explicit filter-action `settings.defaultFilter` still wins. Blocks may be created from `template`, and form templates can set `template.usage="fields"` to import only their grid fields. Popup-capable actions and fields may reuse `popup.template`, set `popup.tryTemplate=true` to ask the backend for one compatible popup template before falling back to local/default popup behavior, or combine `popup.tryTemplate` with `popup.saveAsTemplate={ name, description, local? }`: a hit binds the matched template immediately and lets later popup-capable fields/actions in the same compose call reuse that final bound template through `popup.template={ local, mode }`, while a miss requires explicit local `popup.blocks` so the fallback popup can be saved and reused. For collection blocks under a popup, check `catalog.blocks[].resourceBindings` first. The `select / subForm / bulkEditForm` scene is currently recognized only, and popup collection block creation is not supported in that scene. For approval surfaces, use `applyApprovalBlueprint` first to bootstrap or replace the bound approval root; use `compose` only after that root already exists.'
563
+ 'Organizes content under an existing page/tab/grid/popup using the public block/action/field semantics as a low-level building primitive. The caller does not need to pass raw `use`, `fieldUse`, or `stepParams`. Blocks, fields, and actions can declare stable `key` values, and the compose result returns the same keys so later orchestration can reference nested popup or form nodes deterministically. Direct `table` / `list` / `gridCard` / `calendar` / `kanban` blocks may provide block-level `defaultFilter`; backend runtime compatibility remains compatibility-tolerant for omitted or empty values, and any provided value backfills the default `filter` action `settings.defaultFilter`. Explicit filter-action `settings.defaultFilter` still wins. Blocks may be created from `template`, and form templates can set `template.usage="fields"` to import only their grid fields. Popup-capable actions and fields may reuse `popup.template`, set `popup.tryTemplate=true` to ask the backend for one compatible popup template before falling back to local/default popup behavior, or combine `popup.tryTemplate` with `popup.saveAsTemplate={ name, description, local? }`: a hit binds the matched template immediately and lets later popup-capable fields/actions in the same compose call reuse that final bound template through `popup.template={ local, mode }`, while a miss requires explicit local `popup.blocks` so the fallback popup can be saved and reused. For collection blocks under a popup, check `catalog.blocks[].resourceBindings` first. The `select / subForm / bulkEditForm` scene is currently recognized only, and popup collection block creation is not supported in that scene. For approval surfaces, use `applyApprovalBlueprint` first to bootstrap or replace the bound approval root; use `compose` only after that root already exists.'
530
564
  ),
531
565
  requestBody: {
532
566
  required: true,
@@ -766,7 +800,7 @@ const actionDocs = {
766
800
  tags: [FLOW_SURFACES_TAG],
767
801
  summary: "Add a block under a surface or grid container",
768
802
  description: valuesCompatibilityNote(
769
- 'Creates a block by catalog key or an explicitly supported block use. It can also create from `template`, using `mode="reference"` or `mode="copy"`. Form templates may set `template.usage="fields"` to create a fresh host block and import only its grid fields. Popup-capable host nodes automatically receive the popup shell. For collection blocks under a popup, check `catalog.blocks[].resourceBindings` first, then pass the semantic `resource.binding`. The lower-level `resourceInit` is still accepted for compatibility, but the server validates it against popup semantics. `resource` and `resourceInit` are mutually exclusive. Direct `table` / `list` / `gridCard` creation may also provide block-level `defaultFilter`, which backfills the auto-created default filter action. Legacy `defaultActionSettings.filter.defaultFilter` is still supported for compatibility and wins when both are provided. The `select / subForm / bulkEditForm` scene is currently recognized only, and popup collection block creation is not supported in that scene. Direct add does not accept raw `props` / `decoratorProps` / `stepParams` / `flowRegistry`. Use `settings` and reuse the public configuration semantics from `configure.changes` plus the catalog item/node `configureOptions`. Approval block keys are only exposed under approval grids and do not auto-create an approval root; bootstrap approval surfaces with `applyApprovalBlueprint` first.'
803
+ 'Creates a block by catalog key or an explicitly supported block use. It can also create from `template`, using `mode="reference"` or `mode="copy"`. Form templates may set `template.usage="fields"` to create a fresh host block and import only its grid fields. Popup-capable host nodes automatically receive the popup shell. For collection blocks under a popup, check `catalog.blocks[].resourceBindings` first, then pass the semantic `resource.binding`. The lower-level `resourceInit` is still accepted for compatibility, but the server validates it against popup semantics. `resource` and `resourceInit` are mutually exclusive. Direct `table` / `list` / `gridCard` / `calendar` / `kanban` creation may also provide block-level `defaultFilter`; backend runtime compatibility remains tolerant of omitted or empty values, and any provided value backfills the auto-created default filter action. Legacy `defaultActionSettings.filter.defaultFilter` is still supported for compatibility and wins when both are provided. The `select / subForm / bulkEditForm` scene is currently recognized only, and popup collection block creation is not supported in that scene. Direct add does not accept raw `props` / `decoratorProps` / `stepParams` / `flowRegistry`. Use `settings` and reuse the public configuration semantics from `configure.changes` plus the catalog item/node `configureOptions`. Approval block keys are only exposed under approval grids and do not auto-create an approval root; bootstrap approval surfaces with `applyApprovalBlueprint` first.'
770
804
  ),
771
805
  requestBody: {
772
806
  required: true,
@@ -804,7 +838,7 @@ const actionDocs = {
804
838
  tags: [FLOW_SURFACES_TAG],
805
839
  summary: "Add a field wrapper and inner field under a field container",
806
840
  description: valuesCompatibilityNote(
807
- "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`."
808
842
  ),
809
843
  requestBody: {
810
844
  required: true,
@@ -934,7 +968,7 @@ const actionDocs = {
934
968
  tags: [FLOW_SURFACES_TAG],
935
969
  summary: "Add multiple blocks sequentially under the same target",
936
970
  description: valuesCompatibilityNote(
937
- "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` items may use block-level `defaultFilter` to backfill the auto-created default filter action. 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`."
938
972
  ),
939
973
  requestBody: requestBody("FlowSurfaceAddBlocksRequest", import_flow_surfaces.flowSurfaceExamples.addBlocks),
940
974
  responses: responses("FlowSurfaceAddBlocksResult")
@@ -2117,6 +2151,14 @@ const schemas = {
2117
2151
  fieldPath: {
2118
2152
  type: "string"
2119
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 },
2120
2162
  renderer: {
2121
2163
  type: "string",
2122
2164
  enum: ["js"],
@@ -2431,7 +2473,7 @@ const schemas = {
2431
2473
  },
2432
2474
  actions: {
2433
2475
  type: "array",
2434
- description: "Block-level actions. For table/list/gridCard, prefer block-wide collection actions here.",
2476
+ description: "Block-level actions. For table/list/gridCard/calendar/kanban, prefer block-wide collection actions here.",
2435
2477
  items: ref("FlowSurfaceComposeActionSpec")
2436
2478
  },
2437
2479
  recordActions: {
@@ -3377,6 +3419,14 @@ const schemas = {
3377
3419
  associationPathName: { type: "string" },
3378
3420
  renderer: { type: "string" },
3379
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 },
3380
3430
  label: { type: "string" },
3381
3431
  target: {
3382
3432
  type: "string",
@@ -3477,7 +3527,7 @@ const schemas = {
3477
3527
  settings: ANY_OBJECT_SCHEMA,
3478
3528
  defaultFilter: {
3479
3529
  allOf: [ref("FlowSurfaceFilterGroup")],
3480
- description: PUBLIC_DATA_SURFACE_BLOCK_DEFAULT_FILTER_DESCRIPTION
3530
+ description: APPLY_BLUEPRINT_DATA_SURFACE_BLOCK_DEFAULT_FILTER_DESCRIPTION
3481
3531
  },
3482
3532
  fields: {
3483
3533
  type: "array",
@@ -4277,6 +4327,11 @@ const schemas = {
4277
4327
  template: ref("FlowSurfaceBlockTemplateRef"),
4278
4328
  resource: ref("FlowSurfaceBlockResourceInput"),
4279
4329
  resourceInit: ref("FlowSurfaceResourceInit"),
4330
+ fields: {
4331
+ type: "array",
4332
+ items: ref("FlowSurfaceComposeFieldSpec")
4333
+ },
4334
+ fieldsLayout: ref("FlowSurfaceComposeLayout"),
4280
4335
  settings: ANY_OBJECT_SCHEMA,
4281
4336
  defaultFilter: {
4282
4337
  allOf: [ref("FlowSurfaceFilterGroup")],
@@ -4368,10 +4423,14 @@ const schemas = {
4368
4423
  collectionName: {
4369
4424
  type: "string"
4370
4425
  },
4371
- fieldUse: {
4372
- type: "string",
4373
- description: "Optional compatibility check. The server infers the actual field use from catalog capabilities."
4374
- },
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 },
4375
4434
  defaultTargetUid: {
4376
4435
  type: "string"
4377
4436
  },
@@ -4546,6 +4605,11 @@ const schemas = {
4546
4605
  template: ref("FlowSurfaceBlockTemplateRef"),
4547
4606
  resource: ref("FlowSurfaceBlockResourceInput"),
4548
4607
  resourceInit: ref("FlowSurfaceResourceInit"),
4608
+ fields: {
4609
+ type: "array",
4610
+ items: ref("FlowSurfaceComposeFieldSpec")
4611
+ },
4612
+ fieldsLayout: ref("FlowSurfaceComposeLayout"),
4549
4613
  settings: ANY_OBJECT_SCHEMA,
4550
4614
  defaultFilter: {
4551
4615
  allOf: [ref("FlowSurfaceFilterGroup")],
@@ -4590,9 +4654,14 @@ const schemas = {
4590
4654
  collectionName: {
4591
4655
  type: "string"
4592
4656
  },
4593
- fieldUse: {
4594
- type: "string"
4595
- },
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 },
4596
4665
  defaultTargetUid: {
4597
4666
  type: "string"
4598
4667
  },
@@ -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;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "displayName.zh-CN": "前端流引擎",
5
5
  "description": "",
6
6
  "description.zh-CN": "",
7
- "version": "2.1.0-alpha.23",
7
+ "version": "2.1.0-alpha.25",
8
8
  "main": "./dist/server/index.js",
9
9
  "license": "Apache-2.0",
10
10
  "devDependencies": {
@@ -24,5 +24,5 @@
24
24
  "@nocobase/test": "2.x",
25
25
  "@nocobase/utils": "2.x"
26
26
  },
27
- "gitHead": "baa19dafe25e85b680b2fea7451f202831930c1c"
27
+ "gitHead": "63e4aaa625f3108fe41238e85bb13dee37fe1f48"
28
28
  }