nextjs-cms 0.9.6 → 0.9.8

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 (70) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +290 -290
  3. package/dist/api/index.d.ts +3 -3
  4. package/dist/api/index.d.ts.map +1 -1
  5. package/dist/api/lib/serverActions.d.ts +3 -3
  6. package/dist/api/lib/serverActions.d.ts.map +1 -1
  7. package/dist/api/lib/serverActions.js +6 -0
  8. package/dist/api/root.d.ts +6 -6
  9. package/dist/api/root.d.ts.map +1 -1
  10. package/dist/api/routers/config.d.ts.map +1 -1
  11. package/dist/api/routers/hasItemsSection.d.ts.map +1 -1
  12. package/dist/api/routers/navigation.d.ts +3 -3
  13. package/dist/api/routers/simpleSection.d.ts.map +1 -1
  14. package/dist/cli/lib/db-config.js +10 -10
  15. package/dist/core/db/table-checker/MysqlTable.js +8 -8
  16. package/dist/core/factories/FieldFactory.d.ts.map +1 -1
  17. package/dist/core/factories/FieldFactory.js +5 -1
  18. package/dist/core/factories/section-factory-with-esbuild.js +9 -9
  19. package/dist/core/factories/section-factory-with-jiti.js +9 -9
  20. package/dist/core/fields/date-range.d.ts +119 -0
  21. package/dist/core/fields/date-range.d.ts.map +1 -0
  22. package/dist/core/fields/date-range.js +175 -0
  23. package/dist/core/fields/date.d.ts +15 -3
  24. package/dist/core/fields/date.d.ts.map +1 -1
  25. package/dist/core/fields/date.js +34 -17
  26. package/dist/core/fields/dateRange.d.ts +133 -94
  27. package/dist/core/fields/dateRange.d.ts.map +1 -1
  28. package/dist/core/fields/dateRange.js +39 -8
  29. package/dist/core/fields/index.d.ts +3 -3
  30. package/dist/core/fields/index.d.ts.map +1 -1
  31. package/dist/core/fields/index.js +1 -1
  32. package/dist/core/sections/category.d.ts +4 -4
  33. package/dist/core/sections/hasItems.d.ts +64 -64
  34. package/dist/core/sections/section.d.ts +3 -3
  35. package/dist/core/sections/simple.d.ts +4 -4
  36. package/dist/core/submit/submit.d.ts.map +1 -1
  37. package/dist/core/submit/submit.js +3 -1
  38. package/dist/translations/base/en.d.ts +3 -0
  39. package/dist/translations/base/en.d.ts.map +1 -1
  40. package/dist/translations/base/en.js +3 -0
  41. package/dist/translations/client.d.ts +40 -4
  42. package/dist/translations/client.d.ts.map +1 -1
  43. package/dist/translations/server.d.ts +40 -4
  44. package/dist/translations/server.d.ts.map +1 -1
  45. package/dist/utils/date-bounds.d.ts +10 -0
  46. package/dist/utils/date-bounds.d.ts.map +1 -0
  47. package/dist/utils/date-bounds.js +36 -0
  48. package/dist/utils/dateBounds.d.ts +10 -0
  49. package/dist/utils/dateBounds.d.ts.map +1 -0
  50. package/dist/utils/dateBounds.js +36 -0
  51. package/dist/validators/date-range.d.ts +11 -0
  52. package/dist/validators/date-range.d.ts.map +1 -0
  53. package/dist/validators/date-range.js +38 -0
  54. package/dist/validators/date.d.ts.map +1 -1
  55. package/dist/validators/date.js +23 -1
  56. package/dist/validators/dateRange.d.ts.map +1 -1
  57. package/dist/validators/dateRange.js +23 -1
  58. package/dist/validators/index.d.ts +1 -1
  59. package/dist/validators/index.d.ts.map +1 -1
  60. package/dist/validators/index.js +1 -1
  61. package/package.json +1 -1
  62. package/dist/translations/locale-cookie.d.ts +0 -24
  63. package/dist/translations/locale-cookie.d.ts.map +0 -1
  64. package/dist/translations/locale-cookie.js +0 -44
  65. package/dist/translations/locale-utils.d.ts +0 -8
  66. package/dist/translations/locale-utils.d.ts.map +0 -1
  67. package/dist/translations/locale-utils.js +0 -11
  68. package/dist/translations/localization.d.ts +0 -40
  69. package/dist/translations/localization.d.ts.map +0 -1
  70. package/dist/translations/localization.js +0 -48
@@ -1,18 +1,26 @@
1
- import type { BaseFieldConfig } from './field.js';
2
- import { Field } from './field.js';
3
- import { entityKind } from '../helpers/index.js';
4
- import * as z from 'zod';
5
- declare const configSchema: z.ZodObject<{
6
- startName: z.ZodString;
7
- endName: z.ZodString;
8
- format: z.ZodOptional<z.ZodEnum<{
9
- date: "date";
10
- datetime: "datetime";
11
- }>>;
12
- defaultStartValue: z.ZodOptional<z.ZodCustom<Date, Date>>;
13
- defaultEndValue: z.ZodOptional<z.ZodCustom<Date, Date>>;
14
- }, z.core.$strict>;
15
- type Config = z.infer<typeof configSchema>;
1
+ import type { BaseFieldConfig } from './field.js'
2
+ import { Field } from './field.js'
3
+ import { entityKind } from '../helpers/index.js'
4
+ import * as z from 'zod'
5
+ import { type DateBoundValue } from '../../utils/date-bounds.js'
6
+ declare const configSchema: z.ZodObject<
7
+ {
8
+ startName: z.ZodString
9
+ endName: z.ZodString
10
+ format: z.ZodOptional<
11
+ z.ZodEnum<{
12
+ date: 'date'
13
+ datetime: 'datetime'
14
+ }>
15
+ >
16
+ minDate: z.ZodOptional<z.ZodUnion<readonly [z.ZodDate, z.ZodLiteral<'now'>]>>
17
+ maxDate: z.ZodOptional<z.ZodUnion<readonly [z.ZodDate, z.ZodLiteral<'now'>]>>
18
+ defaultStartValue: z.ZodOptional<z.ZodDate>
19
+ defaultEndValue: z.ZodOptional<z.ZodDate>
20
+ },
21
+ z.core.$strict
22
+ >
23
+ type Config = z.infer<typeof configSchema>
16
24
  /**
17
25
  * DateRangeField stores two DB columns: startName and endName.
18
26
  *
@@ -23,85 +31,116 @@ type Config = z.infer<typeof configSchema>;
23
31
  * via an is(field, DateRangeField) guard — the same pattern used for SelectField.
24
32
  */
25
33
  export declare class DateRangeField extends Field<'date_range', Config> {
26
- static readonly [entityKind]: string;
27
- readonly startName: string;
28
- readonly endName: string;
29
- readonly format: 'date' | 'datetime';
30
- private startValue;
31
- private endValue;
32
- constructor(config: Omit<BaseFieldConfig<Config>, 'name'> & Config);
33
- hasSqlNameAndValue(): boolean;
34
- setValues(postData: FormData): void;
35
- getSqlNamesAndValues(): Record<string, string | null>;
34
+ static readonly [entityKind]: string
35
+ readonly startName: string
36
+ readonly endName: string
37
+ readonly format: 'date' | 'datetime'
38
+ readonly minDate: DateBoundValue | undefined
39
+ readonly maxDate: DateBoundValue | undefined
40
+ private startValue
41
+ private endValue
42
+ constructor(config: Omit<BaseFieldConfig<Config>, 'name'> & Config)
43
+ hasSqlNameAndValue(): boolean
44
+ setValues(postData: FormData): void
45
+ getSqlNamesAndValues(): Record<string, string | null>
36
46
  getValue(): {
37
- from: string | null;
38
- to: string | null;
39
- };
47
+ from: string | null
48
+ to: string | null
49
+ }
40
50
  exportForClient(): {
41
- startName: string;
42
- endName: string;
43
- format: "date" | "datetime";
44
- startValue: any;
45
- endValue: any;
46
- type: "date_range";
47
- name: string;
48
- label: string;
49
- required: boolean;
50
- localized?: boolean;
51
- conditionalFields: import("../types/index.js").ConditionalField[];
52
- readonly: boolean;
53
- defaultValue: any;
54
- value: any;
55
- };
56
- checkRequired(): void;
57
- prepareForSubmission(): Promise<void>;
58
- private parseDate;
59
- private formatDate;
51
+ startName: string
52
+ endName: string
53
+ format: 'date' | 'datetime'
54
+ minDate: string | undefined
55
+ maxDate: string | undefined
56
+ startValue: any
57
+ endValue: any
58
+ type: 'date_range'
59
+ name: string
60
+ label: string
61
+ required: boolean
62
+ localized?: boolean
63
+ conditionalFields: import('../types/index.js').ConditionalField[]
64
+ readonly: boolean
65
+ defaultValue: any
66
+ value: any
67
+ }
68
+ checkRequired(): void
69
+ prepareForSubmission(): Promise<void>
70
+ private parseDate
71
+ private formatDate
72
+ private validateDateBounds
60
73
  }
61
- export type DateRangeFieldClientConfig = ReturnType<DateRangeField['exportForClient']>;
62
- declare const optionsSchema: z.ZodObject<{
63
- startName: z.ZodString;
64
- endName: z.ZodString;
65
- format: z.ZodOptional<z.ZodEnum<{
66
- date: "date";
67
- datetime: "datetime";
68
- }>>;
69
- defaultStartValue: z.ZodOptional<z.ZodCustom<Date, Date>>;
70
- defaultEndValue: z.ZodOptional<z.ZodCustom<Date, Date>>;
71
- label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
72
- required: z.ZodOptional<z.ZodBoolean>;
73
- defaultValue: z.ZodOptional<z.ZodAny>;
74
- order: z.ZodOptional<z.ZodNumber>;
75
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
76
- adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
77
- localized: z.ZodOptional<z.ZodBoolean>;
78
- }, z.core.$strict>;
79
- declare const dateRangeFieldConfigSchema: z.ZodObject<{
80
- /**
81
- * Auto-computed as `${startName}|${endName}`.
82
- * Satisfies the `FieldConfig` union constraint that every config has a `name` property.
83
- * Never set manually — use `startName` and `endName` instead.
84
- */
85
- name: z.ZodString;
86
- type: z.ZodLiteral<"date_range">;
87
- build: z.ZodFunction<z.core.$ZodFunctionArgs, z.ZodCustom<DateRangeField, DateRangeField>>;
88
- startName: z.ZodString;
89
- endName: z.ZodString;
90
- format: z.ZodOptional<z.ZodEnum<{
91
- date: "date";
92
- datetime: "datetime";
93
- }>>;
94
- defaultStartValue: z.ZodOptional<z.ZodCustom<Date, Date>>;
95
- defaultEndValue: z.ZodOptional<z.ZodCustom<Date, Date>>;
96
- label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>;
97
- required: z.ZodOptional<z.ZodBoolean>;
98
- defaultValue: z.ZodOptional<z.ZodAny>;
99
- order: z.ZodOptional<z.ZodNumber>;
100
- conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
101
- adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
102
- localized: z.ZodOptional<z.ZodBoolean>;
103
- }, z.core.$strict>;
104
- export type DateRangeFieldConfig = z.infer<typeof dateRangeFieldConfigSchema>;
74
+ export type DateRangeFieldClientConfig = ReturnType<DateRangeField['exportForClient']>
75
+ declare const optionsSchema: z.ZodObject<
76
+ {
77
+ startName: z.ZodString
78
+ endName: z.ZodString
79
+ format: z.ZodOptional<
80
+ z.ZodEnum<{
81
+ date: 'date'
82
+ datetime: 'datetime'
83
+ }>
84
+ >
85
+ minDate: z.ZodOptional<z.ZodUnion<readonly [z.ZodDate, z.ZodLiteral<'now'>]>>
86
+ maxDate: z.ZodOptional<z.ZodUnion<readonly [z.ZodDate, z.ZodLiteral<'now'>]>>
87
+ defaultStartValue: z.ZodOptional<z.ZodDate>
88
+ defaultEndValue: z.ZodOptional<z.ZodDate>
89
+ label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>
90
+ required: z.ZodOptional<z.ZodBoolean>
91
+ defaultValue: z.ZodOptional<z.ZodAny>
92
+ order: z.ZodOptional<z.ZodNumber>
93
+ conditionalRules: z.ZodOptional<
94
+ z.ZodArray<
95
+ z.ZodCustom<import('../types/index.js').ConditionalRule, import('../types/index.js').ConditionalRule>
96
+ >
97
+ >
98
+ adminGenerated: z.ZodOptional<
99
+ z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<'readonly'>]>
100
+ >
101
+ localized: z.ZodOptional<z.ZodBoolean>
102
+ },
103
+ z.core.$strict
104
+ >
105
+ declare const dateRangeFieldConfigSchema: z.ZodObject<
106
+ {
107
+ /**
108
+ * Auto-computed as `${startName}|${endName}`.
109
+ * Satisfies the `FieldConfig` union constraint that every config has a `name` property.
110
+ * Never set manually — use `startName` and `endName` instead.
111
+ */
112
+ name: z.ZodString
113
+ type: z.ZodLiteral<'date_range'>
114
+ build: z.ZodFunction<z.core.$ZodFunctionArgs, z.ZodCustom<DateRangeField, DateRangeField>>
115
+ startName: z.ZodString
116
+ endName: z.ZodString
117
+ format: z.ZodOptional<
118
+ z.ZodEnum<{
119
+ date: 'date'
120
+ datetime: 'datetime'
121
+ }>
122
+ >
123
+ minDate: z.ZodOptional<z.ZodUnion<readonly [z.ZodDate, z.ZodLiteral<'now'>]>>
124
+ maxDate: z.ZodOptional<z.ZodUnion<readonly [z.ZodDate, z.ZodLiteral<'now'>]>>
125
+ defaultStartValue: z.ZodOptional<z.ZodDate>
126
+ defaultEndValue: z.ZodOptional<z.ZodDate>
127
+ label: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>>
128
+ required: z.ZodOptional<z.ZodBoolean>
129
+ defaultValue: z.ZodOptional<z.ZodAny>
130
+ order: z.ZodOptional<z.ZodNumber>
131
+ conditionalRules: z.ZodOptional<
132
+ z.ZodArray<
133
+ z.ZodCustom<import('../types/index.js').ConditionalRule, import('../types/index.js').ConditionalRule>
134
+ >
135
+ >
136
+ adminGenerated: z.ZodOptional<
137
+ z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<'readonly'>]>
138
+ >
139
+ localized: z.ZodOptional<z.ZodBoolean>
140
+ },
141
+ z.core.$strict
142
+ >
143
+ export type DateRangeFieldConfig = z.infer<typeof dateRangeFieldConfigSchema>
105
144
  /**
106
145
  * Helper to create a date range field configuration.
107
146
  * Uses `startName` and `endName` instead of the usual `name`.
@@ -110,6 +149,6 @@ export type DateRangeFieldConfig = z.infer<typeof dateRangeFieldConfigSchema>;
110
149
  * @example
111
150
  * dateRangeField({ startName: 'event_start', endName: 'event_end', label: 'Event Dates' })
112
151
  */
113
- export declare function dateRangeField(field: z.infer<typeof optionsSchema>): DateRangeFieldConfig;
114
- export {};
115
- //# sourceMappingURL=dateRange.d.ts.map
152
+ export declare function dateRangeField(field: z.infer<typeof optionsSchema>): DateRangeFieldConfig
153
+ export {}
154
+ //# sourceMappingURL=dateRange.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dateRange.d.ts","sourceRoot":"","sources":["../../../src/core/fields/dateRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,QAAA,MAAM,YAAY;;;;;;;;;kBAMhB,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;IAC3D,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAmB;IAEhE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IAEpC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAK;gBAET,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM;IAYzD,kBAAkB,IAAI,OAAO;IAMtC,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IASnC,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IASrD,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAO7C,eAAe;;;;;;;;;;;;;;;;IAWxB,aAAa,IAAI,IAAI;IASf,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3C,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;CAOrB;AAED,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAItF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;kBAGjB,CAAA;AAEF,QAAA,MAAM,0BAA0B;IAE5B;;;;OAIG;;;;;;;;;;;;;;;;;;;kBAOL,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,oBAAoB,CAczF"}
1
+ {"version":3,"file":"dateRange.d.ts","sourceRoot":"","sources":["../../../src/core/fields/dateRange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,KAAK,EAAyB,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,OAAO,EAKH,KAAK,cAAc,EACtB,MAAM,2BAA2B,CAAA;AAElC,QAAA,MAAM,YAAY;;;;;;;;;;;kBAQhB,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;IAC3D,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAmB;IAEhE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IACpC,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,CAAA;IAE5C,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAK;gBAET,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM;IAoBzD,kBAAkB,IAAI,OAAO;IAMtC,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IASnC,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IASrD,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAO7C,eAAe;;;;;;;;;;;;;;;;;;IAaxB,aAAa,IAAI,IAAI;IASf,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3C,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,kBAAkB;CAqB7B;AAED,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAItF,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;kBAGjB,CAAA;AAEF,QAAA,MAAM,0BAA0B;IAE5B;;;;OAIG;;;;;;;;;;;;;;;;;;;;;kBAOL,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,oBAAoB,CAczF"}
@@ -1,14 +1,16 @@
1
1
  import { Field, baseFieldConfigSchema } from './field.js';
2
2
  import { entityKind } from '../helpers/index.js';
3
3
  import * as z from 'zod';
4
- import dayjs from 'dayjs';
5
4
  import getString from '../../translations/index.js';
5
+ import { dateBoundSchema, formatDateForField, resolveDateBoundValue, serializeDateBoundValue, } from '../../utils/dateBounds.js';
6
6
  const configSchema = z.strictObject({
7
7
  startName: z.string().describe('The DB column name for the start date'),
8
8
  endName: z.string().describe('The DB column name for the end date'),
9
9
  format: z.enum(['date', 'datetime']).optional().describe('The format of the date columns'),
10
- defaultStartValue: z.custom().optional().describe('Default value for the start date'),
11
- defaultEndValue: z.custom().optional().describe('Default value for the end date'),
10
+ minDate: dateBoundSchema.optional().describe('Minimum allowed date. Accepts a Date or "now"'),
11
+ maxDate: dateBoundSchema.optional().describe('Maximum allowed date. Accepts a Date or "now"'),
12
+ defaultStartValue: z.date().optional().describe('Default value for the start date'),
13
+ defaultEndValue: z.date().optional().describe('Default value for the end date'),
12
14
  });
13
15
  /**
14
16
  * DateRangeField stores two DB columns: startName and endName.
@@ -24,6 +26,8 @@ export class DateRangeField extends Field {
24
26
  startName;
25
27
  endName;
26
28
  format;
29
+ minDate;
30
+ maxDate;
27
31
  startValue;
28
32
  endValue;
29
33
  constructor(config) {
@@ -32,8 +36,15 @@ export class DateRangeField extends Field {
32
36
  this.startName = config.startName;
33
37
  this.endName = config.endName;
34
38
  this.format = config.format ?? 'date';
39
+ this.minDate = config.minDate;
40
+ this.maxDate = config.maxDate;
35
41
  this.startValue = config.defaultStartValue ?? undefined;
36
42
  this.endValue = config.defaultEndValue ?? undefined;
43
+ const minDate = resolveDateBoundValue(this.minDate);
44
+ const maxDate = resolveDateBoundValue(this.maxDate);
45
+ if (minDate && maxDate && minDate.getTime() > maxDate.getTime()) {
46
+ throw new Error(getString('fieldDateBoundsMismatch', this.language, { field: this.getLocalizedLabel() }));
47
+ }
37
48
  }
38
49
  // ─── Opt out of single-column SQL path ────────────────────────────────────
39
50
  hasSqlNameAndValue() {
@@ -68,6 +79,8 @@ export class DateRangeField extends Field {
68
79
  startName: this.startName,
69
80
  endName: this.endName,
70
81
  format: this.format,
82
+ minDate: serializeDateBoundValue(this.minDate),
83
+ maxDate: serializeDateBoundValue(this.maxDate),
71
84
  startValue: this.startValue ?? null,
72
85
  endValue: this.endValue ?? null,
73
86
  };
@@ -85,10 +98,14 @@ export class DateRangeField extends Field {
85
98
  if (this.required && (!start || !end)) {
86
99
  throw new Error(getString('invalidDatePleaseProvideValid', this.language, { field: this.getLocalizedLabel() }));
87
100
  }
88
- if (start)
101
+ if (start) {
102
+ this.validateDateBounds(start);
89
103
  this.startValue = start.toISOString();
90
- if (end)
104
+ }
105
+ if (end) {
106
+ this.validateDateBounds(end);
91
107
  this.endValue = end.toISOString();
108
+ }
92
109
  }
93
110
  // ─── Helpers ──────────────────────────────────────────────────────────────
94
111
  parseDate(value) {
@@ -101,9 +118,23 @@ export class DateRangeField extends Field {
101
118
  const date = this.parseDate(value);
102
119
  if (!date)
103
120
  return null;
104
- return this.format === 'datetime'
105
- ? dayjs(date).format('YYYY-MM-DD HH:mm:ss')
106
- : dayjs(date).format('YYYY-MM-DD');
121
+ return formatDateForField(date, this.format);
122
+ }
123
+ validateDateBounds(date) {
124
+ const minDate = resolveDateBoundValue(this.minDate);
125
+ if (minDate && date.getTime() < minDate.getTime()) {
126
+ throw new Error(getString('fieldDateMinValueError', this.language, {
127
+ field: this.getLocalizedLabel(),
128
+ min: formatDateForField(minDate, this.format),
129
+ }));
130
+ }
131
+ const maxDate = resolveDateBoundValue(this.maxDate);
132
+ if (maxDate && date.getTime() > maxDate.getTime()) {
133
+ throw new Error(getString('fieldDateMaxValueError', this.language, {
134
+ field: this.getLocalizedLabel(),
135
+ max: formatDateForField(maxDate, this.format),
136
+ }));
137
+ }
107
138
  }
108
139
  }
109
140
  // ─── Config schema & factory ──────────────────────────────────────────────────
@@ -26,8 +26,8 @@ export { RichTextField, richTextField } from './richText.js';
26
26
  export type { RichTextFieldClientConfig, RichTextFieldConfig as RichTextFieldConfigType } from './richText.js';
27
27
  export { DateField, dateField } from './date.js';
28
28
  export type { DateFieldClientConfig, DateFieldConfig } from './date.js';
29
- export { DateRangeField, dateRangeField } from './dateRange.js';
30
- export type { DateRangeFieldClientConfig, DateRangeFieldConfig } from './dateRange.js';
29
+ export { DateRangeField, dateRangeField } from './date-range.js';
30
+ export type { DateRangeFieldClientConfig, DateRangeFieldConfig } from './date-range.js';
31
31
  export { ColorField, colorField } from './color.js';
32
32
  export type { ColorFieldClientConfig, ColorFieldConfig } from './color.js';
33
33
  export { SlugField, slugField } from './slug.js';
@@ -51,7 +51,7 @@ import type { SelectMultipleFieldConfigType } from './selectMultiple.js';
51
51
  import type { DocumentFieldConfig } from './document.js';
52
52
  import type { MapFieldConfig } from './map.js';
53
53
  import type { DateFieldConfig } from './date.js';
54
- import type { DateRangeFieldConfig } from './dateRange.js';
54
+ import type { DateRangeFieldConfig } from './date-range.js';
55
55
  import type { ColorFieldConfig } from './color.js';
56
56
  import type { SlugFieldConfig } from './slug.js';
57
57
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/fields/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/fields/index.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export { DocumentField, documentField } from './document.js';
12
12
  export { MapField, mapField } from './map.js';
13
13
  export { RichTextField, richTextField } from './richText.js';
14
14
  export { DateField, dateField } from './date.js';
15
- export { DateRangeField, dateRangeField } from './dateRange.js';
15
+ export { DateRangeField, dateRangeField } from './date-range.js';
16
16
  export { ColorField, colorField } from './color.js';
17
17
  export { SlugField, slugField } from './slug.js';
18
18
  export { Field } from './field.js';