@nocobase/plugin-flow-engine 2.1.0-beta.17 → 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
@@ -81,6 +81,30 @@ const FLOW_SURFACE_DEFAULT_BLOCK_ACTIONS = {
81
81
  },
82
82
  { type: "refresh", scope: "actions" }
83
83
  ],
84
+ calendar: [
85
+ { type: "filter", scope: "actions" },
86
+ {
87
+ type: "addNew",
88
+ scope: "actions",
89
+ popup: {
90
+ tryTemplate: true,
91
+ [FLOW_SURFACE_INTERNAL_AUTO_SAVE_DEFAULT_POPUP_TEMPLATE_KEY]: true
92
+ }
93
+ },
94
+ { type: "refresh", scope: "actions" }
95
+ ],
96
+ kanban: [
97
+ { type: "filter", scope: "actions" },
98
+ {
99
+ type: "addNew",
100
+ scope: "actions",
101
+ popup: {
102
+ tryTemplate: true,
103
+ [FLOW_SURFACE_INTERNAL_AUTO_SAVE_DEFAULT_POPUP_TEMPLATE_KEY]: true
104
+ }
105
+ },
106
+ { type: "refresh", scope: "actions" }
107
+ ],
84
108
  createForm: [{ type: "submit", scope: "actions" }],
85
109
  editForm: [{ type: "submit", scope: "actions" }],
86
110
  details: [
@@ -47,8 +47,10 @@ const DETAILS_FIELD_CONTAINER_USES = /* @__PURE__ */ new Set([
47
47
  "DetailsItemModel",
48
48
  "ListBlockModel",
49
49
  "GridCardBlockModel",
50
+ "KanbanBlockModel",
50
51
  "ListItemModel",
51
- "GridCardItemModel"
52
+ "GridCardItemModel",
53
+ "KanbanCardItemModel"
52
54
  ]);
53
55
  const FILTER_FIELD_CONTAINER_USES = /* @__PURE__ */ new Set(["FilterFormBlockModel", "FilterFormGridModel", "FilterFormItemModel"]);
54
56
  const TABLE_FIELD_CONTAINER_USES = /* @__PURE__ */ new Set(["TableBlockModel", "TableColumnModel"]);
@@ -51,8 +51,13 @@ const FLOW_SURFACE_LOCAL_TRANSLATIONS = {
51
51
  }
52
52
  };
53
53
  function getValues(ctx) {
54
- var _a, _b, _c;
55
- return ((_b = (_a = ctx.action) == null ? void 0 : _a.params) == null ? void 0 : _b.values) ?? ((_c = ctx.action) == null ? void 0 : _c.params) ?? {};
54
+ var _a, _b, _c, _d, _e;
55
+ const values = ((_b = (_a = ctx.action) == null ? void 0 : _a.params) == null ? void 0 : _b.values) ?? ((_c = ctx.action) == null ? void 0 : _c.params) ?? {};
56
+ const actionName = (_d = ctx.action) == null ? void 0 : _d.actionName;
57
+ if (isInvalidFlowSurfaceWritePayload(values) && actionName && !((_e = import_constants.FLOW_SURFACE_ACTION_DEFINITIONS[actionName]) == null ? void 0 : _e.read)) {
58
+ throw new import_errors.FlowSurfaceBadRequestError(getFlowSurfaceWritePayloadMessage(actionName));
59
+ }
60
+ return values;
56
61
  }
57
62
  function isImplicitEmptyValuesBag(value) {
58
63
  return !!value && typeof value === "object" && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype && Object.keys(value).length === 0;
@@ -119,6 +124,56 @@ function writeFlowSurfaceErrorResponse(ctx, error) {
119
124
  ctx.status = normalized.status;
120
125
  ctx.body = normalized.toResponseBody();
121
126
  }
127
+ function isFlowSurfaceWriteActionName(value) {
128
+ return Object.prototype.hasOwnProperty.call(import_constants.FLOW_SURFACE_ACTION_DEFINITIONS, value);
129
+ }
130
+ function getFlowSurfaceRequestActionName(ctx) {
131
+ var _a, _b;
132
+ const actionName = String(((_a = ctx.action) == null ? void 0 : _a.actionName) || "").trim();
133
+ if (isFlowSurfaceWriteActionName(actionName)) {
134
+ return actionName;
135
+ }
136
+ const path = String(ctx.path || ((_b = ctx.request) == null ? void 0 : _b.path) || "").trim();
137
+ const match = path.match(/(?:^|\/)flowSurfaces:([^/?#]+)$/);
138
+ const rawActionName = String((match == null ? void 0 : match[1]) || "").trim();
139
+ return isFlowSurfaceWriteActionName(rawActionName) ? rawActionName : void 0;
140
+ }
141
+ function isFlowSurfaceWriteRequest(ctx) {
142
+ var _a;
143
+ if (String(((_a = ctx.request) == null ? void 0 : _a.method) || "").toUpperCase() !== "POST") {
144
+ return false;
145
+ }
146
+ const actionName = getFlowSurfaceRequestActionName(ctx);
147
+ return !!actionName && import_constants.FLOW_SURFACE_ACTION_DEFINITIONS[actionName].read === false;
148
+ }
149
+ function isInvalidFlowSurfaceWritePayload(value) {
150
+ if (!value || typeof value !== "object") {
151
+ return true;
152
+ }
153
+ return Array.isArray(value);
154
+ }
155
+ function getFlowSurfaceWritePayloadMessage(actionName) {
156
+ const noun = actionName === "applyBlueprint" || actionName === "applyApprovalBlueprint" ? "payload" : "values";
157
+ return `flowSurfaces ${actionName} ${noun} must be an object`;
158
+ }
159
+ function isFlowSurfaceWriteBodyParserShapeError(error) {
160
+ const parserError = error;
161
+ return error instanceof SyntaxError && parserError.status === 400 && parserError.message === "invalid JSON, only supports object and array";
162
+ }
163
+ async function runFlowSurfaceWriteBodyParserErrorWrapper(ctx, next) {
164
+ try {
165
+ await next();
166
+ } catch (error) {
167
+ if (!isFlowSurfaceWriteRequest(ctx) || !isFlowSurfaceWriteBodyParserShapeError(error)) {
168
+ throw error;
169
+ }
170
+ const actionName = getFlowSurfaceRequestActionName(ctx);
171
+ if (!actionName) {
172
+ throw error;
173
+ }
174
+ writeFlowSurfaceErrorResponse(ctx, new import_errors.FlowSurfaceBadRequestError(getFlowSurfaceWritePayloadMessage(actionName)));
175
+ }
176
+ }
122
177
  function isAclPermissionDeniedForFlowSurfaces(ctx, error) {
123
178
  var _a, _b;
124
179
  const resourceName = ((_a = ctx.action) == null ? void 0 : _a.resourceName) ?? ((_b = ctx.permission) == null ? void 0 : _b.resourceName);
@@ -231,6 +286,10 @@ function registerFlowSurfacesResource(plugin) {
231
286
  after: "allow-manager",
232
287
  before: "core"
233
288
  });
289
+ plugin.app.use(runFlowSurfaceWriteBodyParserErrorWrapper, {
290
+ tag: "flow-surfaces-write-body-errors",
291
+ before: "bodyParser"
292
+ });
234
293
  plugin.app.resourceManager.define({
235
294
  name: "flowSurfaces",
236
295
  actions
@@ -39,6 +39,7 @@ var import_approval = require("./approval");
39
39
  const COLLECTION_BLOCK_USES = /* @__PURE__ */ new Set([
40
40
  "TableBlockModel",
41
41
  "CalendarBlockModel",
42
+ "KanbanBlockModel",
42
43
  "CreateFormModel",
43
44
  "EditFormModel",
44
45
  "FormBlockModel",
@@ -109,6 +110,8 @@ const ACTION_BUTTON_USES = /* @__PURE__ */ new Set([
109
110
  "CalendarNavActionModel",
110
111
  "CalendarTitleActionModel",
111
112
  "CalendarViewSelectActionModel",
113
+ "KanbanQuickCreateActionModel",
114
+ "KanbanCardViewActionModel",
112
115
  "ApplyFormSubmitModel",
113
116
  "ApplyFormSaveDraftModel",
114
117
  "ApplyFormWithdrawModel",
@@ -58,6 +58,8 @@ const FLOW_SURFACE_POPUP_HOST_USES = /* @__PURE__ */ new Set([
58
58
  "PopupCollectionActionModel",
59
59
  "CalendarQuickCreateActionModel",
60
60
  "CalendarEventViewActionModel",
61
+ "KanbanQuickCreateActionModel",
62
+ "KanbanCardViewActionModel",
61
63
  "ClickableFieldModel",
62
64
  "DisplayTextFieldModel",
63
65
  "DisplayEnumFieldModel",
@@ -161,6 +163,7 @@ function isActionContainerUse(parentUse) {
161
163
  return [
162
164
  "TableBlockModel",
163
165
  "CalendarBlockModel",
166
+ "KanbanBlockModel",
164
167
  "TableActionsColumnModel",
165
168
  "ListBlockModel",
166
169
  "GridCardBlockModel",
@@ -7,12 +7,16 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
  export declare const FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPES: Set<string>;
10
+ export declare const FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPE_LABEL = "table/list/gridCard/calendar/kanban";
10
11
  export declare function isFlowSurfacePublicDataSurfaceBlockType(blockType?: string): boolean;
11
12
  export declare function normalizeFlowSurfacePublicBlockDefaultFilter(actionName: string, defaultFilter: any, options: {
12
13
  blockType?: string;
13
14
  template?: unknown;
14
15
  path?: string;
15
16
  }): any;
17
+ export declare function assertFlowSurfaceConcreteDefaultFilterItem(actionName: string, defaultFilter: any, options?: {
18
+ path?: string;
19
+ }): void;
16
20
  export declare function backfillFlowSurfaceDefaultFilterSetting(settings: any, defaultFilter: any): any;
17
21
  export declare function backfillFlowSurfaceFilterActionDefaultFilter<T extends {
18
22
  type?: string;
@@ -37,6 +37,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
37
37
  var public_data_surface_default_filter_exports = {};
38
38
  __export(public_data_surface_default_filter_exports, {
39
39
  FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPES: () => FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPES,
40
+ FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPE_LABEL: () => FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPE_LABEL,
41
+ assertFlowSurfaceConcreteDefaultFilterItem: () => assertFlowSurfaceConcreteDefaultFilterItem,
40
42
  backfillFlowSurfaceDefaultFilterSetting: () => backfillFlowSurfaceDefaultFilterSetting,
41
43
  backfillFlowSurfaceFilterActionDefaultFilter: () => backfillFlowSurfaceFilterActionDefaultFilter,
42
44
  isFlowSurfacePublicDataSurfaceBlockType: () => isFlowSurfacePublicDataSurfaceBlockType,
@@ -46,7 +48,14 @@ module.exports = __toCommonJS(public_data_surface_default_filter_exports);
46
48
  var import_lodash = __toESM(require("lodash"));
47
49
  var import_errors = require("./errors");
48
50
  var import_filter_group = require("./filter-group");
49
- const FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPES = /* @__PURE__ */ new Set(["table", "list", "gridCard"]);
51
+ const FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPES = /* @__PURE__ */ new Set([
52
+ "table",
53
+ "list",
54
+ "gridCard",
55
+ "calendar",
56
+ "kanban"
57
+ ]);
58
+ const FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPE_LABEL = "table/list/gridCard/calendar/kanban";
50
59
  function isFlowSurfacePublicDataSurfaceBlockType(blockType) {
51
60
  return FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPES.has(String(blockType || "").trim());
52
61
  }
@@ -54,14 +63,44 @@ function normalizeFlowSurfacePublicBlockDefaultFilter(actionName, defaultFilter,
54
63
  if (import_lodash.default.isUndefined(defaultFilter)) {
55
64
  return void 0;
56
65
  }
57
- const fieldPath = options.path ? `${options.path}.defaultFilter` : "defaultFilter";
66
+ const fieldPath = buildFlowSurfaceDefaultFilterFieldPath(actionName, options.path);
58
67
  if (!isFlowSurfacePublicDataSurfaceBlockType(options.blockType) || !import_lodash.default.isUndefined(options.template)) {
59
- (0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} ${fieldPath} is only supported on direct table/list/gridCard blocks`);
68
+ (0, import_errors.throwBadRequest)(
69
+ `flowSurfaces ${actionName} ${fieldPath} is only supported on direct ${FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPE_LABEL} blocks`
70
+ );
60
71
  }
61
- return (0, import_filter_group.normalizeFlowSurfaceFilterGroupValue)(
72
+ const normalized = (0, import_filter_group.normalizeFlowSurfaceFilterGroupValue)(
62
73
  defaultFilter,
63
74
  `flowSurfaces ${actionName} ${fieldPath} expects FilterGroup like ${import_filter_group.FLOW_SURFACE_FILTER_GROUP_EXAMPLE}`
64
75
  );
76
+ return normalized;
77
+ }
78
+ function assertFlowSurfaceConcreteDefaultFilterItem(actionName, defaultFilter, options = {}) {
79
+ const fieldPath = buildFlowSurfaceDefaultFilterFieldPath(actionName, options.path);
80
+ if (!hasConcreteFlowSurfaceFilterItem(defaultFilter)) {
81
+ (0, import_errors.throwBadRequest)(
82
+ `flowSurfaces ${actionName} ${fieldPath} must include at least one concrete filter item; empty defaultFilter groups such as {}, null, or { logic, items: [] } are not allowed`
83
+ );
84
+ }
85
+ }
86
+ function buildFlowSurfaceDefaultFilterFieldPath(actionName, path) {
87
+ if (!path) {
88
+ return "defaultFilter";
89
+ }
90
+ const prefix = `flowSurfaces ${actionName} `;
91
+ const normalizedPath = path.startsWith(prefix) ? path.slice(prefix.length) : path;
92
+ return normalizedPath.endsWith(".defaultFilter") ? normalizedPath : `${normalizedPath}.defaultFilter`;
93
+ }
94
+ function hasConcreteFlowSurfaceFilterItem(filter) {
95
+ if (!import_lodash.default.isPlainObject(filter) || !Array.isArray(filter.items)) {
96
+ return false;
97
+ }
98
+ return filter.items.some((item) => {
99
+ if (import_lodash.default.isPlainObject(item) && "logic" in item && "items" in item) {
100
+ return hasConcreteFlowSurfaceFilterItem(item);
101
+ }
102
+ return import_lodash.default.isPlainObject(item) && typeof item.path === "string" && typeof item.operator === "string";
103
+ });
65
104
  }
66
105
  function backfillFlowSurfaceDefaultFilterSetting(settings, defaultFilter) {
67
106
  if (import_lodash.default.isUndefined(defaultFilter)) {
@@ -104,6 +143,8 @@ function backfillFlowSurfaceFilterActionDefaultFilter(actions, defaultFilter) {
104
143
  // Annotate the CommonJS export names for ESM import in node:
105
144
  0 && (module.exports = {
106
145
  FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPES,
146
+ FLOW_SURFACE_PUBLIC_DATA_SURFACE_BLOCK_TYPE_LABEL,
147
+ assertFlowSurfaceConcreteDefaultFilterItem,
107
148
  backfillFlowSurfaceDefaultFilterSetting,
108
149
  backfillFlowSurfaceFilterActionDefaultFilter,
109
150
  isFlowSurfacePublicDataSurfaceBlockType,
@@ -66,6 +66,7 @@ __export(service_helpers_exports, {
66
66
  });
67
67
  module.exports = __toCommonJS(service_helpers_exports);
68
68
  var import_lodash = __toESM(require("lodash"));
69
+ var import_core_field_default_bindings = require("./core-field-default-bindings");
69
70
  const FLOW_SURFACE_TEMPLATE_DEFAULT_PAGE = 1;
70
71
  const FLOW_SURFACE_TEMPLATE_DEFAULT_PAGE_SIZE = 50;
71
72
  function toTemplatePlainRow(row) {
@@ -206,82 +207,14 @@ function getFieldFilterable(field) {
206
207
  return (_a = field == null ? void 0 : field.options) == null ? void 0 : _a.filterable;
207
208
  }
208
209
  function inferAssociationLeafDisplayFieldUse(fieldInterface) {
209
- const normalized = String(fieldInterface || "").trim();
210
- const map = {
211
- richText: "DisplayHtmlFieldModel",
212
- number: "DisplayNumberFieldModel",
213
- integer: "DisplayNumberFieldModel",
214
- id: "DisplayNumberFieldModel",
215
- snowflakeId: "DisplayNumberFieldModel",
216
- json: "DisplayJSONFieldModel",
217
- select: "DisplayTextFieldModel",
218
- multipleSelect: "DisplayTextFieldModel",
219
- radioGroup: "DisplayTextFieldModel",
220
- checkboxGroup: "DisplayTextFieldModel",
221
- collection: "DisplayTextFieldModel",
222
- tableoid: "DisplayTextFieldModel",
223
- icon: "DisplayIconFieldModel",
224
- checkbox: "DisplayCheckboxFieldModel",
225
- password: "DisplayPasswordFieldModel",
226
- percent: "DisplayPercentFieldModel",
227
- date: "DisplayDateTimeFieldModel",
228
- datetimeNoTz: "DisplayDateTimeFieldModel",
229
- createdAt: "DisplayDateTimeFieldModel",
230
- datetime: "DisplayDateTimeFieldModel",
231
- updatedAt: "DisplayDateTimeFieldModel",
232
- unixTimestamp: "DisplayDateTimeFieldModel",
233
- formula: "DisplayDateTimeFieldModel",
234
- input: "DisplayTextFieldModel",
235
- email: "DisplayTextFieldModel",
236
- phone: "DisplayTextFieldModel",
237
- uuid: "DisplayTextFieldModel",
238
- textarea: "DisplayTextFieldModel",
239
- nanoid: "DisplayTextFieldModel",
240
- url: "DisplayURLFieldModel",
241
- color: "DisplayColorFieldModel",
242
- time: "DisplayTimeFieldModel"
243
- };
244
- return map[normalized];
210
+ return (0, import_core_field_default_bindings.getSharedFieldDefaultBindingUse)("display", fieldInterface);
245
211
  }
246
212
  function inferFieldMenuEditableFieldUse(fieldInterface) {
247
213
  const normalized = String(fieldInterface || "").trim();
248
214
  if (["m2m", "m2o", "o2o", "o2m", "oho", "obo", "updatedBy", "createdBy", "mbm"].includes(normalized)) {
249
215
  return "RecordSelectFieldModel";
250
216
  }
251
- const map = {
252
- json: "JsonFieldModel",
253
- textarea: "TextareaFieldModel",
254
- icon: "IconFieldModel",
255
- radioGroup: "SelectFieldModel",
256
- color: "ColorFieldModel",
257
- select: "SelectFieldModel",
258
- multipleSelect: "SelectFieldModel",
259
- checkboxGroup: "SelectFieldModel",
260
- checkbox: "CheckboxFieldModel",
261
- password: "PasswordFieldModel",
262
- number: "NumberFieldModel",
263
- integer: "NumberFieldModel",
264
- id: "NumberFieldModel",
265
- snowflakeId: "NumberFieldModel",
266
- percent: "PercentFieldModel",
267
- datetimeNoTz: "DateTimeNoTzFieldModel",
268
- date: "DateOnlyFieldModel",
269
- datetime: "DateTimeTzFieldModel",
270
- createdAt: "DateTimeTzFieldModel",
271
- updatedAt: "DateTimeTzFieldModel",
272
- unixTimestamp: "DateTimeTzFieldModel",
273
- time: "TimeFieldModel",
274
- collection: "CollectionSelectorFieldModel",
275
- tableoid: "CollectionSelectorFieldModel",
276
- richText: "RichTextFieldModel",
277
- input: "InputFieldModel",
278
- email: "InputFieldModel",
279
- phone: "InputFieldModel",
280
- uuid: "InputFieldModel",
281
- url: "InputFieldModel",
282
- nanoid: "InputFieldModel"
283
- };
284
- return map[normalized];
217
+ return (0, import_core_field_default_bindings.getSharedFieldDefaultBindingUse)("editable", normalized);
285
218
  }
286
219
  function isAssociationField(field) {
287
220
  if (typeof (field == null ? void 0 : field.isAssociationField) === "function") {
@@ -271,7 +271,7 @@ export declare class FlowSurfacesService {
271
271
  }): Promise<import("./compose-runtime").FlowSurfaceComposeExecutionResult>;
272
272
  configure(values: FlowSurfaceConfigureValues, options?: {
273
273
  transaction?: any;
274
- }): Promise<{
274
+ }): Promise<_.Dictionary<any> | {
275
275
  uid: any;
276
276
  updated?: undefined;
277
277
  } | {
@@ -607,6 +607,9 @@ export declare class FlowSurfacesService {
607
607
  private assertComposeMode;
608
608
  private assertMutateAtomicFlag;
609
609
  private normalizeWriteTarget;
610
+ private parseCalendarPopupActionTargetUid;
611
+ private parseKanbanPopupActionTargetUid;
612
+ private prepareWriteTarget;
610
613
  private normalizeRootUidValue;
611
614
  private assertRouteBackedPageUidTarget;
612
615
  private assertRouteBackedTabUidTarget;
@@ -662,6 +665,7 @@ export declare class FlowSurfacesService {
662
665
  private configureTab;
663
666
  private configureTableBlock;
664
667
  private configureCalendarBlock;
668
+ private configureKanbanBlock;
665
669
  private configureFormBlock;
666
670
  private configureDetailsBlock;
667
671
  private configureFilterFormBlock;
@@ -720,6 +724,34 @@ export declare class FlowSurfacesService {
720
724
  private resolvePopupSourceRecordCollectionName;
721
725
  private resolvePopupContextLevel;
722
726
  private getCollection;
727
+ private normalizeKanbanFieldNameInput;
728
+ private getKanbanCollectionFilterTargetKey;
729
+ private isKanbanMultipleGroupField;
730
+ private isKanbanAssociationGroupField;
731
+ private isKanbanGroupField;
732
+ private getKanbanGroupFieldCandidates;
733
+ private getKanbanDefaultGroupFieldName;
734
+ private getKanbanGroupField;
735
+ private getKanbanCollectionOrThrow;
736
+ private assertKanbanCollectionCompatible;
737
+ private getKanbanRelationTargetCollection;
738
+ private getKanbanRelationFieldCandidateNames;
739
+ private getKanbanDefaultRelationTitleFieldName;
740
+ private assertKanbanRelationFieldBinding;
741
+ private getKanbanGroupFieldSortScopeKeys;
742
+ private getKanbanCompatibleSortFieldNames;
743
+ private resolveKanbanCompatibleSortFieldName;
744
+ private normalizeKanbanGroupOptions;
745
+ private buildKanbanInlineGroupOptions;
746
+ private mergeKanbanInlineGroupOptions;
747
+ private normalizeKanbanPopupSettings;
748
+ private getKanbanPopupActionUse;
749
+ private getKanbanPopupActionUid;
750
+ private getKanbanBlockResourceInit;
751
+ private getKanbanPopupStoredSettings;
752
+ private buildKanbanPopupOpenView;
753
+ private normalizeKanbanPopupConfigureValue;
754
+ private buildKanbanInitialBlockProps;
723
755
  private normalizeCalendarFieldPathInput;
724
756
  private isCalendarDateField;
725
757
  private isCalendarTitleField;
@@ -746,7 +778,16 @@ export declare class FlowSurfacesService {
746
778
  private buildCalendarInitialBlockProps;
747
779
  private ensureCalendarBlockPopupHosts;
748
780
  private ensureCalendarBlockPopupHostsInTree;
781
+ private projectCalendarBlockPopupHosts;
782
+ private projectCalendarBlockPopupHostsInTree;
783
+ private ensureKanbanBlockPopupHosts;
784
+ private ensureKanbanBlockPopupHostsInTree;
785
+ private projectKanbanBlockPopupHosts;
786
+ private projectKanbanBlockPopupHostsInTree;
787
+ private getCalendarSettingValue;
788
+ private validateCalendarSettingValues;
749
789
  private validateCalendarBlockState;
790
+ private validateKanbanBlockState;
750
791
  private resolveFieldDefinition;
751
792
  private getAssociationDefaultTitleFieldName;
752
793
  private getAssociationTitleFieldTargetCollection;