@delmaredigital/payload-puck 0.6.10 → 0.6.13

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 (583) hide show
  1. package/README.md +79 -1
  2. package/dist/admin/EditWithPuckButton.d.ts +1 -1
  3. package/dist/admin/EditWithPuckButton.d.ts.map +1 -1
  4. package/dist/admin/EditWithPuckButton.js +65 -25
  5. package/dist/admin/EditWithPuckButton.js.map +1 -1
  6. package/dist/admin/EditWithPuckCell.js +43 -13
  7. package/dist/admin/EditWithPuckCell.js.map +1 -1
  8. package/dist/admin/PuckEditorView.d.ts +1 -1
  9. package/dist/admin/PuckEditorView.d.ts.map +1 -1
  10. package/dist/admin/PuckEditorView.js +118 -32
  11. package/dist/admin/PuckEditorView.js.map +1 -1
  12. package/dist/admin/client.d.ts +2 -2
  13. package/dist/admin/client.d.ts.map +1 -1
  14. package/dist/admin/client.js +4 -4
  15. package/dist/admin/client.js.map +1 -1
  16. package/dist/admin/generateAdminComponents.js +7 -7
  17. package/dist/admin/generateAdminComponents.js.map +1 -1
  18. package/dist/admin/index.d.ts +5 -5
  19. package/dist/admin/index.d.ts.map +1 -1
  20. package/dist/admin/index.js +3 -2
  21. package/dist/admin/index.js.map +1 -1
  22. package/dist/ai/collections/AiContext.js +56 -29
  23. package/dist/ai/collections/AiContext.js.map +1 -1
  24. package/dist/ai/collections/AiPrompts.js +24 -19
  25. package/dist/ai/collections/AiPrompts.js.map +1 -1
  26. package/dist/ai/createAiApiRoutes.js +28 -19
  27. package/dist/ai/createAiApiRoutes.js.map +1 -1
  28. package/dist/ai/createAiGenerate.js +7 -8
  29. package/dist/ai/createAiGenerate.js.map +1 -1
  30. package/dist/ai/createAiPlugin.js +7 -9
  31. package/dist/ai/createAiPlugin.js.map +1 -1
  32. package/dist/ai/hooks/useAiContext.js +50 -39
  33. package/dist/ai/hooks/useAiContext.js.map +1 -1
  34. package/dist/ai/hooks/useAiPrompts.js +33 -25
  35. package/dist/ai/hooks/useAiPrompts.js.map +1 -1
  36. package/dist/ai/index.js +9 -10
  37. package/dist/ai/index.js.map +1 -1
  38. package/dist/ai/plugins/ContextEditorPanel.d.ts +1 -1
  39. package/dist/ai/plugins/ContextEditorPanel.d.ts.map +1 -1
  40. package/dist/ai/plugins/ContextEditorPanel.js +399 -107
  41. package/dist/ai/plugins/ContextEditorPanel.js.map +1 -1
  42. package/dist/ai/plugins/PromptEditorPanel.d.ts +1 -1
  43. package/dist/ai/plugins/PromptEditorPanel.d.ts.map +1 -1
  44. package/dist/ai/plugins/PromptEditorPanel.js +237 -51
  45. package/dist/ai/plugins/PromptEditorPanel.js.map +1 -1
  46. package/dist/ai/plugins/contextEditorPlugin.js +12 -5
  47. package/dist/ai/plugins/contextEditorPlugin.js.map +1 -1
  48. package/dist/ai/plugins/promptApiRoutes.js +119 -50
  49. package/dist/ai/plugins/promptApiRoutes.js.map +1 -1
  50. package/dist/ai/plugins/promptEditorPlugin.js +12 -5
  51. package/dist/ai/plugins/promptEditorPlugin.js.map +1 -1
  52. package/dist/ai/presets/componentAiDefaults.js +108 -83
  53. package/dist/ai/presets/componentAiDefaults.js.map +1 -1
  54. package/dist/ai/presets/index.js +12 -18
  55. package/dist/ai/presets/index.js.map +1 -1
  56. package/dist/ai/presets/instructions/interactive.js +85 -75
  57. package/dist/ai/presets/instructions/interactive.js.map +1 -1
  58. package/dist/ai/presets/instructions/layout.js +122 -117
  59. package/dist/ai/presets/instructions/layout.js.map +1 -1
  60. package/dist/ai/presets/instructions/media.js +31 -29
  61. package/dist/ai/presets/instructions/media.js.map +1 -1
  62. package/dist/ai/presets/instructions/pagePatterns.js +4 -6
  63. package/dist/ai/presets/instructions/pagePatterns.js.map +1 -1
  64. package/dist/ai/presets/instructions/schemas.js +495 -137
  65. package/dist/ai/presets/instructions/schemas.js.map +1 -1
  66. package/dist/ai/presets/instructions/typography.js +38 -33
  67. package/dist/ai/presets/instructions/typography.js.map +1 -1
  68. package/dist/ai/tools/index.js +92 -55
  69. package/dist/ai/tools/index.js.map +1 -1
  70. package/dist/ai/types.js +7 -1
  71. package/dist/ai/types.js.map +1 -1
  72. package/dist/ai/utils/injectAiConfig.js +33 -40
  73. package/dist/ai/utils/injectAiConfig.js.map +1 -1
  74. package/dist/api/createPuckApiRoutes.d.ts +1 -1
  75. package/dist/api/createPuckApiRoutes.d.ts.map +1 -1
  76. package/dist/api/createPuckApiRoutes.js +123 -65
  77. package/dist/api/createPuckApiRoutes.js.map +1 -1
  78. package/dist/api/createPuckApiRoutesVersions.d.ts +1 -1
  79. package/dist/api/createPuckApiRoutesVersions.d.ts.map +1 -1
  80. package/dist/api/createPuckApiRoutesVersions.js +88 -37
  81. package/dist/api/createPuckApiRoutesVersions.js.map +1 -1
  82. package/dist/api/createPuckApiRoutesWithId.d.ts +1 -1
  83. package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -1
  84. package/dist/api/createPuckApiRoutesWithId.js +166 -72
  85. package/dist/api/createPuckApiRoutesWithId.js.map +1 -1
  86. package/dist/api/index.d.ts +5 -5
  87. package/dist/api/index.d.ts.map +1 -1
  88. package/dist/api/index.js +6 -6
  89. package/dist/api/index.js.map +1 -1
  90. package/dist/api/payload-config.d.js +15 -0
  91. package/dist/api/payload-config.d.js.map +1 -0
  92. package/dist/api/types.js +4 -1
  93. package/dist/api/types.js.map +1 -1
  94. package/dist/api/utils/mapRootProps.d.ts +1 -1
  95. package/dist/api/utils/mapRootProps.d.ts.map +1 -1
  96. package/dist/api/utils/mapRootProps.js +77 -44
  97. package/dist/api/utils/mapRootProps.js.map +1 -1
  98. package/dist/collections/Templates.js +24 -20
  99. package/dist/collections/Templates.js.map +1 -1
  100. package/dist/components/AccordionClient.d.ts +2 -2
  101. package/dist/components/AccordionClient.d.ts.map +1 -1
  102. package/dist/components/AccordionClient.js +81 -22
  103. package/dist/components/AccordionClient.js.map +1 -1
  104. package/dist/components/AnimatedWrapper.d.ts +2 -2
  105. package/dist/components/AnimatedWrapper.d.ts.map +1 -1
  106. package/dist/components/AnimatedWrapper.js +31 -16
  107. package/dist/components/AnimatedWrapper.js.map +1 -1
  108. package/dist/components/exports.js +2 -2
  109. package/dist/components/exports.js.map +1 -1
  110. package/dist/components/index.d.ts +5 -5
  111. package/dist/components/index.d.ts.map +1 -1
  112. package/dist/components/index.js +7 -7
  113. package/dist/components/index.js.map +1 -1
  114. package/dist/components/interactive/Accordion.d.ts +1 -1
  115. package/dist/components/interactive/Accordion.d.ts.map +1 -1
  116. package/dist/components/interactive/Accordion.js +149 -55
  117. package/dist/components/interactive/Accordion.js.map +1 -1
  118. package/dist/components/interactive/Accordion.server.d.ts +1 -1
  119. package/dist/components/interactive/Accordion.server.d.ts.map +1 -1
  120. package/dist/components/interactive/Accordion.server.js +25 -7
  121. package/dist/components/interactive/Accordion.server.js.map +1 -1
  122. package/dist/components/interactive/Button.d.ts +3 -3
  123. package/dist/components/interactive/Button.d.ts.map +1 -1
  124. package/dist/components/interactive/Button.js +89 -43
  125. package/dist/components/interactive/Button.js.map +1 -1
  126. package/dist/components/interactive/Button.server.d.ts +2 -2
  127. package/dist/components/interactive/Button.server.d.ts.map +1 -1
  128. package/dist/components/interactive/Button.server.js +40 -20
  129. package/dist/components/interactive/Button.server.js.map +1 -1
  130. package/dist/components/interactive/Card.d.ts +3 -3
  131. package/dist/components/interactive/Card.d.ts.map +1 -1
  132. package/dist/components/interactive/Card.js +131 -39
  133. package/dist/components/interactive/Card.js.map +1 -1
  134. package/dist/components/interactive/Card.server.d.ts +3 -3
  135. package/dist/components/interactive/Card.server.d.ts.map +1 -1
  136. package/dist/components/interactive/Card.server.js +72 -11
  137. package/dist/components/interactive/Card.server.js.map +1 -1
  138. package/dist/components/interactive/Divider.d.ts +1 -1
  139. package/dist/components/interactive/Divider.d.ts.map +1 -1
  140. package/dist/components/interactive/Divider.js +54 -26
  141. package/dist/components/interactive/Divider.js.map +1 -1
  142. package/dist/components/interactive/Divider.server.d.ts +1 -1
  143. package/dist/components/interactive/Divider.server.d.ts.map +1 -1
  144. package/dist/components/interactive/Divider.server.js +28 -12
  145. package/dist/components/interactive/Divider.server.js.map +1 -1
  146. package/dist/components/interactive/index.d.ts +4 -4
  147. package/dist/components/interactive/index.d.ts.map +1 -1
  148. package/dist/components/interactive/index.js +5 -5
  149. package/dist/components/interactive/index.js.map +1 -1
  150. package/dist/components/layout/Container.d.ts +1 -1
  151. package/dist/components/layout/Container.d.ts.map +1 -1
  152. package/dist/components/layout/Container.js +101 -47
  153. package/dist/components/layout/Container.js.map +1 -1
  154. package/dist/components/layout/Container.server.d.ts +1 -1
  155. package/dist/components/layout/Container.server.d.ts.map +1 -1
  156. package/dist/components/layout/Container.server.js +67 -19
  157. package/dist/components/layout/Container.server.js.map +1 -1
  158. package/dist/components/layout/Flex.d.ts +2 -2
  159. package/dist/components/layout/Flex.d.ts.map +1 -1
  160. package/dist/components/layout/Flex.js +124 -55
  161. package/dist/components/layout/Flex.js.map +1 -1
  162. package/dist/components/layout/Flex.server.d.ts +1 -1
  163. package/dist/components/layout/Flex.server.d.ts.map +1 -1
  164. package/dist/components/layout/Flex.server.js +50 -14
  165. package/dist/components/layout/Flex.server.js.map +1 -1
  166. package/dist/components/layout/Grid.d.ts +1 -1
  167. package/dist/components/layout/Grid.d.ts.map +1 -1
  168. package/dist/components/layout/Grid.js +93 -44
  169. package/dist/components/layout/Grid.js.map +1 -1
  170. package/dist/components/layout/Grid.server.d.ts +1 -1
  171. package/dist/components/layout/Grid.server.d.ts.map +1 -1
  172. package/dist/components/layout/Grid.server.js +56 -14
  173. package/dist/components/layout/Grid.server.js.map +1 -1
  174. package/dist/components/layout/Section.d.ts +1 -1
  175. package/dist/components/layout/Section.d.ts.map +1 -1
  176. package/dist/components/layout/Section.js +147 -64
  177. package/dist/components/layout/Section.js.map +1 -1
  178. package/dist/components/layout/Section.server.d.ts +1 -1
  179. package/dist/components/layout/Section.server.d.ts.map +1 -1
  180. package/dist/components/layout/Section.server.js +92 -28
  181. package/dist/components/layout/Section.server.js.map +1 -1
  182. package/dist/components/layout/Spacer.d.ts +1 -1
  183. package/dist/components/layout/Spacer.d.ts.map +1 -1
  184. package/dist/components/layout/Spacer.js +80 -30
  185. package/dist/components/layout/Spacer.js.map +1 -1
  186. package/dist/components/layout/Spacer.server.d.ts +1 -1
  187. package/dist/components/layout/Spacer.server.d.ts.map +1 -1
  188. package/dist/components/layout/Spacer.server.js +31 -9
  189. package/dist/components/layout/Spacer.server.js.map +1 -1
  190. package/dist/components/layout/Template.d.ts +1 -1
  191. package/dist/components/layout/Template.d.ts.map +1 -1
  192. package/dist/components/layout/Template.js +58 -30
  193. package/dist/components/layout/Template.js.map +1 -1
  194. package/dist/components/layout/Template.server.d.ts +1 -1
  195. package/dist/components/layout/Template.server.d.ts.map +1 -1
  196. package/dist/components/layout/Template.server.js +43 -11
  197. package/dist/components/layout/Template.server.js.map +1 -1
  198. package/dist/components/layout/index.d.ts +8 -8
  199. package/dist/components/layout/index.d.ts.map +1 -1
  200. package/dist/components/layout/index.js +8 -8
  201. package/dist/components/layout/index.js.map +1 -1
  202. package/dist/components/media/Image.d.ts +3 -3
  203. package/dist/components/media/Image.d.ts.map +1 -1
  204. package/dist/components/media/Image.js +122 -39
  205. package/dist/components/media/Image.js.map +1 -1
  206. package/dist/components/media/Image.server.d.ts +3 -3
  207. package/dist/components/media/Image.server.d.ts.map +1 -1
  208. package/dist/components/media/Image.server.js +76 -13
  209. package/dist/components/media/Image.server.js.map +1 -1
  210. package/dist/components/media/index.d.ts +1 -1
  211. package/dist/components/media/index.d.ts.map +1 -1
  212. package/dist/components/media/index.js +2 -2
  213. package/dist/components/media/index.js.map +1 -1
  214. package/dist/components/typography/Heading.d.ts +2 -2
  215. package/dist/components/typography/Heading.d.ts.map +1 -1
  216. package/dist/components/typography/Heading.js +45 -25
  217. package/dist/components/typography/Heading.js.map +1 -1
  218. package/dist/components/typography/Heading.server.d.ts +2 -2
  219. package/dist/components/typography/Heading.server.d.ts.map +1 -1
  220. package/dist/components/typography/Heading.server.js +16 -10
  221. package/dist/components/typography/Heading.server.js.map +1 -1
  222. package/dist/components/typography/RichText.editor.d.ts +1 -1
  223. package/dist/components/typography/RichText.editor.d.ts.map +1 -1
  224. package/dist/components/typography/RichText.editor.js +44 -19
  225. package/dist/components/typography/RichText.editor.js.map +1 -1
  226. package/dist/components/typography/RichText.server.d.ts +2 -2
  227. package/dist/components/typography/RichText.server.d.ts.map +1 -1
  228. package/dist/components/typography/RichText.server.js +33 -14
  229. package/dist/components/typography/RichText.server.js.map +1 -1
  230. package/dist/components/typography/Text.d.ts +2 -2
  231. package/dist/components/typography/Text.d.ts.map +1 -1
  232. package/dist/components/typography/Text.js +49 -23
  233. package/dist/components/typography/Text.js.map +1 -1
  234. package/dist/components/typography/Text.server.d.ts +2 -2
  235. package/dist/components/typography/Text.server.d.ts.map +1 -1
  236. package/dist/components/typography/Text.server.js +21 -8
  237. package/dist/components/typography/Text.server.js.map +1 -1
  238. package/dist/components/typography/index.d.ts +4 -4
  239. package/dist/components/typography/index.d.ts.map +1 -1
  240. package/dist/components/typography/index.js +5 -5
  241. package/dist/components/typography/index.js.map +1 -1
  242. package/dist/config/config.editor.d.ts +3 -3
  243. package/dist/config/config.editor.d.ts.map +1 -1
  244. package/dist/config/config.editor.js +119 -54
  245. package/dist/config/config.editor.js.map +1 -1
  246. package/dist/config/index.d.ts +4 -4
  247. package/dist/config/index.d.ts.map +1 -1
  248. package/dist/config/index.js +62 -35
  249. package/dist/config/index.js.map +1 -1
  250. package/dist/config/merge.d.ts +1 -1
  251. package/dist/config/merge.d.ts.map +1 -1
  252. package/dist/config/merge.js +23 -26
  253. package/dist/config/merge.js.map +1 -1
  254. package/dist/config/presets.d.ts +4 -4
  255. package/dist/config/presets.js +195 -75
  256. package/dist/config/presets.js.map +1 -1
  257. package/dist/config/types.js +6 -2
  258. package/dist/config/types.js.map +1 -1
  259. package/dist/editor/PuckEditor.d.ts +12 -4
  260. package/dist/editor/PuckEditor.d.ts.map +1 -1
  261. package/dist/editor/PuckEditor.js +168 -67
  262. package/dist/editor/PuckEditor.js.map +1 -1
  263. package/dist/editor/PuckEditorImpl.client.d.ts +4 -4
  264. package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
  265. package/dist/editor/PuckEditorImpl.client.js +304 -152
  266. package/dist/editor/PuckEditorImpl.client.js.map +1 -1
  267. package/dist/editor/components/DarkModeStyles.js +11 -12
  268. package/dist/editor/components/DarkModeStyles.js.map +1 -1
  269. package/dist/editor/components/HeaderActions.js +308 -64
  270. package/dist/editor/components/HeaderActions.js.map +1 -1
  271. package/dist/editor/components/IframeWrapper.d.ts +1 -1
  272. package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
  273. package/dist/editor/components/IframeWrapper.js +82 -58
  274. package/dist/editor/components/IframeWrapper.js.map +1 -1
  275. package/dist/editor/components/LoadingState.d.ts +1 -1
  276. package/dist/editor/components/LoadingState.d.ts.map +1 -1
  277. package/dist/editor/components/LoadingState.js +17 -3
  278. package/dist/editor/components/LoadingState.js.map +1 -1
  279. package/dist/editor/components/PreviewModal.js +234 -78
  280. package/dist/editor/components/PreviewModal.js.map +1 -1
  281. package/dist/editor/components/PreviewModeToggle.js +43 -15
  282. package/dist/editor/components/PreviewModeToggle.js.map +1 -1
  283. package/dist/editor/components/VersionHistory.js +219 -71
  284. package/dist/editor/components/VersionHistory.js.map +1 -1
  285. package/dist/editor/hooks/useDarkMode.js +36 -23
  286. package/dist/editor/hooks/useDarkMode.js.map +1 -1
  287. package/dist/editor/hooks/useUnsavedChanges.js +8 -8
  288. package/dist/editor/hooks/useUnsavedChanges.js.map +1 -1
  289. package/dist/editor/index.js +5 -6
  290. package/dist/editor/index.js.map +1 -1
  291. package/dist/editor/plugins/VersionHistoryPanel.js +236 -75
  292. package/dist/editor/plugins/VersionHistoryPanel.js.map +1 -1
  293. package/dist/editor/plugins/index.js +4 -4
  294. package/dist/editor/plugins/index.js.map +1 -1
  295. package/dist/editor/plugins/versionHistoryPlugin.js +10 -8
  296. package/dist/editor/plugins/versionHistoryPlugin.js.map +1 -1
  297. package/dist/editor/utils/detectPageTree.js +5 -5
  298. package/dist/editor/utils/detectPageTree.js.map +1 -1
  299. package/dist/editor/utils/index.js +1 -0
  300. package/dist/editor/utils/index.js.map +1 -1
  301. package/dist/editor/utils/injectPageTreeFields.js +13 -9
  302. package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
  303. package/dist/endpoints/ai.js +58 -34
  304. package/dist/endpoints/ai.js.map +1 -1
  305. package/dist/endpoints/context.js +86 -40
  306. package/dist/endpoints/context.js.map +1 -1
  307. package/dist/endpoints/index.js +153 -76
  308. package/dist/endpoints/index.js.map +1 -1
  309. package/dist/endpoints/postcss.d.js +5 -0
  310. package/dist/endpoints/postcss.d.js.map +1 -0
  311. package/dist/endpoints/prompts.js +81 -39
  312. package/dist/endpoints/prompts.js.map +1 -1
  313. package/dist/endpoints/styles.js +34 -36
  314. package/dist/endpoints/styles.js.map +1 -1
  315. package/dist/exports/client.js +2 -2
  316. package/dist/exports/client.js.map +1 -1
  317. package/dist/exports/rsc.js +2 -2
  318. package/dist/exports/rsc.js.map +1 -1
  319. package/dist/fields/AlignmentField.d.ts +1 -1
  320. package/dist/fields/AlignmentField.d.ts.map +1 -1
  321. package/dist/fields/AlignmentField.js +93 -30
  322. package/dist/fields/AlignmentField.js.map +1 -1
  323. package/dist/fields/AnimationField.d.ts +2 -2
  324. package/dist/fields/AnimationField.d.ts.map +1 -1
  325. package/dist/fields/AnimationField.js +558 -84
  326. package/dist/fields/AnimationField.js.map +1 -1
  327. package/dist/fields/BackgroundField.d.ts +2 -2
  328. package/dist/fields/BackgroundField.d.ts.map +1 -1
  329. package/dist/fields/BackgroundField.js +754 -120
  330. package/dist/fields/BackgroundField.js.map +1 -1
  331. package/dist/fields/BorderField.d.ts +2 -2
  332. package/dist/fields/BorderField.d.ts.map +1 -1
  333. package/dist/fields/BorderField.js +275 -73
  334. package/dist/fields/BorderField.js.map +1 -1
  335. package/dist/fields/ColorPickerField.d.ts +2 -2
  336. package/dist/fields/ColorPickerField.d.ts.map +1 -1
  337. package/dist/fields/ColorPickerField.js +210 -68
  338. package/dist/fields/ColorPickerField.js.map +1 -1
  339. package/dist/fields/ContentAlignmentField.d.ts +1 -1
  340. package/dist/fields/ContentAlignmentField.d.ts.map +1 -1
  341. package/dist/fields/ContentAlignmentField.js +161 -75
  342. package/dist/fields/ContentAlignmentField.js.map +1 -1
  343. package/dist/fields/DimensionsField.d.ts +2 -2
  344. package/dist/fields/DimensionsField.d.ts.map +1 -1
  345. package/dist/fields/DimensionsField.js +575 -146
  346. package/dist/fields/DimensionsField.js.map +1 -1
  347. package/dist/fields/FlexAlignmentField.d.ts +2 -2
  348. package/dist/fields/FlexAlignmentField.d.ts.map +1 -1
  349. package/dist/fields/FlexAlignmentField.js +189 -51
  350. package/dist/fields/FlexAlignmentField.js.map +1 -1
  351. package/dist/fields/FolderPickerField.d.ts +8 -1
  352. package/dist/fields/FolderPickerField.d.ts.map +1 -1
  353. package/dist/fields/FolderPickerField.js +288 -75
  354. package/dist/fields/FolderPickerField.js.map +1 -1
  355. package/dist/fields/GradientEditor.d.ts +2 -2
  356. package/dist/fields/GradientEditor.d.ts.map +1 -1
  357. package/dist/fields/GradientEditor.js +462 -86
  358. package/dist/fields/GradientEditor.js.map +1 -1
  359. package/dist/fields/LockedField.d.ts +15 -2
  360. package/dist/fields/LockedField.d.ts.map +1 -1
  361. package/dist/fields/LockedField.js +180 -49
  362. package/dist/fields/LockedField.js.map +1 -1
  363. package/dist/fields/MarginField.d.ts +2 -2
  364. package/dist/fields/MarginField.d.ts.map +1 -1
  365. package/dist/fields/MarginField.js +144 -46
  366. package/dist/fields/MarginField.js.map +1 -1
  367. package/dist/fields/MediaField.d.ts +1 -1
  368. package/dist/fields/MediaField.d.ts.map +1 -1
  369. package/dist/fields/MediaField.js +688 -186
  370. package/dist/fields/MediaField.js.map +1 -1
  371. package/dist/fields/PaddingField.d.ts +2 -2
  372. package/dist/fields/PaddingField.d.ts.map +1 -1
  373. package/dist/fields/PaddingField.js +144 -46
  374. package/dist/fields/PaddingField.js.map +1 -1
  375. package/dist/fields/PageSegmentField.d.ts +15 -2
  376. package/dist/fields/PageSegmentField.d.ts.map +1 -1
  377. package/dist/fields/PageSegmentField.js +156 -54
  378. package/dist/fields/PageSegmentField.js.map +1 -1
  379. package/dist/fields/ResetField.d.ts +1 -1
  380. package/dist/fields/ResetField.d.ts.map +1 -1
  381. package/dist/fields/ResetField.js +59 -31
  382. package/dist/fields/ResetField.js.map +1 -1
  383. package/dist/fields/ResponsiveField.d.ts +1 -1
  384. package/dist/fields/ResponsiveField.d.ts.map +1 -1
  385. package/dist/fields/ResponsiveField.js +233 -90
  386. package/dist/fields/ResponsiveField.js.map +1 -1
  387. package/dist/fields/ResponsiveVisibilityField.d.ts +2 -2
  388. package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -1
  389. package/dist/fields/ResponsiveVisibilityField.js +119 -36
  390. package/dist/fields/ResponsiveVisibilityField.js.map +1 -1
  391. package/dist/fields/SizeField.d.ts +3 -3
  392. package/dist/fields/SizeField.d.ts.map +1 -1
  393. package/dist/fields/SizeField.js +226 -52
  394. package/dist/fields/SizeField.js.map +1 -1
  395. package/dist/fields/SlugPreviewField.d.ts +8 -1
  396. package/dist/fields/SlugPreviewField.d.ts.map +1 -1
  397. package/dist/fields/SlugPreviewField.js +65 -16
  398. package/dist/fields/SlugPreviewField.js.map +1 -1
  399. package/dist/fields/TemplateField.d.ts +1 -1
  400. package/dist/fields/TemplateField.d.ts.map +1 -1
  401. package/dist/fields/TemplateField.js +362 -120
  402. package/dist/fields/TemplateField.js.map +1 -1
  403. package/dist/fields/TransformField.d.ts +2 -2
  404. package/dist/fields/TransformField.d.ts.map +1 -1
  405. package/dist/fields/TransformField.js +517 -81
  406. package/dist/fields/TransformField.js.map +1 -1
  407. package/dist/fields/VerticalAlignmentField.d.ts +1 -1
  408. package/dist/fields/VerticalAlignmentField.d.ts.map +1 -1
  409. package/dist/fields/VerticalAlignmentField.js +93 -30
  410. package/dist/fields/VerticalAlignmentField.js.map +1 -1
  411. package/dist/fields/WidthField.d.ts +2 -2
  412. package/dist/fields/WidthField.d.ts.map +1 -1
  413. package/dist/fields/WidthField.js +278 -81
  414. package/dist/fields/WidthField.js.map +1 -1
  415. package/dist/fields/index.d.ts +41 -41
  416. package/dist/fields/index.d.ts.map +1 -1
  417. package/dist/fields/index.js +37 -43
  418. package/dist/fields/index.js.map +1 -1
  419. package/dist/fields/richtext/controls/ColorPickerControl.d.ts +13 -2
  420. package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +1 -1
  421. package/dist/fields/richtext/controls/ColorPickerControl.js +212 -47
  422. package/dist/fields/richtext/controls/ColorPickerControl.js.map +1 -1
  423. package/dist/fields/richtext/controls/DropdownPortal.d.ts +2 -2
  424. package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +1 -1
  425. package/dist/fields/richtext/controls/DropdownPortal.js +36 -4
  426. package/dist/fields/richtext/controls/DropdownPortal.js.map +1 -1
  427. package/dist/fields/richtext/controls/FontSizeControl.d.ts +9 -1
  428. package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +1 -1
  429. package/dist/fields/richtext/controls/FontSizeControl.js +109 -24
  430. package/dist/fields/richtext/controls/FontSizeControl.js.map +1 -1
  431. package/dist/fields/richtext/controls/HighlightControl.d.ts +12 -1
  432. package/dist/fields/richtext/controls/HighlightControl.d.ts.map +1 -1
  433. package/dist/fields/richtext/controls/HighlightControl.js +54 -17
  434. package/dist/fields/richtext/controls/HighlightControl.js.map +1 -1
  435. package/dist/fields/richtext/controls/index.d.ts +5 -5
  436. package/dist/fields/richtext/controls/index.d.ts.map +1 -1
  437. package/dist/fields/richtext/controls/index.js +8 -11
  438. package/dist/fields/richtext/controls/index.js.map +1 -1
  439. package/dist/fields/richtext/controls/shared.js +108 -63
  440. package/dist/fields/richtext/controls/shared.js.map +1 -1
  441. package/dist/fields/richtext/createRichTextField.d.ts +18 -4
  442. package/dist/fields/richtext/createRichTextField.d.ts.map +1 -1
  443. package/dist/fields/richtext/createRichTextField.js +113 -26
  444. package/dist/fields/richtext/createRichTextField.js.map +1 -1
  445. package/dist/fields/richtext/extensions/FontSize.js +26 -20
  446. package/dist/fields/richtext/extensions/FontSize.js.map +1 -1
  447. package/dist/fields/richtext/extensions/index.d.ts +1 -1
  448. package/dist/fields/richtext/extensions/index.d.ts.map +1 -1
  449. package/dist/fields/richtext/extensions/index.js +2 -2
  450. package/dist/fields/richtext/extensions/index.js.map +1 -1
  451. package/dist/fields/richtext/index.d.ts +6 -6
  452. package/dist/fields/richtext/index.d.ts.map +1 -1
  453. package/dist/fields/richtext/index.js +8 -8
  454. package/dist/fields/richtext/index.js.map +1 -1
  455. package/dist/fields/shared.d.ts +1 -1
  456. package/dist/fields/shared.d.ts.map +1 -1
  457. package/dist/fields/shared.js +915 -478
  458. package/dist/fields/shared.js.map +1 -1
  459. package/dist/hooks/index.d.ts +2 -2
  460. package/dist/hooks/index.d.ts.map +1 -1
  461. package/dist/hooks/index.js +3 -3
  462. package/dist/hooks/index.js.map +1 -1
  463. package/dist/hooks/useResponsiveStyles.d.ts +1 -1
  464. package/dist/hooks/useResponsiveStyles.d.ts.map +1 -1
  465. package/dist/hooks/useResponsiveStyles.js +36 -32
  466. package/dist/hooks/useResponsiveStyles.js.map +1 -1
  467. package/dist/hooks/useScrollAnimation.js +26 -24
  468. package/dist/hooks/useScrollAnimation.js.map +1 -1
  469. package/dist/index.d.ts +4 -4
  470. package/dist/index.d.ts.map +1 -1
  471. package/dist/index.js +5 -5
  472. package/dist/index.js.map +1 -1
  473. package/dist/layouts/LayoutWrapper.d.ts +3 -3
  474. package/dist/layouts/LayoutWrapper.d.ts.map +1 -1
  475. package/dist/layouts/LayoutWrapper.js +115 -51
  476. package/dist/layouts/LayoutWrapper.js.map +1 -1
  477. package/dist/layouts/defaults.d.ts +1 -1
  478. package/dist/layouts/defaults.d.ts.map +1 -1
  479. package/dist/layouts/defaults.js +23 -31
  480. package/dist/layouts/defaults.js.map +1 -1
  481. package/dist/layouts/index.d.ts +4 -4
  482. package/dist/layouts/index.d.ts.map +1 -1
  483. package/dist/layouts/index.js +5 -4
  484. package/dist/layouts/index.js.map +1 -1
  485. package/dist/layouts/types.js +4 -2
  486. package/dist/layouts/types.js.map +1 -1
  487. package/dist/layouts/utils.d.ts +1 -1
  488. package/dist/layouts/utils.d.ts.map +1 -1
  489. package/dist/layouts/utils.js +32 -40
  490. package/dist/layouts/utils.js.map +1 -1
  491. package/dist/next/index.js +31 -34
  492. package/dist/next/index.js.map +1 -1
  493. package/dist/plugin/collections/Pages.d.ts +2 -2
  494. package/dist/plugin/collections/Pages.d.ts.map +1 -1
  495. package/dist/plugin/collections/Pages.js +46 -43
  496. package/dist/plugin/collections/Pages.js.map +1 -1
  497. package/dist/plugin/fields/index.d.ts +3 -3
  498. package/dist/plugin/fields/index.d.ts.map +1 -1
  499. package/dist/plugin/fields/index.js +100 -78
  500. package/dist/plugin/fields/index.js.map +1 -1
  501. package/dist/plugin/fields/types.d.ts +1 -1
  502. package/dist/plugin/fields/types.d.ts.map +1 -1
  503. package/dist/plugin/fields/types.js +26 -2
  504. package/dist/plugin/fields/types.js.map +1 -1
  505. package/dist/plugin/hooks/index.d.ts +1 -1
  506. package/dist/plugin/hooks/index.d.ts.map +1 -1
  507. package/dist/plugin/hooks/index.js +2 -2
  508. package/dist/plugin/hooks/index.js.map +1 -1
  509. package/dist/plugin/hooks/isHomepageUnique.js +28 -19
  510. package/dist/plugin/hooks/isHomepageUnique.js.map +1 -1
  511. package/dist/plugin/index.d.ts +8 -8
  512. package/dist/plugin/index.d.ts.map +1 -1
  513. package/dist/plugin/index.js +192 -188
  514. package/dist/plugin/index.js.map +1 -1
  515. package/dist/render/HybridPageRenderer.d.ts +2 -2
  516. package/dist/render/HybridPageRenderer.d.ts.map +1 -1
  517. package/dist/render/HybridPageRenderer.js +58 -10
  518. package/dist/render/HybridPageRenderer.js.map +1 -1
  519. package/dist/render/PageRenderer.d.ts +2 -2
  520. package/dist/render/PageRenderer.d.ts.map +1 -1
  521. package/dist/render/PageRenderer.js +31 -14
  522. package/dist/render/PageRenderer.js.map +1 -1
  523. package/dist/render/PuckEditor.client.d.ts +1 -1
  524. package/dist/render/PuckEditor.client.d.ts.map +1 -1
  525. package/dist/render/PuckEditor.client.js +33 -16
  526. package/dist/render/PuckEditor.client.js.map +1 -1
  527. package/dist/render/index.d.ts +5 -5
  528. package/dist/render/index.d.ts.map +1 -1
  529. package/dist/render/index.js +5 -6
  530. package/dist/render/index.js.map +1 -1
  531. package/dist/styles/puck-dark-mode.css +101 -0
  532. package/dist/theme/context.d.ts +2 -2
  533. package/dist/theme/context.d.ts.map +1 -1
  534. package/dist/theme/context.js +21 -18
  535. package/dist/theme/context.js.map +1 -1
  536. package/dist/theme/defaults.d.ts +1 -1
  537. package/dist/theme/defaults.d.ts.map +1 -1
  538. package/dist/theme/defaults.js +83 -37
  539. package/dist/theme/defaults.js.map +1 -1
  540. package/dist/theme/example.d.ts +1 -1
  541. package/dist/theme/example.d.ts.map +1 -1
  542. package/dist/theme/example.js +68 -30
  543. package/dist/theme/example.js.map +1 -1
  544. package/dist/theme/index.d.ts +5 -5
  545. package/dist/theme/index.d.ts.map +1 -1
  546. package/dist/theme/index.js +6 -5
  547. package/dist/theme/index.js.map +1 -1
  548. package/dist/theme/types.js +6 -2
  549. package/dist/theme/types.js.map +1 -1
  550. package/dist/theme/utils.d.ts +1 -1
  551. package/dist/theme/utils.d.ts.map +1 -1
  552. package/dist/theme/utils.js +24 -25
  553. package/dist/theme/utils.js.map +1 -1
  554. package/dist/types/index.d.ts +42 -6
  555. package/dist/types/index.d.ts.map +1 -1
  556. package/dist/types/index.js +3 -1
  557. package/dist/types/index.js.map +1 -1
  558. package/dist/utils/index.d.ts +2 -2
  559. package/dist/utils/index.d.ts.map +1 -1
  560. package/dist/utils/index.js +13 -22
  561. package/dist/utils/index.js.map +1 -1
  562. package/dist/utils/migration.d.ts +1 -1
  563. package/dist/utils/migration.d.ts.map +1 -1
  564. package/dist/utils/migration.js +43 -49
  565. package/dist/utils/migration.js.map +1 -1
  566. package/dist/utils/validation.d.ts +1 -1
  567. package/dist/utils/validation.d.ts.map +1 -1
  568. package/dist/utils/validation.js +36 -43
  569. package/dist/utils/validation.js.map +1 -1
  570. package/dist/version.d.ts +1 -1
  571. package/dist/version.js +2 -1
  572. package/dist/version.js.map +1 -1
  573. package/dist/views/PuckConfigContext.d.ts +1 -1
  574. package/dist/views/PuckConfigContext.d.ts.map +1 -1
  575. package/dist/views/PuckConfigContext.js +25 -10
  576. package/dist/views/PuckConfigContext.js.map +1 -1
  577. package/dist/views/PuckEditorView.d.ts +1 -1
  578. package/dist/views/PuckEditorView.d.ts.map +1 -1
  579. package/dist/views/PuckEditorView.js +137 -41
  580. package/dist/views/PuckEditorView.js.map +1 -1
  581. package/dist/views/index.js +2 -2
  582. package/dist/views/index.js.map +1 -1
  583. package/package.json +62 -42
@@ -1,6 +1,6 @@
1
1
  import { NextResponse } from 'next/server';
2
2
  import { getPayload } from 'payload';
3
- import { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps';
3
+ import { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps.js';
4
4
  /**
5
5
  * Create API route handlers for /api/puck/pages/[id]
6
6
  *
@@ -31,36 +31,48 @@ import { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps';
31
31
  * ],
32
32
  * })
33
33
  * ```
34
- */
35
- export function createPuckApiRoutesWithId(routeConfig) {
36
- const { collection = 'pages', payloadConfig, auth, rootPropsMapping, onError, } = routeConfig;
34
+ */ export function createPuckApiRoutesWithId(routeConfig) {
35
+ const { collection = 'pages', payloadConfig, auth, rootPropsMapping, onError } = routeConfig;
37
36
  /**
38
- * GET /api/puck/pages/[id]
39
- * Fetch a single page by ID
40
- */
41
- async function GET(request, context) {
37
+ * GET /api/puck/pages/[id]
38
+ * Fetch a single page by ID
39
+ */ async function GET(request, context) {
42
40
  try {
43
41
  // Get page ID from params
44
42
  const params = await context.params;
45
43
  const id = params.id;
46
44
  if (!id) {
47
- return NextResponse.json({ error: 'Page ID is required' }, { status: 400 });
45
+ return NextResponse.json({
46
+ error: 'Page ID is required'
47
+ }, {
48
+ status: 400
49
+ });
48
50
  }
49
51
  // Authenticate
50
52
  const authResult = await auth.authenticate(request);
51
53
  if (!authResult.authenticated || !authResult.user) {
52
- return NextResponse.json({ error: authResult.error || 'Unauthorized' }, { status: 401 });
54
+ return NextResponse.json({
55
+ error: authResult.error || 'Unauthorized'
56
+ }, {
57
+ status: 401
58
+ });
53
59
  }
54
60
  // Check view permission
55
61
  if (auth.canView) {
56
62
  const permission = await auth.canView(authResult.user, id);
57
63
  if (!permission.allowed) {
58
- return NextResponse.json({ error: permission.error || 'Forbidden' }, { status: 403 });
64
+ return NextResponse.json({
65
+ error: permission.error || 'Forbidden'
66
+ }, {
67
+ status: 403
68
+ });
59
69
  }
60
70
  }
61
71
  // Get Payload instance with provided config
62
72
  const config = await payloadConfig;
63
- const payload = await getPayload({ config });
73
+ const payload = await getPayload({
74
+ config
75
+ });
64
76
  // Check if caller wants draft or published version
65
77
  // Default to draft=true for editor use (load latest draft)
66
78
  const url = new URL(request.url);
@@ -68,57 +80,81 @@ export function createPuckApiRoutesWithId(routeConfig) {
68
80
  const page = await payload.findByID({
69
81
  collection,
70
82
  id,
71
- draft: wantsDraft, // Load draft version by default for editing
83
+ draft: wantsDraft
72
84
  });
73
85
  if (!page) {
74
- return NextResponse.json({ error: 'Page not found' }, { status: 404 });
86
+ return NextResponse.json({
87
+ error: 'Page not found'
88
+ }, {
89
+ status: 404
90
+ });
75
91
  }
76
- return NextResponse.json({ doc: page });
77
- }
78
- catch (error) {
92
+ return NextResponse.json({
93
+ doc: page
94
+ });
95
+ } catch (error) {
79
96
  const params = await context.params;
80
97
  if (onError) {
81
- onError(error, { operation: 'read', request, pageId: params.id });
98
+ onError(error, {
99
+ operation: 'read',
100
+ request,
101
+ pageId: params.id
102
+ });
82
103
  }
83
104
  console.error('Error fetching page:', error);
84
- return NextResponse.json({ error: 'Failed to fetch page' }, { status: 500 });
105
+ return NextResponse.json({
106
+ error: 'Failed to fetch page'
107
+ }, {
108
+ status: 500
109
+ });
85
110
  }
86
111
  }
87
112
  /**
88
- * PATCH /api/puck/pages/[id]
89
- * Update a page with Puck data
90
- *
91
- * Request Body:
92
- * - puckData?: PuckData - Full Puck editor data
93
- * - title?: string - Override title (also synced from root.props)
94
- * - slug?: string - Override slug (also synced from root.props)
95
- * - status?: 'draft' | 'published' - Publishing status
96
- *
97
- * Root props from puckData are automatically synced to Payload fields
98
- * based on the configured mappings.
99
- */
100
- async function PATCH(request, context) {
113
+ * PATCH /api/puck/pages/[id]
114
+ * Update a page with Puck data
115
+ *
116
+ * Request Body:
117
+ * - puckData?: PuckData - Full Puck editor data
118
+ * - title?: string - Override title (also synced from root.props)
119
+ * - slug?: string - Override slug (also synced from root.props)
120
+ * - status?: 'draft' | 'published' - Publishing status
121
+ *
122
+ * Root props from puckData are automatically synced to Payload fields
123
+ * based on the configured mappings.
124
+ */ async function PATCH(request, context) {
101
125
  try {
102
126
  // Get page ID from params
103
127
  const params = await context.params;
104
128
  const id = params.id;
105
129
  if (!id) {
106
- return NextResponse.json({ error: 'Page ID is required' }, { status: 400 });
130
+ return NextResponse.json({
131
+ error: 'Page ID is required'
132
+ }, {
133
+ status: 400
134
+ });
107
135
  }
108
136
  // Authenticate
109
137
  const authResult = await auth.authenticate(request);
110
138
  if (!authResult.authenticated || !authResult.user) {
111
- return NextResponse.json({ error: authResult.error || 'Unauthorized' }, { status: 401 });
139
+ return NextResponse.json({
140
+ error: authResult.error || 'Unauthorized'
141
+ }, {
142
+ status: 401
143
+ });
112
144
  }
113
145
  // Check edit permission
114
146
  if (auth.canEdit) {
115
147
  const permission = await auth.canEdit(authResult.user, id);
116
148
  if (!permission.allowed) {
117
- return NextResponse.json({ error: permission.error || 'Forbidden' }, { status: 403 });
149
+ return NextResponse.json({
150
+ error: permission.error || 'Forbidden'
151
+ }, {
152
+ status: 403
153
+ });
118
154
  }
119
155
  }
120
156
  // Parse request body
121
- const body = (await request.json());
157
+ const body = await request.json();
122
158
  const { puckData, title, slug, status, draft, isHomepage, swapHomepage, folder, pageSegment } = body;
123
159
  // Check publish permission only if explicitly publishing
124
160
  if (status === 'published') {
@@ -126,13 +162,19 @@ export function createPuckApiRoutesWithId(routeConfig) {
126
162
  if (canPublish) {
127
163
  const permission = await canPublish(authResult.user, id);
128
164
  if (!permission.allowed) {
129
- return NextResponse.json({ error: permission.error || 'Not authorized to publish pages' }, { status: 403 });
165
+ return NextResponse.json({
166
+ error: permission.error || 'Not authorized to publish pages'
167
+ }, {
168
+ status: 403
169
+ });
130
170
  }
131
171
  }
132
172
  }
133
173
  // Get Payload instance with provided config
134
174
  const config = await payloadConfig;
135
- const payload = await getPayload({ config });
175
+ const payload = await getPayload({
176
+ config
177
+ });
136
178
  // Handle homepage swap - if swapHomepage is true and isHomepage is being set,
137
179
  // unset the existing homepage first
138
180
  if (swapHomepage && isHomepage === true) {
@@ -140,20 +182,32 @@ export function createPuckApiRoutesWithId(routeConfig) {
140
182
  collection,
141
183
  where: {
142
184
  and: [
143
- { isHomepage: { equals: true } },
144
- { id: { not_equals: id } },
145
- ],
185
+ {
186
+ isHomepage: {
187
+ equals: true
188
+ }
189
+ },
190
+ {
191
+ id: {
192
+ not_equals: id
193
+ }
194
+ }
195
+ ]
146
196
  },
147
197
  limit: 1,
148
- depth: 0,
198
+ depth: 0
149
199
  });
150
200
  if (existingHomepage.docs.length > 0) {
151
201
  await payload.update({
152
202
  collection,
153
203
  id: existingHomepage.docs[0].id,
154
- data: { isHomepage: false },
204
+ data: {
205
+ isHomepage: false
206
+ },
155
207
  // Pass context to skip the uniqueness hook on this update
156
- context: { skipIsHomepageHook: true },
208
+ context: {
209
+ skipIsHomepageHook: true
210
+ }
157
211
  });
158
212
  }
159
213
  }
@@ -161,7 +215,7 @@ export function createPuckApiRoutesWithId(routeConfig) {
161
215
  const rootProps = puckData?.root?.props || {};
162
216
  // Build update data starting with editorVersion
163
217
  const updateData = {
164
- editorVersion: 'puck',
218
+ editorVersion: 'puck'
165
219
  };
166
220
  // Add puckData if provided
167
221
  if (puckData) {
@@ -200,7 +254,7 @@ export function createPuckApiRoutesWithId(routeConfig) {
200
254
  const updateOptions = {
201
255
  collection,
202
256
  id,
203
- data: updateData,
257
+ data: updateData
204
258
  };
205
259
  // Only pass draft: true when explicitly saving as draft (not publishing)
206
260
  // When publishing (_status: 'published'), we omit the draft option entirely
@@ -209,12 +263,17 @@ export function createPuckApiRoutesWithId(routeConfig) {
209
263
  updateOptions.draft = true;
210
264
  }
211
265
  const updatedPage = await payload.update(updateOptions);
212
- return NextResponse.json({ doc: updatedPage });
213
- }
214
- catch (error) {
266
+ return NextResponse.json({
267
+ doc: updatedPage
268
+ });
269
+ } catch (error) {
215
270
  const params = await context.params;
216
271
  if (onError) {
217
- onError(error, { operation: 'update', request, pageId: params.id });
272
+ onError(error, {
273
+ operation: 'update',
274
+ request,
275
+ pageId: params.id
276
+ });
218
277
  }
219
278
  console.error('Error updating page:', error);
220
279
  // Handle Payload validation errors gracefully
@@ -222,65 +281,100 @@ export function createPuckApiRoutesWithId(routeConfig) {
222
281
  const validationError = error;
223
282
  const fieldErrors = validationError.data?.errors || [];
224
283
  // Check for common validation issues and provide friendly messages
225
- const slugError = fieldErrors.find((e) => e.field === 'slug');
284
+ const slugError = fieldErrors.find((e)=>e.field === 'slug');
226
285
  if (slugError) {
227
286
  return NextResponse.json({
228
287
  error: 'A page with this slug already exists. Please choose a different slug.',
229
288
  field: 'slug',
230
- details: fieldErrors,
231
- }, { status: 400 });
289
+ details: fieldErrors
290
+ }, {
291
+ status: 400
292
+ });
232
293
  }
233
294
  // Generic validation error
234
295
  return NextResponse.json({
235
- error: `Validation failed: ${fieldErrors.map((e) => e.message || e.field).join(', ')}`,
236
- details: fieldErrors,
237
- }, { status: 400 });
296
+ error: `Validation failed: ${fieldErrors.map((e)=>e.message || e.field).join(', ')}`,
297
+ details: fieldErrors
298
+ }, {
299
+ status: 400
300
+ });
238
301
  }
239
- return NextResponse.json({ error: 'Failed to update page' }, { status: 500 });
302
+ return NextResponse.json({
303
+ error: 'Failed to update page'
304
+ }, {
305
+ status: 500
306
+ });
240
307
  }
241
308
  }
242
309
  /**
243
- * DELETE /api/puck/pages/[id]
244
- * Delete a page by ID
245
- */
246
- async function DELETE(request, context) {
310
+ * DELETE /api/puck/pages/[id]
311
+ * Delete a page by ID
312
+ */ async function DELETE(request, context) {
247
313
  try {
248
314
  // Get page ID from params
249
315
  const params = await context.params;
250
316
  const id = params.id;
251
317
  if (!id) {
252
- return NextResponse.json({ error: 'Page ID is required' }, { status: 400 });
318
+ return NextResponse.json({
319
+ error: 'Page ID is required'
320
+ }, {
321
+ status: 400
322
+ });
253
323
  }
254
324
  // Authenticate
255
325
  const authResult = await auth.authenticate(request);
256
326
  if (!authResult.authenticated || !authResult.user) {
257
- return NextResponse.json({ error: authResult.error || 'Unauthorized' }, { status: 401 });
327
+ return NextResponse.json({
328
+ error: authResult.error || 'Unauthorized'
329
+ }, {
330
+ status: 401
331
+ });
258
332
  }
259
333
  // Check delete permission
260
334
  if (auth.canDelete) {
261
335
  const permission = await auth.canDelete(authResult.user, id);
262
336
  if (!permission.allowed) {
263
- return NextResponse.json({ error: permission.error || 'Forbidden' }, { status: 403 });
337
+ return NextResponse.json({
338
+ error: permission.error || 'Forbidden'
339
+ }, {
340
+ status: 403
341
+ });
264
342
  }
265
343
  }
266
344
  // Get Payload instance with provided config
267
345
  const config = await payloadConfig;
268
- const payload = await getPayload({ config });
346
+ const payload = await getPayload({
347
+ config
348
+ });
269
349
  await payload.delete({
270
350
  collection,
271
- id,
351
+ id
272
352
  });
273
- return NextResponse.json({ success: true });
274
- }
275
- catch (error) {
353
+ return NextResponse.json({
354
+ success: true
355
+ });
356
+ } catch (error) {
276
357
  const params = await context.params;
277
358
  if (onError) {
278
- onError(error, { operation: 'delete', request, pageId: params.id });
359
+ onError(error, {
360
+ operation: 'delete',
361
+ request,
362
+ pageId: params.id
363
+ });
279
364
  }
280
365
  console.error('Error deleting page:', error);
281
- return NextResponse.json({ error: 'Failed to delete page' }, { status: 500 });
366
+ return NextResponse.json({
367
+ error: 'Failed to delete page'
368
+ }, {
369
+ status: 500
370
+ });
282
371
  }
283
372
  }
284
- return { GET, PATCH, DELETE };
373
+ return {
374
+ GET,
375
+ PATCH,
376
+ DELETE
377
+ };
285
378
  }
379
+
286
380
  //# sourceMappingURL=createPuckApiRoutesWithId.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createPuckApiRoutesWithId.js","sourceRoot":"","sources":["../../src/api/createPuckApiRoutesWithId.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/api/createPuckApiRoutesWithId.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type {\n PuckApiRoutesConfig,\n PuckApiRouteWithIdHandlers,\n UpdatePageBody,\n RouteHandlerWithIdContext,\n} from './types.js'\nimport { mapRootPropsToPayloadFields, deepMerge } from './utils/mapRootProps.js'\n\n/**\n * Create API route handlers for /api/puck/pages/[id]\n *\n * Provides GET (fetch page), PATCH (update page), and DELETE (delete page)\n * handlers with configurable authentication and authorization.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/[id]/route.ts\n * import { createPuckApiRoutesWithId } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, PATCH, DELETE } = createPuckApiRoutesWithId({\n * collection: 'pages',\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await getSession(request)\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * canPublish: async (user) => {\n * return { allowed: user.role === 'admin' }\n * },\n * },\n * rootPropsMapping: [\n * { from: 'customField', to: 'customPayloadField' },\n * ],\n * })\n * ```\n */\nexport function createPuckApiRoutesWithId(\n routeConfig: PuckApiRoutesConfig\n): PuckApiRouteWithIdHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n rootPropsMapping,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages/[id]\n * Fetch a single page by ID\n */\n async function GET(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check view permission\n if (auth.canView) {\n const permission = await auth.canView(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Check if caller wants draft or published version\n // Default to draft=true for editor use (load latest draft)\n const url = new URL(request.url)\n const wantsDraft = url.searchParams.get('draft') !== 'false'\n\n const page = await payload.findByID({\n collection,\n id,\n draft: wantsDraft, // Load draft version by default for editing\n })\n\n if (!page) {\n return NextResponse.json({ error: 'Page not found' }, { status: 404 })\n }\n\n return NextResponse.json({ doc: page })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'read', request, pageId: params.id })\n }\n console.error('Error fetching page:', error)\n return NextResponse.json(\n { error: 'Failed to fetch page' },\n { status: 500 }\n )\n }\n }\n\n /**\n * PATCH /api/puck/pages/[id]\n * Update a page with Puck data\n *\n * Request Body:\n * - puckData?: PuckData - Full Puck editor data\n * - title?: string - Override title (also synced from root.props)\n * - slug?: string - Override slug (also synced from root.props)\n * - status?: 'draft' | 'published' - Publishing status\n *\n * Root props from puckData are automatically synced to Payload fields\n * based on the configured mappings.\n */\n async function PATCH(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check edit permission\n if (auth.canEdit) {\n const permission = await auth.canEdit(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse request body\n const body = (await request.json()) as UpdatePageBody\n const { puckData, title, slug, status, draft, isHomepage, swapHomepage, folder, pageSegment } = body\n\n // Check publish permission only if explicitly publishing\n if (status === 'published') {\n const canPublish = auth.canPublish || auth.canEdit\n if (canPublish) {\n const permission = await canPublish(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Not authorized to publish pages' },\n { status: 403 }\n )\n }\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Handle homepage swap - if swapHomepage is true and isHomepage is being set,\n // unset the existing homepage first\n if (swapHomepage && isHomepage === true) {\n const existingHomepage = await payload.find({\n collection,\n where: {\n and: [\n { isHomepage: { equals: true } },\n { id: { not_equals: id } },\n ],\n },\n limit: 1,\n depth: 0,\n })\n\n if (existingHomepage.docs.length > 0) {\n await payload.update({\n collection,\n id: existingHomepage.docs[0].id as string,\n data: { isHomepage: false },\n // Pass context to skip the uniqueness hook on this update\n context: { skipIsHomepageHook: true },\n })\n }\n }\n\n // Extract root props from puckData for syncing to Payload fields\n const rootProps =\n (puckData?.root as { props?: Record<string, unknown> })?.props || {}\n\n // Build update data starting with editorVersion\n const updateData: Record<string, unknown> = {\n editorVersion: 'puck',\n }\n\n // Add puckData if provided\n if (puckData) {\n updateData.puckData = puckData\n }\n\n // Map root.props to Payload fields\n const mappedFields = mapRootPropsToPayloadFields(rootProps, rootPropsMapping)\n\n // Merge mapped fields into update data (deep merge for nested objects)\n deepMerge(updateData, mappedFields)\n\n // Explicit title/slug override the mapped values\n if (title !== undefined) {\n updateData.title = title\n }\n if (slug !== undefined) {\n updateData.slug = slug\n }\n\n // Homepage flag: explicit isHomepage overrides the mapped value\n if (isHomepage !== undefined) {\n updateData.isHomepage = isHomepage\n }\n\n // Page-tree integration: explicit folder/pageSegment override the mapped values\n if (folder !== undefined) {\n updateData.folder = folder\n }\n if (pageSegment !== undefined) {\n updateData.pageSegment = pageSegment\n }\n\n // Set status if provided (for explicit publish)\n if (status) {\n updateData._status = status\n }\n\n // Call payload.update with draft parameter for Payload's versions.drafts system\n // When _status is set to 'published', the document is published regardless of draft param\n // When draft=true and no _status set, saves without publishing\n // When draft=false or omitted, updates the main collection\n const updateOptions: {\n collection: string\n id: string\n data: Record<string, unknown>\n draft?: boolean\n } = {\n collection,\n id,\n data: updateData,\n }\n\n // Only pass draft: true when explicitly saving as draft (not publishing)\n // When publishing (_status: 'published'), we omit the draft option entirely\n // to let Payload handle it correctly\n if (draft === true && status !== 'published') {\n updateOptions.draft = true\n }\n\n const updatedPage = await payload.update(updateOptions)\n\n return NextResponse.json({ doc: updatedPage })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'update', request, pageId: params.id })\n }\n console.error('Error updating page:', error)\n\n // Handle Payload validation errors gracefully\n if (error instanceof Error && error.name === 'ValidationError') {\n const validationError = error as Error & {\n data?: { errors?: Array<{ field: string; message: string }> }\n }\n const fieldErrors = validationError.data?.errors || []\n\n // Check for common validation issues and provide friendly messages\n const slugError = fieldErrors.find((e) => e.field === 'slug')\n if (slugError) {\n return NextResponse.json(\n {\n error: 'A page with this slug already exists. Please choose a different slug.',\n field: 'slug',\n details: fieldErrors,\n },\n { status: 400 }\n )\n }\n\n // Generic validation error\n return NextResponse.json(\n {\n error: `Validation failed: ${fieldErrors.map((e) => e.message || e.field).join(', ')}`,\n details: fieldErrors,\n },\n { status: 400 }\n )\n }\n\n return NextResponse.json(\n { error: 'Failed to update page' },\n { status: 500 }\n )\n }\n }\n\n /**\n * DELETE /api/puck/pages/[id]\n * Delete a page by ID\n */\n async function DELETE(\n request: NextRequest,\n context: RouteHandlerWithIdContext\n ): Promise<Response> {\n try {\n // Get page ID from params\n const params = await context.params\n const id = params.id\n\n if (!id) {\n return NextResponse.json(\n { error: 'Page ID is required' },\n { status: 400 }\n )\n }\n\n // Authenticate\n const authResult = await auth.authenticate(request)\n if (!authResult.authenticated || !authResult.user) {\n return NextResponse.json(\n { error: authResult.error || 'Unauthorized' },\n { status: 401 }\n )\n }\n\n // Check delete permission\n if (auth.canDelete) {\n const permission = await auth.canDelete(authResult.user, id)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n await payload.delete({\n collection,\n id,\n })\n\n return NextResponse.json({ success: true })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'delete', request, pageId: params.id })\n }\n console.error('Error deleting page:', error)\n return NextResponse.json(\n { error: 'Failed to delete page' },\n { status: 500 }\n )\n }\n }\n\n return { GET, PATCH, DELETE }\n}\n"],"names":["NextResponse","getPayload","mapRootPropsToPayloadFields","deepMerge","createPuckApiRoutesWithId","routeConfig","collection","payloadConfig","auth","rootPropsMapping","onError","GET","request","context","params","id","json","error","status","authResult","authenticate","authenticated","user","canView","permission","allowed","config","payload","url","URL","wantsDraft","searchParams","get","page","findByID","draft","doc","operation","pageId","console","PATCH","canEdit","body","puckData","title","slug","isHomepage","swapHomepage","folder","pageSegment","canPublish","existingHomepage","find","where","and","equals","not_equals","limit","depth","docs","length","update","data","skipIsHomepageHook","rootProps","root","props","updateData","editorVersion","mappedFields","undefined","_status","updateOptions","updatedPage","Error","name","validationError","fieldErrors","errors","slugError","e","field","details","map","message","join","DELETE","canDelete","delete","success"],"mappings":"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"}
@@ -32,9 +32,9 @@
32
32
  * })
33
33
  * ```
34
34
  */
35
- export { createPuckApiRoutes } from './createPuckApiRoutes';
36
- export { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId';
37
- export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions';
38
- export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge, } from './utils/mapRootProps';
39
- export type { AuthenticatedUser, AuthResult, PermissionResult, PuckApiAuthHooks, RootPropsMapping, PuckApiRoutesConfig, ErrorContext, RouteHandler, RouteHandlerWithId, RouteHandlerContext, RouteHandlerWithIdContext, PuckApiRouteHandlers, PuckApiRouteWithIdHandlers, CreatePageBody, UpdatePageBody, ApiResponse, PageVersion, PuckApiVersionsRouteHandlers, } from './types';
35
+ export { createPuckApiRoutes } from './createPuckApiRoutes.js';
36
+ export { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId.js';
37
+ export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions.js';
38
+ export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge, } from './utils/mapRootProps.js';
39
+ export type { AuthenticatedUser, AuthResult, PermissionResult, PuckApiAuthHooks, RootPropsMapping, PuckApiRoutesConfig, ErrorContext, RouteHandler, RouteHandlerWithId, RouteHandlerContext, RouteHandlerWithIdContext, PuckApiRouteHandlers, PuckApiRouteWithIdHandlers, CreatePageBody, UpdatePageBody, ApiResponse, PageVersion, PuckApiVersionsRouteHandlers, } from './types.js';
40
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAG3E,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAA;AAG7B,YAAY,EAEV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAGhB,gBAAgB,EAGhB,mBAAmB,EACnB,YAAY,EAGZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAG1B,cAAc,EACd,cAAc,EACd,WAAW,EAGX,WAAW,EACX,4BAA4B,GAC7B,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAG9E,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,GACV,MAAM,yBAAyB,CAAA;AAGhC,YAAY,EAEV,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAGhB,gBAAgB,EAGhB,mBAAmB,EACnB,YAAY,EAGZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAG1B,cAAc,EACd,cAAc,EACd,WAAW,EAGX,WAAW,EACX,4BAA4B,GAC7B,MAAM,YAAY,CAAA"}
package/dist/api/index.js CHANGED
@@ -31,11 +31,11 @@
31
31
  * },
32
32
  * })
33
33
  * ```
34
- */
35
- // Route factories
36
- export { createPuckApiRoutes } from './createPuckApiRoutes';
37
- export { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId';
38
- export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions';
34
+ */ // Route factories
35
+ export { createPuckApiRoutes } from './createPuckApiRoutes.js';
36
+ export { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId.js';
37
+ export { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions.js';
39
38
  // Utilities
40
- export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge, } from './utils/mapRootProps';
39
+ export { mapRootPropsToPayloadFields, mapPayloadFieldsToRootProps, DEFAULT_ROOT_PROPS_MAPPINGS, setNestedValue, getNestedValue, mergeMappings, deepMerge } from './utils/mapRootProps.js';
40
+
41
41
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,kBAAkB;AAClB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAE3E,YAAY;AACZ,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,2BAA2B,EAC3B,cAAc,EACd,cAAc,EACd,aAAa,EACb,SAAS,GACV,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"sources":["../../src/api/index.ts"],"sourcesContent":["/**\n * Puck API Routes\n *\n * Factory functions for creating Next.js App Router API route handlers\n * that integrate with PayloadCMS for Puck visual editor data management.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/route.ts\n * import { createPuckApiRoutes } from '@delmaredigital/payload-puck/api'\n *\n * export const { GET, POST } = createPuckApiRoutes({\n * auth: {\n * authenticate: async (request) => {\n * // Your auth implementation\n * },\n * },\n * })\n * ```\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/[id]/route.ts\n * import { createPuckApiRoutesWithId } from '@delmaredigital/payload-puck/api'\n *\n * export const { GET, PATCH, DELETE } = createPuckApiRoutesWithId({\n * auth: {\n * authenticate: async (request) => {\n * // Your auth implementation\n * },\n * },\n * })\n * ```\n */\n\n// Route factories\nexport { createPuckApiRoutes } from './createPuckApiRoutes.js'\nexport { createPuckApiRoutesWithId } from './createPuckApiRoutesWithId.js'\nexport { createPuckApiRoutesVersions } from './createPuckApiRoutesVersions.js'\n\n// Utilities\nexport {\n mapRootPropsToPayloadFields,\n mapPayloadFieldsToRootProps,\n DEFAULT_ROOT_PROPS_MAPPINGS,\n setNestedValue,\n getNestedValue,\n mergeMappings,\n deepMerge,\n} from './utils/mapRootProps.js'\n\n// Types\nexport type {\n // Auth types\n AuthenticatedUser,\n AuthResult,\n PermissionResult,\n PuckApiAuthHooks,\n\n // Mapping types\n RootPropsMapping,\n\n // Config types\n PuckApiRoutesConfig,\n ErrorContext,\n\n // Handler types\n RouteHandler,\n RouteHandlerWithId,\n RouteHandlerContext,\n RouteHandlerWithIdContext,\n PuckApiRouteHandlers,\n PuckApiRouteWithIdHandlers,\n\n // Request/Response types\n CreatePageBody,\n UpdatePageBody,\n ApiResponse,\n\n // Version types\n PageVersion,\n PuckApiVersionsRouteHandlers,\n} from './types.js'\n"],"names":["createPuckApiRoutes","createPuckApiRoutesWithId","createPuckApiRoutesVersions","mapRootPropsToPayloadFields","mapPayloadFieldsToRootProps","DEFAULT_ROOT_PROPS_MAPPINGS","setNestedValue","getNestedValue","mergeMappings","deepMerge"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCC,GAED,kBAAkB;AAClB,SAASA,mBAAmB,QAAQ,2BAA0B;AAC9D,SAASC,yBAAyB,QAAQ,iCAAgC;AAC1E,SAASC,2BAA2B,QAAQ,mCAAkC;AAE9E,YAAY;AACZ,SACEC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,cAAc,EACdC,cAAc,EACdC,aAAa,EACbC,SAAS,QACJ,0BAAyB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Ambient type declaration for @payload-config
3
+ *
4
+ * This module is provided by the consuming project and resolves to their Payload config.
5
+ * The consuming project should have this alias configured in their tsconfig.json:
6
+ *
7
+ * {
8
+ * "compilerOptions": {
9
+ * "paths": {
10
+ * "@payload-config": ["./src/payload.config.ts"]
11
+ * }
12
+ * }
13
+ * }
14
+ */
15
+ //# sourceMappingURL=payload-config.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/payload-config.d.ts"],"sourcesContent":["/**\n * Ambient type declaration for @payload-config\n *\n * This module is provided by the consuming project and resolves to their Payload config.\n * The consuming project should have this alias configured in their tsconfig.json:\n *\n * {\n * \"compilerOptions\": {\n * \"paths\": {\n * \"@payload-config\": [\"./src/payload.config.ts\"]\n * }\n * }\n * }\n */\ndeclare module '@payload-config' {\n import type { SanitizedConfig } from 'payload'\n\n const config: Promise<SanitizedConfig>\n export default config\n}\n"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;CAaC,GACD"}
package/dist/api/types.js CHANGED
@@ -1,2 +1,5 @@
1
- export {};
1
+ /**
2
+ * Route handlers returned by createPuckApiRoutesVersions
3
+ */ export { };
4
+
2
5
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"sources":["../../src/api/types.ts"],"sourcesContent":["import type { NextRequest } from 'next/server'\nimport type { Data as PuckData } from '@puckeditor/core'\n\n// =============================================================================\n// Authentication Types\n// =============================================================================\n\n/**\n * Authenticated user from the auth system\n */\nexport interface AuthenticatedUser {\n id: string\n [key: string]: unknown\n}\n\n/**\n * Result of an authentication check\n */\nexport interface AuthResult {\n authenticated: boolean\n user?: AuthenticatedUser\n error?: string\n}\n\n/**\n * Result of a permission check\n */\nexport interface PermissionResult {\n allowed: boolean\n error?: string\n}\n\n// =============================================================================\n// Auth Hooks Interface\n// =============================================================================\n\n/**\n * Authentication and authorization hooks for Puck API routes\n *\n * These hooks allow you to integrate with any authentication system\n * (Better Auth, NextAuth, Payload auth, custom JWT, etc.)\n *\n * @example\n * ```typescript\n * // Example with Better Auth\n * const authHooks: PuckApiAuthHooks = {\n * authenticate: async (request) => {\n * const session = await auth.api.getSession({ headers: await headers() })\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * canEdit: async (user, pageId) => {\n * return { allowed: hasRole(user, 'editor') }\n * },\n * }\n * ```\n */\nexport interface PuckApiAuthHooks {\n /**\n * Authenticate the incoming request\n * Should return the authenticated user or authentication failure\n */\n authenticate: (request: NextRequest) => Promise<AuthResult>\n\n /**\n * Check if user can list pages\n * @default Always allowed for authenticated users\n */\n canList?: (\n user: AuthenticatedUser\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can view a specific page\n * @default Always allowed for authenticated users\n */\n canView?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can create new pages\n * @default Always allowed for authenticated users\n */\n canCreate?: (\n user: AuthenticatedUser\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can edit a specific page\n * @default Always allowed for authenticated users\n */\n canEdit?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can publish a specific page (change status to published)\n * @default Same as canEdit\n */\n canPublish?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n\n /**\n * Check if user can delete a specific page\n * @default Always allowed for authenticated users\n */\n canDelete?: (\n user: AuthenticatedUser,\n pageId: string\n ) => Promise<PermissionResult> | PermissionResult\n}\n\n// =============================================================================\n// Root Props Mapping Types\n// =============================================================================\n\n/**\n * Mapping configuration for syncing Puck root.props to Payload fields\n *\n * @example\n * ```typescript\n * // Simple mapping\n * { from: 'pageLayout', to: 'pageLayout' }\n *\n * // Nested field mapping (uses official @payloadcms/plugin-seo convention)\n * { from: 'title', to: 'meta.title' }\n *\n * // With transformation\n * {\n * from: 'publishDate',\n * to: 'publishedAt',\n * transform: (value) => value ? new Date(value as string).toISOString() : null\n * }\n * ```\n */\nexport interface RootPropsMapping {\n /**\n * Property name in Puck root.props\n */\n from: string\n\n /**\n * Field path in Payload document (supports dot notation for nested fields)\n */\n to: string\n\n /**\n * Optional transformation function\n */\n transform?: (value: unknown) => unknown\n}\n\n// =============================================================================\n// API Routes Configuration\n// =============================================================================\n\n/**\n * Error context passed to onError callback\n */\nexport interface ErrorContext {\n operation: string\n request: NextRequest\n pageId?: string\n}\n\n/**\n * Configuration for Puck API routes\n *\n * @example\n * ```typescript\n * const config: PuckApiRoutesConfig = {\n * collection: 'pages',\n * auth: {\n * authenticate: async (request) => {\n * // Your auth logic here\n * },\n * canPublish: async (user) => {\n * return { allowed: user.role === 'admin' }\n * },\n * },\n * rootPropsMapping: [\n * { from: 'title', to: 'meta.title' },\n * { from: 'description', to: 'meta.description' },\n * ],\n * enableDrafts: true,\n * }\n * ```\n */\nexport interface PuckApiRoutesConfig {\n /**\n * Payload collection slug for pages\n * @default 'pages'\n */\n collection?: string\n\n /**\n * Payload configuration - import from @payload-config\n * Required for Turbopack/Next.js 16+ compatibility\n *\n * @example\n * ```typescript\n * import config from '@payload-config'\n *\n * createPuckApiRoutesWithId({\n * payloadConfig: config,\n * // ...\n * })\n * ```\n */\n payloadConfig: Promise<import('payload').SanitizedConfig>\n\n /**\n * Authentication and authorization hooks\n */\n auth: PuckApiAuthHooks\n\n /**\n * Custom mappings from Puck root.props to Payload fields\n * These are merged with the default mappings\n */\n rootPropsMapping?: RootPropsMapping[]\n\n /**\n * Default Puck data for new pages\n */\n defaultPuckData?: PuckData\n\n /**\n * Enable draft mode for page creation/updates\n * @default true\n */\n enableDrafts?: boolean\n\n /**\n * Custom error handler for logging/monitoring\n */\n onError?: (error: unknown, context: ErrorContext) => void\n}\n\n// =============================================================================\n// Route Handler Types\n// =============================================================================\n\n/**\n * Context passed to Next.js App Router route handlers\n */\nexport interface RouteHandlerContext {\n params: Promise<Record<string, string>>\n}\n\n/**\n * Context for route handlers that require an id parameter\n */\nexport interface RouteHandlerWithIdContext {\n params: Promise<{ id: string }>\n}\n\n/**\n * Next.js App Router route handler type\n */\nexport type RouteHandler = (\n request: NextRequest,\n context: RouteHandlerContext\n) => Promise<Response>\n\n/**\n * Next.js App Router route handler type for [id] routes\n */\nexport type RouteHandlerWithId = (\n request: NextRequest,\n context: RouteHandlerWithIdContext\n) => Promise<Response>\n\n/**\n * Route handlers returned by createPuckApiRoutes\n */\nexport interface PuckApiRouteHandlers {\n GET: RouteHandler\n POST: RouteHandler\n}\n\n/**\n * Route handlers returned by createPuckApiRoutesWithId\n */\nexport interface PuckApiRouteWithIdHandlers {\n GET: RouteHandlerWithId\n PATCH: RouteHandlerWithId\n DELETE: RouteHandlerWithId\n}\n\n// =============================================================================\n// Request/Response Types\n// =============================================================================\n\n/**\n * Request body for creating a new page\n */\nexport interface CreatePageBody {\n title: string\n slug: string\n puckData?: PuckData\n status?: 'draft' | 'published'\n}\n\n/**\n * Request body for updating a page\n */\nexport interface UpdatePageBody {\n puckData?: PuckData\n title?: string\n slug?: string\n status?: 'draft' | 'published'\n /**\n * When true, save as draft without publishing.\n * Used by Payload's versions.drafts system.\n */\n draft?: boolean\n /**\n * Mark this page as the homepage.\n * Consumers should check this flag first, then fall back to slug convention.\n */\n isHomepage?: boolean\n /**\n * When true and isHomepage is true, automatically unsets the existing homepage.\n * Used when the user confirms they want to swap homepages.\n */\n swapHomepage?: boolean\n /**\n * Folder ID for page-tree integration.\n * When page-tree plugin is active, this determines the page's parent folder.\n */\n folder?: string | null\n /**\n * Page segment for page-tree integration.\n * Combined with folder path to generate the full slug.\n */\n pageSegment?: string\n}\n\n/**\n * Standard API response wrapper\n */\nexport interface ApiResponse<T = unknown> {\n doc?: T\n docs?: T[]\n error?: string\n success?: boolean\n totalDocs?: number\n totalPages?: number\n page?: number\n limit?: number\n hasPrevPage?: boolean\n hasNextPage?: boolean\n}\n\n// =============================================================================\n// Version Types\n// =============================================================================\n\n/**\n * A version entry from Payload's versions system\n */\nexport interface PageVersion {\n id: string\n parent: string\n version: {\n title?: string\n slug?: string\n puckData?: PuckData\n _status?: 'draft' | 'published'\n updatedAt: string\n createdAt: string\n }\n createdAt: string\n updatedAt: string\n autosave?: boolean\n latest?: boolean\n}\n\n/**\n * Route handlers returned by createPuckApiRoutesVersions\n */\nexport interface PuckApiVersionsRouteHandlers {\n GET: RouteHandlerWithId\n POST: RouteHandlerWithId\n}\n"],"names":[],"mappings":"AAgYA;;CAEC,GACD,WAGC"}
@@ -1,4 +1,4 @@
1
- import type { RootPropsMapping } from '../types';
1
+ import type { RootPropsMapping } from '../types.js';
2
2
  /**
3
3
  * Default mappings from Puck root.props to Payload fields
4
4
  *
@@ -1 +1 @@
1
- {"version":3,"file":"mapRootProps.d.ts","sourceRoot":"","sources":["../../../src/api/utils/mapRootProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,EAAE,gBAAgB,EAuBzD,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,IAAI,CAcN;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAeT;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,gBAAgB,EAAE,CAmBpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
1
+ {"version":3,"file":"mapRootProps.d.ts","sourceRoot":"","sources":["../../../src/api/utils/mapRootProps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,EAAE,gBAAgB,EAuBzD,CAAA;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,IAAI,CAcN;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAeT;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,gBAAgB,EAAE,CAmBpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyBzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,cAAc,CAAC,EAAE,gBAAgB,EAAE,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}