@plumix/core 0.6.0 → 0.7.0

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 (418) hide show
  1. package/dist/cache/embedded-tags.d.ts +5 -0
  2. package/dist/cache/embedded-tags.d.ts.map +1 -0
  3. package/dist/cache/embedded-tags.js +30 -0
  4. package/dist/cache/embedded-tags.js.map +1 -0
  5. package/dist/entries/read-service.d.ts.map +1 -1
  6. package/dist/entries/read-service.js +5 -3
  7. package/dist/entries/read-service.js.map +1 -1
  8. package/dist/index.d.ts +3 -1
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/plugin/errors.d.ts +7 -1
  13. package/dist/plugin/errors.d.ts.map +1 -1
  14. package/dist/plugin/errors.js +5 -0
  15. package/dist/plugin/errors.js.map +1 -1
  16. package/dist/plugin/fields/builder.d.ts +106 -0
  17. package/dist/plugin/fields/builder.d.ts.map +1 -0
  18. package/dist/plugin/fields/builder.js +162 -0
  19. package/dist/plugin/fields/builder.js.map +1 -0
  20. package/dist/plugin/fields/color.d.ts +78 -18
  21. package/dist/plugin/fields/color.d.ts.map +1 -1
  22. package/dist/plugin/fields/color.js +116 -25
  23. package/dist/plugin/fields/color.js.map +1 -1
  24. package/dist/plugin/fields/condition.d.ts +40 -0
  25. package/dist/plugin/fields/condition.d.ts.map +1 -0
  26. package/dist/plugin/fields/condition.js +115 -0
  27. package/dist/plugin/fields/condition.js.map +1 -0
  28. package/dist/plugin/fields/contributions.d.ts +233 -0
  29. package/dist/plugin/fields/contributions.d.ts.map +1 -0
  30. package/dist/plugin/fields/contributions.js +1 -0
  31. package/dist/plugin/fields/contributions.js.map +1 -0
  32. package/dist/plugin/fields/entry.d.ts +18 -22
  33. package/dist/plugin/fields/entry.d.ts.map +1 -1
  34. package/dist/plugin/fields/entry.js +13 -21
  35. package/dist/plugin/fields/entry.js.map +1 -1
  36. package/dist/plugin/fields/errors.d.ts +23 -11
  37. package/dist/plugin/fields/errors.d.ts.map +1 -1
  38. package/dist/plugin/fields/errors.js +20 -13
  39. package/dist/plugin/fields/errors.js.map +1 -1
  40. package/dist/plugin/fields/group.d.ts +90 -0
  41. package/dist/plugin/fields/group.d.ts.map +1 -0
  42. package/dist/plugin/fields/group.js +124 -0
  43. package/dist/plugin/fields/group.js.map +1 -0
  44. package/dist/plugin/fields/index.d.ts +22 -45
  45. package/dist/plugin/fields/index.d.ts.map +1 -1
  46. package/dist/plugin/fields/index.js +25 -30
  47. package/dist/plugin/fields/index.js.map +1 -1
  48. package/dist/plugin/fields/json.d.ts +71 -9
  49. package/dist/plugin/fields/json.d.ts.map +1 -1
  50. package/dist/plugin/fields/json.js +110 -16
  51. package/dist/plugin/fields/json.js.map +1 -1
  52. package/dist/plugin/fields/link.d.ts +96 -0
  53. package/dist/plugin/fields/link.d.ts.map +1 -0
  54. package/dist/plugin/fields/link.js +160 -0
  55. package/dist/plugin/fields/link.js.map +1 -0
  56. package/dist/plugin/fields/number.d.ts +86 -13
  57. package/dist/plugin/fields/number.d.ts.map +1 -1
  58. package/dist/plugin/fields/number.js +133 -20
  59. package/dist/plugin/fields/number.js.map +1 -1
  60. package/dist/plugin/fields/range.d.ts +101 -17
  61. package/dist/plugin/fields/range.d.ts.map +1 -1
  62. package/dist/plugin/fields/range.js +153 -38
  63. package/dist/plugin/fields/range.js.map +1 -1
  64. package/dist/plugin/fields/reference.d.ts +171 -0
  65. package/dist/plugin/fields/reference.d.ts.map +1 -0
  66. package/dist/plugin/fields/reference.js +193 -0
  67. package/dist/plugin/fields/reference.js.map +1 -0
  68. package/dist/plugin/fields/repeater.d.ts +111 -8
  69. package/dist/plugin/fields/repeater.d.ts.map +1 -1
  70. package/dist/plugin/fields/repeater.js +157 -66
  71. package/dist/plugin/fields/repeater.js.map +1 -1
  72. package/dist/plugin/fields/richtext-validate.d.ts +7 -0
  73. package/dist/plugin/fields/richtext-validate.d.ts.map +1 -1
  74. package/dist/plugin/fields/richtext-validate.js +11 -5
  75. package/dist/plugin/fields/richtext-validate.js.map +1 -1
  76. package/dist/plugin/fields/richtext.d.ts +78 -12
  77. package/dist/plugin/fields/richtext.d.ts.map +1 -1
  78. package/dist/plugin/fields/richtext.js +121 -26
  79. package/dist/plugin/fields/richtext.js.map +1 -1
  80. package/dist/plugin/fields/select.d.ts +150 -10
  81. package/dist/plugin/fields/select.d.ts.map +1 -1
  82. package/dist/plugin/fields/select.js +205 -17
  83. package/dist/plugin/fields/select.js.map +1 -1
  84. package/dist/plugin/fields/sub-fields.d.ts +12 -0
  85. package/dist/plugin/fields/sub-fields.d.ts.map +1 -0
  86. package/dist/plugin/fields/sub-fields.js +62 -0
  87. package/dist/plugin/fields/sub-fields.js.map +1 -0
  88. package/dist/plugin/fields/temporal.d.ts +124 -0
  89. package/dist/plugin/fields/temporal.d.ts.map +1 -0
  90. package/dist/plugin/fields/temporal.js +180 -0
  91. package/dist/plugin/fields/temporal.js.map +1 -0
  92. package/dist/plugin/fields/term.d.ts +11 -16
  93. package/dist/plugin/fields/term.d.ts.map +1 -1
  94. package/dist/plugin/fields/term.js +11 -19
  95. package/dist/plugin/fields/term.js.map +1 -1
  96. package/dist/plugin/fields/toggle.d.ts +97 -0
  97. package/dist/plugin/fields/toggle.d.ts.map +1 -0
  98. package/dist/plugin/fields/toggle.js +135 -0
  99. package/dist/plugin/fields/toggle.js.map +1 -0
  100. package/dist/plugin/fields/user.d.ts +14 -26
  101. package/dist/plugin/fields/user.d.ts.map +1 -1
  102. package/dist/plugin/fields/user.js +11 -25
  103. package/dist/plugin/fields/user.js.map +1 -1
  104. package/dist/plugin/lookup.d.ts +70 -1
  105. package/dist/plugin/lookup.d.ts.map +1 -1
  106. package/dist/plugin/manifest.d.ts +308 -128
  107. package/dist/plugin/manifest.d.ts.map +1 -1
  108. package/dist/plugin/manifest.js +94 -4
  109. package/dist/plugin/manifest.js.map +1 -1
  110. package/dist/plugin/setup-context.d.ts +5 -4
  111. package/dist/plugin/setup-context.d.ts.map +1 -1
  112. package/dist/plugin/setup-context.js +10 -3
  113. package/dist/plugin/setup-context.js.map +1 -1
  114. package/dist/plugin/validation/meta-box-fields.d.ts.map +1 -1
  115. package/dist/plugin/validation/meta-box-fields.js +16 -0
  116. package/dist/plugin/validation/meta-box-fields.js.map +1 -1
  117. package/dist/route/render/build-resolved-entries.d.ts.map +1 -1
  118. package/dist/route/render/build-resolved-entries.js +7 -2
  119. package/dist/route/render/build-resolved-entries.js.map +1 -1
  120. package/dist/route/render/render-template.d.ts.map +1 -1
  121. package/dist/route/render/render-template.js +12 -2
  122. package/dist/route/render/render-template.js.map +1 -1
  123. package/dist/route/render/template-builders.d.ts +15 -10
  124. package/dist/route/render/template-builders.d.ts.map +1 -1
  125. package/dist/route/render/template-builders.js.map +1 -1
  126. package/dist/rpc/base.d.ts +7 -0
  127. package/dist/rpc/base.d.ts.map +1 -1
  128. package/dist/rpc/errors.d.ts +7 -0
  129. package/dist/rpc/errors.d.ts.map +1 -1
  130. package/dist/rpc/errors.js +16 -0
  131. package/dist/rpc/errors.js.map +1 -1
  132. package/dist/rpc/meta/core.d.ts +89 -10
  133. package/dist/rpc/meta/core.d.ts.map +1 -1
  134. package/dist/rpc/meta/core.js +465 -282
  135. package/dist/rpc/meta/core.js.map +1 -1
  136. package/dist/rpc/meta/field-messages.d.ts +67 -0
  137. package/dist/rpc/meta/field-messages.d.ts.map +1 -0
  138. package/dist/rpc/meta/field-messages.js +67 -0
  139. package/dist/rpc/meta/field-messages.js.map +1 -0
  140. package/dist/rpc/meta/field-pipeline.d.ts +52 -0
  141. package/dist/rpc/meta/field-pipeline.d.ts.map +1 -0
  142. package/dist/rpc/meta/field-pipeline.js +501 -0
  143. package/dist/rpc/meta/field-pipeline.js.map +1 -0
  144. package/dist/rpc/procedures/auth/allowed-domains/create.d.ts +7 -0
  145. package/dist/rpc/procedures/auth/allowed-domains/create.d.ts.map +1 -1
  146. package/dist/rpc/procedures/auth/allowed-domains/delete.d.ts +7 -0
  147. package/dist/rpc/procedures/auth/allowed-domains/delete.d.ts.map +1 -1
  148. package/dist/rpc/procedures/auth/allowed-domains/index.d.ts +28 -0
  149. package/dist/rpc/procedures/auth/allowed-domains/index.d.ts.map +1 -1
  150. package/dist/rpc/procedures/auth/allowed-domains/list.d.ts +7 -0
  151. package/dist/rpc/procedures/auth/allowed-domains/list.d.ts.map +1 -1
  152. package/dist/rpc/procedures/auth/allowed-domains/update.d.ts +7 -0
  153. package/dist/rpc/procedures/auth/allowed-domains/update.d.ts.map +1 -1
  154. package/dist/rpc/procedures/auth/api-tokens/admin-list.d.ts +7 -0
  155. package/dist/rpc/procedures/auth/api-tokens/admin-list.d.ts.map +1 -1
  156. package/dist/rpc/procedures/auth/api-tokens/admin-revoke.d.ts +7 -0
  157. package/dist/rpc/procedures/auth/api-tokens/admin-revoke.d.ts.map +1 -1
  158. package/dist/rpc/procedures/auth/api-tokens/create.d.ts +7 -0
  159. package/dist/rpc/procedures/auth/api-tokens/create.d.ts.map +1 -1
  160. package/dist/rpc/procedures/auth/api-tokens/index.d.ts +35 -0
  161. package/dist/rpc/procedures/auth/api-tokens/index.d.ts.map +1 -1
  162. package/dist/rpc/procedures/auth/api-tokens/list.d.ts +7 -0
  163. package/dist/rpc/procedures/auth/api-tokens/list.d.ts.map +1 -1
  164. package/dist/rpc/procedures/auth/api-tokens/revoke.d.ts +7 -0
  165. package/dist/rpc/procedures/auth/api-tokens/revoke.d.ts.map +1 -1
  166. package/dist/rpc/procedures/auth/credentials/delete.d.ts +7 -0
  167. package/dist/rpc/procedures/auth/credentials/delete.d.ts.map +1 -1
  168. package/dist/rpc/procedures/auth/credentials/index.d.ts +21 -0
  169. package/dist/rpc/procedures/auth/credentials/index.d.ts.map +1 -1
  170. package/dist/rpc/procedures/auth/credentials/list.d.ts +7 -0
  171. package/dist/rpc/procedures/auth/credentials/list.d.ts.map +1 -1
  172. package/dist/rpc/procedures/auth/credentials/rename.d.ts +7 -0
  173. package/dist/rpc/procedures/auth/credentials/rename.d.ts.map +1 -1
  174. package/dist/rpc/procedures/auth/device-flow/approve.d.ts +7 -0
  175. package/dist/rpc/procedures/auth/device-flow/approve.d.ts.map +1 -1
  176. package/dist/rpc/procedures/auth/device-flow/deny.d.ts +7 -0
  177. package/dist/rpc/procedures/auth/device-flow/deny.d.ts.map +1 -1
  178. package/dist/rpc/procedures/auth/device-flow/index.d.ts +21 -0
  179. package/dist/rpc/procedures/auth/device-flow/index.d.ts.map +1 -1
  180. package/dist/rpc/procedures/auth/device-flow/lookup.d.ts +7 -0
  181. package/dist/rpc/procedures/auth/device-flow/lookup.d.ts.map +1 -1
  182. package/dist/rpc/procedures/auth/index.d.ts +154 -0
  183. package/dist/rpc/procedures/auth/index.d.ts.map +1 -1
  184. package/dist/rpc/procedures/auth/login-links.d.ts +7 -0
  185. package/dist/rpc/procedures/auth/login-links.d.ts.map +1 -1
  186. package/dist/rpc/procedures/auth/mailer/index.d.ts +7 -0
  187. package/dist/rpc/procedures/auth/mailer/index.d.ts.map +1 -1
  188. package/dist/rpc/procedures/auth/mailer/test-send.d.ts +7 -0
  189. package/dist/rpc/procedures/auth/mailer/test-send.d.ts.map +1 -1
  190. package/dist/rpc/procedures/auth/oauth-providers.d.ts +7 -0
  191. package/dist/rpc/procedures/auth/oauth-providers.d.ts.map +1 -1
  192. package/dist/rpc/procedures/auth/session.d.ts +7 -0
  193. package/dist/rpc/procedures/auth/session.d.ts.map +1 -1
  194. package/dist/rpc/procedures/auth/sessions/index.d.ts +21 -0
  195. package/dist/rpc/procedures/auth/sessions/index.d.ts.map +1 -1
  196. package/dist/rpc/procedures/auth/sessions/list.d.ts +7 -0
  197. package/dist/rpc/procedures/auth/sessions/list.d.ts.map +1 -1
  198. package/dist/rpc/procedures/auth/sessions/revoke-others.d.ts +7 -0
  199. package/dist/rpc/procedures/auth/sessions/revoke-others.d.ts.map +1 -1
  200. package/dist/rpc/procedures/auth/sessions/revoke.d.ts +7 -0
  201. package/dist/rpc/procedures/auth/sessions/revoke.d.ts.map +1 -1
  202. package/dist/rpc/procedures/entry/activity.d.ts +7 -0
  203. package/dist/rpc/procedures/entry/activity.d.ts.map +1 -1
  204. package/dist/rpc/procedures/entry/bulk.d.ts +21 -0
  205. package/dist/rpc/procedures/entry/bulk.d.ts.map +1 -1
  206. package/dist/rpc/procedures/entry/create-preview-link.d.ts +7 -0
  207. package/dist/rpc/procedures/entry/create-preview-link.d.ts.map +1 -1
  208. package/dist/rpc/procedures/entry/create.d.ts +8 -1
  209. package/dist/rpc/procedures/entry/create.d.ts.map +1 -1
  210. package/dist/rpc/procedures/entry/create.js +8 -8
  211. package/dist/rpc/procedures/entry/create.js.map +1 -1
  212. package/dist/rpc/procedures/entry/dashboard.d.ts +14 -0
  213. package/dist/rpc/procedures/entry/dashboard.d.ts.map +1 -1
  214. package/dist/rpc/procedures/entry/delete-permanent.d.ts +7 -0
  215. package/dist/rpc/procedures/entry/delete-permanent.d.ts.map +1 -1
  216. package/dist/rpc/procedures/entry/discard-draft.d.ts +7 -0
  217. package/dist/rpc/procedures/entry/discard-draft.d.ts.map +1 -1
  218. package/dist/rpc/procedures/entry/duplicate.d.ts +7 -0
  219. package/dist/rpc/procedures/entry/duplicate.d.ts.map +1 -1
  220. package/dist/rpc/procedures/entry/duplicate.js +2 -2
  221. package/dist/rpc/procedures/entry/duplicate.js.map +1 -1
  222. package/dist/rpc/procedures/entry/get.d.ts +7 -0
  223. package/dist/rpc/procedures/entry/get.d.ts.map +1 -1
  224. package/dist/rpc/procedures/entry/get.js +2 -2
  225. package/dist/rpc/procedures/entry/get.js.map +1 -1
  226. package/dist/rpc/procedures/entry/index.d.ts +156 -2
  227. package/dist/rpc/procedures/entry/index.d.ts.map +1 -1
  228. package/dist/rpc/procedures/entry/list.d.ts +7 -0
  229. package/dist/rpc/procedures/entry/list.d.ts.map +1 -1
  230. package/dist/rpc/procedures/entry/lookup.d.ts +8 -2
  231. package/dist/rpc/procedures/entry/lookup.d.ts.map +1 -1
  232. package/dist/rpc/procedures/entry/lookup.js +60 -1
  233. package/dist/rpc/procedures/entry/lookup.js.map +1 -1
  234. package/dist/rpc/procedures/entry/meta.d.ts +37 -3
  235. package/dist/rpc/procedures/entry/meta.d.ts.map +1 -1
  236. package/dist/rpc/procedures/entry/meta.js +63 -7
  237. package/dist/rpc/procedures/entry/meta.js.map +1 -1
  238. package/dist/rpc/procedures/entry/publish.d.ts +7 -0
  239. package/dist/rpc/procedures/entry/publish.d.ts.map +1 -1
  240. package/dist/rpc/procedures/entry/publish.js +6 -4
  241. package/dist/rpc/procedures/entry/publish.js.map +1 -1
  242. package/dist/rpc/procedures/entry/refresh-block-loader.d.ts +7 -0
  243. package/dist/rpc/procedures/entry/refresh-block-loader.d.ts.map +1 -1
  244. package/dist/rpc/procedures/entry/restore.d.ts +7 -0
  245. package/dist/rpc/procedures/entry/restore.d.ts.map +1 -1
  246. package/dist/rpc/procedures/entry/revisions.d.ts +56 -0
  247. package/dist/rpc/procedures/entry/revisions.d.ts.map +1 -1
  248. package/dist/rpc/procedures/entry/schemas.d.ts +2 -2
  249. package/dist/rpc/procedures/entry/schemas.d.ts.map +1 -1
  250. package/dist/rpc/procedures/entry/schemas.js +9 -2
  251. package/dist/rpc/procedures/entry/schemas.js.map +1 -1
  252. package/dist/rpc/procedures/entry/trash.d.ts +7 -0
  253. package/dist/rpc/procedures/entry/trash.d.ts.map +1 -1
  254. package/dist/rpc/procedures/entry/update.d.ts +8 -1
  255. package/dist/rpc/procedures/entry/update.d.ts.map +1 -1
  256. package/dist/rpc/procedures/entry/update.js +77 -18
  257. package/dist/rpc/procedures/entry/update.js.map +1 -1
  258. package/dist/rpc/procedures/lookup/index.d.ts +14 -0
  259. package/dist/rpc/procedures/lookup/index.d.ts.map +1 -1
  260. package/dist/rpc/procedures/lookup/list.d.ts +7 -0
  261. package/dist/rpc/procedures/lookup/list.d.ts.map +1 -1
  262. package/dist/rpc/procedures/lookup/resolve.d.ts +7 -0
  263. package/dist/rpc/procedures/lookup/resolve.d.ts.map +1 -1
  264. package/dist/rpc/procedures/lookup/resolve.js +1 -1
  265. package/dist/rpc/procedures/lookup/resolve.js.map +1 -1
  266. package/dist/rpc/procedures/search/index.d.ts +7 -0
  267. package/dist/rpc/procedures/search/index.d.ts.map +1 -1
  268. package/dist/rpc/procedures/settings/get.d.ts +7 -0
  269. package/dist/rpc/procedures/settings/get.d.ts.map +1 -1
  270. package/dist/rpc/procedures/settings/index.d.ts +14 -0
  271. package/dist/rpc/procedures/settings/index.d.ts.map +1 -1
  272. package/dist/rpc/procedures/settings/upsert.d.ts +7 -0
  273. package/dist/rpc/procedures/settings/upsert.d.ts.map +1 -1
  274. package/dist/rpc/procedures/settings/upsert.js +9 -0
  275. package/dist/rpc/procedures/settings/upsert.js.map +1 -1
  276. package/dist/rpc/procedures/term/create.d.ts +7 -0
  277. package/dist/rpc/procedures/term/create.d.ts.map +1 -1
  278. package/dist/rpc/procedures/term/create.js +3 -3
  279. package/dist/rpc/procedures/term/create.js.map +1 -1
  280. package/dist/rpc/procedures/term/delete.d.ts +7 -0
  281. package/dist/rpc/procedures/term/delete.d.ts.map +1 -1
  282. package/dist/rpc/procedures/term/get.d.ts +7 -0
  283. package/dist/rpc/procedures/term/get.d.ts.map +1 -1
  284. package/dist/rpc/procedures/term/index.d.ts +35 -0
  285. package/dist/rpc/procedures/term/index.d.ts.map +1 -1
  286. package/dist/rpc/procedures/term/list.d.ts +7 -0
  287. package/dist/rpc/procedures/term/list.d.ts.map +1 -1
  288. package/dist/rpc/procedures/term/lookup.d.ts +7 -2
  289. package/dist/rpc/procedures/term/lookup.d.ts.map +1 -1
  290. package/dist/rpc/procedures/term/lookup.js +26 -0
  291. package/dist/rpc/procedures/term/lookup.js.map +1 -1
  292. package/dist/rpc/procedures/term/meta.d.ts +3 -2
  293. package/dist/rpc/procedures/term/meta.d.ts.map +1 -1
  294. package/dist/rpc/procedures/term/meta.js +7 -5
  295. package/dist/rpc/procedures/term/meta.js.map +1 -1
  296. package/dist/rpc/procedures/term/update.d.ts +7 -0
  297. package/dist/rpc/procedures/term/update.d.ts.map +1 -1
  298. package/dist/rpc/procedures/term/update.js +4 -4
  299. package/dist/rpc/procedures/term/update.js.map +1 -1
  300. package/dist/rpc/procedures/user/cancel-email-change.d.ts +7 -0
  301. package/dist/rpc/procedures/user/cancel-email-change.d.ts.map +1 -1
  302. package/dist/rpc/procedures/user/delete.d.ts +7 -0
  303. package/dist/rpc/procedures/user/delete.d.ts.map +1 -1
  304. package/dist/rpc/procedures/user/disable.d.ts +7 -0
  305. package/dist/rpc/procedures/user/disable.d.ts.map +1 -1
  306. package/dist/rpc/procedures/user/enable.d.ts +7 -0
  307. package/dist/rpc/procedures/user/enable.d.ts.map +1 -1
  308. package/dist/rpc/procedures/user/get.d.ts +7 -0
  309. package/dist/rpc/procedures/user/get.d.ts.map +1 -1
  310. package/dist/rpc/procedures/user/get.js +2 -2
  311. package/dist/rpc/procedures/user/get.js.map +1 -1
  312. package/dist/rpc/procedures/user/index.d.ts +77 -0
  313. package/dist/rpc/procedures/user/index.d.ts.map +1 -1
  314. package/dist/rpc/procedures/user/invite.d.ts +7 -0
  315. package/dist/rpc/procedures/user/invite.d.ts.map +1 -1
  316. package/dist/rpc/procedures/user/list.d.ts +7 -0
  317. package/dist/rpc/procedures/user/list.d.ts.map +1 -1
  318. package/dist/rpc/procedures/user/lookup.d.ts +6 -2
  319. package/dist/rpc/procedures/user/lookup.d.ts.map +1 -1
  320. package/dist/rpc/procedures/user/lookup.js +29 -0
  321. package/dist/rpc/procedures/user/lookup.js.map +1 -1
  322. package/dist/rpc/procedures/user/meta.d.ts +3 -2
  323. package/dist/rpc/procedures/user/meta.d.ts.map +1 -1
  324. package/dist/rpc/procedures/user/meta.js +7 -5
  325. package/dist/rpc/procedures/user/meta.js.map +1 -1
  326. package/dist/rpc/procedures/user/pending-email-change.d.ts +7 -0
  327. package/dist/rpc/procedures/user/pending-email-change.d.ts.map +1 -1
  328. package/dist/rpc/procedures/user/request-email-change.d.ts +7 -0
  329. package/dist/rpc/procedures/user/request-email-change.d.ts.map +1 -1
  330. package/dist/rpc/procedures/user/set-locale.d.ts +7 -0
  331. package/dist/rpc/procedures/user/set-locale.d.ts.map +1 -1
  332. package/dist/rpc/procedures/user/update.d.ts +7 -0
  333. package/dist/rpc/procedures/user/update.d.ts.map +1 -1
  334. package/dist/rpc/procedures/user/update.js +4 -4
  335. package/dist/rpc/procedures/user/update.js.map +1 -1
  336. package/dist/rpc/router.d.ts +457 -2
  337. package/dist/rpc/router.d.ts.map +1 -1
  338. package/dist/rpc/validation.d.ts +1 -0
  339. package/dist/rpc/validation.d.ts.map +1 -1
  340. package/dist/rpc/validation.js +1 -0
  341. package/dist/rpc/validation.js.map +1 -1
  342. package/dist/runtime/dispatcher.d.ts.map +1 -1
  343. package/dist/runtime/dispatcher.js +20 -10
  344. package/dist/runtime/dispatcher.js.map +1 -1
  345. package/dist/seo/feed.d.ts.map +1 -1
  346. package/dist/seo/feed.js +7 -1
  347. package/dist/seo/feed.js.map +1 -1
  348. package/dist/settings-core.js +1 -1
  349. package/dist/settings-core.js.map +1 -1
  350. package/dist/template-registry.d.ts +0 -16
  351. package/dist/template-registry.d.ts.map +1 -1
  352. package/dist/terms/read-service.js +2 -2
  353. package/dist/terms/read-service.js.map +1 -1
  354. package/dist/test/traced-context.d.ts +1 -1
  355. package/dist/test/traced-context.d.ts.map +1 -1
  356. package/dist/test/traced-context.js +2 -2
  357. package/dist/test/traced-context.js.map +1 -1
  358. package/package.json +2 -2
  359. package/dist/plugin/fields/checkbox.d.ts +0 -19
  360. package/dist/plugin/fields/checkbox.d.ts.map +0 -1
  361. package/dist/plugin/fields/checkbox.js +0 -20
  362. package/dist/plugin/fields/checkbox.js.map +0 -1
  363. package/dist/plugin/fields/date.d.ts +0 -24
  364. package/dist/plugin/fields/date.d.ts.map +0 -1
  365. package/dist/plugin/fields/date.js +0 -23
  366. package/dist/plugin/fields/date.js.map +0 -1
  367. package/dist/plugin/fields/datetime.d.ts +0 -26
  368. package/dist/plugin/fields/datetime.d.ts.map +0 -1
  369. package/dist/plugin/fields/datetime.js +0 -25
  370. package/dist/plugin/fields/datetime.js.map +0 -1
  371. package/dist/plugin/fields/email.d.ts +0 -17
  372. package/dist/plugin/fields/email.d.ts.map +0 -1
  373. package/dist/plugin/fields/email.js +0 -18
  374. package/dist/plugin/fields/email.js.map +0 -1
  375. package/dist/plugin/fields/entry-list.d.ts +0 -28
  376. package/dist/plugin/fields/entry-list.d.ts.map +0 -1
  377. package/dist/plugin/fields/entry-list.js +0 -31
  378. package/dist/plugin/fields/entry-list.js.map +0 -1
  379. package/dist/plugin/fields/multiselect.d.ts +0 -21
  380. package/dist/plugin/fields/multiselect.d.ts.map +0 -1
  381. package/dist/plugin/fields/multiselect.js +0 -43
  382. package/dist/plugin/fields/multiselect.js.map +0 -1
  383. package/dist/plugin/fields/password.d.ts +0 -24
  384. package/dist/plugin/fields/password.d.ts.map +0 -1
  385. package/dist/plugin/fields/password.js +0 -25
  386. package/dist/plugin/fields/password.js.map +0 -1
  387. package/dist/plugin/fields/radio.d.ts +0 -16
  388. package/dist/plugin/fields/radio.d.ts.map +0 -1
  389. package/dist/plugin/fields/radio.js +0 -17
  390. package/dist/plugin/fields/radio.js.map +0 -1
  391. package/dist/plugin/fields/repeater-validate.d.ts +0 -34
  392. package/dist/plugin/fields/repeater-validate.d.ts.map +0 -1
  393. package/dist/plugin/fields/repeater-validate.js +0 -104
  394. package/dist/plugin/fields/repeater-validate.js.map +0 -1
  395. package/dist/plugin/fields/term-list.d.ts +0 -27
  396. package/dist/plugin/fields/term-list.d.ts.map +0 -1
  397. package/dist/plugin/fields/term-list.js +0 -30
  398. package/dist/plugin/fields/term-list.js.map +0 -1
  399. package/dist/plugin/fields/text.d.ts +0 -37
  400. package/dist/plugin/fields/text.d.ts.map +0 -1
  401. package/dist/plugin/fields/text.js +0 -31
  402. package/dist/plugin/fields/text.js.map +0 -1
  403. package/dist/plugin/fields/textarea.d.ts +0 -20
  404. package/dist/plugin/fields/textarea.d.ts.map +0 -1
  405. package/dist/plugin/fields/textarea.js +0 -21
  406. package/dist/plugin/fields/textarea.js.map +0 -1
  407. package/dist/plugin/fields/time.d.ts +0 -24
  408. package/dist/plugin/fields/time.d.ts.map +0 -1
  409. package/dist/plugin/fields/time.js +0 -23
  410. package/dist/plugin/fields/time.js.map +0 -1
  411. package/dist/plugin/fields/url.d.ts +0 -17
  412. package/dist/plugin/fields/url.d.ts.map +0 -1
  413. package/dist/plugin/fields/url.js +0 -18
  414. package/dist/plugin/fields/url.js.map +0 -1
  415. package/dist/plugin/fields/user-list.d.ts +0 -29
  416. package/dist/plugin/fields/user-list.d.ts.map +0 -1
  417. package/dist/plugin/fields/user-list.js +0 -31
  418. package/dist/plugin/fields/user-list.js.map +0 -1
@@ -1,16 +1,119 @@
1
1
  import type { Label } from "../../i18n/label.js";
2
- import type { MetaBoxField, MetaBoxFieldSpan, RepeaterMetaBoxField } from "../manifest.js";
3
- export interface RepeaterFieldOptions {
4
- readonly key: string;
5
- readonly label: Label;
6
- readonly required?: boolean;
2
+ import type { FieldBuilder, MetaBoxField, MetaBoxFieldInput, MetaBoxFieldSpan, RepeaterDialogSize, RepeaterLayout, RepeaterMetaBoxField } from "../manifest.js";
3
+ import type { MetaFieldCondition, MetaFieldConditionRule } from "./condition.js";
4
+ import type { InferFields, InferStoredFields } from "./contributions.js";
5
+ interface RepeaterFieldState {
6
+ readonly subFields: readonly MetaBoxField[];
7
+ readonly visibleWhen?: MetaFieldCondition;
8
+ readonly label?: Label;
7
9
  readonly description?: Label;
8
- readonly default?: unknown;
10
+ readonly required?: true;
9
11
  readonly span?: MetaBoxFieldSpan;
10
12
  readonly capability?: string;
11
- readonly subFields: readonly MetaBoxField[];
13
+ readonly showInApi?: true;
12
14
  readonly min?: number;
13
15
  readonly max?: number;
16
+ readonly addLabel?: Label;
17
+ readonly layout?: RepeaterLayout;
18
+ readonly collapsed?: string;
19
+ readonly dialogSize?: RepeaterDialogSize;
20
+ }
21
+ /**
22
+ * Entry point of the `repeater()` chain — only `.fields()` is available
23
+ * until the row schema is declared, so a repeater without sub-fields
24
+ * can't reach `build()` (registration surfaces require a `build`
25
+ * method), and `.collapsed()` can be typed against the declared keys.
26
+ */
27
+ export declare class RepeaterFieldSeed<K extends string = string> {
28
+ #private;
29
+ constructor(key: K);
30
+ /**
31
+ * Declare the row schema — infers the typed row shape. Sub-fields may
32
+ * be any registered field type, including nested repeaters and
33
+ * groups; types recurse. Validated eagerly (key shape, uniqueness,
34
+ * prototype-pollution guard).
35
+ */
36
+ fields<const F extends readonly MetaBoxFieldInput[]>(fields: F): RepeaterFieldBuilder<F, K>;
37
+ }
38
+ /**
39
+ * Fluent chain for repeater fields. Immutable — every call returns a
40
+ * fresh instance, so a shared base chain can be forked without
41
+ * aliasing.
42
+ *
43
+ * `F` is the declared row-schema tuple (drives the recursive row type
44
+ * and `.collapsed()` key typing); `K` is the literal field key; `V` is
45
+ * the phantom read type — `readonly InferFields<F>[] | undefined`,
46
+ * narrowed to the non-optional array by `.required()`; `S` is the
47
+ * phantom stored shape (`InferStoredFields<F>` rows). All purely
48
+ * type-level — nothing at runtime carries them.
49
+ */
50
+ export declare class RepeaterFieldBuilder<F extends readonly MetaBoxFieldInput[], K extends string = string, V = readonly InferFields<F>[] | undefined, S = readonly InferStoredFields<F>[] | undefined> implements FieldBuilder<RepeaterMetaBoxField> {
51
+ #private;
52
+ /** Phantom literal key of the field — type-level only, never assigned. */
53
+ readonly _key: K;
54
+ /** Phantom read type of the field — type-level only, never assigned. */
55
+ readonly _value: V;
56
+ /** Phantom stored shape of the field — type-level only, never assigned. */
57
+ readonly _stored: S;
58
+ constructor(key: string, state: RepeaterFieldState);
59
+ /** Override the derived (humanized-key) label. */
60
+ label(label: Label): RepeaterFieldBuilder<F, K, V, S>;
61
+ /** Help text rendered under the label. */
62
+ description(description: Label): RepeaterFieldBuilder<F, K, V, S>;
63
+ /** Minimum row count — enforced server-side by the constraint walker. */
64
+ min(min: number): RepeaterFieldBuilder<F, K, V, S>;
65
+ /** Maximum row count — enforced server-side and by the admin add button. */
66
+ max(max: number): RepeaterFieldBuilder<F, K, V, S>;
67
+ /** Custom label for the admin add-row button. */
68
+ addLabel(addLabel: Label): RepeaterFieldBuilder<F, K, V, S>;
69
+ /** Admin row layout — see {@link RepeaterLayout}. */
70
+ layout(layout: RepeaterLayout): RepeaterFieldBuilder<F, K, V, S>;
71
+ /**
72
+ * Width of the row-editor dialog — see {@link RepeaterDialogSize}.
73
+ * Widen it for dense, multi-column rows; default `md`.
74
+ */
75
+ dialogSize(dialogSize: RepeaterDialogSize): RepeaterFieldBuilder<F, K, V, S>;
76
+ /**
77
+ * Make rows collapsible in the admin, labelling each collapsed row by
78
+ * the chosen sub-field's stored value. The key is typed against the
79
+ * declared row schema, so a nonexistent sub-field is a compile error.
80
+ */
81
+ collapsed(subFieldKey: keyof InferFields<F> & string): RepeaterFieldBuilder<F, K, V, S>;
82
+ /** Mark the field required — narrows the read/stored types to the
83
+ * non-optional array (rejects zero rows server-side). */
84
+ required(): RepeaterFieldBuilder<F, K, readonly InferFields<F>[], readonly InferStoredFields<F>[]>;
85
+ /**
86
+ * Column span within the box's 12-column grid — a universal layout
87
+ * hint; surfaces that can't honor it (the entry editor rail) ignore it.
88
+ */
89
+ span(span: MetaBoxFieldSpan): RepeaterFieldBuilder<F, K, V, S>;
90
+ /** Capability gate for this field — see `MetaBoxFieldBase.capability`. */
91
+ capability(capability: string): RepeaterFieldBuilder<F, K, V, S>;
92
+ /** Opt this field's value into public REST responses (default-deny). */
93
+ showInApi(): RepeaterFieldBuilder<F, K, V, S>;
94
+ /** Rule factory: this repeater has no rows (unset or cleared). */
95
+ isEmpty(): MetaFieldConditionRule;
96
+ /** Rule factory: this repeater has at least one row. */
97
+ isNotEmpty(): MetaFieldConditionRule;
98
+ /**
99
+ * Show this field only when every rule passes (one AND group) —
100
+ * rules come from sibling fields' condition factories. Replaces any
101
+ * previously declared condition; `.orVisibleWhen()` adds
102
+ * alternatives.
103
+ */
104
+ visibleWhen(...rules: MetaFieldConditionRule[]): RepeaterFieldBuilder<F, K, V, S>;
105
+ /** Add an OR alternative — one more AND group of rules. */
106
+ orVisibleWhen(...rules: MetaFieldConditionRule[]): RepeaterFieldBuilder<F, K, V, S>;
107
+ /** Compile the chain into the wire/manifest field definition. */
108
+ build(): RepeaterMetaBoxField;
14
109
  }
15
- export declare function repeater(options: RepeaterFieldOptions): RepeaterMetaBoxField;
110
+ /**
111
+ * Repeatable list of structured rows —
112
+ * `repeater("links").fields([text("label"), url("href")])`. Only
113
+ * `.fields()` is available on the bare constructor; the returned
114
+ * builder carries row-count bounds (`.min()`/`.max()`), UX affordances
115
+ * (`.addLabel()`, `.layout()`, `.collapsed()`), and the universal chain.
116
+ */
117
+ export declare function repeater<K extends string>(key: K): RepeaterFieldSeed<K>;
118
+ export {};
16
119
  //# sourceMappingURL=repeater.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"repeater.d.ts","sourceRoot":"","sources":["../../../src/plugin/fields/repeater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAoBD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB,CAgD5E"}
1
+ {"version":3,"file":"repeater.d.ts","sourceRoot":"","sources":["../../../src/plugin/fields/repeater.ts"],"names":[],"mappings":"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"}
@@ -1,68 +1,159 @@
1
- import { FieldConfigError } from "./errors.js";
2
- import { walkRepeaterRows } from "./repeater-validate.js";
3
- // Mirrors `META_FIELD_KEY_RE` in plugin/validation/meta-box-fields.ts. The top-level
4
- // registrar validates field keys against this regex but doesn't
5
- // recurse into subFields, so the repeater builder enforces it locally
6
- // guards row-object shape and protects against duplicate-key clobber.
7
- const REPEATER_SUBFIELD_KEY_RE = /^[a-zA-Z0-9_:-]+$/;
8
- // `__proto__`/`constructor`/`prototype` match the key regex but writing
9
- // them into a fresh object literal mutates the prototype chain. Reject
10
- // at registration regardless of regex pass.
11
- const FORBIDDEN_SUBFIELD_KEYS = new Set([
12
- "__proto__",
13
- "constructor",
14
- "prototype",
15
- ]);
16
- // Nested repeaters rejected at registration to keep v0.1 UX flat.
17
- // Subfield keys are also validated here for shape + uniqueness the
18
- // top-level `assertMetaBoxFields` only walks the outer fields array.
19
- export function repeater(options) {
20
- const seen = new Set();
21
- for (const sf of options.subFields) {
22
- if (sf.inputType === "repeater") {
23
- throw FieldConfigError.repeaterNestedNotSupported({
24
- repeaterKey: options.key,
25
- subFieldKey: sf.key,
26
- });
27
- }
28
- if (FORBIDDEN_SUBFIELD_KEYS.has(sf.key)) {
29
- throw FieldConfigError.repeaterSubFieldKeyForbidden({
30
- repeaterKey: options.key,
31
- subFieldKey: sf.key,
32
- });
33
- }
34
- if (!REPEATER_SUBFIELD_KEY_RE.test(sf.key)) {
35
- throw FieldConfigError.repeaterSubFieldKeyInvalid({
36
- repeaterKey: options.key,
37
- subFieldKey: sf.key,
38
- pattern: REPEATER_SUBFIELD_KEY_RE.source,
39
- });
40
- }
41
- if (seen.has(sf.key)) {
42
- throw FieldConfigError.repeaterSubFieldDuplicate({
43
- repeaterKey: options.key,
44
- subFieldKey: sf.key,
45
- });
46
- }
47
- seen.add(sf.key);
48
- }
49
- return {
50
- key: options.key,
51
- label: options.label,
52
- type: "json",
53
- inputType: "repeater",
54
- subFields: options.subFields,
55
- min: options.min,
56
- max: options.max,
57
- required: options.required,
58
- description: options.description,
59
- default: options.default,
60
- span: options.span,
61
- capability: options.capability,
62
- sanitize: walkRepeaterRows(options.subFields, {
63
- min: options.min,
64
- max: options.max,
65
- }),
66
- };
1
+ var _a;
2
+ import { compileMetaBoxFields } from "../manifest.js";
3
+ import { humanizeFieldKey } from "./builder.js";
4
+ import { assertSubFields } from "./sub-fields.js";
5
+ /**
6
+ * Entry point of the `repeater()` chain only `.fields()` is available
7
+ * until the row schema is declared, so a repeater without sub-fields
8
+ * can't reach `build()` (registration surfaces require a `build`
9
+ * method), and `.collapsed()` can be typed against the declared keys.
10
+ */
11
+ export class RepeaterFieldSeed {
12
+ #key;
13
+ constructor(key) {
14
+ this.#key = key;
15
+ }
16
+ /**
17
+ * Declare the row schema infers the typed row shape. Sub-fields may
18
+ * be any registered field type, including nested repeaters and
19
+ * groups; types recurse. Validated eagerly (key shape, uniqueness,
20
+ * prototype-pollution guard).
21
+ */
22
+ fields(fields) {
23
+ const subFields = compileMetaBoxFields(fields);
24
+ assertSubFields("repeater", this.#key, subFields);
25
+ return new RepeaterFieldBuilder(this.#key, { subFields });
26
+ }
27
+ }
28
+ /**
29
+ * Fluent chain for repeater fields. Immutable — every call returns a
30
+ * fresh instance, so a shared base chain can be forked without
31
+ * aliasing.
32
+ *
33
+ * `F` is the declared row-schema tuple (drives the recursive row type
34
+ * and `.collapsed()` key typing); `K` is the literal field key; `V` is
35
+ * the phantom read type — `readonly InferFields<F>[] | undefined`,
36
+ * narrowed to the non-optional array by `.required()`; `S` is the
37
+ * phantom stored shape (`InferStoredFields<F>` rows). All purely
38
+ * type-level — nothing at runtime carries them.
39
+ */
40
+ export class RepeaterFieldBuilder {
41
+ #key;
42
+ #state;
43
+ constructor(key, state) {
44
+ this.#key = key;
45
+ this.#state = state;
46
+ }
47
+ #fork(patch) {
48
+ return new _a(this.#key, {
49
+ ...this.#state,
50
+ ...patch,
51
+ });
52
+ }
53
+ /** Override the derived (humanized-key) label. */
54
+ label(label) {
55
+ return this.#fork({ label });
56
+ }
57
+ /** Help text rendered under the label. */
58
+ description(description) {
59
+ return this.#fork({ description });
60
+ }
61
+ /** Minimum row count — enforced server-side by the constraint walker. */
62
+ min(min) {
63
+ return this.#fork({ min });
64
+ }
65
+ /** Maximum row count — enforced server-side and by the admin add button. */
66
+ max(max) {
67
+ return this.#fork({ max });
68
+ }
69
+ /** Custom label for the admin add-row button. */
70
+ addLabel(addLabel) {
71
+ return this.#fork({ addLabel });
72
+ }
73
+ /** Admin row layout — see {@link RepeaterLayout}. */
74
+ layout(layout) {
75
+ return this.#fork({ layout });
76
+ }
77
+ /**
78
+ * Width of the row-editor dialog — see {@link RepeaterDialogSize}.
79
+ * Widen it for dense, multi-column rows; default `md`.
80
+ */
81
+ dialogSize(dialogSize) {
82
+ return this.#fork({ dialogSize });
83
+ }
84
+ /**
85
+ * Make rows collapsible in the admin, labelling each collapsed row by
86
+ * the chosen sub-field's stored value. The key is typed against the
87
+ * declared row schema, so a nonexistent sub-field is a compile error.
88
+ */
89
+ collapsed(subFieldKey) {
90
+ return this.#fork({ collapsed: subFieldKey });
91
+ }
92
+ /** Mark the field required — narrows the read/stored types to the
93
+ * non-optional array (rejects zero rows server-side). */
94
+ required() {
95
+ return this.#fork({ required: true });
96
+ }
97
+ /**
98
+ * Column span within the box's 12-column grid — a universal layout
99
+ * hint; surfaces that can't honor it (the entry editor rail) ignore it.
100
+ */
101
+ span(span) {
102
+ return this.#fork({ span });
103
+ }
104
+ /** Capability gate for this field — see `MetaBoxFieldBase.capability`. */
105
+ capability(capability) {
106
+ return this.#fork({ capability });
107
+ }
108
+ /** Opt this field's value into public REST responses (default-deny). */
109
+ showInApi() {
110
+ return this.#fork({ showInApi: true });
111
+ }
112
+ /** Rule factory: this repeater has no rows (unset or cleared). */
113
+ isEmpty() {
114
+ return { key: this.#key, op: "empty" };
115
+ }
116
+ /** Rule factory: this repeater has at least one row. */
117
+ isNotEmpty() {
118
+ return { key: this.#key, op: "not_empty" };
119
+ }
120
+ /**
121
+ * Show this field only when every rule passes (one AND group) —
122
+ * rules come from sibling fields' condition factories. Replaces any
123
+ * previously declared condition; `.orVisibleWhen()` adds
124
+ * alternatives.
125
+ */
126
+ visibleWhen(...rules) {
127
+ return this.#fork({ visibleWhen: [rules] });
128
+ }
129
+ /** Add an OR alternative — one more AND group of rules. */
130
+ orVisibleWhen(...rules) {
131
+ return this.#fork({
132
+ visibleWhen: [...(this.#state.visibleWhen ?? []), rules],
133
+ });
134
+ }
135
+ /** Compile the chain into the wire/manifest field definition. */
136
+ build() {
137
+ const { subFields, ...state } = this.#state;
138
+ return {
139
+ ...state,
140
+ key: this.#key,
141
+ label: state.label ?? humanizeFieldKey(this.#key),
142
+ type: "json",
143
+ inputType: "repeater",
144
+ subFields,
145
+ };
146
+ }
147
+ }
148
+ _a = RepeaterFieldBuilder;
149
+ /**
150
+ * Repeatable list of structured rows —
151
+ * `repeater("links").fields([text("label"), url("href")])`. Only
152
+ * `.fields()` is available on the bare constructor; the returned
153
+ * builder carries row-count bounds (`.min()`/`.max()`), UX affordances
154
+ * (`.addLabel()`, `.layout()`, `.collapsed()`), and the universal chain.
155
+ */
156
+ export function repeater(key) {
157
+ return new RepeaterFieldSeed(key);
67
158
  }
68
159
  //# sourceMappingURL=repeater.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repeater.js","sourceRoot":"","sources":["../../../src/plugin/fields/repeater.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAe1D,qFAAqF;AACrF,gEAAgE;AAChE,sEAAsE;AACtE,wEAAwE;AACxE,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAErD,wEAAwE;AACxE,uEAAuE;AACvE,4CAA4C;AAC5C,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC;IAC3D,WAAW;IACX,aAAa;IACb,WAAW;CACZ,CAAC,CAAC;AAEH,kEAAkE;AAClE,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,UAAU,QAAQ,CAAC,OAA6B;IACpD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,gBAAgB,CAAC,0BAA0B,CAAC;gBAChD,WAAW,EAAE,OAAO,CAAC,GAAG;gBACxB,WAAW,EAAE,EAAE,CAAC,GAAG;aACpB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,gBAAgB,CAAC,4BAA4B,CAAC;gBAClD,WAAW,EAAE,OAAO,CAAC,GAAG;gBACxB,WAAW,EAAE,EAAE,CAAC,GAAG;aACpB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,gBAAgB,CAAC,0BAA0B,CAAC;gBAChD,WAAW,EAAE,OAAO,CAAC,GAAG;gBACxB,WAAW,EAAE,EAAE,CAAC,GAAG;gBACnB,OAAO,EAAE,wBAAwB,CAAC,MAAM;aACzC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,gBAAgB,CAAC,yBAAyB,CAAC;gBAC/C,WAAW,EAAE,OAAO,CAAC,GAAG;gBACxB,WAAW,EAAE,EAAE,CAAC,GAAG;aACpB,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE;YAC5C,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"repeater.js","sourceRoot":"","sources":["../../../src/plugin/fields/repeater.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * Final href gate. Mirrors the regex in `route/render/tiptap.ts`'s
3
+ * `sanitizeHref` — keep them in sync. Blocks `javascript:`, `data:`,
4
+ * `vbscript:`, `file:` and their variants. Fragment / query-only /
5
+ * relative refs pass.
6
+ */
7
+ export declare const SAFE_HREF_RE: RegExp;
1
8
  interface RichtextAllowlist {
2
9
  readonly marks?: readonly string[];
3
10
  readonly nodes?: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"richtext-validate.d.ts","sourceRoot":"","sources":["../../../src/plugin/fields/richtext-validate.ts"],"names":[],"mappings":"AA4DA,UAAU,iBAAiB;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,iBAAiB,GAC3B,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAmB7B;AAED,KAAK,wBAAwB,GAC3B,iBAAiB,GAAG,iBAAiB,GAAG,aAAa,GAAG,eAAe,CAAC;AAE1E;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAKhD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAE1C,OAAO;IAUP,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;IAQ3B,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQzE,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQtE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;IAQ3B,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQzE,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQtE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;IAQ3B,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;CAS5B"}
1
+ {"version":3,"file":"richtext-validate.d.ts","sourceRoot":"","sources":["../../../src/plugin/fields/richtext-validate.ts"],"names":[],"mappings":"AA+CA;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAAiD,CAAC;AAa3E,UAAU,iBAAiB;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,iBAAiB,GAC3B,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAmB7B;AAED,KAAK,wBAAwB,GAC3B,iBAAiB,GAAG,iBAAiB,GAAG,aAAa,GAAG,eAAe,CAAC;AAE1E;;;;;;GAMG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAKhD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAE1C,OAAO;IAUP,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QAC1B,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;IAQ3B,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQzE,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQtE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;IAQ3B,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQzE,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAQtE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;IAQ3B,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,uBAAuB;CAS5B"}
@@ -12,15 +12,21 @@
12
12
  // surfaced; reject loud here so the editor's allowlist + server's
13
13
  // allowlist stay in lockstep).
14
14
  /**
15
- * Always-allowed type names. ProseMirror requires `doc` / `text`; the
16
- * editor mounts an implicit paragraph regardless of the field's
17
- * `nodes` allowlist mirrors `FIELD_MODE_IMPLICIT_BLOCK` in admin's
18
- * `tiptap-extensions.ts`.
15
+ * Always-allowed type names the structural nodes the shared editor
16
+ * emits regardless of a field's `.nodes()` allowlist, so the editor's
17
+ * schema and this validator stay in lockstep. ProseMirror requires
18
+ * `doc` / `text`; the editor mounts an implicit paragraph; `hardBreak`
19
+ * is the universal Shift+Enter line break; and `listItem` is pulled in
20
+ * structurally by any allowed list (authors declare the list node, not
21
+ * its item). All are content-free wrappers / inline breaks — none can
22
+ * smuggle a script or href — so admitting them implicitly is safe.
19
23
  */
20
24
  const IMPLICIT_NODES = new Set([
21
25
  "doc",
22
26
  "paragraph",
23
27
  "text",
28
+ "hardBreak",
29
+ "listItem",
24
30
  ]);
25
31
  // `legacyAliases` lived on the v1 BlockSpec; the v2 surface dropped it
26
32
  // since stored content now uses canonical names everywhere. Keeping the
@@ -34,7 +40,7 @@ function expandAliases(allowlist) {
34
40
  * `vbscript:`, `file:` and their variants. Fragment / query-only /
35
41
  * relative refs pass.
36
42
  */
37
- const SAFE_HREF_RE = /^(https?:\/\/|mailto:|tel:|\/|#|\?|\.\.?\/)/i;
43
+ export const SAFE_HREF_RE = /^(https?:\/\/|mailto:|tel:|\/|#|\?|\.\.?\/)/i;
38
44
  /**
39
45
  * Maximum nesting depth the validator will recurse through. The
40
46
  * meta-pipeline byte cap (256 KiB) doesn't bound depth alone — a
@@ -1 +1 @@
1
- {"version":3,"file":"richtext-validate.js","sourceRoot":"","sources":["../../../src/plugin/fields/richtext-validate.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,iEAAiE;AACjE,oEAAoE;AACpE,0BAA0B;AAC1B,EAAE;AACF,kEAAkE;AAClE,+DAA+D;AAC/D,iEAAiE;AACjE,mEAAmE;AACnE,+DAA+D;AAC/D,8DAA8D;AAC9D,kEAAkE;AAClE,+BAA+B;AAU/B;;;;;GAKG;AACH,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IAClD,KAAK;IACL,WAAW;IACX,MAAM;CACP,CAAC,CAAC;AAEH,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,SAAS,aAAa,CAAC,SAA4B;IACjD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,YAAY,GAAG,8CAA8C,CAAC;AAEpE;;;;;;;;GAQG;AACH,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAQ/B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA4B;IAE5B,mEAAmE;IACnE,sBAAsB;IACtB,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS;QACvC,GAAG,cAAc;QACjB,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;QACvC,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;KACzC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAS;QACvC,kEAAkE;QAClE,sEAAsE;QACtE,GAAG,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;QACvC,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;KACzC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACxD,QAAQ,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAC3D,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAKD;;;;;;GAMG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD;QACE,uBAAuB,CAAC,SAAS,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACrE,CAAC;IAEQ,IAAI,CAAS;IACb,MAAM,CAA2B;IAE1C,YACE,MAAgC,EAChC,IAAY,EACZ,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,GAGtB;QACC,OAAO,IAAI,uBAAuB,CAChC,eAAe,EACf,GAAG,CAAC,IAAI,EACR,4BAA4B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAC1D,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAqB;QAC7C,OAAO,IAAI,uBAAuB,CAChC,eAAe,EACf,GAAG,CAAC,IAAI,EACR,sCAAsC,CACvC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,GAAqB;QAC1C,OAAO,IAAI,uBAAuB,CAChC,eAAe,EACf,GAAG,CAAC,IAAI,EACR,qCAAqC,CACtC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,GAGrB;QACC,OAAO,IAAI,uBAAuB,CAChC,iBAAiB,EACjB,GAAG,CAAC,IAAI,EACR,uBAAuB,GAAG,CAAC,QAAQ,0BAA0B,CAC9D,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAqB;QAC7C,OAAO,IAAI,uBAAuB,CAChC,eAAe,EACf,GAAG,CAAC,IAAI,EACR,sCAAsC,CACvC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,GAAqB;QAC1C,OAAO,IAAI,uBAAuB,CAChC,eAAe,EACf,GAAG,CAAC,IAAI,EACR,qCAAqC,CACtC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,GAGrB;QACC,OAAO,IAAI,uBAAuB,CAChC,iBAAiB,EACjB,GAAG,CAAC,IAAI,EACR,uBAAuB,GAAG,CAAC,QAAQ,0BAA0B,CAC9D,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAGjB;QACC,kEAAkE;QAClE,kDAAkD;QAClD,OAAO,IAAI,uBAAuB,CAChC,aAAa,EACb,GAAG,CAAC,IAAI,EACR,4BAA4B,GAAG,CAAC,QAAQ,qBAAqB,CAC9D,CAAC;IACJ,CAAC;CACF;AAED,SAAS,QAAQ,CACf,KAAc,EACd,IAAY,EACZ,KAAa,EACb,gBAAqC,EACrC,gBAAqC;IAErC,MAAM,cAAc,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,IAAI,KAAK,GAAG,kBAAkB,EAAE,CAAC;QAC/B,MAAM,uBAAuB,CAAC,eAAe,CAAC;YAC5C,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,kBAAkB;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,uBAAuB,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,GAAG,KAAwB,CAAC;IACtC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,uBAAuB,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,uBAAuB,CAAC,cAAc,CAAC;YAC3C,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC7B,QAAQ,CAAC,IAAI,EAAE,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAChC,QAAQ,CACN,KAAK,EACL,GAAG,IAAI,YAAY,CAAC,GAAG,EACvB,KAAK,GAAG,CAAC,EACT,gBAAgB,EAChB,gBAAgB,CACjB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,KAAc,EACd,IAAY,EACZ,gBAAqC;IAErC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,uBAAuB,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,KAAwB,CAAC;IACtC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,uBAAuB,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,uBAAuB,CAAC,cAAc,CAAC;YAC3C,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IACD,gEAAgE;IAChE,0DAA0D;IAC1D,8DAA8D;IAC9D,iEAAiE;IACjE,sDAAsD;IACtD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAA0C,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAChE,MAAM,uBAAuB,CAAC,UAAU,CAAC;oBACvC,IAAI;oBACJ,QAAQ,EAAE,OAAO,IAAI;iBACtB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"richtext-validate.js","sourceRoot":"","sources":["../../../src/plugin/fields/richtext-validate.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,91 @@
1
1
  import type { Label } from "../../i18n/label.js";
2
- import type { MetaBoxFieldSpan, RichtextMetaBoxField } from "../manifest.js";
3
- /** Per-field options for `richtext()`. See `RichtextMetaBoxField`. */
4
- export interface RichtextFieldOptions {
5
- readonly key: string;
6
- readonly label: Label;
7
- readonly required?: boolean;
2
+ import type { FieldBuilder, MetaBoxFieldSpan, MetaBoxFieldValidate, RichtextMetaBoxField } from "../manifest.js";
3
+ import type { MetaFieldCondition, MetaFieldConditionRule } from "./condition.js";
4
+ interface RichtextFieldState {
5
+ readonly visibleWhen?: MetaFieldCondition;
6
+ readonly label?: Label;
8
7
  readonly description?: Label;
9
8
  readonly default?: unknown;
9
+ readonly required?: true;
10
10
  readonly span?: MetaBoxFieldSpan;
11
11
  readonly capability?: string;
12
+ readonly showInApi?: true;
12
13
  readonly marks?: readonly string[];
13
14
  readonly nodes?: readonly string[];
14
15
  readonly blocks?: readonly string[];
16
+ readonly validate?: MetaBoxFieldValidate;
15
17
  }
16
18
  /**
17
- * Build a typed `richtext` meta-box field. Storage is Tiptap's
19
+ * Fluent chain for the `richtext` field. Storage is Tiptap's
18
20
  * ProseMirror JSON shape, round-tripped through the `json` storage
19
- * primitive. The `sanitize` validator is auto-injected so the meta
20
- * pipeline rejects nodes/marks/blocks outside the allowlist (and
21
- * unsafe link hrefs) without the consumer wiring anything errors
22
- * surface as `meta_invalid_value` via `runSanitize`.
21
+ * primitive. The constraint walker rejects nodes/marks/blocks outside
22
+ * the allowlist (and unsafe link hrefs) server-side — there is
23
+ * deliberately no `.sanitize()` on this chain, so a custom callback
24
+ * can never bypass that enforcement.
23
25
  */
24
- export declare function richtext(options: RichtextFieldOptions): RichtextMetaBoxField;
26
+ export declare class RichtextFieldBuilder<K extends string = string> implements FieldBuilder<RichtextMetaBoxField> {
27
+ #private;
28
+ /** Phantom literal key of the field — type-level only, never assigned. */
29
+ readonly _key: K;
30
+ /** Phantom read type of the field — type-level only, never assigned. */
31
+ readonly _value: unknown;
32
+ /** Phantom stored shape of the field — type-level only, never assigned. */
33
+ readonly _stored: unknown;
34
+ constructor(key: string, state?: RichtextFieldState);
35
+ /** Override the derived (humanized-key) label. */
36
+ label(label: Label): RichtextFieldBuilder<K>;
37
+ /** Help text rendered under the label. */
38
+ description(description: Label): RichtextFieldBuilder<K>;
39
+ /** Default for absent keys — a ProseMirror doc JSON value, applied
40
+ * at read decode (and seeded into the admin form). */
41
+ default(value: unknown): RichtextFieldBuilder<K>;
42
+ /** Mark the field required. */
43
+ required(): RichtextFieldBuilder<K>;
44
+ /**
45
+ * Column span within the box's 12-column grid — a universal layout
46
+ * hint; surfaces that can't honor it (the entry editor rail) ignore it.
47
+ */
48
+ span(span: MetaBoxFieldSpan): RichtextFieldBuilder<K>;
49
+ /** Capability gate for this field — see `MetaBoxFieldBase.capability`. */
50
+ capability(capability: string): RichtextFieldBuilder<K>;
51
+ /** Opt this field's value into public REST responses (default-deny). */
52
+ showInApi(): RichtextFieldBuilder<K>;
53
+ /** Rule factory: this field's value equals `value` — pass the rule
54
+ * to a dependent field's `.visibleWhen()`. */
55
+ is(value: unknown): MetaFieldConditionRule;
56
+ /** Rule factory: this field's value differs from `value`. */
57
+ isNot(value: unknown): MetaFieldConditionRule;
58
+ /** Rule factory: this field has no value (unset or cleared). */
59
+ isEmpty(): MetaFieldConditionRule;
60
+ /** Rule factory: this field has a value. */
61
+ isNotEmpty(): MetaFieldConditionRule;
62
+ /**
63
+ * Show this field only when every rule passes (one AND group) —
64
+ * rules come from sibling fields' condition factories. Replaces any
65
+ * previously declared condition; `.orVisibleWhen()` adds
66
+ * alternatives.
67
+ */
68
+ visibleWhen(...rules: MetaFieldConditionRule[]): RichtextFieldBuilder<K>;
69
+ /** Add an OR alternative — one more AND group of rules. */
70
+ orVisibleWhen(...rules: MetaFieldConditionRule[]): RichtextFieldBuilder<K>;
71
+ /** Mark allowlist (`bold`, `italic`, `link`, …). Omitted = deny all. */
72
+ marks(marks: readonly string[]): RichtextFieldBuilder<K>;
73
+ /** Node allowlist (`heading`, `bulletList`, …). Omitted = deny all but doc/paragraph/text. */
74
+ nodes(nodes: readonly string[]): RichtextFieldBuilder<K>;
75
+ /** Embedded-block allowlist. Omitted = deny all. */
76
+ blocks(blocks: readonly string[]): RichtextFieldBuilder<K>;
77
+ /**
78
+ * Custom validation — `true` for valid, or an i18n-able failure
79
+ * message (sync or async). Runs after the injected allowlist walker.
80
+ */
81
+ validate(validate: (value: unknown) => true | Label | Promise<true | Label>): RichtextFieldBuilder<K>;
82
+ /** Compile the chain into the wire/manifest field definition. */
83
+ build(): RichtextMetaBoxField;
84
+ }
85
+ /**
86
+ * Rich text stored as ProseMirror JSON, constrained by the
87
+ * `.marks()` / `.nodes()` / `.blocks()` allowlists.
88
+ */
89
+ export declare function richtext<K extends string>(key: K): RichtextFieldBuilder<K>;
90
+ export {};
25
91
  //# sourceMappingURL=richtext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"richtext.d.ts","sourceRoot":"","sources":["../../../src/plugin/fields/richtext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG7E,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB,CAoB5E"}
1
+ {"version":3,"file":"richtext.d.ts","sourceRoot":"","sources":["../../../src/plugin/fields/richtext.ts"],"names":[],"mappings":"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"}