@stndrds/schema 1.0.0-alpha.279 → 1.0.0-alpha.281

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 (40) hide show
  1. package/dist/all-BVp3k9Hi.d.ts +471 -0
  2. package/dist/all-CnIU2anT.d.mts +471 -0
  3. package/dist/{chunk-PQEOIDXD.mjs → chunk-A5PPZ2FM.mjs} +1 -1
  4. package/dist/{chunk-ZEPGMHCK.js → chunk-E47WAI5K.js} +4 -4
  5. package/dist/{chunk-ZBWTAKZO.js → chunk-HWZRSXFB.js} +6 -1
  6. package/dist/{chunk-DEHBEFGO.js → chunk-LRFLSFIA.js} +3 -3
  7. package/dist/{chunk-QUZ3PN36.mjs → chunk-MLTXSBOB.mjs} +1 -1
  8. package/dist/{chunk-5PLJHYSL.mjs → chunk-ORPCS24B.mjs} +5 -11
  9. package/dist/{chunk-FRCDMQER.js → chunk-OYHBQMC7.js} +34 -0
  10. package/dist/{chunk-V2WJFUZW.mjs → chunk-SYQDFZ74.mjs} +6 -1
  11. package/dist/{chunk-QMAVKX3Y.js → chunk-TU6ECJFZ.js} +37 -43
  12. package/dist/chunk-XCLVXM7F.mjs +74 -0
  13. package/dist/exceptions.d.mts +5 -0
  14. package/dist/exceptions.d.ts +5 -0
  15. package/dist/exceptions.js +39 -39
  16. package/dist/exceptions.mjs +1 -1
  17. package/dist/{index-C3P5Dnwt.d.mts → index-DWoqObyG.d.mts} +13 -22
  18. package/dist/{index-SpFpkWVC.d.ts → index-TMlrIKAY.d.ts} +13 -22
  19. package/dist/index.d.mts +259 -94
  20. package/dist/index.d.ts +259 -94
  21. package/dist/index.js +1178 -317
  22. package/dist/index.mjs +970 -124
  23. package/dist/utils.d.mts +16 -1
  24. package/dist/utils.d.ts +16 -1
  25. package/dist/utils.js +11 -6
  26. package/dist/utils.mjs +2 -1
  27. package/dist/validation/all.d.mts +2 -2
  28. package/dist/validation/all.d.ts +2 -2
  29. package/dist/validation/all.js +29 -29
  30. package/dist/validation/all.mjs +4 -4
  31. package/dist/validation/config/index.d.mts +1 -1
  32. package/dist/validation/config/index.d.ts +1 -1
  33. package/dist/validation/config/index.js +11 -11
  34. package/dist/validation/config/index.mjs +2 -2
  35. package/dist/validation/object/index.js +14 -14
  36. package/dist/validation/object/index.mjs +2 -2
  37. package/package.json +2 -2
  38. package/dist/all-Bk8cRKsu.d.mts +0 -482
  39. package/dist/all-C_tC90ZM.d.ts +0 -482
  40. package/dist/chunk-QY6QFRRV.mjs +0 -41
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkFRCDMQER_js = require('./chunk-FRCDMQER.js');
4
- var chunkQMAVKX3Y_js = require('./chunk-QMAVKX3Y.js');
5
- var chunkDEHBEFGO_js = require('./chunk-DEHBEFGO.js');
6
- var chunkZEPGMHCK_js = require('./chunk-ZEPGMHCK.js');
3
+ var chunkOYHBQMC7_js = require('./chunk-OYHBQMC7.js');
4
+ var chunkTU6ECJFZ_js = require('./chunk-TU6ECJFZ.js');
5
+ var chunkLRFLSFIA_js = require('./chunk-LRFLSFIA.js');
6
+ var chunkE47WAI5K_js = require('./chunk-E47WAI5K.js');
7
7
  require('./chunk-EW5XR2X3.js');
8
8
  require('./chunk-QWKLQRBX.js');
9
9
  require('./chunk-KNGWHQLR.js');
@@ -13,7 +13,7 @@ var chunk5WATIVCA_js = require('./chunk-5WATIVCA.js');
13
13
  var chunkSI34M4IC_js = require('./chunk-SI34M4IC.js');
14
14
  var chunkYIP5FJ5H_js = require('./chunk-YIP5FJ5H.js');
15
15
  var chunkZPFOKBIN_js = require('./chunk-ZPFOKBIN.js');
16
- var chunkZBWTAKZO_js = require('./chunk-ZBWTAKZO.js');
16
+ var chunkHWZRSXFB_js = require('./chunk-HWZRSXFB.js');
17
17
  require('./chunk-ACKMC6FL.js');
18
18
  require('./chunk-E6JUYGJX.js');
19
19
  var chunkQ4SZAMJT_js = require('./chunk-Q4SZAMJT.js');
@@ -81,7 +81,7 @@ function inferInverseCardinality(cardinality) {
81
81
  return cardinality === "one" ? "many" : "many";
82
82
  }
83
83
  function isAttributeSortable2(attr) {
84
- return chunkQMAVKX3Y_js.isAttributeSortable(attr);
84
+ return chunkTU6ECJFZ_js.isAttributeSortable(attr);
85
85
  }
86
86
 
87
87
  // src/types/audit.ts
@@ -148,14 +148,14 @@ function sessionStateToLegacyStatus(state) {
148
148
  return "idle";
149
149
  case "parked":
150
150
  if (state.parkedOn === void 0) {
151
- throw new chunkZBWTAKZO_js.SchemaError("parked state without parkedOn", chunkZBWTAKZO_js.SchemaErrorCode.INVARIANT_VIOLATION);
151
+ throw new chunkHWZRSXFB_js.SchemaError("parked state without parkedOn", chunkHWZRSXFB_js.SchemaErrorCode.INVARIANT_VIOLATION);
152
152
  }
153
153
  return state.parkedOn === "agents" ? "waiting_agents" : "waiting_human";
154
154
  case "terminal":
155
155
  if (state.outcome === void 0) {
156
- throw new chunkZBWTAKZO_js.SchemaError(
156
+ throw new chunkHWZRSXFB_js.SchemaError(
157
157
  "terminal state without outcome",
158
- chunkZBWTAKZO_js.SchemaErrorCode.INVARIANT_VIOLATION
158
+ chunkHWZRSXFB_js.SchemaErrorCode.INVARIANT_VIOLATION
159
159
  );
160
160
  }
161
161
  return state.outcome;
@@ -185,6 +185,18 @@ var SESSION_TERMINAL_STATUSES = [
185
185
  function isTerminalSessionStatus(status2) {
186
186
  return SESSION_TERMINAL_STATUSES.includes(status2);
187
187
  }
188
+ var CLAIMABLE_SESSION_STATUSES = [
189
+ "idle",
190
+ "completed",
191
+ "waiting_human",
192
+ "waiting_agents",
193
+ "cancelled",
194
+ "failed",
195
+ "timeout"
196
+ ];
197
+ function isClaimableSessionStatus(status2) {
198
+ return CLAIMABLE_SESSION_STATUSES.includes(status2);
199
+ }
188
200
  var DEFAULT_APPROVAL_POLICY = Object.freeze({
189
201
  mutation: "ask",
190
202
  destructive: "ask",
@@ -205,7 +217,7 @@ var NATIVE_AGENT_UI_PART_IDS_METADATA_KEY = "__stndrdsNativeUiPartIds";
205
217
  var NATIVE_AGENT_UI_PART_IDS_METADATA_SCHEMA_VERSION = 1;
206
218
  var INVALID_NATIVE_PART_IDS = "Native agent UI part IDs metadata is invalid";
207
219
  function invalidNativePartIds() {
208
- throw new chunkZBWTAKZO_js.ValidationError(INVALID_NATIVE_PART_IDS, []);
220
+ throw new chunkHWZRSXFB_js.ValidationError(INVALID_NATIVE_PART_IDS, []);
209
221
  }
210
222
  function isPlainRecord(value) {
211
223
  if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
@@ -376,9 +388,6 @@ function isListView(view) {
376
388
  function isFieldGroup(group2) {
377
389
  return group2.type === "fields";
378
390
  }
379
- function isRelationGroup(group2) {
380
- return group2.type === "relation";
381
- }
382
391
 
383
392
  // src/types/pagination.ts
384
393
  var COUNT_MODES = ["none", "estimated", "exact"];
@@ -386,7 +395,7 @@ function parseCountMode(value) {
386
395
  if (typeof value === "string" && COUNT_MODES.includes(value)) {
387
396
  return value;
388
397
  }
389
- throw new chunkZBWTAKZO_js.ValidationError(
398
+ throw new chunkHWZRSXFB_js.ValidationError(
390
399
  // biome-ignore lint/style/useTemplate: see the comment above.
391
400
  "countMode must be one of: " + COUNT_MODES.join(", ") + " (received: " + String(value) + ")",
392
401
  []
@@ -493,7 +502,7 @@ function isDateRangeValue(value) {
493
502
  return typeof value === "object" && value !== null && typeof value.start === "string";
494
503
  }
495
504
  function normalizeDateValue(value, attr) {
496
- if (chunkZEPGMHCK_js.isNullishOrEmptyString(value)) return null;
505
+ if (chunkE47WAI5K_js.isNullishOrEmptyString(value)) return null;
497
506
  if (isDateRangeValue(value)) {
498
507
  return attr.endDate ? { start: value.start, end: value.end ?? null } : value.start;
499
508
  }
@@ -631,7 +640,7 @@ function formatMultiselect(value, attribute) {
631
640
  return value.join(", ");
632
641
  }
633
642
  function formatAttributeValue(value, attribute) {
634
- if (chunkZEPGMHCK_js.isNullishOrEmptyString(value)) {
643
+ if (chunkE47WAI5K_js.isNullishOrEmptyString(value)) {
635
644
  return EMPTY_VALUE_PLACEHOLDER;
636
645
  }
637
646
  switch (attribute.type) {
@@ -784,7 +793,7 @@ function renderLabelExpression(template, values, fallback = DEFAULT_LABEL_FALLBA
784
793
  break;
785
794
  }
786
795
  }
787
- const isEmpty2 = chunkZEPGMHCK_js.isNullishOrEmptyString(value);
796
+ const isEmpty2 = chunkE47WAI5K_js.isNullishOrEmptyString(value);
788
797
  if (isEmpty2 && pipes.length === 0) return "";
789
798
  for (const pipeExpr of pipes) {
790
799
  const { name: pipeName, args } = parsePipeExpression(pipeExpr);
@@ -861,7 +870,7 @@ function relationPropertyDefs(attribute) {
861
870
  return attribute.properties?.definitions;
862
871
  }
863
872
  function extractValueRefs(value) {
864
- if (chunkZEPGMHCK_js.isNullishOrEmptyString(value)) return [];
873
+ if (chunkE47WAI5K_js.isNullishOrEmptyString(value)) return [];
865
874
  if (typeof value === "string") return [{ id: value }];
866
875
  if (Array.isArray(value)) return value.flatMap((item) => extractValueRefs(item));
867
876
  if (typeof value === "object" && "id" in value) {
@@ -1065,24 +1074,24 @@ function validateObjectName(name) {
1065
1074
  OBJECT_NAME_SCHEMA.parse(name);
1066
1075
  } catch (error) {
1067
1076
  if (error instanceof z2__default.default.ZodError) {
1068
- throw new chunkZBWTAKZO_js.SchemaError(error.issues[0].message, chunkZBWTAKZO_js.SchemaErrorCode.INVALID_OBJECT_NAME);
1077
+ throw new chunkHWZRSXFB_js.SchemaError(error.issues[0].message, chunkHWZRSXFB_js.SchemaErrorCode.INVALID_OBJECT_NAME);
1069
1078
  }
1070
1079
  throw error;
1071
1080
  }
1072
1081
  }
1073
1082
  function validateViewName(name) {
1074
1083
  if (!name || name.length === 0) {
1075
- throw new chunkZBWTAKZO_js.ValidationError("View name cannot be empty", [
1084
+ throw new chunkHWZRSXFB_js.ValidationError("View name cannot be empty", [
1076
1085
  { path: ["name"], message: "View name cannot be empty" }
1077
1086
  ]);
1078
1087
  }
1079
1088
  if (name.length > MAX_NAME_LENGTH) {
1080
- throw new chunkZBWTAKZO_js.ValidationError("View name is too long", [
1089
+ throw new chunkHWZRSXFB_js.ValidationError("View name is too long", [
1081
1090
  { path: ["name"], message: `View name is too long (max ${MAX_NAME_LENGTH} characters)` }
1082
1091
  ]);
1083
1092
  }
1084
1093
  if (!VIEW_NAME_REGEX.test(name)) {
1085
- throw new chunkZBWTAKZO_js.ValidationError("Invalid view name format", [
1094
+ throw new chunkHWZRSXFB_js.ValidationError("Invalid view name format", [
1086
1095
  {
1087
1096
  path: ["name"],
1088
1097
  message: "View name must be in kebab-case (e.g., 'detail', 'list-view')"
@@ -1114,10 +1123,10 @@ function validateAttributeName(name) {
1114
1123
  "[AttributeBuilder] Invalid attribute name format.\nName must be a valid variable identifier:\n \u2705 Valid: 'firstName', 'first_name', 'FirstName', 'FIRST_NAME'\n \u274C Invalid: 'first-name', 'first name', '123name', 'first.name'"
1115
1124
  );
1116
1125
  }
1117
- if (chunkQMAVKX3Y_js.RESERVED_ATTRIBUTE_NAMES.includes(name)) {
1126
+ if (chunkTU6ECJFZ_js.RESERVED_ATTRIBUTE_NAMES.includes(name)) {
1118
1127
  throw new Error(
1119
1128
  `[AttributeBuilder] "${name}" is a reserved name and cannot be used as an attribute name.
1120
- Reserved names: ${chunkQMAVKX3Y_js.RESERVED_ATTRIBUTE_NAMES.join(", ")}`
1129
+ Reserved names: ${chunkTU6ECJFZ_js.RESERVED_ATTRIBUTE_NAMES.join(", ")}`
1121
1130
  );
1122
1131
  }
1123
1132
  }
@@ -1184,7 +1193,7 @@ var DEFAULT_AGENT_EXECUTION_CONFIG = {
1184
1193
  var AgentBuilder = class {
1185
1194
  constructor(config) {
1186
1195
  if (!config.name || config.name.trim().length === 0) {
1187
- throw new chunkZBWTAKZO_js.ValidationError("Agent name is required", []);
1196
+ throw new chunkHWZRSXFB_js.ValidationError("Agent name is required", []);
1188
1197
  }
1189
1198
  this.bp = { name: config.name, system: true, visibility: "workspace", triggers: [] };
1190
1199
  }
@@ -1318,13 +1327,13 @@ var AgentBuilder = class {
1318
1327
  }
1319
1328
  build() {
1320
1329
  if (!this.bp.systemPrompt) {
1321
- throw new chunkZBWTAKZO_js.ValidationError(`Agent "${this.bp.name}": systemPrompt is required`, []);
1330
+ throw new chunkHWZRSXFB_js.ValidationError(`Agent "${this.bp.name}": systemPrompt is required`, []);
1322
1331
  }
1323
1332
  if (!this.bp.model) {
1324
- throw new chunkZBWTAKZO_js.ValidationError(`Agent "${this.bp.name}": model is required`, []);
1333
+ throw new chunkHWZRSXFB_js.ValidationError(`Agent "${this.bp.name}": model is required`, []);
1325
1334
  }
1326
1335
  if (this.bp.system && this.bp.visibility === "private") {
1327
- throw new chunkZBWTAKZO_js.ValidationError(
1336
+ throw new chunkHWZRSXFB_js.ValidationError(
1328
1337
  `Agent "${this.bp.name}": system agents must use workspace visibility`,
1329
1338
  []
1330
1339
  );
@@ -1332,7 +1341,7 @@ var AgentBuilder = class {
1332
1341
  assertUniqueBy(
1333
1342
  this.bp.triggers,
1334
1343
  (t) => t.name,
1335
- (name) => new chunkZBWTAKZO_js.ValidationError(`Agent "${this.bp.name}": duplicate trigger name "${name}"`, [])
1344
+ (name) => new chunkHWZRSXFB_js.ValidationError(`Agent "${this.bp.name}": duplicate trigger name "${name}"`, [])
1336
1345
  );
1337
1346
  return {
1338
1347
  ...this.bp,
@@ -1387,7 +1396,7 @@ var BaseAttributeBuilder = class {
1387
1396
  * @see https://standardschema.dev/
1388
1397
  */
1389
1398
  get "~standard"() {
1390
- const zodSchema = chunkZEPGMHCK_js.createAttributeValidator(this.build());
1399
+ const zodSchema = chunkE47WAI5K_js.createAttributeValidator(this.build());
1391
1400
  return createStandardSchemaProps(zodSchema);
1392
1401
  }
1393
1402
  constructor(type, name, label) {
@@ -2134,9 +2143,9 @@ var RollupAttributeBuilder = class extends BaseAttributeBuilder {
2134
2143
  if (fn === "original" && targetType !== void 0 && targetType !== "select" && targetType !== "status" && targetType !== "multiselect") {
2135
2144
  const relation2 = this.attr.relationAttribute ?? "relation";
2136
2145
  const target = this.attr.targetAttribute ?? "field";
2137
- throw new chunkZBWTAKZO_js.SchemaError(
2146
+ throw new chunkHWZRSXFB_js.SchemaError(
2138
2147
  `Rollup "${this.attr.name}": .using("original") only supports a "select", "status", or "multiselect" target, but .targetType("${targetType}") was given. To surface a plain ${targetType} value from a related record, use a formula instead \u2014 e.g. formula({ name: "${this.attr.name}", label: "\u2026" }).expression("${relation2}.${target}").`,
2139
- chunkZBWTAKZO_js.SchemaErrorCode.VALIDATION_FAILED
2148
+ chunkHWZRSXFB_js.SchemaErrorCode.VALIDATION_FAILED
2140
2149
  );
2141
2150
  }
2142
2151
  return super.build();
@@ -2646,7 +2655,7 @@ var ObjectBuilder = class {
2646
2655
  * @see https://standardschema.dev/
2647
2656
  */
2648
2657
  get "~standard"() {
2649
- const zodSchema = chunkZEPGMHCK_js.createObjectValidator(this.build());
2658
+ const zodSchema = chunkE47WAI5K_js.createObjectValidator(this.build());
2650
2659
  return createStandardSchemaProps(zodSchema);
2651
2660
  }
2652
2661
  /**
@@ -2774,7 +2783,7 @@ var ObjectBuilder = class {
2774
2783
  assertUniqueBy(
2775
2784
  [...this.obj.attributes, ...finalAttrs],
2776
2785
  (attribute) => attribute.name,
2777
- (name) => new chunkZBWTAKZO_js.DuplicateError(
2786
+ (name) => new chunkHWZRSXFB_js.DuplicateError(
2778
2787
  "attribute",
2779
2788
  name,
2780
2789
  `Object "${this.obj.name}": duplicate attribute name "${name}"`
@@ -2799,6 +2808,21 @@ var ObjectBuilder = class {
2799
2808
  this.obj.metadata = { ...this.obj.metadata, order: value };
2800
2809
  return this;
2801
2810
  }
2811
+ /**
2812
+ * Hide this object from navigation surfaces — the sidebar data section and
2813
+ * the command palette, which already honour `metadata.hidden`. For objects
2814
+ * that own a dedicated surface: `drives` has the Drive page, so listing it
2815
+ * beside business objects would offer the same thing twice under two
2816
+ * different affordances.
2817
+ *
2818
+ * The object stays whole everywhere else: API, search, permissions, agent
2819
+ * tools, filters and record pages all continue to see it. This hides a
2820
+ * navigation entry; it never restricts access.
2821
+ */
2822
+ hidden() {
2823
+ this.obj.metadata = { ...this.obj.metadata, hidden: true };
2824
+ return this;
2825
+ }
2802
2826
  /**
2803
2827
  * Set the label expression template for displaying records
2804
2828
  * This is REQUIRED for every object.
@@ -2888,26 +2912,26 @@ var ObjectBuilder = class {
2888
2912
  throw new Error("[ObjectBuilder] Missing required field: label");
2889
2913
  }
2890
2914
  if (!this._labelExpression) {
2891
- throw new chunkZBWTAKZO_js.SchemaError(
2915
+ throw new chunkHWZRSXFB_js.SchemaError(
2892
2916
  `Object "${this.obj.name}" must have a labelExpression. The labelExpression defines how records are displayed in lists and relations (e.g. "{{ name }}").`,
2893
- chunkZBWTAKZO_js.SchemaErrorCode.VALIDATION_FAILED
2917
+ chunkHWZRSXFB_js.SchemaErrorCode.VALIDATION_FAILED
2894
2918
  );
2895
2919
  }
2896
2920
  const labelResult = labelExpressionSchema.safeParse(this._labelExpression);
2897
2921
  if (!labelResult.success) {
2898
2922
  const errorMsg = labelResult.error.issues[0]?.message ?? "Invalid labelExpression";
2899
- throw new chunkZBWTAKZO_js.SchemaError(
2923
+ throw new chunkHWZRSXFB_js.SchemaError(
2900
2924
  `Invalid labelExpression for "${this.obj.name}": ${errorMsg}`,
2901
- chunkZBWTAKZO_js.SchemaErrorCode.VALIDATION_FAILED
2925
+ chunkHWZRSXFB_js.SchemaErrorCode.VALIDATION_FAILED
2902
2926
  );
2903
2927
  }
2904
2928
  if (this._embeddingExpression !== void 0) {
2905
2929
  const embeddingResult = labelExpressionSchema.safeParse(this._embeddingExpression);
2906
2930
  if (!embeddingResult.success) {
2907
2931
  const errorMsg = embeddingResult.error.issues[0]?.message ?? "Invalid embeddingExpression";
2908
- throw new chunkZBWTAKZO_js.SchemaError(
2932
+ throw new chunkHWZRSXFB_js.SchemaError(
2909
2933
  `Invalid embeddingExpression for "${this.obj.name}": ${errorMsg}`,
2910
- chunkZBWTAKZO_js.SchemaErrorCode.VALIDATION_FAILED
2934
+ chunkHWZRSXFB_js.SchemaErrorCode.VALIDATION_FAILED
2911
2935
  );
2912
2936
  }
2913
2937
  }
@@ -2949,7 +2973,7 @@ function object(config) {
2949
2973
  }
2950
2974
  function validatePresetStructure(presetId, nodes, depth) {
2951
2975
  const fail = (message, detail) => {
2952
- throw new chunkZBWTAKZO_js.ValidationError(message, [
2976
+ throw new chunkHWZRSXFB_js.ValidationError(message, [
2953
2977
  { path: ["documentLayout", "presets", presetId], message: detail }
2954
2978
  ]);
2955
2979
  };
@@ -3048,74 +3072,6 @@ var GroupBuilder = class {
3048
3072
  return this.data;
3049
3073
  }
3050
3074
  };
3051
- var RelationGroupBuilder = class {
3052
- constructor(id, label, attribute) {
3053
- this.data = { type: "relation" };
3054
- this.data.id = id;
3055
- this.data.label = label;
3056
- this.data.attribute = attribute;
3057
- }
3058
- /**
3059
- * Set group description
3060
- */
3061
- description(value) {
3062
- this.data.description = value;
3063
- return this;
3064
- }
3065
- /**
3066
- * Make group collapsible
3067
- * @param collapsed - Initial collapsed state (default: false)
3068
- */
3069
- collapsible(collapsed = false) {
3070
- this.data.collapsible = true;
3071
- this.data.collapsed = collapsed;
3072
- return this;
3073
- }
3074
- /**
3075
- * Set display order
3076
- */
3077
- order(value) {
3078
- this.data.order = value;
3079
- return this;
3080
- }
3081
- /**
3082
- * Set columns to display in the relations table
3083
- * @example .columns("name", "email", "phone")
3084
- */
3085
- columns(...names) {
3086
- this.data.columns = names;
3087
- return this;
3088
- }
3089
- /**
3090
- * Set the group as read-only (no add/remove/edit)
3091
- */
3092
- readOnly(value = true) {
3093
- this.data.readOnly = value;
3094
- return this;
3095
- }
3096
- /**
3097
- * Allow creating new related records inline
3098
- */
3099
- allowCreate(value = true) {
3100
- this.data.allowCreate = value;
3101
- return this;
3102
- }
3103
- /**
3104
- * Build the relation group definition
3105
- */
3106
- build() {
3107
- if (!this.data.id) {
3108
- throw new Error("[RelationGroupBuilder] id is required");
3109
- }
3110
- if (!this.data.label) {
3111
- throw new Error("[RelationGroupBuilder] label is required");
3112
- }
3113
- if (!this.data.attribute) {
3114
- throw new Error("[RelationGroupBuilder] attribute is required");
3115
- }
3116
- return this.data;
3117
- }
3118
- };
3119
3075
  var TableTabConfig = class {
3120
3076
  /** @internal */
3121
3077
  constructor(view, tabData) {
@@ -3466,7 +3422,7 @@ var TabBuilder = class {
3466
3422
  // ─────────────────────────────────────────────────────────────────────────
3467
3423
  /**
3468
3424
  * Create a form tab with groups
3469
- * @example .form(group("info", "Info").fields("name", "email"), relationGroup("contacts", "Contacts", "contacts"))
3425
+ * @example .form(group("info", "Info").fields("name", "email"))
3470
3426
  */
3471
3427
  form(...groups) {
3472
3428
  if (groups.length === 0) {
@@ -3477,9 +3433,7 @@ var TabBuilder = class {
3477
3433
  const tab = {
3478
3434
  ...this.base,
3479
3435
  type: "form",
3480
- groups: groups.map(
3481
- (g) => g instanceof GroupBuilder || g instanceof RelationGroupBuilder ? g.build() : g
3482
- )
3436
+ groups: groups.map((g) => g instanceof GroupBuilder ? g.build() : g)
3483
3437
  };
3484
3438
  return this.view._addTab(tab);
3485
3439
  }
@@ -3790,7 +3744,7 @@ var ListViewBuilder = class {
3790
3744
  }
3791
3745
  const config = {
3792
3746
  defaultFilters: this.data.defaultFilters ? {
3793
- id: chunkFRCDMQER_js.generateId(),
3747
+ id: chunkOYHBQMC7_js.generateId(),
3794
3748
  combinator: this.data.defaultFilters.combinator,
3795
3749
  rules: this.data.defaultFilters.rules
3796
3750
  } : void 0,
@@ -3805,7 +3759,7 @@ var ListViewBuilder = class {
3805
3759
  visibility: tab.visibility,
3806
3760
  columns: tab.columns,
3807
3761
  filters: tab.filters ? {
3808
- id: chunkFRCDMQER_js.generateId(),
3762
+ id: chunkOYHBQMC7_js.generateId(),
3809
3763
  combinator: tab.filters.combinator,
3810
3764
  rules: tab.filters.rules
3811
3765
  } : void 0,
@@ -3971,7 +3925,7 @@ var ListViewTabConfigBuilder = class _ListViewTabConfigBuilder {
3971
3925
  const protectedAttribute = findProtectedTabFilterAttribute(filters);
3972
3926
  if (protectedAttribute) {
3973
3927
  const message = `Tab filters cannot target "${protectedAttribute}". Use .visibility("private")`;
3974
- throw new chunkZBWTAKZO_js.ValidationError(message, [{ path: ["filters"], message }]);
3928
+ throw new chunkHWZRSXFB_js.ValidationError(message, [{ path: ["filters"], message }]);
3975
3929
  }
3976
3930
  this.tabData.filters = filters;
3977
3931
  return this;
@@ -4023,9 +3977,6 @@ function listView(name, label) {
4023
3977
  function group(id, label) {
4024
3978
  return new GroupBuilder(id, label);
4025
3979
  }
4026
- function relationGroup(id, label, attribute) {
4027
- return new RelationGroupBuilder(id, label, attribute);
4028
- }
4029
3980
 
4030
3981
  // src/feature-flags/flag-builder.ts
4031
3982
  function validateFlagName(name) {
@@ -4185,7 +4136,7 @@ function jsonFlag(name, defaultValue) {
4185
4136
 
4186
4137
  // src/feature-flags/flag-registry.ts
4187
4138
  function duplicateFlagError(name) {
4188
- return new chunkZBWTAKZO_js.DuplicateError(
4139
+ return new chunkHWZRSXFB_js.DuplicateError(
4189
4140
  "feature flag",
4190
4141
  name,
4191
4142
  `Flag "${name}" is already registered. Each flag name must be unique.`
@@ -4263,7 +4214,7 @@ var FlagRegistry = class {
4263
4214
  getOrThrow(name) {
4264
4215
  const flag = this.get(name);
4265
4216
  if (!flag) {
4266
- throw new chunkZBWTAKZO_js.NotFoundError(
4217
+ throw new chunkHWZRSXFB_js.NotFoundError(
4267
4218
  "Feature flag",
4268
4219
  name,
4269
4220
  void 0,
@@ -4362,7 +4313,25 @@ var FlagService = class {
4362
4313
  * @returns Map of flag names to resolved values
4363
4314
  */
4364
4315
  async resolveAll(context = {}) {
4365
- const resolved = /* @__PURE__ */ new Map();
4316
+ const flagNames = this.collectFlagNames();
4317
+ const overrides = this.repository && flagNames.size > 0 ? await this.getAllOverrides(context, [...flagNames]) : emptyOverrides();
4318
+ return this.resolveNames(flagNames, overrides, context);
4319
+ }
4320
+ /**
4321
+ * Resolve every flag from static defaults only, never touching the
4322
+ * overrides repository.
4323
+ *
4324
+ * For callers running outside any tenant context (e.g. tenant-less public
4325
+ * HTTP routes such as the connectors OAuth callback): overrides are
4326
+ * tenant-scoped in storage, so without a tenant there is nothing to fetch —
4327
+ * and asking the repository anyway would require the very context that is
4328
+ * absent.
4329
+ */
4330
+ resolveAllStatic() {
4331
+ return this.resolveNames(this.collectFlagNames(), emptyOverrides(), {});
4332
+ }
4333
+ /** Flag names known to this service: registry entries plus static defaults. */
4334
+ collectFlagNames() {
4366
4335
  const flagNames = /* @__PURE__ */ new Set();
4367
4336
  for (const name of this.registry.listNames()) {
4368
4337
  flagNames.add(name);
@@ -4370,10 +4339,12 @@ var FlagService = class {
4370
4339
  for (const name of this.staticDefaults.keys()) {
4371
4340
  flagNames.add(name);
4372
4341
  }
4373
- const overrides = this.repository && flagNames.size > 0 ? await this.getAllOverrides(context, [...flagNames]) : emptyOverrides();
4342
+ return flagNames;
4343
+ }
4344
+ resolveNames(flagNames, overrides, context) {
4345
+ const resolved = /* @__PURE__ */ new Map();
4374
4346
  for (const name of flagNames) {
4375
- const value = this.resolveValue(name, overrides, context);
4376
- resolved.set(name, value);
4347
+ resolved.set(name, this.resolveValue(name, overrides, context));
4377
4348
  }
4378
4349
  return resolved;
4379
4350
  }
@@ -4420,19 +4391,19 @@ var FlagService = class {
4420
4391
  */
4421
4392
  async setOverride(flagName, level, value, options = {}) {
4422
4393
  if (!this.repository) {
4423
- throw new chunkZBWTAKZO_js.SchemaError(
4394
+ throw new chunkHWZRSXFB_js.SchemaError(
4424
4395
  "Cannot set override: no FeatureFlagsRepository configured. Add featureFlags to your DatabaseAdapter to enable runtime overrides.",
4425
- chunkZBWTAKZO_js.SchemaErrorCode.CONFIGURATION_REQUIRED
4396
+ chunkHWZRSXFB_js.SchemaErrorCode.CONFIGURATION_REQUIRED
4426
4397
  );
4427
4398
  }
4428
4399
  const flag = this.registry.get(flagName);
4429
4400
  if (flag && !flag.allowedLevels.includes(level)) {
4430
4401
  const message = `Flag "${flagName}" does not allow ${level}-level overrides. Allowed levels: ${flag.allowedLevels.join(", ")}`;
4431
- throw new chunkZBWTAKZO_js.ValidationError(message, [{ path: ["level"], message }]);
4402
+ throw new chunkHWZRSXFB_js.ValidationError(message, [{ path: ["level"], message }]);
4432
4403
  }
4433
4404
  if (flag?.system) {
4434
4405
  const message = `Flag "${flagName}" is a system flag and cannot be overridden via API.`;
4435
- throw new chunkZBWTAKZO_js.ValidationError(message, [{ path: ["flagName"], message }]);
4406
+ throw new chunkHWZRSXFB_js.ValidationError(message, [{ path: ["flagName"], message }]);
4436
4407
  }
4437
4408
  await this.repository.setOverride({
4438
4409
  flagName,
@@ -4452,9 +4423,9 @@ var FlagService = class {
4452
4423
  */
4453
4424
  async deleteOverride(flagName, level, targetId) {
4454
4425
  if (!this.repository) {
4455
- throw new chunkZBWTAKZO_js.SchemaError(
4426
+ throw new chunkHWZRSXFB_js.SchemaError(
4456
4427
  "Cannot delete override: no FeatureFlagsRepository configured.",
4457
- chunkZBWTAKZO_js.SchemaErrorCode.CONFIGURATION_REQUIRED
4428
+ chunkHWZRSXFB_js.SchemaErrorCode.CONFIGURATION_REQUIRED
4458
4429
  );
4459
4430
  }
4460
4431
  await this.repository.deleteOverride(flagName, level, targetId);
@@ -4591,7 +4562,7 @@ var NativeObjectRegistryClass = class {
4591
4562
  if (!object2.system) {
4592
4563
  const message = `[NativeObjectRegistry] Cannot register object "${object2.name}" (id: ${object2.id}): missing system flag.
4593
4564
  Native objects must have system=true. Did you call .runtime() on the builder? Remove that call \u2014 objects are system:true by default.`;
4594
- throw new chunkZBWTAKZO_js.ValidationError(message, []);
4565
+ throw new chunkHWZRSXFB_js.ValidationError(message, []);
4595
4566
  }
4596
4567
  if (this.objects.has(object2.name)) {
4597
4568
  const existing = this.objects.get(object2.name);
@@ -4599,7 +4570,7 @@ Native objects must have system=true. Did you call .runtime() on the builder? Re
4599
4570
  - Existing: "${existing?.label}" (id: ${existing?.id})
4600
4571
  - New: "${object2.label}" (id: ${object2.id})
4601
4572
  Please use unique names for each native object.`;
4602
- throw new chunkZBWTAKZO_js.DuplicateError("object", object2.name, message);
4573
+ throw new chunkHWZRSXFB_js.DuplicateError("object", object2.name, message);
4603
4574
  }
4604
4575
  this.objects.set(object2.name, cloneObjectDefinition(object2));
4605
4576
  }
@@ -4631,7 +4602,7 @@ Please use unique names for each native object.`;
4631
4602
  if (!object2) {
4632
4603
  const message = `[NativeObjectRegistry] Native object "${name}" not found.
4633
4604
  Available objects: ${this.listNames().join(", ")}`;
4634
- throw new chunkZBWTAKZO_js.NotFoundError("Native object", name, chunkZBWTAKZO_js.SchemaErrorCode.OBJECT_NOT_FOUND, message);
4605
+ throw new chunkHWZRSXFB_js.NotFoundError("Native object", name, chunkHWZRSXFB_js.SchemaErrorCode.OBJECT_NOT_FOUND, message);
4635
4606
  }
4636
4607
  return object2;
4637
4608
  }
@@ -4761,6 +4732,12 @@ var MEMORY_VIEW = detailView("memory-detail", "Memory").for("memory").default().
4761
4732
  }).tab("content", "Content").richtext("content").titleAttribute("name").build();
4762
4733
  var MEMORY_LIST_VIEW = listView("memory-list", "Memories").for("memory").default().tab("workspace", "Memories").default().icon("table").visibility("workspace").table().columns("name", "kind", "description", "createdAt").sort("name", "asc").tab("mine", "My memories").icon("lock").visibility("private").table().columns("name", "kind", "description", "createdAt").sort("name", "asc").build();
4763
4734
 
4735
+ // src/native/drive.object.ts
4736
+ var DRIVE_OBJECT_NAME = "drives";
4737
+ var DRIVE_OBJECT = object({ name: DRIVE_OBJECT_NAME, label: "Drive" }).sealed().icon("folder").hidden().pluralLabel("Drives").labelExpression("{{ name }}").embeddingExpression("{{ name }}\n{{ description }}").attribute(text({ name: "name", label: "Name" }).required()).attribute(text({ name: "description", label: "Description" }).multiline()).build();
4738
+ var DRIVE_VIEW = detailView("drive-detail", "Drive").for(DRIVE_OBJECT_NAME).default().sidePanel({ attributes: ["description"] }).tab("documents", "Documents").documents().build();
4739
+ var DRIVE_LIST_VIEW = listView("drive-list", "Drives").for(DRIVE_OBJECT_NAME).default().tab("workspace", "Shared").default().icon("users").visibility("workspace").table().columns("name", "description", "updatedAt").sort("name", "asc").tab("mine", "My drives").icon("lock").visibility("private").table().columns("name", "description", "updatedAt").sort("name", "asc").build();
4740
+
4764
4741
  // src/views/registry.ts
4765
4742
  function cloneViewDefinition(view) {
4766
4743
  return structuredClone(view);
@@ -4787,7 +4764,7 @@ var ViewRegistry = class {
4787
4764
  const key = this.makeKey(view.object, view.name, view.type);
4788
4765
  if (this.views.has(key)) {
4789
4766
  const message = `[ViewRegistry] Duplicate view: "${view.name}" (${view.type}) for object "${view.object}"`;
4790
- throw new chunkZBWTAKZO_js.DuplicateError("view", key, message);
4767
+ throw new chunkHWZRSXFB_js.DuplicateError("view", key, message);
4791
4768
  }
4792
4769
  const storedView = cloneViewDefinition(view);
4793
4770
  this.views.set(key, storedView);
@@ -4832,7 +4809,7 @@ var ViewRegistry = class {
4832
4809
  const availableNames = available.map((v) => `${v.name} (${v.type})`).join(", ") || "(none)";
4833
4810
  const message = `[ViewRegistry] View "${viewName}" not found for object "${objectName}".
4834
4811
  Available views: ${availableNames}`;
4835
- throw new chunkZBWTAKZO_js.NotFoundError("View", `${objectName}:${viewName}`, void 0, message);
4812
+ throw new chunkHWZRSXFB_js.NotFoundError("View", `${objectName}:${viewName}`, void 0, message);
4836
4813
  }
4837
4814
  return view;
4838
4815
  }
@@ -4920,7 +4897,7 @@ var viewRegistry = new ViewRegistry();
4920
4897
  // src/views/auto-generator.ts
4921
4898
  function getRuntimeAttributes(attributes, excludeNames = []) {
4922
4899
  return attributes.filter(
4923
- (attr) => !(!chunkQMAVKX3Y_js.getAttributeCapabilities(attr).lifecycle.visibleInRuntime || attr.system || excludeNames.includes(attr.name))
4900
+ (attr) => !(!chunkTU6ECJFZ_js.getAttributeCapabilities(attr).lifecycle.visibleInRuntime || attr.system || excludeNames.includes(attr.name))
4924
4901
  );
4925
4902
  }
4926
4903
  function sortAttributes(attributes) {
@@ -4953,7 +4930,7 @@ function generateDefaultDetailView(object2, options = {}) {
4953
4930
  const { includeActivityTab = true, includeDocumentsTab = true, excludeAttributes = [] } = options;
4954
4931
  const runtimeAttrs = getRuntimeAttributes(object2.attributes, excludeAttributes);
4955
4932
  const sortedAttrs = sortAttributes(
4956
- runtimeAttrs.filter((attr) => chunkQMAVKX3Y_js.getAttributeCapabilities(attr).presentation.formField)
4933
+ runtimeAttrs.filter((attr) => chunkTU6ECJFZ_js.getAttributeCapabilities(attr).presentation.formField)
4957
4934
  );
4958
4935
  const formTab = {
4959
4936
  id: "form",
@@ -5010,7 +4987,7 @@ function generateDefaultListView(object2, options = {}) {
5010
4987
  const { excludeAttributes = [], maxListColumns = 5 } = options;
5011
4988
  const runtimeAttrs = getRuntimeAttributes(object2.attributes, excludeAttributes);
5012
4989
  const sortedAttrs = sortAttributes(
5013
- runtimeAttrs.filter((attr) => chunkQMAVKX3Y_js.getAttributeCapabilities(attr).presentation.defaultColumn)
4990
+ runtimeAttrs.filter((attr) => chunkTU6ECJFZ_js.getAttributeCapabilities(attr).presentation.defaultColumn)
5014
4991
  );
5015
4992
  const columns = sortedAttrs.slice(0, maxListColumns).map((attr) => attr.name);
5016
4993
  const config = {
@@ -5140,7 +5117,7 @@ var FormRegistry = class {
5140
5117
  const forms = Array.isArray(formOrForms) ? formOrForms : [formOrForms];
5141
5118
  for (const f of forms) {
5142
5119
  if (this.forms.has(f.name)) {
5143
- throw new chunkZBWTAKZO_js.DuplicateError("form", f.name, `[FormRegistry] Duplicate form: "${f.name}"`);
5120
+ throw new chunkHWZRSXFB_js.DuplicateError("form", f.name, `[FormRegistry] Duplicate form: "${f.name}"`);
5144
5121
  }
5145
5122
  this.forms.set(f.name, cloneFormDefinition(f));
5146
5123
  }
@@ -5701,7 +5678,7 @@ function assertAcyclicComputedDependencies(nodes) {
5701
5678
  }
5702
5679
  function parseCompileFormula(expression) {
5703
5680
  try {
5704
- return chunkDEHBEFGO_js.parseComputedFormula(expression);
5681
+ return chunkLRFLSFIA_js.parseComputedFormula(expression);
5705
5682
  } catch (error) {
5706
5683
  if (error instanceof Error) {
5707
5684
  throw new ComputedFormulaCompileError(error.message);
@@ -6452,9 +6429,9 @@ function evaluateCall(functionName, args) {
6452
6429
  case "percent_not_empty":
6453
6430
  return percentByEmptyState(args[0], false);
6454
6431
  case "count_empty":
6455
- return collectionItems(args[0]).filter(chunkZEPGMHCK_js.isNullishOrEmptyString).length;
6432
+ return collectionItems(args[0]).filter(chunkE47WAI5K_js.isNullishOrEmptyString).length;
6456
6433
  case "count_not_empty":
6457
- return collectionItems(args[0]).filter((item) => !chunkZEPGMHCK_js.isNullishOrEmptyString(item)).length;
6434
+ return collectionItems(args[0]).filter((item) => !chunkE47WAI5K_js.isNullishOrEmptyString(item)).length;
6458
6435
  case "count_unique":
6459
6436
  return uniqueNonEmpty(collectionItems(args[0])).length;
6460
6437
  default:
@@ -6497,14 +6474,14 @@ function percentByEmptyState(value, countEmpty) {
6497
6474
  if (items.length === 0) {
6498
6475
  return 0;
6499
6476
  }
6500
- const count = items.filter((item) => chunkZEPGMHCK_js.isNullishOrEmptyString(item) === countEmpty).length;
6477
+ const count = items.filter((item) => chunkE47WAI5K_js.isNullishOrEmptyString(item) === countEmpty).length;
6501
6478
  return count / items.length;
6502
6479
  }
6503
6480
  function uniqueNonEmpty(values) {
6504
6481
  const seen = /* @__PURE__ */ new Set();
6505
6482
  const result = [];
6506
6483
  for (const value of values) {
6507
- if (chunkZEPGMHCK_js.isNullishOrEmptyString(value)) {
6484
+ if (chunkE47WAI5K_js.isNullishOrEmptyString(value)) {
6508
6485
  continue;
6509
6486
  }
6510
6487
  const key = uniqueKey(value);
@@ -6618,11 +6595,11 @@ function evaluateComputedAst(node, input) {
6618
6595
  return evaluateAst(node, input);
6619
6596
  }
6620
6597
  function evaluateComputedFormula(expression, input) {
6621
- return evaluateAst(chunkDEHBEFGO_js.parseComputedFormula(expression), input);
6598
+ return evaluateAst(chunkLRFLSFIA_js.parseComputedFormula(expression), input);
6622
6599
  }
6623
6600
  function evaluateComputedFormulaWithResult(expression, input, returnType, decimals) {
6624
6601
  try {
6625
- const raw = evaluateAst(chunkDEHBEFGO_js.parseComputedFormula(expression), input);
6602
+ const raw = evaluateAst(chunkLRFLSFIA_js.parseComputedFormula(expression), input);
6626
6603
  const value = returnType ? formatComputedResult(raw, returnType, decimals) : raw;
6627
6604
  return { value };
6628
6605
  } catch (error) {
@@ -6747,10 +6724,10 @@ var COMPUTED_FUNCTION_METADATA = [
6747
6724
  ];
6748
6725
 
6749
6726
  // src/filters/operators.ts
6750
- var isEmpty = (v) => chunkZEPGMHCK_js.isNullishOrEmptyString(v) || Array.isArray(v) && v.length === 0;
6727
+ var isEmpty = (v) => chunkE47WAI5K_js.isNullishOrEmptyString(v) || Array.isArray(v) && v.length === 0;
6751
6728
  var toStr = (v) => v == null ? "" : String(v);
6752
6729
  var toNum = (v) => {
6753
- if (chunkZEPGMHCK_js.isNullishOrEmptyString(v)) return null;
6730
+ if (chunkE47WAI5K_js.isNullishOrEmptyString(v)) return null;
6754
6731
  const n = typeof v === "number" ? v : Number(v);
6755
6732
  return Number.isFinite(n) ? n : null;
6756
6733
  };
@@ -6883,7 +6860,7 @@ var OPERATOR_SPECS = {
6883
6860
  appliesTo: ["date"],
6884
6861
  evaluateInMemory: (v, rv) => {
6885
6862
  const d = toDate2(v);
6886
- const bounds = chunkQMAVKX3Y_js.resolveIsWithinBounds(rv);
6863
+ const bounds = chunkTU6ECJFZ_js.resolveIsWithinBounds(rv);
6887
6864
  if (!(d && bounds)) return false;
6888
6865
  return d.getTime() >= bounds.startMs && d.getTime() < bounds.endMs;
6889
6866
  }
@@ -6919,7 +6896,7 @@ var OPERATOR_SPECS = {
6919
6896
  // src/filters/evaluate.ts
6920
6897
  var systemAttribute = (name, type) => ({ id: `system:${name}`, name, label: name, type, system: true });
6921
6898
  var RECORD_SYSTEM_ATTRIBUTES = [
6922
- ...Object.entries(chunkQMAVKX3Y_js.SYSTEM_FILTER_ATTRIBUTE_TYPES).map(
6899
+ ...Object.entries(chunkTU6ECJFZ_js.SYSTEM_FILTER_ATTRIBUTE_TYPES).map(
6923
6900
  ([name, type]) => systemAttribute(name, type)
6924
6901
  )
6925
6902
  ];
@@ -6960,7 +6937,7 @@ function evaluateRule(rule, values, attrByName) {
6960
6937
  (definition) => definition.name === rule.property
6961
6938
  );
6962
6939
  if (!property) return false;
6963
- const positiveOperator = chunkQMAVKX3Y_js.normalizeForEdgeRpc(rule.operator);
6940
+ const positiveOperator = chunkTU6ECJFZ_js.normalizeForEdgeRpc(rule.operator);
6964
6941
  const propertySpec = OPERATOR_SPECS[positiveOperator];
6965
6942
  if (!propertySpec?.appliesTo.includes(property.type)) return false;
6966
6943
  const rootValue = values[rule.attribute];
@@ -6978,7 +6955,7 @@ function evaluateRule(rule, values, attrByName) {
6978
6955
  property
6979
6956
  );
6980
6957
  });
6981
- return (rule.quantifier ?? chunkQMAVKX3Y_js.getOperatorPolarity(rule.operator)) === "none" ? !matches : matches;
6958
+ return (rule.quantifier ?? chunkTU6ECJFZ_js.getOperatorPolarity(rule.operator)) === "none" ? !matches : matches;
6982
6959
  }
6983
6960
  const spec = OPERATOR_SPECS[rule.operator];
6984
6961
  if (!spec) return false;
@@ -7027,7 +7004,7 @@ function normalizePhoneComparands(stored, rule) {
7027
7004
  return [normalizeOne(stored), normalizeOne(rule)];
7028
7005
  }
7029
7006
  function normalizeComparableValue(type, value) {
7030
- if (type === "currency") return chunkQMAVKX3Y_js.extractCurrencyFilterValue(value);
7007
+ if (type === "currency") return chunkTU6ECJFZ_js.extractCurrencyFilterValue(value);
7031
7008
  if (type === "date") {
7032
7009
  if (isDateRangeValue(value)) return dateValueStart(value);
7033
7010
  if (value instanceof Date) return Number.isNaN(value.getTime()) ? null : value.toISOString();
@@ -7050,37 +7027,6 @@ var CONNECTOR_CALLBACK_PARAM = {
7050
7027
  provider: "connector_provider"
7051
7028
  };
7052
7029
 
7053
- // src/utils/canonical-json.ts
7054
- function canonicalStringify(value) {
7055
- const seen = /* @__PURE__ */ new Set();
7056
- function encode(v) {
7057
- if (v === null) return "null";
7058
- switch (typeof v) {
7059
- case "string":
7060
- case "number":
7061
- case "boolean":
7062
- return JSON.stringify(v);
7063
- case "undefined":
7064
- return void 0;
7065
- case "object":
7066
- break;
7067
- default:
7068
- throw new chunkZBWTAKZO_js.ValidationError(`Cannot canonicalize value of type ${typeof v}`, []);
7069
- }
7070
- const obj = v;
7071
- if (seen.has(obj)) throw new chunkZBWTAKZO_js.ValidationError("Cannot canonicalize circular structure", []);
7072
- seen.add(obj);
7073
- try {
7074
- if (Array.isArray(obj)) return `[${obj.map((e) => encode(e) ?? "null").join(",")}]`;
7075
- const entries = Object.entries(obj).map(([k, val]) => [k, encode(val)]).filter((pair) => pair[1] !== void 0).sort(([a], [b]) => a < b ? -1 : 1);
7076
- return `{${entries.map(([k, val]) => `${JSON.stringify(k)}:${val}`).join(",")}}`;
7077
- } finally {
7078
- seen.delete(obj);
7079
- }
7080
- }
7081
- return encode(value) ?? "null";
7082
- }
7083
-
7084
7030
  // src/utils/attribute-defaults.ts
7085
7031
  var TODAY_DEFAULT = "today";
7086
7032
  function dateInTimezone(date2, timezone) {
@@ -7167,10 +7113,10 @@ var attributeNameSchema = z2.z.string().min(1).superRefine((name, ctx) => {
7167
7113
  'The attribute\'s machine name \u2014 the record\'s field key, and what `{{ name }}` refers to in a labelExpression. Must be a valid identifier: starts with a letter or underscore, then only letters/digits/underscores ("montantHt", "first_name", "FIRST_NAME" are valid; "first-name", "first name", "123name" are not). Max 63 characters. Cannot be a name reserved by the record shape itself (id, createdAt, updatedAt, createdBy, lastUpdatedBy, objectId, label, embeddingText, values, metadata, deletedAt, deletedBy, schemaVersion).'
7168
7114
  );
7169
7115
  var objectNameSchema = z2.z.string().min(1).superRefine((name, ctx) => {
7170
- if (chunkQMAVKX3Y_js.RESERVED_OBJECT_NAMES.includes(name)) {
7116
+ if (chunkTU6ECJFZ_js.RESERVED_OBJECT_NAMES.includes(name)) {
7171
7117
  ctx.addIssue({
7172
7118
  code: z2.z.ZodIssueCode.custom,
7173
- message: `"${name}" is a reserved object name (${chunkQMAVKX3Y_js.RESERVED_OBJECT_NAMES.join(", ")}) and cannot be used for a new object.`
7119
+ message: `"${name}" is a reserved object name (${chunkTU6ECJFZ_js.RESERVED_OBJECT_NAMES.join(", ")}) and cannot be used for a new object.`
7174
7120
  });
7175
7121
  }
7176
7122
  try {
@@ -7184,7 +7130,7 @@ var objectNameSchema = z2.z.string().min(1).superRefine((name, ctx) => {
7184
7130
  function withConfigCheck(schema) {
7185
7131
  return schema.superRefine((attribute, ctx) => {
7186
7132
  try {
7187
- const parsedConfig = chunkDEHBEFGO_js.parseAttributeConfigForCreate(attribute.type, {
7133
+ const parsedConfig = chunkLRFLSFIA_js.parseAttributeConfigForCreate(attribute.type, {
7188
7134
  ...attribute.config ?? {},
7189
7135
  description: attribute.description
7190
7136
  });
@@ -7200,7 +7146,7 @@ function withConfigCheck(schema) {
7200
7146
  });
7201
7147
  }
7202
7148
  } catch (error) {
7203
- if (error instanceof chunkZBWTAKZO_js.ValidationError) {
7149
+ if (error instanceof chunkHWZRSXFB_js.ValidationError) {
7204
7150
  for (const issue of error.errors) {
7205
7151
  ctx.addIssue({
7206
7152
  code: z2.z.ZodIssueCode.custom,
@@ -7247,7 +7193,7 @@ var plannedObjectSchema = z2.z.object({
7247
7193
  'Human-readable plural display label (e.g. "Devis"/"Invoices"). Defaults from `label` if omitted.'
7248
7194
  ),
7249
7195
  description: z2.z.string().optional().describe("Help text describing what this object represents."),
7250
- icon: chunkDEHBEFGO_js.iconNameSchema.describe(
7196
+ icon: chunkLRFLSFIA_js.iconNameSchema.describe(
7251
7197
  "Required icon name for the object. Must be a catalogue value \u2014 call `search_icons` and use a name it returns verbatim. A name that is not in the catalogue is rejected without any hint as to what would have worked, so never guess one."
7252
7198
  ),
7253
7199
  labelExpression: labelExpressionSchema.describe(
@@ -7305,13 +7251,13 @@ var proposedDefaultViewTargetSchema = z2.z.discriminatedUnion("viewType", [
7305
7251
  z2.z.object({
7306
7252
  objectName: viewTargetObjectNameSchema,
7307
7253
  viewType: z2.z.literal("list").describe("Targets the object's default list view (the grid)."),
7308
- canonicalConfig: chunkQMAVKX3Y_js.listViewConfigSchema.describe(CANONICAL_CONFIG_DESCRIPTION),
7254
+ canonicalConfig: chunkTU6ECJFZ_js.listViewConfigSchema.describe(CANONICAL_CONFIG_DESCRIPTION),
7309
7255
  baselineToken: z2.z.string().min(1).optional().describe(BASELINE_TOKEN_DESCRIPTION)
7310
7256
  }).strict(),
7311
7257
  z2.z.object({
7312
7258
  objectName: viewTargetObjectNameSchema,
7313
7259
  viewType: z2.z.literal("detail").describe("Targets the object's default detail view (the single-record view)."),
7314
- canonicalConfig: chunkQMAVKX3Y_js.detailViewConfigSchema.describe(CANONICAL_CONFIG_DESCRIPTION),
7260
+ canonicalConfig: chunkTU6ECJFZ_js.detailViewConfigSchema.describe(CANONICAL_CONFIG_DESCRIPTION),
7315
7261
  baselineToken: z2.z.string().min(1).optional().describe(BASELINE_TOKEN_DESCRIPTION)
7316
7262
  }).strict()
7317
7263
  ]);
@@ -7325,13 +7271,13 @@ var persistedDefaultViewTargetSchema = z2.z.discriminatedUnion("viewType", [
7325
7271
  z2.z.object({
7326
7272
  objectName: z2.z.string().min(1),
7327
7273
  viewType: z2.z.literal("list"),
7328
- canonicalConfig: chunkQMAVKX3Y_js.listViewConfigSchema,
7274
+ canonicalConfig: chunkTU6ECJFZ_js.listViewConfigSchema,
7329
7275
  ...persistedBaselineFields
7330
7276
  }).strict(),
7331
7277
  z2.z.object({
7332
7278
  objectName: z2.z.string().min(1),
7333
7279
  viewType: z2.z.literal("detail"),
7334
- canonicalConfig: chunkQMAVKX3Y_js.detailViewConfigSchema,
7280
+ canonicalConfig: chunkTU6ECJFZ_js.detailViewConfigSchema,
7335
7281
  ...persistedBaselineFields
7336
7282
  }).strict()
7337
7283
  ]).superRefine((target, ctx) => {
@@ -7478,7 +7424,7 @@ function boundSerializedPlanInput(input, ctx) {
7478
7424
  });
7479
7425
  return z2.z.NEVER;
7480
7426
  }
7481
- const serializedBytes = new TextEncoder().encode(canonicalStringify(input)).byteLength;
7427
+ const serializedBytes = new TextEncoder().encode(chunkOYHBQMC7_js.canonicalStringify(input)).byteLength;
7482
7428
  if (serializedBytes > SCHEMA_PLAN_LIMITS.serializedBytes) {
7483
7429
  ctx.addIssue({
7484
7430
  code: "too_big",
@@ -7538,325 +7484,1229 @@ var persistedSchemaPlanSchema = z2.z.preprocess(
7538
7484
  structuralPersistedSchemaPlanSchema
7539
7485
  );
7540
7486
 
7487
+ // src/architect/define-operation.ts
7488
+ function defineOperation(def) {
7489
+ return def;
7490
+ }
7491
+ var operationBase = { id: z2.z.string().min(1) };
7492
+ var viewOperationBase = { ...operationBase, viewId: z2.z.string().min(1) };
7493
+ function mapView(state, viewId, fn) {
7494
+ if (!state.views.some((v) => v.id === viewId)) {
7495
+ throw new chunkHWZRSXFB_js.ValidationError(`View "${viewId}" is not in the draftable state`, []);
7496
+ }
7497
+ return { ...state, views: state.views.map((v) => v.id === viewId ? fn(v) : v) };
7498
+ }
7499
+ function moveWithin(items, from, toIndex) {
7500
+ const next = [...items];
7501
+ const [item] = next.splice(from, 1);
7502
+ next.splice(toIndex, 0, item);
7503
+ return next;
7504
+ }
7505
+ function reorderById(items, order, what) {
7506
+ if (order.length !== items.length) {
7507
+ throw new chunkHWZRSXFB_js.ValidationError(
7508
+ `${what} order lists ${order.length} ids for ${items.length} items`,
7509
+ []
7510
+ );
7511
+ }
7512
+ return order.map((id) => {
7513
+ const found = items.find((item) => item.id === id);
7514
+ if (!found) throw new chunkHWZRSXFB_js.ValidationError(`${what} "${id}" is not in this collection`, []);
7515
+ return found;
7516
+ });
7517
+ }
7518
+
7519
+ // src/architect/operations/detail-view.ts
7520
+ function mapFormTab(view, tabId, fn) {
7521
+ const found = view.tabs.find((t) => t.id === tabId);
7522
+ if (!found) throw new chunkHWZRSXFB_js.ValidationError(`Tab "${tabId}" is not in view "${view.id}"`, []);
7523
+ if (found.type !== "form") {
7524
+ throw new chunkHWZRSXFB_js.ValidationError(`Tab "${tabId}" is not a form tab`, []);
7525
+ }
7526
+ return { ...view, tabs: view.tabs.map((t) => t.id === tabId ? fn(found) : t) };
7527
+ }
7528
+ function requireGroup(tab, groupId) {
7529
+ const found = tab.groups.find((g) => g.id === groupId);
7530
+ if (!found) throw new chunkHWZRSXFB_js.ValidationError(`Group "${groupId}" is not in tab "${tab.id}"`, []);
7531
+ return found;
7532
+ }
7533
+ function locateField(tab, fieldId) {
7534
+ for (const group2 of tab.groups) {
7535
+ const field = group2.fields.find((f) => f.id === fieldId);
7536
+ if (field) return { group: group2, field };
7537
+ }
7538
+ throw new chunkHWZRSXFB_js.ValidationError(`Field slot "${fieldId}" is not in tab "${tab.id}"`, []);
7539
+ }
7540
+ var tabPayload = z2.z.custom(
7541
+ (value) => typeof value === "object" && value !== null && "id" in value && "type" in value,
7542
+ { message: "A tab must be an object carrying id and type" }
7543
+ );
7544
+ var groupPayload = z2.z.custom(
7545
+ (value) => typeof value === "object" && value !== null && "id" in value && "fields" in value,
7546
+ { message: "A group must be an object carrying id and fields" }
7547
+ );
7548
+ var fieldPayload = z2.z.custom(
7549
+ (value) => typeof value === "object" && value !== null && "id" in value,
7550
+ { message: "A field slot must be an object carrying an id" }
7551
+ );
7552
+ var addTabSchema = z2.z.object({
7553
+ ...viewOperationBase,
7554
+ type: z2.z.literal("add_tab"),
7555
+ tab: tabPayload
7556
+ });
7557
+ var addTab = defineOperation({
7558
+ type: "add_tab",
7559
+ schema: addTabSchema,
7560
+ apply: (state, op) => mapView(state, op.viewId, (view) => {
7561
+ if (view.tabs.some((t) => t.id === op.tab.id)) {
7562
+ throw new chunkHWZRSXFB_js.ValidationError(`Tab "${op.tab.id}" already exists in view "${op.viewId}"`, []);
7563
+ }
7564
+ return { ...view, tabs: [...view.tabs, op.tab] };
7565
+ }),
7566
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tab.id }),
7567
+ describe: (op) => `Ajoute l'onglet \xAB ${op.tab.label} \xBB`
7568
+ });
7569
+ var removeTabSchema = z2.z.object({
7570
+ ...viewOperationBase,
7571
+ type: z2.z.literal("remove_tab"),
7572
+ tabId: z2.z.string().min(1)
7573
+ });
7574
+ var removeTab = defineOperation({
7575
+ type: "remove_tab",
7576
+ schema: removeTabSchema,
7577
+ apply: (state, op) => mapView(state, op.viewId, (view) => {
7578
+ if (!view.tabs.some((t) => t.id === op.tabId)) {
7579
+ throw new chunkHWZRSXFB_js.ValidationError(`Tab "${op.tabId}" is not in view "${op.viewId}"`, []);
7580
+ }
7581
+ return { ...view, tabs: view.tabs.filter((t) => t.id !== op.tabId) };
7582
+ }),
7583
+ focus: (op) => ({ viewId: op.viewId }),
7584
+ describe: (op) => `Supprime l'onglet ${op.tabId}`
7585
+ });
7586
+ var updateTabSchema = z2.z.object({
7587
+ ...viewOperationBase,
7588
+ type: z2.z.literal("update_tab"),
7589
+ tabId: z2.z.string().min(1),
7590
+ changes: z2.z.object({
7591
+ label: z2.z.string().min(1).optional(),
7592
+ icon: z2.z.custom((v) => typeof v === "string" && v.length > 0).optional(),
7593
+ order: z2.z.number().int().optional()
7594
+ }).refine((c) => Object.keys(c).length > 0, "update_tab needs at least one change")
7595
+ });
7596
+ var updateTab = defineOperation({
7597
+ type: "update_tab",
7598
+ schema: updateTabSchema,
7599
+ apply: (state, op) => mapView(state, op.viewId, (view) => {
7600
+ if (!view.tabs.some((t) => t.id === op.tabId)) {
7601
+ throw new chunkHWZRSXFB_js.ValidationError(`Tab "${op.tabId}" is not in view "${op.viewId}"`, []);
7602
+ }
7603
+ return {
7604
+ ...view,
7605
+ tabs: view.tabs.map((t) => t.id === op.tabId ? { ...t, ...op.changes } : t)
7606
+ };
7607
+ }),
7608
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId }),
7609
+ describe: (op) => op.changes.label ? `Renomme l'onglet en \xAB ${op.changes.label} \xBB` : `Modifie l'onglet ${op.tabId}`
7610
+ });
7611
+ var reorderTabsSchema = z2.z.object({
7612
+ ...viewOperationBase,
7613
+ type: z2.z.literal("reorder_tabs"),
7614
+ tabOrder: z2.z.array(z2.z.string().min(1))
7615
+ });
7616
+ var reorderTabs = defineOperation({
7617
+ type: "reorder_tabs",
7618
+ schema: reorderTabsSchema,
7619
+ apply: (state, op) => mapView(state, op.viewId, (view) => ({
7620
+ ...view,
7621
+ tabs: reorderById(view.tabs, op.tabOrder, "Tab")
7622
+ })),
7623
+ focus: (op) => ({ viewId: op.viewId }),
7624
+ describe: () => "R\xE9ordonne les onglets"
7625
+ });
7626
+ var addGroupSchema = z2.z.object({
7627
+ ...viewOperationBase,
7628
+ type: z2.z.literal("add_group"),
7629
+ tabId: z2.z.string().min(1),
7630
+ group: groupPayload
7631
+ });
7632
+ var addGroup = defineOperation({
7633
+ type: "add_group",
7634
+ schema: addGroupSchema,
7635
+ apply: (state, op) => mapView(
7636
+ state,
7637
+ op.viewId,
7638
+ (view) => mapFormTab(view, op.tabId, (tab) => {
7639
+ if (tab.groups.some((g) => g.id === op.group.id)) {
7640
+ throw new chunkHWZRSXFB_js.ValidationError(
7641
+ `Group "${op.group.id}" already exists in tab "${op.tabId}"`,
7642
+ []
7643
+ );
7644
+ }
7645
+ return { ...tab, groups: [...tab.groups, op.group] };
7646
+ })
7647
+ ),
7648
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId, groupId: op.group.id }),
7649
+ describe: (op) => `Ajoute le groupe \xAB ${op.group.label} \xBB`
7650
+ });
7651
+ var removeGroupSchema = z2.z.object({
7652
+ ...viewOperationBase,
7653
+ type: z2.z.literal("remove_group"),
7654
+ tabId: z2.z.string().min(1),
7655
+ groupId: z2.z.string().min(1)
7656
+ });
7657
+ var removeGroup = defineOperation({
7658
+ type: "remove_group",
7659
+ schema: removeGroupSchema,
7660
+ apply: (state, op) => mapView(
7661
+ state,
7662
+ op.viewId,
7663
+ (view) => mapFormTab(view, op.tabId, (tab) => {
7664
+ requireGroup(tab, op.groupId);
7665
+ return { ...tab, groups: tab.groups.filter((g) => g.id !== op.groupId) };
7666
+ })
7667
+ ),
7668
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId }),
7669
+ describe: (op) => `Supprime le groupe ${op.groupId}`
7670
+ });
7671
+ var setGroupLabelSchema = z2.z.object({
7672
+ ...viewOperationBase,
7673
+ type: z2.z.literal("set_group_label"),
7674
+ tabId: z2.z.string().min(1),
7675
+ groupId: z2.z.string().min(1),
7676
+ label: z2.z.string().min(1)
7677
+ });
7678
+ var setGroupLabel = defineOperation({
7679
+ type: "set_group_label",
7680
+ schema: setGroupLabelSchema,
7681
+ apply: (state, op) => mapView(
7682
+ state,
7683
+ op.viewId,
7684
+ (view) => mapFormTab(view, op.tabId, (tab) => {
7685
+ requireGroup(tab, op.groupId);
7686
+ return {
7687
+ ...tab,
7688
+ groups: tab.groups.map((g) => g.id === op.groupId ? { ...g, label: op.label } : g)
7689
+ };
7690
+ })
7691
+ ),
7692
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId, groupId: op.groupId }),
7693
+ describe: (op) => `Renomme le groupe en \xAB ${op.label} \xBB`
7694
+ });
7695
+ var reorderGroupsSchema = z2.z.object({
7696
+ ...viewOperationBase,
7697
+ type: z2.z.literal("reorder_groups"),
7698
+ tabId: z2.z.string().min(1),
7699
+ groupOrder: z2.z.array(z2.z.string().min(1))
7700
+ });
7701
+ var reorderGroups = defineOperation({
7702
+ type: "reorder_groups",
7703
+ schema: reorderGroupsSchema,
7704
+ apply: (state, op) => mapView(
7705
+ state,
7706
+ op.viewId,
7707
+ (view) => mapFormTab(view, op.tabId, (tab) => ({
7708
+ ...tab,
7709
+ groups: reorderById(tab.groups, op.groupOrder, "Group")
7710
+ }))
7711
+ ),
7712
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId }),
7713
+ describe: () => "R\xE9ordonne les groupes"
7714
+ });
7715
+ var addFieldSchema = z2.z.object({
7716
+ ...viewOperationBase,
7717
+ type: z2.z.literal("add_field"),
7718
+ tabId: z2.z.string().min(1),
7719
+ groupId: z2.z.string().min(1),
7720
+ field: fieldPayload,
7721
+ index: z2.z.number().int().min(0).optional()
7722
+ });
7723
+ var addField = defineOperation({
7724
+ type: "add_field",
7725
+ schema: addFieldSchema,
7726
+ apply: (state, op) => mapView(
7727
+ state,
7728
+ op.viewId,
7729
+ (view) => mapFormTab(view, op.tabId, (tab) => {
7730
+ requireGroup(tab, op.groupId);
7731
+ if (tab.groups.some((g) => g.fields.some((f) => f.id === op.field.id))) {
7732
+ throw new chunkHWZRSXFB_js.ValidationError(
7733
+ `Field slot "${op.field.id}" already exists in tab "${op.tabId}"`,
7734
+ []
7735
+ );
7736
+ }
7737
+ return {
7738
+ ...tab,
7739
+ groups: tab.groups.map((group2) => {
7740
+ if (group2.id !== op.groupId) return group2;
7741
+ const at = op.index ?? group2.fields.length;
7742
+ return {
7743
+ ...group2,
7744
+ fields: [...group2.fields.slice(0, at), op.field, ...group2.fields.slice(at)]
7745
+ };
7746
+ })
7747
+ };
7748
+ })
7749
+ ),
7750
+ focus: (op) => ({
7751
+ viewId: op.viewId,
7752
+ tabId: op.tabId,
7753
+ groupId: op.groupId,
7754
+ fieldId: op.field.id
7755
+ }),
7756
+ describe: (op) => `Ajoute le champ ${op.field.attribute ?? op.field.id}`
7757
+ });
7758
+ var removeFieldSchema = z2.z.object({
7759
+ ...viewOperationBase,
7760
+ type: z2.z.literal("remove_field"),
7761
+ tabId: z2.z.string().min(1),
7762
+ fieldId: z2.z.string().min(1)
7763
+ });
7764
+ var removeField = defineOperation({
7765
+ type: "remove_field",
7766
+ schema: removeFieldSchema,
7767
+ apply: (state, op) => mapView(
7768
+ state,
7769
+ op.viewId,
7770
+ (view) => mapFormTab(view, op.tabId, (tab) => {
7771
+ const { group: group2 } = locateField(tab, op.fieldId);
7772
+ return {
7773
+ ...tab,
7774
+ groups: tab.groups.map(
7775
+ (g) => g.id === group2.id ? { ...g, fields: g.fields.filter((f) => f.id !== op.fieldId) } : g
7776
+ )
7777
+ };
7778
+ })
7779
+ ),
7780
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId }),
7781
+ describe: (op) => `Retire le champ ${op.fieldId}`
7782
+ });
7783
+ var moveFieldSchema = z2.z.object({
7784
+ ...viewOperationBase,
7785
+ type: z2.z.literal("move_field"),
7786
+ tabId: z2.z.string().min(1),
7787
+ fieldId: z2.z.string().min(1),
7788
+ toGroupId: z2.z.string().min(1),
7789
+ toIndex: z2.z.number().int().min(0)
7790
+ });
7791
+ var moveField = defineOperation({
7792
+ type: "move_field",
7793
+ schema: moveFieldSchema,
7794
+ apply: (state, op) => mapView(
7795
+ state,
7796
+ op.viewId,
7797
+ (view) => mapFormTab(view, op.tabId, (tab) => {
7798
+ const { group: source, field } = locateField(tab, op.fieldId);
7799
+ const target = requireGroup(tab, op.toGroupId);
7800
+ if (source.id === target.id) {
7801
+ const from = source.fields.findIndex((f) => f.id === op.fieldId);
7802
+ return {
7803
+ ...tab,
7804
+ groups: tab.groups.map(
7805
+ (g) => g.id === source.id ? { ...g, fields: moveWithin(g.fields, from, op.toIndex) } : g
7806
+ )
7807
+ };
7808
+ }
7809
+ return {
7810
+ ...tab,
7811
+ groups: tab.groups.map((group2) => {
7812
+ if (group2.id === source.id) {
7813
+ return { ...group2, fields: group2.fields.filter((f) => f.id !== op.fieldId) };
7814
+ }
7815
+ if (group2.id === target.id) {
7816
+ return {
7817
+ ...group2,
7818
+ fields: [
7819
+ ...group2.fields.slice(0, op.toIndex),
7820
+ field,
7821
+ ...group2.fields.slice(op.toIndex)
7822
+ ]
7823
+ };
7824
+ }
7825
+ return group2;
7826
+ })
7827
+ };
7828
+ })
7829
+ ),
7830
+ focus: (op) => ({
7831
+ viewId: op.viewId,
7832
+ tabId: op.tabId,
7833
+ groupId: op.toGroupId,
7834
+ fieldId: op.fieldId
7835
+ }),
7836
+ describe: (op) => `D\xE9place le champ ${op.fieldId} vers le groupe ${op.toGroupId}`
7837
+ });
7838
+ var updateFieldSchema = z2.z.object({
7839
+ ...viewOperationBase,
7840
+ type: z2.z.literal("update_field"),
7841
+ tabId: z2.z.string().min(1),
7842
+ fieldId: z2.z.string().min(1),
7843
+ changes: z2.z.object({
7844
+ label: z2.z.string().optional(),
7845
+ readOnly: z2.z.boolean().optional(),
7846
+ span: z2.z.number().int().min(1).max(12).optional()
7847
+ }).refine((c) => Object.keys(c).length > 0, "update_field needs at least one change")
7848
+ });
7849
+ var updateField = defineOperation({
7850
+ type: "update_field",
7851
+ schema: updateFieldSchema,
7852
+ apply: (state, op) => mapView(
7853
+ state,
7854
+ op.viewId,
7855
+ (view) => mapFormTab(view, op.tabId, (tab) => {
7856
+ locateField(tab, op.fieldId);
7857
+ return {
7858
+ ...tab,
7859
+ groups: tab.groups.map((group2) => ({
7860
+ ...group2,
7861
+ fields: group2.fields.map(
7862
+ (f) => f.id === op.fieldId ? { ...f, ...op.changes } : f
7863
+ )
7864
+ }))
7865
+ };
7866
+ })
7867
+ ),
7868
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId, fieldId: op.fieldId }),
7869
+ describe: (op) => `Modifie le champ ${op.fieldId}`
7870
+ });
7871
+ var setSidePanelSchema = z2.z.object({
7872
+ ...viewOperationBase,
7873
+ type: z2.z.literal("set_side_panel"),
7874
+ sidePanel: z2.z.object({ attributes: z2.z.array(z2.z.string().min(1)), width: z2.z.number().int().min(1).optional() }).nullable()
7875
+ });
7876
+ var setSidePanel = defineOperation({
7877
+ type: "set_side_panel",
7878
+ schema: setSidePanelSchema,
7879
+ apply: (state, op) => mapView(state, op.viewId, (view) => ({
7880
+ ...view,
7881
+ config: {
7882
+ ...view.config,
7883
+ sidePanel: op.sidePanel ?? void 0
7884
+ }
7885
+ })),
7886
+ focus: (op) => ({ viewId: op.viewId }),
7887
+ describe: (op) => op.sidePanel ? "Active le panneau lat\xE9ral" : "Retire le panneau lat\xE9ral"
7888
+ });
7889
+ var DETAIL_VIEW_OPERATIONS = [
7890
+ addTab,
7891
+ removeTab,
7892
+ updateTab,
7893
+ reorderTabs,
7894
+ addGroup,
7895
+ removeGroup,
7896
+ setGroupLabel,
7897
+ reorderGroups,
7898
+ addField,
7899
+ removeField,
7900
+ moveField,
7901
+ updateField,
7902
+ setSidePanel
7903
+ ];
7904
+ var listTabBase = { ...viewOperationBase, tabId: z2.z.string().min(1) };
7905
+ function mapListTab(state, viewId, tabId, fn) {
7906
+ return mapView(state, viewId, (view) => {
7907
+ const tabs = view.config.tabs ?? [];
7908
+ if (!tabs.some((t) => t.id === tabId)) {
7909
+ throw new chunkHWZRSXFB_js.ValidationError(`List tab "${tabId}" is not in view "${viewId}"`, []);
7910
+ }
7911
+ return {
7912
+ ...view,
7913
+ config: { ...view.config, tabs: tabs.map((t) => t.id === tabId ? fn(t) : t) }
7914
+ };
7915
+ });
7916
+ }
7917
+ var listTabPayload = z2.z.custom(
7918
+ (value) => typeof value === "object" && value !== null && "id" in value,
7919
+ { message: "A list tab must be an object carrying an id" }
7920
+ );
7921
+ var filterGroupPayload = z2.z.custom(
7922
+ (value) => value === null || typeof value === "object"
7923
+ );
7924
+ var sortRulesPayload = z2.z.custom((value) => Array.isArray(value));
7925
+ function setOnTab(type, key, valueSchema, describe) {
7926
+ const schema = z2.z.object({ ...listTabBase, type: z2.z.literal(type), value: valueSchema });
7927
+ return defineOperation({
7928
+ type,
7929
+ schema,
7930
+ apply: (state, op) => mapListTab(state, op.viewId, op.tabId, (tab) => {
7931
+ if (op.value === null) {
7932
+ const { [key]: _dropped, ...rest } = tab;
7933
+ return rest;
7934
+ }
7935
+ return { ...tab, [key]: op.value };
7936
+ }),
7937
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId }),
7938
+ describe: (op) => describe(op.value)
7939
+ });
7940
+ }
7941
+ var addListTabSchema = z2.z.object({
7942
+ ...viewOperationBase,
7943
+ type: z2.z.literal("add_list_tab"),
7944
+ tab: listTabPayload
7945
+ });
7946
+ var addListTab = defineOperation({
7947
+ type: "add_list_tab",
7948
+ schema: addListTabSchema,
7949
+ apply: (state, op) => mapView(state, op.viewId, (view) => {
7950
+ const tabs = view.config.tabs ?? [];
7951
+ if (tabs.some((t) => t.id === op.tab.id)) {
7952
+ throw new chunkHWZRSXFB_js.ValidationError(
7953
+ `List tab "${op.tab.id}" already exists in view "${op.viewId}"`,
7954
+ []
7955
+ );
7956
+ }
7957
+ return { ...view, config: { ...view.config, tabs: [...tabs, op.tab] } };
7958
+ }),
7959
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tab.id }),
7960
+ describe: (op) => `Ajoute l'onglet \xAB ${op.tab.label} \xBB`
7961
+ });
7962
+ var removeListTabSchema = z2.z.object({
7963
+ ...listTabBase,
7964
+ type: z2.z.literal("remove_list_tab")
7965
+ });
7966
+ var removeListTab = defineOperation({
7967
+ type: "remove_list_tab",
7968
+ schema: removeListTabSchema,
7969
+ apply: (state, op) => mapView(state, op.viewId, (view) => {
7970
+ const tabs = view.config.tabs ?? [];
7971
+ if (!tabs.some((t) => t.id === op.tabId)) {
7972
+ throw new chunkHWZRSXFB_js.ValidationError(`List tab "${op.tabId}" is not in view "${op.viewId}"`, []);
7973
+ }
7974
+ return {
7975
+ ...view,
7976
+ config: { ...view.config, tabs: tabs.filter((t) => t.id !== op.tabId) }
7977
+ };
7978
+ }),
7979
+ focus: (op) => ({ viewId: op.viewId }),
7980
+ describe: (op) => `Supprime l'onglet ${op.tabId}`
7981
+ });
7982
+ var updateListTabSchema = z2.z.object({
7983
+ ...listTabBase,
7984
+ type: z2.z.literal("update_list_tab"),
7985
+ changes: z2.z.object({
7986
+ label: z2.z.string().min(1).optional(),
7987
+ icon: z2.z.custom((v) => typeof v === "string" && v.length > 0).optional(),
7988
+ default: z2.z.boolean().optional(),
7989
+ visibility: z2.z.enum(chunkTU6ECJFZ_js.LIST_VIEW_TAB_VISIBILITIES).optional()
7990
+ }).refine((c) => Object.keys(c).length > 0, "update_list_tab needs at least one change")
7991
+ });
7992
+ var updateListTab = defineOperation({
7993
+ type: "update_list_tab",
7994
+ schema: updateListTabSchema,
7995
+ apply: (state, op) => mapListTab(state, op.viewId, op.tabId, (tab) => ({ ...tab, ...op.changes })),
7996
+ focus: (op) => ({ viewId: op.viewId, tabId: op.tabId }),
7997
+ describe: (op) => op.changes.label ? `Renomme l'onglet en \xAB ${op.changes.label} \xBB` : `Modifie l'onglet ${op.tabId}`
7998
+ });
7999
+ var reorderListTabsSchema = z2.z.object({
8000
+ ...viewOperationBase,
8001
+ type: z2.z.literal("reorder_list_tabs"),
8002
+ tabOrder: z2.z.array(z2.z.string().min(1))
8003
+ });
8004
+ var reorderListTabs = defineOperation({
8005
+ type: "reorder_list_tabs",
8006
+ schema: reorderListTabsSchema,
8007
+ apply: (state, op) => mapView(state, op.viewId, (view) => ({
8008
+ ...view,
8009
+ config: {
8010
+ ...view.config,
8011
+ tabs: reorderById(view.config.tabs ?? [], op.tabOrder, "List tab")
8012
+ }
8013
+ })),
8014
+ focus: (op) => ({ viewId: op.viewId }),
8015
+ describe: () => "R\xE9ordonne les onglets"
8016
+ });
8017
+ var setColumns = setOnTab(
8018
+ "set_columns",
8019
+ "columns",
8020
+ z2.z.array(z2.z.string().min(1)),
8021
+ // Defensive on shape: a summary is rendered in a list beside other summaries,
8022
+ // and one malformed payload must not take the page down with it.
8023
+ (value) => `Affiche ${Array.isArray(value) ? value.length : 0} colonne(s)`
8024
+ );
8025
+ var setColumnSizing = setOnTab(
8026
+ "set_column_sizing",
8027
+ "columnSizing",
8028
+ z2.z.record(z2.z.string(), z2.z.number().int().positive()),
8029
+ () => "Ajuste la largeur des colonnes"
8030
+ );
8031
+ var setLayout = setOnTab(
8032
+ "set_layout",
8033
+ "layout",
8034
+ z2.z.enum(["table", "kanban"]),
8035
+ (value) => `Passe en affichage ${value}`
8036
+ );
8037
+ var setGroupBy = setOnTab(
8038
+ "set_group_by",
8039
+ "groupByAttribute",
8040
+ z2.z.string().min(1).nullable(),
8041
+ (value) => value ? `Regroupe par ${value}` : "Retire le regroupement"
8042
+ );
8043
+ var setFilters = setOnTab(
8044
+ "set_filters",
8045
+ "filters",
8046
+ filterGroupPayload.nullable(),
8047
+ (value) => value ? "Modifie les filtres" : "Retire les filtres"
8048
+ );
8049
+ var setSorts = setOnTab(
8050
+ "set_sorts",
8051
+ "sorts",
8052
+ sortRulesPayload.nullable(),
8053
+ (value) => value ? "Modifie le tri" : "Retire le tri"
8054
+ );
8055
+ var setCreateMode = setOnTab(
8056
+ "set_create_mode",
8057
+ "createMode",
8058
+ z2.z.enum(["redirect", "inline", "peek"]),
8059
+ (value) => `Cr\xE9ation en mode ${value}`
8060
+ );
8061
+ var setReadOnly = setOnTab(
8062
+ "set_read_only",
8063
+ "readOnly",
8064
+ z2.z.boolean(),
8065
+ (value) => value ? "Passe l'onglet en lecture seule" : "Rend l'onglet modifiable"
8066
+ );
8067
+ var setCardUserAttribute = setOnTab(
8068
+ "set_card_user_attribute",
8069
+ "cardUserAttribute",
8070
+ z2.z.string().min(1).nullable(),
8071
+ (value) => value ? `Affiche ${value} sur les cartes` : "Retire l'utilisateur des cartes"
8072
+ );
8073
+ var setCardDateAttribute = setOnTab(
8074
+ "set_card_date_attribute",
8075
+ "cardDateAttribute",
8076
+ z2.z.string().min(1).nullable(),
8077
+ (value) => value ? `Affiche ${value} sur les cartes` : "Retire la date des cartes"
8078
+ );
8079
+ var LIST_VIEW_OPERATIONS = [
8080
+ addListTab,
8081
+ removeListTab,
8082
+ updateListTab,
8083
+ reorderListTabs,
8084
+ setColumns,
8085
+ setColumnSizing,
8086
+ setLayout,
8087
+ setGroupBy,
8088
+ setFilters,
8089
+ setSorts,
8090
+ setCreateMode,
8091
+ setReadOnly,
8092
+ setCardUserAttribute,
8093
+ setCardDateAttribute
8094
+ ];
8095
+ function requireObject(state, objectId) {
8096
+ if (!state.objects.some((o) => o.id === objectId)) {
8097
+ throw new chunkHWZRSXFB_js.ValidationError(`Object "${objectId}" is not in the draftable state`, []);
8098
+ }
8099
+ }
8100
+ var objectOperationBase = { ...operationBase, objectId: z2.z.string().min(1) };
8101
+ var addObjectSchema = z2.z.object({
8102
+ ...objectOperationBase,
8103
+ type: z2.z.literal("add_object"),
8104
+ name: z2.z.string().min(1),
8105
+ label: z2.z.string().min(1),
8106
+ icon: z2.z.string().min(1).optional()
8107
+ });
8108
+ var addObject = defineOperation({
8109
+ type: "add_object",
8110
+ schema: addObjectSchema,
8111
+ apply: (state, op) => {
8112
+ if (state.objects.some((o) => o.name === op.name)) {
8113
+ throw new chunkHWZRSXFB_js.ValidationError(`Object "${op.name}" already exists`, []);
8114
+ }
8115
+ if (state.objects.some((o) => o.id === op.objectId)) {
8116
+ throw new chunkHWZRSXFB_js.ValidationError(`Object id "${op.objectId}" is already taken`, []);
8117
+ }
8118
+ const created = {
8119
+ id: op.objectId,
8120
+ name: op.name,
8121
+ label: op.label,
8122
+ ...op.icon === void 0 ? {} : { icon: op.icon }
8123
+ };
8124
+ return { ...state, objects: [...state.objects, created] };
8125
+ },
8126
+ // The caller generates objectId, so a draft object is addressable by route
8127
+ // before it exists — that is what lets the app navigate to it live.
8128
+ focus: (op) => ({ objectId: op.objectId }),
8129
+ describe: (op) => `Cr\xE9e l'objet \xAB ${op.label} \xBB`
8130
+ });
8131
+ var updateObjectSchema = z2.z.object({
8132
+ ...objectOperationBase,
8133
+ type: z2.z.literal("update_object"),
8134
+ changes: z2.z.object({ label: z2.z.string().min(1).optional(), icon: z2.z.string().min(1).optional() }).refine((c) => Object.keys(c).length > 0, "update_object needs at least one change")
8135
+ });
8136
+ var updateObject = defineOperation({
8137
+ type: "update_object",
8138
+ schema: updateObjectSchema,
8139
+ apply: (state, op) => {
8140
+ requireObject(state, op.objectId);
8141
+ return {
8142
+ ...state,
8143
+ objects: state.objects.map((o) => o.id === op.objectId ? { ...o, ...op.changes } : o)
8144
+ };
8145
+ },
8146
+ focus: (op) => ({ objectId: op.objectId }),
8147
+ describe: (op) => op.changes.label ? `Renomme l'objet en \xAB ${op.changes.label} \xBB` : "Modifie l'objet"
8148
+ });
8149
+ var removeObjectSchema = z2.z.object({ ...objectOperationBase, type: z2.z.literal("remove_object") });
8150
+ var removeObject = defineOperation({
8151
+ type: "remove_object",
8152
+ schema: removeObjectSchema,
8153
+ apply: (state, op) => {
8154
+ requireObject(state, op.objectId);
8155
+ return {
8156
+ ...state,
8157
+ objects: state.objects.filter((o) => o.id !== op.objectId),
8158
+ attributes: state.attributes.filter((a) => a.objectId !== op.objectId),
8159
+ sampleRecords: state.sampleRecords.filter((r) => r.objectId !== op.objectId),
8160
+ views: state.views.filter((v) => v.objectId !== op.objectId)
8161
+ };
8162
+ },
8163
+ focus: () => ({}),
8164
+ describe: (op) => `Supprime l'objet ${op.objectId}`
8165
+ });
8166
+ var addAttributeSchema = z2.z.object({
8167
+ ...objectOperationBase,
8168
+ type: z2.z.literal("add_attribute"),
8169
+ attributeId: z2.z.string().min(1),
8170
+ name: z2.z.string().min(1),
8171
+ label: z2.z.string().min(1),
8172
+ attributeType: z2.z.string().min(1)
8173
+ });
8174
+ var addAttribute = defineOperation({
8175
+ type: "add_attribute",
8176
+ schema: addAttributeSchema,
8177
+ apply: (state, op) => {
8178
+ requireObject(state, op.objectId);
8179
+ if (state.attributes.some((a) => a.objectId === op.objectId && a.name === op.name)) {
8180
+ throw new chunkHWZRSXFB_js.ValidationError(
8181
+ `Attribute "${op.name}" already exists on object "${op.objectId}"`,
8182
+ []
8183
+ );
8184
+ }
8185
+ return {
8186
+ ...state,
8187
+ attributes: [
8188
+ ...state.attributes,
8189
+ {
8190
+ id: op.attributeId,
8191
+ objectId: op.objectId,
8192
+ name: op.name,
8193
+ label: op.label,
8194
+ attributeType: op.attributeType
8195
+ }
8196
+ ]
8197
+ };
8198
+ },
8199
+ focus: (op) => ({ objectId: op.objectId }),
8200
+ describe: (op) => `Ajoute l'attribut \xAB ${op.label} \xBB`
8201
+ });
8202
+ var updateAttributeSchema = z2.z.object({
8203
+ ...operationBase,
8204
+ type: z2.z.literal("update_attribute"),
8205
+ attributeId: z2.z.string().min(1),
8206
+ changes: z2.z.object({ label: z2.z.string().min(1).optional() }).refine((c) => Object.keys(c).length > 0, "update_attribute needs at least one change")
8207
+ });
8208
+ var updateAttribute = defineOperation({
8209
+ type: "update_attribute",
8210
+ schema: updateAttributeSchema,
8211
+ apply: (state, op) => {
8212
+ if (!state.attributes.some((a) => a.id === op.attributeId)) {
8213
+ throw new chunkHWZRSXFB_js.ValidationError(`Attribute "${op.attributeId}" is not in the draftable state`, []);
8214
+ }
8215
+ return {
8216
+ ...state,
8217
+ attributes: state.attributes.map(
8218
+ (a) => a.id === op.attributeId ? { ...a, ...op.changes } : a
8219
+ )
8220
+ };
8221
+ },
8222
+ focus: () => ({}),
8223
+ describe: (op) => op.changes.label ? `Renomme l'attribut en \xAB ${op.changes.label} \xBB` : "Modifie l'attribut"
8224
+ });
8225
+ var removeAttributeSchema = z2.z.object({
8226
+ ...operationBase,
8227
+ type: z2.z.literal("remove_attribute"),
8228
+ attributeId: z2.z.string().min(1)
8229
+ });
8230
+ var removeAttribute = defineOperation({
8231
+ type: "remove_attribute",
8232
+ schema: removeAttributeSchema,
8233
+ apply: (state, op) => {
8234
+ if (!state.attributes.some((a) => a.id === op.attributeId)) {
8235
+ throw new chunkHWZRSXFB_js.ValidationError(`Attribute "${op.attributeId}" is not in the draftable state`, []);
8236
+ }
8237
+ return { ...state, attributes: state.attributes.filter((a) => a.id !== op.attributeId) };
8238
+ },
8239
+ focus: () => ({}),
8240
+ describe: (op) => `Supprime l'attribut ${op.attributeId}`
8241
+ });
8242
+ var addSampleRecordSchema = z2.z.object({
8243
+ ...objectOperationBase,
8244
+ type: z2.z.literal("add_sample_record"),
8245
+ recordId: z2.z.string().min(1),
8246
+ values: z2.z.record(z2.z.string(), z2.z.unknown())
8247
+ });
8248
+ var addSampleRecord = defineOperation({
8249
+ type: "add_sample_record",
8250
+ schema: addSampleRecordSchema,
8251
+ apply: (state, op) => {
8252
+ requireObject(state, op.objectId);
8253
+ if (state.sampleRecords.some((r) => r.id === op.recordId)) {
8254
+ throw new chunkHWZRSXFB_js.ValidationError(`Sample record "${op.recordId}" already exists`, []);
8255
+ }
8256
+ return {
8257
+ ...state,
8258
+ sampleRecords: [
8259
+ ...state.sampleRecords,
8260
+ { id: op.recordId, objectId: op.objectId, values: op.values }
8261
+ ]
8262
+ };
8263
+ },
8264
+ // A sample is a draft record, not a render-time fiction: publishing
8265
+ // materialises it, discarding the draft discards it.
8266
+ focus: (op) => ({ objectId: op.objectId, recordId: op.recordId }),
8267
+ describe: () => "Ajoute un exemple"
8268
+ });
8269
+ var removeSampleRecordSchema = z2.z.object({
8270
+ ...operationBase,
8271
+ type: z2.z.literal("remove_sample_record"),
8272
+ recordId: z2.z.string().min(1)
8273
+ });
8274
+ var removeSampleRecord = defineOperation({
8275
+ type: "remove_sample_record",
8276
+ schema: removeSampleRecordSchema,
8277
+ apply: (state, op) => {
8278
+ if (!state.sampleRecords.some((r) => r.id === op.recordId)) {
8279
+ throw new chunkHWZRSXFB_js.ValidationError(`Sample record "${op.recordId}" is not in the draft`, []);
8280
+ }
8281
+ return { ...state, sampleRecords: state.sampleRecords.filter((r) => r.id !== op.recordId) };
8282
+ },
8283
+ focus: () => ({}),
8284
+ describe: () => "Retire un exemple"
8285
+ });
8286
+ var SCHEMA_OPERATIONS = [
8287
+ addObject,
8288
+ updateObject,
8289
+ removeObject,
8290
+ addAttribute,
8291
+ updateAttribute,
8292
+ removeAttribute,
8293
+ addSampleRecord,
8294
+ removeSampleRecord
8295
+ ];
8296
+
8297
+ // src/architect/registry.ts
8298
+ function build() {
8299
+ const map = /* @__PURE__ */ new Map();
8300
+ for (const definition of [
8301
+ ...SCHEMA_OPERATIONS,
8302
+ ...DETAIL_VIEW_OPERATIONS,
8303
+ ...LIST_VIEW_OPERATIONS
8304
+ ]) {
8305
+ if (map.has(definition.type)) {
8306
+ throw new chunkHWZRSXFB_js.DuplicateError("architect operation", definition.type);
8307
+ }
8308
+ map.set(definition.type, definition);
8309
+ }
8310
+ return map;
8311
+ }
8312
+ var OPERATION_REGISTRY = build();
8313
+ var ALL_OPERATION_TYPES = [...OPERATION_REGISTRY.keys()];
8314
+
8315
+ // src/architect/apply.ts
8316
+ function defOf(operation) {
8317
+ const definition = OPERATION_REGISTRY.get(operation.type);
8318
+ if (!definition) {
8319
+ throw new chunkHWZRSXFB_js.ValidationError(
8320
+ `Operation "${operation.id}" has unknown type "${operation.type}"`,
8321
+ []
8322
+ );
8323
+ }
8324
+ return definition;
8325
+ }
8326
+ function applyOperations(state, operations) {
8327
+ return operations.reduce(
8328
+ (acc, operation) => defOf(operation).apply(acc, operation),
8329
+ state
8330
+ );
8331
+ }
8332
+ function focusOf(operation) {
8333
+ return defOf(operation).focus(operation);
8334
+ }
8335
+ function describeOperations(operations, ctx) {
8336
+ return operations.map((operation) => defOf(operation).describe(operation, ctx));
8337
+ }
8338
+ function parseOperation(candidate) {
8339
+ if (typeof candidate !== "object" || candidate === null || !("type" in candidate)) {
8340
+ throw new chunkHWZRSXFB_js.ValidationError("An operation must be an object carrying a type", []);
8341
+ }
8342
+ const type = candidate.type;
8343
+ if (typeof type !== "string") {
8344
+ throw new chunkHWZRSXFB_js.ValidationError("An operation's type must be a string", []);
8345
+ }
8346
+ const definition = OPERATION_REGISTRY.get(type);
8347
+ if (!definition) {
8348
+ throw new chunkHWZRSXFB_js.ValidationError(`Unknown operation type "${type}"`, []);
8349
+ }
8350
+ const parsed = definition.schema.safeParse(candidate);
8351
+ if (!parsed.success) {
8352
+ throw new chunkHWZRSXFB_js.ValidationError(
8353
+ `Operation "${type}" is invalid: ${parsed.error.issues.map((i) => `${i.path.join(".")} ${i.message}`).join("; ")}`,
8354
+ []
8355
+ );
8356
+ }
8357
+ return parsed.data;
8358
+ }
8359
+
8360
+ // src/architect/field-ids.ts
8361
+ function makeFieldId(groupId, seed, collisionIndex) {
8362
+ const base = `fld_${groupId}_${seed}`;
8363
+ return collisionIndex === 0 ? base : `${base}_${collisionIndex}`;
8364
+ }
8365
+ function seedOf(field, index) {
8366
+ if (field.attributeGroup) return field.attributeGroup.id;
8367
+ if (field.attribute) return field.attribute;
8368
+ return `slot${index}`;
8369
+ }
8370
+ function withIds(group2) {
8371
+ const seen = /* @__PURE__ */ new Map();
8372
+ const fields = group2.fields.map((field, index) => {
8373
+ if (field.id) return field;
8374
+ const seed = seedOf(field, index);
8375
+ const collisionIndex = seen.get(seed) ?? 0;
8376
+ seen.set(seed, collisionIndex + 1);
8377
+ return { ...field, id: makeFieldId(group2.id, seed, collisionIndex) };
8378
+ });
8379
+ return { ...group2, fields };
8380
+ }
8381
+ function ensureFieldIds(tabs) {
8382
+ return tabs.map(
8383
+ (tab) => tab.type === "form" ? { ...tab, groups: tab.groups.map(withIds) } : tab
8384
+ );
8385
+ }
8386
+
7541
8387
  Object.defineProperty(exports, "asTenantId", {
7542
8388
  enumerable: true,
7543
- get: function () { return chunkFRCDMQER_js.asTenantId; }
8389
+ get: function () { return chunkOYHBQMC7_js.asTenantId; }
7544
8390
  });
7545
8391
  Object.defineProperty(exports, "asUserId", {
7546
8392
  enumerable: true,
7547
- get: function () { return chunkFRCDMQER_js.asUserId; }
8393
+ get: function () { return chunkOYHBQMC7_js.asUserId; }
8394
+ });
8395
+ Object.defineProperty(exports, "canonicalStringify", {
8396
+ enumerable: true,
8397
+ get: function () { return chunkOYHBQMC7_js.canonicalStringify; }
7548
8398
  });
7549
8399
  Object.defineProperty(exports, "deepEqual", {
7550
8400
  enumerable: true,
7551
- get: function () { return chunkFRCDMQER_js.deepEqual; }
8401
+ get: function () { return chunkOYHBQMC7_js.deepEqual; }
7552
8402
  });
7553
8403
  Object.defineProperty(exports, "generateId", {
7554
8404
  enumerable: true,
7555
- get: function () { return chunkFRCDMQER_js.generateId; }
8405
+ get: function () { return chunkOYHBQMC7_js.generateId; }
7556
8406
  });
7557
8407
  Object.defineProperty(exports, "indexBy", {
7558
8408
  enumerable: true,
7559
- get: function () { return chunkFRCDMQER_js.indexBy; }
8409
+ get: function () { return chunkOYHBQMC7_js.indexBy; }
7560
8410
  });
7561
8411
  Object.defineProperty(exports, "ATTRIBUTE_FILTER_OPERATORS", {
7562
8412
  enumerable: true,
7563
- get: function () { return chunkQMAVKX3Y_js.ATTRIBUTE_FILTER_OPERATORS; }
8413
+ get: function () { return chunkTU6ECJFZ_js.ATTRIBUTE_FILTER_OPERATORS; }
7564
8414
  });
7565
8415
  Object.defineProperty(exports, "LIST_VIEW_TAB_VISIBILITIES", {
7566
8416
  enumerable: true,
7567
- get: function () { return chunkQMAVKX3Y_js.LIST_VIEW_TAB_VISIBILITIES; }
8417
+ get: function () { return chunkTU6ECJFZ_js.LIST_VIEW_TAB_VISIBILITIES; }
7568
8418
  });
7569
8419
  Object.defineProperty(exports, "NO_VALUE_OPERATORS", {
7570
8420
  enumerable: true,
7571
- get: function () { return chunkQMAVKX3Y_js.NO_VALUE_OPERATORS; }
8421
+ get: function () { return chunkTU6ECJFZ_js.NO_VALUE_OPERATORS; }
7572
8422
  });
7573
8423
  Object.defineProperty(exports, "OPERATORS_BY_TYPE", {
7574
8424
  enumerable: true,
7575
- get: function () { return chunkQMAVKX3Y_js.OPERATORS_BY_TYPE; }
8425
+ get: function () { return chunkTU6ECJFZ_js.OPERATORS_BY_TYPE; }
7576
8426
  });
7577
8427
  Object.defineProperty(exports, "REMOVED_OPERATOR_REPLACEMENTS", {
7578
8428
  enumerable: true,
7579
- get: function () { return chunkQMAVKX3Y_js.REMOVED_OPERATOR_REPLACEMENTS; }
8429
+ get: function () { return chunkTU6ECJFZ_js.REMOVED_OPERATOR_REPLACEMENTS; }
7580
8430
  });
7581
8431
  Object.defineProperty(exports, "RESERVED_ATTRIBUTE_NAMES", {
7582
8432
  enumerable: true,
7583
- get: function () { return chunkQMAVKX3Y_js.RESERVED_ATTRIBUTE_NAMES; }
8433
+ get: function () { return chunkTU6ECJFZ_js.RESERVED_ATTRIBUTE_NAMES; }
7584
8434
  });
7585
8435
  Object.defineProperty(exports, "RESERVED_OBJECT_NAMES", {
7586
8436
  enumerable: true,
7587
- get: function () { return chunkQMAVKX3Y_js.RESERVED_OBJECT_NAMES; }
8437
+ get: function () { return chunkTU6ECJFZ_js.RESERVED_OBJECT_NAMES; }
7588
8438
  });
7589
8439
  Object.defineProperty(exports, "RESOURCE_VISIBILITIES", {
7590
8440
  enumerable: true,
7591
- get: function () { return chunkQMAVKX3Y_js.RESOURCE_VISIBILITIES; }
8441
+ get: function () { return chunkTU6ECJFZ_js.RESOURCE_VISIBILITIES; }
7592
8442
  });
7593
8443
  Object.defineProperty(exports, "SYNONYM_ALIASES", {
7594
8444
  enumerable: true,
7595
- get: function () { return chunkQMAVKX3Y_js.SYNONYM_ALIASES; }
8445
+ get: function () { return chunkTU6ECJFZ_js.SYNONYM_ALIASES; }
7596
8446
  });
7597
8447
  Object.defineProperty(exports, "SYSTEM_ATTRIBUTES", {
7598
8448
  enumerable: true,
7599
- get: function () { return chunkQMAVKX3Y_js.SYSTEM_ATTRIBUTES; }
8449
+ get: function () { return chunkTU6ECJFZ_js.SYSTEM_ATTRIBUTES; }
7600
8450
  });
7601
8451
  Object.defineProperty(exports, "SYSTEM_ATTRIBUTE_I18N_KEYS", {
7602
8452
  enumerable: true,
7603
- get: function () { return chunkQMAVKX3Y_js.SYSTEM_ATTRIBUTE_I18N_KEYS; }
8453
+ get: function () { return chunkTU6ECJFZ_js.SYSTEM_ATTRIBUTE_I18N_KEYS; }
7604
8454
  });
7605
8455
  Object.defineProperty(exports, "SYSTEM_FIELD_NAMES", {
7606
8456
  enumerable: true,
7607
- get: function () { return chunkQMAVKX3Y_js.SYSTEM_FIELD_NAMES; }
8457
+ get: function () { return chunkTU6ECJFZ_js.SYSTEM_FIELD_NAMES; }
7608
8458
  });
7609
8459
  Object.defineProperty(exports, "SYSTEM_FILTER_ATTRIBUTE_TYPES", {
7610
8460
  enumerable: true,
7611
- get: function () { return chunkQMAVKX3Y_js.SYSTEM_FILTER_ATTRIBUTE_TYPES; }
8461
+ get: function () { return chunkTU6ECJFZ_js.SYSTEM_FILTER_ATTRIBUTE_TYPES; }
7612
8462
  });
7613
8463
  Object.defineProperty(exports, "canonicalizeFilterValue", {
7614
8464
  enumerable: true,
7615
- get: function () { return chunkQMAVKX3Y_js.canonicalizeFilterValue; }
8465
+ get: function () { return chunkTU6ECJFZ_js.canonicalizeFilterValue; }
7616
8466
  });
7617
8467
  Object.defineProperty(exports, "collectQualifiedRuleIssues", {
7618
8468
  enumerable: true,
7619
- get: function () { return chunkQMAVKX3Y_js.collectQualifiedRuleIssues; }
8469
+ get: function () { return chunkTU6ECJFZ_js.collectQualifiedRuleIssues; }
7620
8470
  });
7621
8471
  Object.defineProperty(exports, "currentActor", {
7622
8472
  enumerable: true,
7623
- get: function () { return chunkQMAVKX3Y_js.currentActor; }
8473
+ get: function () { return chunkTU6ECJFZ_js.currentActor; }
7624
8474
  });
7625
8475
  Object.defineProperty(exports, "detailTabSchema", {
7626
8476
  enumerable: true,
7627
- get: function () { return chunkQMAVKX3Y_js.detailTabSchema; }
8477
+ get: function () { return chunkTU6ECJFZ_js.detailTabSchema; }
7628
8478
  });
7629
8479
  Object.defineProperty(exports, "detailViewConfigSchema", {
7630
8480
  enumerable: true,
7631
- get: function () { return chunkQMAVKX3Y_js.detailViewConfigSchema; }
8481
+ get: function () { return chunkTU6ECJFZ_js.detailViewConfigSchema; }
7632
8482
  });
7633
8483
  Object.defineProperty(exports, "extractCurrencyFilterValue", {
7634
8484
  enumerable: true,
7635
- get: function () { return chunkQMAVKX3Y_js.extractCurrencyFilterValue; }
8485
+ get: function () { return chunkTU6ECJFZ_js.extractCurrencyFilterValue; }
7636
8486
  });
7637
8487
  Object.defineProperty(exports, "extractFilterValue", {
7638
8488
  enumerable: true,
7639
- get: function () { return chunkQMAVKX3Y_js.extractFilterValue; }
8489
+ get: function () { return chunkTU6ECJFZ_js.extractFilterValue; }
7640
8490
  });
7641
8491
  Object.defineProperty(exports, "getAttributeCapabilities", {
7642
8492
  enumerable: true,
7643
- get: function () { return chunkQMAVKX3Y_js.getAttributeCapabilities; }
8493
+ get: function () { return chunkTU6ECJFZ_js.getAttributeCapabilities; }
7644
8494
  });
7645
8495
  Object.defineProperty(exports, "getAttributeFilterOperators", {
7646
8496
  enumerable: true,
7647
- get: function () { return chunkQMAVKX3Y_js.getAttributeFilterOperators; }
8497
+ get: function () { return chunkTU6ECJFZ_js.getAttributeFilterOperators; }
7648
8498
  });
7649
8499
  Object.defineProperty(exports, "getOperatorPolarity", {
7650
8500
  enumerable: true,
7651
- get: function () { return chunkQMAVKX3Y_js.getOperatorPolarity; }
8501
+ get: function () { return chunkTU6ECJFZ_js.getOperatorPolarity; }
7652
8502
  });
7653
8503
  Object.defineProperty(exports, "getRollupFilterOperators", {
7654
8504
  enumerable: true,
7655
- get: function () { return chunkQMAVKX3Y_js.getRollupFilterOperators; }
8505
+ get: function () { return chunkTU6ECJFZ_js.getRollupFilterOperators; }
7656
8506
  });
7657
8507
  Object.defineProperty(exports, "getSystemAttributeI18nKey", {
7658
8508
  enumerable: true,
7659
- get: function () { return chunkQMAVKX3Y_js.getSystemAttributeI18nKey; }
8509
+ get: function () { return chunkTU6ECJFZ_js.getSystemAttributeI18nKey; }
7660
8510
  });
7661
8511
  Object.defineProperty(exports, "getSystemAttributeList", {
7662
8512
  enumerable: true,
7663
- get: function () { return chunkQMAVKX3Y_js.getSystemAttributeList; }
8513
+ get: function () { return chunkTU6ECJFZ_js.getSystemAttributeList; }
7664
8514
  });
7665
8515
  Object.defineProperty(exports, "inverseSourceSchema", {
7666
8516
  enumerable: true,
7667
- get: function () { return chunkQMAVKX3Y_js.inverseSourceSchema; }
8517
+ get: function () { return chunkTU6ECJFZ_js.inverseSourceSchema; }
7668
8518
  });
7669
8519
  Object.defineProperty(exports, "isAttributeFilterable", {
7670
8520
  enumerable: true,
7671
- get: function () { return chunkQMAVKX3Y_js.isAttributeFilterable; }
8521
+ get: function () { return chunkTU6ECJFZ_js.isAttributeFilterable; }
7672
8522
  });
7673
8523
  Object.defineProperty(exports, "isAttributeGroupable", {
7674
8524
  enumerable: true,
7675
- get: function () { return chunkQMAVKX3Y_js.isAttributeGroupable; }
8525
+ get: function () { return chunkTU6ECJFZ_js.isAttributeGroupable; }
7676
8526
  });
7677
8527
  Object.defineProperty(exports, "isAttributeKanbanGroupable", {
7678
8528
  enumerable: true,
7679
- get: function () { return chunkQMAVKX3Y_js.isAttributeKanbanGroupable; }
8529
+ get: function () { return chunkTU6ECJFZ_js.isAttributeKanbanGroupable; }
7680
8530
  });
7681
8531
  Object.defineProperty(exports, "isAttributeSearchable", {
7682
8532
  enumerable: true,
7683
- get: function () { return chunkQMAVKX3Y_js.isAttributeSearchable; }
8533
+ get: function () { return chunkTU6ECJFZ_js.isAttributeSearchable; }
7684
8534
  });
7685
8535
  Object.defineProperty(exports, "isDynamicValue", {
7686
8536
  enumerable: true,
7687
- get: function () { return chunkQMAVKX3Y_js.isDynamicValue; }
8537
+ get: function () { return chunkTU6ECJFZ_js.isDynamicValue; }
7688
8538
  });
7689
8539
  Object.defineProperty(exports, "isManagedSystemAttribute", {
7690
8540
  enumerable: true,
7691
- get: function () { return chunkQMAVKX3Y_js.isManagedSystemAttribute; }
8541
+ get: function () { return chunkTU6ECJFZ_js.isManagedSystemAttribute; }
7692
8542
  });
7693
8543
  Object.defineProperty(exports, "isNoValueOperator", {
7694
8544
  enumerable: true,
7695
- get: function () { return chunkQMAVKX3Y_js.isNoValueOperator; }
8545
+ get: function () { return chunkTU6ECJFZ_js.isNoValueOperator; }
7696
8546
  });
7697
8547
  Object.defineProperty(exports, "isRelativeDateValue", {
7698
8548
  enumerable: true,
7699
- get: function () { return chunkQMAVKX3Y_js.isRelativeDateValue; }
8549
+ get: function () { return chunkTU6ECJFZ_js.isRelativeDateValue; }
7700
8550
  });
7701
8551
  Object.defineProperty(exports, "isSetMembershipOperator", {
7702
8552
  enumerable: true,
7703
- get: function () { return chunkQMAVKX3Y_js.isSetMembershipOperator; }
8553
+ get: function () { return chunkTU6ECJFZ_js.isSetMembershipOperator; }
7704
8554
  });
7705
8555
  Object.defineProperty(exports, "listViewConfigSchema", {
7706
8556
  enumerable: true,
7707
- get: function () { return chunkQMAVKX3Y_js.listViewConfigSchema; }
8557
+ get: function () { return chunkTU6ECJFZ_js.listViewConfigSchema; }
7708
8558
  });
7709
8559
  Object.defineProperty(exports, "listViewTabSchema", {
7710
8560
  enumerable: true,
7711
- get: function () { return chunkQMAVKX3Y_js.listViewTabSchema; }
8561
+ get: function () { return chunkTU6ECJFZ_js.listViewTabSchema; }
7712
8562
  });
7713
8563
  Object.defineProperty(exports, "normalizeFilterRule", {
7714
8564
  enumerable: true,
7715
- get: function () { return chunkQMAVKX3Y_js.normalizeFilterRule; }
8565
+ get: function () { return chunkTU6ECJFZ_js.normalizeFilterRule; }
7716
8566
  });
7717
8567
  Object.defineProperty(exports, "normalizeForEdgeRpc", {
7718
8568
  enumerable: true,
7719
- get: function () { return chunkQMAVKX3Y_js.normalizeForEdgeRpc; }
8569
+ get: function () { return chunkTU6ECJFZ_js.normalizeForEdgeRpc; }
7720
8570
  });
7721
8571
  Object.defineProperty(exports, "normalizeOperator", {
7722
8572
  enumerable: true,
7723
- get: function () { return chunkQMAVKX3Y_js.normalizeOperator; }
8573
+ get: function () { return chunkTU6ECJFZ_js.normalizeOperator; }
7724
8574
  });
7725
8575
  Object.defineProperty(exports, "now", {
7726
8576
  enumerable: true,
7727
- get: function () { return chunkQMAVKX3Y_js.now; }
8577
+ get: function () { return chunkTU6ECJFZ_js.now; }
7728
8578
  });
7729
8579
  Object.defineProperty(exports, "parseResourceVisibility", {
7730
8580
  enumerable: true,
7731
- get: function () { return chunkQMAVKX3Y_js.parseResourceVisibility; }
8581
+ get: function () { return chunkTU6ECJFZ_js.parseResourceVisibility; }
7732
8582
  });
7733
8583
  Object.defineProperty(exports, "parseViewConfig", {
7734
8584
  enumerable: true,
7735
- get: function () { return chunkQMAVKX3Y_js.parseViewConfig; }
8585
+ get: function () { return chunkTU6ECJFZ_js.parseViewConfig; }
7736
8586
  });
7737
8587
  Object.defineProperty(exports, "relationSourceSchema", {
7738
8588
  enumerable: true,
7739
- get: function () { return chunkQMAVKX3Y_js.relationSourceSchema; }
8589
+ get: function () { return chunkTU6ECJFZ_js.relationSourceSchema; }
7740
8590
  });
7741
8591
  Object.defineProperty(exports, "resolveEffectiveFilterType", {
7742
8592
  enumerable: true,
7743
- get: function () { return chunkQMAVKX3Y_js.resolveEffectiveFilterType; }
8593
+ get: function () { return chunkTU6ECJFZ_js.resolveEffectiveFilterType; }
7744
8594
  });
7745
8595
  Object.defineProperty(exports, "resolveIsWithinBounds", {
7746
8596
  enumerable: true,
7747
- get: function () { return chunkQMAVKX3Y_js.resolveIsWithinBounds; }
8597
+ get: function () { return chunkTU6ECJFZ_js.resolveIsWithinBounds; }
7748
8598
  });
7749
8599
  Object.defineProperty(exports, "resolveUtcDayBounds", {
7750
8600
  enumerable: true,
7751
- get: function () { return chunkQMAVKX3Y_js.resolveUtcDayBounds; }
8601
+ get: function () { return chunkTU6ECJFZ_js.resolveUtcDayBounds; }
7752
8602
  });
7753
8603
  Object.defineProperty(exports, "tableSourceSchema", {
7754
8604
  enumerable: true,
7755
- get: function () { return chunkQMAVKX3Y_js.tableSourceSchema; }
8605
+ get: function () { return chunkTU6ECJFZ_js.tableSourceSchema; }
7756
8606
  });
7757
8607
  Object.defineProperty(exports, "toMultiValueOperator", {
7758
8608
  enumerable: true,
7759
- get: function () { return chunkQMAVKX3Y_js.toMultiValueOperator; }
8609
+ get: function () { return chunkTU6ECJFZ_js.toMultiValueOperator; }
7760
8610
  });
7761
8611
  Object.defineProperty(exports, "toUtcDayString", {
7762
8612
  enumerable: true,
7763
- get: function () { return chunkQMAVKX3Y_js.toUtcDayString; }
8613
+ get: function () { return chunkTU6ECJFZ_js.toUtcDayString; }
7764
8614
  });
7765
8615
  Object.defineProperty(exports, "today", {
7766
8616
  enumerable: true,
7767
- get: function () { return chunkQMAVKX3Y_js.today; }
8617
+ get: function () { return chunkTU6ECJFZ_js.today; }
7768
8618
  });
7769
8619
  Object.defineProperty(exports, "validateQualifiedRule", {
7770
8620
  enumerable: true,
7771
- get: function () { return chunkQMAVKX3Y_js.validateQualifiedRule; }
8621
+ get: function () { return chunkTU6ECJFZ_js.validateQualifiedRule; }
7772
8622
  });
7773
8623
  Object.defineProperty(exports, "viewConfigByTypeSchema", {
7774
8624
  enumerable: true,
7775
- get: function () { return chunkQMAVKX3Y_js.viewConfigByTypeSchema; }
8625
+ get: function () { return chunkTU6ECJFZ_js.viewConfigByTypeSchema; }
7776
8626
  });
7777
8627
  Object.defineProperty(exports, "viewTypeSchema", {
7778
8628
  enumerable: true,
7779
- get: function () { return chunkQMAVKX3Y_js.viewTypeSchema; }
8629
+ get: function () { return chunkTU6ECJFZ_js.viewTypeSchema; }
7780
8630
  });
7781
8631
  Object.defineProperty(exports, "ComputedFormulaParseError", {
7782
8632
  enumerable: true,
7783
- get: function () { return chunkDEHBEFGO_js.ComputedFormulaParseError; }
8633
+ get: function () { return chunkLRFLSFIA_js.ComputedFormulaParseError; }
7784
8634
  });
7785
8635
  Object.defineProperty(exports, "SCHEMA_LIMITS", {
7786
8636
  enumerable: true,
7787
- get: function () { return chunkDEHBEFGO_js.SCHEMA_LIMITS; }
8637
+ get: function () { return chunkLRFLSFIA_js.SCHEMA_LIMITS; }
7788
8638
  });
7789
8639
  Object.defineProperty(exports, "colorIdSchema", {
7790
8640
  enumerable: true,
7791
- get: function () { return chunkDEHBEFGO_js.colorIdSchema; }
8641
+ get: function () { return chunkLRFLSFIA_js.colorIdSchema; }
7792
8642
  });
7793
8643
  Object.defineProperty(exports, "iconNameSchema", {
7794
8644
  enumerable: true,
7795
- get: function () { return chunkDEHBEFGO_js.iconNameSchema; }
8645
+ get: function () { return chunkLRFLSFIA_js.iconNameSchema; }
7796
8646
  });
7797
8647
  Object.defineProperty(exports, "multiselectOptionWriteSchema", {
7798
8648
  enumerable: true,
7799
- get: function () { return chunkDEHBEFGO_js.multiselectOptionWriteSchema; }
8649
+ get: function () { return chunkLRFLSFIA_js.multiselectOptionWriteSchema; }
7800
8650
  });
7801
8651
  Object.defineProperty(exports, "parseAttributeConfig", {
7802
8652
  enumerable: true,
7803
- get: function () { return chunkDEHBEFGO_js.parseAttributeConfig; }
8653
+ get: function () { return chunkLRFLSFIA_js.parseAttributeConfig; }
7804
8654
  });
7805
8655
  Object.defineProperty(exports, "parseAttributeConfigForCreate", {
7806
8656
  enumerable: true,
7807
- get: function () { return chunkDEHBEFGO_js.parseAttributeConfigForCreate; }
8657
+ get: function () { return chunkLRFLSFIA_js.parseAttributeConfigForCreate; }
7808
8658
  });
7809
8659
  Object.defineProperty(exports, "parseAttributeConfigForUpdate", {
7810
8660
  enumerable: true,
7811
- get: function () { return chunkDEHBEFGO_js.parseAttributeConfigForUpdate; }
8661
+ get: function () { return chunkLRFLSFIA_js.parseAttributeConfigForUpdate; }
7812
8662
  });
7813
8663
  Object.defineProperty(exports, "parseComputedFormula", {
7814
8664
  enumerable: true,
7815
- get: function () { return chunkDEHBEFGO_js.parseComputedFormula; }
8665
+ get: function () { return chunkLRFLSFIA_js.parseComputedFormula; }
7816
8666
  });
7817
8667
  Object.defineProperty(exports, "selectOptionWriteSchema", {
7818
8668
  enumerable: true,
7819
- get: function () { return chunkDEHBEFGO_js.selectOptionWriteSchema; }
8669
+ get: function () { return chunkLRFLSFIA_js.selectOptionWriteSchema; }
7820
8670
  });
7821
8671
  Object.defineProperty(exports, "statusGroupSchema", {
7822
8672
  enumerable: true,
7823
- get: function () { return chunkDEHBEFGO_js.statusGroupSchema; }
8673
+ get: function () { return chunkLRFLSFIA_js.statusGroupSchema; }
7824
8674
  });
7825
8675
  Object.defineProperty(exports, "statusOptionWriteSchema", {
7826
8676
  enumerable: true,
7827
- get: function () { return chunkDEHBEFGO_js.statusOptionWriteSchema; }
8677
+ get: function () { return chunkLRFLSFIA_js.statusOptionWriteSchema; }
7828
8678
  });
7829
8679
  Object.defineProperty(exports, "createFormAttributeValidator", {
7830
8680
  enumerable: true,
7831
- get: function () { return chunkZEPGMHCK_js.createFormAttributeValidator; }
8681
+ get: function () { return chunkE47WAI5K_js.createFormAttributeValidator; }
7832
8682
  });
7833
8683
  Object.defineProperty(exports, "isNullishOrEmptyString", {
7834
8684
  enumerable: true,
7835
- get: function () { return chunkZEPGMHCK_js.isNullishOrEmptyString; }
8685
+ get: function () { return chunkE47WAI5K_js.isNullishOrEmptyString; }
7836
8686
  });
7837
8687
  Object.defineProperty(exports, "isValuePresent", {
7838
8688
  enumerable: true,
7839
- get: function () { return chunkZEPGMHCK_js.isValuePresent; }
8689
+ get: function () { return chunkE47WAI5K_js.isValuePresent; }
7840
8690
  });
7841
8691
  Object.defineProperty(exports, "rejectUnknownAttributesOrThrow", {
7842
8692
  enumerable: true,
7843
- get: function () { return chunkZEPGMHCK_js.rejectUnknownAttributesOrThrow; }
8693
+ get: function () { return chunkE47WAI5K_js.rejectUnknownAttributesOrThrow; }
7844
8694
  });
7845
8695
  Object.defineProperty(exports, "validateDraft", {
7846
8696
  enumerable: true,
7847
- get: function () { return chunkZEPGMHCK_js.validateDraft; }
8697
+ get: function () { return chunkE47WAI5K_js.validateDraft; }
7848
8698
  });
7849
8699
  Object.defineProperty(exports, "validateDraftOrThrow", {
7850
8700
  enumerable: true,
7851
- get: function () { return chunkZEPGMHCK_js.validateDraftOrThrow; }
8701
+ get: function () { return chunkE47WAI5K_js.validateDraftOrThrow; }
7852
8702
  });
7853
8703
  Object.defineProperty(exports, "validateObject", {
7854
8704
  enumerable: true,
7855
- get: function () { return chunkZEPGMHCK_js.validateObject; }
8705
+ get: function () { return chunkE47WAI5K_js.validateObject; }
7856
8706
  });
7857
8707
  Object.defineProperty(exports, "validateObjectOrThrow", {
7858
8708
  enumerable: true,
7859
- get: function () { return chunkZEPGMHCK_js.validateObjectOrThrow; }
8709
+ get: function () { return chunkE47WAI5K_js.validateObjectOrThrow; }
7860
8710
  });
7861
8711
  Object.defineProperty(exports, "createCheckboxValidator", {
7862
8712
  enumerable: true,
@@ -7884,155 +8734,155 @@ Object.defineProperty(exports, "resolveTextPattern", {
7884
8734
  });
7885
8735
  Object.defineProperty(exports, "AccessDeniedError", {
7886
8736
  enumerable: true,
7887
- get: function () { return chunkZBWTAKZO_js.AccessDeniedError; }
8737
+ get: function () { return chunkHWZRSXFB_js.AccessDeniedError; }
7888
8738
  });
7889
8739
  Object.defineProperty(exports, "AttributeInUseError", {
7890
8740
  enumerable: true,
7891
- get: function () { return chunkZBWTAKZO_js.AttributeInUseError; }
8741
+ get: function () { return chunkHWZRSXFB_js.AttributeInUseError; }
7892
8742
  });
7893
8743
  Object.defineProperty(exports, "AttributeNotFoundError", {
7894
8744
  enumerable: true,
7895
- get: function () { return chunkZBWTAKZO_js.AttributeNotFoundError; }
8745
+ get: function () { return chunkHWZRSXFB_js.AttributeNotFoundError; }
7896
8746
  });
7897
8747
  Object.defineProperty(exports, "ChangeTypeNotSupportedError", {
7898
8748
  enumerable: true,
7899
- get: function () { return chunkZBWTAKZO_js.ChangeTypeNotSupportedError; }
8749
+ get: function () { return chunkHWZRSXFB_js.ChangeTypeNotSupportedError; }
7900
8750
  });
7901
8751
  Object.defineProperty(exports, "ConcurrentModificationError", {
7902
8752
  enumerable: true,
7903
- get: function () { return chunkZBWTAKZO_js.ConcurrentModificationError; }
8753
+ get: function () { return chunkHWZRSXFB_js.ConcurrentModificationError; }
7904
8754
  });
7905
8755
  Object.defineProperty(exports, "DestructiveSyncNotAllowedError", {
7906
8756
  enumerable: true,
7907
- get: function () { return chunkZBWTAKZO_js.DestructiveSyncNotAllowedError; }
8757
+ get: function () { return chunkHWZRSXFB_js.DestructiveSyncNotAllowedError; }
7908
8758
  });
7909
8759
  Object.defineProperty(exports, "DuplicateError", {
7910
8760
  enumerable: true,
7911
- get: function () { return chunkZBWTAKZO_js.DuplicateError; }
8761
+ get: function () { return chunkHWZRSXFB_js.DuplicateError; }
7912
8762
  });
7913
8763
  Object.defineProperty(exports, "ForbiddenError", {
7914
8764
  enumerable: true,
7915
- get: function () { return chunkZBWTAKZO_js.ForbiddenError; }
8765
+ get: function () { return chunkHWZRSXFB_js.ForbiddenError; }
7916
8766
  });
7917
8767
  Object.defineProperty(exports, "MemoryNotFoundError", {
7918
8768
  enumerable: true,
7919
- get: function () { return chunkZBWTAKZO_js.MemoryNotFoundError; }
8769
+ get: function () { return chunkHWZRSXFB_js.MemoryNotFoundError; }
7920
8770
  });
7921
8771
  Object.defineProperty(exports, "MigrationTimeoutError", {
7922
8772
  enumerable: true,
7923
- get: function () { return chunkZBWTAKZO_js.MigrationTimeoutError; }
8773
+ get: function () { return chunkHWZRSXFB_js.MigrationTimeoutError; }
7924
8774
  });
7925
8775
  Object.defineProperty(exports, "NotFoundError", {
7926
8776
  enumerable: true,
7927
- get: function () { return chunkZBWTAKZO_js.NotFoundError; }
8777
+ get: function () { return chunkHWZRSXFB_js.NotFoundError; }
7928
8778
  });
7929
8779
  Object.defineProperty(exports, "NotImplementedError", {
7930
8780
  enumerable: true,
7931
- get: function () { return chunkZBWTAKZO_js.NotImplementedError; }
8781
+ get: function () { return chunkHWZRSXFB_js.NotImplementedError; }
7932
8782
  });
7933
8783
  Object.defineProperty(exports, "ObjectNotFoundError", {
7934
8784
  enumerable: true,
7935
- get: function () { return chunkZBWTAKZO_js.ObjectNotFoundError; }
8785
+ get: function () { return chunkHWZRSXFB_js.ObjectNotFoundError; }
7936
8786
  });
7937
8787
  Object.defineProperty(exports, "ObjectReferencedError", {
7938
8788
  enumerable: true,
7939
- get: function () { return chunkZBWTAKZO_js.ObjectReferencedError; }
8789
+ get: function () { return chunkHWZRSXFB_js.ObjectReferencedError; }
7940
8790
  });
7941
8791
  Object.defineProperty(exports, "OrphanSystemAttributeError", {
7942
8792
  enumerable: true,
7943
- get: function () { return chunkZBWTAKZO_js.OrphanSystemAttributeError; }
8793
+ get: function () { return chunkHWZRSXFB_js.OrphanSystemAttributeError; }
7944
8794
  });
7945
8795
  Object.defineProperty(exports, "ProtectedResourceError", {
7946
8796
  enumerable: true,
7947
- get: function () { return chunkZBWTAKZO_js.ProtectedResourceError; }
8797
+ get: function () { return chunkHWZRSXFB_js.ProtectedResourceError; }
7948
8798
  });
7949
8799
  Object.defineProperty(exports, "ProtectedRoleError", {
7950
8800
  enumerable: true,
7951
- get: function () { return chunkZBWTAKZO_js.ProtectedRoleError; }
8801
+ get: function () { return chunkHWZRSXFB_js.ProtectedRoleError; }
7952
8802
  });
7953
8803
  Object.defineProperty(exports, "RecordNotFoundError", {
7954
8804
  enumerable: true,
7955
- get: function () { return chunkZBWTAKZO_js.RecordNotFoundError; }
8805
+ get: function () { return chunkHWZRSXFB_js.RecordNotFoundError; }
7956
8806
  });
7957
8807
  Object.defineProperty(exports, "RecordReferencedError", {
7958
8808
  enumerable: true,
7959
- get: function () { return chunkZBWTAKZO_js.RecordReferencedError; }
8809
+ get: function () { return chunkHWZRSXFB_js.RecordReferencedError; }
7960
8810
  });
7961
8811
  Object.defineProperty(exports, "RepositoryError", {
7962
8812
  enumerable: true,
7963
- get: function () { return chunkZBWTAKZO_js.RepositoryError; }
8813
+ get: function () { return chunkHWZRSXFB_js.RepositoryError; }
7964
8814
  });
7965
8815
  Object.defineProperty(exports, "RoleNotFoundError", {
7966
8816
  enumerable: true,
7967
- get: function () { return chunkZBWTAKZO_js.RoleNotFoundError; }
8817
+ get: function () { return chunkHWZRSXFB_js.RoleNotFoundError; }
7968
8818
  });
7969
8819
  Object.defineProperty(exports, "SchemaError", {
7970
8820
  enumerable: true,
7971
- get: function () { return chunkZBWTAKZO_js.SchemaError; }
8821
+ get: function () { return chunkHWZRSXFB_js.SchemaError; }
7972
8822
  });
7973
8823
  Object.defineProperty(exports, "SchemaErrorCode", {
7974
8824
  enumerable: true,
7975
- get: function () { return chunkZBWTAKZO_js.SchemaErrorCode; }
8825
+ get: function () { return chunkHWZRSXFB_js.SchemaErrorCode; }
7976
8826
  });
7977
8827
  Object.defineProperty(exports, "SchemaPlanNotFoundError", {
7978
8828
  enumerable: true,
7979
- get: function () { return chunkZBWTAKZO_js.SchemaPlanNotFoundError; }
8829
+ get: function () { return chunkHWZRSXFB_js.SchemaPlanNotFoundError; }
7980
8830
  });
7981
8831
  Object.defineProperty(exports, "SearchBackendError", {
7982
8832
  enumerable: true,
7983
- get: function () { return chunkZBWTAKZO_js.SearchBackendError; }
8833
+ get: function () { return chunkHWZRSXFB_js.SearchBackendError; }
7984
8834
  });
7985
8835
  Object.defineProperty(exports, "StorageError", {
7986
8836
  enumerable: true,
7987
- get: function () { return chunkZBWTAKZO_js.StorageError; }
8837
+ get: function () { return chunkHWZRSXFB_js.StorageError; }
7988
8838
  });
7989
8839
  Object.defineProperty(exports, "SyncCascadeError", {
7990
8840
  enumerable: true,
7991
- get: function () { return chunkZBWTAKZO_js.SyncCascadeError; }
8841
+ get: function () { return chunkHWZRSXFB_js.SyncCascadeError; }
7992
8842
  });
7993
8843
  Object.defineProperty(exports, "SyncConflictError", {
7994
8844
  enumerable: true,
7995
- get: function () { return chunkZBWTAKZO_js.SyncConflictError; }
8845
+ get: function () { return chunkHWZRSXFB_js.SyncConflictError; }
7996
8846
  });
7997
8847
  Object.defineProperty(exports, "SyncError", {
7998
8848
  enumerable: true,
7999
- get: function () { return chunkZBWTAKZO_js.SyncError; }
8849
+ get: function () { return chunkHWZRSXFB_js.SyncError; }
8000
8850
  });
8001
8851
  Object.defineProperty(exports, "SystemEntityImmutableError", {
8002
8852
  enumerable: true,
8003
- get: function () { return chunkZBWTAKZO_js.SystemEntityImmutableError; }
8853
+ get: function () { return chunkHWZRSXFB_js.SystemEntityImmutableError; }
8004
8854
  });
8005
8855
  Object.defineProperty(exports, "ValidationError", {
8006
8856
  enumerable: true,
8007
- get: function () { return chunkZBWTAKZO_js.ValidationError; }
8857
+ get: function () { return chunkHWZRSXFB_js.ValidationError; }
8008
8858
  });
8009
8859
  Object.defineProperty(exports, "isAttributeInUseError", {
8010
8860
  enumerable: true,
8011
- get: function () { return chunkZBWTAKZO_js.isAttributeInUseError; }
8861
+ get: function () { return chunkHWZRSXFB_js.isAttributeInUseError; }
8012
8862
  });
8013
8863
  Object.defineProperty(exports, "isNotFoundError", {
8014
8864
  enumerable: true,
8015
- get: function () { return chunkZBWTAKZO_js.isNotFoundError; }
8865
+ get: function () { return chunkHWZRSXFB_js.isNotFoundError; }
8016
8866
  });
8017
8867
  Object.defineProperty(exports, "isObjectReferencedError", {
8018
8868
  enumerable: true,
8019
- get: function () { return chunkZBWTAKZO_js.isObjectReferencedError; }
8869
+ get: function () { return chunkHWZRSXFB_js.isObjectReferencedError; }
8020
8870
  });
8021
8871
  Object.defineProperty(exports, "isProtectedResourceError", {
8022
8872
  enumerable: true,
8023
- get: function () { return chunkZBWTAKZO_js.isProtectedResourceError; }
8873
+ get: function () { return chunkHWZRSXFB_js.isProtectedResourceError; }
8024
8874
  });
8025
8875
  Object.defineProperty(exports, "isRecordReferencedError", {
8026
8876
  enumerable: true,
8027
- get: function () { return chunkZBWTAKZO_js.isRecordReferencedError; }
8877
+ get: function () { return chunkHWZRSXFB_js.isRecordReferencedError; }
8028
8878
  });
8029
8879
  Object.defineProperty(exports, "isSchemaError", {
8030
8880
  enumerable: true,
8031
- get: function () { return chunkZBWTAKZO_js.isSchemaError; }
8881
+ get: function () { return chunkHWZRSXFB_js.isSchemaError; }
8032
8882
  });
8033
8883
  Object.defineProperty(exports, "isValidationError", {
8034
8884
  enumerable: true,
8035
- get: function () { return chunkZBWTAKZO_js.isValidationError; }
8885
+ get: function () { return chunkHWZRSXFB_js.isValidationError; }
8036
8886
  });
8037
8887
  Object.defineProperty(exports, "DEFAULT_VALIDATION_MESSAGES", {
8038
8888
  enumerable: true,
@@ -8046,6 +8896,7 @@ exports.AGENT_UI_BATCH_MAX_BYTES = AGENT_UI_BATCH_MAX_BYTES;
8046
8896
  exports.AGENT_UI_BATCH_MAX_ITEMS = AGENT_UI_BATCH_MAX_ITEMS;
8047
8897
  exports.ALLOWED_PROPERTY_TYPES = ALLOWED_PROPERTY_TYPES;
8048
8898
  exports.ALL_ACTIONS = ALL_ACTIONS;
8899
+ exports.ALL_OPERATION_TYPES = ALL_OPERATION_TYPES;
8049
8900
  exports.ALL_SYSTEM_RESOURCES = ALL_SYSTEM_RESOURCES;
8050
8901
  exports.AUDIT_ACTIONS = AUDIT_ACTIONS;
8051
8902
  exports.AUDIT_RESOURCE_TYPES = AUDIT_RESOURCE_TYPES;
@@ -8054,6 +8905,7 @@ exports.AgentBuilder = AgentBuilder;
8054
8905
  exports.BEHAVIOR_PROPERTIES = BEHAVIOR_PROPERTIES;
8055
8906
  exports.BROWSER_PREVIEW_STATUSES = BROWSER_PREVIEW_STATUSES;
8056
8907
  exports.BYTE_UNIT_LABELS = BYTE_UNIT_LABELS;
8908
+ exports.CLAIMABLE_SESSION_STATUSES = CLAIMABLE_SESSION_STATUSES;
8057
8909
  exports.COMPUTED_FUNCTIONS = COMPUTED_FUNCTIONS;
8058
8910
  exports.COMPUTED_FUNCTION_METADATA = COMPUTED_FUNCTION_METADATA;
8059
8911
  exports.COMPUTED_FUNCTION_NAMES = COMPUTED_FUNCTION_NAMES;
@@ -8070,6 +8922,10 @@ exports.DEFAULT_ROLE_DESCRIPTIONS = DEFAULT_ROLE_DESCRIPTIONS;
8070
8922
  exports.DEFAULT_ROLE_LABELS = DEFAULT_ROLE_LABELS;
8071
8923
  exports.DEFAULT_ROLE_PERMISSIONS = DEFAULT_ROLE_PERMISSIONS;
8072
8924
  exports.DOCUMENT_SYSTEM_ATTRIBUTES = DOCUMENT_SYSTEM_ATTRIBUTES;
8925
+ exports.DRIVE_LIST_VIEW = DRIVE_LIST_VIEW;
8926
+ exports.DRIVE_OBJECT = DRIVE_OBJECT;
8927
+ exports.DRIVE_OBJECT_NAME = DRIVE_OBJECT_NAME;
8928
+ exports.DRIVE_VIEW = DRIVE_VIEW;
8073
8929
  exports.DetailViewBuilder = DetailViewBuilder;
8074
8930
  exports.DocumentsTabConfig = DocumentsTabConfig;
8075
8931
  exports.EMPTY_VALUE_PLACEHOLDER = EMPTY_VALUE_PLACEHOLDER;
@@ -8111,13 +8967,13 @@ exports.NOTIFICATION_TYPE_AGENT_SESSION_WAITING_HUMAN = NOTIFICATION_TYPE_AGENT_
8111
8967
  exports.NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED = NOTIFICATION_TYPE_AGENT_TASK_ASSIGNED;
8112
8968
  exports.NOTIFICATION_WORK_STATES = NOTIFICATION_WORK_STATES;
8113
8969
  exports.NoopGeocodingAdapter = NoopGeocodingAdapter;
8970
+ exports.OPERATION_REGISTRY = OPERATION_REGISTRY;
8114
8971
  exports.OPERATOR_SPECS = OPERATOR_SPECS;
8115
8972
  exports.ObjectBuilder = ObjectBuilder;
8116
8973
  exports.PRESENTATION_PROPERTIES = PRESENTATION_PROPERTIES;
8117
8974
  exports.QUALIFIED_SEPARATOR = QUALIFIED_SEPARATOR;
8118
8975
  exports.RECORD_CREATOR_ROOT_ACTOR_METADATA_KEY = RECORD_CREATOR_ROOT_ACTOR_METADATA_KEY;
8119
8976
  exports.RELATION_TARGET_ANY = RELATION_TARGET_ANY;
8120
- exports.RelationGroupBuilder = RelationGroupBuilder;
8121
8977
  exports.RichtextTabConfig = RichtextTabConfig;
8122
8978
  exports.SCHEMA_PLAN_LIMITS = SCHEMA_PLAN_LIMITS;
8123
8979
  exports.SESSION_TERMINAL_STATUSES = SESSION_TERMINAL_STATUSES;
@@ -8138,6 +8994,7 @@ exports.accessLevelToActions = accessLevelToActions;
8138
8994
  exports.actionsToAccessLevel = actionsToAccessLevel;
8139
8995
  exports.agent = agent;
8140
8996
  exports.agentDisplayName = agentDisplayName;
8997
+ exports.applyOperations = applyOperations;
8141
8998
  exports.applyPipes = applyPipes;
8142
8999
  exports.applyRelationProps = applyRelationProps;
8143
9000
  exports.assertAcyclicComputedDependencies = assertAcyclicComputedDependencies;
@@ -8146,7 +9003,6 @@ exports.buildAgentFallbackTitle = buildAgentFallbackTitle;
8146
9003
  exports.buildPermissionFlags = buildPermissionFlags;
8147
9004
  exports.buildPropertySchema = buildPropertySchema;
8148
9005
  exports.buildQualifiedAttribute = buildQualifiedAttribute;
8149
- exports.canonicalStringify = canonicalStringify;
8150
9006
  exports.checkbox = checkbox;
8151
9007
  exports.compileComputedFormula = compileComputedFormula;
8152
9008
  exports.compileRollupAttribute = compileRollupAttribute;
@@ -8159,10 +9015,13 @@ exports.currency = currency;
8159
9015
  exports.date = date;
8160
9016
  exports.dateInTimezone = dateInTimezone;
8161
9017
  exports.dateValueStart = dateValueStart;
9018
+ exports.defineOperation = defineOperation;
8162
9019
  exports.deriveInitials = deriveInitials;
9020
+ exports.describeOperations = describeOperations;
8163
9021
  exports.destructiveSchema = destructiveSchema;
8164
9022
  exports.detailView = detailView;
8165
9023
  exports.document = document;
9024
+ exports.ensureFieldIds = ensureFieldIds;
8166
9025
  exports.evaluateComputedAst = evaluateComputedAst;
8167
9026
  exports.evaluateComputedFormula = evaluateComputedFormula;
8168
9027
  exports.evaluateComputedFormulaWithResult = evaluateComputedFormulaWithResult;
@@ -8171,6 +9030,7 @@ exports.evaluateRecordFilterState = evaluateRecordFilterState;
8171
9030
  exports.extractAttributeNames = extractAttributeNames;
8172
9031
  exports.extractValueRefs = extractValueRefs;
8173
9032
  exports.flagRegistry = flagRegistry;
9033
+ exports.focusOf = focusOf;
8174
9034
  exports.form = form;
8175
9035
  exports.formRegistry = formRegistry;
8176
9036
  exports.formatAttributeValue = formatAttributeValue;
@@ -8196,6 +9056,7 @@ exports.isAgentUIMessageBatch = isAgentUIMessageBatch;
8196
9056
  exports.isAttributeSortable = isAttributeSortable2;
8197
9057
  exports.isBilateralRelation = isBilateralRelation;
8198
9058
  exports.isCheckboxEquality = isCheckboxEquality;
9059
+ exports.isClaimableSessionStatus = isClaimableSessionStatus;
8199
9060
  exports.isComputedFunctionName = isComputedFunctionName;
8200
9061
  exports.isDateRangeValue = isDateRangeValue;
8201
9062
  exports.isDefaultRole = isDefaultRole;
@@ -8218,7 +9079,6 @@ exports.isLiveEventPayloadForType = isLiveEventPayloadForType;
8218
9079
  exports.isLiveEventType = isLiveEventType;
8219
9080
  exports.isNotEmpty = isNotEmpty;
8220
9081
  exports.isPlainRecord = isPlainRecord2;
8221
- exports.isRelationGroup = isRelationGroup;
8222
9082
  exports.isStandardSchema = isStandardSchema;
8223
9083
  exports.isTerminalSessionStatus = isTerminalSessionStatus;
8224
9084
  exports.isTerminalState = isTerminalState;
@@ -8228,6 +9088,7 @@ exports.legacyStatusToSessionState = legacyStatusToSessionState;
8228
9088
  exports.listView = listView;
8229
9089
  exports.liveChannelKey = liveChannelKey;
8230
9090
  exports.location = location;
9091
+ exports.makeFieldId = makeFieldId;
8231
9092
  exports.matchesAccepts = matchesAccepts;
8232
9093
  exports.multiselect = multiselect;
8233
9094
  exports.nativeAgentUIPartIdMetadataKey = nativeAgentUIPartIdMetadataKey;
@@ -8238,6 +9099,7 @@ exports.object = object;
8238
9099
  exports.parseCountMode = parseCountMode;
8239
9100
  exports.parseLiveChannelKey = parseLiveChannelKey;
8240
9101
  exports.parseNativeAgentUIPartIdsMetadata = parseNativeAgentUIPartIdsMetadata;
9102
+ exports.parseOperation = parseOperation;
8241
9103
  exports.parseOptionalCountMode = parseOptionalCountMode;
8242
9104
  exports.parseQualifiedAttribute = parseQualifiedAttribute;
8243
9105
  exports.persistedDefaultViewTargetSchema = persistedDefaultViewTargetSchema;
@@ -8249,7 +9111,6 @@ exports.plannedObjectSchema = plannedObjectSchema;
8249
9111
  exports.proposedDefaultViewTargetSchema = proposedDefaultViewTargetSchema;
8250
9112
  exports.registry = registry;
8251
9113
  exports.relation = relation;
8252
- exports.relationGroup = relationGroup;
8253
9114
  exports.relationPropertyDefs = relationPropertyDefs;
8254
9115
  exports.renderLabelExpression = renderLabelExpression;
8255
9116
  exports.resetViewToDefault = resetViewToDefault;