@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
@@ -55,7 +55,9 @@ var import_approval = require("./approval");
55
55
  var import_action_scope = require("./action-scope");
56
56
  var import_errors = require("./errors");
57
57
  var import_field_semantics = require("./field-semantics");
58
+ var import_core_field_default_bindings = require("./core-field-default-bindings");
58
59
  var import_field_binding_registry = require("./field-binding-registry");
60
+ var import_association_interfaces = require("./association-interfaces");
59
61
  var import_service_helpers = require("./service-helpers");
60
62
  var import_support_matrix = require("./support-matrix");
61
63
  const ANY_VALUE_SCHEMA = {};
@@ -70,6 +72,9 @@ const OPEN_VIEW_SCENE_SCHEMA = {
70
72
  const OBJECT_SCHEMA = { type: "object" };
71
73
  const NUMBER_SCHEMA = { type: "number" };
72
74
  const ARRAY_SCHEMA = { type: "array" };
75
+ const NULLABLE_NUMBER_OR_STRING_SCHEMA = {
76
+ oneOf: [NUMBER_SCHEMA, NULLABLE_STRING_SCHEMA]
77
+ };
73
78
  const FILTER_CONDITION_SCHEMA = {
74
79
  type: "object",
75
80
  properties: {
@@ -329,6 +334,79 @@ const CALENDAR_SETTINGS_GROUP = {
329
334
  "linkageRules.value": ARRAY_SCHEMA
330
335
  }
331
336
  };
337
+ const TREE_BLOCK_PROP_SCHEMAS = {
338
+ searchable: BOOLEAN_SCHEMA,
339
+ defaultExpandAll: BOOLEAN_SCHEMA,
340
+ includeDescendants: BOOLEAN_SCHEMA,
341
+ fieldNames: OBJECT_SCHEMA,
342
+ pageSize: NUMBER_SCHEMA
343
+ };
344
+ const TREE_SETTINGS_GROUP = {
345
+ allowedPaths: [
346
+ "searchable.searchable",
347
+ "defaultExpandAll.defaultExpandAll",
348
+ "includeDescendants.includeDescendants",
349
+ "titleField.titleField",
350
+ "pageSize.pageSize",
351
+ "dataScope.filter",
352
+ "defaultSorting.sort"
353
+ ],
354
+ clearable: true,
355
+ mergeStrategy: "deep",
356
+ eventBindingSteps: ["treeSettings", "dataScope", "defaultSorting"],
357
+ pathSchemas: {
358
+ "searchable.searchable": BOOLEAN_SCHEMA,
359
+ "defaultExpandAll.defaultExpandAll": BOOLEAN_SCHEMA,
360
+ "includeDescendants.includeDescendants": BOOLEAN_SCHEMA,
361
+ "titleField.titleField": STRING_SCHEMA,
362
+ "pageSize.pageSize": NUMBER_SCHEMA,
363
+ "dataScope.filter": FILTER_GROUP_SCHEMA,
364
+ "defaultSorting.sort": ARRAY_SCHEMA
365
+ }
366
+ };
367
+ const KANBAN_SETTINGS_GROUP = {
368
+ allowedPaths: [
369
+ "grouping.groupField",
370
+ "grouping.groupTitleField",
371
+ "grouping.groupColorField",
372
+ "grouping.groupOptions",
373
+ "styleVariant.styleVariant",
374
+ "defaultSorting.sort",
375
+ "dragEnabled.dragEnabled",
376
+ "dragSortBy.dragSortBy",
377
+ "quickCreate.quickCreateEnabled",
378
+ "popup.mode",
379
+ "popup.size",
380
+ "popup.popupTemplateUid",
381
+ "popup.pageModelClass",
382
+ "popup.uid",
383
+ "pageSize.pageSize",
384
+ "columnWidth.columnWidth",
385
+ "dataScope.filter"
386
+ ],
387
+ clearable: true,
388
+ mergeStrategy: "deep",
389
+ eventBindingSteps: ["defaultSorting", "dataScope"],
390
+ pathSchemas: {
391
+ "grouping.groupField": STRING_SCHEMA,
392
+ "grouping.groupTitleField": NULLABLE_STRING_SCHEMA,
393
+ "grouping.groupColorField": NULLABLE_STRING_SCHEMA,
394
+ "grouping.groupOptions": ARRAY_SCHEMA,
395
+ "styleVariant.styleVariant": STRING_SCHEMA,
396
+ "defaultSorting.sort": ARRAY_SCHEMA,
397
+ "dragEnabled.dragEnabled": BOOLEAN_SCHEMA,
398
+ "dragSortBy.dragSortBy": NULLABLE_STRING_SCHEMA,
399
+ "quickCreate.quickCreateEnabled": BOOLEAN_SCHEMA,
400
+ "popup.mode": STRING_SCHEMA,
401
+ "popup.size": STRING_SCHEMA,
402
+ "popup.popupTemplateUid": NULLABLE_STRING_SCHEMA,
403
+ "popup.pageModelClass": NULLABLE_STRING_SCHEMA,
404
+ "popup.uid": NULLABLE_STRING_SCHEMA,
405
+ "pageSize.pageSize": NUMBER_SCHEMA,
406
+ "columnWidth.columnWidth": NUMBER_SCHEMA,
407
+ "dataScope.filter": FILTER_GROUP_SCHEMA
408
+ }
409
+ };
332
410
  const TABLE_SETTINGS_GROUP = {
333
411
  allowedPaths: [
334
412
  "quickEdit.editable",
@@ -379,10 +457,13 @@ const REGISTERED_FILTER_FIELD_USE_SET = (0, import_field_binding_registry.getReg
379
457
  const EDITABLE_FIELD_USE_SET = /* @__PURE__ */ new Set([
380
458
  ...JS_EDITABLE_FIELD_USE_SET,
381
459
  "RecordSelectFieldModel",
460
+ "RecordPickerFieldModel",
382
461
  "JsonFieldModel",
383
462
  "TextareaFieldModel",
384
463
  "IconFieldModel",
464
+ "RadioGroupFieldModel",
385
465
  "SelectFieldModel",
466
+ "CheckboxGroupFieldModel",
386
467
  "ColorFieldModel",
387
468
  "CheckboxFieldModel",
388
469
  "PasswordFieldModel",
@@ -394,11 +475,15 @@ const EDITABLE_FIELD_USE_SET = /* @__PURE__ */ new Set([
394
475
  "TimeFieldModel",
395
476
  "CollectionSelectorFieldModel",
396
477
  "RichTextFieldModel",
397
- "InputFieldModel"
478
+ "InputFieldModel",
479
+ "SubFormListFieldModel",
480
+ "SubTableFieldModel",
481
+ "PopupSubTableFieldModel"
398
482
  ]);
399
483
  const DISPLAY_FIELD_USE_SET = /* @__PURE__ */ new Set([
400
484
  ...JS_DISPLAY_FIELD_USE_SET,
401
485
  "DisplaySubItemFieldModel",
486
+ "DisplaySubListFieldModel",
402
487
  "DisplaySubTableFieldModel",
403
488
  "DisplayHtmlFieldModel",
404
489
  "DisplayNumberFieldModel",
@@ -430,7 +515,6 @@ const APPROVAL_DETAILS_FIELD_COMPONENT_WRAPPER_USE_SET = /* @__PURE__ */ new Set
430
515
  "ApplyTaskCardDetailsItemModel",
431
516
  "ApprovalTaskCardDetailsItemModel"
432
517
  ]);
433
- const SINGLE_VALUE_ASSOCIATION_INTERFACES = /* @__PURE__ */ new Set(["m2o", "o2o", "oho", "obo", "updatedBy", "createdBy"]);
434
518
  const KNOWN_FIELD_NODE_USES = /* @__PURE__ */ new Set([
435
519
  ...EDITABLE_FIELD_USE_SET,
436
520
  ...DISPLAY_FIELD_USE_SET,
@@ -871,6 +955,61 @@ CALENDAR_BLOCK_CONTRACT.domains.stepParams = groupedDomain({
871
955
  calendarSettings: CALENDAR_SETTINGS_GROUP,
872
956
  cardSettings: BLOCK_CARD_SETTINGS_GROUP
873
957
  });
958
+ const TREE_BLOCK_CONTRACT = createContract({
959
+ editableDomains: ["props", "decoratorProps", "stepParams", "flowRegistry"],
960
+ props: ["searchable", "defaultExpandAll", "includeDescendants", "fieldNames", "pageSize"],
961
+ decoratorProps: ["height", "heightMode"],
962
+ stepParams: ["resourceSettings", "treeSettings", "cardSettings"],
963
+ flowRegistry: true,
964
+ eventCapabilities: {
965
+ direct: DEFAULT_DIRECT_EVENTS,
966
+ object: ["click"]
967
+ }
968
+ });
969
+ TREE_BLOCK_CONTRACT.domains.props = keyedDomain(
970
+ ["searchable", "defaultExpandAll", "includeDescendants", "fieldNames", "pageSize"],
971
+ "deep",
972
+ TREE_BLOCK_PROP_SCHEMAS
973
+ );
974
+ TREE_BLOCK_CONTRACT.domains.stepParams = groupedDomain({
975
+ resourceSettings: RESOURCE_SETTINGS_GROUP,
976
+ treeSettings: TREE_SETTINGS_GROUP,
977
+ cardSettings: BLOCK_CARD_SETTINGS_GROUP
978
+ });
979
+ const KANBAN_BLOCK_CONTRACT = createContract({
980
+ editableDomains: ["props", "decoratorProps", "stepParams", "flowRegistry"],
981
+ props: [
982
+ "groupField",
983
+ "groupTitleField",
984
+ "groupColorField",
985
+ "groupOptions",
986
+ "styleVariant",
987
+ "sortField",
988
+ "globalSort",
989
+ "dragEnabled",
990
+ "dragSortBy",
991
+ "quickCreateEnabled",
992
+ "popupMode",
993
+ "popupSize",
994
+ "popupTemplateUid",
995
+ "popupPageModelClass",
996
+ "popupTargetUid",
997
+ "pageSize",
998
+ "columnWidth"
999
+ ],
1000
+ decoratorProps: ["height", "heightMode"],
1001
+ stepParams: ["resourceSettings", "kanbanSettings", "cardSettings"],
1002
+ flowRegistry: true,
1003
+ eventCapabilities: {
1004
+ direct: DEFAULT_DIRECT_EVENTS,
1005
+ object: ["click"]
1006
+ }
1007
+ });
1008
+ KANBAN_BLOCK_CONTRACT.domains.stepParams = groupedDomain({
1009
+ resourceSettings: RESOURCE_SETTINGS_GROUP,
1010
+ kanbanSettings: KANBAN_SETTINGS_GROUP,
1011
+ cardSettings: BLOCK_CARD_SETTINGS_GROUP
1012
+ });
874
1013
  const LIST_BLOCK_CONTRACT = createContract({
875
1014
  editableDomains: ["props", "decoratorProps", "stepParams", "flowRegistry"],
876
1015
  props: [],
@@ -968,6 +1107,61 @@ GRID_CARD_BLOCK_CONTRACT.domains.stepParams = groupedDomain({
968
1107
  },
969
1108
  cardSettings: BLOCK_CARD_SETTINGS_GROUP
970
1109
  });
1110
+ const KANBAN_CARD_ITEM_CONTRACT = createContract({
1111
+ editableDomains: ["props", "stepParams", "flowRegistry"],
1112
+ props: [
1113
+ "enableCardClick",
1114
+ "openMode",
1115
+ "popupSize",
1116
+ "popupTemplateUid",
1117
+ "pageModelClass",
1118
+ "popupTargetUid",
1119
+ "layout",
1120
+ "labelAlign",
1121
+ "labelWidth",
1122
+ "labelWrap",
1123
+ "colon"
1124
+ ],
1125
+ stepParams: ["cardSettings"],
1126
+ flowRegistry: true,
1127
+ eventCapabilities: {
1128
+ direct: DEFAULT_DIRECT_EVENTS,
1129
+ object: ["click"]
1130
+ }
1131
+ });
1132
+ KANBAN_CARD_ITEM_CONTRACT.domains.stepParams = groupedDomain({
1133
+ cardSettings: {
1134
+ allowedPaths: [
1135
+ "click.enableCardClick",
1136
+ "popup.mode",
1137
+ "popup.size",
1138
+ "popup.popupTemplateUid",
1139
+ "popup.pageModelClass",
1140
+ "popup.uid",
1141
+ "layout.layout",
1142
+ "layout.labelAlign",
1143
+ "layout.labelWidth",
1144
+ "layout.labelWrap",
1145
+ "layout.colon"
1146
+ ],
1147
+ clearable: true,
1148
+ mergeStrategy: "deep",
1149
+ eventBindingSteps: ["click", "popup", "layout"],
1150
+ pathSchemas: {
1151
+ "click.enableCardClick": BOOLEAN_SCHEMA,
1152
+ "popup.mode": STRING_SCHEMA,
1153
+ "popup.size": STRING_SCHEMA,
1154
+ "popup.popupTemplateUid": NULLABLE_STRING_SCHEMA,
1155
+ "popup.pageModelClass": NULLABLE_STRING_SCHEMA,
1156
+ "popup.uid": NULLABLE_STRING_SCHEMA,
1157
+ "layout.layout": STRING_SCHEMA,
1158
+ "layout.labelAlign": STRING_SCHEMA,
1159
+ "layout.labelWidth": NULLABLE_NUMBER_OR_STRING_SCHEMA,
1160
+ "layout.labelWrap": BOOLEAN_SCHEMA,
1161
+ "layout.colon": BOOLEAN_SCHEMA
1162
+ }
1163
+ }
1164
+ });
971
1165
  const MARKDOWN_BLOCK_CONTRACT = createContract({
972
1166
  editableDomains: ["props", "stepParams", "flowRegistry"],
973
1167
  props: ["content", "value"],
@@ -1578,6 +1772,28 @@ CALENDAR_POPUP_ACTION_CONTRACT.domains.stepParams = groupedDomain({
1578
1772
  pathSchemas: OPEN_VIEW_PATH_SCHEMAS
1579
1773
  }
1580
1774
  });
1775
+ const KANBAN_POPUP_ACTION_CONTRACT = createContract({
1776
+ editableDomains: ["stepParams"],
1777
+ stepParams: ["popupSettings"],
1778
+ eventCapabilities: {
1779
+ direct: ACTION_DIRECT_EVENTS,
1780
+ object: ACTION_OBJECT_EVENTS
1781
+ },
1782
+ eventBindings: {
1783
+ popupSettings: {
1784
+ stepKeys: ["openView"]
1785
+ }
1786
+ }
1787
+ });
1788
+ KANBAN_POPUP_ACTION_CONTRACT.domains.stepParams = groupedDomain({
1789
+ popupSettings: {
1790
+ allowedPaths: OPEN_VIEW_ALLOWED_PATHS,
1791
+ clearable: true,
1792
+ mergeStrategy: "deep",
1793
+ eventBindingSteps: ["openView"],
1794
+ pathSchemas: OPEN_VIEW_PATH_SCHEMAS
1795
+ }
1796
+ });
1581
1797
  const DELETE_ACTION_CONTRACT = createContract({
1582
1798
  editableDomains: ["props", "decoratorProps", "stepParams", "flowRegistry"],
1583
1799
  props: ACTION_PROP_KEYS,
@@ -2225,6 +2441,8 @@ const NODE_CONTRACT_ENTRIES = [
2225
2441
  ["ApprovalBlockGridModel", GRID_NODE_CONTRACT],
2226
2442
  ["TableBlockModel", TABLE_BLOCK_CONTRACT],
2227
2443
  ["CalendarBlockModel", CALENDAR_BLOCK_CONTRACT],
2444
+ ["TreeBlockModel", TREE_BLOCK_CONTRACT],
2445
+ ["KanbanBlockModel", KANBAN_BLOCK_CONTRACT],
2228
2446
  ["CreateFormModel", CREATE_FORM_BLOCK_CONTRACT],
2229
2447
  ["EditFormModel", EDIT_FORM_BLOCK_CONTRACT],
2230
2448
  ["FormBlockModel", FORM_BLOCK_CONTRACT],
@@ -2246,6 +2464,7 @@ const NODE_CONTRACT_ENTRIES = [
2246
2464
  ["FormItemModel", FORM_ITEM_CONTRACT],
2247
2465
  ["FormAssociationItemModel", DETAILS_ITEM_CONTRACT],
2248
2466
  ["DetailsItemModel", DETAILS_ITEM_CONTRACT],
2467
+ ["KanbanCardItemModel", KANBAN_CARD_ITEM_CONTRACT],
2249
2468
  ["FilterFormItemModel", FILTER_FORM_ITEM_CONTRACT],
2250
2469
  ["PatternFormItemModel", FORM_ITEM_CONTRACT],
2251
2470
  ["ApprovalDetailsItemModel", DETAILS_ITEM_CONTRACT],
@@ -2265,6 +2484,8 @@ const NODE_CONTRACT_ENTRIES = [
2265
2484
  ["PopupCollectionActionModel", POPUP_ACTION_CONTRACT],
2266
2485
  ["CalendarQuickCreateActionModel", CALENDAR_POPUP_ACTION_CONTRACT],
2267
2486
  ["CalendarEventViewActionModel", CALENDAR_POPUP_ACTION_CONTRACT],
2487
+ ["KanbanQuickCreateActionModel", KANBAN_POPUP_ACTION_CONTRACT],
2488
+ ["KanbanCardViewActionModel", KANBAN_POPUP_ACTION_CONTRACT],
2268
2489
  ["AddChildActionModel", POPUP_ACTION_CONTRACT],
2269
2490
  ["DeleteActionModel", DELETE_ACTION_CONTRACT],
2270
2491
  ["BulkDeleteActionModel", DELETE_ACTION_CONTRACT],
@@ -2353,112 +2574,19 @@ function inferEditableFieldUse(fieldInterface) {
2353
2574
  if (["m2m", "m2o", "o2o", "o2m", "oho", "obo", "updatedBy", "createdBy", "mbm"].includes(fieldInterface)) {
2354
2575
  return "RecordSelectFieldModel";
2355
2576
  }
2356
- const map = {
2357
- json: "JsonFieldModel",
2358
- textarea: "TextareaFieldModel",
2359
- icon: "IconFieldModel",
2360
- radioGroup: "SelectFieldModel",
2361
- color: "ColorFieldModel",
2362
- select: "SelectFieldModel",
2363
- multipleSelect: "SelectFieldModel",
2364
- checkboxGroup: "SelectFieldModel",
2365
- checkbox: "CheckboxFieldModel",
2366
- password: "PasswordFieldModel",
2367
- number: "NumberFieldModel",
2368
- integer: "NumberFieldModel",
2369
- id: "NumberFieldModel",
2370
- snowflakeId: "NumberFieldModel",
2371
- percent: "PercentFieldModel",
2372
- datetimeNoTz: "DateTimeNoTzFieldModel",
2373
- date: "DateOnlyFieldModel",
2374
- datetime: "DateTimeTzFieldModel",
2375
- createdAt: "DateTimeTzFieldModel",
2376
- updatedAt: "DateTimeTzFieldModel",
2377
- unixTimestamp: "DateTimeTzFieldModel",
2378
- time: "TimeFieldModel",
2379
- collection: "CollectionSelectorFieldModel",
2380
- tableoid: "CollectionSelectorFieldModel",
2381
- richText: "RichTextFieldModel",
2382
- input: "InputFieldModel",
2383
- email: "InputFieldModel",
2384
- phone: "InputFieldModel",
2385
- uuid: "InputFieldModel",
2386
- url: "InputFieldModel",
2387
- nanoid: "InputFieldModel"
2388
- };
2389
- return map[fieldInterface] || "InputFieldModel";
2577
+ return (0, import_core_field_default_bindings.inferSharedFieldDefaultBindingUse)("editable", fieldInterface);
2390
2578
  }
2391
2579
  function inferDisplayFieldUse(fieldInterface) {
2392
2580
  if (["m2m", "o2m", "mbm"].includes(fieldInterface)) {
2393
2581
  return "DisplaySubTableFieldModel";
2394
2582
  }
2395
- const map = {
2396
- richText: "DisplayHtmlFieldModel",
2397
- number: "DisplayNumberFieldModel",
2398
- integer: "DisplayNumberFieldModel",
2399
- id: "DisplayNumberFieldModel",
2400
- snowflakeId: "DisplayNumberFieldModel",
2401
- json: "DisplayJSONFieldModel",
2402
- // Real frontend saved fixtures still read back these enum-like displays as text fields.
2403
- select: "DisplayTextFieldModel",
2404
- multipleSelect: "DisplayTextFieldModel",
2405
- radioGroup: "DisplayTextFieldModel",
2406
- checkboxGroup: "DisplayTextFieldModel",
2407
- collection: "DisplayTextFieldModel",
2408
- tableoid: "DisplayTextFieldModel",
2409
- icon: "DisplayIconFieldModel",
2410
- checkbox: "DisplayCheckboxFieldModel",
2411
- password: "DisplayPasswordFieldModel",
2412
- percent: "DisplayPercentFieldModel",
2413
- date: "DisplayDateTimeFieldModel",
2414
- datetimeNoTz: "DisplayDateTimeFieldModel",
2415
- createdAt: "DisplayDateTimeFieldModel",
2416
- datetime: "DisplayDateTimeFieldModel",
2417
- updatedAt: "DisplayDateTimeFieldModel",
2418
- unixTimestamp: "DisplayDateTimeFieldModel",
2419
- formula: "DisplayDateTimeFieldModel",
2420
- input: "DisplayTextFieldModel",
2421
- email: "DisplayTextFieldModel",
2422
- phone: "DisplayTextFieldModel",
2423
- uuid: "DisplayTextFieldModel",
2424
- textarea: "DisplayTextFieldModel",
2425
- nanoid: "DisplayTextFieldModel",
2426
- url: "DisplayURLFieldModel",
2427
- color: "DisplayColorFieldModel",
2428
- time: "DisplayTimeFieldModel"
2429
- };
2430
- return map[fieldInterface] || "DisplayTextFieldModel";
2583
+ return (0, import_core_field_default_bindings.inferSharedFieldDefaultBindingUse)("display", fieldInterface);
2431
2584
  }
2432
2585
  function inferFilterFieldUse(fieldInterface) {
2433
2586
  if (["m2m", "m2o", "o2o", "o2m", "oho", "obo", "updatedBy", "createdBy", "mbm"].includes(fieldInterface)) {
2434
2587
  return "FilterFormRecordSelectFieldModel";
2435
2588
  }
2436
- const map = {
2437
- date: "DateOnlyFilterFieldModel",
2438
- datetimeNoTz: "DateTimeNoTzFilterFieldModel",
2439
- createdAt: "DateTimeTzFilterFieldModel",
2440
- datetime: "DateTimeTzFilterFieldModel",
2441
- updatedAt: "DateTimeTzFilterFieldModel",
2442
- unixTimestamp: "DateTimeTzFilterFieldModel",
2443
- select: "SelectFieldModel",
2444
- multipleSelect: "SelectFieldModel",
2445
- radioGroup: "SelectFieldModel",
2446
- checkboxGroup: "SelectFieldModel",
2447
- checkbox: "SelectFieldModel",
2448
- number: "NumberFieldModel",
2449
- integer: "NumberFieldModel",
2450
- id: "NumberFieldModel",
2451
- snowflakeId: "NumberFieldModel",
2452
- time: "TimeFieldModel",
2453
- percent: "PercentFieldModel",
2454
- input: "InputFieldModel",
2455
- email: "InputFieldModel",
2456
- phone: "InputFieldModel",
2457
- uuid: "InputFieldModel",
2458
- url: "InputFieldModel",
2459
- nanoid: "InputFieldModel"
2460
- };
2461
- return map[fieldInterface] || "InputFieldModel";
2589
+ return (0, import_core_field_default_bindings.inferSharedFieldDefaultBindingUse)("filter", fieldInterface);
2462
2590
  }
2463
2591
  function getAllowedFieldUseSet(containerUse, enabledPackages) {
2464
2592
  switch (normalizeFieldContainerUse(containerUse)) {
@@ -2473,7 +2601,7 @@ function getAllowedFieldUseSet(containerUse, enabledPackages) {
2473
2601
  return null;
2474
2602
  }
2475
2603
  }
2476
- function canUseNestedApprovalAssociationFieldComponent(input) {
2604
+ function canUseNestedAssociationFieldComponent(input) {
2477
2605
  var _a;
2478
2606
  const getCollection = input.getCollection || (() => null);
2479
2607
  const targetCollection = (0, import_service_helpers.resolveFieldTargetCollection)(input.field, input.dataSourceKey || "main", getCollection);
@@ -2488,40 +2616,89 @@ function getSupportedFieldComponentUseSet(input) {
2488
2616
  if (!baseAllowedFieldUses || !fieldInterface) {
2489
2617
  return baseAllowedFieldUses;
2490
2618
  }
2491
- const wrapperUse = (0, import_approval.getApprovalFieldWrapperUse)(input.containerUse) || String(input.containerUse || "").trim();
2619
+ const wrapperUse = (0, import_approval.getApprovalFieldWrapperUse)(input.containerUse) || getFieldWrapperUseForContainer(input.containerUse) || String(input.containerUse || "").trim();
2492
2620
  const inferredFieldUse = inferFieldUseByContainer(input.containerUse, input.field, {
2493
2621
  enabledPackages: input.enabledPackages,
2494
2622
  dataSourceKey: input.dataSourceKey,
2495
2623
  getCollection: input.getCollection
2496
2624
  });
2497
2625
  if (wrapperUse === "PatternFormItemModel") {
2498
- if (SINGLE_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2626
+ if (import_association_interfaces.SINGLE_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2627
+ return new Set(
2628
+ [
2629
+ "RecordSelectFieldModel",
2630
+ "RecordPickerFieldModel",
2631
+ canUseNestedAssociationFieldComponent(input) ? "SubFormFieldModel" : void 0,
2632
+ inferredFieldUse
2633
+ ].filter(Boolean)
2634
+ );
2635
+ }
2636
+ if (import_association_interfaces.MULTI_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2637
+ return new Set(
2638
+ [
2639
+ "RecordSelectFieldModel",
2640
+ "RecordPickerFieldModel",
2641
+ canUseNestedAssociationFieldComponent(input) ? "SubFormListFieldModel" : void 0,
2642
+ canUseNestedAssociationFieldComponent(input) ? "SubTableFieldModel" : void 0,
2643
+ canUseNestedAssociationFieldComponent(input) ? "PopupSubTableFieldModel" : void 0,
2644
+ inferredFieldUse
2645
+ ].filter(Boolean)
2646
+ );
2647
+ }
2648
+ }
2649
+ if (wrapperUse === "FormItemModel") {
2650
+ if (import_association_interfaces.SINGLE_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2499
2651
  return new Set(
2500
2652
  [
2501
2653
  "RecordSelectFieldModel",
2502
2654
  "RecordPickerFieldModel",
2503
- canUseNestedApprovalAssociationFieldComponent(input) ? "SubFormFieldModel" : void 0,
2655
+ canUseNestedAssociationFieldComponent(input) ? "SubFormFieldModel" : void 0,
2504
2656
  inferredFieldUse
2505
2657
  ].filter(Boolean)
2506
2658
  );
2507
2659
  }
2508
- if (import_field_semantics.MULTI_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2660
+ if (import_association_interfaces.MULTI_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2509
2661
  return new Set(
2510
2662
  [
2511
2663
  "RecordSelectFieldModel",
2512
2664
  "RecordPickerFieldModel",
2513
- canUseNestedApprovalAssociationFieldComponent(input) ? "SubFormListFieldModel" : void 0,
2514
- canUseNestedApprovalAssociationFieldComponent(input) ? "PatternSubTableFieldModel" : void 0,
2665
+ canUseNestedAssociationFieldComponent(input) ? "SubFormListFieldModel" : void 0,
2666
+ canUseNestedAssociationFieldComponent(input) ? "SubTableFieldModel" : void 0,
2667
+ canUseNestedAssociationFieldComponent(input) ? "PopupSubTableFieldModel" : void 0,
2515
2668
  inferredFieldUse
2516
2669
  ].filter(Boolean)
2517
2670
  );
2518
2671
  }
2519
2672
  }
2520
2673
  if (APPROVAL_DETAILS_FIELD_COMPONENT_WRAPPER_USE_SET.has(wrapperUse)) {
2521
- if (SINGLE_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2674
+ if (import_association_interfaces.SINGLE_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2675
+ return new Set(["DisplayTextFieldModel", "DisplaySubItemFieldModel", inferredFieldUse].filter(Boolean));
2676
+ }
2677
+ if (import_association_interfaces.MULTI_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2678
+ return new Set(
2679
+ ["DisplayTextFieldModel", "DisplaySubListFieldModel", "DisplaySubTableFieldModel", inferredFieldUse].filter(
2680
+ Boolean
2681
+ )
2682
+ );
2683
+ }
2684
+ }
2685
+ if (wrapperUse === "DetailsItemModel") {
2686
+ if (import_association_interfaces.SINGLE_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2522
2687
  return new Set(["DisplayTextFieldModel", "DisplaySubItemFieldModel", inferredFieldUse].filter(Boolean));
2523
2688
  }
2524
- if (import_field_semantics.MULTI_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2689
+ if (import_association_interfaces.MULTI_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2690
+ return new Set(
2691
+ ["DisplayTextFieldModel", "DisplaySubListFieldModel", "DisplaySubTableFieldModel", inferredFieldUse].filter(
2692
+ Boolean
2693
+ )
2694
+ );
2695
+ }
2696
+ }
2697
+ if (wrapperUse === "FormAssociationItemModel" || wrapperUse === "TableColumnModel") {
2698
+ if (import_association_interfaces.SINGLE_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2699
+ return new Set(["DisplayTextFieldModel", inferredFieldUse].filter(Boolean));
2700
+ }
2701
+ if (import_association_interfaces.MULTI_VALUE_ASSOCIATION_INTERFACES.has(fieldInterface)) {
2525
2702
  return new Set(
2526
2703
  ["DisplayTextFieldModel", "DisplaySubListFieldModel", "DisplaySubTableFieldModel", inferredFieldUse].filter(
2527
2704
  Boolean
@@ -2529,6 +2706,9 @@ function getSupportedFieldComponentUseSet(input) {
2529
2706
  );
2530
2707
  }
2531
2708
  }
2709
+ if (inferredFieldUse) {
2710
+ return /* @__PURE__ */ new Set([inferredFieldUse]);
2711
+ }
2532
2712
  return baseAllowedFieldUses;
2533
2713
  }
2534
2714
  function inferFieldUseByContainer(containerUse, field, options = {}) {
@@ -2643,11 +2823,16 @@ function resolveSupportedFieldCapability(input) {
2643
2823
  `flowSurfaces field wrapper '${input.requestedWrapperUse}' is not allowed under '${input.containerUse}', expected '${wrapperUse}'`
2644
2824
  );
2645
2825
  }
2646
- const inferredFieldUse = requestedRenderer === "js" ? inferJsFieldUseByContainer(input.containerUse) : input.field ? inferFieldUseByContainer(input.containerUse, input.field, {
2647
- enabledPackages: input.enabledPackages,
2648
- dataSourceKey: input.dataSourceKey,
2649
- getCollection: input.getCollection
2650
- }) : void 0;
2826
+ let inferredFieldUse;
2827
+ if (requestedRenderer === "js") {
2828
+ inferredFieldUse = inferJsFieldUseByContainer(input.containerUse);
2829
+ } else if (input.field) {
2830
+ inferredFieldUse = inferFieldUseByContainer(input.containerUse, input.field, {
2831
+ enabledPackages: input.enabledPackages,
2832
+ dataSourceKey: input.dataSourceKey,
2833
+ getCollection: input.getCollection
2834
+ });
2835
+ }
2651
2836
  const fieldUse = input.requestedFieldUse || inferredFieldUse;
2652
2837
  if (!fieldUse) {
2653
2838
  if (input.allowUnresolvedFieldUse) {
@@ -2661,12 +2846,18 @@ function resolveSupportedFieldCapability(input) {
2661
2846
  }
2662
2847
  throw new import_errors.FlowSurfaceBadRequestError(`flowSurfaces field '${input.containerUse}' requires a supported fieldUse`);
2663
2848
  }
2664
- if (input.requestedFieldUse && inferredFieldUse && input.requestedFieldUse !== inferredFieldUse && KNOWN_FIELD_NODE_USES.has(input.requestedFieldUse)) {
2849
+ if (input.requestedFieldUse && inferredFieldUse && input.requestedFieldUse !== inferredFieldUse && input.requestedFieldUseMode !== "fieldType" && KNOWN_FIELD_NODE_USES.has(input.requestedFieldUse)) {
2665
2850
  throw new import_errors.FlowSurfaceBadRequestError(
2666
2851
  `flowSurfaces fieldUse '${input.requestedFieldUse}' does not match inferred fieldUse '${inferredFieldUse}' under '${input.containerUse}'`
2667
2852
  );
2668
2853
  }
2669
- const allowedFieldUses = getAllowedFieldUseSet(input.containerUse, input.enabledPackages);
2854
+ const allowedFieldUses = input.requestedFieldUseMode === "fieldType" && input.field ? getSupportedFieldComponentUseSet({
2855
+ containerUse: input.containerUse,
2856
+ field: input.field,
2857
+ enabledPackages: input.enabledPackages,
2858
+ dataSourceKey: input.dataSourceKey,
2859
+ getCollection: input.getCollection
2860
+ }) : getAllowedFieldUseSet(input.containerUse, input.enabledPackages);
2670
2861
  if (!(allowedFieldUses == null ? void 0 : allowedFieldUses.has(fieldUse))) {
2671
2862
  throw new import_errors.FlowSurfaceBadRequestError(
2672
2863
  `flowSurfaces fieldUse '${fieldUse}' is not allowed under '${input.containerUse}'`
@@ -2734,6 +2925,8 @@ function getAvailableActionCatalogItems(containerUse, scope, enabledPackages) {
2734
2925
  const COLLECTION_RESOURCE_REQUIRED = /* @__PURE__ */ new Set([
2735
2926
  "TableBlockModel",
2736
2927
  "CalendarBlockModel",
2928
+ "TreeBlockModel",
2929
+ "KanbanBlockModel",
2737
2930
  "CreateFormModel",
2738
2931
  "EditFormModel",
2739
2932
  "FormBlockModel",
@@ -2768,6 +2961,10 @@ const approvalBlockCatalog = import_approval.APPROVAL_BLOCK_CATALOG_SPECS.map(
2768
2961
  })
2769
2962
  );
2770
2963
  const blockCatalog = [...baseBlockCatalog, ...approvalBlockCatalog];
2964
+ const COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES = [
2965
+ ...import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
2966
+ ...import_action_scope.KANBAN_BLOCK_ACTION_CONTAINER_USES
2967
+ ];
2771
2968
  const APPROVAL_PAGE_LIKE_BLOCK_CONTAINER_USE_SET = /* @__PURE__ */ new Set([...import_approval.APPROVAL_BLOCK_GRID_USES]);
2772
2969
  const APPROVAL_PAGE_LIKE_GENERIC_BLOCK_KEY_SET = /* @__PURE__ */ new Set(["markdown", "jsBlock"]);
2773
2970
  const APPROVAL_EXCLUSIVE_BLOCK_CONTAINER_USE_SET = /* @__PURE__ */ new Set([...import_approval.APPROVAL_TASK_CARD_GRID_USES]);
@@ -2810,7 +3007,7 @@ const actionRegistry = [
2810
3007
  scene: "collection",
2811
3008
  use: "FilterActionModel",
2812
3009
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2813
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
3010
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2814
3011
  createSupported: true
2815
3012
  },
2816
3013
  {
@@ -2820,7 +3017,7 @@ const actionRegistry = [
2820
3017
  scene: "collection",
2821
3018
  use: "AddNewActionModel",
2822
3019
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2823
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
3020
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2824
3021
  createSupported: true
2825
3022
  },
2826
3023
  {
@@ -2830,7 +3027,7 @@ const actionRegistry = [
2830
3027
  scene: "collection",
2831
3028
  use: "PopupCollectionActionModel",
2832
3029
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2833
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
3030
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2834
3031
  createSupported: true
2835
3032
  },
2836
3033
  {
@@ -2840,7 +3037,7 @@ const actionRegistry = [
2840
3037
  scene: "collection",
2841
3038
  use: "RefreshActionModel",
2842
3039
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2843
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
3040
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2844
3041
  createSupported: true
2845
3042
  },
2846
3043
  {
@@ -2980,7 +3177,7 @@ const actionRegistry = [
2980
3177
  scene: "collection",
2981
3178
  use: "JSCollectionActionModel",
2982
3179
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2983
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
3180
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2984
3181
  createSupported: true
2985
3182
  },
2986
3183
  {
@@ -23,6 +23,14 @@ export type FlowSurfaceComposeNormalizedFieldSpec = {
23
23
  associationPathName?: string;
24
24
  renderer?: string;
25
25
  type?: string;
26
+ fieldType?: string;
27
+ fields?: string[];
28
+ selectorFields?: string[];
29
+ titleField?: string;
30
+ openMode?: string;
31
+ popupSize?: string;
32
+ pageSize?: number;
33
+ showIndex?: boolean;
26
34
  target?: string | Record<string, unknown>;
27
35
  settings?: FlowSurfaceComposeObject;
28
36
  popup?: FlowSurfaceComposeObject;