@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,253 @@
|
|
|
1
|
+
import { ADMIN_FIELDS } from "../constants";
|
|
2
|
+
import type { BaseField, BaseFieldInput, FieldAdminConfigInput } from "../baseTypes";
|
|
3
|
+
import type { AdminField } from "../types";
|
|
4
|
+
import { LucideIconName } from "../../utils";
|
|
5
|
+
import type { FieldAdminConfig } from "../baseTypes";
|
|
6
|
+
/**
|
|
7
|
+
* Field names reserved by the blocks system.
|
|
8
|
+
*
|
|
9
|
+
* These names are injected automatically on every block item stored in Convex
|
|
10
|
+
* and cannot be used as user field names inside `defineBlock({ fields: { ... } })`.
|
|
11
|
+
*
|
|
12
|
+
* - `blockType` — discriminant identifying the block's definition (e.g. `"heading"`)
|
|
13
|
+
* - `blockName` — user-editable label stored alongside the block data
|
|
14
|
+
* - `id` — stable UUID assigned on creation; used as the React key and
|
|
15
|
+
* pre-requisites drag-and-drop reorder
|
|
16
|
+
*/
|
|
17
|
+
export declare const RESERVED_BLOCK_FIELD_NAMES: readonly ["blockType", "blockName", "id"];
|
|
18
|
+
/**
|
|
19
|
+
* A Generic Block shape that all block data will follow coming out of Convex
|
|
20
|
+
*/
|
|
21
|
+
export interface GenericBlock extends Record<string, any> {
|
|
22
|
+
id: string;
|
|
23
|
+
blockType: string;
|
|
24
|
+
blockName?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Admin UI configuration for a single block definition.
|
|
28
|
+
*
|
|
29
|
+
* @see {@link BlockConfigInput}
|
|
30
|
+
*/
|
|
31
|
+
export interface BlockAdminConfig {
|
|
32
|
+
/**
|
|
33
|
+
* Lucide icon name shown next to the block label in the picker dialog.
|
|
34
|
+
*
|
|
35
|
+
* Typed as `string` in `@vexcms/core` to avoid a React dependency.
|
|
36
|
+
* Rendered via the existing `<Icon name={...}>` component in `@vexcms/react`.
|
|
37
|
+
*
|
|
38
|
+
* @example "Sparkles" | "Puzzle" | "Megaphone" | "CreditCard"
|
|
39
|
+
*/
|
|
40
|
+
icon?: LucideIconName;
|
|
41
|
+
/**
|
|
42
|
+
* Whether this block starts expanded when the page loads.
|
|
43
|
+
*
|
|
44
|
+
* Default: `true` (block is open by default)
|
|
45
|
+
*
|
|
46
|
+
* Note: Controlled by the field-level `admin.defaultCollapsed` setting —
|
|
47
|
+
* when that is `true`, all blocks start collapsed regardless of this value.
|
|
48
|
+
*/
|
|
49
|
+
defaultCollapsed?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Configuration input for a single block type, passed to `defineBlock()`.
|
|
53
|
+
*
|
|
54
|
+
* A block definition describes one variant in a blocks field — its stored
|
|
55
|
+
* discriminant (`slug`), its display name in the admin picker (`label`), the
|
|
56
|
+
* fields that make up its data shape, and optional admin UI config (icon).
|
|
57
|
+
* Three fields are injected automatically on every block item and must not
|
|
58
|
+
* appear in `fields`: `blockType`, `blockName`, and `id`.
|
|
59
|
+
*
|
|
60
|
+
* **Defaults applied by `defineBlock()`:**
|
|
61
|
+
* ```ts
|
|
62
|
+
* {
|
|
63
|
+
* interfaceName: slugToPascalCase(slug) + "Block", // e.g. "heading" → "HeadingBlock"
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* const headingBlock = defineBlock({
|
|
70
|
+
* slug: "heading",
|
|
71
|
+
* label: "Heading",
|
|
72
|
+
* admin: { icon: "heading" },
|
|
73
|
+
* fields: {
|
|
74
|
+
* level: select({ options: [{ label: "H1", value: "h1" }] }),
|
|
75
|
+
* text: text({ required: true }),
|
|
76
|
+
* },
|
|
77
|
+
* })
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* @see {@link BlockConfig} for the resolved output type
|
|
81
|
+
* @see {@link defineBlock} for the config function that produces this type
|
|
82
|
+
*/
|
|
83
|
+
export interface BlockConfigInput {
|
|
84
|
+
/**
|
|
85
|
+
* Unique identifier for this block type.
|
|
86
|
+
*
|
|
87
|
+
* Stored as `blockType: "slug"` on every block item. Used as the Convex
|
|
88
|
+
* `v.literal()` discriminant and Zod `z.literal()` key. Must start with a
|
|
89
|
+
* letter and contain only letters, numbers, hyphens, and underscores
|
|
90
|
+
* (`/^[a-zA-Z][a-zA-Z0-9_-]*$/`).
|
|
91
|
+
*/
|
|
92
|
+
slug: string;
|
|
93
|
+
name?: string;
|
|
94
|
+
/** Display label shown in the admin block-type picker and as the block header. */
|
|
95
|
+
label?: string;
|
|
96
|
+
/**
|
|
97
|
+
* Fields that make up this block's data shape.
|
|
98
|
+
*
|
|
99
|
+
* Accepts any `AdminField`, including nested `group()` or `array()`.
|
|
100
|
+
* `blockType`, `blockName`, and `id` are injected automatically — do not
|
|
101
|
+
* include them here. `defineBlock()` throws if any reserved name is used.
|
|
102
|
+
*/
|
|
103
|
+
fields: Record<string, AdminField>;
|
|
104
|
+
/** Admin UI configuration (picker icon). */
|
|
105
|
+
admin?: BlockAdminConfig;
|
|
106
|
+
/**
|
|
107
|
+
* Custom TypeScript interface name for this block type.
|
|
108
|
+
*
|
|
109
|
+
* Defaults to `${slugToPascalCase(slug)}Block` (e.g. `"heading"` → `"HeadingBlock"`).
|
|
110
|
+
*/
|
|
111
|
+
interfaceName?: string;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Resolved block type definition, after `defineBlock()` applies all defaults.
|
|
115
|
+
*
|
|
116
|
+
* @see {@link BlockConfigInput} for the user-facing input type
|
|
117
|
+
* @see {@link defineBlock} for the config function that produces this type
|
|
118
|
+
*/
|
|
119
|
+
export interface BlockConfig<TBlockMeta extends {} = {}> {
|
|
120
|
+
/** Unique discriminant value stored as `blockType` on every block item. */
|
|
121
|
+
blockType: string;
|
|
122
|
+
blockName?: string;
|
|
123
|
+
id: string;
|
|
124
|
+
/** Display label shown in the admin block-type picker. */
|
|
125
|
+
label?: string;
|
|
126
|
+
/** Fields that make up this block's data shape. */
|
|
127
|
+
fields: Record<string, AdminField>;
|
|
128
|
+
/** Admin UI configuration. */
|
|
129
|
+
admin?: BlockAdminConfig;
|
|
130
|
+
/**
|
|
131
|
+
* TypeScript interface name for this block type.
|
|
132
|
+
*
|
|
133
|
+
* Always set after `defineBlock()`. Defaults to `${slugToPascalCase(slug)}Block`.
|
|
134
|
+
*/
|
|
135
|
+
interfaceName: string;
|
|
136
|
+
/**
|
|
137
|
+
* Computed TypeScript object-type string including all three framework keys.
|
|
138
|
+
*
|
|
139
|
+
* E.g. `{ blockType: "heading"; blockName?: string; id: string; text: string }`.
|
|
140
|
+
* Used by `getFieldInterfaces` to emit the block's `export type` declaration.
|
|
141
|
+
*/
|
|
142
|
+
interfaceType: string;
|
|
143
|
+
metadata?: TBlockMeta;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Configuration input for a `blocks()` field.
|
|
147
|
+
*
|
|
148
|
+
* Blocks fields store an ordered, heterogeneous list of typed objects. Each item
|
|
149
|
+
* carries `blockType` (which block definition it matches), `id` (stable UUID),
|
|
150
|
+
* `blockName` (user-editable label), plus the fields from that block's definition.
|
|
151
|
+
*
|
|
152
|
+
* **Defaults applied by `blocks()`:**
|
|
153
|
+
* ```ts
|
|
154
|
+
* {
|
|
155
|
+
* type: "blocks",
|
|
156
|
+
* label: "", // inferred from field key by defineCollection
|
|
157
|
+
* required: false,
|
|
158
|
+
* defaultValue: [],
|
|
159
|
+
* labels: { singular: "block", plural: "blocks" },
|
|
160
|
+
* admin: {
|
|
161
|
+
* hidden: false, readOnly: false, position: "main", width: "full",
|
|
162
|
+
* cellAlignment: "left",
|
|
163
|
+
* }
|
|
164
|
+
* }
|
|
165
|
+
* ```
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```ts
|
|
169
|
+
* body: blocks({
|
|
170
|
+
* label: "Body",
|
|
171
|
+
* blocks: [headingBlock, paragraphBlock],
|
|
172
|
+
* })
|
|
173
|
+
* ```
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```ts
|
|
177
|
+
* // Named union alias + min/max constraints
|
|
178
|
+
* body: blocks({
|
|
179
|
+
* label: "Body",
|
|
180
|
+
* interfaceName: "PageBlock",
|
|
181
|
+
* blocks: [headingBlock, paragraphBlock],
|
|
182
|
+
* min: 1,
|
|
183
|
+
* max: 20,
|
|
184
|
+
* labels: { singular: "section", plural: "sections" },
|
|
185
|
+
* })
|
|
186
|
+
* ```
|
|
187
|
+
*
|
|
188
|
+
* @see {@link BlocksField} for the resolved output type
|
|
189
|
+
* @see {@link blocks} for the config function that produces this type
|
|
190
|
+
*/
|
|
191
|
+
export interface BlocksFieldInput<TFieldMeta extends {} = {}> extends Omit<BaseFieldInput<TFieldMeta>, "admin"> {
|
|
192
|
+
admin?: FieldAdminConfigInput & {
|
|
193
|
+
defaultCollapsed?: boolean;
|
|
194
|
+
};
|
|
195
|
+
/** Block type definitions that are allowed in this field. */
|
|
196
|
+
blocks: BlockConfig<TFieldMeta>[];
|
|
197
|
+
/**
|
|
198
|
+
* Optional TypeScript union alias name.
|
|
199
|
+
*
|
|
200
|
+
* When set, emits `export type PageBlock = HeadingBlock | ParagraphBlock` and
|
|
201
|
+
* the collection interface uses `PageBlock[]` instead of the inline union.
|
|
202
|
+
*/
|
|
203
|
+
interfaceName?: string;
|
|
204
|
+
/**
|
|
205
|
+
* Minimum number of block items.
|
|
206
|
+
*
|
|
207
|
+
* Enforced by the Zod inputSchema (form validation), not the Convex schema.
|
|
208
|
+
* Does not affect the generated `vex.schema.ts`.
|
|
209
|
+
*/
|
|
210
|
+
min?: number;
|
|
211
|
+
/**
|
|
212
|
+
* Maximum number of block items.
|
|
213
|
+
*
|
|
214
|
+
* Enforced by the Zod inputSchema. When the max is reached, the "Add" button
|
|
215
|
+
* is disabled in the admin UI.
|
|
216
|
+
*/
|
|
217
|
+
max?: number;
|
|
218
|
+
/** Singular/plural display labels used in the admin UI. Defaults to `{ singular: "block", plural: "blocks" }`. */
|
|
219
|
+
labels?: {
|
|
220
|
+
singular: string;
|
|
221
|
+
plural: string;
|
|
222
|
+
};
|
|
223
|
+
/** Pre-filled value when creating a new document. Defaults to `[]`. */
|
|
224
|
+
defaultValue?: Record<string, unknown>[];
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Resolved configuration for a `blocks()` field, after all defaults are applied.
|
|
228
|
+
*
|
|
229
|
+
* @see {@link BlocksFieldInput} for the user-facing input type
|
|
230
|
+
* @see {@link blocks} for the config function that produces this type
|
|
231
|
+
*/
|
|
232
|
+
export interface BlocksField<TFieldMeta extends {} = {}> extends BaseField<TFieldMeta> {
|
|
233
|
+
readonly type: typeof ADMIN_FIELDS.blocks.type;
|
|
234
|
+
admin: FieldAdminConfig & {
|
|
235
|
+
defaultCollapsed: boolean;
|
|
236
|
+
};
|
|
237
|
+
/** Block type definitions allowed in this field. */
|
|
238
|
+
blocks: BlockConfig<TFieldMeta>[];
|
|
239
|
+
/** Optional TypeScript union alias name. */
|
|
240
|
+
interfaceName?: string;
|
|
241
|
+
/** Minimum number of block items (Zod-enforced). */
|
|
242
|
+
min?: number;
|
|
243
|
+
/** Maximum number of block items (Zod-enforced). */
|
|
244
|
+
max?: number;
|
|
245
|
+
/** Singular/plural display labels for the admin UI. */
|
|
246
|
+
labels: {
|
|
247
|
+
singular: string;
|
|
248
|
+
plural: string;
|
|
249
|
+
};
|
|
250
|
+
/** Pre-filled value when creating a new document. */
|
|
251
|
+
defaultValue: Record<string, unknown>[];
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fields/blocks/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { BlocksField } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Converts a blocks field definition to a Convex schema validator string.
|
|
4
|
+
*
|
|
5
|
+
* Each block type becomes a `v.object()` with three framework keys first —
|
|
6
|
+
* `blockType: v.literal(slug)`, `blockName: v.optional(v.string())`,
|
|
7
|
+
* `id: v.string()` — followed by the block's own field validators. Multiple
|
|
8
|
+
* block types are combined with `v.union()`; a single block type uses a bare
|
|
9
|
+
* `v.object()`. The whole thing is wrapped in `v.array()`, then `v.optional()`
|
|
10
|
+
* when `field.required` is `false`.
|
|
11
|
+
*
|
|
12
|
+
* @param props - Input props.
|
|
13
|
+
* @param props.field - The resolved blocks field definition.
|
|
14
|
+
* @returns A Convex validator string.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* const heading = defineBlock({ slug: "heading", fields: { text: text({ required: true }) } })
|
|
19
|
+
* const paragraph = defineBlock({ slug: "paragraph", fields: { content: text() } })
|
|
20
|
+
* blocksFieldToValidator({ field: blocks({ blocks: [heading, paragraph] }) })
|
|
21
|
+
* // → 'v.optional(v.array(v.union(
|
|
22
|
+
* // v.object({ blockType: v.literal("heading"), blockName: v.optional(v.string()), id: v.string(), text: v.string() }),
|
|
23
|
+
* // v.object({ blockType: v.literal("paragraph"), blockName: v.optional(v.string()), id: v.string(), content: v.optional(v.string()) }),
|
|
24
|
+
* // )))'
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @internal — Used by CLI schema generation via `adminFieldToValidator`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function blocksFieldToValidator<TFieldMeta extends {} = {}>(props: {
|
|
30
|
+
field: BlocksField<TFieldMeta>;
|
|
31
|
+
}): string;
|
|
32
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/fields/blocks/validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE;IACxE,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;CAChC,GAAG,MAAM,CAiCT"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BaseFieldMeta } from "../types";
|
|
2
|
+
import type { CheckboxFieldInput, CheckboxField } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a checkbox field with all defaults applied.
|
|
5
|
+
*
|
|
6
|
+
* Checkbox fields store boolean values — feature flags, opt-in toggles,
|
|
7
|
+
* published states, visibility flags, and similar on/off settings.
|
|
8
|
+
*
|
|
9
|
+
* Accepts {@link CheckboxFieldInput} (all optional) and returns {@link CheckboxField} with all defaults applied.
|
|
10
|
+
*
|
|
11
|
+
* **Defaults applied:**
|
|
12
|
+
* - `label` — `""` (inferred from the field key by `defineCollection`)
|
|
13
|
+
* - `required` — `false`
|
|
14
|
+
* - `defaultValue` — `false`
|
|
15
|
+
* - `admin.hidden` — `false`
|
|
16
|
+
* - `admin.readOnly` — `false`
|
|
17
|
+
* - `admin.position` — `"main"`
|
|
18
|
+
* - `admin.width` — `"full"`
|
|
19
|
+
* - `admin.cellAlignment` — `"left"`
|
|
20
|
+
*
|
|
21
|
+
* @param options - Checkbox field configuration. All properties are optional.
|
|
22
|
+
* @returns Resolved checkbox field definition with all defaults applied.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { checkbox, defineCollection } from '@vexcms/core'
|
|
27
|
+
*
|
|
28
|
+
* posts: defineCollection({
|
|
29
|
+
* fields: {
|
|
30
|
+
* // Minimal — label inferred from key ("Published")
|
|
31
|
+
* published: checkbox(),
|
|
32
|
+
*
|
|
33
|
+
* // Required field, checked by default when creating a new document
|
|
34
|
+
* featured: checkbox({ defaultValue: true, admin: { width: "half" } }),
|
|
35
|
+
*
|
|
36
|
+
* // Indexed flag for fast admin queries
|
|
37
|
+
* archived: checkbox({ index: "by_archived" }),
|
|
38
|
+
* }
|
|
39
|
+
* })
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @see {@link CheckboxFieldInput} for the full input type
|
|
43
|
+
* @see {@link CheckboxField} for the resolved output type
|
|
44
|
+
*/
|
|
45
|
+
export declare function checkbox<TFieldMeta extends BaseFieldMeta = BaseFieldMeta>(options?: CheckboxFieldInput<TFieldMeta>): CheckboxField<TFieldMeta>;
|
|
46
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/fields/checkbox/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,QAAQ,CAAC,UAAU,SAAS,aAAa,GAAG,aAAa,EACvE,OAAO,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,GACvC,aAAa,CAAC,UAAU,CAAC,CAyB3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fields/checkbox/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ZodType } from "zod";
|
|
2
|
+
import { CheckboxField } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Builds a Zod schema for validating a checkbox field value in the admin form.
|
|
5
|
+
*
|
|
6
|
+
* Checkbox fields are always boolean — there are no required/optional semantics
|
|
7
|
+
* beyond wrapping in `.optional()` for non-required fields. No min/max constraints.
|
|
8
|
+
*
|
|
9
|
+
* @param props - Input props.
|
|
10
|
+
* @param props.field - The resolved checkbox field definition
|
|
11
|
+
* @returns A Zod boolean schema with optionality and default applied
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const field = checkbox({ required: true })
|
|
16
|
+
* checkboxFieldToInputSchema({ field })
|
|
17
|
+
* // → z.boolean()
|
|
18
|
+
*
|
|
19
|
+
* const optionalField = checkbox()
|
|
20
|
+
* checkboxFieldToInputSchema({ field: optionalField })
|
|
21
|
+
* // → z.boolean().optional().default(false)
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkboxFieldToInputSchema(props: {
|
|
25
|
+
field: CheckboxField;
|
|
26
|
+
}): ZodType;
|
|
27
|
+
//# sourceMappingURL=inputSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputSchema.d.ts","sourceRoot":"","sources":["../../../src/fields/checkbox/inputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,KAAK,EAAE,aAAa,CAAC;CACtB,GAAG,OAAO,CAMV"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { ADMIN_FIELDS } from "../constants";
|
|
2
|
+
import { BaseField, BaseFieldInput, FieldAdminConfig } from "../baseTypes";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration input for a `checkbox()` field.
|
|
5
|
+
*
|
|
6
|
+
* Checkbox fields store boolean values — feature flags, opt-in toggles,
|
|
7
|
+
* published states, and similar on/off settings. All properties are optional;
|
|
8
|
+
* unset properties fall back to the defaults listed below.
|
|
9
|
+
*
|
|
10
|
+
* **Defaults applied by `checkbox()`:**
|
|
11
|
+
* ```ts
|
|
12
|
+
* {
|
|
13
|
+
* type: "checkbox",
|
|
14
|
+
* label: "", // inferred from the field key by defineCollection
|
|
15
|
+
* required: false, // field is optional by default
|
|
16
|
+
* defaultValue: false, // unchecked when creating a new document
|
|
17
|
+
* admin: {
|
|
18
|
+
* hidden: false, // visible in the admin form
|
|
19
|
+
* readOnly: false, // editable by default
|
|
20
|
+
* position: "main", // placed in the main content column, not the sidebar
|
|
21
|
+
* width: "full", // spans the full form width, not half
|
|
22
|
+
* cellAlignment: "left", // value aligned left in the data table column
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* // Minimal — label inferred from the key ("Published")
|
|
30
|
+
* published: checkbox()
|
|
31
|
+
*
|
|
32
|
+
* // Checked by default when creating a new document
|
|
33
|
+
* featured: checkbox({ defaultValue: true, admin: { width: "half" } })
|
|
34
|
+
*
|
|
35
|
+
* // Indexed flag for fast admin queries
|
|
36
|
+
* archived: checkbox({ index: "by_archived" })
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @see {@link CheckboxField} for the resolved type after defaults are applied
|
|
40
|
+
* @see {@link checkbox} for the config function that applies defaults
|
|
41
|
+
* @see {@link BaseFieldInput} for shared properties (`label`, `description`, `required`, `admin`, `index`, `searchIndex`)
|
|
42
|
+
*/
|
|
43
|
+
export interface CheckboxFieldInput<TFieldMeta extends {} = {}> extends BaseFieldInput<TFieldMeta> {
|
|
44
|
+
/**
|
|
45
|
+
* Pre-filled value shown in the admin form when creating a new document.
|
|
46
|
+
* Does not affect database values — only the form's initial state.
|
|
47
|
+
*/
|
|
48
|
+
defaultValue?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Resolved configuration for a `checkbox()` field, after all defaults are applied.
|
|
52
|
+
*
|
|
53
|
+
* @see {@link CheckboxFieldInput} for the user-facing input type
|
|
54
|
+
* @see {@link checkbox} for the config function that produces this type
|
|
55
|
+
*/
|
|
56
|
+
export interface CheckboxField<TFieldMeta extends {} = {}> extends BaseField<TFieldMeta> {
|
|
57
|
+
readonly type: typeof ADMIN_FIELDS.checkbox.type;
|
|
58
|
+
/** Display label shown in the admin form. Always set — inferred from the field key if not provided. */
|
|
59
|
+
label: string;
|
|
60
|
+
/** Whether this field is required in the database schema. */
|
|
61
|
+
required: boolean;
|
|
62
|
+
/** Resolved admin UI configuration with all defaults applied. */
|
|
63
|
+
admin: FieldAdminConfig;
|
|
64
|
+
/** Pre-filled boolean value shown in the admin form when creating a new document. */
|
|
65
|
+
defaultValue: boolean;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fields/checkbox/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,WAAW,kBAAkB,CACjC,UAAU,SAAS,EAAE,GAAG,EAAE,CAC1B,SAAQ,cAAc,CAAC,UAAU,CAAC;IAClC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,SAAS,CAAC,UAAU,CAAC;IACtF,QAAQ,CAAC,IAAI,EAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjD,uGAAuG;IACvG,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,KAAK,EAAE,gBAAgB,CAAC;IACxB,qFAAqF;IACrF,YAAY,EAAE,OAAO,CAAC;CACvB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { CheckboxField } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Converts a checkbox field definition to a Convex schema validator.
|
|
4
|
+
*
|
|
5
|
+
* Generates the appropriate `v.boolean()` or `v.optional(v.boolean())` code
|
|
6
|
+
* for the Convex schema based on the field's `required` property.
|
|
7
|
+
*
|
|
8
|
+
* **Important notes:**
|
|
9
|
+
* - The `required` flag is the only property that affects the generated validator.
|
|
10
|
+
* - `index` is handled separately by collection index logic.
|
|
11
|
+
* - This function is used by the CLI during schema generation to build the Convex schema file.
|
|
12
|
+
*
|
|
13
|
+
* @param props - checkboxFieldToValidator() input props
|
|
14
|
+
* @param props.field - The checkbox field definition
|
|
15
|
+
* @returns Convex value type string: `"v.boolean()"` or `"v.optional(v.boolean())"`
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* const field1 = checkbox({ required: true })
|
|
20
|
+
* checkboxFieldToValidator({ field: field1 }) // "v.boolean()"
|
|
21
|
+
*
|
|
22
|
+
* const field2 = checkbox({ required: false })
|
|
23
|
+
* checkboxFieldToValidator({ field: field2 }) // "v.optional(v.boolean())"
|
|
24
|
+
*
|
|
25
|
+
* const field3 = checkbox()
|
|
26
|
+
* checkboxFieldToValidator({ field: field3 }) // "v.optional(v.boolean())"
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @internal - Used by schema generation, not typically called by users
|
|
30
|
+
*/
|
|
31
|
+
export declare function checkboxFieldToValidator(props: {
|
|
32
|
+
field: CheckboxField;
|
|
33
|
+
}): string;
|
|
34
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/fields/checkbox/validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,KAAK,EAAE,aAAa,CAAC;CACtB,GAAG,MAAM,CAKT"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BaseFieldMeta } from "../types";
|
|
2
|
+
import type { ColorFieldInput, ColorField } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Creates a colour field with all defaults applied.
|
|
5
|
+
*
|
|
6
|
+
* Colour fields store a CSS colour string and render a swatch picker in the
|
|
7
|
+
* admin form. Common uses: theme palettes, per-document accent colours, block
|
|
8
|
+
* background overrides.
|
|
9
|
+
*
|
|
10
|
+
* Accepts {@link ColorFieldInput} (all optional) and returns {@link ColorField} with all defaults applied.
|
|
11
|
+
*
|
|
12
|
+
* **Defaults applied:**
|
|
13
|
+
* - `label` — `""` (inferred from the field key by `defineCollection`)
|
|
14
|
+
* - `required` — `false`
|
|
15
|
+
* - `defaultValue` — `""`
|
|
16
|
+
* - `format` — `"hex"`
|
|
17
|
+
* - `themeColors` — `false`
|
|
18
|
+
* - `admin.hidden` — `false`
|
|
19
|
+
* - `admin.readOnly` — `false`
|
|
20
|
+
* - `admin.position` — `"main"`
|
|
21
|
+
* - `admin.width` — `"full"`
|
|
22
|
+
* - `admin.cellAlignment` — `"left"`
|
|
23
|
+
*
|
|
24
|
+
* @param options - Colour field configuration. All properties are optional.
|
|
25
|
+
* @returns Resolved colour field definition with all defaults applied.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { color, defineCollection } from '@vexcms/core'
|
|
30
|
+
*
|
|
31
|
+
* themes: defineCollection({
|
|
32
|
+
* fields: {
|
|
33
|
+
* // Minimal — label inferred from key ("Brand Color"), stored as hex
|
|
34
|
+
* brandColor: color(),
|
|
35
|
+
*
|
|
36
|
+
* // Stored as oklch so the front end can interpolate it directly
|
|
37
|
+
* primaryLight: color({ format: "oklch", required: true }),
|
|
38
|
+
*
|
|
39
|
+
* // Offer the host app's design tokens as a second picker tab
|
|
40
|
+
* overlayTint: color({ themeColors: true, admin: { width: "half" } }),
|
|
41
|
+
* }
|
|
42
|
+
* })
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @see {@link ColorFieldInput} for the full input type
|
|
46
|
+
* @see {@link ColorField} for the resolved output type
|
|
47
|
+
*/
|
|
48
|
+
export declare function color<TFieldMeta extends BaseFieldMeta = BaseFieldMeta>(options?: ColorFieldInput<TFieldMeta>): ColorField<TFieldMeta>;
|
|
49
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/fields/color/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,KAAK,CAAC,UAAU,SAAS,aAAa,GAAG,aAAa,EACpE,OAAO,CAAC,EAAE,eAAe,CAAC,UAAU,CAAC,GACpC,UAAU,CAAC,UAAU,CAAC,CA8BxB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type ColorFormat } from "./formats";
|
|
2
|
+
/**
|
|
3
|
+
* A colour in 8-bit sRGB with straight (non-premultiplied) alpha.
|
|
4
|
+
*
|
|
5
|
+
* This is the pivot representation for every notation: parsing produces one,
|
|
6
|
+
* serialising consumes one. sRGB rather than HSV because HSV is a *picker's*
|
|
7
|
+
* working model — `@uiw/react-color-sketch` happens to use it — while sRGB is
|
|
8
|
+
* what every CSS notation converts to and from.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const ember: ColorValue = { r: 232, g: 98, b: 42, a: 1 };
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export interface ColorValue {
|
|
16
|
+
/** Red channel, `0`–`255`. */
|
|
17
|
+
r: number;
|
|
18
|
+
/** Green channel, `0`–`255`. */
|
|
19
|
+
g: number;
|
|
20
|
+
/** Blue channel, `0`–`255`. */
|
|
21
|
+
b: number;
|
|
22
|
+
/** Alpha, `0`–`1`. `1` is fully opaque. */
|
|
23
|
+
a: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Serialises a colour into one of the supported CSS notations.
|
|
27
|
+
*
|
|
28
|
+
* Alpha is emitted only when the colour is not fully opaque, so an opaque
|
|
29
|
+
* colour produces `#e8622a` rather than `#e8622aff` and `rgb(...)` rather than
|
|
30
|
+
* `rgba(..., 1)`.
|
|
31
|
+
*
|
|
32
|
+
* @param props - Input props.
|
|
33
|
+
* @param props.color - The colour to write.
|
|
34
|
+
* @param props.format - The notation to write it in.
|
|
35
|
+
* @returns A CSS colour string in `format`.
|
|
36
|
+
* @throws An Error if an unrecognised format is given. Reaching this is a
|
|
37
|
+
* compile error: the default arm binds the exhausted union to `never`.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* const ember = { r: 232, g: 98, b: 42, a: 1 };
|
|
42
|
+
* serializeColor({ color: ember, format: "hex" }) // "#e8622a"
|
|
43
|
+
* serializeColor({ color: ember, format: "oklch" }) // "oklch(65.7% 0.1793 40.9)"
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function serializeColor(props: {
|
|
47
|
+
color: ColorValue;
|
|
48
|
+
format: ColorFormat;
|
|
49
|
+
}): string;
|
|
50
|
+
/**
|
|
51
|
+
* Parses a stored colour value into a {@link ColorValue}.
|
|
52
|
+
*
|
|
53
|
+
* Accepts every notation {@link serializeColor} can emit, regardless of the
|
|
54
|
+
* field's current `format` — so a field whose format changed still reads its
|
|
55
|
+
* stored colour instead of resetting. Values with no literal colour
|
|
56
|
+
* (`var(--token)`, the empty string) return `null`.
|
|
57
|
+
*
|
|
58
|
+
* @param props - Input props.
|
|
59
|
+
* @param props.value - The stored field value.
|
|
60
|
+
* @returns The parsed colour, or `null` when the value is empty, a theme-token
|
|
61
|
+
* reference, or not a recognised notation.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```ts
|
|
65
|
+
* parseColor({ value: "oklch(65.7% 0.1793 40.9)" }) // { r: 232, g: 98, b: 42, a: 1 }
|
|
66
|
+
* parseColor({ value: "var(--primary)" }) // null
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function parseColor(props: {
|
|
70
|
+
value: string;
|
|
71
|
+
}): ColorValue | null;
|
|
72
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/fields/color/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAE5D;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,UAAU;IACzB,8BAA8B;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,gCAAgC;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,+BAA+B;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,2CAA2C;IAC3C,CAAC,EAAE,MAAM,CAAC;CACX;AAoPD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GAAG,MAAM,CAqCxF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,GAAG,IAAI,CAgDtE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supported storage notations for a `color()` field, keyed by format name.
|
|
3
|
+
*
|
|
4
|
+
* Each entry carries the anchored pattern that recognises values written in
|
|
5
|
+
* that notation. The patterns accept exactly what `serializeColor` in
|
|
6
|
+
* `@vexcms/react` emits, plus the equivalent hand-typed spellings.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const COLOR_FORMATS: {
|
|
11
|
+
readonly hex: {
|
|
12
|
+
readonly format: "hex";
|
|
13
|
+
/** `#E8622A`, `#E8622A80`. Shorthand is rejected — the picker never emits it. */
|
|
14
|
+
readonly pattern: RegExp;
|
|
15
|
+
};
|
|
16
|
+
readonly rgb: {
|
|
17
|
+
readonly format: "rgb";
|
|
18
|
+
/** `rgb(232, 98, 42)`, `rgba(232, 98, 42, 0.5)`. */
|
|
19
|
+
readonly pattern: RegExp;
|
|
20
|
+
};
|
|
21
|
+
readonly hsl: {
|
|
22
|
+
readonly format: "hsl";
|
|
23
|
+
/** `hsl(17.7, 81%, 54%)`, `hsla(17.7, 81%, 54%, 0.5)`. */
|
|
24
|
+
readonly pattern: RegExp;
|
|
25
|
+
};
|
|
26
|
+
readonly oklch: {
|
|
27
|
+
readonly format: "oklch";
|
|
28
|
+
/** `oklch(65.7% 0.179 40.9)`, `oklch(65.7% 0.179 40.9 / 0.5)`. */
|
|
29
|
+
readonly pattern: RegExp;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
/** Union of the notations a `color()` field can store: `"hex" | "rgb" | "hsl" | "oklch"`. */
|
|
33
|
+
export type ColorFormat = (typeof COLOR_FORMATS)[keyof typeof COLOR_FORMATS]["format"];
|
|
34
|
+
/** Every supported notation's pattern, in declaration order. */
|
|
35
|
+
export declare const COLOR_FORMAT_PATTERNS: RegExp[];
|
|
36
|
+
/** A value that is entirely one CSS custom-property reference: `var(--primary)`. */
|
|
37
|
+
export declare const CSS_VAR_REFERENCE: RegExp;
|
|
38
|
+
//# sourceMappingURL=formats.d.ts.map
|