@nocobase/plugin-flow-engine 2.1.0-beta.16 → 2.1.0-beta.19

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/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/association-title-field.d.ts +1 -1
  8. package/dist/server/flow-surfaces/association-title-field.js +38 -4
  9. package/dist/server/flow-surfaces/blueprint/compile-blocks.js +24 -2
  10. package/dist/server/flow-surfaces/blueprint/public-types.d.ts +1 -1
  11. package/dist/server/flow-surfaces/builder.js +69 -1
  12. package/dist/server/flow-surfaces/catalog.d.ts +1 -1
  13. package/dist/server/flow-surfaces/catalog.js +187 -106
  14. package/dist/server/flow-surfaces/compose-compiler.js +1 -1
  15. package/dist/server/flow-surfaces/configure-options.js +33 -0
  16. package/dist/server/flow-surfaces/core-field-default-bindings.d.ts +12 -0
  17. package/dist/server/flow-surfaces/core-field-default-bindings.js +157 -0
  18. package/dist/server/flow-surfaces/default-block-actions.js +24 -0
  19. package/dist/server/flow-surfaces/field-semantics.js +3 -1
  20. package/dist/server/flow-surfaces/index.js +61 -2
  21. package/dist/server/flow-surfaces/node-use-sets.js +3 -0
  22. package/dist/server/flow-surfaces/placement.js +3 -0
  23. package/dist/server/flow-surfaces/public-data-surface-default-filter.d.ts +4 -0
  24. package/dist/server/flow-surfaces/public-data-surface-default-filter.js +45 -4
  25. package/dist/server/flow-surfaces/service-helpers.js +3 -70
  26. package/dist/server/flow-surfaces/service.d.ts +42 -1
  27. package/dist/server/flow-surfaces/service.js +1392 -124
  28. package/dist/server/flow-surfaces/support-matrix.d.ts +1 -1
  29. package/dist/server/flow-surfaces/support-matrix.js +12 -0
  30. package/dist/server/flow-surfaces/surface-context.js +8 -5
  31. package/dist/swagger/flow-surfaces.examples.d.ts +39 -0
  32. package/dist/swagger/flow-surfaces.examples.js +47 -0
  33. package/dist/swagger/flow-surfaces.js +15 -8
  34. package/package.json +2 -2
@@ -55,6 +55,7 @@ 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");
59
60
  var import_service_helpers = require("./service-helpers");
60
61
  var import_support_matrix = require("./support-matrix");
@@ -70,6 +71,9 @@ const OPEN_VIEW_SCENE_SCHEMA = {
70
71
  const OBJECT_SCHEMA = { type: "object" };
71
72
  const NUMBER_SCHEMA = { type: "number" };
72
73
  const ARRAY_SCHEMA = { type: "array" };
74
+ const NULLABLE_NUMBER_OR_STRING_SCHEMA = {
75
+ oneOf: [NUMBER_SCHEMA, NULLABLE_STRING_SCHEMA]
76
+ };
73
77
  const FILTER_CONDITION_SCHEMA = {
74
78
  type: "object",
75
79
  properties: {
@@ -329,6 +333,49 @@ const CALENDAR_SETTINGS_GROUP = {
329
333
  "linkageRules.value": ARRAY_SCHEMA
330
334
  }
331
335
  };
336
+ const KANBAN_SETTINGS_GROUP = {
337
+ allowedPaths: [
338
+ "grouping.groupField",
339
+ "grouping.groupTitleField",
340
+ "grouping.groupColorField",
341
+ "grouping.groupOptions",
342
+ "styleVariant.styleVariant",
343
+ "defaultSorting.sort",
344
+ "dragEnabled.dragEnabled",
345
+ "dragSortBy.dragSortBy",
346
+ "quickCreate.quickCreateEnabled",
347
+ "popup.mode",
348
+ "popup.size",
349
+ "popup.popupTemplateUid",
350
+ "popup.pageModelClass",
351
+ "popup.uid",
352
+ "pageSize.pageSize",
353
+ "columnWidth.columnWidth",
354
+ "dataScope.filter"
355
+ ],
356
+ clearable: true,
357
+ mergeStrategy: "deep",
358
+ eventBindingSteps: ["defaultSorting", "dataScope"],
359
+ pathSchemas: {
360
+ "grouping.groupField": STRING_SCHEMA,
361
+ "grouping.groupTitleField": NULLABLE_STRING_SCHEMA,
362
+ "grouping.groupColorField": NULLABLE_STRING_SCHEMA,
363
+ "grouping.groupOptions": ARRAY_SCHEMA,
364
+ "styleVariant.styleVariant": STRING_SCHEMA,
365
+ "defaultSorting.sort": ARRAY_SCHEMA,
366
+ "dragEnabled.dragEnabled": BOOLEAN_SCHEMA,
367
+ "dragSortBy.dragSortBy": NULLABLE_STRING_SCHEMA,
368
+ "quickCreate.quickCreateEnabled": BOOLEAN_SCHEMA,
369
+ "popup.mode": STRING_SCHEMA,
370
+ "popup.size": STRING_SCHEMA,
371
+ "popup.popupTemplateUid": NULLABLE_STRING_SCHEMA,
372
+ "popup.pageModelClass": NULLABLE_STRING_SCHEMA,
373
+ "popup.uid": NULLABLE_STRING_SCHEMA,
374
+ "pageSize.pageSize": NUMBER_SCHEMA,
375
+ "columnWidth.columnWidth": NUMBER_SCHEMA,
376
+ "dataScope.filter": FILTER_GROUP_SCHEMA
377
+ }
378
+ };
332
379
  const TABLE_SETTINGS_GROUP = {
333
380
  allowedPaths: [
334
381
  "quickEdit.editable",
@@ -382,7 +429,9 @@ const EDITABLE_FIELD_USE_SET = /* @__PURE__ */ new Set([
382
429
  "JsonFieldModel",
383
430
  "TextareaFieldModel",
384
431
  "IconFieldModel",
432
+ "RadioGroupFieldModel",
385
433
  "SelectFieldModel",
434
+ "CheckboxGroupFieldModel",
386
435
  "ColorFieldModel",
387
436
  "CheckboxFieldModel",
388
437
  "PasswordFieldModel",
@@ -871,6 +920,40 @@ CALENDAR_BLOCK_CONTRACT.domains.stepParams = groupedDomain({
871
920
  calendarSettings: CALENDAR_SETTINGS_GROUP,
872
921
  cardSettings: BLOCK_CARD_SETTINGS_GROUP
873
922
  });
923
+ const KANBAN_BLOCK_CONTRACT = createContract({
924
+ editableDomains: ["props", "decoratorProps", "stepParams", "flowRegistry"],
925
+ props: [
926
+ "groupField",
927
+ "groupTitleField",
928
+ "groupColorField",
929
+ "groupOptions",
930
+ "styleVariant",
931
+ "sortField",
932
+ "globalSort",
933
+ "dragEnabled",
934
+ "dragSortBy",
935
+ "quickCreateEnabled",
936
+ "popupMode",
937
+ "popupSize",
938
+ "popupTemplateUid",
939
+ "popupPageModelClass",
940
+ "popupTargetUid",
941
+ "pageSize",
942
+ "columnWidth"
943
+ ],
944
+ decoratorProps: ["height", "heightMode"],
945
+ stepParams: ["resourceSettings", "kanbanSettings", "cardSettings"],
946
+ flowRegistry: true,
947
+ eventCapabilities: {
948
+ direct: DEFAULT_DIRECT_EVENTS,
949
+ object: ["click"]
950
+ }
951
+ });
952
+ KANBAN_BLOCK_CONTRACT.domains.stepParams = groupedDomain({
953
+ resourceSettings: RESOURCE_SETTINGS_GROUP,
954
+ kanbanSettings: KANBAN_SETTINGS_GROUP,
955
+ cardSettings: BLOCK_CARD_SETTINGS_GROUP
956
+ });
874
957
  const LIST_BLOCK_CONTRACT = createContract({
875
958
  editableDomains: ["props", "decoratorProps", "stepParams", "flowRegistry"],
876
959
  props: [],
@@ -968,6 +1051,61 @@ GRID_CARD_BLOCK_CONTRACT.domains.stepParams = groupedDomain({
968
1051
  },
969
1052
  cardSettings: BLOCK_CARD_SETTINGS_GROUP
970
1053
  });
1054
+ const KANBAN_CARD_ITEM_CONTRACT = createContract({
1055
+ editableDomains: ["props", "stepParams", "flowRegistry"],
1056
+ props: [
1057
+ "enableCardClick",
1058
+ "openMode",
1059
+ "popupSize",
1060
+ "popupTemplateUid",
1061
+ "pageModelClass",
1062
+ "popupTargetUid",
1063
+ "layout",
1064
+ "labelAlign",
1065
+ "labelWidth",
1066
+ "labelWrap",
1067
+ "colon"
1068
+ ],
1069
+ stepParams: ["cardSettings"],
1070
+ flowRegistry: true,
1071
+ eventCapabilities: {
1072
+ direct: DEFAULT_DIRECT_EVENTS,
1073
+ object: ["click"]
1074
+ }
1075
+ });
1076
+ KANBAN_CARD_ITEM_CONTRACT.domains.stepParams = groupedDomain({
1077
+ cardSettings: {
1078
+ allowedPaths: [
1079
+ "click.enableCardClick",
1080
+ "popup.mode",
1081
+ "popup.size",
1082
+ "popup.popupTemplateUid",
1083
+ "popup.pageModelClass",
1084
+ "popup.uid",
1085
+ "layout.layout",
1086
+ "layout.labelAlign",
1087
+ "layout.labelWidth",
1088
+ "layout.labelWrap",
1089
+ "layout.colon"
1090
+ ],
1091
+ clearable: true,
1092
+ mergeStrategy: "deep",
1093
+ eventBindingSteps: ["click", "popup", "layout"],
1094
+ pathSchemas: {
1095
+ "click.enableCardClick": BOOLEAN_SCHEMA,
1096
+ "popup.mode": STRING_SCHEMA,
1097
+ "popup.size": STRING_SCHEMA,
1098
+ "popup.popupTemplateUid": NULLABLE_STRING_SCHEMA,
1099
+ "popup.pageModelClass": NULLABLE_STRING_SCHEMA,
1100
+ "popup.uid": NULLABLE_STRING_SCHEMA,
1101
+ "layout.layout": STRING_SCHEMA,
1102
+ "layout.labelAlign": STRING_SCHEMA,
1103
+ "layout.labelWidth": NULLABLE_NUMBER_OR_STRING_SCHEMA,
1104
+ "layout.labelWrap": BOOLEAN_SCHEMA,
1105
+ "layout.colon": BOOLEAN_SCHEMA
1106
+ }
1107
+ }
1108
+ });
971
1109
  const MARKDOWN_BLOCK_CONTRACT = createContract({
972
1110
  editableDomains: ["props", "stepParams", "flowRegistry"],
973
1111
  props: ["content", "value"],
@@ -1578,6 +1716,28 @@ CALENDAR_POPUP_ACTION_CONTRACT.domains.stepParams = groupedDomain({
1578
1716
  pathSchemas: OPEN_VIEW_PATH_SCHEMAS
1579
1717
  }
1580
1718
  });
1719
+ const KANBAN_POPUP_ACTION_CONTRACT = createContract({
1720
+ editableDomains: ["stepParams"],
1721
+ stepParams: ["popupSettings"],
1722
+ eventCapabilities: {
1723
+ direct: ACTION_DIRECT_EVENTS,
1724
+ object: ACTION_OBJECT_EVENTS
1725
+ },
1726
+ eventBindings: {
1727
+ popupSettings: {
1728
+ stepKeys: ["openView"]
1729
+ }
1730
+ }
1731
+ });
1732
+ KANBAN_POPUP_ACTION_CONTRACT.domains.stepParams = groupedDomain({
1733
+ popupSettings: {
1734
+ allowedPaths: OPEN_VIEW_ALLOWED_PATHS,
1735
+ clearable: true,
1736
+ mergeStrategy: "deep",
1737
+ eventBindingSteps: ["openView"],
1738
+ pathSchemas: OPEN_VIEW_PATH_SCHEMAS
1739
+ }
1740
+ });
1581
1741
  const DELETE_ACTION_CONTRACT = createContract({
1582
1742
  editableDomains: ["props", "decoratorProps", "stepParams", "flowRegistry"],
1583
1743
  props: ACTION_PROP_KEYS,
@@ -2225,6 +2385,7 @@ const NODE_CONTRACT_ENTRIES = [
2225
2385
  ["ApprovalBlockGridModel", GRID_NODE_CONTRACT],
2226
2386
  ["TableBlockModel", TABLE_BLOCK_CONTRACT],
2227
2387
  ["CalendarBlockModel", CALENDAR_BLOCK_CONTRACT],
2388
+ ["KanbanBlockModel", KANBAN_BLOCK_CONTRACT],
2228
2389
  ["CreateFormModel", CREATE_FORM_BLOCK_CONTRACT],
2229
2390
  ["EditFormModel", EDIT_FORM_BLOCK_CONTRACT],
2230
2391
  ["FormBlockModel", FORM_BLOCK_CONTRACT],
@@ -2246,6 +2407,7 @@ const NODE_CONTRACT_ENTRIES = [
2246
2407
  ["FormItemModel", FORM_ITEM_CONTRACT],
2247
2408
  ["FormAssociationItemModel", DETAILS_ITEM_CONTRACT],
2248
2409
  ["DetailsItemModel", DETAILS_ITEM_CONTRACT],
2410
+ ["KanbanCardItemModel", KANBAN_CARD_ITEM_CONTRACT],
2249
2411
  ["FilterFormItemModel", FILTER_FORM_ITEM_CONTRACT],
2250
2412
  ["PatternFormItemModel", FORM_ITEM_CONTRACT],
2251
2413
  ["ApprovalDetailsItemModel", DETAILS_ITEM_CONTRACT],
@@ -2265,6 +2427,8 @@ const NODE_CONTRACT_ENTRIES = [
2265
2427
  ["PopupCollectionActionModel", POPUP_ACTION_CONTRACT],
2266
2428
  ["CalendarQuickCreateActionModel", CALENDAR_POPUP_ACTION_CONTRACT],
2267
2429
  ["CalendarEventViewActionModel", CALENDAR_POPUP_ACTION_CONTRACT],
2430
+ ["KanbanQuickCreateActionModel", KANBAN_POPUP_ACTION_CONTRACT],
2431
+ ["KanbanCardViewActionModel", KANBAN_POPUP_ACTION_CONTRACT],
2268
2432
  ["AddChildActionModel", POPUP_ACTION_CONTRACT],
2269
2433
  ["DeleteActionModel", DELETE_ACTION_CONTRACT],
2270
2434
  ["BulkDeleteActionModel", DELETE_ACTION_CONTRACT],
@@ -2353,112 +2517,19 @@ function inferEditableFieldUse(fieldInterface) {
2353
2517
  if (["m2m", "m2o", "o2o", "o2m", "oho", "obo", "updatedBy", "createdBy", "mbm"].includes(fieldInterface)) {
2354
2518
  return "RecordSelectFieldModel";
2355
2519
  }
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";
2520
+ return (0, import_core_field_default_bindings.inferSharedFieldDefaultBindingUse)("editable", fieldInterface);
2390
2521
  }
2391
2522
  function inferDisplayFieldUse(fieldInterface) {
2392
2523
  if (["m2m", "o2m", "mbm"].includes(fieldInterface)) {
2393
2524
  return "DisplaySubTableFieldModel";
2394
2525
  }
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";
2526
+ return (0, import_core_field_default_bindings.inferSharedFieldDefaultBindingUse)("display", fieldInterface);
2431
2527
  }
2432
2528
  function inferFilterFieldUse(fieldInterface) {
2433
2529
  if (["m2m", "m2o", "o2o", "o2m", "oho", "obo", "updatedBy", "createdBy", "mbm"].includes(fieldInterface)) {
2434
2530
  return "FilterFormRecordSelectFieldModel";
2435
2531
  }
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";
2532
+ return (0, import_core_field_default_bindings.inferSharedFieldDefaultBindingUse)("filter", fieldInterface);
2462
2533
  }
2463
2534
  function getAllowedFieldUseSet(containerUse, enabledPackages) {
2464
2535
  switch (normalizeFieldContainerUse(containerUse)) {
@@ -2643,11 +2714,16 @@ function resolveSupportedFieldCapability(input) {
2643
2714
  `flowSurfaces field wrapper '${input.requestedWrapperUse}' is not allowed under '${input.containerUse}', expected '${wrapperUse}'`
2644
2715
  );
2645
2716
  }
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;
2717
+ let inferredFieldUse;
2718
+ if (requestedRenderer === "js") {
2719
+ inferredFieldUse = inferJsFieldUseByContainer(input.containerUse);
2720
+ } else if (input.field) {
2721
+ inferredFieldUse = inferFieldUseByContainer(input.containerUse, input.field, {
2722
+ enabledPackages: input.enabledPackages,
2723
+ dataSourceKey: input.dataSourceKey,
2724
+ getCollection: input.getCollection
2725
+ });
2726
+ }
2651
2727
  const fieldUse = input.requestedFieldUse || inferredFieldUse;
2652
2728
  if (!fieldUse) {
2653
2729
  if (input.allowUnresolvedFieldUse) {
@@ -2734,6 +2810,7 @@ function getAvailableActionCatalogItems(containerUse, scope, enabledPackages) {
2734
2810
  const COLLECTION_RESOURCE_REQUIRED = /* @__PURE__ */ new Set([
2735
2811
  "TableBlockModel",
2736
2812
  "CalendarBlockModel",
2813
+ "KanbanBlockModel",
2737
2814
  "CreateFormModel",
2738
2815
  "EditFormModel",
2739
2816
  "FormBlockModel",
@@ -2768,6 +2845,10 @@ const approvalBlockCatalog = import_approval.APPROVAL_BLOCK_CATALOG_SPECS.map(
2768
2845
  })
2769
2846
  );
2770
2847
  const blockCatalog = [...baseBlockCatalog, ...approvalBlockCatalog];
2848
+ const COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES = [
2849
+ ...import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
2850
+ ...import_action_scope.KANBAN_BLOCK_ACTION_CONTAINER_USES
2851
+ ];
2771
2852
  const APPROVAL_PAGE_LIKE_BLOCK_CONTAINER_USE_SET = /* @__PURE__ */ new Set([...import_approval.APPROVAL_BLOCK_GRID_USES]);
2772
2853
  const APPROVAL_PAGE_LIKE_GENERIC_BLOCK_KEY_SET = /* @__PURE__ */ new Set(["markdown", "jsBlock"]);
2773
2854
  const APPROVAL_EXCLUSIVE_BLOCK_CONTAINER_USE_SET = /* @__PURE__ */ new Set([...import_approval.APPROVAL_TASK_CARD_GRID_USES]);
@@ -2810,7 +2891,7 @@ const actionRegistry = [
2810
2891
  scene: "collection",
2811
2892
  use: "FilterActionModel",
2812
2893
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2813
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
2894
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2814
2895
  createSupported: true
2815
2896
  },
2816
2897
  {
@@ -2820,7 +2901,7 @@ const actionRegistry = [
2820
2901
  scene: "collection",
2821
2902
  use: "AddNewActionModel",
2822
2903
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2823
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
2904
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2824
2905
  createSupported: true
2825
2906
  },
2826
2907
  {
@@ -2830,7 +2911,7 @@ const actionRegistry = [
2830
2911
  scene: "collection",
2831
2912
  use: "PopupCollectionActionModel",
2832
2913
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2833
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
2914
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2834
2915
  createSupported: true
2835
2916
  },
2836
2917
  {
@@ -2840,7 +2921,7 @@ const actionRegistry = [
2840
2921
  scene: "collection",
2841
2922
  use: "RefreshActionModel",
2842
2923
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2843
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
2924
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2844
2925
  createSupported: true
2845
2926
  },
2846
2927
  {
@@ -2980,7 +3061,7 @@ const actionRegistry = [
2980
3061
  scene: "collection",
2981
3062
  use: "JSCollectionActionModel",
2982
3063
  ownerPlugin: CORE_FLOW_SURFACE_OWNER_PLUGIN,
2983
- allowedContainerUses: import_action_scope.COLLECTION_BLOCK_ACTION_CONTAINER_USES,
3064
+ allowedContainerUses: COLLECTION_BLOCK_AND_KANBAN_ACTION_CONTAINER_USES,
2984
3065
  createSupported: true
2985
3066
  },
2986
3067
  {
@@ -33,7 +33,7 @@ __export(compose_compiler_exports, {
33
33
  module.exports = __toCommonJS(compose_compiler_exports);
34
34
  var import_errors = require("./errors");
35
35
  var import_defaults = require("./blueprint/defaults");
36
- const LIST_LIKE_COMPOSE_BLOCK_TYPES = /* @__PURE__ */ new Set(["list", "gridCard"]);
36
+ const LIST_LIKE_COMPOSE_BLOCK_TYPES = /* @__PURE__ */ new Set(["list", "gridCard", "kanban"]);
37
37
  function compileComposeExecutionPlan(input) {
38
38
  const blocks = compileComposeBlockTasks(input.gridUid, input.normalizedBlocks);
39
39
  const fields = compileComposeFieldTasks(input.normalizedBlocks);
@@ -219,6 +219,36 @@ const CALENDAR_OPTIONS = {
219
219
  quickCreatePopup: OPEN_VIEW,
220
220
  eventPopup: OPEN_VIEW
221
221
  };
222
+ const KANBAN_OPTIONS = {
223
+ ...COMMON_BLOCK_HEADER_OPTIONS,
224
+ ...COMMON_HEIGHT_OPTIONS,
225
+ resource: COMMON_RESOURCE,
226
+ groupField: stringOption("Grouping field", { example: "status" }),
227
+ groupTitleField: stringOption("Association grouping title field", { example: "title" }),
228
+ groupColorField: stringOption("Association grouping color field", { example: "color" }),
229
+ groupOptions: arrayOption("Ordered kanban group options", {
230
+ example: [
231
+ { value: "todo", label: "To do", color: "blue" },
232
+ { value: "done", label: "Done", color: "green" }
233
+ ]
234
+ }),
235
+ styleVariant: stringOption("Kanban style variant", { enum: ["default", "filled"], example: "filled" }),
236
+ sorting: SORTING,
237
+ dragEnabled: booleanOption("Whether drag sorting is enabled", { example: true }),
238
+ dragSortBy: stringOption("Drag-sort field", { example: "status_sort" }),
239
+ quickCreateEnabled: booleanOption("Whether per-column quick create is enabled", { example: true }),
240
+ quickCreatePopup: OPEN_VIEW,
241
+ enableCardClick: booleanOption("Whether cards can be clicked to open a popup", { example: true }),
242
+ cardPopup: OPEN_VIEW,
243
+ cardLayout: stringOption("Kanban card layout", { example: "vertical" }),
244
+ cardLabelAlign: stringOption("Kanban card label alignment", { example: "left" }),
245
+ cardLabelWidth: stringOption("Kanban card label width", { example: "120px" }),
246
+ cardLabelWrap: booleanOption("Whether kanban card labels should wrap", { example: false }),
247
+ cardColon: booleanOption("Whether kanban card labels display a colon", { example: true }),
248
+ pageSize: numberOption("Page size", { example: 20 }),
249
+ columnWidth: numberOption("Column width", { example: 300 }),
250
+ dataScope: FILTER_GROUP
251
+ };
222
252
  const GRID_CARD_OPTIONS = {
223
253
  ...COMMON_BLOCK_HEADER_OPTIONS,
224
254
  ...COMMON_HEIGHT_OPTIONS,
@@ -714,6 +744,9 @@ function getConfigureOptionsForUse(use) {
714
744
  case "CalendarBlockModel":
715
745
  options = cloneOptions(CALENDAR_OPTIONS);
716
746
  break;
747
+ case "KanbanBlockModel":
748
+ options = cloneOptions(KANBAN_OPTIONS);
749
+ break;
717
750
  case "FormBlockModel":
718
751
  case "CreateFormModel":
719
752
  options = cloneOptions(FORM_COMMON_OPTIONS);
@@ -0,0 +1,12 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ export type FlowSurfaceFieldDefaultBindingScope = 'display' | 'editable' | 'filter';
10
+ export declare const CORE_FIELD_DEFAULT_BINDING_MATRIX: Record<FlowSurfaceFieldDefaultBindingScope, Record<string, string>>;
11
+ export declare function getSharedFieldDefaultBindingUse(scope: FlowSurfaceFieldDefaultBindingScope, fieldInterface?: string): string | undefined;
12
+ export declare function inferSharedFieldDefaultBindingUse(scope: FlowSurfaceFieldDefaultBindingScope, fieldInterface?: string): string;
@@ -0,0 +1,157 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __export = (target, all) => {
15
+ for (var name in all)
16
+ __defProp(target, name, { get: all[name], enumerable: true });
17
+ };
18
+ var __copyProps = (to, from, except, desc) => {
19
+ if (from && typeof from === "object" || typeof from === "function") {
20
+ for (let key of __getOwnPropNames(from))
21
+ if (!__hasOwnProp.call(to, key) && key !== except)
22
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
+ }
24
+ return to;
25
+ };
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
+ var core_field_default_bindings_exports = {};
28
+ __export(core_field_default_bindings_exports, {
29
+ CORE_FIELD_DEFAULT_BINDING_MATRIX: () => CORE_FIELD_DEFAULT_BINDING_MATRIX,
30
+ getSharedFieldDefaultBindingUse: () => getSharedFieldDefaultBindingUse,
31
+ inferSharedFieldDefaultBindingUse: () => inferSharedFieldDefaultBindingUse
32
+ });
33
+ module.exports = __toCommonJS(core_field_default_bindings_exports);
34
+ const CORE_FIELD_DEFAULT_BINDING_MATRIX = {
35
+ display: {
36
+ richText: "DisplayHtmlFieldModel",
37
+ number: "DisplayNumberFieldModel",
38
+ integer: "DisplayNumberFieldModel",
39
+ id: "DisplayNumberFieldModel",
40
+ snowflakeId: "DisplayNumberFieldModel",
41
+ json: "DisplayJSONFieldModel",
42
+ select: "DisplayEnumFieldModel",
43
+ multipleSelect: "DisplayEnumFieldModel",
44
+ radioGroup: "DisplayEnumFieldModel",
45
+ checkboxGroup: "DisplayEnumFieldModel",
46
+ collection: "DisplayEnumFieldModel",
47
+ tableoid: "DisplayEnumFieldModel",
48
+ icon: "DisplayIconFieldModel",
49
+ checkbox: "DisplayCheckboxFieldModel",
50
+ password: "DisplayPasswordFieldModel",
51
+ percent: "DisplayPercentFieldModel",
52
+ date: "DisplayDateTimeFieldModel",
53
+ datetimeNoTz: "DisplayDateTimeFieldModel",
54
+ createdAt: "DisplayDateTimeFieldModel",
55
+ datetime: "DisplayDateTimeFieldModel",
56
+ updatedAt: "DisplayDateTimeFieldModel",
57
+ unixTimestamp: "DisplayDateTimeFieldModel",
58
+ input: "DisplayTextFieldModel",
59
+ email: "DisplayTextFieldModel",
60
+ phone: "DisplayTextFieldModel",
61
+ uuid: "DisplayTextFieldModel",
62
+ textarea: "DisplayTextFieldModel",
63
+ nanoid: "DisplayTextFieldModel",
64
+ url: "DisplayURLFieldModel",
65
+ color: "DisplayColorFieldModel",
66
+ time: "DisplayTimeFieldModel"
67
+ },
68
+ editable: {
69
+ json: "JsonFieldModel",
70
+ textarea: "TextareaFieldModel",
71
+ icon: "IconFieldModel",
72
+ radioGroup: "RadioGroupFieldModel",
73
+ color: "ColorFieldModel",
74
+ select: "SelectFieldModel",
75
+ multipleSelect: "SelectFieldModel",
76
+ checkboxGroup: "CheckboxGroupFieldModel",
77
+ checkbox: "CheckboxFieldModel",
78
+ password: "PasswordFieldModel",
79
+ number: "NumberFieldModel",
80
+ integer: "NumberFieldModel",
81
+ id: "NumberFieldModel",
82
+ snowflakeId: "NumberFieldModel",
83
+ percent: "PercentFieldModel",
84
+ datetimeNoTz: "DateTimeNoTzFieldModel",
85
+ date: "DateOnlyFieldModel",
86
+ datetime: "DateTimeTzFieldModel",
87
+ createdAt: "DateTimeTzFieldModel",
88
+ updatedAt: "DateTimeTzFieldModel",
89
+ unixTimestamp: "DateTimeTzFieldModel",
90
+ time: "TimeFieldModel",
91
+ collection: "CollectionSelectorFieldModel",
92
+ tableoid: "CollectionSelectorFieldModel",
93
+ richText: "RichTextFieldModel",
94
+ input: "InputFieldModel",
95
+ email: "InputFieldModel",
96
+ phone: "InputFieldModel",
97
+ uuid: "InputFieldModel",
98
+ url: "InputFieldModel",
99
+ nanoid: "InputFieldModel"
100
+ },
101
+ filter: {
102
+ date: "DateOnlyFilterFieldModel",
103
+ datetimeNoTz: "DateTimeNoTzFilterFieldModel",
104
+ createdAt: "DateTimeTzFilterFieldModel",
105
+ datetime: "DateTimeTzFilterFieldModel",
106
+ updatedAt: "DateTimeTzFilterFieldModel",
107
+ unixTimestamp: "DateTimeTzFilterFieldModel",
108
+ select: "SelectFieldModel",
109
+ multipleSelect: "SelectFieldModel",
110
+ radioGroup: "SelectFieldModel",
111
+ checkboxGroup: "SelectFieldModel",
112
+ checkbox: "SelectFieldModel",
113
+ number: "NumberFieldModel",
114
+ integer: "NumberFieldModel",
115
+ id: "NumberFieldModel",
116
+ snowflakeId: "NumberFieldModel",
117
+ time: "TimeFieldModel",
118
+ percent: "PercentFieldModel",
119
+ input: "InputFieldModel",
120
+ email: "InputFieldModel",
121
+ phone: "InputFieldModel",
122
+ uuid: "InputFieldModel",
123
+ url: "InputFieldModel",
124
+ nanoid: "InputFieldModel"
125
+ }
126
+ };
127
+ const SUPPLEMENTAL_FIELD_DEFAULT_BINDING_MATRIX = {
128
+ display: {
129
+ formula: "DisplayDateTimeFieldModel"
130
+ },
131
+ editable: {},
132
+ filter: {}
133
+ };
134
+ const FIELD_DEFAULT_BINDING_FALLBACKS = {
135
+ display: "DisplayTextFieldModel",
136
+ editable: "InputFieldModel",
137
+ filter: "InputFieldModel"
138
+ };
139
+ function normalizeFieldInterface(fieldInterface) {
140
+ return String(fieldInterface || "").trim();
141
+ }
142
+ function getSharedFieldDefaultBindingUse(scope, fieldInterface) {
143
+ const normalized = normalizeFieldInterface(fieldInterface);
144
+ if (!normalized) {
145
+ return void 0;
146
+ }
147
+ return CORE_FIELD_DEFAULT_BINDING_MATRIX[scope][normalized] || SUPPLEMENTAL_FIELD_DEFAULT_BINDING_MATRIX[scope][normalized];
148
+ }
149
+ function inferSharedFieldDefaultBindingUse(scope, fieldInterface) {
150
+ return getSharedFieldDefaultBindingUse(scope, fieldInterface) || FIELD_DEFAULT_BINDING_FALLBACKS[scope];
151
+ }
152
+ // Annotate the CommonJS export names for ESM import in node:
153
+ 0 && (module.exports = {
154
+ CORE_FIELD_DEFAULT_BINDING_MATRIX,
155
+ getSharedFieldDefaultBindingUse,
156
+ inferSharedFieldDefaultBindingUse
157
+ });