@delmaredigital/payload-puck 0.2.0 → 0.3.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 (565) hide show
  1. package/README.md +349 -1370
  2. package/dist/admin/EditWithPuckButton.d.ts +74 -0
  3. package/dist/admin/EditWithPuckButton.d.ts.map +1 -0
  4. package/dist/admin/EditWithPuckButton.js +114 -0
  5. package/dist/admin/EditWithPuckButton.js.map +1 -0
  6. package/dist/admin/EditWithPuckCell.d.ts +43 -0
  7. package/dist/admin/EditWithPuckCell.d.ts.map +1 -0
  8. package/dist/admin/EditWithPuckCell.js +66 -0
  9. package/dist/admin/EditWithPuckCell.js.map +1 -0
  10. package/dist/admin/PuckEditorView.d.ts +85 -0
  11. package/dist/admin/PuckEditorView.d.ts.map +1 -0
  12. package/dist/admin/PuckEditorView.js +135 -0
  13. package/dist/admin/PuckEditorView.js.map +1 -0
  14. package/dist/admin/client.d.ts +8 -104
  15. package/dist/admin/client.d.ts.map +1 -0
  16. package/dist/admin/client.js +14 -176
  17. package/dist/admin/client.js.map +1 -0
  18. package/dist/admin/generateAdminComponents.d.ts +51 -0
  19. package/dist/admin/generateAdminComponents.d.ts.map +1 -0
  20. package/dist/admin/generateAdminComponents.js +42 -0
  21. package/dist/admin/generateAdminComponents.js.map +1 -0
  22. package/dist/admin/index.d.ts +14 -150
  23. package/dist/admin/index.d.ts.map +1 -0
  24. package/dist/admin/index.js +17 -30
  25. package/dist/admin/index.js.map +1 -0
  26. package/dist/api/createPuckApiRoutes.d.ts +31 -0
  27. package/dist/api/createPuckApiRoutes.d.ts.map +1 -0
  28. package/dist/api/createPuckApiRoutes.js +193 -0
  29. package/dist/api/createPuckApiRoutes.js.map +1 -0
  30. package/dist/api/createPuckApiRoutesVersions.d.ts +28 -0
  31. package/dist/api/createPuckApiRoutesVersions.d.ts.map +1 -0
  32. package/dist/api/createPuckApiRoutesVersions.js +144 -0
  33. package/dist/api/createPuckApiRoutesVersions.js.map +1 -0
  34. package/dist/api/createPuckApiRoutesWithId.d.ts +34 -0
  35. package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -0
  36. package/dist/api/createPuckApiRoutesWithId.js +251 -0
  37. package/dist/api/createPuckApiRoutesWithId.js.map +1 -0
  38. package/dist/api/index.d.ts +11 -431
  39. package/dist/api/index.d.ts.map +1 -0
  40. package/dist/api/index.js +40 -587
  41. package/dist/api/index.js.map +1 -0
  42. package/dist/api/types.d.ts +302 -0
  43. package/dist/api/types.d.ts.map +1 -0
  44. package/dist/api/types.js +2 -0
  45. package/dist/api/types.js.map +1 -0
  46. package/dist/api/utils/mapRootProps.d.ts +76 -0
  47. package/dist/api/utils/mapRootProps.d.ts.map +1 -0
  48. package/dist/api/utils/mapRootProps.js +169 -0
  49. package/dist/api/utils/mapRootProps.js.map +1 -0
  50. package/dist/collections/Templates.d.ts +9 -0
  51. package/dist/collections/Templates.d.ts.map +1 -0
  52. package/dist/collections/Templates.js +62 -0
  53. package/dist/collections/Templates.js.map +1 -0
  54. package/dist/components/AccordionClient.d.ts +20 -0
  55. package/dist/components/AccordionClient.d.ts.map +1 -0
  56. package/dist/components/AccordionClient.js +67 -0
  57. package/dist/components/AccordionClient.js.map +1 -0
  58. package/dist/components/AnimatedWrapper.d.ts +33 -0
  59. package/dist/components/AnimatedWrapper.d.ts.map +1 -0
  60. package/dist/components/AnimatedWrapper.js +61 -0
  61. package/dist/components/AnimatedWrapper.js.map +1 -0
  62. package/dist/components/exports.d.ts +54 -0
  63. package/dist/components/exports.d.ts.map +1 -0
  64. package/dist/components/exports.js +71 -0
  65. package/dist/components/exports.js.map +1 -0
  66. package/dist/components/index.d.ts +8 -216
  67. package/dist/components/index.d.ts.map +1 -0
  68. package/dist/components/index.js +15 -9262
  69. package/dist/components/index.js.map +1 -0
  70. package/dist/components/interactive/Accordion.d.ts +28 -0
  71. package/dist/components/interactive/Accordion.d.ts.map +1 -0
  72. package/dist/components/interactive/Accordion.js +159 -0
  73. package/dist/components/interactive/Accordion.js.map +1 -0
  74. package/dist/components/interactive/Accordion.server.d.ts +29 -0
  75. package/dist/components/interactive/Accordion.server.d.ts.map +1 -0
  76. package/dist/components/interactive/Accordion.server.js +30 -0
  77. package/dist/components/interactive/Accordion.server.js.map +1 -0
  78. package/dist/components/interactive/Button.d.ts +26 -0
  79. package/dist/components/interactive/Button.d.ts.map +1 -0
  80. package/dist/components/interactive/Button.js +133 -0
  81. package/dist/components/interactive/Button.js.map +1 -0
  82. package/dist/components/interactive/Button.server.d.ts +28 -0
  83. package/dist/components/interactive/Button.server.d.ts.map +1 -0
  84. package/dist/components/interactive/Button.server.js +96 -0
  85. package/dist/components/interactive/Button.server.js.map +1 -0
  86. package/dist/components/interactive/Card.d.ts +27 -0
  87. package/dist/components/interactive/Card.d.ts.map +1 -0
  88. package/dist/components/interactive/Card.js +128 -0
  89. package/dist/components/interactive/Card.js.map +1 -0
  90. package/dist/components/interactive/Card.server.d.ts +29 -0
  91. package/dist/components/interactive/Card.server.d.ts.map +1 -0
  92. package/dist/components/interactive/Card.server.js +77 -0
  93. package/dist/components/interactive/Card.server.js.map +1 -0
  94. package/dist/components/interactive/Divider.d.ts +18 -0
  95. package/dist/components/interactive/Divider.d.ts.map +1 -0
  96. package/dist/components/interactive/Divider.js +68 -0
  97. package/dist/components/interactive/Divider.js.map +1 -0
  98. package/dist/components/interactive/Divider.server.d.ts +20 -0
  99. package/dist/components/interactive/Divider.server.d.ts.map +1 -0
  100. package/dist/components/interactive/Divider.server.js +50 -0
  101. package/dist/components/interactive/Divider.server.js.map +1 -0
  102. package/dist/components/interactive/index.d.ts +10 -0
  103. package/dist/components/interactive/index.d.ts.map +1 -0
  104. package/dist/components/interactive/index.js +10 -0
  105. package/dist/components/interactive/index.js.map +1 -0
  106. package/dist/components/layout/Container.d.ts +29 -0
  107. package/dist/components/layout/Container.d.ts.map +1 -0
  108. package/dist/components/layout/Container.js +166 -0
  109. package/dist/components/layout/Container.js.map +1 -0
  110. package/dist/components/layout/Container.server.d.ts +32 -0
  111. package/dist/components/layout/Container.server.d.ts.map +1 -0
  112. package/dist/components/layout/Container.server.js +105 -0
  113. package/dist/components/layout/Container.server.js.map +1 -0
  114. package/dist/components/layout/Flex.d.ts +36 -0
  115. package/dist/components/layout/Flex.d.ts.map +1 -0
  116. package/dist/components/layout/Flex.js +183 -0
  117. package/dist/components/layout/Flex.js.map +1 -0
  118. package/dist/components/layout/Flex.server.d.ts +36 -0
  119. package/dist/components/layout/Flex.server.d.ts.map +1 -0
  120. package/dist/components/layout/Flex.server.js +97 -0
  121. package/dist/components/layout/Flex.server.js.map +1 -0
  122. package/dist/components/layout/Grid.d.ts +31 -0
  123. package/dist/components/layout/Grid.d.ts.map +1 -0
  124. package/dist/components/layout/Grid.js +164 -0
  125. package/dist/components/layout/Grid.js.map +1 -0
  126. package/dist/components/layout/Grid.server.d.ts +32 -0
  127. package/dist/components/layout/Grid.server.d.ts.map +1 -0
  128. package/dist/components/layout/Grid.server.js +92 -0
  129. package/dist/components/layout/Grid.server.js.map +1 -0
  130. package/dist/components/layout/Section.d.ts +35 -0
  131. package/dist/components/layout/Section.d.ts.map +1 -0
  132. package/dist/components/layout/Section.js +212 -0
  133. package/dist/components/layout/Section.js.map +1 -0
  134. package/dist/components/layout/Section.server.d.ts +35 -0
  135. package/dist/components/layout/Section.server.d.ts.map +1 -0
  136. package/dist/components/layout/Section.server.js +144 -0
  137. package/dist/components/layout/Section.server.js.map +1 -0
  138. package/dist/components/layout/Spacer.d.ts +18 -0
  139. package/dist/components/layout/Spacer.d.ts.map +1 -0
  140. package/dist/components/layout/Spacer.js +99 -0
  141. package/dist/components/layout/Spacer.js.map +1 -0
  142. package/dist/components/layout/Spacer.server.d.ts +21 -0
  143. package/dist/components/layout/Spacer.server.d.ts.map +1 -0
  144. package/dist/components/layout/Spacer.server.js +61 -0
  145. package/dist/components/layout/Spacer.server.js.map +1 -0
  146. package/dist/components/layout/Template.d.ts +35 -0
  147. package/dist/components/layout/Template.d.ts.map +1 -0
  148. package/dist/components/layout/Template.js +124 -0
  149. package/dist/components/layout/Template.js.map +1 -0
  150. package/dist/components/layout/Template.server.d.ts +32 -0
  151. package/dist/components/layout/Template.server.d.ts.map +1 -0
  152. package/dist/components/layout/Template.server.js +75 -0
  153. package/dist/components/layout/Template.server.js.map +1 -0
  154. package/dist/components/layout/index.d.ts +14 -0
  155. package/dist/components/layout/index.d.ts.map +1 -0
  156. package/dist/components/layout/index.js +13 -0
  157. package/dist/components/layout/index.js.map +1 -0
  158. package/dist/components/media/Image.d.ts +30 -0
  159. package/dist/components/media/Image.d.ts.map +1 -0
  160. package/dist/components/media/Image.js +123 -0
  161. package/dist/components/media/Image.js.map +1 -0
  162. package/dist/components/media/Image.server.d.ts +28 -0
  163. package/dist/components/media/Image.server.d.ts.map +1 -0
  164. package/dist/components/media/Image.server.js +76 -0
  165. package/dist/components/media/Image.server.js.map +1 -0
  166. package/dist/components/media/index.d.ts +7 -0
  167. package/dist/components/media/index.d.ts.map +1 -0
  168. package/dist/components/media/index.js +7 -0
  169. package/dist/components/media/index.js.map +1 -0
  170. package/dist/components/typography/Heading.d.ts +21 -0
  171. package/dist/components/typography/Heading.d.ts.map +1 -0
  172. package/dist/components/typography/Heading.js +71 -0
  173. package/dist/components/typography/Heading.js.map +1 -0
  174. package/dist/components/typography/Heading.server.d.ts +21 -0
  175. package/dist/components/typography/Heading.server.d.ts.map +1 -0
  176. package/dist/components/typography/Heading.server.js +49 -0
  177. package/dist/components/typography/Heading.server.js.map +1 -0
  178. package/dist/components/typography/RichText.d.ts +20 -0
  179. package/dist/components/typography/RichText.d.ts.map +1 -0
  180. package/dist/components/typography/RichText.editor.d.ts +11 -0
  181. package/dist/components/typography/RichText.editor.d.ts.map +1 -0
  182. package/dist/components/typography/RichText.editor.js +67 -0
  183. package/dist/components/typography/RichText.editor.js.map +1 -0
  184. package/dist/components/typography/RichText.js +73 -0
  185. package/dist/components/typography/RichText.js.map +1 -0
  186. package/dist/components/typography/RichText.server.d.ts +22 -0
  187. package/dist/components/typography/RichText.server.d.ts.map +1 -0
  188. package/dist/components/typography/RichText.server.js +52 -0
  189. package/dist/components/typography/RichText.server.js.map +1 -0
  190. package/dist/components/typography/Text.d.ts +20 -0
  191. package/dist/components/typography/Text.d.ts.map +1 -0
  192. package/dist/components/typography/Text.js +61 -0
  193. package/dist/components/typography/Text.js.map +1 -0
  194. package/dist/components/typography/Text.server.d.ts +21 -0
  195. package/dist/components/typography/Text.server.d.ts.map +1 -0
  196. package/dist/components/typography/Text.server.js +39 -0
  197. package/dist/components/typography/Text.server.js.map +1 -0
  198. package/dist/components/typography/index.d.ts +10 -0
  199. package/dist/components/typography/index.d.ts.map +1 -0
  200. package/dist/components/typography/index.js +10 -0
  201. package/dist/components/typography/index.js.map +1 -0
  202. package/dist/config/config.editor.d.ts +15 -56
  203. package/dist/config/config.editor.d.ts.map +1 -0
  204. package/dist/config/config.editor.js +125 -9462
  205. package/dist/config/config.editor.js.map +1 -0
  206. package/dist/config/index.d.ts +7 -33
  207. package/dist/config/index.d.ts.map +1 -0
  208. package/dist/config/index.js +110 -2119
  209. package/dist/config/index.js.map +1 -0
  210. package/dist/config/merge.d.ts +23 -0
  211. package/dist/config/merge.d.ts.map +1 -0
  212. package/dist/config/merge.js +80 -0
  213. package/dist/config/merge.js.map +1 -0
  214. package/dist/config/presets.d.ts +342 -0
  215. package/dist/config/presets.d.ts.map +1 -0
  216. package/dist/config/presets.js +247 -0
  217. package/dist/config/presets.js.map +1 -0
  218. package/dist/editor/PuckEditor.client.d.ts +131 -0
  219. package/dist/editor/PuckEditor.client.d.ts.map +1 -0
  220. package/dist/editor/PuckEditor.client.js +42 -0
  221. package/dist/editor/PuckEditor.client.js.map +1 -0
  222. package/dist/editor/PuckEditorCore.client.d.ts +141 -0
  223. package/dist/editor/PuckEditorCore.client.d.ts.map +1 -0
  224. package/dist/editor/PuckEditorCore.client.js +306 -0
  225. package/dist/editor/PuckEditorCore.client.js.map +1 -0
  226. package/dist/editor/components/HeaderActions.d.ts +109 -0
  227. package/dist/editor/components/HeaderActions.d.ts.map +1 -0
  228. package/dist/editor/components/HeaderActions.js +254 -0
  229. package/dist/editor/components/HeaderActions.js.map +1 -0
  230. package/dist/editor/components/IframeWrapper.d.ts +77 -0
  231. package/dist/editor/components/IframeWrapper.d.ts.map +1 -0
  232. package/dist/editor/components/IframeWrapper.js +257 -0
  233. package/dist/editor/components/IframeWrapper.js.map +1 -0
  234. package/dist/editor/components/LoadingState.d.ts +14 -0
  235. package/dist/editor/components/LoadingState.d.ts.map +1 -0
  236. package/dist/editor/components/LoadingState.js +12 -0
  237. package/dist/editor/components/LoadingState.js.map +1 -0
  238. package/dist/editor/components/PreviewModal.d.ts +54 -0
  239. package/dist/editor/components/PreviewModal.d.ts.map +1 -0
  240. package/dist/editor/components/PreviewModal.js +298 -0
  241. package/dist/editor/components/PreviewModal.js.map +1 -0
  242. package/dist/editor/components/VersionHistory.d.ts +44 -0
  243. package/dist/editor/components/VersionHistory.d.ts.map +1 -0
  244. package/dist/editor/components/VersionHistory.js +308 -0
  245. package/dist/editor/components/VersionHistory.js.map +1 -0
  246. package/dist/editor/hooks/useUnsavedChanges.d.ts +27 -0
  247. package/dist/editor/hooks/useUnsavedChanges.d.ts.map +1 -0
  248. package/dist/editor/hooks/useUnsavedChanges.js +55 -0
  249. package/dist/editor/hooks/useUnsavedChanges.js.map +1 -0
  250. package/dist/editor/index.d.ts +16 -756
  251. package/dist/editor/index.d.ts.map +1 -0
  252. package/dist/editor/index.js +49 -4625
  253. package/dist/editor/index.js.map +1 -0
  254. package/dist/editor/plugins/index.d.ts +12 -0
  255. package/dist/editor/plugins/index.d.ts.map +1 -0
  256. package/dist/editor/plugins/index.js +12 -0
  257. package/dist/editor/plugins/index.js.map +1 -0
  258. package/dist/endpoints/index.d.ts +46 -0
  259. package/dist/endpoints/index.d.ts.map +1 -0
  260. package/dist/endpoints/index.js +204 -0
  261. package/dist/endpoints/index.js.map +1 -0
  262. package/dist/exports/client.d.ts +19 -0
  263. package/dist/exports/client.d.ts.map +1 -0
  264. package/dist/exports/client.js +21 -0
  265. package/dist/exports/client.js.map +1 -0
  266. package/dist/exports/rsc.d.ts +19 -0
  267. package/dist/exports/rsc.d.ts.map +1 -0
  268. package/dist/exports/rsc.js +19 -0
  269. package/dist/exports/rsc.js.map +1 -0
  270. package/dist/fields/AlignmentField.d.ts +36 -0
  271. package/dist/fields/AlignmentField.d.ts.map +1 -0
  272. package/dist/fields/AlignmentField.js +120 -0
  273. package/dist/fields/AlignmentField.js.map +1 -0
  274. package/dist/fields/AnimationField.d.ts +44 -0
  275. package/dist/fields/AnimationField.d.ts.map +1 -0
  276. package/dist/fields/AnimationField.js +329 -0
  277. package/dist/fields/AnimationField.js.map +1 -0
  278. package/dist/fields/BackgroundField.d.ts +40 -0
  279. package/dist/fields/BackgroundField.d.ts.map +1 -0
  280. package/dist/fields/BackgroundField.js +413 -0
  281. package/dist/fields/BackgroundField.js.map +1 -0
  282. package/dist/fields/BorderField.d.ts +29 -0
  283. package/dist/fields/BorderField.d.ts.map +1 -0
  284. package/dist/fields/BorderField.js +264 -0
  285. package/dist/fields/BorderField.js.map +1 -0
  286. package/dist/fields/ColorPickerField.d.ts +43 -0
  287. package/dist/fields/ColorPickerField.d.ts.map +1 -0
  288. package/dist/fields/ColorPickerField.js +285 -0
  289. package/dist/fields/ColorPickerField.js.map +1 -0
  290. package/dist/fields/DimensionsField.d.ts +43 -0
  291. package/dist/fields/DimensionsField.d.ts.map +1 -0
  292. package/dist/fields/DimensionsField.js +532 -0
  293. package/dist/fields/DimensionsField.js.map +1 -0
  294. package/dist/fields/FlexAlignmentField.d.ts +61 -0
  295. package/dist/fields/FlexAlignmentField.d.ts.map +1 -0
  296. package/dist/fields/FlexAlignmentField.js +166 -0
  297. package/dist/fields/FlexAlignmentField.js.map +1 -0
  298. package/dist/fields/FolderPickerField.d.ts +17 -0
  299. package/dist/fields/FolderPickerField.d.ts.map +1 -0
  300. package/dist/fields/FolderPickerField.js +282 -0
  301. package/dist/fields/FolderPickerField.js.map +1 -0
  302. package/dist/fields/GradientEditor.d.ts +22 -0
  303. package/dist/fields/GradientEditor.d.ts.map +1 -0
  304. package/dist/fields/GradientEditor.js +322 -0
  305. package/dist/fields/GradientEditor.js.map +1 -0
  306. package/dist/fields/LockedField.d.ts +67 -0
  307. package/dist/fields/LockedField.d.ts.map +1 -0
  308. package/dist/fields/LockedField.js +170 -0
  309. package/dist/fields/LockedField.js.map +1 -0
  310. package/dist/fields/MarginField.d.ts +31 -0
  311. package/dist/fields/MarginField.d.ts.map +1 -0
  312. package/dist/fields/MarginField.js +233 -0
  313. package/dist/fields/MarginField.js.map +1 -0
  314. package/dist/fields/MediaField.d.ts +33 -0
  315. package/dist/fields/MediaField.d.ts.map +1 -0
  316. package/dist/fields/MediaField.js +677 -0
  317. package/dist/fields/MediaField.js.map +1 -0
  318. package/dist/fields/PaddingField.d.ts +29 -0
  319. package/dist/fields/PaddingField.d.ts.map +1 -0
  320. package/dist/fields/PaddingField.js +232 -0
  321. package/dist/fields/PaddingField.js.map +1 -0
  322. package/dist/fields/PageSegmentField.d.ts +17 -0
  323. package/dist/fields/PageSegmentField.d.ts.map +1 -0
  324. package/dist/fields/PageSegmentField.js +92 -0
  325. package/dist/fields/PageSegmentField.js.map +1 -0
  326. package/dist/fields/ResetField.d.ts +27 -0
  327. package/dist/fields/ResetField.d.ts.map +1 -0
  328. package/dist/fields/ResetField.js +122 -0
  329. package/dist/fields/ResetField.js.map +1 -0
  330. package/dist/fields/ResponsiveField.d.ts +38 -0
  331. package/dist/fields/ResponsiveField.d.ts.map +1 -0
  332. package/dist/fields/ResponsiveField.js +275 -0
  333. package/dist/fields/ResponsiveField.js.map +1 -0
  334. package/dist/fields/ResponsiveVisibilityField.d.ts +34 -0
  335. package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -0
  336. package/dist/fields/ResponsiveVisibilityField.js +145 -0
  337. package/dist/fields/ResponsiveVisibilityField.js.map +1 -0
  338. package/dist/fields/SizeField.d.ts +54 -0
  339. package/dist/fields/SizeField.d.ts.map +1 -0
  340. package/dist/fields/SizeField.js +255 -0
  341. package/dist/fields/SizeField.js.map +1 -0
  342. package/dist/fields/SlugPreviewField.d.ts +16 -0
  343. package/dist/fields/SlugPreviewField.d.ts.map +1 -0
  344. package/dist/fields/SlugPreviewField.js +49 -0
  345. package/dist/fields/SlugPreviewField.js.map +1 -0
  346. package/dist/fields/TemplateField.d.ts +31 -0
  347. package/dist/fields/TemplateField.d.ts.map +1 -0
  348. package/dist/fields/TemplateField.js +428 -0
  349. package/dist/fields/TemplateField.js.map +1 -0
  350. package/dist/fields/TiptapField.d.ts +40 -0
  351. package/dist/fields/TiptapField.d.ts.map +1 -0
  352. package/dist/fields/TiptapField.js +857 -0
  353. package/dist/fields/TiptapField.js.map +1 -0
  354. package/dist/fields/TiptapModal.d.ts +10 -0
  355. package/dist/fields/TiptapModal.d.ts.map +1 -0
  356. package/dist/fields/TiptapModal.js +114 -0
  357. package/dist/fields/TiptapModal.js.map +1 -0
  358. package/dist/fields/TiptapModalField.d.ts +23 -0
  359. package/dist/fields/TiptapModalField.d.ts.map +1 -0
  360. package/dist/fields/TiptapModalField.js +55 -0
  361. package/dist/fields/TiptapModalField.js.map +1 -0
  362. package/dist/fields/TransformField.d.ts +31 -0
  363. package/dist/fields/TransformField.d.ts.map +1 -0
  364. package/dist/fields/TransformField.js +384 -0
  365. package/dist/fields/TransformField.js.map +1 -0
  366. package/dist/fields/VerticalAlignmentField.d.ts +35 -0
  367. package/dist/fields/VerticalAlignmentField.d.ts.map +1 -0
  368. package/dist/fields/VerticalAlignmentField.js +120 -0
  369. package/dist/fields/VerticalAlignmentField.js.map +1 -0
  370. package/dist/fields/WidthField.d.ts +28 -0
  371. package/dist/fields/WidthField.d.ts.map +1 -0
  372. package/dist/fields/WidthField.js +339 -0
  373. package/dist/fields/WidthField.js.map +1 -0
  374. package/dist/fields/index.d.ts +44 -559
  375. package/dist/fields/index.d.ts.map +1 -0
  376. package/dist/fields/index.js +91 -7704
  377. package/dist/fields/index.js.map +1 -0
  378. package/dist/fields/richtext-output.css +219 -0
  379. package/dist/{shared-X9UpCJKW.d.mts → fields/shared.d.ts} +111 -132
  380. package/dist/fields/shared.d.ts.map +1 -0
  381. package/dist/fields/shared.js +1542 -0
  382. package/dist/fields/shared.js.map +1 -0
  383. package/dist/fields/{index.css → tiptap-styles.css} +75 -166
  384. package/dist/hooks/index.d.ts +8 -0
  385. package/dist/hooks/index.d.ts.map +1 -0
  386. package/dist/hooks/index.js +8 -0
  387. package/dist/hooks/index.js.map +1 -0
  388. package/dist/hooks/useResponsiveStyles.d.ts +51 -0
  389. package/dist/hooks/useResponsiveStyles.d.ts.map +1 -0
  390. package/dist/hooks/useResponsiveStyles.js +149 -0
  391. package/dist/hooks/useResponsiveStyles.js.map +1 -0
  392. package/dist/hooks/useScrollAnimation.d.ts +56 -0
  393. package/dist/hooks/useScrollAnimation.d.ts.map +1 -0
  394. package/dist/hooks/useScrollAnimation.js +116 -0
  395. package/dist/hooks/useScrollAnimation.js.map +1 -0
  396. package/dist/index.d.ts +66 -6
  397. package/dist/index.d.ts.map +1 -0
  398. package/dist/index.js +67 -568
  399. package/dist/index.js.map +1 -0
  400. package/dist/layouts/LayoutWrapper.d.ts +33 -0
  401. package/dist/layouts/LayoutWrapper.d.ts.map +1 -0
  402. package/dist/layouts/LayoutWrapper.js +112 -0
  403. package/dist/layouts/LayoutWrapper.js.map +1 -0
  404. package/dist/layouts/defaults.d.ts +40 -0
  405. package/dist/layouts/defaults.d.ts.map +1 -0
  406. package/dist/layouts/defaults.js +106 -0
  407. package/dist/layouts/defaults.js.map +1 -0
  408. package/dist/layouts/index.d.ts +27 -94
  409. package/dist/layouts/index.d.ts.map +1 -0
  410. package/dist/layouts/index.js +30 -393
  411. package/dist/layouts/index.js.map +1 -0
  412. package/dist/{types-D7D3rZ1J.d.ts → layouts/types.d.ts} +8 -11
  413. package/dist/layouts/types.d.ts.map +1 -0
  414. package/dist/layouts/types.js +7 -0
  415. package/dist/layouts/types.js.map +1 -0
  416. package/dist/layouts/utils.d.ts +42 -0
  417. package/dist/layouts/utils.d.ts.map +1 -0
  418. package/dist/layouts/utils.js +83 -0
  419. package/dist/layouts/utils.js.map +1 -0
  420. package/dist/plugin/collections/Pages.d.ts +8 -0
  421. package/dist/plugin/collections/Pages.d.ts.map +1 -0
  422. package/dist/plugin/collections/Pages.js +117 -0
  423. package/dist/plugin/collections/Pages.js.map +1 -0
  424. package/dist/plugin/fields/index.d.ts +153 -0
  425. package/dist/plugin/fields/index.d.ts.map +1 -0
  426. package/dist/plugin/fields/index.js +364 -0
  427. package/dist/plugin/fields/index.js.map +1 -0
  428. package/dist/plugin/fields/types.d.ts +108 -0
  429. package/dist/plugin/fields/types.d.ts.map +1 -0
  430. package/dist/plugin/fields/types.js +7 -0
  431. package/dist/plugin/fields/types.js.map +1 -0
  432. package/dist/plugin/index.d.ts +13 -255
  433. package/dist/plugin/index.d.ts.map +1 -0
  434. package/dist/plugin/index.js +276 -553
  435. package/dist/plugin/index.js.map +1 -0
  436. package/dist/render/HybridPageRenderer.d.ts +85 -0
  437. package/dist/render/HybridPageRenderer.d.ts.map +1 -0
  438. package/dist/render/HybridPageRenderer.js +29 -0
  439. package/dist/render/HybridPageRenderer.js.map +1 -0
  440. package/dist/render/PageRenderer.d.ts +51 -0
  441. package/dist/render/PageRenderer.d.ts.map +1 -0
  442. package/dist/render/PageRenderer.js +61 -0
  443. package/dist/render/PageRenderer.js.map +1 -0
  444. package/dist/render/PuckEditor.client.d.ts +66 -0
  445. package/dist/render/PuckEditor.client.d.ts.map +1 -0
  446. package/dist/render/PuckEditor.client.js +66 -0
  447. package/dist/render/PuckEditor.client.js.map +1 -0
  448. package/dist/render/index.d.ts +8 -106
  449. package/dist/render/index.d.ts.map +1 -0
  450. package/dist/render/index.js +10 -2253
  451. package/dist/render/index.js.map +1 -0
  452. package/dist/theme/context.d.ts +59 -0
  453. package/dist/theme/context.d.ts.map +1 -0
  454. package/dist/theme/context.js +73 -0
  455. package/dist/theme/context.js.map +1 -0
  456. package/dist/theme/defaults.d.ts +39 -0
  457. package/dist/theme/defaults.d.ts.map +1 -0
  458. package/dist/theme/defaults.js +72 -0
  459. package/dist/theme/defaults.js.map +1 -0
  460. package/dist/theme/example.d.ts +30 -0
  461. package/dist/theme/example.d.ts.map +1 -0
  462. package/dist/theme/example.js +89 -0
  463. package/dist/theme/example.js.map +1 -0
  464. package/dist/theme/index.d.ts +17 -140
  465. package/dist/theme/index.d.ts.map +1 -0
  466. package/dist/theme/index.js +34 -200
  467. package/dist/theme/index.js.map +1 -0
  468. package/dist/{types-_6MvjyKv.d.ts → theme/types.d.ts} +8 -9
  469. package/dist/theme/types.d.ts.map +1 -0
  470. package/dist/theme/types.js +9 -0
  471. package/dist/theme/types.js.map +1 -0
  472. package/dist/theme/utils.d.ts +30 -0
  473. package/dist/theme/utils.d.ts.map +1 -0
  474. package/dist/theme/utils.js +84 -0
  475. package/dist/theme/utils.js.map +1 -0
  476. package/dist/{index-CQu6SzDg.d.mts → types/index.d.ts} +120 -115
  477. package/dist/types/index.d.ts.map +1 -0
  478. package/dist/types/index.js +2 -0
  479. package/dist/types/index.js.map +1 -0
  480. package/dist/utils/index.d.ts +23 -257
  481. package/dist/utils/index.d.ts.map +1 -0
  482. package/dist/utils/index.js +56 -425
  483. package/dist/utils/index.js.map +1 -0
  484. package/dist/utils/{index.d.mts → migration.d.ts} +16 -112
  485. package/dist/utils/migration.d.ts.map +1 -0
  486. package/dist/utils/migration.js +309 -0
  487. package/dist/utils/migration.js.map +1 -0
  488. package/dist/utils/validation.d.ts +89 -0
  489. package/dist/utils/validation.d.ts.map +1 -0
  490. package/dist/utils/validation.js +247 -0
  491. package/dist/utils/validation.js.map +1 -0
  492. package/dist/views/PuckConfigContext.d.ts +71 -0
  493. package/dist/views/PuckConfigContext.d.ts.map +1 -0
  494. package/dist/views/PuckConfigContext.js +45 -0
  495. package/dist/views/PuckConfigContext.js.map +1 -0
  496. package/dist/views/PuckEditorClient.d.ts +73 -0
  497. package/dist/views/PuckEditorClient.d.ts.map +1 -0
  498. package/dist/views/PuckEditorClient.js +130 -0
  499. package/dist/views/PuckEditorClient.js.map +1 -0
  500. package/dist/views/PuckEditorView.d.ts +19 -0
  501. package/dist/views/PuckEditorView.d.ts.map +1 -0
  502. package/dist/views/PuckEditorView.js +106 -0
  503. package/dist/views/PuckEditorView.js.map +1 -0
  504. package/dist/views/index.d.ts +10 -0
  505. package/dist/views/index.d.ts.map +1 -0
  506. package/dist/views/index.js +10 -0
  507. package/dist/views/index.js.map +1 -0
  508. package/package.json +51 -74
  509. package/dist/AccordionClient.d.mts +0 -24
  510. package/dist/AccordionClient.d.ts +0 -24
  511. package/dist/AccordionClient.js +0 -786
  512. package/dist/AccordionClient.mjs +0 -784
  513. package/dist/AnimatedWrapper.d.mts +0 -30
  514. package/dist/AnimatedWrapper.d.ts +0 -30
  515. package/dist/AnimatedWrapper.js +0 -379
  516. package/dist/AnimatedWrapper.mjs +0 -377
  517. package/dist/admin/client.d.mts +0 -108
  518. package/dist/admin/client.mjs +0 -173
  519. package/dist/admin/index.d.mts +0 -157
  520. package/dist/admin/index.mjs +0 -29
  521. package/dist/api/index.d.mts +0 -460
  522. package/dist/api/index.mjs +0 -578
  523. package/dist/components/index.css +0 -339
  524. package/dist/components/index.d.mts +0 -219
  525. package/dist/components/index.mjs +0 -9216
  526. package/dist/config/config.editor.css +0 -339
  527. package/dist/config/config.editor.d.mts +0 -153
  528. package/dist/config/config.editor.mjs +0 -9445
  529. package/dist/config/index.d.mts +0 -68
  530. package/dist/config/index.mjs +0 -2099
  531. package/dist/editor/index.d.mts +0 -784
  532. package/dist/editor/index.mjs +0 -4592
  533. package/dist/fields/index.d.mts +0 -600
  534. package/dist/fields/index.mjs +0 -7588
  535. package/dist/index-CoUQnyC3.d.ts +0 -327
  536. package/dist/index.d.mts +0 -6
  537. package/dist/index.mjs +0 -555
  538. package/dist/layouts/index.d.mts +0 -96
  539. package/dist/layouts/index.mjs +0 -378
  540. package/dist/plugin/index.d.mts +0 -289
  541. package/dist/plugin/index.mjs +0 -555
  542. package/dist/render/index.d.mts +0 -109
  543. package/dist/render/index.mjs +0 -2231
  544. package/dist/shared-X9UpCJKW.d.ts +0 -548
  545. package/dist/theme/index.d.mts +0 -155
  546. package/dist/theme/index.mjs +0 -186
  547. package/dist/types-D7D3rZ1J.d.mts +0 -116
  548. package/dist/types-_6MvjyKv.d.mts +0 -104
  549. package/dist/utils/index.mjs +0 -412
  550. package/dist/utils-DaRs9t0J.d.mts +0 -85
  551. package/dist/utils-gAvt0Vhw.d.ts +0 -85
  552. package/examples/README.md +0 -247
  553. package/examples/api/puck/pages/[id]/route.ts +0 -64
  554. package/examples/api/puck/pages/[id]/versions/route.ts +0 -47
  555. package/examples/api/puck/pages/route.ts +0 -45
  556. package/examples/app/(frontend)/page.tsx +0 -94
  557. package/examples/app/(manage)/layout.tsx +0 -31
  558. package/examples/app/[...slug]/page.tsx +0 -101
  559. package/examples/app/pages/[id]/edit/page.tsx +0 -148
  560. package/examples/components/CustomBanner.tsx +0 -368
  561. package/examples/config/custom-config.ts +0 -223
  562. package/examples/config/payload.config.example.ts +0 -64
  563. package/examples/lib/puck-layouts.ts +0 -258
  564. package/examples/lib/puck-theme.ts +0 -94
  565. package/examples/styles/puck-theme.css +0 -171
@@ -1,569 +1,292 @@
1
- 'use strict';
2
-
3
- // src/layouts/defaults.ts
4
- var defaultLayout = {
5
- value: "default",
6
- label: "Default",
7
- description: "Standard page layout with contained content width",
8
- classes: {
9
- wrapper: "",
10
- container: "mx-auto px-4 sm:px-6 lg:px-8",
11
- content: ""
12
- },
13
- maxWidth: "1200px",
14
- fullWidth: false
15
- };
16
- var landingLayout = {
17
- value: "landing",
18
- label: "Landing",
19
- description: "Full-width sections with no global container constraints",
20
- classes: {
21
- wrapper: "",
22
- container: "",
23
- content: ""
24
- },
25
- fullWidth: true
26
- };
27
- var fullWidthLayout = {
28
- value: "full-width",
29
- label: "Full Width",
30
- description: "Content spans the full viewport width",
31
- classes: {
32
- wrapper: "w-full",
33
- container: "w-full",
34
- content: ""
35
- },
36
- maxWidth: "100%",
37
- fullWidth: true
38
- };
39
- var DEFAULT_LAYOUTS = [
40
- defaultLayout,
41
- landingLayout,
42
- fullWidthLayout
43
- ];
44
-
45
- // src/layouts/utils.ts
46
- function layoutsToPayloadOptions(layouts) {
47
- return layouts.map(({ value, label }) => ({
48
- label,
49
- value
50
- }));
51
- }
52
-
53
- // src/plugin/fields/index.ts
54
- var puckDataField = {
55
- name: "puckData",
56
- type: "json",
57
- admin: {
58
- hidden: true,
59
- description: "Puck editor data - managed via visual editor"
60
- }
61
- };
62
- function createEditorVersionField(defaultValue = "puck", sidebar = true, legacyBlocksFieldName = "layout") {
63
- return {
64
- name: "editorVersion",
65
- type: "select",
66
- // NO defaultValue here - we use the hook to intelligently detect the value
67
- // This prevents migrations from blindly setting 'puck' on legacy pages
68
- options: [
69
- { label: "Legacy (Payload Blocks)", value: "legacy" },
70
- { label: "Puck Visual Editor", value: "puck" }
71
- ],
72
- admin: {
73
- position: sidebar ? "sidebar" : void 0,
74
- description: "Which editor was used to create this page"
75
- },
76
- hooks: {
77
- beforeValidate: [
78
- ({ value, data, operation }) => {
79
- if (value) return value;
80
- const legacyBlocks = data?.[legacyBlocksFieldName];
81
- const hasLegacyBlocks = Array.isArray(legacyBlocks) && legacyBlocks.length > 0;
82
- const puckData = data?.puckData;
83
- const hasPuckData = puckData?.content && Array.isArray(puckData.content) && puckData.content.length > 0;
84
- if (hasLegacyBlocks && !hasPuckData) {
85
- return "legacy";
86
- }
87
- if (hasPuckData) {
88
- return "puck";
89
- }
90
- return defaultValue;
91
- }
92
- ]
93
- }
94
- };
95
- }
96
- var editorVersionField = createEditorVersionField("puck", true);
97
- function createPageLayoutField(layouts = DEFAULT_LAYOUTS, sidebar = true) {
98
- return {
99
- name: "pageLayout",
100
- type: "select",
101
- required: true,
102
- defaultValue: "default",
103
- options: layoutsToPayloadOptions(layouts),
104
- admin: {
105
- position: sidebar ? "sidebar" : void 0,
106
- description: "Overall page structure and layout style"
107
- }
108
- };
109
- }
110
- var pageLayoutField = createPageLayoutField();
111
- var isHomepageField = {
112
- name: "isHomepage",
113
- type: "checkbox",
114
- defaultValue: false,
115
- admin: {
116
- position: "sidebar",
117
- description: "Mark this page as the homepage"
118
- }
119
- };
120
- var seoFieldGroup = {
121
- name: "meta",
122
- type: "group",
123
- label: "SEO",
124
- admin: {
125
- position: "sidebar"
126
- },
127
- fields: [
128
- {
129
- name: "title",
130
- type: "text",
131
- label: "Meta Title",
132
- admin: {
133
- description: "Override the page title for search engines"
134
- }
135
- },
136
- {
137
- name: "description",
138
- type: "textarea",
139
- label: "Meta Description",
140
- admin: {
141
- description: "Description shown in search engine results"
142
- }
143
- },
144
- {
145
- name: "image",
146
- type: "upload",
147
- relationTo: "media",
148
- label: "Open Graph Image",
149
- admin: {
150
- description: "Image shown when sharing on social media"
151
- }
152
- },
153
- {
154
- name: "noindex",
155
- type: "checkbox",
156
- label: "No Index",
157
- defaultValue: false,
158
- admin: {
159
- description: "Prevent search engines from indexing this page"
160
- }
161
- },
162
- {
163
- name: "nofollow",
164
- type: "checkbox",
165
- label: "No Follow",
166
- defaultValue: false,
167
- admin: {
168
- description: "Prevent search engines from following links on this page"
169
- }
170
- },
171
- {
172
- name: "excludeFromSitemap",
173
- type: "checkbox",
174
- label: "Exclude from Sitemap",
175
- defaultValue: false,
176
- admin: {
177
- description: "Exclude this page from the XML sitemap"
178
- }
179
- }
180
- ]
181
- };
182
- var DEFAULT_CONVERSION_TYPES = [
183
- { label: "Lead", value: "lead" },
184
- { label: "Registration", value: "registration" },
185
- { label: "Purchase", value: "purchase" },
186
- { label: "Donation", value: "donation" },
187
- { label: "Newsletter Signup", value: "newsletter" },
188
- { label: "Contact Form", value: "contact" },
189
- { label: "Custom", value: "custom" }
190
- ];
191
- function createConversionFieldGroup(conversionTypes = DEFAULT_CONVERSION_TYPES, sidebar = true) {
192
- return {
193
- name: "conversionTracking",
194
- type: "group",
195
- label: "Conversion Tracking",
196
- admin: {
197
- position: sidebar ? "sidebar" : void 0,
198
- description: "Configure conversion tracking for analytics"
199
- },
200
- fields: [
201
- {
202
- name: "isConversionPage",
203
- type: "checkbox",
204
- label: "Is Conversion Page",
205
- defaultValue: false,
206
- admin: {
207
- description: "Check this if this page represents a completed conversion (e.g., thank you page)"
208
- }
209
- },
210
- {
211
- name: "conversionType",
212
- type: "select",
213
- label: "Conversion Type",
214
- options: conversionTypes,
215
- admin: {
216
- description: "Type of conversion this page represents",
217
- condition: (data, siblingData) => siblingData?.isConversionPage === true
218
- }
219
- },
220
- {
221
- name: "conversionValue",
222
- type: "number",
223
- label: "Conversion Value",
224
- defaultValue: 0,
225
- admin: {
226
- description: "Monetary value of this conversion (0 for non-monetary conversions)",
227
- condition: (data, siblingData) => siblingData?.isConversionPage === true
228
- }
229
- }
230
- ]
231
- };
232
- }
233
- var conversionFieldGroup = createConversionFieldGroup();
234
- function getPuckFields(options = {}) {
235
- const {
236
- includeSEO = true,
237
- includeConversion = false,
238
- includeEditorVersion = true,
239
- includePageLayout = true,
240
- includeIsHomepage = false,
241
- layouts = DEFAULT_LAYOUTS,
242
- defaultEditorVersion = "puck",
243
- legacyBlocksFieldName = "layout",
244
- sidebarPosition = true,
245
- conversionTypeOptions
246
- } = options;
247
- const fields = [];
248
- fields.push(puckDataField);
249
- if (includeEditorVersion) {
250
- fields.push(createEditorVersionField(defaultEditorVersion, sidebarPosition, legacyBlocksFieldName));
251
- }
252
- if (includePageLayout) {
253
- fields.push(createPageLayoutField(layouts, sidebarPosition));
254
- }
255
- if (includeIsHomepage) {
256
- fields.push(isHomepageField);
257
- }
258
- if (includeSEO) {
259
- fields.push(seoFieldGroup);
260
- }
261
- if (includeConversion) {
262
- fields.push(createConversionFieldGroup(conversionTypeOptions, sidebarPosition));
263
- }
264
- return fields;
265
- }
266
-
267
- // src/plugin/collections/Pages.ts
268
- var defaultAccess = () => true;
269
- function generatePagesCollection(slug, options) {
270
- const {
271
- collectionOverrides = {},
272
- access = {},
273
- layouts = DEFAULT_LAYOUTS,
274
- additionalFields = []
275
- } = options;
276
- const baseFields = [
277
- // Core Fields (title and slug with duplication hooks - unique to collection generation)
278
- {
279
- name: "title",
280
- type: "text",
281
- required: true,
282
- hooks: {
283
- beforeDuplicate: [
284
- ({ value }) => {
285
- if (!value) return value;
286
- const copyMatch = value.match(/^(.+) \(Copy(?: (\d+))?\)$/);
287
- if (copyMatch) {
288
- const baseName = copyMatch[1];
289
- const copyNum = copyMatch[2] ? parseInt(copyMatch[2], 10) + 1 : 2;
290
- return `${baseName} (Copy ${copyNum})`;
1
+ import { generatePagesCollection } from './collections/Pages';
2
+ import { TemplatesCollection } from '../collections/Templates';
3
+ import { getPuckFields } from './fields';
4
+ import { createListHandler, createCreateHandler, createGetHandler, createUpdateHandler, createDeleteHandler, createVersionsHandler, createRestoreHandler, } from '../endpoints/index.js';
5
+ /**
6
+ * Get all field names from a collection's fields array (including nested group fields and tabs)
7
+ */
8
+ function getExistingFieldNames(fields) {
9
+ const names = new Set();
10
+ function addFieldNames(fieldsToCheck) {
11
+ for (const field of fieldsToCheck) {
12
+ // Add the field name if it has one
13
+ if ('name' in field && field.name) {
14
+ names.add(field.name);
291
15
  }
292
- return `${value} (Copy)`;
293
- }
294
- ]
295
- }
296
- },
297
- {
298
- name: "slug",
299
- type: "text",
300
- required: true,
301
- unique: true,
302
- index: true,
303
- admin: {
304
- position: "sidebar",
305
- description: "URL path for this page (auto-generated from title)"
306
- },
307
- hooks: {
308
- beforeValidate: [
309
- ({ data, value }) => {
310
- if (data && !value && data.title) {
311
- return data.title.toLowerCase().replace(/[^\w\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").trim();
16
+ // Check nested fields in groups, rows, collapsibles, etc.
17
+ if ('fields' in field && Array.isArray(field.fields)) {
18
+ addFieldNames(field.fields);
312
19
  }
313
- return value;
314
- }
315
- ],
316
- beforeDuplicate: [
317
- ({ value }) => {
318
- if (!value) return value;
319
- const copyMatch = value.match(/^(.+)-copy(?:-(\d+))?$/);
320
- if (copyMatch) {
321
- const baseName = copyMatch[1];
322
- const copyNum = copyMatch[2] ? parseInt(copyMatch[2], 10) + 1 : 2;
323
- return `${baseName}-copy-${copyNum}`;
20
+ // Check fields inside tabs
21
+ if (field.type === 'tabs' && 'tabs' in field && Array.isArray(field.tabs)) {
22
+ for (const tab of field.tabs) {
23
+ if ('fields' in tab && Array.isArray(tab.fields)) {
24
+ addFieldNames(tab.fields);
25
+ }
26
+ }
324
27
  }
325
- return `${value}-copy`;
326
- }
327
- ]
328
- }
329
- },
330
- // Page Layout
331
- createPageLayoutField(layouts, true),
332
- // Editor Version
333
- createEditorVersionField("puck", true),
334
- // Homepage Flag
335
- isHomepageField,
336
- // Puck Data (hidden - managed via visual editor)
337
- puckDataField,
338
- // SEO Fields
339
- seoFieldGroup,
340
- // Conversion Tracking Fields
341
- conversionFieldGroup,
342
- // Additional fields from options
343
- ...additionalFields
344
- ];
345
- return {
346
- slug,
347
- admin: {
348
- useAsTitle: "title",
349
- group: "Content",
350
- defaultColumns: ["title", "slug", "_status", "updatedAt"],
351
- ...collectionOverrides.admin ?? {}
352
- },
353
- access: {
354
- read: access.read ?? defaultAccess,
355
- create: access.create ?? defaultAccess,
356
- update: access.update ?? defaultAccess,
357
- delete: access.delete ?? defaultAccess,
358
- ...collectionOverrides.access ?? {}
359
- },
360
- versions: typeof collectionOverrides.versions === "object" ? { drafts: true, ...collectionOverrides.versions } : { drafts: true },
361
- fields: baseFields,
362
- ...collectionOverrides,
363
- // Ensure fields aren't overwritten by collectionOverrides
364
- ...collectionOverrides.fields && {
365
- fields: [...baseFields, ...collectionOverrides.fields]
366
- }
367
- };
368
- }
369
-
370
- // src/collections/Templates.ts
371
- var TemplatesCollection = {
372
- slug: "puck-templates",
373
- admin: {
374
- useAsTitle: "name",
375
- group: "Puck",
376
- defaultColumns: ["name", "category", "updatedAt"],
377
- description: "Reusable component templates for the visual editor"
378
- },
379
- access: {
380
- read: () => true,
381
- create: ({ req }) => !!req.user,
382
- update: ({ req }) => !!req.user,
383
- delete: ({ req }) => !!req.user
384
- },
385
- fields: [
386
- {
387
- name: "name",
388
- type: "text",
389
- required: true,
390
- admin: {
391
- description: "A descriptive name for this template"
392
- }
393
- },
394
- {
395
- name: "description",
396
- type: "textarea",
397
- admin: {
398
- description: "Optional description of what this template contains"
399
- }
400
- },
401
- {
402
- name: "category",
403
- type: "text",
404
- admin: {
405
- description: 'Category for organizing templates (e.g., "Hero", "Footer", "CTA")'
406
- }
407
- },
408
- {
409
- name: "content",
410
- type: "json",
411
- required: true,
412
- admin: {
413
- description: "Serialized Puck component data"
414
- }
415
- },
416
- {
417
- name: "thumbnail",
418
- type: "text",
419
- admin: {
420
- description: "Optional thumbnail URL for template preview"
421
- }
422
- }
423
- ],
424
- timestamps: true
425
- };
426
-
427
- // src/plugin/index.ts
428
- function getExistingFieldNames(fields) {
429
- const names = /* @__PURE__ */ new Set();
430
- function addFieldNames(fieldsToCheck) {
431
- for (const field of fieldsToCheck) {
432
- if ("name" in field && field.name) {
433
- names.add(field.name);
434
- }
435
- if ("fields" in field && Array.isArray(field.fields)) {
436
- addFieldNames(field.fields);
437
- }
438
- if (field.type === "tabs" && "tabs" in field && Array.isArray(field.tabs)) {
439
- for (const tab of field.tabs) {
440
- if ("fields" in tab && Array.isArray(tab.fields)) {
441
- addFieldNames(tab.fields);
442
- }
443
28
  }
444
- }
445
29
  }
446
- }
447
- addFieldNames(fields);
448
- return names;
30
+ addFieldNames(fields);
31
+ return names;
449
32
  }
33
+ /**
34
+ * Filter out fields that already exist in the target collection
35
+ */
450
36
  function filterExistingFields(fieldsToAdd, existingNames) {
451
- return fieldsToAdd.filter((field) => {
452
- if ("name" in field && field.name) {
453
- return !existingNames.has(field.name);
454
- }
455
- return true;
456
- });
37
+ return fieldsToAdd.filter((field) => {
38
+ if ('name' in field && field.name) {
39
+ return !existingNames.has(field.name);
40
+ }
41
+ return true; // Keep fields without names (like UI fields)
42
+ });
457
43
  }
44
+ /**
45
+ * Generates the UI field configuration for the Edit with Puck button
46
+ */
458
47
  function generatePuckEditField(collectionSlug, adminConfig = {}) {
459
- const {
460
- editorPathPattern = "/pages/{id}/edit",
461
- buttonLabel = "Edit with Puck",
462
- buttonPosition
463
- // undefined = main area (default), 'sidebar' = sidebar
464
- } = adminConfig;
465
- return {
466
- name: "puckEdit",
467
- type: "ui",
468
- admin: {
469
- // Only set position if explicitly specified (sidebar)
470
- // undefined means main form area in Payload
471
- ...buttonPosition && { position: buttonPosition },
472
- components: {
473
- Field: "@delmaredigital/payload-puck/admin/client#EditWithPuckButton",
474
- Cell: "@delmaredigital/payload-puck/admin/client#EditWithPuckCell"
475
- },
476
- custom: {
477
- collectionSlug,
478
- editorPathPattern,
479
- label: buttonLabel
480
- }
481
- }
482
- };
48
+ const { editorPathPattern = '/pages/{id}/edit', buttonLabel = 'Edit with Puck', buttonPosition, // undefined = main area (default), 'sidebar' = sidebar
49
+ } = adminConfig;
50
+ return {
51
+ name: 'puckEdit',
52
+ type: 'ui',
53
+ admin: {
54
+ // Only set position if explicitly specified (sidebar)
55
+ // undefined means main form area in Payload
56
+ ...(buttonPosition && { position: buttonPosition }),
57
+ components: {
58
+ Field: '@delmaredigital/payload-puck/admin/client#EditWithPuckButton',
59
+ Cell: '@delmaredigital/payload-puck/admin/client#EditWithPuckCell',
60
+ },
61
+ custom: {
62
+ collectionSlug,
63
+ editorPathPattern,
64
+ label: buttonLabel,
65
+ },
66
+ },
67
+ };
483
68
  }
484
- function createPuckPlugin(options = {}) {
485
- const {
486
- pagesCollection = "pages",
487
- autoGenerateCollection = true,
488
- admin: adminConfig = {}
489
- } = options;
490
- const { addEditButton = true } = adminConfig;
491
- return (incomingConfig) => {
492
- let collections = incomingConfig.collections || [];
493
- const templatesCollectionExists = collections.some(
494
- (c) => c.slug === "puck-templates"
495
- );
496
- if (!templatesCollectionExists) {
497
- collections = [...collections, TemplatesCollection];
69
+ /**
70
+ * Creates a Payload plugin that integrates Puck visual page builder
71
+ *
72
+ * This plugin:
73
+ * - Generates a Pages collection with puckData field
74
+ * - Registers the Puck editor as an admin view at /admin/puck-editor/:collection/:id
75
+ * - Adds an "Edit with Puck" button in the admin document view
76
+ * - Optionally registers API endpoints for CRUD operations
77
+ *
78
+ * The Puck editor is fully integrated into Payload's admin UI.
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * import { createPuckPlugin } from '@delmaredigital/payload-puck/plugin'
83
+ *
84
+ * export default buildConfig({
85
+ * plugins: [
86
+ * createPuckPlugin({
87
+ * pagesCollection: 'pages',
88
+ * access: {
89
+ * read: () => true,
90
+ * create: ({ req }) => !!req.user,
91
+ * update: ({ req }) => !!req.user,
92
+ * delete: ({ req }) => req.user?.role === 'admin',
93
+ * },
94
+ * admin: {
95
+ * buttonLabel: 'Visual Editor',
96
+ * },
97
+ * }),
98
+ * ],
99
+ * })
100
+ * ```
101
+ */
102
+ export function createPuckPlugin(options = {}) {
103
+ const { pagesCollection = 'pages', autoGenerateCollection = true, admin: pluginAdminConfig = {}, enableAdminView = true, adminViewPath = '/puck-editor', enableEndpoints = true, pageTreeIntegration, // No default - undefined means auto-detect
104
+ } = options;
105
+ const { addEditButton = true } = pluginAdminConfig;
106
+ // Parse page-tree integration config
107
+ // - undefined: auto-detect at runtime (null stored, view will check for pageSegment field)
108
+ // - false: explicitly disabled (store false to prevent auto-detection)
109
+ // - true: use defaults
110
+ // - object: use custom field names
111
+ let pageTreeConfig = null;
112
+ if (pageTreeIntegration === undefined) {
113
+ // Not specified - store null to trigger auto-detection in the view
114
+ pageTreeConfig = null;
498
115
  }
499
- if (autoGenerateCollection) {
500
- const existingCollectionIndex = collections.findIndex(
501
- (c) => c.slug === pagesCollection
502
- );
503
- const editButtonField = addEditButton ? [generatePuckEditField(pagesCollection, adminConfig)] : [];
504
- if (existingCollectionIndex >= 0) {
505
- const existingCollection = collections[existingCollectionIndex];
506
- const existingFields = existingCollection.fields || [];
507
- const existingFieldNames = getExistingFieldNames(existingFields);
508
- const puckFields = getPuckFields({
509
- includeSEO: !existingFieldNames.has("meta"),
510
- includeConversion: !existingFieldNames.has("conversionTracking"),
511
- includeEditorVersion: !existingFieldNames.has("editorVersion"),
512
- includePageLayout: !existingFieldNames.has("pageLayout"),
513
- includeIsHomepage: !existingFieldNames.has("isHomepage"),
514
- layouts: options.layouts
515
- });
516
- const fieldsToAdd = filterExistingFields(puckFields, existingFieldNames);
517
- const editFieldsToAdd = existingFieldNames.has("puckEdit") ? [] : editButtonField;
518
- collections = [
519
- ...collections.slice(0, existingCollectionIndex),
520
- {
521
- ...existingCollection,
522
- // Ensure drafts are enabled for Puck
523
- versions: typeof existingCollection.versions === "object" ? { drafts: true, ...existingCollection.versions } : existingCollection.versions ?? { drafts: true },
524
- fields: [
525
- ...existingFields,
526
- ...fieldsToAdd,
527
- ...editFieldsToAdd
528
- ]
529
- },
530
- ...collections.slice(existingCollectionIndex + 1)
531
- ];
532
- } else {
533
- const generatedCollection = generatePagesCollection(pagesCollection, options);
534
- collections = [
535
- ...collections,
536
- {
537
- ...generatedCollection,
538
- fields: [...generatedCollection.fields, ...editButtonField]
539
- }
540
- ];
541
- }
116
+ else if (pageTreeIntegration === false) {
117
+ // Explicitly disabled - store false to prevent auto-detection
118
+ pageTreeConfig = false;
542
119
  }
543
- return {
544
- ...incomingConfig,
545
- collections,
546
- onInit: async (payload) => {
547
- if (incomingConfig.onInit) {
548
- await incomingConfig.onInit(payload);
120
+ else if (pageTreeIntegration === true) {
121
+ // Explicitly enabled with defaults
122
+ pageTreeConfig = {
123
+ folderSlug: 'payload-folders',
124
+ segmentFieldName: 'pathSegment',
125
+ pageSegmentFieldName: 'pageSegment',
126
+ folderFieldName: 'folder',
127
+ };
128
+ }
129
+ else {
130
+ // Custom config object
131
+ pageTreeConfig = {
132
+ folderSlug: pageTreeIntegration.folderSlug ?? 'payload-folders',
133
+ segmentFieldName: pageTreeIntegration.segmentFieldName ?? 'pathSegment',
134
+ pageSegmentFieldName: pageTreeIntegration.pageSegmentFieldName ?? 'pageSegment',
135
+ folderFieldName: pageTreeIntegration.folderFieldName ?? 'folder',
136
+ };
137
+ }
138
+ return (incomingConfig) => {
139
+ // Generate Pages collection if auto-generate is enabled
140
+ let collections = incomingConfig.collections || [];
141
+ // Always add the Templates collection if it doesn't exist
142
+ const templatesCollectionExists = collections.some((c) => c.slug === 'puck-templates');
143
+ if (!templatesCollectionExists) {
144
+ collections = [...collections, TemplatesCollection];
145
+ }
146
+ if (autoGenerateCollection) {
147
+ // Check if collection already exists
148
+ const existingCollectionIndex = collections.findIndex((c) => c.slug === pagesCollection);
149
+ // Generate the edit button field if enabled
150
+ const editButtonField = addEditButton
151
+ ? [generatePuckEditField(pagesCollection, pluginAdminConfig)]
152
+ : [];
153
+ if (existingCollectionIndex >= 0) {
154
+ // Collection exists - only add Puck fields that don't already exist
155
+ const existingCollection = collections[existingCollectionIndex];
156
+ const existingFields = existingCollection.fields || [];
157
+ const existingFieldNames = getExistingFieldNames(existingFields);
158
+ // Get Puck-specific fields (not the full collection with title/slug)
159
+ // This avoids duplicating fields the user may have already defined
160
+ const puckFields = getPuckFields({
161
+ includeSEO: !existingFieldNames.has('meta'),
162
+ includeConversion: !existingFieldNames.has('conversionTracking'),
163
+ includeEditorVersion: !existingFieldNames.has('editorVersion'),
164
+ includePageLayout: !existingFieldNames.has('pageLayout'),
165
+ includeIsHomepage: !existingFieldNames.has('isHomepage'),
166
+ layouts: options.layouts,
167
+ });
168
+ // Filter out any remaining duplicates (e.g., puckData if user already has it)
169
+ const fieldsToAdd = filterExistingFields(puckFields, existingFieldNames);
170
+ // Only add edit button if puckEdit doesn't exist
171
+ const editFieldsToAdd = existingFieldNames.has('puckEdit') ? [] : editButtonField;
172
+ collections = [
173
+ ...collections.slice(0, existingCollectionIndex),
174
+ {
175
+ ...existingCollection,
176
+ // Ensure drafts are enabled for Puck
177
+ versions: typeof existingCollection.versions === 'object'
178
+ ? { drafts: true, ...existingCollection.versions }
179
+ : existingCollection.versions ?? { drafts: true },
180
+ fields: [
181
+ ...existingFields,
182
+ ...fieldsToAdd,
183
+ ...editFieldsToAdd,
184
+ ],
185
+ },
186
+ ...collections.slice(existingCollectionIndex + 1),
187
+ ];
188
+ }
189
+ else {
190
+ // Add new collection with edit button field
191
+ const generatedCollection = generatePagesCollection(pagesCollection, options);
192
+ collections = [
193
+ ...collections,
194
+ {
195
+ ...generatedCollection,
196
+ fields: [...generatedCollection.fields, ...editButtonField],
197
+ },
198
+ ];
199
+ }
549
200
  }
550
- }
201
+ // Build the admin config with view registration
202
+ const payloadAdminConfig = {
203
+ ...incomingConfig.admin,
204
+ };
205
+ // Register the Puck editor admin view if enabled
206
+ if (enableAdminView) {
207
+ payloadAdminConfig.components = {
208
+ ...payloadAdminConfig.components,
209
+ views: {
210
+ ...payloadAdminConfig.components?.views,
211
+ puckEditor: {
212
+ Component: '@delmaredigital/payload-puck/rsc#PuckEditorView',
213
+ path: `${adminViewPath}/:segments*`,
214
+ },
215
+ },
216
+ };
217
+ }
218
+ // Register API endpoints if enabled
219
+ const puckCollections = [pagesCollection];
220
+ const endpointOptions = { collections: puckCollections };
221
+ const endpoints = enableEndpoints
222
+ ? [
223
+ ...(incomingConfig.endpoints || []),
224
+ {
225
+ path: '/puck/:collection',
226
+ method: 'get',
227
+ handler: createListHandler(endpointOptions),
228
+ },
229
+ {
230
+ path: '/puck/:collection',
231
+ method: 'post',
232
+ handler: createCreateHandler(endpointOptions),
233
+ },
234
+ {
235
+ path: '/puck/:collection/:id',
236
+ method: 'get',
237
+ handler: createGetHandler(endpointOptions),
238
+ },
239
+ {
240
+ path: '/puck/:collection/:id',
241
+ method: 'patch',
242
+ handler: createUpdateHandler(endpointOptions),
243
+ },
244
+ {
245
+ path: '/puck/:collection/:id',
246
+ method: 'delete',
247
+ handler: createDeleteHandler(endpointOptions),
248
+ },
249
+ {
250
+ path: '/puck/:collection/:id/versions',
251
+ method: 'get',
252
+ handler: createVersionsHandler(endpointOptions),
253
+ },
254
+ {
255
+ path: '/puck/:collection/:id/restore',
256
+ method: 'post',
257
+ handler: createRestoreHandler(endpointOptions),
258
+ },
259
+ ]
260
+ : incomingConfig.endpoints || [];
261
+ return {
262
+ ...incomingConfig,
263
+ admin: payloadAdminConfig,
264
+ collections,
265
+ endpoints,
266
+ // Store options in custom for the view to access
267
+ custom: {
268
+ ...incomingConfig.custom,
269
+ puck: {
270
+ collections: puckCollections,
271
+ layouts: options.layouts,
272
+ // Page-tree integration config (null if not enabled)
273
+ pageTree: pageTreeConfig,
274
+ },
275
+ },
276
+ onInit: async (payload) => {
277
+ // Call existing onInit if present
278
+ if (incomingConfig.onInit) {
279
+ await incomingConfig.onInit(payload);
280
+ }
281
+ },
282
+ };
551
283
  };
552
- };
553
284
  }
554
-
555
- exports.TemplatesCollection = TemplatesCollection;
556
- exports.conversionFieldGroup = conversionFieldGroup;
557
- exports.createEditorVersionField = createEditorVersionField;
558
- exports.createPageLayoutField = createPageLayoutField;
559
- exports.createPuckPlugin = createPuckPlugin;
560
- exports.editorVersionField = editorVersionField;
561
- exports.generatePagesCollection = generatePagesCollection;
562
- exports.generatePuckEditField = generatePuckEditField;
563
- exports.getPuckFields = getPuckFields;
564
- exports.isHomepageField = isHomepageField;
565
- exports.pageLayoutField = pageLayoutField;
566
- exports.puckDataField = puckDataField;
567
- exports.seoFieldGroup = seoFieldGroup;
568
- //# sourceMappingURL=index.js.map
285
+ // Re-export collection utilities
286
+ export { generatePagesCollection } from './collections/Pages';
287
+ export { TemplatesCollection } from '../collections/Templates';
288
+ // Re-export field utilities for hybrid collection integration
289
+ export { getPuckFields, puckDataField, editorVersionField, createEditorVersionField, pageLayoutField, createPageLayoutField, isHomepageField, seoFieldGroup, conversionFieldGroup, } from './fields';
290
+ // Export the edit button generator for hybrid collections
291
+ export { generatePuckEditField };
569
292
  //# sourceMappingURL=index.js.map