@vexcms/core 0.0.20 → 0.1.0-alpha.3
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/LICENSE +202 -0
- package/dist/.build +1 -0
- package/dist/access/buildChecks.d.ts +58 -0
- package/dist/access/buildChecks.d.ts.map +1 -0
- package/dist/access/canAccessAdminPanel.d.ts +53 -0
- package/dist/access/canAccessAdminPanel.d.ts.map +1 -0
- package/dist/access/compileConstraints.d.ts +155 -0
- package/dist/access/compileConstraints.d.ts.map +1 -0
- package/dist/access/config.d.ts +62 -0
- package/dist/access/config.d.ts.map +1 -0
- package/dist/access/constants.d.ts +95 -0
- package/dist/access/constants.d.ts.map +1 -0
- package/dist/access/constraintTypes.d.ts +337 -0
- package/dist/access/constraintTypes.d.ts.map +1 -0
- package/dist/access/createAccessQueryBuilder.d.ts +59 -0
- package/dist/access/createAccessQueryBuilder.d.ts.map +1 -0
- package/dist/access/createFilterConstraintBuilder.d.ts +26 -0
- package/dist/access/createFilterConstraintBuilder.d.ts.map +1 -0
- package/dist/access/createIndexConstraintBuilder.d.ts +40 -0
- package/dist/access/createIndexConstraintBuilder.d.ts.map +1 -0
- package/dist/access/hasPermission.d.ts +85 -0
- package/dist/access/hasPermission.d.ts.map +1 -0
- package/dist/access/index.d.ts +13 -0
- package/dist/access/index.d.ts.map +1 -0
- package/dist/access/pickQueryIndex.d.ts +42 -0
- package/dist/access/pickQueryIndex.d.ts.map +1 -0
- package/dist/access/resolveAccessRule.d.ts +85 -0
- package/dist/access/resolveAccessRule.d.ts.map +1 -0
- package/dist/access/types.d.ts +738 -0
- package/dist/access/types.d.ts.map +1 -0
- package/dist/access/validateAccessConstraints.d.ts +57 -0
- package/dist/access/validateAccessConstraints.d.ts.map +1 -0
- package/dist/api/client.d.ts +20 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +117 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/convex.d.ts +296 -0
- package/dist/api/convex.d.ts.map +1 -0
- package/dist/api/create/client.d.ts +50 -0
- package/dist/api/create/client.d.ts.map +1 -0
- package/dist/api/create/server.d.ts +43 -0
- package/dist/api/create/server.d.ts.map +1 -0
- package/dist/api/depth.d.ts +39 -0
- package/dist/api/depth.d.ts.map +1 -0
- package/dist/api/find/client.d.ts +90 -0
- package/dist/api/find/client.d.ts.map +1 -0
- package/dist/api/find/server.d.ts +73 -0
- package/dist/api/find/server.d.ts.map +1 -0
- package/dist/api/get/client.d.ts +56 -0
- package/dist/api/get/client.d.ts.map +1 -0
- package/dist/api/get/server.d.ts +49 -0
- package/dist/api/get/server.d.ts.map +1 -0
- package/dist/api/globals/find.client.d.ts +20 -0
- package/dist/api/globals/find.client.d.ts.map +1 -0
- package/dist/api/globals/find.server.d.ts +29 -0
- package/dist/api/globals/find.server.d.ts.map +1 -0
- package/dist/api/globals/get.client.d.ts +46 -0
- package/dist/api/globals/get.client.d.ts.map +1 -0
- package/dist/api/globals/get.server.d.ts +55 -0
- package/dist/api/globals/get.server.d.ts.map +1 -0
- package/dist/api/globals/types.d.ts +65 -0
- package/dist/api/globals/types.d.ts.map +1 -0
- package/dist/api/globals/upsert.client.d.ts +24 -0
- package/dist/api/globals/upsert.client.d.ts.map +1 -0
- package/dist/api/globals/upsert.server.d.ts +47 -0
- package/dist/api/globals/upsert.server.d.ts.map +1 -0
- package/dist/api/populate.d.ts +23 -0
- package/dist/api/populate.d.ts.map +1 -0
- package/dist/api/remove/client.d.ts +58 -0
- package/dist/api/remove/client.d.ts.map +1 -0
- package/dist/api/remove/server.d.ts +65 -0
- package/dist/api/remove/server.d.ts.map +1 -0
- package/dist/api/search/client.d.ts +58 -0
- package/dist/api/search/client.d.ts.map +1 -0
- package/dist/api/search/server.d.ts +54 -0
- package/dist/api/search/server.d.ts.map +1 -0
- package/dist/api/server.d.ts +370 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +33 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/types.d.ts +525 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/update/client.d.ts +53 -0
- package/dist/api/update/client.d.ts.map +1 -0
- package/dist/api/update/server.d.ts +47 -0
- package/dist/api/update/server.d.ts.map +1 -0
- package/dist/api/utils.d.ts +57 -0
- package/dist/api/utils.d.ts.map +1 -0
- package/dist/auth/mergeCollections.d.ts +28 -0
- package/dist/auth/mergeCollections.d.ts.map +1 -0
- package/dist/auth/types.d.ts +84 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/chunk-2DU7JDEX.js +1877 -0
- package/dist/chunk-2DU7JDEX.js.map +1 -0
- package/dist/chunk-2IB2DCN7.js +75 -0
- package/dist/chunk-2IB2DCN7.js.map +1 -0
- package/dist/collections/config.d.ts +28 -0
- package/dist/collections/config.d.ts.map +1 -0
- package/dist/collections/constants.d.ts +27 -0
- package/dist/collections/constants.d.ts.map +1 -0
- package/dist/collections/index.d.ts +7 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/indexFields.d.ts +20 -0
- package/dist/collections/indexFields.d.ts.map +1 -0
- package/dist/collections/interfaceGen.d.ts +59 -0
- package/dist/collections/interfaceGen.d.ts.map +1 -0
- package/dist/collections/internal/index.d.ts +2 -0
- package/dist/collections/internal/index.d.ts.map +1 -0
- package/dist/collections/types.d.ts +282 -0
- package/dist/collections/types.d.ts.map +1 -0
- package/dist/collections/utils.d.ts +71 -0
- package/dist/collections/utils.d.ts.map +1 -0
- package/dist/collections/validator.d.ts +73 -0
- package/dist/collections/validator.d.ts.map +1 -0
- package/dist/config/config.d.ts +43 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/sanitizeConfig.d.ts +82 -0
- package/dist/config/sanitizeConfig.d.ts.map +1 -0
- package/dist/config/types.d.ts +316 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/fields/array/config.d.ts +57 -0
- package/dist/fields/array/config.d.ts.map +1 -0
- package/dist/fields/array/index.d.ts +5 -0
- package/dist/fields/array/index.d.ts.map +1 -0
- package/dist/fields/array/inputSchema.d.ts +32 -0
- package/dist/fields/array/inputSchema.d.ts.map +1 -0
- package/dist/fields/array/types.d.ts +127 -0
- package/dist/fields/array/types.d.ts.map +1 -0
- package/dist/fields/array/validator.d.ts +30 -0
- package/dist/fields/array/validator.d.ts.map +1 -0
- package/dist/fields/baseTypes.d.ts +251 -0
- package/dist/fields/baseTypes.d.ts.map +1 -0
- package/dist/fields/blocks/config.d.ts +63 -0
- package/dist/fields/blocks/config.d.ts.map +1 -0
- package/dist/fields/blocks/index.d.ts +5 -0
- package/dist/fields/blocks/index.d.ts.map +1 -0
- package/dist/fields/blocks/inputSchema.d.ts +22 -0
- package/dist/fields/blocks/inputSchema.d.ts.map +1 -0
- package/dist/fields/blocks/types.d.ts +253 -0
- package/dist/fields/blocks/types.d.ts.map +1 -0
- package/dist/fields/blocks/validator.d.ts +32 -0
- package/dist/fields/blocks/validator.d.ts.map +1 -0
- package/dist/fields/checkbox/config.d.ts +46 -0
- package/dist/fields/checkbox/config.d.ts.map +1 -0
- package/dist/fields/checkbox/index.d.ts +5 -0
- package/dist/fields/checkbox/index.d.ts.map +1 -0
- package/dist/fields/checkbox/inputSchema.d.ts +27 -0
- package/dist/fields/checkbox/inputSchema.d.ts.map +1 -0
- package/dist/fields/checkbox/types.d.ts +67 -0
- package/dist/fields/checkbox/types.d.ts.map +1 -0
- package/dist/fields/checkbox/validator.d.ts +34 -0
- package/dist/fields/checkbox/validator.d.ts.map +1 -0
- package/dist/fields/color/config.d.ts +49 -0
- package/dist/fields/color/config.d.ts.map +1 -0
- package/dist/fields/color/convert.d.ts +72 -0
- package/dist/fields/color/convert.d.ts.map +1 -0
- package/dist/fields/color/formats.d.ts +38 -0
- package/dist/fields/color/formats.d.ts.map +1 -0
- package/dist/fields/color/index.d.ts +8 -0
- package/dist/fields/color/index.d.ts.map +1 -0
- package/dist/fields/color/inputSchema.d.ts +29 -0
- package/dist/fields/color/inputSchema.d.ts.map +1 -0
- package/dist/fields/color/types.d.ts +100 -0
- package/dist/fields/color/types.d.ts.map +1 -0
- package/dist/fields/color/utils.d.ts +100 -0
- package/dist/fields/color/utils.d.ts.map +1 -0
- package/dist/fields/color/validator.d.ts +27 -0
- package/dist/fields/color/validator.d.ts.map +1 -0
- package/dist/fields/constants.d.ts +108 -0
- package/dist/fields/constants.d.ts.map +1 -0
- package/dist/fields/date/config.d.ts +57 -0
- package/dist/fields/date/config.d.ts.map +1 -0
- package/dist/fields/date/index.d.ts +5 -0
- package/dist/fields/date/index.d.ts.map +1 -0
- package/dist/fields/date/inputSchema.d.ts +29 -0
- package/dist/fields/date/inputSchema.d.ts.map +1 -0
- package/dist/fields/date/types.d.ts +147 -0
- package/dist/fields/date/types.d.ts.map +1 -0
- package/dist/fields/date/validator.d.ts +34 -0
- package/dist/fields/date/validator.d.ts.map +1 -0
- package/dist/fields/group/config.d.ts +47 -0
- package/dist/fields/group/config.d.ts.map +1 -0
- package/dist/fields/group/index.d.ts +5 -0
- package/dist/fields/group/index.d.ts.map +1 -0
- package/dist/fields/group/inputSchema.d.ts +27 -0
- package/dist/fields/group/inputSchema.d.ts.map +1 -0
- package/dist/fields/group/types.d.ts +105 -0
- package/dist/fields/group/types.d.ts.map +1 -0
- package/dist/fields/group/validator.d.ts +41 -0
- package/dist/fields/group/validator.d.ts.map +1 -0
- package/dist/fields/index.d.ts +20 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/inputSchemas/index.d.ts +23 -0
- package/dist/fields/inputSchemas/index.d.ts.map +1 -0
- package/dist/fields/inputSchemas/utils.d.ts +25 -0
- package/dist/fields/inputSchemas/utils.d.ts.map +1 -0
- package/dist/fields/interfaceGen.d.ts +15 -0
- package/dist/fields/interfaceGen.d.ts.map +1 -0
- package/dist/fields/number/config.d.ts +48 -0
- package/dist/fields/number/config.d.ts.map +1 -0
- package/dist/fields/number/index.d.ts +5 -0
- package/dist/fields/number/index.d.ts.map +1 -0
- package/dist/fields/number/inputSchema.d.ts +23 -0
- package/dist/fields/number/inputSchema.d.ts.map +1 -0
- package/dist/fields/number/types.d.ts +100 -0
- package/dist/fields/number/types.d.ts.map +1 -0
- package/dist/fields/number/validator.d.ts +39 -0
- package/dist/fields/number/validator.d.ts.map +1 -0
- package/dist/fields/relationship/config.d.ts +45 -0
- package/dist/fields/relationship/config.d.ts.map +1 -0
- package/dist/fields/relationship/index.d.ts +5 -0
- package/dist/fields/relationship/index.d.ts.map +1 -0
- package/dist/fields/relationship/inputSchema.d.ts +31 -0
- package/dist/fields/relationship/inputSchema.d.ts.map +1 -0
- package/dist/fields/relationship/types.d.ts +126 -0
- package/dist/fields/relationship/types.d.ts.map +1 -0
- package/dist/fields/relationship/validator.d.ts +27 -0
- package/dist/fields/relationship/validator.d.ts.map +1 -0
- package/dist/fields/select/config.d.ts +59 -0
- package/dist/fields/select/config.d.ts.map +1 -0
- package/dist/fields/select/index.d.ts +5 -0
- package/dist/fields/select/index.d.ts.map +1 -0
- package/dist/fields/select/inputSchema.d.ts +28 -0
- package/dist/fields/select/inputSchema.d.ts.map +1 -0
- package/dist/fields/select/types.d.ts +89 -0
- package/dist/fields/select/types.d.ts.map +1 -0
- package/dist/fields/select/validator.d.ts +31 -0
- package/dist/fields/select/validator.d.ts.map +1 -0
- package/dist/fields/text/config.d.ts +48 -0
- package/dist/fields/text/config.d.ts.map +1 -0
- package/dist/fields/text/index.d.ts +5 -0
- package/dist/fields/text/index.d.ts.map +1 -0
- package/dist/fields/text/inputSchema.d.ts +24 -0
- package/dist/fields/text/inputSchema.d.ts.map +1 -0
- package/dist/fields/text/types.d.ts +132 -0
- package/dist/fields/text/types.d.ts.map +1 -0
- package/dist/fields/text/validator.d.ts +39 -0
- package/dist/fields/text/validator.d.ts.map +1 -0
- package/dist/fields/types.d.ts +135 -0
- package/dist/fields/types.d.ts.map +1 -0
- package/dist/fields/upload/config.d.ts +24 -0
- package/dist/fields/upload/config.d.ts.map +1 -0
- package/dist/fields/upload/index.d.ts +5 -0
- package/dist/fields/upload/index.d.ts.map +1 -0
- package/dist/fields/upload/inputSchema.d.ts +17 -0
- package/dist/fields/upload/inputSchema.d.ts.map +1 -0
- package/dist/fields/upload/types.d.ts +78 -0
- package/dist/fields/upload/types.d.ts.map +1 -0
- package/dist/fields/upload/validator.d.ts +16 -0
- package/dist/fields/upload/validator.d.ts.map +1 -0
- package/dist/fields/url/config.d.ts +49 -0
- package/dist/fields/url/config.d.ts.map +1 -0
- package/dist/fields/url/index.d.ts +5 -0
- package/dist/fields/url/index.d.ts.map +1 -0
- package/dist/fields/url/inputSchema.d.ts +31 -0
- package/dist/fields/url/inputSchema.d.ts.map +1 -0
- package/dist/fields/url/types.d.ts +70 -0
- package/dist/fields/url/types.d.ts.map +1 -0
- package/dist/fields/url/validator.d.ts +37 -0
- package/dist/fields/url/validator.d.ts.map +1 -0
- package/dist/fields/utils.d.ts +47 -0
- package/dist/fields/utils.d.ts.map +1 -0
- package/dist/fields/validators/index.d.ts +23 -0
- package/dist/fields/validators/index.d.ts.map +1 -0
- package/dist/fields/validators/utils.d.ts +24 -0
- package/dist/fields/validators/utils.d.ts.map +1 -0
- package/dist/framework.d.ts +227 -0
- package/dist/framework.d.ts.map +1 -0
- package/dist/globals/config/config.d.ts +1 -0
- package/dist/globals/config/config.d.ts.map +1 -0
- package/dist/globals/config/types.d.ts +1 -0
- package/dist/globals/config/types.d.ts.map +1 -0
- package/dist/globals/config.d.ts +47 -0
- package/dist/globals/config.d.ts.map +1 -0
- package/dist/globals/index.d.ts +5 -0
- package/dist/globals/index.d.ts.map +1 -0
- package/dist/globals/interfaceGen.d.ts +33 -0
- package/dist/globals/interfaceGen.d.ts.map +1 -0
- package/dist/globals/types.d.ts +175 -0
- package/dist/globals/types.d.ts.map +1 -0
- package/dist/globals/utils.d.ts +37 -0
- package/dist/globals/utils.d.ts.map +1 -0
- package/dist/index.d.ts +15 -3165
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2101 -3475
- package/dist/index.js.map +1 -1
- package/dist/media/api/index.d.ts +5 -0
- package/dist/media/api/index.d.ts.map +1 -0
- package/dist/media/api/mutations.d.ts +76 -0
- package/dist/media/api/mutations.d.ts.map +1 -0
- package/dist/media/api/queries.d.ts +28 -0
- package/dist/media/api/queries.d.ts.map +1 -0
- package/dist/media/api/server.d.ts +68 -0
- package/dist/media/api/server.d.ts.map +1 -0
- package/dist/media/api/types.d.ts +171 -0
- package/dist/media/api/types.d.ts.map +1 -0
- package/dist/media/config.d.ts +25 -0
- package/dist/media/config.d.ts.map +1 -0
- package/dist/media/index.d.ts +6 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/types.d.ts +332 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/utils.d.ts +35 -0
- package/dist/media/utils.d.ts.map +1 -0
- package/dist/media/validators.d.ts +61 -0
- package/dist/media/validators.d.ts.map +1 -0
- package/dist/schema/generateVexSchema.d.ts +36 -0
- package/dist/schema/generateVexSchema.d.ts.map +1 -0
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/migrate.d.ts +73 -0
- package/dist/schema/migrate.d.ts.map +1 -0
- package/dist/types/generateVexTypes.d.ts +41 -0
- package/dist/types/generateVexTypes.d.ts.map +1 -0
- package/dist/types/generated.d.ts +382 -0
- package/dist/types/generated.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils.d.ts +57 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +67 -24
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { ADMIN_FIELDS } from "../constants";
|
|
2
|
+
import { BaseField, BaseFieldInput, FieldAdminConfig } from "../baseTypes";
|
|
3
|
+
import { AdminField, BaseFieldMeta } from "../types";
|
|
4
|
+
/**
|
|
5
|
+
* Union of all types allowed as array item values.
|
|
6
|
+
*
|
|
7
|
+
* Supports the four JSON-compatible scalar types plus nested objects.
|
|
8
|
+
* Nested arrays are created by passing `array({ items: array({ items: ... }) })`.
|
|
9
|
+
*/
|
|
10
|
+
export type ArrayType = string | number | boolean | object;
|
|
11
|
+
/**
|
|
12
|
+
* Configuration input for an `array()` field.
|
|
13
|
+
*
|
|
14
|
+
* Array fields store ordered lists of values — strings, numbers, booleans,
|
|
15
|
+
* or nested objects. The `items` property defines the type of each element
|
|
16
|
+
* using any VexCMS field builder (including nested `array()` for multi-dimensional
|
|
17
|
+
* arrays). All properties are optional; unset properties fall back to the
|
|
18
|
+
* defaults listed below.
|
|
19
|
+
*
|
|
20
|
+
* **Defaults applied by `array()`:**
|
|
21
|
+
* ```ts
|
|
22
|
+
* {
|
|
23
|
+
* type: "array",
|
|
24
|
+
* label: "", // inferred from the field key by defineCollection
|
|
25
|
+
* labels: { singular: "Item", plural: "Items" },
|
|
26
|
+
* required: false, // field is optional by default
|
|
27
|
+
* defaultValue: [], // empty array shown in admin form
|
|
28
|
+
* admin: {
|
|
29
|
+
* hidden: false, // visible in the admin form
|
|
30
|
+
* readOnly: false, // editable by default
|
|
31
|
+
* position: "main", // placed in the main content column, not the sidebar
|
|
32
|
+
* width: "full", // spans the full form width, not half
|
|
33
|
+
* cellAlignment: "left", // item count aligned left in the data table column
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* // String tags — label inferred from key ("Tags")
|
|
41
|
+
* tags: array({ items: text() })
|
|
42
|
+
*
|
|
43
|
+
* // Required number array with max length
|
|
44
|
+
* scores: array({ required: true, items: number(), max: { value: 10 } })
|
|
45
|
+
*
|
|
46
|
+
* // Nested array — array of arrays of numbers (2D matrix)
|
|
47
|
+
* matrix: array({ items: array({ items: number() }) })
|
|
48
|
+
*
|
|
49
|
+
* // Object items — each item is a structured sub-document
|
|
50
|
+
* links: array({
|
|
51
|
+
* items: object({
|
|
52
|
+
* label: text(),
|
|
53
|
+
* href: url(),
|
|
54
|
+
* }),
|
|
55
|
+
* })
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* @see {@link BaseFieldInput} for shared properties (`label`, `description`, `required`, `admin`, `index`, `searchIndex`)
|
|
59
|
+
*/
|
|
60
|
+
export interface ArrayFieldInput<TArrayType extends ArrayType = string, TFieldMeta extends {} = {}> extends BaseFieldInput<TFieldMeta> {
|
|
61
|
+
labels?: {
|
|
62
|
+
singular: string;
|
|
63
|
+
plural: string;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Pre-filled value shown in the admin form when creating a new field.
|
|
67
|
+
* Does not apply to database values
|
|
68
|
+
*
|
|
69
|
+
*/
|
|
70
|
+
defaultValue?: TArrayType[];
|
|
71
|
+
items: AdminField;
|
|
72
|
+
/** Minimum array length config. */
|
|
73
|
+
min?: {
|
|
74
|
+
/** Minimum array length. */
|
|
75
|
+
value: number;
|
|
76
|
+
/** Minimum array length error message. */
|
|
77
|
+
error?: string;
|
|
78
|
+
};
|
|
79
|
+
/** Maximum array length config. */
|
|
80
|
+
max?: {
|
|
81
|
+
/** Maximum array length. */
|
|
82
|
+
value: number;
|
|
83
|
+
/** Maximum array length error message. */
|
|
84
|
+
error?: string;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Resolved configuration for an `array()` field, after all defaults are applied.
|
|
89
|
+
*
|
|
90
|
+
* This is the type that framework adapters and field components receive —
|
|
91
|
+
* `fieldDef` in `InputComponentProps<ArrayField<ArrayType>>` and
|
|
92
|
+
* `CellComponentProps<ArrayField<ArrayType>>` is this type.
|
|
93
|
+
*
|
|
94
|
+
* @see {@link ArrayFieldInput} for the user-facing input type
|
|
95
|
+
* @see {@link array} for the config function that produces this type
|
|
96
|
+
*/
|
|
97
|
+
export interface ArrayField<TArrayType extends ArrayType = string, TFieldMeta extends BaseFieldMeta = BaseFieldMeta> extends BaseField<TFieldMeta> {
|
|
98
|
+
readonly type: typeof ADMIN_FIELDS.array.type;
|
|
99
|
+
/** Display label shown in the admin form. Always set — inferred from the field key if not provided. */
|
|
100
|
+
label: string;
|
|
101
|
+
labels: {
|
|
102
|
+
singular: string;
|
|
103
|
+
plural: string;
|
|
104
|
+
};
|
|
105
|
+
/** Whether this field is required in the database schema. */
|
|
106
|
+
required: boolean;
|
|
107
|
+
/** Resolved admin UI configuration with all defaults applied. */
|
|
108
|
+
admin: FieldAdminConfig;
|
|
109
|
+
/** Pre-filled value shown in the admin form when creating a new field. */
|
|
110
|
+
defaultValue: TArrayType[];
|
|
111
|
+
items: AdminField;
|
|
112
|
+
/** Minimum allowed array length config. */
|
|
113
|
+
min?: {
|
|
114
|
+
/** Minimum allowed array length. */
|
|
115
|
+
value: number;
|
|
116
|
+
/** Minimum allowed array length error message. */
|
|
117
|
+
error?: string;
|
|
118
|
+
};
|
|
119
|
+
/** Maximum allowed array length config. */
|
|
120
|
+
max?: {
|
|
121
|
+
/** Maximum allowed array length. */
|
|
122
|
+
value: number;
|
|
123
|
+
/** Maximum allowed array length error message. */
|
|
124
|
+
error?: string;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fields/array/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAErD;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,WAAW,eAAe,CAC9B,UAAU,SAAS,SAAS,GAAG,MAAM,EACrC,UAAU,SAAS,EAAE,GAAG,EAAE,CAC1B,SAAQ,cAAc,CAAC,UAAU,CAAC;IAClC,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,mCAAmC;IACnC,GAAG,CAAC,EAAE;QACJ,4BAA4B;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,0CAA0C;QAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,mCAAmC;IACnC,GAAG,CAAC,EAAE;QACJ,4BAA4B;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,0CAA0C;QAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU,CACzB,UAAU,SAAS,SAAS,GAAG,MAAM,EACrC,UAAU,SAAS,aAAa,GAAG,aAAa,CAChD,SAAQ,SAAS,CAAC,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;IAC9C,uGAAuG;IACvG,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,KAAK,EAAE,gBAAgB,CAAC;IACxB,0EAA0E;IAC1E,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,2CAA2C;IAC3C,GAAG,CAAC,EAAE;QACJ,oCAAoC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,kDAAkD;QAClD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,2CAA2C;IAC3C,GAAG,CAAC,EAAE;QACJ,oCAAoC;QACpC,KAAK,EAAE,MAAM,CAAC;QACd,kDAAkD;QAClD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ArrayField, ArrayType } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Converts an array field definition to a Convex schema validator.
|
|
4
|
+
*
|
|
5
|
+
* Generates `v.array(itemValidator)` wrapped in `v.optional(…)` if the field
|
|
6
|
+
* is not required. The item validator is derived from the nested `field.items`
|
|
7
|
+
* field definition using `adminFieldToValidator`.
|
|
8
|
+
*
|
|
9
|
+
* @param props - Input props
|
|
10
|
+
* @param props.field - The array field definition
|
|
11
|
+
* @returns Convex value type string: `"v.array(v.string())"` or `"v.optional(v.array(v.string()))"`
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const field1 = array({ items: text(), required: true })
|
|
16
|
+
* arrayFieldToValidator({ field: field1 }) // "v.array(v.string())"
|
|
17
|
+
*
|
|
18
|
+
* const field2 = array({ items: number(), required: false })
|
|
19
|
+
* arrayFieldToValidator({ field: field2 }) // "v.optional(v.array(v.number()))"
|
|
20
|
+
*
|
|
21
|
+
* const field3 = array({ items: array({ items: number() }) })
|
|
22
|
+
* arrayFieldToValidator({ field: field3 }) // "v.array(v.array(v.number()))"
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @internal - Used by CLI schema generation
|
|
26
|
+
*/
|
|
27
|
+
export declare function arrayFieldToValidator<TArrayType extends ArrayType = ArrayType, TFieldMeta extends {} = {}>(props: {
|
|
28
|
+
field: ArrayField<TArrayType, TFieldMeta>;
|
|
29
|
+
}): string;
|
|
30
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/fields/array/validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,UAAU,SAAS,EAAE,GAAG,EAAE,EAC1B,KAAK,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;CAAE,GAAG,MAAM,CAM9D"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content alignment for data table cells.
|
|
3
|
+
*/
|
|
4
|
+
export type Alignment = "left" | "right" | "center";
|
|
5
|
+
/**
|
|
6
|
+
* Labels for items saved in numbers, collections, blocks, etc
|
|
7
|
+
*/
|
|
8
|
+
export type Labels = {
|
|
9
|
+
singular: string;
|
|
10
|
+
plural: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Higher-kinded type interface for framework-specific component constructors.
|
|
14
|
+
*
|
|
15
|
+
* Frameworks implement this to map a props type to their component type.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* interface ReactHKT extends ComponentHKT {
|
|
20
|
+
* component: React.ComponentType<this['_props']>;
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export interface ComponentHKT {
|
|
25
|
+
readonly _props: unknown;
|
|
26
|
+
readonly _extra: Record<string, unknown>;
|
|
27
|
+
readonly component: unknown;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Applies a ComponentHKT to specific props, resolving to the framework's component type.
|
|
31
|
+
*/
|
|
32
|
+
export type ApplyComponent<F extends ComponentHKT, P, E extends Record<string, unknown> = Record<string, never>> = (F & {
|
|
33
|
+
readonly _props: P;
|
|
34
|
+
readonly _extra: E;
|
|
35
|
+
})["component"];
|
|
36
|
+
/**
|
|
37
|
+
* Opaque runtime shape stored in the field config for a custom component.
|
|
38
|
+
* Created via a framework-specific factory (e.g. `fieldComponent()` in `@vex/react`).
|
|
39
|
+
*/
|
|
40
|
+
export type ComponentEntry = {
|
|
41
|
+
component: (props: any) => unknown;
|
|
42
|
+
props: Record<string, unknown>;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Configuration input for a field's admin panel behavior.
|
|
46
|
+
*
|
|
47
|
+
* Controls how the field appears and behaves in the admin UI — visibility,
|
|
48
|
+
* layout, input styling, and data table presentation. All properties are
|
|
49
|
+
* optional; unset properties fall back to the defaults listed below.
|
|
50
|
+
*
|
|
51
|
+
* **Defaults applied by field config functions** (e.g., `text()`, `number()`):
|
|
52
|
+
* ```ts
|
|
53
|
+
* {
|
|
54
|
+
* hidden: false, // field is visible in the admin form
|
|
55
|
+
* readOnly: false, // field is editable by default
|
|
56
|
+
* position: "main", // placed in the main content column, not the sidebar
|
|
57
|
+
* width: "full", // spans the full form width, not half
|
|
58
|
+
* cellAlignment: "left", // text aligned left in data table cells
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* // Basic usage — all defaults applied
|
|
65
|
+
* title: text({ admin: { width: "half" } })
|
|
66
|
+
*
|
|
67
|
+
* // Sidebar metadata field
|
|
68
|
+
* publishedAt: date({
|
|
69
|
+
* description: "Scheduled publish time",
|
|
70
|
+
* admin: { position: "sidebar" },
|
|
71
|
+
* })
|
|
72
|
+
*
|
|
73
|
+
* // Read-only computed field
|
|
74
|
+
* createdAt: date({
|
|
75
|
+
* required: true,
|
|
76
|
+
* admin: { readOnly: true, hidden: false }
|
|
77
|
+
* })
|
|
78
|
+
*
|
|
79
|
+
* // Right-aligned number column in table
|
|
80
|
+
* price: number({
|
|
81
|
+
* admin: {
|
|
82
|
+
* cellAlignment: "right",
|
|
83
|
+
* placeholder: "0.00"
|
|
84
|
+
* }
|
|
85
|
+
* })
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* @see {@link FieldAdminConfig} for the resolved type after defaults are applied
|
|
89
|
+
*/
|
|
90
|
+
export interface FieldAdminConfigInput {
|
|
91
|
+
/**
|
|
92
|
+
* Hide this field from the admin form.
|
|
93
|
+
* Hidden fields are still stored in the database.
|
|
94
|
+
*
|
|
95
|
+
* Default: `false`
|
|
96
|
+
*/
|
|
97
|
+
hidden?: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Make this field read-only in the admin form.
|
|
100
|
+
* The value is displayed but cannot be edited.
|
|
101
|
+
*
|
|
102
|
+
* Default: `false`
|
|
103
|
+
*/
|
|
104
|
+
readOnly?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Position of the field in the form layout.
|
|
107
|
+
*
|
|
108
|
+
* - `"main"` — placed in the main content area
|
|
109
|
+
* - `"sidebar"` — placed in the sidebar panel
|
|
110
|
+
*
|
|
111
|
+
* Default: `"main"`
|
|
112
|
+
*/
|
|
113
|
+
position?: "main" | "sidebar";
|
|
114
|
+
/**
|
|
115
|
+
* Width of the field within its row.
|
|
116
|
+
*
|
|
117
|
+
* - `"full"` — spans the full width
|
|
118
|
+
* - `"half"` — spans half the width (two fields per row)
|
|
119
|
+
*
|
|
120
|
+
* Default: `"full"`
|
|
121
|
+
*/
|
|
122
|
+
width?: "full" | "half";
|
|
123
|
+
/**
|
|
124
|
+
* Placeholder text shown in the input when empty.
|
|
125
|
+
*/
|
|
126
|
+
placeholder?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Content alignment in data table cells. 'left' | 'right' | 'center'
|
|
129
|
+
*/
|
|
130
|
+
cellAlignment?: Alignment;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Resolved admin configuration for a field, returned after defaults are applied.
|
|
134
|
+
*
|
|
135
|
+
* Properties with defaults (`hidden`, `readOnly`, `position`, `width`, `cellAlignment`)
|
|
136
|
+
* are always present. Properties that are meaningless when absent (`placeholder`)
|
|
137
|
+
* remain optional — `undefined` means the user did not configure them.
|
|
138
|
+
*
|
|
139
|
+
* @see {@link FieldAdminConfigInput} for the user-facing input type
|
|
140
|
+
*/
|
|
141
|
+
export interface FieldAdminConfig {
|
|
142
|
+
/** Whether the field is hidden from the admin form. */
|
|
143
|
+
hidden: boolean;
|
|
144
|
+
/** Whether the field is read-only in the admin form. */
|
|
145
|
+
readOnly: boolean;
|
|
146
|
+
/** Position of the field in the form layout — `"main"` or `"sidebar"`. */
|
|
147
|
+
position: "main" | "sidebar";
|
|
148
|
+
/** Width of the field within its row — `"full"` or `"half"`. */
|
|
149
|
+
width: "full" | "half";
|
|
150
|
+
/** Text alignment for this field's column in the data table. */
|
|
151
|
+
cellAlignment: Alignment;
|
|
152
|
+
/** Placeholder text shown in the input when empty. */
|
|
153
|
+
placeholder?: string;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Properties shared by all field types.
|
|
157
|
+
*
|
|
158
|
+
* Every field type (text, number, checkbox, etc.) extends this interface
|
|
159
|
+
* with its own `type` discriminant and type-specific options. These base
|
|
160
|
+
* properties control labeling, validation, admin UI behavior, and database
|
|
161
|
+
* indexing.
|
|
162
|
+
*
|
|
163
|
+
* **Defaults applied by field config functions:**
|
|
164
|
+
* ```ts
|
|
165
|
+
* {
|
|
166
|
+
* label: "", // inferred from the field key by defineCollection
|
|
167
|
+
* required: false, // field is optional in the database schema
|
|
168
|
+
* admin: { ... } // see FieldAdminConfigInput for admin defaults
|
|
169
|
+
* }
|
|
170
|
+
* ```
|
|
171
|
+
*
|
|
172
|
+
* @see {@link BaseField} for the resolved type after defaults are applied
|
|
173
|
+
*/
|
|
174
|
+
export interface BaseFieldInput<TFieldMeta extends {} = {}> {
|
|
175
|
+
/** Display label for the field in the admin form. */
|
|
176
|
+
label?: string;
|
|
177
|
+
/**
|
|
178
|
+
* Semantic description of the field. Used in three places:
|
|
179
|
+
* 1. Helper text rendered below the field input in the admin form UI.
|
|
180
|
+
* 2. As the Zod `.meta({ description })` value for form validation.
|
|
181
|
+
* 3. As the JSDoc comment on the generated document interface property.
|
|
182
|
+
*
|
|
183
|
+
* To write a separate JSDoc comment, use `interfaceDescription` in addition.
|
|
184
|
+
*/
|
|
185
|
+
description?: string;
|
|
186
|
+
/** The JSDoc comment on the generated document interface property */
|
|
187
|
+
interfaceDescription?: string;
|
|
188
|
+
/**
|
|
189
|
+
* Whether this field is required.
|
|
190
|
+
*
|
|
191
|
+
* Default: `false`
|
|
192
|
+
*/
|
|
193
|
+
required?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Pre-filled value shown in the admin form when creating a new field.
|
|
196
|
+
* Does not apply to database values
|
|
197
|
+
*/
|
|
198
|
+
defaultValue?: unknown;
|
|
199
|
+
/** Admin UI configuration for this field. */
|
|
200
|
+
admin?: FieldAdminConfigInput;
|
|
201
|
+
/**
|
|
202
|
+
* Create a database index on this field.
|
|
203
|
+
* The string value becomes the index name in Convex.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* slug: { type: "text", index: "by_slug", required: true }
|
|
208
|
+
* // Generates: .index("by_slug", ["slug"])
|
|
209
|
+
* ```
|
|
210
|
+
*/
|
|
211
|
+
index?: string;
|
|
212
|
+
meta?: TFieldMeta;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Resolved base field definition, after defaults are applied by the field config function.
|
|
216
|
+
*
|
|
217
|
+
* Properties with defaults are always present. Properties that are meaningless
|
|
218
|
+
* when absent (`description`, `index`, `searchIndex`) remain optional.
|
|
219
|
+
*
|
|
220
|
+
* @see {@link BaseFieldInput} for the user-facing input type
|
|
221
|
+
*/
|
|
222
|
+
export interface BaseField<TFieldMeta extends {} = {}> {
|
|
223
|
+
/** Display label shown in the admin form. Always set — inferred from the field key if not provided. */
|
|
224
|
+
label: string;
|
|
225
|
+
/** Whether this field is required in the database schema. */
|
|
226
|
+
required: boolean;
|
|
227
|
+
/**
|
|
228
|
+
* Pre-filled value shown in the admin form when creating a new field.
|
|
229
|
+
* Does not apply to database values
|
|
230
|
+
*/
|
|
231
|
+
defaultValue?: unknown;
|
|
232
|
+
/** Resolved admin UI configuration with all defaults applied. */
|
|
233
|
+
admin: FieldAdminConfig;
|
|
234
|
+
/**
|
|
235
|
+
* Semantic description of the field. Used in three places:
|
|
236
|
+
* 1. Helper text rendered below the field input in the admin form UI.
|
|
237
|
+
* 2. As the Zod `.meta({ description })` value for form validation.
|
|
238
|
+
* 3. As the JSDoc comment on the generated document interface property.
|
|
239
|
+
*
|
|
240
|
+
* To write a separate JSDoc comment, use `interfaceDescription` in addition.
|
|
241
|
+
*/
|
|
242
|
+
description?: string;
|
|
243
|
+
/** The JSDoc comment on the generated document interface property */
|
|
244
|
+
interfaceDescription?: string;
|
|
245
|
+
/** Convex index name for this field. */
|
|
246
|
+
index?: string;
|
|
247
|
+
/** TypeScript type string written to generated document interfaces (e.g. `"string"`, `"number"`, `"string[]"`). */
|
|
248
|
+
interfaceType: string;
|
|
249
|
+
meta: TFieldMeta;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=baseTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseTypes.d.ts","sourceRoot":"","sources":["../../src/fields/baseTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { BlockConfigInput, BlockConfig, BlocksFieldInput, BlocksField } from "./types";
|
|
2
|
+
import { BaseFieldMeta } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Defines a single block type for use in a `blocks()` field.
|
|
5
|
+
*
|
|
6
|
+
* Validates that the slug is a valid identifier and that no field name
|
|
7
|
+
* collides with framework-reserved names (`blockType`, `blockName`, `id`).
|
|
8
|
+
* Computes `interfaceType` — the TypeScript object-type string including
|
|
9
|
+
* all three framework keys plus user fields.
|
|
10
|
+
*
|
|
11
|
+
* @param options - Block definition. `slug`, `label`, and `fields` are required.
|
|
12
|
+
* @returns Resolved `BlockDef` with all defaults applied.
|
|
13
|
+
*
|
|
14
|
+
* @throws {Error} If `slug` does not match `/^[a-zA-Z][a-zA-Z0-9_-]*$/`.
|
|
15
|
+
* @throws {Error} If any field name is in `RESERVED_BLOCK_FIELD_NAMES`.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const headingBlock = defineBlock({
|
|
20
|
+
* slug: "heading",
|
|
21
|
+
* label: "Heading",
|
|
22
|
+
* admin: { icon: "heading" },
|
|
23
|
+
* fields: { text: text({ required: true }) },
|
|
24
|
+
* })
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @see {@link BlockConfigInput} for the full input type
|
|
28
|
+
* @see {@link BlockConfig} for the resolved output type
|
|
29
|
+
*/
|
|
30
|
+
export declare function defineBlock(options: BlockConfigInput): BlockConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Creates a blocks field with all defaults applied.
|
|
33
|
+
*
|
|
34
|
+
* Validates that all block slugs are unique within this field. Each item
|
|
35
|
+
* stored in Convex carries `blockType`, `blockName`, and `id` in addition
|
|
36
|
+
* to the block's own fields.
|
|
37
|
+
*
|
|
38
|
+
* @param options - Blocks field configuration. `blocks` is required.
|
|
39
|
+
* @returns Resolved blocks field definition.
|
|
40
|
+
*
|
|
41
|
+
* @throws {Error} If two or more block definitions share the same slug.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const heading = defineBlock({ slug: "heading", label: "Heading", fields: { text: text({ required: true }) } })
|
|
46
|
+
* const paragraph = defineBlock({ slug: "paragraph", label: "Paragraph", fields: { content: text({ required: true }) } })
|
|
47
|
+
*
|
|
48
|
+
* defineCollection({
|
|
49
|
+
* fields: {
|
|
50
|
+
* body: blocks({
|
|
51
|
+
* label: "Body",
|
|
52
|
+
* blocks: [heading, paragraph],
|
|
53
|
+
* labels: { singular: "section", plural: "sections" },
|
|
54
|
+
* }),
|
|
55
|
+
* },
|
|
56
|
+
* })
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @see {@link BlocksFieldInput} for the full input type
|
|
60
|
+
* @see {@link BlocksField} for the resolved output type
|
|
61
|
+
*/
|
|
62
|
+
export declare function blocks<TFieldMeta extends BaseFieldMeta = BaseFieldMeta>(options: BlocksFieldInput<TFieldMeta>): BlocksField<TFieldMeta>;
|
|
63
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/fields/blocks/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG5F,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAgClE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,MAAM,CAAC,UAAU,SAAS,aAAa,GAAG,aAAa,EACrE,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,GACpC,WAAW,CAAC,UAAU,CAAC,CAwCzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/blocks/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ZodType } from "zod";
|
|
2
|
+
import type { BlocksField } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Builds a Zod schema for validating a blocks field value in the admin form.
|
|
5
|
+
*
|
|
6
|
+
* Each block type becomes a `z.object()` with `blockType: z.literal(slug)`,
|
|
7
|
+
* `blockName: z.string().optional()`, and `id: z.string()` as framework
|
|
8
|
+
* keys, plus the block's own sub-field schemas from `adminFieldToInputSchema`.
|
|
9
|
+
* Multiple block types use `z.discriminatedUnion("blockType", [...])`. A single
|
|
10
|
+
* block type uses a plain `z.array(z.object(...))`. `min`/`max` are enforced on
|
|
11
|
+
* the outer array when set.
|
|
12
|
+
*
|
|
13
|
+
* @param props - Input props.
|
|
14
|
+
* @param props.field - The resolved blocks field definition.
|
|
15
|
+
* @returns A Zod array schema with discriminated-union items.
|
|
16
|
+
*
|
|
17
|
+
* @internal — Used by admin form schema construction via `adminFieldToInputSchema`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function blocksFieldToInputSchema<TFieldMeta extends {} = {}>(props: {
|
|
20
|
+
field: BlocksField<TFieldMeta>;
|
|
21
|
+
}): ZodType;
|
|
22
|
+
//# sourceMappingURL=inputSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputSchema.d.ts","sourceRoot":"","sources":["../../../src/fields/blocks/inputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAGjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE;IAC1E,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;CAChC,GAAG,OAAO,CAqCV"}
|