@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
@@ -3,15 +3,13 @@
3
3
  *
4
4
  * This utility converts legacy Payload CMS page block structures to the
5
5
  * Puck visual editor format, enabling seamless migration of existing content.
6
- */
7
- // =============================================================================
6
+ */ // =============================================================================
8
7
  // Block Type Mapping
9
8
  // =============================================================================
10
9
  /**
11
10
  * Maps legacy Payload block types (camelCase) to Puck component types (PascalCase).
12
11
  * Extend this map to support additional custom block types.
13
- */
14
- export const blockTypeMap = {
12
+ */ export const blockTypeMap = {
15
13
  heroBlock: 'Hero',
16
14
  richTextBlock: 'RichText',
17
15
  containerBlock: 'Container',
@@ -25,7 +23,7 @@ export const blockTypeMap = {
25
23
  buttonBlock: 'Button',
26
24
  cardBlock: 'Card',
27
25
  dividerBlock: 'Divider',
28
- accordionBlock: 'Accordion',
26
+ accordionBlock: 'Accordion'
29
27
  };
30
28
  // =============================================================================
31
29
  // ID Generation
@@ -33,8 +31,7 @@ export const blockTypeMap = {
33
31
  /**
34
32
  * Generates a unique ID for Puck content items.
35
33
  * Uses a format compatible with Puck's internal ID scheme.
36
- */
37
- export function generatePuckId(legacyId) {
34
+ */ export function generatePuckId(legacyId) {
38
35
  if (legacyId) {
39
36
  return legacyId;
40
37
  }
@@ -47,14 +44,15 @@ export function generatePuckId(legacyId) {
47
44
  /**
48
45
  * Transforms a Payload media reference (ID or Media object) to Puck MediaReference format.
49
46
  * Handles both ID-only references and full Media objects.
50
- */
51
- export function transformMediaReference(media) {
47
+ */ export function transformMediaReference(media) {
52
48
  if (media === null || media === undefined) {
53
49
  return null;
54
50
  }
55
51
  if (typeof media === 'number' || typeof media === 'string') {
56
52
  // Just an ID reference - Puck will need to fetch the full media
57
- return { id: media };
53
+ return {
54
+ id: media
55
+ };
58
56
  }
59
57
  // Full media object
60
58
  return {
@@ -62,14 +60,13 @@ export function transformMediaReference(media) {
62
60
  url: media.url,
63
61
  alt: media.alt,
64
62
  width: media.width,
65
- height: media.height,
63
+ height: media.height
66
64
  };
67
65
  }
68
66
  /**
69
67
  * Transforms Lexical rich text content to a serialized string format.
70
68
  * Puck stores rich text as JSON strings for the custom editors.
71
- */
72
- export function transformRichText(richText) {
69
+ */ export function transformRichText(richText) {
73
70
  if (!richText) {
74
71
  return undefined;
75
72
  }
@@ -81,8 +78,7 @@ export function transformRichText(richText) {
81
78
  if (typeof richText === 'object') {
82
79
  try {
83
80
  return JSON.stringify(richText);
84
- }
85
- catch {
81
+ } catch {
86
82
  console.warn('[payload-puck] Failed to serialize rich text content');
87
83
  return undefined;
88
84
  }
@@ -91,19 +87,22 @@ export function transformRichText(richText) {
91
87
  }
92
88
  /**
93
89
  * Transforms an array of relationships to Puck format.
94
- */
95
- export function transformRelationshipArray(relations) {
90
+ */ export function transformRelationshipArray(relations) {
96
91
  if (!relations || !Array.isArray(relations)) {
97
92
  return undefined;
98
93
  }
99
- return relations.map((rel) => {
94
+ return relations.map((rel)=>{
100
95
  if (typeof rel === 'number' || typeof rel === 'string') {
101
- return { id: rel, title: '' }; // Title will need to be fetched
96
+ return {
97
+ id: rel,
98
+ title: ''
99
+ } // Title will need to be fetched
100
+ ;
102
101
  }
103
102
  return {
104
103
  id: rel.id,
105
104
  title: rel.title || '',
106
- slug: rel.slug,
105
+ slug: rel.slug
107
106
  };
108
107
  });
109
108
  }
@@ -112,8 +111,7 @@ export function transformRelationshipArray(relations) {
112
111
  // =============================================================================
113
112
  /**
114
113
  * Known rich text field names in legacy blocks
115
- */
116
- const RICH_TEXT_FIELDS = [
114
+ */ const RICH_TEXT_FIELDS = [
117
115
  'headingRich',
118
116
  'subheadingRich',
119
117
  'textRich',
@@ -121,12 +119,11 @@ const RICH_TEXT_FIELDS = [
121
119
  'leftContent',
122
120
  'rightContent',
123
121
  'bodyContent',
124
- 'description',
122
+ 'description'
125
123
  ];
126
124
  /**
127
125
  * Known media field names in legacy blocks
128
- */
129
- const MEDIA_FIELDS = [
126
+ */ const MEDIA_FIELDS = [
130
127
  'backgroundImage',
131
128
  'image',
132
129
  'rightImage',
@@ -134,22 +131,21 @@ const MEDIA_FIELDS = [
134
131
  'profileImage',
135
132
  'media',
136
133
  'thumbnail',
137
- 'icon',
134
+ 'icon'
138
135
  ];
139
136
  /**
140
137
  * Transform props for a specific block type.
141
138
  * Handles any block-specific transformations needed.
142
- */
143
- export function transformBlockProps(block, options) {
139
+ */ export function transformBlockProps(block, options) {
144
140
  const { blockType, id, blockName, ...restProps } = block;
145
141
  const richTextFields = options?.richTextFields || RICH_TEXT_FIELDS;
146
142
  const mediaFields = options?.mediaFields || MEDIA_FIELDS;
147
143
  const customTransformers = options?.customTransformers || {};
148
144
  const props = {
149
- id: generatePuckId(id),
145
+ id: generatePuckId(id)
150
146
  };
151
147
  // Process each prop based on known patterns
152
- for (const [key, value] of Object.entries(restProps)) {
148
+ for (const [key, value] of Object.entries(restProps)){
153
149
  // Check for custom transformer first
154
150
  if (customTransformers[key]) {
155
151
  props[key] = customTransformers[key](value);
@@ -167,12 +163,12 @@ export function transformBlockProps(block, options) {
167
163
  }
168
164
  // Array fields that need ID generation for items
169
165
  if (Array.isArray(value)) {
170
- props[key] = value.map((item) => {
166
+ props[key] = value.map((item)=>{
171
167
  if (typeof item === 'object' && item !== null) {
172
168
  const { id: itemId, ...itemRest } = item;
173
169
  return {
174
170
  ...itemRest,
175
- id: itemId || generatePuckId(),
171
+ id: itemId || generatePuckId()
176
172
  };
177
173
  }
178
174
  return item;
@@ -207,23 +203,22 @@ export function transformBlockProps(block, options) {
207
203
  * data: { puckData },
208
204
  * })
209
205
  * ```
210
- */
211
- export function migrateLegacyToPuck(page, options = {}) {
212
- const { blockTypeMap: customBlockTypeMap, richTextFields, mediaFields, customTransformers, skipUnknownBlocks = true, onUnknownBlock, } = options;
206
+ */ export function migrateLegacyToPuck(page, options = {}) {
207
+ const { blockTypeMap: customBlockTypeMap, richTextFields, mediaFields, customTransformers, skipUnknownBlocks = true, onUnknownBlock } = options;
213
208
  // Merge custom block type map with defaults
214
209
  const effectiveBlockTypeMap = {
215
210
  ...blockTypeMap,
216
- ...customBlockTypeMap,
211
+ ...customBlockTypeMap
217
212
  };
218
213
  // Build root props
219
214
  const rootProps = {
220
215
  title: page.title,
221
- pageLayout: page.pageLayout || 'default',
216
+ pageLayout: page.pageLayout || 'default'
222
217
  };
223
218
  // Convert layout blocks to Puck content items
224
219
  const content = [];
225
220
  if (page.layout && Array.isArray(page.layout)) {
226
- for (const block of page.layout) {
221
+ for (const block of page.layout){
227
222
  const legacyBlock = block;
228
223
  // Get the Puck component type from the legacy block type
229
224
  const puckType = effectiveBlockTypeMap[legacyBlock.blockType];
@@ -246,12 +241,12 @@ export function migrateLegacyToPuck(page, options = {}) {
246
241
  const transformedProps = transformBlockProps(legacyBlock, {
247
242
  richTextFields,
248
243
  mediaFields,
249
- customTransformers,
244
+ customTransformers
250
245
  });
251
246
  // Create the Puck content item
252
247
  const contentItem = {
253
248
  type: puckType,
254
- props: transformedProps,
249
+ props: transformedProps
255
250
  };
256
251
  content.push(contentItem);
257
252
  }
@@ -259,10 +254,10 @@ export function migrateLegacyToPuck(page, options = {}) {
259
254
  // Build the complete Puck data structure
260
255
  const puckData = {
261
256
  root: {
262
- props: rootProps,
257
+ props: rootProps
263
258
  },
264
259
  content,
265
- zones: {},
260
+ zones: {}
266
261
  };
267
262
  return puckData;
268
263
  }
@@ -273,23 +268,21 @@ export function migrateLegacyToPuck(page, options = {}) {
273
268
  * @param page - The legacy page to preview
274
269
  * @param customBlockTypeMap - Optional custom block type mapping
275
270
  * @returns Preview information about the migration
276
- */
277
- export function getMigrationPreview(page, customBlockTypeMap) {
271
+ */ export function getMigrationPreview(page, customBlockTypeMap) {
278
272
  const warnings = [];
279
273
  const blockTypes = [];
280
274
  const unmappedBlockTypes = [];
281
275
  const effectiveBlockTypeMap = {
282
276
  ...blockTypeMap,
283
- ...customBlockTypeMap,
277
+ ...customBlockTypeMap
284
278
  };
285
279
  if (page.layout && Array.isArray(page.layout)) {
286
- for (const block of page.layout) {
280
+ for (const block of page.layout){
287
281
  const legacyBlock = block;
288
282
  const puckType = effectiveBlockTypeMap[legacyBlock.blockType];
289
283
  if (puckType) {
290
284
  blockTypes.push(puckType);
291
- }
292
- else {
285
+ } else {
293
286
  warnings.push(`Unknown block type: ${legacyBlock.blockType}`);
294
287
  if (!unmappedBlockTypes.includes(legacyBlock.blockType)) {
295
288
  unmappedBlockTypes.push(legacyBlock.blockType);
@@ -303,7 +296,8 @@ export function getMigrationPreview(page, customBlockTypeMap) {
303
296
  blockCount: page.layout?.length || 0,
304
297
  blockTypes,
305
298
  warnings,
306
- unmappedBlockTypes,
299
+ unmappedBlockTypes
307
300
  };
308
301
  }
302
+
309
303
  //# sourceMappingURL=migration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/utils/migration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/migration.ts"],"sourcesContent":["/**\n * Migration Utility for Converting Legacy Payload CMS Pages to Puck Format\n *\n * This utility converts legacy Payload CMS page block structures to the\n * Puck visual editor format, enabling seamless migration of existing content.\n */\n\nimport type { PuckPageData, PuckRootProps, MediaObject } from '../types/index.js'\n\n// =============================================================================\n// Type Definitions\n// =============================================================================\n\n/**\n * Legacy block from Payload CMS pages.\n * Each block has a blockType discriminator and various props.\n */\nexport interface LegacyBlock {\n blockType: string\n id?: string | null\n blockName?: string | null\n [key: string]: unknown\n}\n\n/**\n * Subset of Page type used for migration.\n * Only includes fields relevant to content migration.\n */\nexport interface LegacyPage {\n title: string\n slug: string\n pageLayout?: string\n layout?: LegacyBlock[] | null\n [key: string]: unknown\n}\n\n/**\n * Media reference in Puck format\n */\nexport interface MediaReference {\n id: string | number\n url?: string\n alt?: string\n width?: number\n height?: number\n}\n\n/**\n * Puck content item structure\n */\nexport interface PuckContentItem {\n type: string\n props: { id: string; [key: string]: unknown }\n}\n\n// =============================================================================\n// Block Type Mapping\n// =============================================================================\n\n/**\n * Maps legacy Payload block types (camelCase) to Puck component types (PascalCase).\n * Extend this map to support additional custom block types.\n */\nexport const blockTypeMap: Record<string, string> = {\n heroBlock: 'Hero',\n richTextBlock: 'RichText',\n containerBlock: 'Container',\n flexBlock: 'Flex',\n gridBlock: 'Grid',\n sectionBlock: 'Section',\n spacerBlock: 'Spacer',\n headingBlock: 'Heading',\n textBlock: 'Text',\n imageBlock: 'Image',\n buttonBlock: 'Button',\n cardBlock: 'Card',\n dividerBlock: 'Divider',\n accordionBlock: 'Accordion',\n}\n\n// =============================================================================\n// ID Generation\n// =============================================================================\n\n/**\n * Generates a unique ID for Puck content items.\n * Uses a format compatible with Puck's internal ID scheme.\n */\nexport function generatePuckId(legacyId?: string | null): string {\n if (legacyId) {\n return legacyId\n }\n // Generate a random ID similar to Puck's format\n return `puck-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`\n}\n\n// =============================================================================\n// Prop Transformation Utilities\n// =============================================================================\n\n/**\n * Transforms a Payload media reference (ID or Media object) to Puck MediaReference format.\n * Handles both ID-only references and full Media objects.\n */\nexport function transformMediaReference(\n media:\n | string\n | number\n | { id: string | number; url?: string; alt?: string; width?: number; height?: number }\n | MediaObject\n | null\n | undefined\n): MediaReference | null {\n if (media === null || media === undefined) {\n return null\n }\n\n if (typeof media === 'number' || typeof media === 'string') {\n // Just an ID reference - Puck will need to fetch the full media\n return { id: media }\n }\n\n // Full media object\n return {\n id: media.id,\n url: media.url,\n alt: media.alt,\n width: media.width,\n height: media.height,\n }\n}\n\n/**\n * Transforms Lexical rich text content to a serialized string format.\n * Puck stores rich text as JSON strings for the custom editors.\n */\nexport function transformRichText(richText: unknown): string | undefined {\n if (!richText) {\n return undefined\n }\n\n // If it's already a string, return as-is\n if (typeof richText === 'string') {\n return richText\n }\n\n // If it's an object (Lexical format), serialize it\n if (typeof richText === 'object') {\n try {\n return JSON.stringify(richText)\n } catch {\n console.warn('[payload-puck] Failed to serialize rich text content')\n return undefined\n }\n }\n\n return undefined\n}\n\n/**\n * Transforms an array of relationships to Puck format.\n */\nexport function transformRelationshipArray<\n T extends { id: string | number; title?: string; slug?: string },\n>(\n relations: (string | number | T)[] | null | undefined\n): Array<{ id: string | number; title: string; slug?: string }> | undefined {\n if (!relations || !Array.isArray(relations)) {\n return undefined\n }\n\n return relations.map((rel) => {\n if (typeof rel === 'number' || typeof rel === 'string') {\n return { id: rel, title: '' } // Title will need to be fetched\n }\n return {\n id: rel.id,\n title: rel.title || '',\n slug: rel.slug,\n }\n })\n}\n\n// =============================================================================\n// Block Prop Transformation\n// =============================================================================\n\n/**\n * Known rich text field names in legacy blocks\n */\nconst RICH_TEXT_FIELDS = [\n 'headingRich',\n 'subheadingRich',\n 'textRich',\n 'content',\n 'leftContent',\n 'rightContent',\n 'bodyContent',\n 'description',\n]\n\n/**\n * Known media field names in legacy blocks\n */\nconst MEDIA_FIELDS = [\n 'backgroundImage',\n 'image',\n 'rightImage',\n 'leftImage',\n 'profileImage',\n 'media',\n 'thumbnail',\n 'icon',\n]\n\n/**\n * Transform props for a specific block type.\n * Handles any block-specific transformations needed.\n */\nexport function transformBlockProps(\n block: LegacyBlock,\n options?: {\n richTextFields?: string[]\n mediaFields?: string[]\n customTransformers?: Record<string, (value: unknown) => unknown>\n }\n): Record<string, unknown> {\n const { blockType, id, blockName, ...restProps } = block\n const richTextFields = options?.richTextFields || RICH_TEXT_FIELDS\n const mediaFields = options?.mediaFields || MEDIA_FIELDS\n const customTransformers = options?.customTransformers || {}\n\n const props: Record<string, unknown> = {\n id: generatePuckId(id),\n }\n\n // Process each prop based on known patterns\n for (const [key, value] of Object.entries(restProps)) {\n // Check for custom transformer first\n if (customTransformers[key]) {\n props[key] = customTransformers[key](value)\n continue\n }\n\n // Rich text fields - serialize Lexical content\n if (richTextFields.includes(key)) {\n props[key] = transformRichText(value)\n continue\n }\n\n // Media fields - transform to MediaReference\n if (mediaFields.includes(key)) {\n props[key] = transformMediaReference(\n value as\n | string\n | number\n | { id: string | number; url?: string; alt?: string }\n | null\n )\n continue\n }\n\n // Array fields that need ID generation for items\n if (Array.isArray(value)) {\n props[key] = value.map((item) => {\n if (typeof item === 'object' && item !== null) {\n const { id: itemId, ...itemRest } = item as {\n id?: string\n [k: string]: unknown\n }\n return {\n ...itemRest,\n id: itemId || generatePuckId(),\n }\n }\n return item\n })\n continue\n }\n\n // Default: pass through as-is\n props[key] = value\n }\n\n return props\n}\n\n// =============================================================================\n// Main Migration Function\n// =============================================================================\n\n/**\n * Options for the migration function\n */\nexport interface MigrateLegacyOptions {\n /**\n * Custom block type mapping to extend or override defaults\n */\n blockTypeMap?: Record<string, string>\n\n /**\n * Additional rich text field names to transform\n */\n richTextFields?: string[]\n\n /**\n * Additional media field names to transform\n */\n mediaFields?: string[]\n\n /**\n * Custom prop transformers for specific field names\n */\n customTransformers?: Record<string, (value: unknown) => unknown>\n\n /**\n * Whether to skip unknown block types (default: true)\n * If false, unknown blocks will throw an error\n */\n skipUnknownBlocks?: boolean\n\n /**\n * Callback for handling unknown block types\n */\n onUnknownBlock?: (block: LegacyBlock) => PuckContentItem | null\n}\n\n/**\n * Migrates a legacy Payload CMS page to Puck format.\n *\n * This function:\n * 1. Extracts root props (title, pageLayout, etc.)\n * 2. Converts each block in the layout array to a Puck content item\n * 3. Maps block types from camelCase to PascalCase using blockTypeMap\n * 4. Transforms block props appropriately\n *\n * @param page - The legacy Page object from Payload CMS\n * @param options - Migration options\n * @returns PuckPageData ready for use with the Puck editor\n *\n * @example\n * ```ts\n * const legacyPage = await payload.findByID({ collection: 'pages', id: pageId })\n * const puckData = migrateLegacyToPuck(legacyPage)\n * await payload.update({\n * collection: 'pages',\n * id: pageId,\n * data: { puckData },\n * })\n * ```\n */\nexport function migrateLegacyToPuck(\n page: LegacyPage,\n options: MigrateLegacyOptions = {}\n): PuckPageData {\n const {\n blockTypeMap: customBlockTypeMap,\n richTextFields,\n mediaFields,\n customTransformers,\n skipUnknownBlocks = true,\n onUnknownBlock,\n } = options\n\n // Merge custom block type map with defaults\n const effectiveBlockTypeMap = {\n ...blockTypeMap,\n ...customBlockTypeMap,\n }\n\n // Build root props\n const rootProps: PuckRootProps = {\n title: page.title,\n pageLayout: page.pageLayout || 'default',\n }\n\n // Convert layout blocks to Puck content items\n const content: PuckContentItem[] = []\n\n if (page.layout && Array.isArray(page.layout)) {\n for (const block of page.layout) {\n const legacyBlock = block as LegacyBlock\n\n // Get the Puck component type from the legacy block type\n const puckType = effectiveBlockTypeMap[legacyBlock.blockType]\n\n if (!puckType) {\n // Handle unknown block type\n if (onUnknownBlock) {\n const customItem = onUnknownBlock(legacyBlock)\n if (customItem) {\n content.push(customItem)\n }\n continue\n }\n\n if (skipUnknownBlocks) {\n console.warn(\n `[payload-puck] Unknown block type \"${legacyBlock.blockType}\" - skipping during migration`\n )\n continue\n }\n\n throw new Error(\n `Unknown block type \"${legacyBlock.blockType}\" encountered during migration`\n )\n }\n\n // Transform the block props\n const transformedProps = transformBlockProps(legacyBlock, {\n richTextFields,\n mediaFields,\n customTransformers,\n })\n\n // Create the Puck content item\n const contentItem: PuckContentItem = {\n type: puckType,\n props: transformedProps as { id: string; [key: string]: unknown },\n }\n\n content.push(contentItem)\n }\n }\n\n // Build the complete Puck data structure\n const puckData: PuckPageData = {\n root: {\n props: rootProps,\n },\n content,\n zones: {},\n }\n\n return puckData\n}\n\n// =============================================================================\n// Migration Preview\n// =============================================================================\n\n/**\n * Migration preview result\n */\nexport interface MigrationPreview {\n title: string\n slug: string\n blockCount: number\n blockTypes: string[]\n warnings: string[]\n unmappedBlockTypes: string[]\n}\n\n/**\n * Gets a summary of a legacy page for migration preview.\n * Useful for showing users what will be migrated before committing.\n *\n * @param page - The legacy page to preview\n * @param customBlockTypeMap - Optional custom block type mapping\n * @returns Preview information about the migration\n */\nexport function getMigrationPreview(\n page: LegacyPage,\n customBlockTypeMap?: Record<string, string>\n): MigrationPreview {\n const warnings: string[] = []\n const blockTypes: string[] = []\n const unmappedBlockTypes: string[] = []\n\n const effectiveBlockTypeMap = {\n ...blockTypeMap,\n ...customBlockTypeMap,\n }\n\n if (page.layout && Array.isArray(page.layout)) {\n for (const block of page.layout) {\n const legacyBlock = block as LegacyBlock\n const puckType = effectiveBlockTypeMap[legacyBlock.blockType]\n\n if (puckType) {\n blockTypes.push(puckType)\n } else {\n warnings.push(`Unknown block type: ${legacyBlock.blockType}`)\n if (!unmappedBlockTypes.includes(legacyBlock.blockType)) {\n unmappedBlockTypes.push(legacyBlock.blockType)\n }\n }\n }\n }\n\n return {\n title: page.title,\n slug: page.slug,\n blockCount: page.layout?.length || 0,\n blockTypes,\n warnings,\n unmappedBlockTypes,\n }\n}\n"],"names":["blockTypeMap","heroBlock","richTextBlock","containerBlock","flexBlock","gridBlock","sectionBlock","spacerBlock","headingBlock","textBlock","imageBlock","buttonBlock","cardBlock","dividerBlock","accordionBlock","generatePuckId","legacyId","Date","now","Math","random","toString","substring","transformMediaReference","media","undefined","id","url","alt","width","height","transformRichText","richText","JSON","stringify","console","warn","transformRelationshipArray","relations","Array","isArray","map","rel","title","slug","RICH_TEXT_FIELDS","MEDIA_FIELDS","transformBlockProps","block","options","blockType","blockName","restProps","richTextFields","mediaFields","customTransformers","props","key","value","Object","entries","includes","item","itemId","itemRest","migrateLegacyToPuck","page","customBlockTypeMap","skipUnknownBlocks","onUnknownBlock","effectiveBlockTypeMap","rootProps","pageLayout","content","layout","legacyBlock","puckType","customItem","push","Error","transformedProps","contentItem","type","puckData","root","zones","getMigrationPreview","warnings","blockTypes","unmappedBlockTypes","blockCount","length"],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Provides validation functions for ensuring Puck data structures are well-formed.
5
5
  */
6
- import type { PuckPageData, PuckRootProps } from '../types';
6
+ import type { PuckPageData, PuckRootProps } from '../types/index.js';
7
7
  /**
8
8
  * Result of a validation operation
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAM3D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE5B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAEhC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,YAAY,CA0C9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAKtE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CA0JlB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,iBAAiB,GAC1B,YAAY,CAUd;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,GAAG;IAAE,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,CAuB5C"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAMpE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAE5B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAEhC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;CAC/B;AAMD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,YAAY,CA0C9D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAKtE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,iBAAsB,GAC9B,gBAAgB,CA0JlB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,iBAAiB,GAC1B,YAAY,CAUd;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,GAAG;IAAE,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,CAuB5C"}
@@ -2,15 +2,13 @@
2
2
  * Puck Data Validation Utilities
3
3
  *
4
4
  * Provides validation functions for ensuring Puck data structures are well-formed.
5
- */
6
- // =============================================================================
5
+ */ // =============================================================================
7
6
  // Type Guards
8
7
  // =============================================================================
9
8
  /**
10
9
  * Type guard to check if a value is a valid PuckPageData structure.
11
10
  * Performs basic structural validation.
12
- */
13
- export function isPuckData(data) {
11
+ */ export function isPuckData(data) {
14
12
  if (!data || typeof data !== 'object') {
15
13
  return false;
16
14
  }
@@ -28,7 +26,7 @@ export function isPuckData(data) {
28
26
  return false;
29
27
  }
30
28
  // Validate each content item has required fields
31
- for (const item of obj.content) {
29
+ for (const item of obj.content){
32
30
  if (!item || typeof item !== 'object') {
33
31
  return false;
34
32
  }
@@ -48,8 +46,7 @@ export function isPuckData(data) {
48
46
  }
49
47
  /**
50
48
  * Type guard for PuckRootProps
51
- */
52
- export function isPuckRootProps(props) {
49
+ */ export function isPuckRootProps(props) {
53
50
  if (!props || typeof props !== 'object') {
54
51
  return false;
55
52
  }
@@ -73,15 +70,20 @@ export function isPuckRootProps(props) {
73
70
  * console.error('Validation errors:', result.errors)
74
71
  * }
75
72
  * ```
76
- */
77
- export function validatePuckData(data, options = {}) {
78
- const { requireContentIds = true, validateRoot = true, requiredRootProps = ['title'], allowedComponentTypes, strictComponentTypes = false, } = options;
73
+ */ export function validatePuckData(data, options = {}) {
74
+ const { requireContentIds = true, validateRoot = true, requiredRootProps = [
75
+ 'title'
76
+ ], allowedComponentTypes, strictComponentTypes = false } = options;
79
77
  const errors = [];
80
78
  const warnings = [];
81
79
  // Basic type check
82
80
  if (!data || typeof data !== 'object') {
83
81
  errors.push('Data must be a non-null object');
84
- return { valid: false, errors, warnings };
82
+ return {
83
+ valid: false,
84
+ errors,
85
+ warnings
86
+ };
85
87
  }
86
88
  const obj = data;
87
89
  // ==========================================================================
@@ -89,16 +91,14 @@ export function validatePuckData(data, options = {}) {
89
91
  // ==========================================================================
90
92
  if (!obj.root || typeof obj.root !== 'object') {
91
93
  errors.push('Missing or invalid root object');
92
- }
93
- else if (validateRoot) {
94
+ } else if (validateRoot) {
94
95
  const root = obj.root;
95
96
  if (!root.props || typeof root.props !== 'object') {
96
97
  errors.push('Missing root.props object');
97
- }
98
- else {
98
+ } else {
99
99
  const rootProps = root.props;
100
100
  // Check required root props
101
- for (const prop of requiredRootProps) {
101
+ for (const prop of requiredRootProps){
102
102
  if (rootProps[prop] === undefined || rootProps[prop] === null) {
103
103
  errors.push(`Missing required root prop: ${prop}`);
104
104
  }
@@ -116,10 +116,9 @@ export function validatePuckData(data, options = {}) {
116
116
  // ==========================================================================
117
117
  if (!Array.isArray(obj.content)) {
118
118
  errors.push('content must be an array');
119
- }
120
- else {
119
+ } else {
121
120
  const seenIds = new Set();
122
- obj.content.forEach((item, index) => {
121
+ obj.content.forEach((item, index)=>{
123
122
  if (!item || typeof item !== 'object') {
124
123
  errors.push(`Content item at index ${index} is not an object`);
125
124
  return;
@@ -128,14 +127,12 @@ export function validatePuckData(data, options = {}) {
128
127
  // Validate type
129
128
  if (!contentItem.type || typeof contentItem.type !== 'string') {
130
129
  errors.push(`Content item at index ${index} missing or invalid type`);
131
- }
132
- else if (allowedComponentTypes) {
130
+ } else if (allowedComponentTypes) {
133
131
  if (!allowedComponentTypes.includes(contentItem.type)) {
134
132
  const message = `Unknown component type "${contentItem.type}" at index ${index}`;
135
133
  if (strictComponentTypes) {
136
134
  errors.push(message);
137
- }
138
- else {
135
+ } else {
139
136
  warnings.push(message);
140
137
  }
141
138
  }
@@ -143,13 +140,11 @@ export function validatePuckData(data, options = {}) {
143
140
  // Validate props
144
141
  if (!contentItem.props || typeof contentItem.props !== 'object') {
145
142
  errors.push(`Content item at index ${index} missing props object`);
146
- }
147
- else if (requireContentIds) {
143
+ } else if (requireContentIds) {
148
144
  const props = contentItem.props;
149
145
  if (!props.id || typeof props.id !== 'string') {
150
146
  errors.push(`Content item at index ${index} missing or invalid props.id`);
151
- }
152
- else {
147
+ } else {
153
148
  // Check for duplicate IDs
154
149
  if (seenIds.has(props.id)) {
155
150
  warnings.push(`Duplicate content item ID "${props.id}" at index ${index}`);
@@ -165,15 +160,14 @@ export function validatePuckData(data, options = {}) {
165
160
  if (obj.zones !== undefined) {
166
161
  if (typeof obj.zones !== 'object' || obj.zones === null) {
167
162
  errors.push('zones must be an object');
168
- }
169
- else {
163
+ } else {
170
164
  const zones = obj.zones;
171
- for (const [zoneName, zoneContent] of Object.entries(zones)) {
165
+ for (const [zoneName, zoneContent] of Object.entries(zones)){
172
166
  if (!Array.isArray(zoneContent)) {
173
167
  errors.push(`Zone "${zoneName}" content must be an array`);
174
168
  continue;
175
169
  }
176
- zoneContent.forEach((item, index) => {
170
+ zoneContent.forEach((item, index)=>{
177
171
  if (!item || typeof item !== 'object') {
178
172
  errors.push(`Zone "${zoneName}" item at index ${index} is not an object`);
179
173
  return;
@@ -184,8 +178,7 @@ export function validatePuckData(data, options = {}) {
184
178
  }
185
179
  if (!contentItem.props || typeof contentItem.props !== 'object') {
186
180
  errors.push(`Zone "${zoneName}" item at index ${index} missing props object`);
187
- }
188
- else if (requireContentIds) {
181
+ } else if (requireContentIds) {
189
182
  const props = contentItem.props;
190
183
  if (!props.id || typeof props.id !== 'string') {
191
184
  errors.push(`Zone "${zoneName}" item at index ${index} missing or invalid props.id`);
@@ -198,7 +191,7 @@ export function validatePuckData(data, options = {}) {
198
191
  return {
199
192
  valid: errors.length === 0,
200
193
  errors,
201
- warnings,
194
+ warnings
202
195
  };
203
196
  }
204
197
  /**
@@ -208,8 +201,7 @@ export function validatePuckData(data, options = {}) {
208
201
  * @param options - Validation options
209
202
  * @returns The validated PuckPageData
210
203
  * @throws Error if validation fails
211
- */
212
- export function assertPuckData(data, options) {
204
+ */ export function assertPuckData(data, options) {
213
205
  const result = validatePuckData(data, options);
214
206
  if (!result.valid) {
215
207
  throw new Error(`Invalid Puck data: ${result.errors.join('; ')}`);
@@ -222,26 +214,27 @@ export function assertPuckData(data, options) {
222
214
  * @param json - JSON string to parse
223
215
  * @param options - Validation options
224
216
  * @returns Validation result with parsed data if valid
225
- */
226
- export function parsePuckDataJson(json, options) {
217
+ */ export function parsePuckDataJson(json, options) {
227
218
  let parsed;
228
219
  try {
229
220
  parsed = JSON.parse(json);
230
- }
231
- catch (e) {
221
+ } catch (e) {
232
222
  return {
233
223
  valid: false,
234
- errors: [`Invalid JSON: ${e instanceof Error ? e.message : 'Parse error'}`],
235
- warnings: [],
224
+ errors: [
225
+ `Invalid JSON: ${e instanceof Error ? e.message : 'Parse error'}`
226
+ ],
227
+ warnings: []
236
228
  };
237
229
  }
238
230
  const result = validatePuckData(parsed, options);
239
231
  if (result.valid) {
240
232
  return {
241
233
  ...result,
242
- data: parsed,
234
+ data: parsed
243
235
  };
244
236
  }
245
237
  return result;
246
238
  }
239
+
247
240
  //# sourceMappingURL=validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/validation.ts"],"sourcesContent":["/**\n * Puck Data Validation Utilities\n *\n * Provides validation functions for ensuring Puck data structures are well-formed.\n */\n\nimport type { PuckPageData, PuckRootProps } from '../types/index.js'\n\n// =============================================================================\n// Validation Result Types\n// =============================================================================\n\n/**\n * Result of a validation operation\n */\nexport interface ValidationResult {\n valid: boolean\n errors: string[]\n warnings: string[]\n}\n\n/**\n * Options for validation\n */\nexport interface ValidationOptions {\n /**\n * Whether to validate that all content items have IDs\n * @default true\n */\n requireContentIds?: boolean\n\n /**\n * Whether to validate root props\n * @default true\n */\n validateRoot?: boolean\n\n /**\n * Required root prop fields\n * @default ['title']\n */\n requiredRootProps?: string[]\n\n /**\n * Allowed component types (if specified, unknown types will be flagged)\n */\n allowedComponentTypes?: string[]\n\n /**\n * Whether to treat unknown component types as errors (vs warnings)\n * @default false\n */\n strictComponentTypes?: boolean\n}\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\n/**\n * Type guard to check if a value is a valid PuckPageData structure.\n * Performs basic structural validation.\n */\nexport function isPuckData(data: unknown): data is PuckPageData {\n if (!data || typeof data !== 'object') {\n return false\n }\n\n const obj = data as Record<string, unknown>\n\n // Check root structure\n if (!obj.root || typeof obj.root !== 'object') {\n return false\n }\n\n const root = obj.root as Record<string, unknown>\n if (!root.props || typeof root.props !== 'object') {\n return false\n }\n\n // Check content array\n if (!Array.isArray(obj.content)) {\n return false\n }\n\n // Validate each content item has required fields\n for (const item of obj.content) {\n if (!item || typeof item !== 'object') {\n return false\n }\n const contentItem = item as Record<string, unknown>\n if (typeof contentItem.type !== 'string') {\n return false\n }\n if (!contentItem.props || typeof contentItem.props !== 'object') {\n return false\n }\n }\n\n // Check zones (optional but must be object if present)\n if (obj.zones !== undefined && typeof obj.zones !== 'object') {\n return false\n }\n\n return true\n}\n\n/**\n * Type guard for PuckRootProps\n */\nexport function isPuckRootProps(props: unknown): props is PuckRootProps {\n if (!props || typeof props !== 'object') {\n return false\n }\n return true\n}\n\n// =============================================================================\n// Validation Functions\n// =============================================================================\n\n/**\n * Validates that a PuckPageData structure is well-formed.\n * Useful for testing and debugging migration issues.\n *\n * @param data - The data to validate\n * @param options - Validation options\n * @returns Validation result with errors and warnings\n *\n * @example\n * ```ts\n * const result = validatePuckData(puckData)\n * if (!result.valid) {\n * console.error('Validation errors:', result.errors)\n * }\n * ```\n */\nexport function validatePuckData(\n data: unknown,\n options: ValidationOptions = {}\n): ValidationResult {\n const {\n requireContentIds = true,\n validateRoot = true,\n requiredRootProps = ['title'],\n allowedComponentTypes,\n strictComponentTypes = false,\n } = options\n\n const errors: string[] = []\n const warnings: string[] = []\n\n // Basic type check\n if (!data || typeof data !== 'object') {\n errors.push('Data must be a non-null object')\n return { valid: false, errors, warnings }\n }\n\n const obj = data as Record<string, unknown>\n\n // ==========================================================================\n // Validate root structure\n // ==========================================================================\n\n if (!obj.root || typeof obj.root !== 'object') {\n errors.push('Missing or invalid root object')\n } else if (validateRoot) {\n const root = obj.root as Record<string, unknown>\n\n if (!root.props || typeof root.props !== 'object') {\n errors.push('Missing root.props object')\n } else {\n const rootProps = root.props as Record<string, unknown>\n\n // Check required root props\n for (const prop of requiredRootProps) {\n if (rootProps[prop] === undefined || rootProps[prop] === null) {\n errors.push(`Missing required root prop: ${prop}`)\n }\n }\n\n // Validate pageLayout if present\n if (rootProps.pageLayout !== undefined) {\n if (typeof rootProps.pageLayout !== 'string') {\n errors.push('root.props.pageLayout must be a string')\n }\n }\n }\n }\n\n // ==========================================================================\n // Validate content array\n // ==========================================================================\n\n if (!Array.isArray(obj.content)) {\n errors.push('content must be an array')\n } else {\n const seenIds = new Set<string>()\n\n obj.content.forEach((item, index) => {\n if (!item || typeof item !== 'object') {\n errors.push(`Content item at index ${index} is not an object`)\n return\n }\n\n const contentItem = item as Record<string, unknown>\n\n // Validate type\n if (!contentItem.type || typeof contentItem.type !== 'string') {\n errors.push(`Content item at index ${index} missing or invalid type`)\n } else if (allowedComponentTypes) {\n if (!allowedComponentTypes.includes(contentItem.type)) {\n const message = `Unknown component type \"${contentItem.type}\" at index ${index}`\n if (strictComponentTypes) {\n errors.push(message)\n } else {\n warnings.push(message)\n }\n }\n }\n\n // Validate props\n if (!contentItem.props || typeof contentItem.props !== 'object') {\n errors.push(`Content item at index ${index} missing props object`)\n } else if (requireContentIds) {\n const props = contentItem.props as Record<string, unknown>\n\n if (!props.id || typeof props.id !== 'string') {\n errors.push(`Content item at index ${index} missing or invalid props.id`)\n } else {\n // Check for duplicate IDs\n if (seenIds.has(props.id)) {\n warnings.push(\n `Duplicate content item ID \"${props.id}\" at index ${index}`\n )\n }\n seenIds.add(props.id)\n }\n }\n })\n }\n\n // ==========================================================================\n // Validate zones\n // ==========================================================================\n\n if (obj.zones !== undefined) {\n if (typeof obj.zones !== 'object' || obj.zones === null) {\n errors.push('zones must be an object')\n } else {\n const zones = obj.zones as Record<string, unknown>\n\n for (const [zoneName, zoneContent] of Object.entries(zones)) {\n if (!Array.isArray(zoneContent)) {\n errors.push(`Zone \"${zoneName}\" content must be an array`)\n continue\n }\n\n zoneContent.forEach((item, index) => {\n if (!item || typeof item !== 'object') {\n errors.push(`Zone \"${zoneName}\" item at index ${index} is not an object`)\n return\n }\n\n const contentItem = item as Record<string, unknown>\n\n if (!contentItem.type || typeof contentItem.type !== 'string') {\n errors.push(\n `Zone \"${zoneName}\" item at index ${index} missing or invalid type`\n )\n }\n\n if (!contentItem.props || typeof contentItem.props !== 'object') {\n errors.push(\n `Zone \"${zoneName}\" item at index ${index} missing props object`\n )\n } else if (requireContentIds) {\n const props = contentItem.props as Record<string, unknown>\n if (!props.id || typeof props.id !== 'string') {\n errors.push(\n `Zone \"${zoneName}\" item at index ${index} missing or invalid props.id`\n )\n }\n }\n })\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n }\n}\n\n/**\n * Validates and returns typed PuckPageData, throwing if invalid.\n *\n * @param data - The data to validate\n * @param options - Validation options\n * @returns The validated PuckPageData\n * @throws Error if validation fails\n */\nexport function assertPuckData(\n data: unknown,\n options?: ValidationOptions\n): PuckPageData {\n const result = validatePuckData(data, options)\n\n if (!result.valid) {\n throw new Error(\n `Invalid Puck data: ${result.errors.join('; ')}`\n )\n }\n\n return data as PuckPageData\n}\n\n/**\n * Safely parses JSON and validates as PuckPageData.\n *\n * @param json - JSON string to parse\n * @param options - Validation options\n * @returns Validation result with parsed data if valid\n */\nexport function parsePuckDataJson(\n json: string,\n options?: ValidationOptions\n): ValidationResult & { data?: PuckPageData } {\n let parsed: unknown\n\n try {\n parsed = JSON.parse(json)\n } catch (e) {\n return {\n valid: false,\n errors: [`Invalid JSON: ${e instanceof Error ? e.message : 'Parse error'}`],\n warnings: [],\n }\n }\n\n const result = validatePuckData(parsed, options)\n\n if (result.valid) {\n return {\n ...result,\n data: parsed as PuckPageData,\n }\n }\n\n return result\n}\n"],"names":["isPuckData","data","obj","root","props","Array","isArray","content","item","contentItem","type","zones","undefined","isPuckRootProps","validatePuckData","options","requireContentIds","validateRoot","requiredRootProps","allowedComponentTypes","strictComponentTypes","errors","warnings","push","valid","rootProps","prop","pageLayout","seenIds","Set","forEach","index","includes","message","id","has","add","zoneName","zoneContent","Object","entries","length","assertPuckData","result","Error","join","parsePuckDataJson","json","parsed","JSON","parse","e"],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.6.10";
1
+ export declare const VERSION = "0.6.13";
2
2
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,4 @@
1
1
  // Auto-generated by scripts/generate-version.js - do not edit manually
2
- export const VERSION = '0.6.10';
2
+ export const VERSION = '0.6.13';
3
+
3
4
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"}
1
+ {"version":3,"sources":["../src/version.ts"],"sourcesContent":["// Auto-generated by scripts/generate-version.js - do not edit manually\nexport const VERSION = '0.6.13'\n"],"names":["VERSION"],"mappings":"AAAA,uEAAuE;AACvE,OAAO,MAAMA,UAAU,SAAQ"}
@@ -146,7 +146,7 @@ export interface PuckConfigProviderProps {
146
146
  /**
147
147
  * Provider component that makes Puck configuration available to the editor
148
148
  */
149
- export declare function PuckConfigProvider({ config, layouts, theme, plugins, editorStylesheets, editorCss, children, }: PuckConfigProviderProps): import("react/jsx-runtime").JSX.Element;
149
+ export declare function PuckConfigProvider({ config, layouts, theme, plugins, editorStylesheets, editorCss, children, }: PuckConfigProviderProps): import("react").JSX.Element;
150
150
  /**
151
151
  * Hook to access the Puck configuration
152
152
  *
@@ -1 +1 @@
1
- {"version":3,"file":"PuckConfigContext.d.ts","sourceRoot":"","sources":["../../src/views/PuckConfigContext.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,QAAA,MAAM,iBAAiB,iDAErB,CAAA;AAEF,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,OAAO,EACP,KAAK,EACL,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,QAAQ,GACT,EAAE,uBAAuB,2CAazB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,sBAAsB,CAGtD;AAED,eAAe,iBAAiB,CAAA"}
1
+ {"version":3,"file":"PuckConfigContext.d.ts","sourceRoot":"","sources":["../../src/views/PuckConfigContext.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC1E,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,QAAA,MAAM,iBAAiB,iDAErB,CAAA;AAEF,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;IAClB;;OAEG;IACH,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,UAAU,EAAE,CAAA;IACtB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,OAAO,EACP,KAAK,EACL,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,QAAQ,GACT,EAAE,uBAAuB,+BAazB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,sBAAsB,CAGtD;AAED,eAAe,iBAAiB,CAAA"}