@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.
Files changed (323) hide show
  1. package/LICENSE +202 -0
  2. package/dist/.build +1 -0
  3. package/dist/access/buildChecks.d.ts +58 -0
  4. package/dist/access/buildChecks.d.ts.map +1 -0
  5. package/dist/access/canAccessAdminPanel.d.ts +53 -0
  6. package/dist/access/canAccessAdminPanel.d.ts.map +1 -0
  7. package/dist/access/compileConstraints.d.ts +155 -0
  8. package/dist/access/compileConstraints.d.ts.map +1 -0
  9. package/dist/access/config.d.ts +62 -0
  10. package/dist/access/config.d.ts.map +1 -0
  11. package/dist/access/constants.d.ts +95 -0
  12. package/dist/access/constants.d.ts.map +1 -0
  13. package/dist/access/constraintTypes.d.ts +337 -0
  14. package/dist/access/constraintTypes.d.ts.map +1 -0
  15. package/dist/access/createAccessQueryBuilder.d.ts +59 -0
  16. package/dist/access/createAccessQueryBuilder.d.ts.map +1 -0
  17. package/dist/access/createFilterConstraintBuilder.d.ts +26 -0
  18. package/dist/access/createFilterConstraintBuilder.d.ts.map +1 -0
  19. package/dist/access/createIndexConstraintBuilder.d.ts +40 -0
  20. package/dist/access/createIndexConstraintBuilder.d.ts.map +1 -0
  21. package/dist/access/hasPermission.d.ts +85 -0
  22. package/dist/access/hasPermission.d.ts.map +1 -0
  23. package/dist/access/index.d.ts +13 -0
  24. package/dist/access/index.d.ts.map +1 -0
  25. package/dist/access/pickQueryIndex.d.ts +42 -0
  26. package/dist/access/pickQueryIndex.d.ts.map +1 -0
  27. package/dist/access/resolveAccessRule.d.ts +85 -0
  28. package/dist/access/resolveAccessRule.d.ts.map +1 -0
  29. package/dist/access/types.d.ts +738 -0
  30. package/dist/access/types.d.ts.map +1 -0
  31. package/dist/access/validateAccessConstraints.d.ts +57 -0
  32. package/dist/access/validateAccessConstraints.d.ts.map +1 -0
  33. package/dist/api/client.d.ts +20 -0
  34. package/dist/api/client.d.ts.map +1 -0
  35. package/dist/api/client.js +117 -0
  36. package/dist/api/client.js.map +1 -0
  37. package/dist/api/convex.d.ts +296 -0
  38. package/dist/api/convex.d.ts.map +1 -0
  39. package/dist/api/create/client.d.ts +50 -0
  40. package/dist/api/create/client.d.ts.map +1 -0
  41. package/dist/api/create/server.d.ts +43 -0
  42. package/dist/api/create/server.d.ts.map +1 -0
  43. package/dist/api/depth.d.ts +39 -0
  44. package/dist/api/depth.d.ts.map +1 -0
  45. package/dist/api/find/client.d.ts +90 -0
  46. package/dist/api/find/client.d.ts.map +1 -0
  47. package/dist/api/find/server.d.ts +73 -0
  48. package/dist/api/find/server.d.ts.map +1 -0
  49. package/dist/api/get/client.d.ts +56 -0
  50. package/dist/api/get/client.d.ts.map +1 -0
  51. package/dist/api/get/server.d.ts +49 -0
  52. package/dist/api/get/server.d.ts.map +1 -0
  53. package/dist/api/globals/find.client.d.ts +20 -0
  54. package/dist/api/globals/find.client.d.ts.map +1 -0
  55. package/dist/api/globals/find.server.d.ts +29 -0
  56. package/dist/api/globals/find.server.d.ts.map +1 -0
  57. package/dist/api/globals/get.client.d.ts +46 -0
  58. package/dist/api/globals/get.client.d.ts.map +1 -0
  59. package/dist/api/globals/get.server.d.ts +55 -0
  60. package/dist/api/globals/get.server.d.ts.map +1 -0
  61. package/dist/api/globals/types.d.ts +65 -0
  62. package/dist/api/globals/types.d.ts.map +1 -0
  63. package/dist/api/globals/upsert.client.d.ts +24 -0
  64. package/dist/api/globals/upsert.client.d.ts.map +1 -0
  65. package/dist/api/globals/upsert.server.d.ts +47 -0
  66. package/dist/api/globals/upsert.server.d.ts.map +1 -0
  67. package/dist/api/populate.d.ts +23 -0
  68. package/dist/api/populate.d.ts.map +1 -0
  69. package/dist/api/remove/client.d.ts +58 -0
  70. package/dist/api/remove/client.d.ts.map +1 -0
  71. package/dist/api/remove/server.d.ts +65 -0
  72. package/dist/api/remove/server.d.ts.map +1 -0
  73. package/dist/api/search/client.d.ts +58 -0
  74. package/dist/api/search/client.d.ts.map +1 -0
  75. package/dist/api/search/server.d.ts +54 -0
  76. package/dist/api/search/server.d.ts.map +1 -0
  77. package/dist/api/server.d.ts +370 -0
  78. package/dist/api/server.d.ts.map +1 -0
  79. package/dist/api/server.js +33 -0
  80. package/dist/api/server.js.map +1 -0
  81. package/dist/api/types.d.ts +525 -0
  82. package/dist/api/types.d.ts.map +1 -0
  83. package/dist/api/update/client.d.ts +53 -0
  84. package/dist/api/update/client.d.ts.map +1 -0
  85. package/dist/api/update/server.d.ts +47 -0
  86. package/dist/api/update/server.d.ts.map +1 -0
  87. package/dist/api/utils.d.ts +57 -0
  88. package/dist/api/utils.d.ts.map +1 -0
  89. package/dist/auth/mergeCollections.d.ts +28 -0
  90. package/dist/auth/mergeCollections.d.ts.map +1 -0
  91. package/dist/auth/types.d.ts +84 -0
  92. package/dist/auth/types.d.ts.map +1 -0
  93. package/dist/chunk-2DU7JDEX.js +1877 -0
  94. package/dist/chunk-2DU7JDEX.js.map +1 -0
  95. package/dist/chunk-2IB2DCN7.js +75 -0
  96. package/dist/chunk-2IB2DCN7.js.map +1 -0
  97. package/dist/collections/config.d.ts +28 -0
  98. package/dist/collections/config.d.ts.map +1 -0
  99. package/dist/collections/constants.d.ts +27 -0
  100. package/dist/collections/constants.d.ts.map +1 -0
  101. package/dist/collections/index.d.ts +7 -0
  102. package/dist/collections/index.d.ts.map +1 -0
  103. package/dist/collections/indexFields.d.ts +20 -0
  104. package/dist/collections/indexFields.d.ts.map +1 -0
  105. package/dist/collections/interfaceGen.d.ts +59 -0
  106. package/dist/collections/interfaceGen.d.ts.map +1 -0
  107. package/dist/collections/internal/index.d.ts +2 -0
  108. package/dist/collections/internal/index.d.ts.map +1 -0
  109. package/dist/collections/types.d.ts +282 -0
  110. package/dist/collections/types.d.ts.map +1 -0
  111. package/dist/collections/utils.d.ts +71 -0
  112. package/dist/collections/utils.d.ts.map +1 -0
  113. package/dist/collections/validator.d.ts +73 -0
  114. package/dist/collections/validator.d.ts.map +1 -0
  115. package/dist/config/config.d.ts +43 -0
  116. package/dist/config/config.d.ts.map +1 -0
  117. package/dist/config/index.d.ts +5 -0
  118. package/dist/config/index.d.ts.map +1 -0
  119. package/dist/config/sanitizeConfig.d.ts +82 -0
  120. package/dist/config/sanitizeConfig.d.ts.map +1 -0
  121. package/dist/config/types.d.ts +316 -0
  122. package/dist/config/types.d.ts.map +1 -0
  123. package/dist/fields/array/config.d.ts +57 -0
  124. package/dist/fields/array/config.d.ts.map +1 -0
  125. package/dist/fields/array/index.d.ts +5 -0
  126. package/dist/fields/array/index.d.ts.map +1 -0
  127. package/dist/fields/array/inputSchema.d.ts +32 -0
  128. package/dist/fields/array/inputSchema.d.ts.map +1 -0
  129. package/dist/fields/array/types.d.ts +127 -0
  130. package/dist/fields/array/types.d.ts.map +1 -0
  131. package/dist/fields/array/validator.d.ts +30 -0
  132. package/dist/fields/array/validator.d.ts.map +1 -0
  133. package/dist/fields/baseTypes.d.ts +251 -0
  134. package/dist/fields/baseTypes.d.ts.map +1 -0
  135. package/dist/fields/blocks/config.d.ts +63 -0
  136. package/dist/fields/blocks/config.d.ts.map +1 -0
  137. package/dist/fields/blocks/index.d.ts +5 -0
  138. package/dist/fields/blocks/index.d.ts.map +1 -0
  139. package/dist/fields/blocks/inputSchema.d.ts +22 -0
  140. package/dist/fields/blocks/inputSchema.d.ts.map +1 -0
  141. package/dist/fields/blocks/types.d.ts +253 -0
  142. package/dist/fields/blocks/types.d.ts.map +1 -0
  143. package/dist/fields/blocks/validator.d.ts +32 -0
  144. package/dist/fields/blocks/validator.d.ts.map +1 -0
  145. package/dist/fields/checkbox/config.d.ts +46 -0
  146. package/dist/fields/checkbox/config.d.ts.map +1 -0
  147. package/dist/fields/checkbox/index.d.ts +5 -0
  148. package/dist/fields/checkbox/index.d.ts.map +1 -0
  149. package/dist/fields/checkbox/inputSchema.d.ts +27 -0
  150. package/dist/fields/checkbox/inputSchema.d.ts.map +1 -0
  151. package/dist/fields/checkbox/types.d.ts +67 -0
  152. package/dist/fields/checkbox/types.d.ts.map +1 -0
  153. package/dist/fields/checkbox/validator.d.ts +34 -0
  154. package/dist/fields/checkbox/validator.d.ts.map +1 -0
  155. package/dist/fields/color/config.d.ts +49 -0
  156. package/dist/fields/color/config.d.ts.map +1 -0
  157. package/dist/fields/color/convert.d.ts +72 -0
  158. package/dist/fields/color/convert.d.ts.map +1 -0
  159. package/dist/fields/color/formats.d.ts +38 -0
  160. package/dist/fields/color/formats.d.ts.map +1 -0
  161. package/dist/fields/color/index.d.ts +8 -0
  162. package/dist/fields/color/index.d.ts.map +1 -0
  163. package/dist/fields/color/inputSchema.d.ts +29 -0
  164. package/dist/fields/color/inputSchema.d.ts.map +1 -0
  165. package/dist/fields/color/types.d.ts +100 -0
  166. package/dist/fields/color/types.d.ts.map +1 -0
  167. package/dist/fields/color/utils.d.ts +100 -0
  168. package/dist/fields/color/utils.d.ts.map +1 -0
  169. package/dist/fields/color/validator.d.ts +27 -0
  170. package/dist/fields/color/validator.d.ts.map +1 -0
  171. package/dist/fields/constants.d.ts +108 -0
  172. package/dist/fields/constants.d.ts.map +1 -0
  173. package/dist/fields/date/config.d.ts +57 -0
  174. package/dist/fields/date/config.d.ts.map +1 -0
  175. package/dist/fields/date/index.d.ts +5 -0
  176. package/dist/fields/date/index.d.ts.map +1 -0
  177. package/dist/fields/date/inputSchema.d.ts +29 -0
  178. package/dist/fields/date/inputSchema.d.ts.map +1 -0
  179. package/dist/fields/date/types.d.ts +147 -0
  180. package/dist/fields/date/types.d.ts.map +1 -0
  181. package/dist/fields/date/validator.d.ts +34 -0
  182. package/dist/fields/date/validator.d.ts.map +1 -0
  183. package/dist/fields/group/config.d.ts +47 -0
  184. package/dist/fields/group/config.d.ts.map +1 -0
  185. package/dist/fields/group/index.d.ts +5 -0
  186. package/dist/fields/group/index.d.ts.map +1 -0
  187. package/dist/fields/group/inputSchema.d.ts +27 -0
  188. package/dist/fields/group/inputSchema.d.ts.map +1 -0
  189. package/dist/fields/group/types.d.ts +105 -0
  190. package/dist/fields/group/types.d.ts.map +1 -0
  191. package/dist/fields/group/validator.d.ts +41 -0
  192. package/dist/fields/group/validator.d.ts.map +1 -0
  193. package/dist/fields/index.d.ts +20 -0
  194. package/dist/fields/index.d.ts.map +1 -0
  195. package/dist/fields/inputSchemas/index.d.ts +23 -0
  196. package/dist/fields/inputSchemas/index.d.ts.map +1 -0
  197. package/dist/fields/inputSchemas/utils.d.ts +25 -0
  198. package/dist/fields/inputSchemas/utils.d.ts.map +1 -0
  199. package/dist/fields/interfaceGen.d.ts +15 -0
  200. package/dist/fields/interfaceGen.d.ts.map +1 -0
  201. package/dist/fields/number/config.d.ts +48 -0
  202. package/dist/fields/number/config.d.ts.map +1 -0
  203. package/dist/fields/number/index.d.ts +5 -0
  204. package/dist/fields/number/index.d.ts.map +1 -0
  205. package/dist/fields/number/inputSchema.d.ts +23 -0
  206. package/dist/fields/number/inputSchema.d.ts.map +1 -0
  207. package/dist/fields/number/types.d.ts +100 -0
  208. package/dist/fields/number/types.d.ts.map +1 -0
  209. package/dist/fields/number/validator.d.ts +39 -0
  210. package/dist/fields/number/validator.d.ts.map +1 -0
  211. package/dist/fields/relationship/config.d.ts +45 -0
  212. package/dist/fields/relationship/config.d.ts.map +1 -0
  213. package/dist/fields/relationship/index.d.ts +5 -0
  214. package/dist/fields/relationship/index.d.ts.map +1 -0
  215. package/dist/fields/relationship/inputSchema.d.ts +31 -0
  216. package/dist/fields/relationship/inputSchema.d.ts.map +1 -0
  217. package/dist/fields/relationship/types.d.ts +126 -0
  218. package/dist/fields/relationship/types.d.ts.map +1 -0
  219. package/dist/fields/relationship/validator.d.ts +27 -0
  220. package/dist/fields/relationship/validator.d.ts.map +1 -0
  221. package/dist/fields/select/config.d.ts +59 -0
  222. package/dist/fields/select/config.d.ts.map +1 -0
  223. package/dist/fields/select/index.d.ts +5 -0
  224. package/dist/fields/select/index.d.ts.map +1 -0
  225. package/dist/fields/select/inputSchema.d.ts +28 -0
  226. package/dist/fields/select/inputSchema.d.ts.map +1 -0
  227. package/dist/fields/select/types.d.ts +89 -0
  228. package/dist/fields/select/types.d.ts.map +1 -0
  229. package/dist/fields/select/validator.d.ts +31 -0
  230. package/dist/fields/select/validator.d.ts.map +1 -0
  231. package/dist/fields/text/config.d.ts +48 -0
  232. package/dist/fields/text/config.d.ts.map +1 -0
  233. package/dist/fields/text/index.d.ts +5 -0
  234. package/dist/fields/text/index.d.ts.map +1 -0
  235. package/dist/fields/text/inputSchema.d.ts +24 -0
  236. package/dist/fields/text/inputSchema.d.ts.map +1 -0
  237. package/dist/fields/text/types.d.ts +132 -0
  238. package/dist/fields/text/types.d.ts.map +1 -0
  239. package/dist/fields/text/validator.d.ts +39 -0
  240. package/dist/fields/text/validator.d.ts.map +1 -0
  241. package/dist/fields/types.d.ts +135 -0
  242. package/dist/fields/types.d.ts.map +1 -0
  243. package/dist/fields/upload/config.d.ts +24 -0
  244. package/dist/fields/upload/config.d.ts.map +1 -0
  245. package/dist/fields/upload/index.d.ts +5 -0
  246. package/dist/fields/upload/index.d.ts.map +1 -0
  247. package/dist/fields/upload/inputSchema.d.ts +17 -0
  248. package/dist/fields/upload/inputSchema.d.ts.map +1 -0
  249. package/dist/fields/upload/types.d.ts +78 -0
  250. package/dist/fields/upload/types.d.ts.map +1 -0
  251. package/dist/fields/upload/validator.d.ts +16 -0
  252. package/dist/fields/upload/validator.d.ts.map +1 -0
  253. package/dist/fields/url/config.d.ts +49 -0
  254. package/dist/fields/url/config.d.ts.map +1 -0
  255. package/dist/fields/url/index.d.ts +5 -0
  256. package/dist/fields/url/index.d.ts.map +1 -0
  257. package/dist/fields/url/inputSchema.d.ts +31 -0
  258. package/dist/fields/url/inputSchema.d.ts.map +1 -0
  259. package/dist/fields/url/types.d.ts +70 -0
  260. package/dist/fields/url/types.d.ts.map +1 -0
  261. package/dist/fields/url/validator.d.ts +37 -0
  262. package/dist/fields/url/validator.d.ts.map +1 -0
  263. package/dist/fields/utils.d.ts +47 -0
  264. package/dist/fields/utils.d.ts.map +1 -0
  265. package/dist/fields/validators/index.d.ts +23 -0
  266. package/dist/fields/validators/index.d.ts.map +1 -0
  267. package/dist/fields/validators/utils.d.ts +24 -0
  268. package/dist/fields/validators/utils.d.ts.map +1 -0
  269. package/dist/framework.d.ts +227 -0
  270. package/dist/framework.d.ts.map +1 -0
  271. package/dist/globals/config/config.d.ts +1 -0
  272. package/dist/globals/config/config.d.ts.map +1 -0
  273. package/dist/globals/config/types.d.ts +1 -0
  274. package/dist/globals/config/types.d.ts.map +1 -0
  275. package/dist/globals/config.d.ts +47 -0
  276. package/dist/globals/config.d.ts.map +1 -0
  277. package/dist/globals/index.d.ts +5 -0
  278. package/dist/globals/index.d.ts.map +1 -0
  279. package/dist/globals/interfaceGen.d.ts +33 -0
  280. package/dist/globals/interfaceGen.d.ts.map +1 -0
  281. package/dist/globals/types.d.ts +175 -0
  282. package/dist/globals/types.d.ts.map +1 -0
  283. package/dist/globals/utils.d.ts +37 -0
  284. package/dist/globals/utils.d.ts.map +1 -0
  285. package/dist/index.d.ts +15 -3165
  286. package/dist/index.d.ts.map +1 -0
  287. package/dist/index.js +2101 -3475
  288. package/dist/index.js.map +1 -1
  289. package/dist/media/api/index.d.ts +5 -0
  290. package/dist/media/api/index.d.ts.map +1 -0
  291. package/dist/media/api/mutations.d.ts +76 -0
  292. package/dist/media/api/mutations.d.ts.map +1 -0
  293. package/dist/media/api/queries.d.ts +28 -0
  294. package/dist/media/api/queries.d.ts.map +1 -0
  295. package/dist/media/api/server.d.ts +68 -0
  296. package/dist/media/api/server.d.ts.map +1 -0
  297. package/dist/media/api/types.d.ts +171 -0
  298. package/dist/media/api/types.d.ts.map +1 -0
  299. package/dist/media/config.d.ts +25 -0
  300. package/dist/media/config.d.ts.map +1 -0
  301. package/dist/media/index.d.ts +6 -0
  302. package/dist/media/index.d.ts.map +1 -0
  303. package/dist/media/types.d.ts +332 -0
  304. package/dist/media/types.d.ts.map +1 -0
  305. package/dist/media/utils.d.ts +35 -0
  306. package/dist/media/utils.d.ts.map +1 -0
  307. package/dist/media/validators.d.ts +61 -0
  308. package/dist/media/validators.d.ts.map +1 -0
  309. package/dist/schema/generateVexSchema.d.ts +36 -0
  310. package/dist/schema/generateVexSchema.d.ts.map +1 -0
  311. package/dist/schema/index.d.ts +3 -0
  312. package/dist/schema/index.d.ts.map +1 -0
  313. package/dist/schema/migrate.d.ts +73 -0
  314. package/dist/schema/migrate.d.ts.map +1 -0
  315. package/dist/types/generateVexTypes.d.ts +41 -0
  316. package/dist/types/generateVexTypes.d.ts.map +1 -0
  317. package/dist/types/generated.d.ts +382 -0
  318. package/dist/types/generated.d.ts.map +1 -0
  319. package/dist/types/index.d.ts +5 -0
  320. package/dist/types/index.d.ts.map +1 -0
  321. package/dist/utils.d.ts +57 -0
  322. package/dist/utils.d.ts.map +1 -0
  323. 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,5 @@
1
+ export * from "./config";
2
+ export * from "./types";
3
+ export * from "./validator";
4
+ export * from "./inputSchema";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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