nextjs-cms 0.9.38 → 0.9.39

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 (138) hide show
  1. package/dist/api/actions/pages.d.ts +27 -7
  2. package/dist/api/actions/pages.d.ts.map +1 -1
  3. package/dist/api/actions/pages.js +111 -27
  4. package/dist/api/trpc/root.d.ts +27 -6
  5. package/dist/api/trpc/root.d.ts.map +1 -1
  6. package/dist/api/trpc/routers/hasItemsSection.d.ts +23 -2
  7. package/dist/api/trpc/routers/hasItemsSection.d.ts.map +1 -1
  8. package/dist/api/trpc/routers/hasItemsSection.js +2 -1
  9. package/dist/api/trpc/routers/navigation.d.ts +3 -3
  10. package/dist/api/trpc/routers/simpleSection.d.ts +1 -1
  11. package/dist/api/trpc/server.d.ts +81 -18
  12. package/dist/api/trpc/server.d.ts.map +1 -1
  13. package/dist/core/config/config-loader.d.ts +2 -2
  14. package/dist/core/factories/FieldFactory.d.ts +1 -6
  15. package/dist/core/factories/FieldFactory.d.ts.map +1 -1
  16. package/dist/core/factories/FieldFactory.js +3 -68
  17. package/dist/core/fields/checkbox.d.ts +3 -3
  18. package/dist/core/fields/color.d.ts +3 -3
  19. package/dist/core/fields/date-range.d.ts +2 -2
  20. package/dist/core/fields/date.d.ts +3 -3
  21. package/dist/core/fields/document.d.ts +3 -3
  22. package/dist/core/fields/field.d.ts +25 -12
  23. package/dist/core/fields/field.d.ts.map +1 -1
  24. package/dist/core/fields/field.js +51 -23
  25. package/dist/core/fields/index.d.ts +1 -0
  26. package/dist/core/fields/index.d.ts.map +1 -1
  27. package/dist/core/fields/index.js +2 -0
  28. package/dist/core/fields/map.d.ts +3 -3
  29. package/dist/core/fields/number.d.ts +4 -4
  30. package/dist/core/fields/password.d.ts +3 -3
  31. package/dist/core/fields/photo.d.ts +9 -9
  32. package/dist/core/fields/richText.d.ts +12 -12
  33. package/dist/core/fields/select.d.ts +7 -7
  34. package/dist/core/fields/selectMultiple.d.ts +4 -4
  35. package/dist/core/fields/slug.d.ts +9 -9
  36. package/dist/core/fields/tags.d.ts +3 -3
  37. package/dist/core/fields/text.d.ts +2 -2
  38. package/dist/core/fields/textArea.d.ts +2 -2
  39. package/dist/core/fields/video.d.ts +3 -3
  40. package/dist/core/helpers/conditional-rules.d.ts +63 -0
  41. package/dist/core/helpers/conditional-rules.d.ts.map +1 -0
  42. package/dist/core/helpers/conditional-rules.js +113 -0
  43. package/dist/core/helpers/index.d.ts +1 -0
  44. package/dist/core/helpers/index.d.ts.map +1 -1
  45. package/dist/core/helpers/index.js +4 -0
  46. package/dist/core/sections/category.d.ts +50 -50
  47. package/dist/core/sections/hasItems.d.ts +74 -74
  48. package/dist/core/sections/section.d.ts +23 -23
  49. package/dist/core/sections/simple.d.ts +6 -6
  50. package/dist/core/submit/submit.d.ts +4 -1
  51. package/dist/core/submit/submit.d.ts.map +1 -1
  52. package/dist/core/submit/submit.js +9 -19
  53. package/dist/core/types/index.d.ts +30 -8
  54. package/dist/core/types/index.d.ts.map +1 -1
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +4 -0
  58. package/dist/translations/client.d.ts +4 -4
  59. package/dist/translations/server.d.ts +4 -4
  60. package/package.json +3 -3
  61. package/dist/api/axios/axiosInstance.d.ts +0 -2
  62. package/dist/api/axios/axiosInstance.d.ts.map +0 -1
  63. package/dist/api/axios/axiosInstance.js +0 -8
  64. package/dist/api/index.d.ts +0 -975
  65. package/dist/api/index.d.ts.map +0 -1
  66. package/dist/api/index.js +0 -13
  67. package/dist/api/lib/serverActions.d.ts +0 -374
  68. package/dist/api/lib/serverActions.d.ts.map +0 -1
  69. package/dist/api/lib/serverActions.js +0 -1445
  70. package/dist/api/root.d.ts +0 -1917
  71. package/dist/api/root.d.ts.map +0 -1
  72. package/dist/api/root.js +0 -115
  73. package/dist/api/routers/accountSettings.d.ts +0 -66
  74. package/dist/api/routers/accountSettings.d.ts.map +0 -1
  75. package/dist/api/routers/accountSettings.js +0 -202
  76. package/dist/api/routers/admins.d.ts +0 -112
  77. package/dist/api/routers/admins.d.ts.map +0 -1
  78. package/dist/api/routers/admins.js +0 -323
  79. package/dist/api/routers/auth.d.ts +0 -54
  80. package/dist/api/routers/auth.d.ts.map +0 -1
  81. package/dist/api/routers/auth.js +0 -50
  82. package/dist/api/routers/categorySection.d.ts +0 -105
  83. package/dist/api/routers/categorySection.d.ts.map +0 -1
  84. package/dist/api/routers/categorySection.js +0 -49
  85. package/dist/api/routers/config.d.ts +0 -48
  86. package/dist/api/routers/config.d.ts.map +0 -1
  87. package/dist/api/routers/config.js +0 -18
  88. package/dist/api/routers/cpanel.d.ts +0 -82
  89. package/dist/api/routers/cpanel.d.ts.map +0 -1
  90. package/dist/api/routers/cpanel.js +0 -216
  91. package/dist/api/routers/fields.d.ts +0 -35
  92. package/dist/api/routers/fields.d.ts.map +0 -1
  93. package/dist/api/routers/fields.js +0 -81
  94. package/dist/api/routers/files.d.ts +0 -34
  95. package/dist/api/routers/files.d.ts.map +0 -1
  96. package/dist/api/routers/files.js +0 -14
  97. package/dist/api/routers/gallery.d.ts +0 -34
  98. package/dist/api/routers/gallery.d.ts.map +0 -1
  99. package/dist/api/routers/gallery.js +0 -64
  100. package/dist/api/routers/hasItemsSection.d.ts +0 -219
  101. package/dist/api/routers/hasItemsSection.d.ts.map +0 -1
  102. package/dist/api/routers/hasItemsSection.js +0 -86
  103. package/dist/api/routers/logs.d.ts +0 -59
  104. package/dist/api/routers/logs.d.ts.map +0 -1
  105. package/dist/api/routers/logs.js +0 -76
  106. package/dist/api/routers/navigation.d.ts +0 -50
  107. package/dist/api/routers/navigation.d.ts.map +0 -1
  108. package/dist/api/routers/navigation.js +0 -11
  109. package/dist/api/routers/simpleSection.d.ts +0 -105
  110. package/dist/api/routers/simpleSection.d.ts.map +0 -1
  111. package/dist/api/routers/simpleSection.js +0 -54
  112. package/dist/api/trpc.d.ts +0 -111
  113. package/dist/api/trpc.d.ts.map +0 -1
  114. package/dist/api/trpc.js +0 -99
  115. package/dist/auth/axios/axiosInstance.d.ts +0 -2
  116. package/dist/auth/axios/axiosInstance.d.ts.map +0 -1
  117. package/dist/auth/axios/axiosInstance.js +0 -8
  118. package/dist/auth/hooks/useAxiosPrivate.d.ts +0 -5
  119. package/dist/auth/hooks/useAxiosPrivate.d.ts.map +0 -1
  120. package/dist/auth/hooks/useAxiosPrivate.js +0 -74
  121. package/dist/auth/trpc.d.ts +0 -6
  122. package/dist/auth/trpc.d.ts.map +0 -1
  123. package/dist/auth/trpc.js +0 -82
  124. package/dist/core/fields/dateRange.d.ts +0 -115
  125. package/dist/core/fields/dateRange.d.ts.map +0 -1
  126. package/dist/core/fields/dateRange.js +0 -149
  127. package/dist/translations/locale-cookie.d.ts +0 -24
  128. package/dist/translations/locale-cookie.d.ts.map +0 -1
  129. package/dist/translations/locale-cookie.js +0 -44
  130. package/dist/translations/locale-utils.d.ts +0 -8
  131. package/dist/translations/locale-utils.d.ts.map +0 -1
  132. package/dist/translations/locale-utils.js +0 -11
  133. package/dist/translations/localization.d.ts +0 -40
  134. package/dist/translations/localization.d.ts.map +0 -1
  135. package/dist/translations/localization.js +0 -48
  136. package/dist/validators/dateRange.d.ts +0 -11
  137. package/dist/validators/dateRange.d.ts.map +0 -1
  138. package/dist/validators/dateRange.js +0 -16
@@ -104,10 +104,10 @@ declare const configSchema: z.ZodObject<{
104
104
  * @hint 'jpg' is an alias for 'jpeg'
105
105
  */
106
106
  fileType: z.ZodOptional<z.ZodArray<z.ZodEnum<{
107
- jpeg: "jpeg";
107
+ webp: "webp";
108
108
  jpg: "jpg";
109
+ jpeg: "jpeg";
109
110
  png: "png";
110
- webp: "webp";
111
111
  }>>>;
112
112
  /**
113
113
  * Remove the extension from the file name
@@ -198,7 +198,7 @@ export declare class PhotoField extends FileField<'photo', Config> {
198
198
  label: string;
199
199
  required: boolean;
200
200
  localized?: boolean;
201
- conditionalFields: import("../types/index.js").ConditionalField[];
201
+ conditionalGroup?: import("../types/index.js").ConditionalGroupClient;
202
202
  readonly: boolean;
203
203
  defaultValue: any;
204
204
  value: any;
@@ -299,10 +299,10 @@ declare const optionsSchema: z.ZodObject<{
299
299
  * @hint 'jpg' is an alias for 'jpeg'
300
300
  */
301
301
  fileType: z.ZodOptional<z.ZodArray<z.ZodEnum<{
302
- jpeg: "jpeg";
302
+ webp: "webp";
303
303
  jpg: "jpg";
304
+ jpeg: "jpeg";
304
305
  png: "png";
305
- webp: "webp";
306
306
  }>>>;
307
307
  /**
308
308
  * Remove the extension from the file name
@@ -314,7 +314,7 @@ declare const optionsSchema: z.ZodObject<{
314
314
  required: z.ZodOptional<z.ZodBoolean>;
315
315
  defaultValue: z.ZodOptional<z.ZodAny>;
316
316
  order: z.ZodOptional<z.ZodNumber>;
317
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
317
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
318
318
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
319
319
  localized: z.ZodOptional<z.ZodBoolean>;
320
320
  }, z.core.$strict>;
@@ -395,10 +395,10 @@ declare const photoFieldConfigSchema: z.ZodObject<{
395
395
  * @hint 'jpg' is an alias for 'jpeg'
396
396
  */
397
397
  fileType: z.ZodOptional<z.ZodArray<z.ZodEnum<{
398
- jpeg: "jpeg";
398
+ webp: "webp";
399
399
  jpg: "jpg";
400
+ jpeg: "jpeg";
400
401
  png: "png";
401
- webp: "webp";
402
402
  }>>>;
403
403
  /**
404
404
  * Remove the extension from the file name
@@ -410,7 +410,7 @@ declare const photoFieldConfigSchema: z.ZodObject<{
410
410
  required: z.ZodOptional<z.ZodBoolean>;
411
411
  defaultValue: z.ZodOptional<z.ZodAny>;
412
412
  order: z.ZodOptional<z.ZodNumber>;
413
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
413
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
414
414
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
415
415
  localized: z.ZodOptional<z.ZodBoolean>;
416
416
  }, z.core.$strict>;
@@ -31,10 +31,10 @@ declare const allowImageUploadsSchema: z.ZodObject<{
31
31
  */
32
32
  omitExtension: z.ZodOptional<z.ZodBoolean>;
33
33
  format: z.ZodOptional<z.ZodEnum<{
34
- jpeg: "jpeg";
34
+ webp: "webp";
35
35
  jpg: "jpg";
36
+ jpeg: "jpeg";
36
37
  png: "png";
37
- webp: "webp";
38
38
  }>>;
39
39
  }, z.core.$strict>;
40
40
  declare const configSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -73,10 +73,10 @@ declare const configSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
73
73
  */
74
74
  omitExtension: z.ZodOptional<z.ZodBoolean>;
75
75
  format: z.ZodOptional<z.ZodEnum<{
76
- jpeg: "jpeg";
76
+ webp: "webp";
77
77
  jpg: "jpg";
78
+ jpeg: "jpeg";
78
79
  png: "png";
79
- webp: "webp";
80
80
  }>>;
81
81
  }, z.core.$strict>>;
82
82
  }, z.core.$strict>, z.ZodObject<{
@@ -171,10 +171,10 @@ declare const optionsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
171
171
  */
172
172
  omitExtension: z.ZodOptional<z.ZodBoolean>;
173
173
  format: z.ZodOptional<z.ZodEnum<{
174
- jpeg: "jpeg";
174
+ webp: "webp";
175
175
  jpg: "jpg";
176
+ jpeg: "jpeg";
176
177
  png: "png";
177
- webp: "webp";
178
178
  }>>;
179
179
  }, z.core.$strict>>;
180
180
  name: z.ZodString;
@@ -182,7 +182,7 @@ declare const optionsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
182
182
  required: z.ZodOptional<z.ZodBoolean>;
183
183
  defaultValue: z.ZodOptional<z.ZodAny>;
184
184
  order: z.ZodOptional<z.ZodNumber>;
185
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
185
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
186
186
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
187
187
  localized: z.ZodOptional<z.ZodBoolean>;
188
188
  }, z.core.$strict>, z.ZodObject<{
@@ -197,7 +197,7 @@ declare const optionsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
197
197
  required: z.ZodOptional<z.ZodBoolean>;
198
198
  defaultValue: z.ZodOptional<z.ZodAny>;
199
199
  order: z.ZodOptional<z.ZodNumber>;
200
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
200
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
201
201
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
202
202
  localized: z.ZodOptional<z.ZodBoolean>;
203
203
  }, z.core.$strict>], "allowMedia">;
@@ -237,10 +237,10 @@ declare const richTextFieldConfigSchema: z.ZodIntersection<z.ZodDiscriminatedUni
237
237
  */
238
238
  omitExtension: z.ZodOptional<z.ZodBoolean>;
239
239
  format: z.ZodOptional<z.ZodEnum<{
240
- jpeg: "jpeg";
240
+ webp: "webp";
241
241
  jpg: "jpg";
242
+ jpeg: "jpeg";
242
243
  png: "png";
243
- webp: "webp";
244
244
  }>>;
245
245
  }, z.core.$strict>>;
246
246
  name: z.ZodString;
@@ -248,7 +248,7 @@ declare const richTextFieldConfigSchema: z.ZodIntersection<z.ZodDiscriminatedUni
248
248
  required: z.ZodOptional<z.ZodBoolean>;
249
249
  defaultValue: z.ZodOptional<z.ZodAny>;
250
250
  order: z.ZodOptional<z.ZodNumber>;
251
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
251
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
252
252
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
253
253
  localized: z.ZodOptional<z.ZodBoolean>;
254
254
  }, z.core.$strict>, z.ZodObject<{
@@ -263,7 +263,7 @@ declare const richTextFieldConfigSchema: z.ZodIntersection<z.ZodDiscriminatedUni
263
263
  required: z.ZodOptional<z.ZodBoolean>;
264
264
  defaultValue: z.ZodOptional<z.ZodAny>;
265
265
  order: z.ZodOptional<z.ZodNumber>;
266
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
266
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
267
267
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
268
268
  localized: z.ZodOptional<z.ZodBoolean>;
269
269
  }, z.core.$strict>], "allowMedia">, z.ZodObject<{
@@ -155,7 +155,7 @@ export declare class SelectField extends Field<'select', SelectFieldConfig> {
155
155
  label: string;
156
156
  required: boolean;
157
157
  localized?: boolean;
158
- conditionalFields: import("../types").ConditionalField[];
158
+ conditionalGroup?: import("../types").ConditionalGroupClient;
159
159
  readonly: boolean;
160
160
  defaultValue: any;
161
161
  };
@@ -227,7 +227,7 @@ export declare const selectFieldOptionsSchema: z.ZodUnion<readonly [z.ZodObject<
227
227
  required: z.ZodOptional<z.ZodBoolean>;
228
228
  defaultValue: z.ZodOptional<z.ZodAny>;
229
229
  order: z.ZodOptional<z.ZodNumber>;
230
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>>>;
230
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>], null>, z.ZodCustom<import("../types").ConditionalRuleGroup, import("../types").ConditionalRuleGroup>]>>;
231
231
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
232
232
  localized: z.ZodOptional<z.ZodBoolean>;
233
233
  }, z.core.$strict>, z.ZodObject<{
@@ -254,7 +254,7 @@ export declare const selectFieldOptionsSchema: z.ZodUnion<readonly [z.ZodObject<
254
254
  required: z.ZodOptional<z.ZodBoolean>;
255
255
  defaultValue: z.ZodOptional<z.ZodAny>;
256
256
  order: z.ZodOptional<z.ZodNumber>;
257
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>>>;
257
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>], null>, z.ZodCustom<import("../types").ConditionalRuleGroup, import("../types").ConditionalRuleGroup>]>>;
258
258
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
259
259
  localized: z.ZodOptional<z.ZodBoolean>;
260
260
  }, z.core.$strict>, z.ZodObject<{
@@ -281,7 +281,7 @@ export declare const selectFieldOptionsSchema: z.ZodUnion<readonly [z.ZodObject<
281
281
  required: z.ZodOptional<z.ZodBoolean>;
282
282
  defaultValue: z.ZodOptional<z.ZodAny>;
283
283
  order: z.ZodOptional<z.ZodNumber>;
284
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>>>;
284
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>], null>, z.ZodCustom<import("../types").ConditionalRuleGroup, import("../types").ConditionalRuleGroup>]>>;
285
285
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
286
286
  localized: z.ZodOptional<z.ZodBoolean>;
287
287
  }, z.core.$strict>]>;
@@ -319,7 +319,7 @@ declare const selectFieldConfigSchema: z.ZodIntersection<z.ZodUnion<readonly [z.
319
319
  required: z.ZodOptional<z.ZodBoolean>;
320
320
  defaultValue: z.ZodOptional<z.ZodAny>;
321
321
  order: z.ZodOptional<z.ZodNumber>;
322
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>>>;
322
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>], null>, z.ZodCustom<import("../types").ConditionalRuleGroup, import("../types").ConditionalRuleGroup>]>>;
323
323
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
324
324
  localized: z.ZodOptional<z.ZodBoolean>;
325
325
  }, z.core.$strict>, z.ZodObject<{
@@ -346,7 +346,7 @@ declare const selectFieldConfigSchema: z.ZodIntersection<z.ZodUnion<readonly [z.
346
346
  required: z.ZodOptional<z.ZodBoolean>;
347
347
  defaultValue: z.ZodOptional<z.ZodAny>;
348
348
  order: z.ZodOptional<z.ZodNumber>;
349
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>>>;
349
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>], null>, z.ZodCustom<import("../types").ConditionalRuleGroup, import("../types").ConditionalRuleGroup>]>>;
350
350
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
351
351
  localized: z.ZodOptional<z.ZodBoolean>;
352
352
  }, z.core.$strict>, z.ZodObject<{
@@ -373,7 +373,7 @@ declare const selectFieldConfigSchema: z.ZodIntersection<z.ZodUnion<readonly [z.
373
373
  required: z.ZodOptional<z.ZodBoolean>;
374
374
  defaultValue: z.ZodOptional<z.ZodAny>;
375
375
  order: z.ZodOptional<z.ZodNumber>;
376
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>>>;
376
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types").ConditionalRule, import("../types").ConditionalRule>], null>, z.ZodCustom<import("../types").ConditionalRuleGroup, import("../types").ConditionalRuleGroup>]>>;
377
377
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
378
378
  localized: z.ZodOptional<z.ZodBoolean>;
379
379
  }, z.core.$strict>]>, z.ZodObject<{
@@ -119,7 +119,7 @@ export declare class SelectMultipleField extends Field<'select_multiple', Select
119
119
  label: string;
120
120
  required: boolean;
121
121
  localized?: boolean;
122
- conditionalFields: import("../types/index.js").ConditionalField[];
122
+ conditionalGroup?: import("../types/index.js").ConditionalGroupClient;
123
123
  readonly: boolean;
124
124
  defaultValue: any;
125
125
  };
@@ -185,7 +185,7 @@ declare const selectMultipleFieldHelperConfigSchema: z.ZodIntersection<z.ZodUnio
185
185
  required: z.ZodOptional<z.ZodBoolean>;
186
186
  defaultValue: z.ZodOptional<z.ZodAny>;
187
187
  order: z.ZodOptional<z.ZodNumber>;
188
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
188
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
189
189
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
190
190
  localized: z.ZodOptional<z.ZodBoolean>;
191
191
  }, z.core.$strict>, z.ZodObject<{
@@ -216,7 +216,7 @@ declare const selectMultipleFieldHelperConfigSchema: z.ZodIntersection<z.ZodUnio
216
216
  required: z.ZodOptional<z.ZodBoolean>;
217
217
  defaultValue: z.ZodOptional<z.ZodAny>;
218
218
  order: z.ZodOptional<z.ZodNumber>;
219
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
219
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
220
220
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
221
221
  localized: z.ZodOptional<z.ZodBoolean>;
222
222
  }, z.core.$strict>, z.ZodObject<{
@@ -237,7 +237,7 @@ declare const selectMultipleFieldHelperConfigSchema: z.ZodIntersection<z.ZodUnio
237
237
  required: z.ZodOptional<z.ZodBoolean>;
238
238
  defaultValue: z.ZodOptional<z.ZodAny>;
239
239
  order: z.ZodOptional<z.ZodNumber>;
240
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
240
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
241
241
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
242
242
  localized: z.ZodOptional<z.ZodBoolean>;
243
243
  }, z.core.$strict>]>, z.ZodObject<{
@@ -39,7 +39,7 @@ declare const slugFieldConfigSchema: z.ZodObject<{
39
39
  label?: string | Record<string, string> | undefined;
40
40
  required?: boolean | undefined;
41
41
  order?: number | undefined;
42
- conditionalRules?: import("../types/index.js").ConditionalRule[] | undefined;
42
+ conditionalRules?: import("../types/index.js").ConditionalRuleGroup | [import("../types/index.js").ConditionalRule] | undefined;
43
43
  adminGenerated?: boolean | "readonly" | undefined;
44
44
  localized?: boolean | undefined;
45
45
  }, {
@@ -55,7 +55,7 @@ declare const slugFieldConfigSchema: z.ZodObject<{
55
55
  label?: string | Record<string, string> | undefined;
56
56
  required?: boolean | undefined;
57
57
  order?: number | undefined;
58
- conditionalRules?: import("../types/index.js").ConditionalRule[] | undefined;
58
+ conditionalRules?: import("../types/index.js").ConditionalRuleGroup | [import("../types/index.js").ConditionalRule] | undefined;
59
59
  adminGenerated?: boolean | "readonly" | undefined;
60
60
  localized?: boolean | undefined;
61
61
  }>;
@@ -111,7 +111,7 @@ export declare class SlugField extends Field<'slug', Config> {
111
111
  label: string;
112
112
  required: boolean;
113
113
  localized?: boolean;
114
- conditionalFields: import("../types/index.js").ConditionalField[];
114
+ conditionalGroup?: import("../types/index.js").ConditionalGroupClient;
115
115
  readonly: boolean;
116
116
  defaultValue: any;
117
117
  value: any;
@@ -157,7 +157,7 @@ declare const optionsSchema: z.ZodObject<{
157
157
  label?: string | Record<string, string> | undefined;
158
158
  required?: boolean | undefined;
159
159
  order?: number | undefined;
160
- conditionalRules?: import("../types/index.js").ConditionalRule[] | undefined;
160
+ conditionalRules?: import("../types/index.js").ConditionalRuleGroup | [import("../types/index.js").ConditionalRule] | undefined;
161
161
  adminGenerated?: boolean | "readonly" | undefined;
162
162
  localized?: boolean | undefined;
163
163
  }, {
@@ -173,7 +173,7 @@ declare const optionsSchema: z.ZodObject<{
173
173
  label?: string | Record<string, string> | undefined;
174
174
  required?: boolean | undefined;
175
175
  order?: number | undefined;
176
- conditionalRules?: import("../types/index.js").ConditionalRule[] | undefined;
176
+ conditionalRules?: import("../types/index.js").ConditionalRuleGroup | [import("../types/index.js").ConditionalRule] | undefined;
177
177
  adminGenerated?: boolean | "readonly" | undefined;
178
178
  localized?: boolean | undefined;
179
179
  }>;
@@ -192,7 +192,7 @@ declare const optionsSchema: z.ZodObject<{
192
192
  label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
193
193
  required: z.ZodOptional<z.ZodBoolean>;
194
194
  order: z.ZodOptional<z.ZodNumber>;
195
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
195
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
196
196
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
197
197
  localized: z.ZodOptional<z.ZodBoolean>;
198
198
  }, z.core.$strict>;
@@ -225,7 +225,7 @@ declare const configSchema: z.ZodObject<{
225
225
  label?: string | Record<string, string> | undefined;
226
226
  required?: boolean | undefined;
227
227
  order?: number | undefined;
228
- conditionalRules?: import("../types/index.js").ConditionalRule[] | undefined;
228
+ conditionalRules?: import("../types/index.js").ConditionalRuleGroup | [import("../types/index.js").ConditionalRule] | undefined;
229
229
  adminGenerated?: boolean | "readonly" | undefined;
230
230
  localized?: boolean | undefined;
231
231
  }, {
@@ -241,7 +241,7 @@ declare const configSchema: z.ZodObject<{
241
241
  label?: string | Record<string, string> | undefined;
242
242
  required?: boolean | undefined;
243
243
  order?: number | undefined;
244
- conditionalRules?: import("../types/index.js").ConditionalRule[] | undefined;
244
+ conditionalRules?: import("../types/index.js").ConditionalRuleGroup | [import("../types/index.js").ConditionalRule] | undefined;
245
245
  adminGenerated?: boolean | "readonly" | undefined;
246
246
  localized?: boolean | undefined;
247
247
  }>;
@@ -260,7 +260,7 @@ declare const configSchema: z.ZodObject<{
260
260
  label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
261
261
  required: z.ZodOptional<z.ZodBoolean>;
262
262
  order: z.ZodOptional<z.ZodNumber>;
263
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
263
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
264
264
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
265
265
  localized: z.ZodOptional<z.ZodBoolean>;
266
266
  }, z.core.$strict>;
@@ -64,7 +64,7 @@ export declare class TagsField extends Field<'tags', Config> {
64
64
  label: string;
65
65
  required: boolean;
66
66
  localized?: boolean;
67
- conditionalFields: import("../types/index.js").ConditionalField[];
67
+ conditionalGroup?: import("../types/index.js").ConditionalGroupClient;
68
68
  readonly: boolean;
69
69
  defaultValue: any;
70
70
  value: any;
@@ -111,7 +111,7 @@ declare const baseOptionsSchema: z.ZodObject<{
111
111
  required: z.ZodOptional<z.ZodBoolean>;
112
112
  defaultValue: z.ZodOptional<z.ZodAny>;
113
113
  order: z.ZodOptional<z.ZodNumber>;
114
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
114
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
115
115
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
116
116
  localized: z.ZodOptional<z.ZodBoolean>;
117
117
  }, z.core.$strict>;
@@ -161,7 +161,7 @@ declare const tagsFieldConfigSchema: z.ZodObject<{
161
161
  required: z.ZodOptional<z.ZodBoolean>;
162
162
  defaultValue: z.ZodOptional<z.ZodAny>;
163
163
  order: z.ZodOptional<z.ZodNumber>;
164
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
164
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
165
165
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
166
166
  localized: z.ZodOptional<z.ZodBoolean>;
167
167
  }, z.core.$strict>;
@@ -88,7 +88,7 @@ declare const optionsSchema: z.ZodObject<{
88
88
  label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
89
89
  required: z.ZodOptional<z.ZodBoolean>;
90
90
  order: z.ZodOptional<z.ZodNumber>;
91
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
91
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
92
92
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
93
93
  localized: z.ZodOptional<z.ZodBoolean>;
94
94
  }, z.core.$strict>;
@@ -121,7 +121,7 @@ declare const textFieldConfigSchema: z.ZodObject<{
121
121
  label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
122
122
  required: z.ZodOptional<z.ZodBoolean>;
123
123
  order: z.ZodOptional<z.ZodNumber>;
124
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
124
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
125
125
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
126
126
  localized: z.ZodOptional<z.ZodBoolean>;
127
127
  }, z.core.$strict>;
@@ -74,7 +74,7 @@ declare const optionsSchema: z.ZodObject<{
74
74
  required: z.ZodOptional<z.ZodBoolean>;
75
75
  defaultValue: z.ZodOptional<z.ZodAny>;
76
76
  order: z.ZodOptional<z.ZodNumber>;
77
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
77
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
78
78
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
79
79
  localized: z.ZodOptional<z.ZodBoolean>;
80
80
  }, z.core.$strict>;
@@ -102,7 +102,7 @@ declare const textAreaFieldConfigSchema: z.ZodObject<{
102
102
  required: z.ZodOptional<z.ZodBoolean>;
103
103
  defaultValue: z.ZodOptional<z.ZodAny>;
104
104
  order: z.ZodOptional<z.ZodNumber>;
105
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
105
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
106
106
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
107
107
  localized: z.ZodOptional<z.ZodBoolean>;
108
108
  }, z.core.$strict>;
@@ -54,7 +54,7 @@ export declare class VideoField extends FileField<'video', Config> {
54
54
  label: string;
55
55
  required: boolean;
56
56
  localized?: boolean;
57
- conditionalFields: import("../types/index.js").ConditionalField[];
57
+ conditionalGroup?: import("../types/index.js").ConditionalGroupClient;
58
58
  readonly: boolean;
59
59
  defaultValue: any;
60
60
  value: any;
@@ -110,7 +110,7 @@ declare const optionsSchema: z.ZodObject<{
110
110
  required: z.ZodOptional<z.ZodBoolean>;
111
111
  defaultValue: z.ZodOptional<z.ZodAny>;
112
112
  order: z.ZodOptional<z.ZodNumber>;
113
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
113
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
114
114
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
115
115
  localized: z.ZodOptional<z.ZodBoolean>;
116
116
  }, z.core.$strict>;
@@ -141,7 +141,7 @@ declare const videoFieldConfigSchema: z.ZodObject<{
141
141
  required: z.ZodOptional<z.ZodBoolean>;
142
142
  defaultValue: z.ZodOptional<z.ZodAny>;
143
143
  order: z.ZodOptional<z.ZodNumber>;
144
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
144
+ conditionalRules: z.ZodOptional<z.ZodUnion<readonly [z.ZodTuple<[z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>], null>, z.ZodCustom<import("../types/index.js").ConditionalRuleGroup, import("../types/index.js").ConditionalRuleGroup>]>>;
145
145
  adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
146
146
  localized: z.ZodOptional<z.ZodBoolean>;
147
147
  }, z.core.$strict>;
@@ -0,0 +1,63 @@
1
+ import type { ConditionalRule, ConditionalRuleGroup, ConditionalRulesConfig, RuleMatch } from '../types/index.js';
2
+ /**
3
+ * The shape of a conditional rule needed to evaluate it. Both `ConditionalRule` (server, holds the
4
+ * controlling `FieldConfig`) and `ConditionalRuleClient` (client, references the field by name)
5
+ * satisfy this.
6
+ */
7
+ type EvaluableRule = {
8
+ condition: ConditionalRule['condition'];
9
+ value: string | number | boolean | null;
10
+ };
11
+ /**
12
+ * Evaluate a single conditional rule against the current value of its controlling field.
13
+ *
14
+ * This is the one place conditions are interpreted. It is shared by the admin UI (deciding whether to
15
+ * render a conditional field) and by submit (deciding whether to persist it), so a field can never be
16
+ * visible in the form but silently dropped on save.
17
+ *
18
+ * Notes on semantics:
19
+ * - `equals` / `notEquals` / `contains` / `notContains` compare string representations; `contains` is
20
+ * case sensitive.
21
+ * - The ordering conditions require both sides to be numeric, and are false otherwise.
22
+ * - When the controlling field has no value, negative conditions (`notEquals`, `notContains`) are met
23
+ * and every other condition is not.
24
+ *
25
+ * @param rule The rule to evaluate: the condition and the value it expects.
26
+ * @param actualValue The current value of the controlling field.
27
+ */
28
+ export declare function evaluateConditionalRule(rule: EvaluableRule, actualValue: unknown): boolean;
29
+ /**
30
+ * Combine conditional rules with AND semantics — the dependent field is active only when every rule
31
+ * passes. Use in a field's `conditionalRules` when it declares two or more rules.
32
+ */
33
+ export declare function and(...rules: ConditionalRule[]): ConditionalRuleGroup;
34
+ /**
35
+ * Combine conditional rules with OR semantics — the dependent field is active when at least one rule
36
+ * passes. Use in a field's `conditionalRules` when it declares two or more rules.
37
+ */
38
+ export declare function or(...rules: ConditionalRule[]): ConditionalRuleGroup;
39
+ /**
40
+ * Normalize a field's `conditionalRules` config into a single {@link ConditionalRuleGroup}.
41
+ *
42
+ * A single-rule array (the no-wrapper form) becomes an `all` group; an `and()` / `or()` group passes
43
+ * through unchanged. Returns `undefined` when there are no rules, which callers treat as "not
44
+ * conditional". Accepts a bare multi-rule array at runtime for resilience, though the config type
45
+ * forbids it so authors are pushed to `and()` / `or()`.
46
+ */
47
+ export declare function normalizeConditionalRules(input: ConditionalRulesConfig | ConditionalRule[] | undefined): ConditionalRuleGroup | undefined;
48
+ /**
49
+ * Evaluate a whole rule group against the current form state.
50
+ *
51
+ * Value resolution is delegated to `resolveValue` so this works on both layers: the server passes a
52
+ * resolver backed by submitted `FormData`, the client one backed by the live field values. Each rule
53
+ * is resolved against its own controlling field. An empty group never matches.
54
+ *
55
+ * @param group The group to evaluate, with its `all` / `any` combining operator.
56
+ * @param resolveValue Returns the current value of the field a given rule controls on.
57
+ */
58
+ export declare function evaluateConditionalRuleGroup<TRule extends EvaluableRule>(group: {
59
+ match: RuleMatch;
60
+ rules: TRule[];
61
+ }, resolveValue: (rule: TRule) => unknown): boolean;
62
+ export {};
63
+ //# sourceMappingURL=conditional-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditional-rules.d.ts","sourceRoot":"","sources":["../../../src/core/helpers/conditional-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEjH;;;;GAIG;AACH,KAAK,aAAa,GAAG;IACjB,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC,CAAA;IACvC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;CAC1C,CAAA;AA0BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAwB1F;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAErE;AAED;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,oBAAoB,CAEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,sBAAsB,GAAG,eAAe,EAAE,GAAG,SAAS,GAC9D,oBAAoB,GAAG,SAAS,CAOlC;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,SAAS,aAAa,EACpE,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,KAAK,EAAE,CAAA;CAAE,EAC3C,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,GACvC,OAAO,CAIT"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Normalize a value to the string form used for comparison.
3
+ *
4
+ * Form values reach us as strings (`FormData`) on the server and as strings, numbers or booleans on
5
+ * the client, so every condition compares string representations. An absent value (`undefined`, or
6
+ * the `null` returned by `FormData.get()` for a missing key) normalizes to `undefined` so it is never
7
+ * confused with the literal string `'undefined'`.
8
+ */
9
+ function normalize(value) {
10
+ if (value === undefined || value === null)
11
+ return undefined;
12
+ return String(value);
13
+ }
14
+ /**
15
+ * Coerce a normalized value to a number for the ordering conditions.
16
+ *
17
+ * Returns `NaN` for absent, blank and non-numeric values so that every ordering comparison against
18
+ * them is false — an ordering condition is only met when both sides are real numbers.
19
+ */
20
+ function toComparableNumber(value) {
21
+ if (value === undefined || value.trim() === '')
22
+ return NaN;
23
+ return Number(value);
24
+ }
25
+ /**
26
+ * Evaluate a single conditional rule against the current value of its controlling field.
27
+ *
28
+ * This is the one place conditions are interpreted. It is shared by the admin UI (deciding whether to
29
+ * render a conditional field) and by submit (deciding whether to persist it), so a field can never be
30
+ * visible in the form but silently dropped on save.
31
+ *
32
+ * Notes on semantics:
33
+ * - `equals` / `notEquals` / `contains` / `notContains` compare string representations; `contains` is
34
+ * case sensitive.
35
+ * - The ordering conditions require both sides to be numeric, and are false otherwise.
36
+ * - When the controlling field has no value, negative conditions (`notEquals`, `notContains`) are met
37
+ * and every other condition is not.
38
+ *
39
+ * @param rule The rule to evaluate: the condition and the value it expects.
40
+ * @param actualValue The current value of the controlling field.
41
+ */
42
+ export function evaluateConditionalRule(rule, actualValue) {
43
+ const actual = normalize(actualValue);
44
+ const expected = normalize(rule.value);
45
+ switch (rule.condition) {
46
+ case 'equals':
47
+ return actual === expected;
48
+ case 'notEquals':
49
+ return actual !== expected;
50
+ case 'contains':
51
+ return actual !== undefined && expected !== undefined && actual.includes(expected);
52
+ case 'notContains':
53
+ return !(actual !== undefined && expected !== undefined && actual.includes(expected));
54
+ case 'greaterThan':
55
+ return toComparableNumber(actual) > toComparableNumber(expected);
56
+ case 'lessThan':
57
+ return toComparableNumber(actual) < toComparableNumber(expected);
58
+ case 'greaterThanOrEquals':
59
+ return toComparableNumber(actual) >= toComparableNumber(expected);
60
+ case 'lessThanOrEquals':
61
+ return toComparableNumber(actual) <= toComparableNumber(expected);
62
+ default:
63
+ return false;
64
+ }
65
+ }
66
+ /**
67
+ * Combine conditional rules with AND semantics — the dependent field is active only when every rule
68
+ * passes. Use in a field's `conditionalRules` when it declares two or more rules.
69
+ */
70
+ export function and(...rules) {
71
+ return { match: 'all', rules };
72
+ }
73
+ /**
74
+ * Combine conditional rules with OR semantics — the dependent field is active when at least one rule
75
+ * passes. Use in a field's `conditionalRules` when it declares two or more rules.
76
+ */
77
+ export function or(...rules) {
78
+ return { match: 'any', rules };
79
+ }
80
+ /**
81
+ * Normalize a field's `conditionalRules` config into a single {@link ConditionalRuleGroup}.
82
+ *
83
+ * A single-rule array (the no-wrapper form) becomes an `all` group; an `and()` / `or()` group passes
84
+ * through unchanged. Returns `undefined` when there are no rules, which callers treat as "not
85
+ * conditional". Accepts a bare multi-rule array at runtime for resilience, though the config type
86
+ * forbids it so authors are pushed to `and()` / `or()`.
87
+ */
88
+ export function normalizeConditionalRules(input) {
89
+ if (!input)
90
+ return undefined;
91
+ if (Array.isArray(input)) {
92
+ if (input.length === 0)
93
+ return undefined;
94
+ return { match: 'all', rules: input };
95
+ }
96
+ return input;
97
+ }
98
+ /**
99
+ * Evaluate a whole rule group against the current form state.
100
+ *
101
+ * Value resolution is delegated to `resolveValue` so this works on both layers: the server passes a
102
+ * resolver backed by submitted `FormData`, the client one backed by the live field values. Each rule
103
+ * is resolved against its own controlling field. An empty group never matches.
104
+ *
105
+ * @param group The group to evaluate, with its `all` / `any` combining operator.
106
+ * @param resolveValue Returns the current value of the field a given rule controls on.
107
+ */
108
+ export function evaluateConditionalRuleGroup(group, resolveValue) {
109
+ if (!group.rules || group.rules.length === 0)
110
+ return false;
111
+ const results = group.rules.map((rule) => evaluateConditionalRule(rule, resolveValue(rule)));
112
+ return group.match === 'any' ? results.some((result) => result) : results.every((result) => result);
113
+ }
@@ -2,4 +2,5 @@ export { is } from './entity.js';
2
2
  export { entityKind } from './entity.js';
3
3
  export type { LZEntity } from './entity.js';
4
4
  export { hasOwnEntityKind } from './entity.js';
5
+ export { evaluateConditionalRule, evaluateConditionalRuleGroup, normalizeConditionalRules } from './conditional-rules.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAI9C,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA"}