nextjs-cms 0.5.9 → 0.5.10
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.
- package/dist/api/axios/axiosInstance.d.ts +1 -1
- package/dist/api/axios/axiosInstance.js +8 -8
- package/dist/api/index.d.ts +855 -855
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +12 -12
- package/dist/api/lib/serverActions.d.ts +239 -239
- package/dist/api/lib/serverActions.d.ts.map +1 -1
- package/dist/api/lib/serverActions.js +834 -834
- package/dist/api/root.d.ts +828 -828
- package/dist/api/root.js +30 -30
- package/dist/api/routers/accountSettings.d.ts +60 -60
- package/dist/api/routers/accountSettings.js +108 -108
- package/dist/api/routers/admins.d.ts +105 -105
- package/dist/api/routers/admins.js +219 -219
- package/dist/api/routers/auth.d.ts +47 -47
- package/dist/api/routers/auth.js +25 -25
- package/dist/api/routers/categorySection.d.ts +103 -103
- package/dist/api/routers/categorySection.js +38 -38
- package/dist/api/routers/cmsSettings.d.ts +48 -48
- package/dist/api/routers/cmsSettings.js +51 -51
- package/dist/api/routers/cpanel.d.ts +83 -83
- package/dist/api/routers/cpanel.js +216 -216
- package/dist/api/routers/files.d.ts +47 -47
- package/dist/api/routers/files.js +23 -23
- package/dist/api/routers/gallery.d.ts +35 -35
- package/dist/api/routers/gallery.js +62 -62
- package/dist/api/routers/googleAnalytics.d.ts +30 -30
- package/dist/api/routers/googleAnalytics.js +7 -7
- package/dist/api/routers/hasItemsSection.d.ts +139 -139
- package/dist/api/routers/hasItemsSection.js +34 -34
- package/dist/api/routers/navigation.d.ts +51 -51
- package/dist/api/routers/navigation.js +11 -11
- package/dist/api/routers/simpleSection.d.ts +57 -57
- package/dist/api/routers/simpleSection.js +12 -12
- package/dist/api/trpc.d.ts +106 -106
- package/dist/api/trpc.js +72 -72
- package/dist/auth/axios/axiosInstance.d.ts +1 -1
- package/dist/auth/axios/axiosInstance.js +8 -8
- package/dist/auth/csrf.d.ts +29 -29
- package/dist/auth/csrf.js +76 -76
- package/dist/auth/hooks/index.d.ts +3 -3
- package/dist/auth/hooks/index.d.ts.map +1 -1
- package/dist/auth/hooks/index.js +3 -3
- package/dist/auth/hooks/useAxiosPrivate.d.ts +4 -4
- package/dist/auth/hooks/useAxiosPrivate.js +74 -74
- package/dist/auth/hooks/useRefreshToken.d.ts +6 -6
- package/dist/auth/hooks/useRefreshToken.js +79 -79
- package/dist/auth/index.d.ts +22 -22
- package/dist/auth/index.js +44 -44
- package/dist/auth/jwt.d.ts +5 -5
- package/dist/auth/jwt.js +25 -25
- package/dist/auth/lib/actions.d.ts +32 -32
- package/dist/auth/lib/actions.d.ts.map +1 -1
- package/dist/auth/lib/actions.js +209 -209
- package/dist/auth/lib/client.d.ts +3 -3
- package/dist/auth/lib/client.js +46 -46
- package/dist/auth/lib/index.d.ts +2 -2
- package/dist/auth/lib/index.d.ts.map +1 -1
- package/dist/auth/lib/index.js +2 -2
- package/dist/auth/react.d.ts +105 -105
- package/dist/auth/react.d.ts.map +1 -1
- package/dist/auth/react.js +347 -347
- package/dist/auth/trpc.d.ts +5 -5
- package/dist/auth/trpc.d.ts.map +1 -1
- package/dist/auth/trpc.js +81 -81
- package/dist/core/config/config-loader.d.ts +91 -91
- package/dist/core/config/config-loader.js +230 -230
- package/dist/core/config/index.d.ts +2 -2
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/loader.d.ts +1 -1
- package/dist/core/config/loader.js +42 -42
- package/dist/core/db/index.d.ts +1 -1
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +1 -1
- package/dist/core/db/table-checker/DbTable.d.ts +5 -5
- package/dist/core/db/table-checker/DbTable.js +5 -5
- package/dist/core/db/table-checker/MysqlTable.d.ts +33 -33
- package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -1
- package/dist/core/db/table-checker/MysqlTable.js +94 -94
- package/dist/core/db/table-checker/index.d.ts +1 -1
- package/dist/core/db/table-checker/index.d.ts.map +1 -1
- package/dist/core/db/table-checker/index.js +1 -1
- package/dist/core/factories/FieldFactory.d.ts +123 -123
- package/dist/core/factories/FieldFactory.d.ts.map +1 -1
- package/dist/core/factories/FieldFactory.js +411 -411
- package/dist/core/factories/SectionFactory.d.ts +109 -109
- package/dist/core/factories/SectionFactory.d.ts.map +1 -1
- package/dist/core/factories/SectionFactory.js +415 -415
- package/dist/core/factories/index.d.ts +2 -2
- package/dist/core/factories/index.d.ts.map +1 -1
- package/dist/core/factories/index.js +2 -2
- package/dist/core/fields/checkbox.d.ts +62 -62
- package/dist/core/fields/checkbox.d.ts.map +1 -1
- package/dist/core/fields/checkbox.js +62 -62
- package/dist/core/fields/color.d.ts +83 -83
- package/dist/core/fields/color.d.ts.map +1 -1
- package/dist/core/fields/color.js +91 -91
- package/dist/core/fields/date.d.ts +99 -99
- package/dist/core/fields/date.d.ts.map +1 -1
- package/dist/core/fields/date.js +108 -108
- package/dist/core/fields/document.d.ts +179 -179
- package/dist/core/fields/document.d.ts.map +1 -1
- package/dist/core/fields/document.js +277 -277
- package/dist/core/fields/field-group.d.ts +17 -17
- package/dist/core/fields/field-group.d.ts.map +1 -1
- package/dist/core/fields/field-group.js +6 -6
- package/dist/core/fields/field.d.ts +125 -125
- package/dist/core/fields/field.d.ts.map +1 -1
- package/dist/core/fields/field.js +148 -148
- package/dist/core/fields/fileField.d.ts +14 -14
- package/dist/core/fields/fileField.d.ts.map +1 -1
- package/dist/core/fields/fileField.js +5 -5
- package/dist/core/fields/index.d.ts +64 -64
- package/dist/core/fields/index.d.ts.map +1 -1
- package/dist/core/fields/index.js +18 -18
- package/dist/core/fields/map.d.ts +166 -166
- package/dist/core/fields/map.d.ts.map +1 -1
- package/dist/core/fields/map.js +152 -152
- package/dist/core/fields/number.d.ts +185 -185
- package/dist/core/fields/number.d.ts.map +1 -1
- package/dist/core/fields/number.js +241 -241
- package/dist/core/fields/password.d.ts +108 -108
- package/dist/core/fields/password.d.ts.map +1 -1
- package/dist/core/fields/password.js +133 -133
- package/dist/core/fields/photo.d.ts +288 -288
- package/dist/core/fields/photo.d.ts.map +1 -1
- package/dist/core/fields/photo.js +410 -410
- package/dist/core/fields/richText.d.ts +294 -294
- package/dist/core/fields/richText.d.ts.map +1 -1
- package/dist/core/fields/richText.js +338 -338
- package/dist/core/fields/select.d.ts +365 -365
- package/dist/core/fields/select.d.ts.map +1 -1
- package/dist/core/fields/select.js +499 -499
- package/dist/core/fields/selectMultiple.d.ts +235 -235
- package/dist/core/fields/selectMultiple.d.ts.map +1 -1
- package/dist/core/fields/selectMultiple.js +417 -417
- package/dist/core/fields/tags.d.ts +130 -130
- package/dist/core/fields/tags.d.ts.map +1 -1
- package/dist/core/fields/tags.js +105 -105
- package/dist/core/fields/text.d.ts +135 -135
- package/dist/core/fields/text.d.ts.map +1 -1
- package/dist/core/fields/text.js +157 -157
- package/dist/core/fields/textArea.d.ts +106 -106
- package/dist/core/fields/textArea.d.ts.map +1 -1
- package/dist/core/fields/textArea.js +126 -126
- package/dist/core/fields/video.d.ts +147 -147
- package/dist/core/fields/video.d.ts.map +1 -1
- package/dist/core/fields/video.js +248 -248
- package/dist/core/helpers/entity.d.ts +7 -7
- package/dist/core/helpers/entity.js +27 -27
- package/dist/core/helpers/index.d.ts +4 -4
- package/dist/core/helpers/index.d.ts.map +1 -1
- package/dist/core/helpers/index.js +3 -3
- package/dist/core/index.d.ts +7 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -7
- package/dist/core/sections/category.d.ts +282 -282
- package/dist/core/sections/category.d.ts.map +1 -1
- package/dist/core/sections/category.js +147 -147
- package/dist/core/sections/hasItems.d.ts +631 -631
- package/dist/core/sections/hasItems.d.ts.map +1 -1
- package/dist/core/sections/hasItems.js +144 -144
- package/dist/core/sections/index.d.ts +4 -4
- package/dist/core/sections/index.d.ts.map +1 -1
- package/dist/core/sections/index.js +4 -4
- package/dist/core/sections/section.d.ts +225 -225
- package/dist/core/sections/section.d.ts.map +1 -1
- package/dist/core/sections/section.js +341 -341
- package/dist/core/sections/simple.d.ts +98 -98
- package/dist/core/sections/simple.d.ts.map +1 -1
- package/dist/core/sections/simple.js +95 -95
- package/dist/core/security/dom.d.ts +10 -10
- package/dist/core/security/dom.js +92 -92
- package/dist/core/submit/ItemEditSubmit.d.ts +75 -75
- package/dist/core/submit/ItemEditSubmit.js +186 -186
- package/dist/core/submit/NewItemSubmit.d.ts +13 -13
- package/dist/core/submit/NewItemSubmit.js +93 -93
- package/dist/core/submit/SimpleSectionSubmit.d.ts +12 -12
- package/dist/core/submit/SimpleSectionSubmit.js +93 -93
- package/dist/core/submit/index.d.ts +4 -4
- package/dist/core/submit/index.js +4 -4
- package/dist/core/submit/submit.d.ts +115 -115
- package/dist/core/submit/submit.js +479 -479
- package/dist/core/types/index.d.ts +279 -279
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +1 -1
- package/dist/db/client.d.ts +8 -8
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +19 -19
- package/dist/db/config.d.ts +5 -5
- package/dist/db/config.js +22 -22
- package/dist/db/drizzle.config.d.ts +5 -5
- package/dist/db/drizzle.config.js +18 -18
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.js +3 -3
- package/dist/db/schema.d.ts +638 -638
- package/dist/db/schema.js +73 -73
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/translations/index.d.ts +2 -2
- package/dist/translations/index.js +15 -15
- package/dist/utils/CpanelApi.d.ts +24 -24
- package/dist/utils/CpanelApi.js +64 -64
- package/dist/utils/constants.d.ts +13 -13
- package/dist/utils/constants.js +61 -61
- package/dist/utils/index.d.ts +4 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/utils.d.ts +59 -59
- package/dist/utils/utils.js +132 -132
- package/dist/validators/checkbox.d.ts +3 -3
- package/dist/validators/checkbox.d.ts.map +1 -1
- package/dist/validators/checkbox.js +12 -12
- package/dist/validators/color.d.ts +3 -3
- package/dist/validators/color.d.ts.map +1 -1
- package/dist/validators/color.js +7 -7
- package/dist/validators/date.d.ts +3 -3
- package/dist/validators/date.d.ts.map +1 -1
- package/dist/validators/date.js +5 -5
- package/dist/validators/document.d.ts +3 -3
- package/dist/validators/document.d.ts.map +1 -1
- package/dist/validators/document.js +57 -57
- package/dist/validators/index.d.ts +14 -14
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +14 -14
- package/dist/validators/map.d.ts +3 -3
- package/dist/validators/map.d.ts.map +1 -1
- package/dist/validators/map.js +5 -5
- package/dist/validators/number.d.ts +3 -3
- package/dist/validators/number.d.ts.map +1 -1
- package/dist/validators/number.js +20 -20
- package/dist/validators/password.d.ts +3 -3
- package/dist/validators/password.d.ts.map +1 -1
- package/dist/validators/password.js +11 -11
- package/dist/validators/photo.d.ts +3 -3
- package/dist/validators/photo.d.ts.map +1 -1
- package/dist/validators/photo.js +100 -100
- package/dist/validators/richText.d.ts +3 -3
- package/dist/validators/richText.d.ts.map +1 -1
- package/dist/validators/richText.js +8 -8
- package/dist/validators/select-multiple.d.ts +9 -9
- package/dist/validators/select-multiple.d.ts.map +1 -1
- package/dist/validators/select-multiple.js +20 -20
- package/dist/validators/select.d.ts +3 -3
- package/dist/validators/select.d.ts.map +1 -1
- package/dist/validators/select.js +5 -5
- package/dist/validators/text.d.ts +3 -3
- package/dist/validators/text.d.ts.map +1 -1
- package/dist/validators/text.js +7 -7
- package/dist/validators/textarea.d.ts +3 -3
- package/dist/validators/textarea.d.ts.map +1 -1
- package/dist/validators/textarea.js +7 -7
- package/dist/validators/video.d.ts +3 -3
- package/dist/validators/video.d.ts.map +1 -1
- package/dist/validators/video.js +57 -57
- package/package.json +2 -3
|
@@ -1,136 +1,136 @@
|
|
|
1
|
-
import type { BaseFieldConfig } from
|
|
2
|
-
import { Field } from
|
|
3
|
-
import { entityKind } from
|
|
4
|
-
import * as z from 'zod';
|
|
5
|
-
declare const configSchema: z.ZodObject<{
|
|
6
|
-
placeholder: z.ZodOptional<z.ZodString>;
|
|
7
|
-
minLength: z.ZodOptional<z.ZodNumber>;
|
|
8
|
-
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
9
|
-
/**
|
|
10
|
-
* The default value of the field.
|
|
11
|
-
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
12
|
-
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
13
|
-
*/
|
|
14
|
-
defaultValue: z.ZodOptional<z.ZodString>;
|
|
15
|
-
/**
|
|
16
|
-
* Whether to sanitize the value before saving it to the database.
|
|
17
|
-
* If true, the value will be escaped to prevent XSS attacks.
|
|
18
|
-
* If false, the value will be saved as is (raw input).
|
|
19
|
-
* @default false
|
|
20
|
-
*/
|
|
21
|
-
sanitize: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
-
}, z.core.$strict>;
|
|
23
|
-
type Config = z.infer<typeof configSchema>;
|
|
24
|
-
export declare class TextField extends Field<'text', Config> {
|
|
25
|
-
static readonly [entityKind]: string;
|
|
26
|
-
readonly maxLength: number | undefined;
|
|
27
|
-
readonly minLength: number | undefined;
|
|
28
|
-
readonly placeholder: string | undefined;
|
|
29
|
-
private readonly _defaultValue;
|
|
30
|
-
value: string | undefined;
|
|
31
|
-
readonly sanitize: boolean;
|
|
32
|
-
constructor(config: BaseFieldConfig<Config>);
|
|
33
|
-
/**
|
|
34
|
-
* Sanitize the value
|
|
35
|
-
*/
|
|
36
|
-
private sanitizeValue;
|
|
37
|
-
exportForClient(): {
|
|
38
|
-
maxLength: number | undefined;
|
|
39
|
-
minLength: number | undefined;
|
|
40
|
-
placeholder: string | undefined;
|
|
41
|
-
sanitize: boolean;
|
|
42
|
-
type: "text";
|
|
43
|
-
name: string;
|
|
44
|
-
label: string;
|
|
45
|
-
required: boolean;
|
|
46
|
-
conditionalFields: import("../types.js").ConditionalField[];
|
|
47
|
-
readonly: boolean;
|
|
48
|
-
defaultValue: any;
|
|
49
|
-
value: any;
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Get the value of the field
|
|
53
|
-
*/
|
|
54
|
-
getValue(): string | undefined;
|
|
55
|
-
checkRequired(): void;
|
|
56
|
-
hasSqlNameAndValue(): boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Prepare the field for submission
|
|
59
|
-
*/
|
|
60
|
-
prepareForSubmission(): Promise<void>;
|
|
61
|
-
}
|
|
62
|
-
export type TextFieldClientConfig = ReturnType<TextField['exportForClient']>;
|
|
63
|
-
declare const optionsSchema: z.ZodObject<{
|
|
64
|
-
placeholder: z.ZodOptional<z.ZodString>;
|
|
65
|
-
minLength: z.ZodOptional<z.ZodNumber>;
|
|
66
|
-
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
67
|
-
/**
|
|
68
|
-
* The default value of the field.
|
|
69
|
-
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
70
|
-
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
71
|
-
*/
|
|
72
|
-
defaultValue: z.ZodOptional<z.ZodString>;
|
|
73
|
-
/**
|
|
74
|
-
* Whether to sanitize the value before saving it to the database.
|
|
75
|
-
* If true, the value will be escaped to prevent XSS attacks.
|
|
76
|
-
* If false, the value will be saved as is (raw input).
|
|
77
|
-
* @default false
|
|
78
|
-
*/
|
|
79
|
-
sanitize: z.ZodOptional<z.ZodBoolean>;
|
|
80
|
-
name: z.ZodString;
|
|
81
|
-
label: z.ZodOptional<z.ZodString>;
|
|
82
|
-
required: z.ZodOptional<z.ZodBoolean>;
|
|
83
|
-
order: z.ZodOptional<z.ZodNumber>;
|
|
84
|
-
conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types.js").ConditionalRule, import("../types.js").ConditionalRule>>>;
|
|
85
|
-
adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
|
|
86
|
-
}, z.core.$strict>;
|
|
87
|
-
declare const textFieldConfigSchema: z.ZodObject<{
|
|
88
|
-
type: z.ZodLiteral<"text">;
|
|
89
|
-
build: z.ZodFunction<z.core.$ZodFunctionArgs, z.ZodCustom<TextField, TextField>>;
|
|
90
|
-
placeholder: z.ZodOptional<z.ZodString>;
|
|
91
|
-
minLength: z.ZodOptional<z.ZodNumber>;
|
|
92
|
-
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
93
|
-
/**
|
|
94
|
-
* The default value of the field.
|
|
95
|
-
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
96
|
-
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
97
|
-
*/
|
|
98
|
-
defaultValue: z.ZodOptional<z.ZodString>;
|
|
99
|
-
/**
|
|
100
|
-
* Whether to sanitize the value before saving it to the database.
|
|
101
|
-
* If true, the value will be escaped to prevent XSS attacks.
|
|
102
|
-
* If false, the value will be saved as is (raw input).
|
|
103
|
-
* @default false
|
|
104
|
-
*/
|
|
105
|
-
sanitize: z.ZodOptional<z.ZodBoolean>;
|
|
106
|
-
name: z.ZodString;
|
|
107
|
-
label: z.ZodOptional<z.ZodString>;
|
|
108
|
-
required: z.ZodOptional<z.ZodBoolean>;
|
|
109
|
-
order: z.ZodOptional<z.ZodNumber>;
|
|
110
|
-
conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types.js").ConditionalRule, import("../types.js").ConditionalRule>>>;
|
|
111
|
-
adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
|
|
112
|
-
}, z.core.$strict>;
|
|
113
|
-
/**
|
|
114
|
-
* Text field configuration type
|
|
115
|
-
* This is a plain object that can be serialized and used anywhere
|
|
116
|
-
* The build() method allows creating a TextField instance when needed
|
|
117
|
-
*/
|
|
118
|
-
export type TextFieldConfig = z.infer<typeof textFieldConfigSchema>;
|
|
119
|
-
/**
|
|
120
|
-
* Helper function to create a text field configuration
|
|
121
|
-
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
122
|
-
*
|
|
123
|
-
* @example
|
|
124
|
-
* ```typescript
|
|
125
|
-
* const fieldConfig = textField({ name: 'title', label: 'Title', required: true, order: 1 })
|
|
126
|
-
* // Use as config (serializable)
|
|
127
|
-
* const config = JSON.stringify(fieldConfig) // methods are ignored during serialization
|
|
128
|
-
* // Build instance when needed
|
|
129
|
-
* const fieldInstance = fieldConfig.build()
|
|
130
|
-
* ```
|
|
131
|
-
*
|
|
132
|
-
* @param field
|
|
133
|
-
*/
|
|
134
|
-
export declare function textField(field: z.infer<typeof optionsSchema>): TextFieldConfig;
|
|
135
|
-
export {};
|
|
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
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
7
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
9
|
+
/**
|
|
10
|
+
* The default value of the field.
|
|
11
|
+
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
12
|
+
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
13
|
+
*/
|
|
14
|
+
defaultValue: z.ZodOptional<z.ZodString>;
|
|
15
|
+
/**
|
|
16
|
+
* Whether to sanitize the value before saving it to the database.
|
|
17
|
+
* If true, the value will be escaped to prevent XSS attacks.
|
|
18
|
+
* If false, the value will be saved as is (raw input).
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
sanitize: z.ZodOptional<z.ZodBoolean>;
|
|
22
|
+
}, z.core.$strict>;
|
|
23
|
+
type Config = z.infer<typeof configSchema>;
|
|
24
|
+
export declare class TextField extends Field<'text', Config> {
|
|
25
|
+
static readonly [entityKind]: string;
|
|
26
|
+
readonly maxLength: number | undefined;
|
|
27
|
+
readonly minLength: number | undefined;
|
|
28
|
+
readonly placeholder: string | undefined;
|
|
29
|
+
private readonly _defaultValue;
|
|
30
|
+
value: string | undefined;
|
|
31
|
+
readonly sanitize: boolean;
|
|
32
|
+
constructor(config: BaseFieldConfig<Config>);
|
|
33
|
+
/**
|
|
34
|
+
* Sanitize the value
|
|
35
|
+
*/
|
|
36
|
+
private sanitizeValue;
|
|
37
|
+
exportForClient(): {
|
|
38
|
+
maxLength: number | undefined;
|
|
39
|
+
minLength: number | undefined;
|
|
40
|
+
placeholder: string | undefined;
|
|
41
|
+
sanitize: boolean;
|
|
42
|
+
type: "text";
|
|
43
|
+
name: string;
|
|
44
|
+
label: string;
|
|
45
|
+
required: boolean;
|
|
46
|
+
conditionalFields: import("../types/index.js").ConditionalField[];
|
|
47
|
+
readonly: boolean;
|
|
48
|
+
defaultValue: any;
|
|
49
|
+
value: any;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Get the value of the field
|
|
53
|
+
*/
|
|
54
|
+
getValue(): string | undefined;
|
|
55
|
+
checkRequired(): void;
|
|
56
|
+
hasSqlNameAndValue(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Prepare the field for submission
|
|
59
|
+
*/
|
|
60
|
+
prepareForSubmission(): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
export type TextFieldClientConfig = ReturnType<TextField['exportForClient']>;
|
|
63
|
+
declare const optionsSchema: z.ZodObject<{
|
|
64
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
65
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
66
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
67
|
+
/**
|
|
68
|
+
* The default value of the field.
|
|
69
|
+
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
70
|
+
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
71
|
+
*/
|
|
72
|
+
defaultValue: z.ZodOptional<z.ZodString>;
|
|
73
|
+
/**
|
|
74
|
+
* Whether to sanitize the value before saving it to the database.
|
|
75
|
+
* If true, the value will be escaped to prevent XSS attacks.
|
|
76
|
+
* If false, the value will be saved as is (raw input).
|
|
77
|
+
* @default false
|
|
78
|
+
*/
|
|
79
|
+
sanitize: z.ZodOptional<z.ZodBoolean>;
|
|
80
|
+
name: z.ZodString;
|
|
81
|
+
label: z.ZodOptional<z.ZodString>;
|
|
82
|
+
required: z.ZodOptional<z.ZodBoolean>;
|
|
83
|
+
order: z.ZodOptional<z.ZodNumber>;
|
|
84
|
+
conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
|
|
85
|
+
adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
|
|
86
|
+
}, z.core.$strict>;
|
|
87
|
+
declare const textFieldConfigSchema: z.ZodObject<{
|
|
88
|
+
type: z.ZodLiteral<"text">;
|
|
89
|
+
build: z.ZodFunction<z.core.$ZodFunctionArgs, z.ZodCustom<TextField, TextField>>;
|
|
90
|
+
placeholder: z.ZodOptional<z.ZodString>;
|
|
91
|
+
minLength: z.ZodOptional<z.ZodNumber>;
|
|
92
|
+
maxLength: z.ZodOptional<z.ZodNumber>;
|
|
93
|
+
/**
|
|
94
|
+
* The default value of the field.
|
|
95
|
+
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
96
|
+
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
97
|
+
*/
|
|
98
|
+
defaultValue: z.ZodOptional<z.ZodString>;
|
|
99
|
+
/**
|
|
100
|
+
* Whether to sanitize the value before saving it to the database.
|
|
101
|
+
* If true, the value will be escaped to prevent XSS attacks.
|
|
102
|
+
* If false, the value will be saved as is (raw input).
|
|
103
|
+
* @default false
|
|
104
|
+
*/
|
|
105
|
+
sanitize: z.ZodOptional<z.ZodBoolean>;
|
|
106
|
+
name: z.ZodString;
|
|
107
|
+
label: z.ZodOptional<z.ZodString>;
|
|
108
|
+
required: z.ZodOptional<z.ZodBoolean>;
|
|
109
|
+
order: z.ZodOptional<z.ZodNumber>;
|
|
110
|
+
conditionalRules: z.ZodOptional<z.ZodArray<z.ZodCustom<import("../types/index.js").ConditionalRule, import("../types/index.js").ConditionalRule>>>;
|
|
111
|
+
adminGenerated: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<true>, z.ZodLiteral<false>, z.ZodLiteral<"readonly">]>>;
|
|
112
|
+
}, z.core.$strict>;
|
|
113
|
+
/**
|
|
114
|
+
* Text field configuration type
|
|
115
|
+
* This is a plain object that can be serialized and used anywhere
|
|
116
|
+
* The build() method allows creating a TextField instance when needed
|
|
117
|
+
*/
|
|
118
|
+
export type TextFieldConfig = z.infer<typeof textFieldConfigSchema>;
|
|
119
|
+
/**
|
|
120
|
+
* Helper function to create a text field configuration
|
|
121
|
+
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* ```typescript
|
|
125
|
+
* const fieldConfig = textField({ name: 'title', label: 'Title', required: true, order: 1 })
|
|
126
|
+
* // Use as config (serializable)
|
|
127
|
+
* const config = JSON.stringify(fieldConfig) // methods are ignored during serialization
|
|
128
|
+
* // Build instance when needed
|
|
129
|
+
* const fieldInstance = fieldConfig.build()
|
|
130
|
+
* ```
|
|
131
|
+
*
|
|
132
|
+
* @param field
|
|
133
|
+
*/
|
|
134
|
+
export declare function textField(field: z.infer<typeof optionsSchema>): TextFieldConfig;
|
|
135
|
+
export {};
|
|
136
136
|
//# sourceMappingURL=text.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/core/fields/text.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/core/fields/text.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;AAGxB,QAAA,MAAM,YAAY;;;;IAId;;;;OAIG;;IAEH;;;;;OAKG;;kBAEL,CAAA;AAEF,KAAK,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAE1C,qBAAa,SAAU,SAAQ,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;IAChD,gBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,CAAc;IAC3D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IACzC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;gBAEd,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;IAU3C;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBL,eAAe;;;;;;;;;;;;;;IAU/B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,SAAS;IAI9B,aAAa;IAWJ,kBAAkB,IAAI,OAAO;IAOtC;;OAEG;IACG,oBAAoB;CAyB7B;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAE5E,QAAA,MAAM,aAAa;;;;IA1Hf;;;;OAIG;;IAEH;;;;;OAKG;;;;;;;;kBAkHL,CAAA;AAEF,QAAA,MAAM,qBAAqB;;;;;;IA/HvB;;;;OAIG;;IAEH;;;;;OAKG;;;;;;;;kBAwHL,CAAA;AAEF;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAAG,eAAe,CAmB/E"}
|
package/dist/core/fields/text.js
CHANGED
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
import { Field, baseFieldConfigSchema } from
|
|
2
|
-
import { entityKind } from
|
|
3
|
-
import * as z from 'zod';
|
|
4
|
-
import { escapeHTML } from
|
|
5
|
-
const configSchema = z.strictObject({
|
|
6
|
-
placeholder: z.string().optional().describe('The placeholder text for the field'),
|
|
7
|
-
minLength: z.number().optional().describe('The minimum length of the field value'),
|
|
8
|
-
maxLength: z.number().optional().describe('The maximum length of the field value'),
|
|
9
|
-
/**
|
|
10
|
-
* The default value of the field.
|
|
11
|
-
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
12
|
-
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
13
|
-
*/
|
|
14
|
-
defaultValue: z.string().optional().describe('The default value of the field'),
|
|
15
|
-
/**
|
|
16
|
-
* Whether to sanitize the value before saving it to the database.
|
|
17
|
-
* If true, the value will be escaped to prevent XSS attacks.
|
|
18
|
-
* If false, the value will be saved as is (raw input).
|
|
19
|
-
* @default false
|
|
20
|
-
*/
|
|
21
|
-
sanitize: z.boolean().optional().describe('Sanitize the value before saving'),
|
|
22
|
-
});
|
|
23
|
-
export class TextField extends Field {
|
|
24
|
-
static [entityKind] = 'TextField';
|
|
25
|
-
maxLength;
|
|
26
|
-
minLength;
|
|
27
|
-
placeholder;
|
|
28
|
-
_defaultValue;
|
|
29
|
-
value;
|
|
30
|
-
sanitize;
|
|
31
|
-
constructor(config) {
|
|
32
|
-
super(config, 'text');
|
|
33
|
-
this.maxLength = config.maxLength;
|
|
34
|
-
this.minLength = config.minLength;
|
|
35
|
-
this.placeholder = config.placeholder;
|
|
36
|
-
this.value = config.defaultValue;
|
|
37
|
-
this._defaultValue = config.defaultValue;
|
|
38
|
-
this.sanitize = config.sanitize ?? false;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Sanitize the value
|
|
42
|
-
*/
|
|
43
|
-
sanitizeValue() {
|
|
44
|
-
/**
|
|
45
|
-
* Check if the value is not undefined
|
|
46
|
-
*/
|
|
47
|
-
if (this.value !== undefined && this.sanitize) {
|
|
48
|
-
/**
|
|
49
|
-
* Sanitize the value
|
|
50
|
-
*/
|
|
51
|
-
this.value = escapeHTML(this.value);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
/*public override async postSubmit(): Promise<void> {
|
|
55
|
-
return
|
|
56
|
-
}*/
|
|
57
|
-
exportForClient() {
|
|
58
|
-
return {
|
|
59
|
-
...super.exportForClient(),
|
|
60
|
-
maxLength: this.maxLength,
|
|
61
|
-
minLength: this.minLength,
|
|
62
|
-
placeholder: this.placeholder,
|
|
63
|
-
sanitize: this.sanitize,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get the value of the field
|
|
68
|
-
*/
|
|
69
|
-
getValue() {
|
|
70
|
-
return this.value;
|
|
71
|
-
}
|
|
72
|
-
checkRequired() {
|
|
73
|
-
/**
|
|
74
|
-
* Check if the field is required
|
|
75
|
-
*/
|
|
76
|
-
if (this.required) {
|
|
77
|
-
if (!this.value || this.value.trim().length === 0) {
|
|
78
|
-
throw new Error(`Field ${this.label} is required`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
hasSqlNameAndValue() {
|
|
83
|
-
/**
|
|
84
|
-
* Include the field in the SQL if it is admin-generated, or not admin-generated but has a default value
|
|
85
|
-
*/
|
|
86
|
-
return this.adminGenerated === true || this._defaultValue !== undefined;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Prepare the field for submission
|
|
90
|
-
*/
|
|
91
|
-
async prepareForSubmission() {
|
|
92
|
-
/**
|
|
93
|
-
* Sanitize the value
|
|
94
|
-
*/
|
|
95
|
-
this.sanitizeValue();
|
|
96
|
-
if (this.value) {
|
|
97
|
-
/**
|
|
98
|
-
* Check minimum length
|
|
99
|
-
*/
|
|
100
|
-
if (this.minLength) {
|
|
101
|
-
if (this.minLength > this.value.length) {
|
|
102
|
-
throw new Error(`Field ${this.label} must be at least ${this.minLength} characters long`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Check maximum length
|
|
107
|
-
*/
|
|
108
|
-
if (this.maxLength) {
|
|
109
|
-
if (this.maxLength < this.value.length) {
|
|
110
|
-
throw new Error(`Field ${this.label} must be at most ${this.maxLength} characters long`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
const optionsSchema = z.strictObject({
|
|
117
|
-
...baseFieldConfigSchema.shape,
|
|
118
|
-
...configSchema.shape,
|
|
119
|
-
});
|
|
120
|
-
const textFieldConfigSchema = z.strictObject({
|
|
121
|
-
...optionsSchema.shape,
|
|
122
|
-
type: z.literal('text').describe('The type of the field'),
|
|
123
|
-
build: z.function().output(z.instanceof(TextField)).describe('Build a TextField instance from this config'),
|
|
124
|
-
});
|
|
125
|
-
/**
|
|
126
|
-
* Helper function to create a text field configuration
|
|
127
|
-
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* ```typescript
|
|
131
|
-
* const fieldConfig = textField({ name: 'title', label: 'Title', required: true, order: 1 })
|
|
132
|
-
* // Use as config (serializable)
|
|
133
|
-
* const config = JSON.stringify(fieldConfig) // methods are ignored during serialization
|
|
134
|
-
* // Build instance when needed
|
|
135
|
-
* const fieldInstance = fieldConfig.build()
|
|
136
|
-
* ```
|
|
137
|
-
*
|
|
138
|
-
* @param field
|
|
139
|
-
*/
|
|
140
|
-
export function textField(field) {
|
|
141
|
-
/**
|
|
142
|
-
* Validate the field config
|
|
143
|
-
*/
|
|
144
|
-
const result = optionsSchema.safeParse(field);
|
|
145
|
-
if (!result.success) {
|
|
146
|
-
throw new Error(`[Field: ${field.name}]: ${z.prettifyError(result.error)}`);
|
|
147
|
-
}
|
|
148
|
-
const config = {
|
|
149
|
-
...field,
|
|
150
|
-
type: 'text',
|
|
151
|
-
build() {
|
|
152
|
-
// Use the original field config directly (it doesn't have build() method)
|
|
153
|
-
return new TextField(field);
|
|
154
|
-
},
|
|
155
|
-
};
|
|
156
|
-
return config;
|
|
157
|
-
}
|
|
1
|
+
import { Field, baseFieldConfigSchema } from './field.js';
|
|
2
|
+
import { entityKind } from '../helpers/index.js';
|
|
3
|
+
import * as z from 'zod';
|
|
4
|
+
import { escapeHTML } from '../security/dom.js';
|
|
5
|
+
const configSchema = z.strictObject({
|
|
6
|
+
placeholder: z.string().optional().describe('The placeholder text for the field'),
|
|
7
|
+
minLength: z.number().optional().describe('The minimum length of the field value'),
|
|
8
|
+
maxLength: z.number().optional().describe('The maximum length of the field value'),
|
|
9
|
+
/**
|
|
10
|
+
* The default value of the field.
|
|
11
|
+
* If set, the field will be pre-populated with this value when the form is loaded.
|
|
12
|
+
* If `adminGenerated` is not true, the field will be included when submitting the form with this value.
|
|
13
|
+
*/
|
|
14
|
+
defaultValue: z.string().optional().describe('The default value of the field'),
|
|
15
|
+
/**
|
|
16
|
+
* Whether to sanitize the value before saving it to the database.
|
|
17
|
+
* If true, the value will be escaped to prevent XSS attacks.
|
|
18
|
+
* If false, the value will be saved as is (raw input).
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
sanitize: z.boolean().optional().describe('Sanitize the value before saving'),
|
|
22
|
+
});
|
|
23
|
+
export class TextField extends Field {
|
|
24
|
+
static [entityKind] = 'TextField';
|
|
25
|
+
maxLength;
|
|
26
|
+
minLength;
|
|
27
|
+
placeholder;
|
|
28
|
+
_defaultValue;
|
|
29
|
+
value;
|
|
30
|
+
sanitize;
|
|
31
|
+
constructor(config) {
|
|
32
|
+
super(config, 'text');
|
|
33
|
+
this.maxLength = config.maxLength;
|
|
34
|
+
this.minLength = config.minLength;
|
|
35
|
+
this.placeholder = config.placeholder;
|
|
36
|
+
this.value = config.defaultValue;
|
|
37
|
+
this._defaultValue = config.defaultValue;
|
|
38
|
+
this.sanitize = config.sanitize ?? false;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sanitize the value
|
|
42
|
+
*/
|
|
43
|
+
sanitizeValue() {
|
|
44
|
+
/**
|
|
45
|
+
* Check if the value is not undefined
|
|
46
|
+
*/
|
|
47
|
+
if (this.value !== undefined && this.sanitize) {
|
|
48
|
+
/**
|
|
49
|
+
* Sanitize the value
|
|
50
|
+
*/
|
|
51
|
+
this.value = escapeHTML(this.value);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/*public override async postSubmit(): Promise<void> {
|
|
55
|
+
return
|
|
56
|
+
}*/
|
|
57
|
+
exportForClient() {
|
|
58
|
+
return {
|
|
59
|
+
...super.exportForClient(),
|
|
60
|
+
maxLength: this.maxLength,
|
|
61
|
+
minLength: this.minLength,
|
|
62
|
+
placeholder: this.placeholder,
|
|
63
|
+
sanitize: this.sanitize,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the value of the field
|
|
68
|
+
*/
|
|
69
|
+
getValue() {
|
|
70
|
+
return this.value;
|
|
71
|
+
}
|
|
72
|
+
checkRequired() {
|
|
73
|
+
/**
|
|
74
|
+
* Check if the field is required
|
|
75
|
+
*/
|
|
76
|
+
if (this.required) {
|
|
77
|
+
if (!this.value || this.value.trim().length === 0) {
|
|
78
|
+
throw new Error(`Field ${this.label} is required`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
hasSqlNameAndValue() {
|
|
83
|
+
/**
|
|
84
|
+
* Include the field in the SQL if it is admin-generated, or not admin-generated but has a default value
|
|
85
|
+
*/
|
|
86
|
+
return this.adminGenerated === true || this._defaultValue !== undefined;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Prepare the field for submission
|
|
90
|
+
*/
|
|
91
|
+
async prepareForSubmission() {
|
|
92
|
+
/**
|
|
93
|
+
* Sanitize the value
|
|
94
|
+
*/
|
|
95
|
+
this.sanitizeValue();
|
|
96
|
+
if (this.value) {
|
|
97
|
+
/**
|
|
98
|
+
* Check minimum length
|
|
99
|
+
*/
|
|
100
|
+
if (this.minLength) {
|
|
101
|
+
if (this.minLength > this.value.length) {
|
|
102
|
+
throw new Error(`Field ${this.label} must be at least ${this.minLength} characters long`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check maximum length
|
|
107
|
+
*/
|
|
108
|
+
if (this.maxLength) {
|
|
109
|
+
if (this.maxLength < this.value.length) {
|
|
110
|
+
throw new Error(`Field ${this.label} must be at most ${this.maxLength} characters long`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const optionsSchema = z.strictObject({
|
|
117
|
+
...baseFieldConfigSchema.shape,
|
|
118
|
+
...configSchema.shape,
|
|
119
|
+
});
|
|
120
|
+
const textFieldConfigSchema = z.strictObject({
|
|
121
|
+
...optionsSchema.shape,
|
|
122
|
+
type: z.literal('text').describe('The type of the field'),
|
|
123
|
+
build: z.function().output(z.instanceof(TextField)).describe('Build a TextField instance from this config'),
|
|
124
|
+
});
|
|
125
|
+
/**
|
|
126
|
+
* Helper function to create a text field configuration
|
|
127
|
+
* Returns a config object with a build() method that can be serialized and used anywhere
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* const fieldConfig = textField({ name: 'title', label: 'Title', required: true, order: 1 })
|
|
132
|
+
* // Use as config (serializable)
|
|
133
|
+
* const config = JSON.stringify(fieldConfig) // methods are ignored during serialization
|
|
134
|
+
* // Build instance when needed
|
|
135
|
+
* const fieldInstance = fieldConfig.build()
|
|
136
|
+
* ```
|
|
137
|
+
*
|
|
138
|
+
* @param field
|
|
139
|
+
*/
|
|
140
|
+
export function textField(field) {
|
|
141
|
+
/**
|
|
142
|
+
* Validate the field config
|
|
143
|
+
*/
|
|
144
|
+
const result = optionsSchema.safeParse(field);
|
|
145
|
+
if (!result.success) {
|
|
146
|
+
throw new Error(`[Field: ${field.name}]: ${z.prettifyError(result.error)}`);
|
|
147
|
+
}
|
|
148
|
+
const config = {
|
|
149
|
+
...field,
|
|
150
|
+
type: 'text',
|
|
151
|
+
build() {
|
|
152
|
+
// Use the original field config directly (it doesn't have build() method)
|
|
153
|
+
return new TextField(field);
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
return config;
|
|
157
|
+
}
|