@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,132 @@
1
+ import { ADMIN_FIELDS } from "../constants";
2
+ import { BaseField, BaseFieldInput, FieldAdminConfig } from "../baseTypes";
3
+ /**
4
+ * Configuration input for a `text()` field.
5
+ *
6
+ * Text fields store short, single-line string values — titles, slugs, URLs,
7
+ * email addresses, status labels, etc. All properties are optional; unset
8
+ * properties fall back to the defaults listed below.
9
+ *
10
+ * **Defaults applied by `text()`:**
11
+ * ```ts
12
+ * {
13
+ * type: "text",
14
+ * label: "", // inferred from the field key by defineCollection
15
+ * required: false, // field is optional by default
16
+ * admin: {
17
+ * hidden: false, // visible in the admin form
18
+ * readOnly: false, // editable by default
19
+ * position: "main", // placed in the main content column, not the sidebar
20
+ * width: "full", // spans the full form width, not half
21
+ * cellAlignment: "left", // text aligned left in the data table column
22
+ * }
23
+ * }
24
+ * ```
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * // Minimal — label is inferred from the key ("Title")
29
+ * title: text()
30
+ *
31
+ * // Required slug with length validation and a database index
32
+ * slug: text({ required: true, min: { value: 3 }, max: { value: 100 }, index: "by_slug" })
33
+ *
34
+ * // Author name with a placeholder hint shown in the admin form
35
+ * authorName: text({
36
+ * required: true,
37
+ * admin: { width: "half", placeholder: "e.g. Jane Smith" }
38
+ * })
39
+ *
40
+ * // Pre-filled default for a URL field
41
+ * canonicalUrl: text({ defaultValue: "https://example.com" })
42
+ * ```
43
+ *
44
+ * @see {@link BaseFieldInput} for shared properties (`label`, `description`, `required`, `admin`, `index`, `searchIndex`)
45
+ */
46
+ export interface TextFieldInput<TFieldMeta extends {} = {}> extends BaseFieldInput<TFieldMeta> {
47
+ /**
48
+ * Pre-filled value shown in the admin form when creating a new field.
49
+ * Does not apply to database values
50
+ *
51
+ */
52
+ defaultValue?: string;
53
+ /** Minimum character length config. */
54
+ min?: {
55
+ /** Minimum character length value. */
56
+ value: number;
57
+ /** Minimum character length error message. */
58
+ error?: string;
59
+ };
60
+ /** Maximum character length config. */
61
+ max?: {
62
+ /** Maximum character length value. */
63
+ value: number;
64
+ /** Maximum character length error message. */
65
+ error?: string;
66
+ };
67
+ /**
68
+ * Create a full-text search index on this field.
69
+ * The field this is defined on becomes the `searchField`.
70
+ *
71
+ * @example
72
+ * ```ts
73
+ * title: {
74
+ * type: "text",
75
+ * searchIndex: { name: "search_title", filterFields: ["status", "author"] },
76
+ * }
77
+ * // Generates: .searchIndex("search_title", { searchField: "title", filterFields: ["status", "author"] })
78
+ * ```
79
+ */
80
+ searchIndex?: {
81
+ /** Search index name (must be unique within the collection). */
82
+ name: string;
83
+ /**
84
+ * Fields to filter search results by.
85
+ * String array — validated at runtime against collection field names.
86
+ */
87
+ filterFields: string[];
88
+ };
89
+ }
90
+ /**
91
+ * Resolved configuration for a `text()` field, after all defaults are applied.
92
+ *
93
+ * This is the type that framework adapters and field components receive —
94
+ * `fieldDef` in `InputComponentProps<TextField>` and `CellComponentProps<TextField>`
95
+ * is this type.
96
+ *
97
+ * @see {@link TextFieldInput} for the user-facing input type
98
+ * @see {@link text} for the config function that produces this type
99
+ */
100
+ export interface TextField<TFieldMeta extends {} = {}> extends BaseField<TFieldMeta> {
101
+ readonly type: typeof ADMIN_FIELDS.text.type;
102
+ /** Display label shown in the admin form. Always set — inferred from the field key if not provided. */
103
+ label: string;
104
+ /** Whether this field is required in the database schema. */
105
+ required: boolean;
106
+ /** Resolved admin UI configuration with all defaults applied. */
107
+ admin: FieldAdminConfig;
108
+ /** Pre-filled value shown in the admin form when creating a new field. */
109
+ defaultValue: string;
110
+ /** Minimum allowed character length config. */
111
+ min?: {
112
+ /** Minimum allowed character length value. */
113
+ value: number;
114
+ /** Minimum allowed character length error message. */
115
+ error?: string;
116
+ };
117
+ /** Maximum allowed character length config. */
118
+ max?: {
119
+ /** Maximum allowed character length value. */
120
+ value: number;
121
+ /** Maximum allowed character length error message. */
122
+ error?: string;
123
+ };
124
+ /** Full-text search index configuration for this field. */
125
+ searchIndex?: {
126
+ /** Search index name — must be unique within the collection. */
127
+ name: string;
128
+ /** Fields to filter search results by. */
129
+ filterFields: string[];
130
+ };
131
+ }
132
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fields/text/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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,WAAW,cAAc,CAC7B,UAAU,SAAS,EAAE,GAAG,EAAE,CAC1B,SAAQ,cAAc,CAAC,UAAU,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,GAAG,CAAC,EAAE;QACJ,sCAAsC;QACtC,KAAK,EAAE,MAAM,CAAC;QACd,8CAA8C;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,uCAAuC;IACvC,GAAG,CAAC,EAAE;QACJ,sCAAsC;QACtC,KAAK,EAAE,MAAM,CAAC;QACd,8CAA8C;QAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE;QACZ,gEAAgE;QAChE,IAAI,EAAE,MAAM,CAAC;QACb;;;WAGG;QACH,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,SAAS,CAAC,UAAU,SAAS,EAAE,GAAG,EAAE,CAAE,SAAQ,SAAS,CAAC,UAAU,CAAC;IAClF,QAAQ,CAAC,IAAI,EAAE,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7C,uGAAuG;IACvG,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,KAAK,EAAE,gBAAgB,CAAC;IACxB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,GAAG,CAAC,EAAE;QACJ,8CAA8C;QAC9C,KAAK,EAAE,MAAM,CAAC;QACd,sDAAsD;QACtD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,+CAA+C;IAC/C,GAAG,CAAC,EAAE;QACJ,8CAA8C;QAC9C,KAAK,EAAE,MAAM,CAAC;QACd,sDAAsD;QACtD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,2DAA2D;IAC3D,WAAW,CAAC,EAAE;QACZ,gEAAgE;QAChE,IAAI,EAAE,MAAM,CAAC;QACb,0CAA0C;QAC1C,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;CACH"}
@@ -0,0 +1,39 @@
1
+ import type { TextField } from "./types";
2
+ /**
3
+ * Converts a text field definition to a Convex schema validator.
4
+ *
5
+ * Generates the appropriate v.string() or v.optional(v.string()) code
6
+ * for the Convex schema based on the field's required property.
7
+ *
8
+ * **Important notes:**
9
+ * - `min`/`max` are runtime validation constraints, NOT schema constraints
10
+ * - They don't affect the generated Convex value type
11
+ * - Validation happens in the admin panel and mutation handlers
12
+ * - The index property is handled separately by index collection logic
13
+ *
14
+ * This function is used by the CLI during schema generation to build
15
+ * the Convex schema file.
16
+ *
17
+ * @param props - textFieldToValidator() input props
18
+ * @param props.field - The text field definition
19
+ * @returns Convex value type string: "v.string()" or "v.optional(v.string())"
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const field1 = text({ required: true })
24
+ * textToValidatorString({ field: field1 }) // "v.string()"
25
+ *
26
+ * const field2 = text({ required: false })
27
+ * textToValidatorString({ field: field2 }) // "v.optional(v.string())"
28
+ *
29
+ * const field3 = text({ min: { value: 3 }, max: { value: 100 } })
30
+ * textToValidatorString({ field: field3 }) // "v.optional(v.string())"
31
+ * // Note: Length constraints don't affect schema, handled at validation layer
32
+ * ```
33
+ *
34
+ * @internal - Used by schema generation, not typically called by users
35
+ */
36
+ export declare function textFieldToValidator(props: {
37
+ field: TextField;
38
+ }): string;
39
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/fields/text/validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,GAAG,MAAM,CAKxE"}
@@ -0,0 +1,135 @@
1
+ import { NumberField } from "./number";
2
+ import { TextField } from "./text";
3
+ import { CheckboxField } from "./checkbox";
4
+ import { DateField } from "./date";
5
+ import { TDocument } from "../api/convex";
6
+ import { CollectionConfig } from "../collections";
7
+ import { Row } from "@tanstack/react-table";
8
+ import { SelectField } from "./select";
9
+ import { UrlField } from "./url";
10
+ import { ColorField } from "./color";
11
+ import { RelationshipField } from "./relationship";
12
+ import { ArrayField, ArrayType } from "./array";
13
+ import { GroupField } from "./group";
14
+ import { BlocksField } from "./blocks";
15
+ import { UploadField } from "./upload";
16
+ import { GlobalConfig } from "../globals";
17
+ export * from "./text/types";
18
+ export * from "./number/types";
19
+ export * from "./checkbox/types";
20
+ export * from "./blocks/types";
21
+ /**
22
+ * BaseFieldMeta - empty object
23
+ */
24
+ export type BaseFieldMeta = {};
25
+ /**
26
+ * CollectionFieldMeta - default metadata
27
+ * added to all fields via defineCollection, defineMediaCollection, etc
28
+ */
29
+ export type CollectionFieldMeta = BaseFieldMeta & {
30
+ collectionSlug: string;
31
+ };
32
+ /**
33
+ * Discriminated union of all field types in VexCMS.
34
+ *
35
+ * Switch on `field.type` to narrow to a specific field type and access
36
+ * its type-specific properties.
37
+ *
38
+ * Currently includes:
39
+ * - `TextField` — single-line text input
40
+ * - `NumberField` — numeric value (price, quantity, rating, etc.)
41
+ * - `CheckboxField` — boolean toggle (published state, feature flag, opt-in, etc.)
42
+ * - `DateField` — Unix ms timestamp (publish date, expiry date, event time, etc.)
43
+ * - `SelectField` — single-choice from a predefined set of options
44
+ * - `UrlField` — validated URL string
45
+ * - `ColorField` — CSS colour string, or a `var(--token)` reference when `themeColors` is on
46
+ * - `RelationshipField` — Convex `Id` reference to a document in another collection
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * function handleField(field: AdminField) {
51
+ * switch (field.type) {
52
+ * case "text":
53
+ * // field is TextField
54
+ * break;
55
+ * }
56
+ * }
57
+ * ```
58
+ */
59
+ export type AdminField<TFieldMeta extends BaseFieldMeta = BaseFieldMeta> = TextField<TFieldMeta> | NumberField<TFieldMeta> | CheckboxField<TFieldMeta> | DateField<TFieldMeta> | SelectField<TFieldMeta> | UrlField<TFieldMeta> | ColorField<TFieldMeta> | ArrayField<ArrayType, TFieldMeta> | RelationshipField<TFieldMeta> | UploadField<TFieldMeta> | BlocksField<TFieldMeta> | GroupField<TFieldMeta>;
60
+ /**
61
+ * Props passed to field input components rendered in the document edit form.
62
+ *
63
+ * Every input component registered in a framework adapter's `fields` map must
64
+ * accept these props. The `TField` generic narrows `fieldDef` to the specific
65
+ * field type (e.g. `TextField`) so type-specific properties are accessible
66
+ * with autocomplete.
67
+ *
68
+ * In React, use `createFieldInput<TValue, TField>` to build components that
69
+ * accept these props — it handles TanStack Form wiring automatically.
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * // React — using createFieldInput
74
+ * export const TextFieldInput = createFieldInput<string, TextField>(
75
+ * ({ name, fieldDef, readOnly, field }) => (
76
+ * <input
77
+ * value={field.state.value ?? ""}
78
+ * onChange={(e) => field.handleChange(e.target.value)}
79
+ * readOnly={readOnly}
80
+ * placeholder={fieldDef.admin.placeholder}
81
+ * />
82
+ * ),
83
+ * );
84
+ * ```
85
+ *
86
+ * @see {@link CellComponentProps} for the data table equivalent
87
+ * @see {@link FieldComponentMap} for how components are registered
88
+ */
89
+ export interface InputComponentProps<TFieldMeta extends BaseFieldMeta = BaseFieldMeta, TField extends AdminField<TFieldMeta> = AdminField<TFieldMeta>> {
90
+ /** The field key name from the collection config, e.g. `"title"`. Used as the form field name. */
91
+ name: string;
92
+ /** The resolved field definition — narrows to the specific field type via `TField`. */
93
+ fieldDef: TField;
94
+ /** Whether the field is non-editable — derived from `fieldDef.admin.readOnly` or permission checks. */
95
+ readOnly: boolean;
96
+ index?: number;
97
+ /** The config for the collection this field is attached to. */
98
+ collection: CollectionConfig | GlobalConfig;
99
+ }
100
+ /**
101
+ * Props passed to field cell components rendered in the data table list view.
102
+ *
103
+ * Every cell component registered in a framework adapter's `fields` map must
104
+ * accept these props. The `TField` generic narrows `fieldDef` to the specific
105
+ * field type so type-specific properties are accessible.
106
+ *
107
+ * `value` is typed as `TField["defaultValue"]` which resolves to the field's
108
+ * stored value type (e.g. `string` for `TextField`).
109
+ *
110
+ * @example
111
+ * ```tsx
112
+ * export function TextFieldCell(props: CellComponentProps<TextField>) {
113
+ * if (!props.value) return <span>—</span>;
114
+ * return <span>{props.value}</span>;
115
+ * }
116
+ * ```
117
+ *
118
+ * @see {@link InputComponentProps} for the edit form equivalent
119
+ * @see {@link FieldComponentMap} for how components are registered
120
+ */
121
+ export interface CellComponentProps<TField extends AdminField = AdminField, TData extends TDocument = TDocument, TCollectionConfig extends CollectionConfig = CollectionConfig> {
122
+ /** The raw field value from the document — typed to the field's value type. */
123
+ value: TField["defaultValue"];
124
+ /** The full document row, for cases where the cell needs to read other fields. */
125
+ row: Row<TData>;
126
+ /** The resolved field definition — narrows to the specific field type via `TField`. */
127
+ fieldDef: TField;
128
+ /** The resolved field key on the collection for this column. */
129
+ fieldKey: string;
130
+ /** Whether this cell is the field designated as `useAsTitle` — used to render a clickable edit link. */
131
+ isTitleField: boolean;
132
+ /** The parent collection config — used by title cells to build the edit link `href`. */
133
+ collection: TCollectionConfig;
134
+ }
135
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/fields/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { BaseFieldMeta } from "../types";
2
+ import type { UploadFieldInput, UploadField } from "./types";
3
+ /**
4
+ * Creates an upload field that stores a reference to a media document.
5
+ *
6
+ * The `to` parameter specifies which media collection receives uploaded files.
7
+ * At config validation time, the `to` slug is checked against the media
8
+ * collections returned by all configured storage adapters.
9
+ *
10
+ * @param options — Upload field configuration. `to` is required.
11
+ * @returns Resolved upload field definition.
12
+ *
13
+ * @throws {Error} If `to` is empty or not a valid slug (`/^[a-zA-Z][a-zA-Z0-9_-]*$/`).
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * defineCollection({
18
+ * fields: {
19
+ * featuredImage: upload({ to: "images", label: "Featured Image" }),
20
+ * },
21
+ * });
22
+ */
23
+ export declare function upload<TFieldMeta extends BaseFieldMeta = BaseFieldMeta>(options: UploadFieldInput<TFieldMeta>): UploadField<TFieldMeta>;
24
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/fields/upload/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,MAAM,CAAC,UAAU,SAAS,aAAa,GAAG,aAAa,EACrE,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,GACpC,WAAW,CAAC,UAAU,CAAC,CA+BzB"}
@@ -0,0 +1,5 @@
1
+ export * from "./types";
2
+ export * from "./config";
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/upload/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type ZodType } from "zod";
2
+ import type { UploadField } from "./types";
3
+ /**
4
+ * Generates the Zod input schema for an upload field.
5
+ *
6
+ * The form stores a media document ID string. The upload component validates
7
+ * that the ID points to an existing media document at the UI level (by querying
8
+ * the media collection), but the Zod schema is a simple string check.
9
+ *
10
+ * @param props — Input schema generation options.
11
+ * @param props.field — The resolved upload field definition.
12
+ * @returns Zod schema for the form field value.
13
+ */
14
+ export declare function uploadFieldToInputSchema(props: {
15
+ field: UploadField;
16
+ }): ZodType;
17
+ //# sourceMappingURL=inputSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputSchema.d.ts","sourceRoot":"","sources":["../../../src/fields/upload/inputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAG/E"}
@@ -0,0 +1,78 @@
1
+ import type { BaseField, BaseFieldInput } from "../baseTypes";
2
+ import type { MediaCollectionSlug } from "../../types/generated";
3
+ import { ADMIN_FIELDS } from "../constants";
4
+ import { BaseFieldMeta } from "../types";
5
+ /**
6
+ * Input configuration for an `upload()` field — the `to` parameter is required
7
+ * and references the target media collection slug.
8
+ */
9
+ export interface UploadFieldInput<TFieldMeta extends BaseFieldMeta = BaseFieldMeta> extends BaseFieldInput<TFieldMeta> {
10
+ /**
11
+ * The slug of the media collection that stores uploaded files for this field.
12
+ *
13
+ * Must match a media collection defined via a storage adapter's
14
+ * `defineMediaCollection()`. After running `vex generate`, this is typed as
15
+ * `MediaCollectionSlug` — a union of all media collection slugs in the project.
16
+ * Before generation, it falls back to `string`.
17
+ *
18
+ * Config validation (in `media/config.ts`) also checks at runtime that the
19
+ * slug exists in `VexConfig.mediaCollections`.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * upload({ to: "images", label: "Featured Image" })
24
+ */
25
+ to: MediaCollectionSlug;
26
+ /**
27
+ * The min number of files allowed.
28
+ */
29
+ min?: number;
30
+ /**
31
+ * The max number of files allowed.
32
+ */
33
+ max?: number;
34
+ /**
35
+ * Whether this input accepts multiple files or only one.
36
+ */
37
+ hasMany?: boolean;
38
+ /**
39
+ * Pre-filled value shown in the admin form when creating a new document.
40
+ */
41
+ defaultValue?: string[];
42
+ /**
43
+ * Restrict files that can be uploaded by mimeType.
44
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/accept
45
+ * @example 'image/*'
46
+ * @example 'image/*, audio/mp4'
47
+ * @example 'image/webp, audio/mp3'
48
+ */
49
+ accept?: string;
50
+ }
51
+ /**
52
+ * Resolved upload field definition after defaults are applied.
53
+ */
54
+ export interface UploadField<TFieldMeta extends BaseFieldMeta = BaseFieldMeta> extends BaseField<TFieldMeta> {
55
+ readonly type: typeof ADMIN_FIELDS.upload.type;
56
+ to: MediaCollectionSlug;
57
+ /**
58
+ * Whether this input accepts multiple files or only one.
59
+ */
60
+ hasMany: boolean;
61
+ /**
62
+ * The min number of files allowed.
63
+ */
64
+ min: number;
65
+ /**
66
+ * The max number of files allowed.
67
+ */
68
+ max?: number;
69
+ /**
70
+ * Pre-filled value shown in the admin form when creating a new document.
71
+ */
72
+ defaultValue?: string[];
73
+ /**
74
+ * Restrict files that can be uploaded by mimeType.
75
+ */
76
+ accept: string;
77
+ }
78
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fields/upload/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,WAAW,gBAAgB,CAC/B,UAAU,SAAS,aAAa,GAAG,aAAa,CAChD,SAAQ,cAAc,CAAC,UAAU,CAAC;IAClC;;;;;;;;;;;;;;OAcG;IACH,EAAE,EAAE,mBAAmB,CAAC;IACxB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAC1B,UAAU,SAAS,aAAa,GAAG,aAAa,CAChD,SAAQ,SAAS,CAAC,UAAU,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;IAC/C,EAAE,EAAE,mBAAmB,CAAC;IACxB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,16 @@
1
+ import type { UploadField } from "./types";
2
+ /**
3
+ * Generates the Convex schema validator for an upload field.
4
+ *
5
+ * Stores a media document ID: `v.id("<to-slug>")`. The `to` slug is the
6
+ * media collection name — schema generation validates that the collection exists.
7
+ *
8
+ * @param props — Validator generation options.
9
+ * @param props.field — The resolved upload field definition.
10
+ * @returns Convex validator string, e.g. `"v.id(\"images\")"` or
11
+ * `"v.optional(v.id(\"images\"))"`.
12
+ */
13
+ export declare function uploadFieldToValidator(props: {
14
+ field: UploadField;
15
+ }): string;
16
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/fields/upload/validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,MAAM,CAG5E"}
@@ -0,0 +1,49 @@
1
+ import { BaseFieldMeta } from "../types";
2
+ import type { UrlFieldInput, UrlField } from "./types";
3
+ /**
4
+ * Creates a URL field with all defaults applied.
5
+ *
6
+ * URL fields store absolute URLs as strings and render them as clickable
7
+ * links in the admin data table. Common uses: website links, canonical
8
+ * URLs, external resource references, social profile URLs.
9
+ *
10
+ * Accepts {@link UrlFieldInput} (all optional) and returns {@link UrlField} with all defaults applied.
11
+ *
12
+ * **Defaults applied:**
13
+ * - `label` — `""` (inferred from the field key by `defineCollection`)
14
+ * - `required` — `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 - URL field configuration. All properties are optional.
22
+ * @returns Resolved URL field definition with all defaults applied.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { url, defineCollection } from '@vexcms/core'
27
+ *
28
+ * pages: defineCollection({
29
+ * fields: {
30
+ * // Minimal — label inferred from key ("Canonical Url")
31
+ * canonicalUrl: url(),
32
+ *
33
+ * // Required website URL with a length cap and database index
34
+ * website: url({ required: true, max: { value: 2048 }, index: "by_website" }),
35
+ *
36
+ * // Social profile URL with a placeholder hint
37
+ * twitterUrl: url({
38
+ * required: false,
39
+ * admin: { width: "half", placeholder: "https://twitter.com/username" },
40
+ * }),
41
+ * }
42
+ * })
43
+ * ```
44
+ *
45
+ * @see {@link UrlFieldInput} for the full input type
46
+ * @see {@link UrlField} for the resolved output type
47
+ */
48
+ export declare function url<TFieldMeta extends BaseFieldMeta = BaseFieldMeta>(options?: UrlFieldInput<TFieldMeta>): UrlField<TFieldMeta>;
49
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/fields/url/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,GAAG,CAAC,UAAU,SAAS,aAAa,GAAG,aAAa,EAClE,OAAO,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,GAClC,QAAQ,CAAC,UAAU,CAAC,CA0BtB"}
@@ -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/url/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { type ZodType } from "zod";
2
+ import { UrlField } from "./types";
3
+ /**
4
+ * Builds a Zod schema for validating a URL field value in the admin form.
5
+ *
6
+ * Enforces URL format via `z.url()`. Required fields add a `.min(1)` check.
7
+ * `.default(field.defaultValue)` is applied only when `defaultValue` is explicitly
8
+ * set on the field — unlike `text()`, the url field has no implicit empty-string
9
+ * default. Wraps in `.optional()` for non-required fields via
10
+ * `applyBaseInputSchemaMeta`.
11
+ *
12
+ * @param props - Input props.
13
+ * @param props.field - The resolved URL field definition.
14
+ * @returns A Zod URL schema. Optional fields are wrapped in `.optional()`. A
15
+ * `.default()` is only added when `field.defaultValue` is not `undefined`.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Required — rejects empty string and non-URLs
20
+ * urlFieldToInputSchema({ field: url({ required: true }) })
21
+ * // → z.url().min(1, "This field is required.").optional() — no default
22
+ *
23
+ * // Optional with explicit default
24
+ * urlFieldToInputSchema({ field: url({ required: false, defaultValue: "https://example.com" }) })
25
+ * // → z.url().default("https://example.com").optional()
26
+ * ```
27
+ */
28
+ export declare function urlFieldToInputSchema(props: {
29
+ field: UrlField;
30
+ }): ZodType;
31
+ //# sourceMappingURL=inputSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputSchema.d.ts","sourceRoot":"","sources":["../../../src/fields/url/inputSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,GAAG,OAAO,CAiBzE"}
@@ -0,0 +1,70 @@
1
+ import { ADMIN_FIELDS } from "../constants";
2
+ import { BaseField, BaseFieldInput } from "../baseTypes";
3
+ /**
4
+ * Configuration input for a `url()` field.
5
+ *
6
+ * URL fields store absolute URLs as strings. All properties are optional;
7
+ * unset properties fall back to the defaults listed below.
8
+ *
9
+ * **Defaults applied by `url()`:**
10
+ * ```ts
11
+ * {
12
+ * type: "url",
13
+ * label: "", // inferred from the field key by defineCollection
14
+ * required: false, // field is optional by default
15
+ * admin: {
16
+ * hidden: false, // visible in the admin form
17
+ * readOnly: false, // editable by default
18
+ * position: "main", // placed in the main content column, not the sidebar
19
+ * width: "full", // spans the full form width, not half
20
+ * cellAlignment: "left", // text aligned left in the data table column
21
+ * }
22
+ * }
23
+ * ```
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * // Minimal — label is inferred from the key ("Canonical Url")
28
+ * canonicalUrl: url()
29
+ *
30
+ * // Required website URL with a length cap and a database index
31
+ * website: url({ required: true, max: { value: 2048 }, index: "by_website" })
32
+ *
33
+ * // Social profile URL with a placeholder hint
34
+ * twitterUrl: url({
35
+ * required: false,
36
+ * admin: { width: "half", placeholder: "https://twitter.com/username" }
37
+ * })
38
+ *
39
+ * // Pre-filled default URL
40
+ * homepageUrl: url({ defaultValue: "https://example.com" })
41
+ * ```
42
+ *
43
+ * @see {@link BaseFieldInput} for shared properties (`label`, `description`, `required`, `admin`, `index`, `searchIndex`)
44
+ */
45
+ export interface UrlFieldInput<TFieldMeta extends {} = {}> extends BaseFieldInput<TFieldMeta> {
46
+ /**
47
+ * Pre-filled value shown in the admin form when creating a new document.
48
+ * Does not affect existing database values.
49
+ */
50
+ defaultValue?: string;
51
+ }
52
+ /**
53
+ * Resolved configuration for a `url()` field, after all defaults are applied.
54
+ *
55
+ * This is the type that framework adapters and field components receive —
56
+ * `fieldDef` in `InputComponentProps<UrlField>` and `CellComponentProps<UrlField>`
57
+ * is this type.
58
+ *
59
+ * @see {@link UrlFieldInput} for the user-facing input type
60
+ * @see {@link url} for the config function that produces this type
61
+ */
62
+ export interface UrlField<TFieldMeta extends {} = {}> extends BaseField<TFieldMeta> {
63
+ readonly type: typeof ADMIN_FIELDS.url.type;
64
+ /**
65
+ * Pre-filled value shown in the admin form when creating a new document.
66
+ * `undefined` means no default is applied — the input starts empty.
67
+ */
68
+ defaultValue?: string;
69
+ }
70
+ //# sourceMappingURL=types.d.ts.map