@delmaredigital/payload-puck 0.6.13 → 0.6.14

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 (697) hide show
  1. package/dist/admin/EditWithPuckButton.d.ts +0 -1
  2. package/dist/admin/EditWithPuckButton.js +0 -2
  3. package/dist/admin/EditWithPuckCell.d.ts +0 -1
  4. package/dist/admin/EditWithPuckCell.js +0 -2
  5. package/dist/admin/PuckEditorView.d.ts +0 -1
  6. package/dist/admin/PuckEditorView.js +0 -2
  7. package/dist/admin/client.d.ts +0 -1
  8. package/dist/admin/client.js +0 -2
  9. package/dist/admin/generateAdminComponents.d.ts +0 -1
  10. package/dist/admin/generateAdminComponents.js +0 -2
  11. package/dist/admin/index.d.ts +0 -1
  12. package/dist/admin/index.js +0 -2
  13. package/dist/ai/collections/AiContext.d.ts +0 -1
  14. package/dist/ai/collections/AiContext.js +0 -2
  15. package/dist/ai/collections/AiPrompts.d.ts +0 -1
  16. package/dist/ai/collections/AiPrompts.js +0 -2
  17. package/dist/ai/createAiApiRoutes.d.ts +0 -1
  18. package/dist/ai/createAiApiRoutes.js +0 -2
  19. package/dist/ai/createAiGenerate.d.ts +0 -1
  20. package/dist/ai/createAiGenerate.js +0 -2
  21. package/dist/ai/createAiPlugin.d.ts +0 -1
  22. package/dist/ai/createAiPlugin.js +0 -2
  23. package/dist/ai/hooks/useAiContext.d.ts +0 -1
  24. package/dist/ai/hooks/useAiContext.js +0 -2
  25. package/dist/ai/hooks/useAiPrompts.d.ts +0 -1
  26. package/dist/ai/hooks/useAiPrompts.js +0 -2
  27. package/dist/ai/index.d.ts +0 -1
  28. package/dist/ai/index.js +0 -2
  29. package/dist/ai/plugins/ContextEditorPanel.d.ts +0 -1
  30. package/dist/ai/plugins/ContextEditorPanel.js +0 -2
  31. package/dist/ai/plugins/PromptEditorPanel.d.ts +0 -1
  32. package/dist/ai/plugins/PromptEditorPanel.js +0 -2
  33. package/dist/ai/plugins/contextEditorPlugin.d.ts +0 -1
  34. package/dist/ai/plugins/contextEditorPlugin.js +0 -2
  35. package/dist/ai/plugins/promptApiRoutes.d.ts +0 -1
  36. package/dist/ai/plugins/promptApiRoutes.js +0 -2
  37. package/dist/ai/plugins/promptEditorPlugin.d.ts +0 -1
  38. package/dist/ai/plugins/promptEditorPlugin.js +0 -2
  39. package/dist/ai/presets/componentAiDefaults.d.ts +0 -1
  40. package/dist/ai/presets/componentAiDefaults.js +0 -2
  41. package/dist/ai/presets/index.d.ts +0 -1
  42. package/dist/ai/presets/index.js +0 -2
  43. package/dist/ai/presets/instructions/interactive.d.ts +0 -1
  44. package/dist/ai/presets/instructions/interactive.js +0 -2
  45. package/dist/ai/presets/instructions/layout.d.ts +0 -1
  46. package/dist/ai/presets/instructions/layout.js +0 -2
  47. package/dist/ai/presets/instructions/media.d.ts +0 -1
  48. package/dist/ai/presets/instructions/media.js +0 -2
  49. package/dist/ai/presets/instructions/pagePatterns.d.ts +0 -1
  50. package/dist/ai/presets/instructions/pagePatterns.js +0 -2
  51. package/dist/ai/presets/instructions/schemas.d.ts +0 -1
  52. package/dist/ai/presets/instructions/schemas.js +0 -2
  53. package/dist/ai/presets/instructions/typography.d.ts +0 -1
  54. package/dist/ai/presets/instructions/typography.js +0 -2
  55. package/dist/ai/tools/index.d.ts +0 -1
  56. package/dist/ai/tools/index.js +0 -2
  57. package/dist/ai/types.d.ts +0 -1
  58. package/dist/ai/types.js +0 -2
  59. package/dist/ai/utils/injectAiConfig.d.ts +0 -1
  60. package/dist/ai/utils/injectAiConfig.js +0 -2
  61. package/dist/api/createPuckApiRoutes.d.ts +0 -1
  62. package/dist/api/createPuckApiRoutes.js +0 -2
  63. package/dist/api/createPuckApiRoutesVersions.d.ts +0 -1
  64. package/dist/api/createPuckApiRoutesVersions.js +0 -2
  65. package/dist/api/createPuckApiRoutesWithId.d.ts +0 -1
  66. package/dist/api/createPuckApiRoutesWithId.js +0 -2
  67. package/dist/api/index.d.ts +0 -1
  68. package/dist/api/index.js +0 -2
  69. package/dist/api/payload-config.d.js +1 -2
  70. package/dist/api/types.d.ts +0 -1
  71. package/dist/api/types.js +0 -2
  72. package/dist/api/utils/mapRootProps.d.ts +0 -1
  73. package/dist/api/utils/mapRootProps.js +0 -2
  74. package/dist/collections/Templates.d.ts +0 -1
  75. package/dist/collections/Templates.js +0 -2
  76. package/dist/components/AccordionClient.d.ts +0 -1
  77. package/dist/components/AccordionClient.js +0 -2
  78. package/dist/components/AnimatedWrapper.d.ts +0 -1
  79. package/dist/components/AnimatedWrapper.js +0 -2
  80. package/dist/components/exports.d.ts +0 -1
  81. package/dist/components/exports.js +0 -2
  82. package/dist/components/index.d.ts +0 -1
  83. package/dist/components/index.js +0 -2
  84. package/dist/components/interactive/Accordion.d.ts +0 -1
  85. package/dist/components/interactive/Accordion.js +0 -2
  86. package/dist/components/interactive/Accordion.server.d.ts +0 -1
  87. package/dist/components/interactive/Accordion.server.js +0 -2
  88. package/dist/components/interactive/Button.d.ts +0 -1
  89. package/dist/components/interactive/Button.js +0 -2
  90. package/dist/components/interactive/Button.server.d.ts +0 -1
  91. package/dist/components/interactive/Button.server.js +0 -2
  92. package/dist/components/interactive/Card.d.ts +0 -1
  93. package/dist/components/interactive/Card.js +0 -2
  94. package/dist/components/interactive/Card.server.d.ts +0 -1
  95. package/dist/components/interactive/Card.server.js +0 -2
  96. package/dist/components/interactive/Divider.d.ts +0 -1
  97. package/dist/components/interactive/Divider.js +0 -2
  98. package/dist/components/interactive/Divider.server.d.ts +0 -1
  99. package/dist/components/interactive/Divider.server.js +0 -2
  100. package/dist/components/interactive/index.d.ts +0 -1
  101. package/dist/components/interactive/index.js +0 -2
  102. package/dist/components/layout/Container.d.ts +0 -1
  103. package/dist/components/layout/Container.js +0 -2
  104. package/dist/components/layout/Container.server.d.ts +0 -1
  105. package/dist/components/layout/Container.server.js +0 -2
  106. package/dist/components/layout/Flex.d.ts +0 -1
  107. package/dist/components/layout/Flex.js +0 -2
  108. package/dist/components/layout/Flex.server.d.ts +0 -1
  109. package/dist/components/layout/Flex.server.js +0 -2
  110. package/dist/components/layout/Grid.d.ts +0 -1
  111. package/dist/components/layout/Grid.js +0 -2
  112. package/dist/components/layout/Grid.server.d.ts +0 -1
  113. package/dist/components/layout/Grid.server.js +0 -2
  114. package/dist/components/layout/Section.d.ts +0 -1
  115. package/dist/components/layout/Section.js +0 -2
  116. package/dist/components/layout/Section.server.d.ts +0 -1
  117. package/dist/components/layout/Section.server.js +0 -2
  118. package/dist/components/layout/Spacer.d.ts +0 -1
  119. package/dist/components/layout/Spacer.js +0 -2
  120. package/dist/components/layout/Spacer.server.d.ts +0 -1
  121. package/dist/components/layout/Spacer.server.js +0 -2
  122. package/dist/components/layout/Template.d.ts +0 -1
  123. package/dist/components/layout/Template.js +0 -2
  124. package/dist/components/layout/Template.server.d.ts +0 -1
  125. package/dist/components/layout/Template.server.js +0 -2
  126. package/dist/components/layout/index.d.ts +0 -1
  127. package/dist/components/layout/index.js +0 -2
  128. package/dist/components/media/Image.d.ts +0 -1
  129. package/dist/components/media/Image.js +0 -2
  130. package/dist/components/media/Image.server.d.ts +0 -1
  131. package/dist/components/media/Image.server.js +0 -2
  132. package/dist/components/media/index.d.ts +0 -1
  133. package/dist/components/media/index.js +0 -2
  134. package/dist/components/typography/Heading.d.ts +0 -1
  135. package/dist/components/typography/Heading.js +0 -2
  136. package/dist/components/typography/Heading.server.d.ts +0 -1
  137. package/dist/components/typography/Heading.server.js +0 -2
  138. package/dist/components/typography/RichText.editor.d.ts +0 -1
  139. package/dist/components/typography/RichText.editor.js +0 -2
  140. package/dist/components/typography/RichText.server.d.ts +0 -1
  141. package/dist/components/typography/RichText.server.js +0 -2
  142. package/dist/components/typography/Text.d.ts +0 -1
  143. package/dist/components/typography/Text.js +0 -2
  144. package/dist/components/typography/Text.server.d.ts +0 -1
  145. package/dist/components/typography/Text.server.js +0 -2
  146. package/dist/components/typography/index.d.ts +0 -1
  147. package/dist/components/typography/index.js +0 -2
  148. package/dist/config/config.editor.d.ts +0 -1
  149. package/dist/config/config.editor.js +0 -2
  150. package/dist/config/index.d.ts +0 -1
  151. package/dist/config/index.js +0 -2
  152. package/dist/config/merge.d.ts +0 -1
  153. package/dist/config/merge.js +0 -2
  154. package/dist/config/presets.d.ts +0 -1
  155. package/dist/config/presets.js +0 -2
  156. package/dist/config/types.d.ts +0 -1
  157. package/dist/config/types.js +0 -2
  158. package/dist/editor/PuckEditor.d.ts +0 -1
  159. package/dist/editor/PuckEditor.js +0 -2
  160. package/dist/editor/PuckEditorImpl.client.d.ts +0 -1
  161. package/dist/editor/PuckEditorImpl.client.js +0 -2
  162. package/dist/editor/components/DarkModeStyles.d.ts +0 -1
  163. package/dist/editor/components/DarkModeStyles.js +0 -2
  164. package/dist/editor/components/HeaderActions.d.ts +0 -1
  165. package/dist/editor/components/HeaderActions.js +0 -2
  166. package/dist/editor/components/IframeWrapper.d.ts +0 -1
  167. package/dist/editor/components/IframeWrapper.js +0 -2
  168. package/dist/editor/components/LoadingState.d.ts +0 -1
  169. package/dist/editor/components/LoadingState.js +0 -2
  170. package/dist/editor/components/PreviewModal.d.ts +0 -1
  171. package/dist/editor/components/PreviewModal.js +0 -2
  172. package/dist/editor/components/PreviewModeToggle.d.ts +0 -1
  173. package/dist/editor/components/PreviewModeToggle.js +0 -2
  174. package/dist/editor/components/VersionHistory.d.ts +0 -1
  175. package/dist/editor/components/VersionHistory.js +0 -2
  176. package/dist/editor/hooks/useDarkMode.d.ts +0 -1
  177. package/dist/editor/hooks/useDarkMode.js +0 -2
  178. package/dist/editor/hooks/useUnsavedChanges.d.ts +0 -1
  179. package/dist/editor/hooks/useUnsavedChanges.js +0 -2
  180. package/dist/editor/index.d.ts +0 -1
  181. package/dist/editor/index.js +0 -2
  182. package/dist/editor/plugins/VersionHistoryPanel.d.ts +0 -1
  183. package/dist/editor/plugins/VersionHistoryPanel.js +0 -2
  184. package/dist/editor/plugins/index.d.ts +0 -1
  185. package/dist/editor/plugins/index.js +0 -2
  186. package/dist/editor/plugins/versionHistoryPlugin.d.ts +0 -1
  187. package/dist/editor/plugins/versionHistoryPlugin.js +0 -2
  188. package/dist/editor/utils/detectPageTree.d.ts +0 -1
  189. package/dist/editor/utils/detectPageTree.js +0 -2
  190. package/dist/editor/utils/index.d.ts +0 -1
  191. package/dist/editor/utils/index.js +0 -2
  192. package/dist/editor/utils/injectPageTreeFields.d.ts +0 -1
  193. package/dist/editor/utils/injectPageTreeFields.js +0 -2
  194. package/dist/endpoints/ai.d.ts +0 -1
  195. package/dist/endpoints/ai.js +0 -2
  196. package/dist/endpoints/context.d.ts +0 -1
  197. package/dist/endpoints/context.js +0 -2
  198. package/dist/endpoints/index.d.ts +0 -1
  199. package/dist/endpoints/index.js +0 -2
  200. package/dist/endpoints/postcss.d.js +1 -2
  201. package/dist/endpoints/prompts.d.ts +0 -1
  202. package/dist/endpoints/prompts.js +0 -2
  203. package/dist/endpoints/styles.d.ts +0 -1
  204. package/dist/endpoints/styles.js +0 -2
  205. package/dist/exports/client.d.ts +0 -1
  206. package/dist/exports/client.js +0 -2
  207. package/dist/exports/rsc.d.ts +0 -1
  208. package/dist/exports/rsc.js +0 -2
  209. package/dist/fields/AlignmentField.d.ts +0 -1
  210. package/dist/fields/AlignmentField.js +0 -2
  211. package/dist/fields/AnimationField.d.ts +0 -1
  212. package/dist/fields/AnimationField.js +0 -2
  213. package/dist/fields/BackgroundField.d.ts +0 -1
  214. package/dist/fields/BackgroundField.js +0 -2
  215. package/dist/fields/BorderField.d.ts +0 -1
  216. package/dist/fields/BorderField.js +0 -2
  217. package/dist/fields/ColorPickerField.d.ts +0 -1
  218. package/dist/fields/ColorPickerField.js +0 -2
  219. package/dist/fields/ContentAlignmentField.d.ts +0 -1
  220. package/dist/fields/ContentAlignmentField.js +0 -2
  221. package/dist/fields/DimensionsField.d.ts +0 -1
  222. package/dist/fields/DimensionsField.js +0 -2
  223. package/dist/fields/FlexAlignmentField.d.ts +0 -1
  224. package/dist/fields/FlexAlignmentField.js +0 -2
  225. package/dist/fields/FolderPickerField.d.ts +0 -1
  226. package/dist/fields/FolderPickerField.js +0 -2
  227. package/dist/fields/GradientEditor.d.ts +0 -1
  228. package/dist/fields/GradientEditor.js +0 -2
  229. package/dist/fields/LockedField.d.ts +0 -1
  230. package/dist/fields/LockedField.js +0 -2
  231. package/dist/fields/MarginField.d.ts +0 -1
  232. package/dist/fields/MarginField.js +0 -2
  233. package/dist/fields/MediaField.d.ts +0 -1
  234. package/dist/fields/MediaField.js +0 -2
  235. package/dist/fields/PaddingField.d.ts +0 -1
  236. package/dist/fields/PaddingField.js +0 -2
  237. package/dist/fields/PageSegmentField.d.ts +0 -1
  238. package/dist/fields/PageSegmentField.js +0 -2
  239. package/dist/fields/ResetField.d.ts +0 -1
  240. package/dist/fields/ResetField.js +0 -2
  241. package/dist/fields/ResponsiveField.d.ts +0 -1
  242. package/dist/fields/ResponsiveField.js +0 -2
  243. package/dist/fields/ResponsiveVisibilityField.d.ts +0 -1
  244. package/dist/fields/ResponsiveVisibilityField.js +0 -2
  245. package/dist/fields/SizeField.d.ts +0 -1
  246. package/dist/fields/SizeField.js +0 -2
  247. package/dist/fields/SlugPreviewField.d.ts +0 -1
  248. package/dist/fields/SlugPreviewField.js +0 -2
  249. package/dist/fields/TemplateField.d.ts +0 -1
  250. package/dist/fields/TemplateField.js +0 -2
  251. package/dist/fields/TransformField.d.ts +0 -1
  252. package/dist/fields/TransformField.js +0 -2
  253. package/dist/fields/VerticalAlignmentField.d.ts +0 -1
  254. package/dist/fields/VerticalAlignmentField.js +0 -2
  255. package/dist/fields/WidthField.d.ts +0 -1
  256. package/dist/fields/WidthField.js +0 -2
  257. package/dist/fields/index.d.ts +0 -1
  258. package/dist/fields/index.js +0 -2
  259. package/dist/fields/richtext/controls/ColorPickerControl.d.ts +0 -1
  260. package/dist/fields/richtext/controls/ColorPickerControl.js +0 -2
  261. package/dist/fields/richtext/controls/DropdownPortal.d.ts +0 -1
  262. package/dist/fields/richtext/controls/DropdownPortal.js +0 -2
  263. package/dist/fields/richtext/controls/FontSizeControl.d.ts +0 -1
  264. package/dist/fields/richtext/controls/FontSizeControl.js +0 -2
  265. package/dist/fields/richtext/controls/HighlightControl.d.ts +0 -1
  266. package/dist/fields/richtext/controls/HighlightControl.js +0 -2
  267. package/dist/fields/richtext/controls/index.d.ts +0 -1
  268. package/dist/fields/richtext/controls/index.js +0 -2
  269. package/dist/fields/richtext/controls/shared.d.ts +0 -1
  270. package/dist/fields/richtext/controls/shared.js +0 -2
  271. package/dist/fields/richtext/createRichTextField.d.ts +0 -1
  272. package/dist/fields/richtext/createRichTextField.js +0 -2
  273. package/dist/fields/richtext/extensions/FontSize.d.ts +0 -1
  274. package/dist/fields/richtext/extensions/FontSize.js +0 -2
  275. package/dist/fields/richtext/extensions/index.d.ts +0 -1
  276. package/dist/fields/richtext/extensions/index.js +0 -2
  277. package/dist/fields/richtext/index.d.ts +0 -1
  278. package/dist/fields/richtext/index.js +0 -2
  279. package/dist/fields/shared.d.ts +0 -1
  280. package/dist/fields/shared.js +0 -2
  281. package/dist/hooks/index.d.ts +0 -1
  282. package/dist/hooks/index.js +0 -2
  283. package/dist/hooks/useResponsiveStyles.d.ts +0 -1
  284. package/dist/hooks/useResponsiveStyles.js +0 -2
  285. package/dist/hooks/useScrollAnimation.d.ts +0 -1
  286. package/dist/hooks/useScrollAnimation.js +0 -2
  287. package/dist/index.d.ts +0 -1
  288. package/dist/index.js +0 -2
  289. package/dist/layouts/LayoutWrapper.d.ts +0 -1
  290. package/dist/layouts/LayoutWrapper.js +0 -2
  291. package/dist/layouts/defaults.d.ts +0 -1
  292. package/dist/layouts/defaults.js +0 -2
  293. package/dist/layouts/index.d.ts +0 -1
  294. package/dist/layouts/index.js +0 -2
  295. package/dist/layouts/types.d.ts +0 -1
  296. package/dist/layouts/types.js +0 -2
  297. package/dist/layouts/utils.d.ts +0 -1
  298. package/dist/layouts/utils.js +0 -2
  299. package/dist/next/index.d.ts +0 -1
  300. package/dist/next/index.js +0 -2
  301. package/dist/plugin/collections/Pages.d.ts +0 -1
  302. package/dist/plugin/collections/Pages.js +0 -2
  303. package/dist/plugin/fields/index.d.ts +0 -1
  304. package/dist/plugin/fields/index.js +0 -2
  305. package/dist/plugin/fields/types.d.ts +0 -1
  306. package/dist/plugin/fields/types.js +0 -2
  307. package/dist/plugin/hooks/index.d.ts +0 -1
  308. package/dist/plugin/hooks/index.js +0 -2
  309. package/dist/plugin/hooks/isHomepageUnique.d.ts +0 -1
  310. package/dist/plugin/hooks/isHomepageUnique.js +0 -2
  311. package/dist/plugin/index.d.ts +0 -1
  312. package/dist/plugin/index.js +0 -2
  313. package/dist/render/HybridPageRenderer.d.ts +0 -1
  314. package/dist/render/HybridPageRenderer.js +0 -2
  315. package/dist/render/PageRenderer.d.ts +0 -1
  316. package/dist/render/PageRenderer.js +0 -2
  317. package/dist/render/PuckEditor.client.d.ts +0 -1
  318. package/dist/render/PuckEditor.client.js +0 -2
  319. package/dist/render/index.d.ts +0 -1
  320. package/dist/render/index.js +0 -2
  321. package/dist/theme/context.d.ts +0 -1
  322. package/dist/theme/context.js +0 -2
  323. package/dist/theme/defaults.d.ts +0 -1
  324. package/dist/theme/defaults.js +0 -2
  325. package/dist/theme/example.d.ts +0 -1
  326. package/dist/theme/example.js +0 -2
  327. package/dist/theme/index.d.ts +0 -1
  328. package/dist/theme/index.js +0 -2
  329. package/dist/theme/types.d.ts +0 -1
  330. package/dist/theme/types.js +0 -2
  331. package/dist/theme/utils.d.ts +0 -1
  332. package/dist/theme/utils.js +0 -2
  333. package/dist/types/index.d.ts +0 -1
  334. package/dist/types/index.js +0 -2
  335. package/dist/utils/index.d.ts +0 -1
  336. package/dist/utils/index.js +0 -2
  337. package/dist/utils/migration.d.ts +0 -1
  338. package/dist/utils/migration.js +0 -2
  339. package/dist/utils/validation.d.ts +0 -1
  340. package/dist/utils/validation.js +0 -2
  341. package/dist/version.d.ts +1 -2
  342. package/dist/version.js +1 -3
  343. package/dist/views/PuckConfigContext.d.ts +0 -1
  344. package/dist/views/PuckConfigContext.js +0 -2
  345. package/dist/views/PuckEditorView.d.ts +0 -1
  346. package/dist/views/PuckEditorView.js +0 -2
  347. package/dist/views/index.d.ts +0 -1
  348. package/dist/views/index.js +0 -2
  349. package/package.json +1 -1
  350. package/dist/admin/EditWithPuckButton.d.ts.map +0 -1
  351. package/dist/admin/EditWithPuckButton.js.map +0 -1
  352. package/dist/admin/EditWithPuckCell.d.ts.map +0 -1
  353. package/dist/admin/EditWithPuckCell.js.map +0 -1
  354. package/dist/admin/PuckEditorView.d.ts.map +0 -1
  355. package/dist/admin/PuckEditorView.js.map +0 -1
  356. package/dist/admin/client.d.ts.map +0 -1
  357. package/dist/admin/client.js.map +0 -1
  358. package/dist/admin/generateAdminComponents.d.ts.map +0 -1
  359. package/dist/admin/generateAdminComponents.js.map +0 -1
  360. package/dist/admin/index.d.ts.map +0 -1
  361. package/dist/admin/index.js.map +0 -1
  362. package/dist/ai/collections/AiContext.d.ts.map +0 -1
  363. package/dist/ai/collections/AiContext.js.map +0 -1
  364. package/dist/ai/collections/AiPrompts.d.ts.map +0 -1
  365. package/dist/ai/collections/AiPrompts.js.map +0 -1
  366. package/dist/ai/createAiApiRoutes.d.ts.map +0 -1
  367. package/dist/ai/createAiApiRoutes.js.map +0 -1
  368. package/dist/ai/createAiGenerate.d.ts.map +0 -1
  369. package/dist/ai/createAiGenerate.js.map +0 -1
  370. package/dist/ai/createAiPlugin.d.ts.map +0 -1
  371. package/dist/ai/createAiPlugin.js.map +0 -1
  372. package/dist/ai/hooks/useAiContext.d.ts.map +0 -1
  373. package/dist/ai/hooks/useAiContext.js.map +0 -1
  374. package/dist/ai/hooks/useAiPrompts.d.ts.map +0 -1
  375. package/dist/ai/hooks/useAiPrompts.js.map +0 -1
  376. package/dist/ai/index.d.ts.map +0 -1
  377. package/dist/ai/index.js.map +0 -1
  378. package/dist/ai/plugins/ContextEditorPanel.d.ts.map +0 -1
  379. package/dist/ai/plugins/ContextEditorPanel.js.map +0 -1
  380. package/dist/ai/plugins/PromptEditorPanel.d.ts.map +0 -1
  381. package/dist/ai/plugins/PromptEditorPanel.js.map +0 -1
  382. package/dist/ai/plugins/contextEditorPlugin.d.ts.map +0 -1
  383. package/dist/ai/plugins/contextEditorPlugin.js.map +0 -1
  384. package/dist/ai/plugins/promptApiRoutes.d.ts.map +0 -1
  385. package/dist/ai/plugins/promptApiRoutes.js.map +0 -1
  386. package/dist/ai/plugins/promptEditorPlugin.d.ts.map +0 -1
  387. package/dist/ai/plugins/promptEditorPlugin.js.map +0 -1
  388. package/dist/ai/presets/componentAiDefaults.d.ts.map +0 -1
  389. package/dist/ai/presets/componentAiDefaults.js.map +0 -1
  390. package/dist/ai/presets/index.d.ts.map +0 -1
  391. package/dist/ai/presets/index.js.map +0 -1
  392. package/dist/ai/presets/instructions/interactive.d.ts.map +0 -1
  393. package/dist/ai/presets/instructions/interactive.js.map +0 -1
  394. package/dist/ai/presets/instructions/layout.d.ts.map +0 -1
  395. package/dist/ai/presets/instructions/layout.js.map +0 -1
  396. package/dist/ai/presets/instructions/media.d.ts.map +0 -1
  397. package/dist/ai/presets/instructions/media.js.map +0 -1
  398. package/dist/ai/presets/instructions/pagePatterns.d.ts.map +0 -1
  399. package/dist/ai/presets/instructions/pagePatterns.js.map +0 -1
  400. package/dist/ai/presets/instructions/schemas.d.ts.map +0 -1
  401. package/dist/ai/presets/instructions/schemas.js.map +0 -1
  402. package/dist/ai/presets/instructions/typography.d.ts.map +0 -1
  403. package/dist/ai/presets/instructions/typography.js.map +0 -1
  404. package/dist/ai/tools/index.d.ts.map +0 -1
  405. package/dist/ai/tools/index.js.map +0 -1
  406. package/dist/ai/types.d.ts.map +0 -1
  407. package/dist/ai/types.js.map +0 -1
  408. package/dist/ai/utils/injectAiConfig.d.ts.map +0 -1
  409. package/dist/ai/utils/injectAiConfig.js.map +0 -1
  410. package/dist/api/createPuckApiRoutes.d.ts.map +0 -1
  411. package/dist/api/createPuckApiRoutes.js.map +0 -1
  412. package/dist/api/createPuckApiRoutesVersions.d.ts.map +0 -1
  413. package/dist/api/createPuckApiRoutesVersions.js.map +0 -1
  414. package/dist/api/createPuckApiRoutesWithId.d.ts.map +0 -1
  415. package/dist/api/createPuckApiRoutesWithId.js.map +0 -1
  416. package/dist/api/index.d.ts.map +0 -1
  417. package/dist/api/index.js.map +0 -1
  418. package/dist/api/payload-config.d.js.map +0 -1
  419. package/dist/api/types.d.ts.map +0 -1
  420. package/dist/api/types.js.map +0 -1
  421. package/dist/api/utils/mapRootProps.d.ts.map +0 -1
  422. package/dist/api/utils/mapRootProps.js.map +0 -1
  423. package/dist/collections/Templates.d.ts.map +0 -1
  424. package/dist/collections/Templates.js.map +0 -1
  425. package/dist/components/AccordionClient.d.ts.map +0 -1
  426. package/dist/components/AccordionClient.js.map +0 -1
  427. package/dist/components/AnimatedWrapper.d.ts.map +0 -1
  428. package/dist/components/AnimatedWrapper.js.map +0 -1
  429. package/dist/components/exports.d.ts.map +0 -1
  430. package/dist/components/exports.js.map +0 -1
  431. package/dist/components/index.d.ts.map +0 -1
  432. package/dist/components/index.js.map +0 -1
  433. package/dist/components/interactive/Accordion.d.ts.map +0 -1
  434. package/dist/components/interactive/Accordion.js.map +0 -1
  435. package/dist/components/interactive/Accordion.server.d.ts.map +0 -1
  436. package/dist/components/interactive/Accordion.server.js.map +0 -1
  437. package/dist/components/interactive/Button.d.ts.map +0 -1
  438. package/dist/components/interactive/Button.js.map +0 -1
  439. package/dist/components/interactive/Button.server.d.ts.map +0 -1
  440. package/dist/components/interactive/Button.server.js.map +0 -1
  441. package/dist/components/interactive/Card.d.ts.map +0 -1
  442. package/dist/components/interactive/Card.js.map +0 -1
  443. package/dist/components/interactive/Card.server.d.ts.map +0 -1
  444. package/dist/components/interactive/Card.server.js.map +0 -1
  445. package/dist/components/interactive/Divider.d.ts.map +0 -1
  446. package/dist/components/interactive/Divider.js.map +0 -1
  447. package/dist/components/interactive/Divider.server.d.ts.map +0 -1
  448. package/dist/components/interactive/Divider.server.js.map +0 -1
  449. package/dist/components/interactive/index.d.ts.map +0 -1
  450. package/dist/components/interactive/index.js.map +0 -1
  451. package/dist/components/layout/Container.d.ts.map +0 -1
  452. package/dist/components/layout/Container.js.map +0 -1
  453. package/dist/components/layout/Container.server.d.ts.map +0 -1
  454. package/dist/components/layout/Container.server.js.map +0 -1
  455. package/dist/components/layout/Flex.d.ts.map +0 -1
  456. package/dist/components/layout/Flex.js.map +0 -1
  457. package/dist/components/layout/Flex.server.d.ts.map +0 -1
  458. package/dist/components/layout/Flex.server.js.map +0 -1
  459. package/dist/components/layout/Grid.d.ts.map +0 -1
  460. package/dist/components/layout/Grid.js.map +0 -1
  461. package/dist/components/layout/Grid.server.d.ts.map +0 -1
  462. package/dist/components/layout/Grid.server.js.map +0 -1
  463. package/dist/components/layout/Section.d.ts.map +0 -1
  464. package/dist/components/layout/Section.js.map +0 -1
  465. package/dist/components/layout/Section.server.d.ts.map +0 -1
  466. package/dist/components/layout/Section.server.js.map +0 -1
  467. package/dist/components/layout/Spacer.d.ts.map +0 -1
  468. package/dist/components/layout/Spacer.js.map +0 -1
  469. package/dist/components/layout/Spacer.server.d.ts.map +0 -1
  470. package/dist/components/layout/Spacer.server.js.map +0 -1
  471. package/dist/components/layout/Template.d.ts.map +0 -1
  472. package/dist/components/layout/Template.js.map +0 -1
  473. package/dist/components/layout/Template.server.d.ts.map +0 -1
  474. package/dist/components/layout/Template.server.js.map +0 -1
  475. package/dist/components/layout/index.d.ts.map +0 -1
  476. package/dist/components/layout/index.js.map +0 -1
  477. package/dist/components/media/Image.d.ts.map +0 -1
  478. package/dist/components/media/Image.js.map +0 -1
  479. package/dist/components/media/Image.server.d.ts.map +0 -1
  480. package/dist/components/media/Image.server.js.map +0 -1
  481. package/dist/components/media/index.d.ts.map +0 -1
  482. package/dist/components/media/index.js.map +0 -1
  483. package/dist/components/typography/Heading.d.ts.map +0 -1
  484. package/dist/components/typography/Heading.js.map +0 -1
  485. package/dist/components/typography/Heading.server.d.ts.map +0 -1
  486. package/dist/components/typography/Heading.server.js.map +0 -1
  487. package/dist/components/typography/RichText.editor.d.ts.map +0 -1
  488. package/dist/components/typography/RichText.editor.js.map +0 -1
  489. package/dist/components/typography/RichText.server.d.ts.map +0 -1
  490. package/dist/components/typography/RichText.server.js.map +0 -1
  491. package/dist/components/typography/Text.d.ts.map +0 -1
  492. package/dist/components/typography/Text.js.map +0 -1
  493. package/dist/components/typography/Text.server.d.ts.map +0 -1
  494. package/dist/components/typography/Text.server.js.map +0 -1
  495. package/dist/components/typography/index.d.ts.map +0 -1
  496. package/dist/components/typography/index.js.map +0 -1
  497. package/dist/config/config.editor.d.ts.map +0 -1
  498. package/dist/config/config.editor.js.map +0 -1
  499. package/dist/config/index.d.ts.map +0 -1
  500. package/dist/config/index.js.map +0 -1
  501. package/dist/config/merge.d.ts.map +0 -1
  502. package/dist/config/merge.js.map +0 -1
  503. package/dist/config/presets.d.ts.map +0 -1
  504. package/dist/config/presets.js.map +0 -1
  505. package/dist/config/types.d.ts.map +0 -1
  506. package/dist/config/types.js.map +0 -1
  507. package/dist/editor/PuckEditor.d.ts.map +0 -1
  508. package/dist/editor/PuckEditor.js.map +0 -1
  509. package/dist/editor/PuckEditorImpl.client.d.ts.map +0 -1
  510. package/dist/editor/PuckEditorImpl.client.js.map +0 -1
  511. package/dist/editor/components/DarkModeStyles.d.ts.map +0 -1
  512. package/dist/editor/components/DarkModeStyles.js.map +0 -1
  513. package/dist/editor/components/HeaderActions.d.ts.map +0 -1
  514. package/dist/editor/components/HeaderActions.js.map +0 -1
  515. package/dist/editor/components/IframeWrapper.d.ts.map +0 -1
  516. package/dist/editor/components/IframeWrapper.js.map +0 -1
  517. package/dist/editor/components/LoadingState.d.ts.map +0 -1
  518. package/dist/editor/components/LoadingState.js.map +0 -1
  519. package/dist/editor/components/PreviewModal.d.ts.map +0 -1
  520. package/dist/editor/components/PreviewModal.js.map +0 -1
  521. package/dist/editor/components/PreviewModeToggle.d.ts.map +0 -1
  522. package/dist/editor/components/PreviewModeToggle.js.map +0 -1
  523. package/dist/editor/components/VersionHistory.d.ts.map +0 -1
  524. package/dist/editor/components/VersionHistory.js.map +0 -1
  525. package/dist/editor/hooks/useDarkMode.d.ts.map +0 -1
  526. package/dist/editor/hooks/useDarkMode.js.map +0 -1
  527. package/dist/editor/hooks/useUnsavedChanges.d.ts.map +0 -1
  528. package/dist/editor/hooks/useUnsavedChanges.js.map +0 -1
  529. package/dist/editor/index.d.ts.map +0 -1
  530. package/dist/editor/index.js.map +0 -1
  531. package/dist/editor/plugins/VersionHistoryPanel.d.ts.map +0 -1
  532. package/dist/editor/plugins/VersionHistoryPanel.js.map +0 -1
  533. package/dist/editor/plugins/index.d.ts.map +0 -1
  534. package/dist/editor/plugins/index.js.map +0 -1
  535. package/dist/editor/plugins/versionHistoryPlugin.d.ts.map +0 -1
  536. package/dist/editor/plugins/versionHistoryPlugin.js.map +0 -1
  537. package/dist/editor/utils/detectPageTree.d.ts.map +0 -1
  538. package/dist/editor/utils/detectPageTree.js.map +0 -1
  539. package/dist/editor/utils/index.d.ts.map +0 -1
  540. package/dist/editor/utils/index.js.map +0 -1
  541. package/dist/editor/utils/injectPageTreeFields.d.ts.map +0 -1
  542. package/dist/editor/utils/injectPageTreeFields.js.map +0 -1
  543. package/dist/endpoints/ai.d.ts.map +0 -1
  544. package/dist/endpoints/ai.js.map +0 -1
  545. package/dist/endpoints/context.d.ts.map +0 -1
  546. package/dist/endpoints/context.js.map +0 -1
  547. package/dist/endpoints/index.d.ts.map +0 -1
  548. package/dist/endpoints/index.js.map +0 -1
  549. package/dist/endpoints/postcss.d.js.map +0 -1
  550. package/dist/endpoints/prompts.d.ts.map +0 -1
  551. package/dist/endpoints/prompts.js.map +0 -1
  552. package/dist/endpoints/styles.d.ts.map +0 -1
  553. package/dist/endpoints/styles.js.map +0 -1
  554. package/dist/exports/client.d.ts.map +0 -1
  555. package/dist/exports/client.js.map +0 -1
  556. package/dist/exports/rsc.d.ts.map +0 -1
  557. package/dist/exports/rsc.js.map +0 -1
  558. package/dist/fields/AlignmentField.d.ts.map +0 -1
  559. package/dist/fields/AlignmentField.js.map +0 -1
  560. package/dist/fields/AnimationField.d.ts.map +0 -1
  561. package/dist/fields/AnimationField.js.map +0 -1
  562. package/dist/fields/BackgroundField.d.ts.map +0 -1
  563. package/dist/fields/BackgroundField.js.map +0 -1
  564. package/dist/fields/BorderField.d.ts.map +0 -1
  565. package/dist/fields/BorderField.js.map +0 -1
  566. package/dist/fields/ColorPickerField.d.ts.map +0 -1
  567. package/dist/fields/ColorPickerField.js.map +0 -1
  568. package/dist/fields/ContentAlignmentField.d.ts.map +0 -1
  569. package/dist/fields/ContentAlignmentField.js.map +0 -1
  570. package/dist/fields/DimensionsField.d.ts.map +0 -1
  571. package/dist/fields/DimensionsField.js.map +0 -1
  572. package/dist/fields/FlexAlignmentField.d.ts.map +0 -1
  573. package/dist/fields/FlexAlignmentField.js.map +0 -1
  574. package/dist/fields/FolderPickerField.d.ts.map +0 -1
  575. package/dist/fields/FolderPickerField.js.map +0 -1
  576. package/dist/fields/GradientEditor.d.ts.map +0 -1
  577. package/dist/fields/GradientEditor.js.map +0 -1
  578. package/dist/fields/LockedField.d.ts.map +0 -1
  579. package/dist/fields/LockedField.js.map +0 -1
  580. package/dist/fields/MarginField.d.ts.map +0 -1
  581. package/dist/fields/MarginField.js.map +0 -1
  582. package/dist/fields/MediaField.d.ts.map +0 -1
  583. package/dist/fields/MediaField.js.map +0 -1
  584. package/dist/fields/PaddingField.d.ts.map +0 -1
  585. package/dist/fields/PaddingField.js.map +0 -1
  586. package/dist/fields/PageSegmentField.d.ts.map +0 -1
  587. package/dist/fields/PageSegmentField.js.map +0 -1
  588. package/dist/fields/ResetField.d.ts.map +0 -1
  589. package/dist/fields/ResetField.js.map +0 -1
  590. package/dist/fields/ResponsiveField.d.ts.map +0 -1
  591. package/dist/fields/ResponsiveField.js.map +0 -1
  592. package/dist/fields/ResponsiveVisibilityField.d.ts.map +0 -1
  593. package/dist/fields/ResponsiveVisibilityField.js.map +0 -1
  594. package/dist/fields/SizeField.d.ts.map +0 -1
  595. package/dist/fields/SizeField.js.map +0 -1
  596. package/dist/fields/SlugPreviewField.d.ts.map +0 -1
  597. package/dist/fields/SlugPreviewField.js.map +0 -1
  598. package/dist/fields/TemplateField.d.ts.map +0 -1
  599. package/dist/fields/TemplateField.js.map +0 -1
  600. package/dist/fields/TransformField.d.ts.map +0 -1
  601. package/dist/fields/TransformField.js.map +0 -1
  602. package/dist/fields/VerticalAlignmentField.d.ts.map +0 -1
  603. package/dist/fields/VerticalAlignmentField.js.map +0 -1
  604. package/dist/fields/WidthField.d.ts.map +0 -1
  605. package/dist/fields/WidthField.js.map +0 -1
  606. package/dist/fields/index.d.ts.map +0 -1
  607. package/dist/fields/index.js.map +0 -1
  608. package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +0 -1
  609. package/dist/fields/richtext/controls/ColorPickerControl.js.map +0 -1
  610. package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +0 -1
  611. package/dist/fields/richtext/controls/DropdownPortal.js.map +0 -1
  612. package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +0 -1
  613. package/dist/fields/richtext/controls/FontSizeControl.js.map +0 -1
  614. package/dist/fields/richtext/controls/HighlightControl.d.ts.map +0 -1
  615. package/dist/fields/richtext/controls/HighlightControl.js.map +0 -1
  616. package/dist/fields/richtext/controls/index.d.ts.map +0 -1
  617. package/dist/fields/richtext/controls/index.js.map +0 -1
  618. package/dist/fields/richtext/controls/shared.d.ts.map +0 -1
  619. package/dist/fields/richtext/controls/shared.js.map +0 -1
  620. package/dist/fields/richtext/createRichTextField.d.ts.map +0 -1
  621. package/dist/fields/richtext/createRichTextField.js.map +0 -1
  622. package/dist/fields/richtext/extensions/FontSize.d.ts.map +0 -1
  623. package/dist/fields/richtext/extensions/FontSize.js.map +0 -1
  624. package/dist/fields/richtext/extensions/index.d.ts.map +0 -1
  625. package/dist/fields/richtext/extensions/index.js.map +0 -1
  626. package/dist/fields/richtext/index.d.ts.map +0 -1
  627. package/dist/fields/richtext/index.js.map +0 -1
  628. package/dist/fields/shared.d.ts.map +0 -1
  629. package/dist/fields/shared.js.map +0 -1
  630. package/dist/hooks/index.d.ts.map +0 -1
  631. package/dist/hooks/index.js.map +0 -1
  632. package/dist/hooks/useResponsiveStyles.d.ts.map +0 -1
  633. package/dist/hooks/useResponsiveStyles.js.map +0 -1
  634. package/dist/hooks/useScrollAnimation.d.ts.map +0 -1
  635. package/dist/hooks/useScrollAnimation.js.map +0 -1
  636. package/dist/index.d.ts.map +0 -1
  637. package/dist/index.js.map +0 -1
  638. package/dist/layouts/LayoutWrapper.d.ts.map +0 -1
  639. package/dist/layouts/LayoutWrapper.js.map +0 -1
  640. package/dist/layouts/defaults.d.ts.map +0 -1
  641. package/dist/layouts/defaults.js.map +0 -1
  642. package/dist/layouts/index.d.ts.map +0 -1
  643. package/dist/layouts/index.js.map +0 -1
  644. package/dist/layouts/types.d.ts.map +0 -1
  645. package/dist/layouts/types.js.map +0 -1
  646. package/dist/layouts/utils.d.ts.map +0 -1
  647. package/dist/layouts/utils.js.map +0 -1
  648. package/dist/next/index.d.ts.map +0 -1
  649. package/dist/next/index.js.map +0 -1
  650. package/dist/plugin/collections/Pages.d.ts.map +0 -1
  651. package/dist/plugin/collections/Pages.js.map +0 -1
  652. package/dist/plugin/fields/index.d.ts.map +0 -1
  653. package/dist/plugin/fields/index.js.map +0 -1
  654. package/dist/plugin/fields/types.d.ts.map +0 -1
  655. package/dist/plugin/fields/types.js.map +0 -1
  656. package/dist/plugin/hooks/index.d.ts.map +0 -1
  657. package/dist/plugin/hooks/index.js.map +0 -1
  658. package/dist/plugin/hooks/isHomepageUnique.d.ts.map +0 -1
  659. package/dist/plugin/hooks/isHomepageUnique.js.map +0 -1
  660. package/dist/plugin/index.d.ts.map +0 -1
  661. package/dist/plugin/index.js.map +0 -1
  662. package/dist/render/HybridPageRenderer.d.ts.map +0 -1
  663. package/dist/render/HybridPageRenderer.js.map +0 -1
  664. package/dist/render/PageRenderer.d.ts.map +0 -1
  665. package/dist/render/PageRenderer.js.map +0 -1
  666. package/dist/render/PuckEditor.client.d.ts.map +0 -1
  667. package/dist/render/PuckEditor.client.js.map +0 -1
  668. package/dist/render/index.d.ts.map +0 -1
  669. package/dist/render/index.js.map +0 -1
  670. package/dist/theme/context.d.ts.map +0 -1
  671. package/dist/theme/context.js.map +0 -1
  672. package/dist/theme/defaults.d.ts.map +0 -1
  673. package/dist/theme/defaults.js.map +0 -1
  674. package/dist/theme/example.d.ts.map +0 -1
  675. package/dist/theme/example.js.map +0 -1
  676. package/dist/theme/index.d.ts.map +0 -1
  677. package/dist/theme/index.js.map +0 -1
  678. package/dist/theme/types.d.ts.map +0 -1
  679. package/dist/theme/types.js.map +0 -1
  680. package/dist/theme/utils.d.ts.map +0 -1
  681. package/dist/theme/utils.js.map +0 -1
  682. package/dist/types/index.d.ts.map +0 -1
  683. package/dist/types/index.js.map +0 -1
  684. package/dist/utils/index.d.ts.map +0 -1
  685. package/dist/utils/index.js.map +0 -1
  686. package/dist/utils/migration.d.ts.map +0 -1
  687. package/dist/utils/migration.js.map +0 -1
  688. package/dist/utils/validation.d.ts.map +0 -1
  689. package/dist/utils/validation.js.map +0 -1
  690. package/dist/version.d.ts.map +0 -1
  691. package/dist/version.js.map +0 -1
  692. package/dist/views/PuckConfigContext.d.ts.map +0 -1
  693. package/dist/views/PuckConfigContext.js.map +0 -1
  694. package/dist/views/PuckEditorView.d.ts.map +0 -1
  695. package/dist/views/PuckEditorView.js.map +0 -1
  696. package/dist/views/index.d.ts.map +0 -1
  697. package/dist/views/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/ai/presets/instructions/layout.ts"],"sourcesContent":["import type { ComponentAiOverrides } from '../../types.js'\nimport {\n backgroundSchema,\n borderSchema,\n responsivePaddingSchema,\n responsiveDimensionsSchema,\n animationSchema,\n visibilitySchema,\n justifyContentSchema,\n alignItemsSchema,\n} from './schemas.js'\n\n/**\n * Comprehensive AI instructions for layout components\n *\n * These instructions teach the AI:\n * - When to use each layout component\n * - How to nest and compose layouts\n * - Correct field names and recommended values\n * - Common page structure patterns\n */\n\nexport const layoutInstructions: ComponentAiOverrides = {\n Section: {\n ai: {\n instructions: `Section component - the primary building block for page sections.\n\nPURPOSE:\n- Creates distinct page sections with full-width backgrounds\n- Two-layer architecture: outer section (full-bleed) + inner content (constrained)\n- Every major page section should be wrapped in a Section\n\nARCHITECTURE:\n- Outer layer (section): Full viewport width, holds background color/image\n- Inner layer (content): Constrained max-width, centered, holds actual content\n\nUSAGE GUIDELINES:\n- Use Section as the outermost wrapper for every page section\n- NEVER nest Section inside Flex or Grid (only at root level)\n- Set sectionBackground for full-width colored backgrounds\n- Use contentDimensions to control inner content width (default: 1200px)\n\nCOMMON PATTERNS:\n- Hero Section: Dark/gradient sectionBackground, large sectionPadding\n- Feature Section: Light/white background, medium padding\n- CTA Section: Contrasting accent color background\n- Alternating sections: Alternate background colors for visual rhythm\n\nRECOMMENDED VALUES:\n- sectionPadding: { xs: { top: 48, right: 0, bottom: 48, left: 0, unit: 'px', linked: false } } for standard sections\n- sectionPadding: { xs: { top: 80, right: 0, bottom: 80, left: 0, unit: 'px', linked: false } } for hero sections\n- contentDimensions: { xs: { mode: 'contained', maxWidth: { value: 1200, unit: 'px', enabled: true }, alignment: 'center' } }\n\nCOMPOSITION:\n- Section > Container (for text-heavy content)\n- Section > Flex (for grouped elements)\n- Section > Grid (for card layouts)`,\n },\n fields: {\n content: {\n ai: {\n required: true,\n instructions:\n 'Slot for child components. Add Container, Flex, Grid, or individual components here.',\n },\n },\n semanticElement: {\n ai: {\n instructions:\n \"HTML element type. Use 'section' (default) for most cases, 'header' for page header, 'footer' for page footer, 'main' for primary content.\",\n },\n },\n id: {\n ai: {\n instructions:\n 'Optional ID for anchor links. Use lowercase-with-dashes format, e.g., \"features\", \"about-us\", \"contact\".',\n },\n },\n sectionBackground: {\n ai: {\n instructions: `Full-width background for the section. Supports solid colors and gradients.\nUse for: Hero sections (dark/gradient), CTA sections (brand color), alternating section backgrounds.\nExample solid: { type: 'solid', solid: { hex: '#1e293b' } }\nExample gradient: { type: 'gradient', gradient: { type: 'linear', angle: 135, stops: [{ color: { hex: '#3b82f6' }, position: 0 }, { color: { hex: '#8b5cf6' }, position: 100 }] } }`,\n schema: backgroundSchema,\n },\n },\n sectionPadding: {\n ai: {\n instructions: `Vertical/horizontal padding for the section. Controls breathing room.\nHero sections: 80-96px top/bottom. Standard sections: 48-64px. Dense: 32-48px.\nExample: { xs: { top: 64, right: 0, bottom: 64, left: 0, unit: 'px', linked: false } }`,\n schema: responsivePaddingSchema,\n },\n },\n sectionMargin: {\n ai: {\n instructions: `Margin around the section. Usually leave null - use sectionPadding for internal spacing.`,\n schema: responsivePaddingSchema,\n },\n },\n contentDimensions: {\n ai: {\n instructions: `Inner content width constraints. Default is 1200px max-width centered.\nExample: { xs: { mode: 'contained', maxWidth: { value: 1200, unit: 'px', enabled: true }, alignment: 'center' } }\nUse narrower (800-900px) for text-heavy content like blog posts.`,\n schema: responsiveDimensionsSchema,\n },\n },\n contentBackground: {\n ai: {\n instructions: `Background for the inner content area (not full-width). Use for card-like treatments within sections.\nExample: { type: 'solid', solid: { hex: '#ffffff' } }`,\n schema: backgroundSchema,\n },\n },\n contentPadding: {\n ai: {\n instructions: `Padding for the inner content area.\nExample: { xs: { top: 24, right: 24, bottom: 24, left: 24, unit: 'px', linked: true } }`,\n schema: responsivePaddingSchema,\n },\n },\n contentBorder: {\n ai: {\n instructions: `Border for the inner content area. Use for card-like treatments.\nExample: { style: 'solid', width: 1, color: { hex: '#e5e7eb' }, radius: 8, sides: { top: true, right: true, bottom: true, left: true } }`,\n schema: borderSchema,\n },\n },\n animation: {\n ai: {\n instructions: `Entrance animation for the section. Use sparingly for key sections like heroes.\nExample: { mode: 'preset', entrance: 'fade-up', entranceDuration: 600, triggerOnScroll: true, triggerOnce: true }`,\n schema: animationSchema,\n },\n },\n visibility: {\n ai: {\n instructions: `Show/hide at different breakpoints.\nExample: { xs: true, sm: true, md: true, lg: true, xl: true }`,\n schema: visibilitySchema,\n },\n },\n },\n },\n\n Container: {\n ai: {\n instructions: `Container component for grouping and constraining content width.\n\nPURPOSE:\n- Constrains content to a maximum width\n- Groups related elements together\n- Provides padding/margin around content blocks\n\nUSAGE GUIDELINES:\n- Use inside Section when you need additional grouping\n- Useful for text-heavy content that needs width constraints\n- Not always needed - Section already constrains content width\n\nWHEN TO USE:\n- Long-form text content (blog posts, about page)\n- When you need nested width constraints\n- To add background/border to a content group within a Section\n\nWHEN NOT TO USE:\n- For simple layouts - Section alone is sufficient\n- For card grids - use Grid instead\n- For horizontal layouts - use Flex instead\n\nCOMPOSITION:\n- Section > Container > Heading + Text (for centered text blocks)\n- Section > Container > RichText (for long-form content)`,\n },\n fields: {\n content: {\n ai: {\n required: true,\n instructions: 'Slot for child components.',\n },\n },\n semanticElement: {\n ai: {\n instructions: \"HTML element type: 'div' (default), 'article', 'aside', 'section'.\",\n },\n },\n background: {\n ai: {\n instructions: `Background color, gradient, or image. Use for card-like content blocks or visual emphasis.\nExample: { type: 'solid', solid: { hex: '#f8fafc' } }`,\n schema: backgroundSchema,\n },\n },\n border: {\n ai: {\n instructions: `Border styling. Use for card treatments or visual separation.\nExample: { style: 'solid', width: 1, color: { hex: '#e5e7eb' }, radius: 12, sides: { top: true, right: true, bottom: true, left: true } }`,\n schema: borderSchema,\n },\n },\n padding: {\n ai: {\n instructions: `Internal padding.\nExample: { xs: { top: 24, right: 24, bottom: 24, left: 24, unit: 'px', linked: true } }`,\n schema: responsivePaddingSchema,\n },\n },\n dimensions: {\n ai: {\n instructions: `Width/height constraints.\nExample: { xs: { mode: 'contained', maxWidth: { value: 800, unit: 'px', enabled: true }, alignment: 'center' } }`,\n schema: responsiveDimensionsSchema,\n },\n },\n margin: {\n ai: {\n instructions: `Margin outside the container.\nExample: { xs: { top: 0, right: 0, bottom: 24, left: 0, unit: 'px', linked: false } }`,\n schema: responsivePaddingSchema,\n },\n },\n animation: {\n ai: {\n instructions: `Entrance animation for the container. Use for key content blocks.\nExample: { mode: 'preset', entrance: 'fade-up', entranceDuration: 500, triggerOnScroll: true, triggerOnce: true }`,\n schema: animationSchema,\n },\n },\n visibility: {\n ai: {\n instructions: `Show/hide at different breakpoints.\nExample: { xs: true, sm: true, md: true, lg: true, xl: true }`,\n schema: visibilitySchema,\n },\n },\n },\n },\n\n Flex: {\n ai: {\n instructions: `Flex component for flexible row/column layouts.\n\nPURPOSE:\n- Horizontal or vertical arrangements of elements\n- Button groups, icon rows, horizontal lists\n- Centering and distributing content\n\nUSAGE GUIDELINES:\n- Use direction: 'row' for horizontal layouts (buttons side-by-side)\n- Use direction: 'column' for vertical stacking (heading + text + button)\n- NEVER place Section inside Flex\n\nCOMMON PATTERNS:\n- Button Group: Flex (row, gap: 16) > Button + Button\n- Hero Content: Flex (column, center) > Heading + Text + Flex(row) with Buttons\n- Feature Item: Flex (column) > Image + Heading + Text\n- Navigation: Flex (row, space-between) > Logo + Flex(row) with nav links\n\nRECOMMENDED VALUES:\n- gap: 8 (tight), 16 (compact), 24 (comfortable), 32 (spacious)\n- direction: 'row' for horizontal, 'column' for vertical\n- justifyContent: 'center' (centered), 'space-between' (spread out)\n- alignItems: 'center' (vertically centered in row mode)\n\nCOMPOSITION:\n- Section > Flex (column, center) > Content (for centered section content)\n- Flex (row) > Button + Button (for button groups)\n- Grid > Flex (column) > Content (for grid item content)`,\n },\n fields: {\n content: {\n ai: {\n required: true,\n instructions: 'Slot for child components. Cannot contain Section components.',\n },\n },\n direction: {\n ai: {\n instructions: \"'row' for horizontal layout, 'column' for vertical stacking. Default: row.\",\n },\n },\n justifyContent: {\n ai: {\n instructions:\n \"Controls horizontal distribution: 'flex-start', 'center', 'flex-end', 'space-between', 'space-around'.\",\n schema: justifyContentSchema,\n },\n },\n alignItems: {\n ai: {\n instructions:\n \"Controls vertical alignment: 'flex-start', 'center', 'flex-end', 'stretch'.\",\n schema: alignItemsSchema,\n },\n },\n gap: {\n ai: {\n instructions: 'Space between items in pixels. Common values: 8, 16, 24, 32.',\n },\n },\n wrap: {\n ai: {\n instructions: \"'wrap' allows items to wrap to new lines, 'nowrap' keeps them on one line.\",\n },\n },\n semanticElement: {\n ai: {\n instructions: \"'div' (default), 'nav' for navigation, 'ul'/'ol' for lists.\",\n },\n },\n background: {\n ai: {\n instructions: `Background for the flex container. Use for grouped content with visual separation.\nExample: { type: 'solid', solid: { hex: '#f1f5f9' } }`,\n schema: backgroundSchema,\n },\n },\n border: {\n ai: {\n instructions: `Border styling for the flex container.\nExample: { style: 'solid', width: 1, color: { hex: '#e2e8f0' }, radius: 8, sides: { top: true, right: true, bottom: true, left: true } }`,\n schema: borderSchema,\n },\n },\n customPadding: {\n ai: {\n instructions: `Padding inside the flex container.\nExample: { xs: { top: 16, right: 16, bottom: 16, left: 16, unit: 'px', linked: true } }`,\n schema: responsivePaddingSchema,\n },\n },\n margin: {\n ai: {\n instructions: `Margin outside the flex container.\nExample: { xs: { top: 0, right: 0, bottom: 24, left: 0, unit: 'px', linked: false } }`,\n schema: responsivePaddingSchema,\n },\n },\n dimensions: {\n ai: {\n instructions: `Width/height constraints for the flex container.\nExample: { xs: { mode: 'contained', maxWidth: { value: 600, unit: 'px', enabled: true }, alignment: 'center' } }`,\n schema: responsiveDimensionsSchema,\n },\n },\n animation: {\n ai: {\n instructions: `Entrance animation for the flex container. Use for key content groups.\nExample: { mode: 'preset', entrance: 'fade-up', entranceDuration: 500, triggerOnScroll: true, triggerOnce: true }`,\n schema: animationSchema,\n },\n },\n visibility: {\n ai: {\n instructions: `Show/hide at different breakpoints.\nExample: { xs: true, sm: true, md: true, lg: true, xl: true }`,\n schema: visibilitySchema,\n },\n },\n },\n },\n\n Grid: {\n ai: {\n instructions: `Grid component for multi-column card/item layouts.\n\nPURPOSE:\n- Display items in a responsive grid\n- Feature cards, team members, product listings\n- Image galleries, testimonial grids\n\nUSAGE GUIDELINES:\n- Use for 2-4 column layouts with equal-width items\n- Grid automatically stacks to single column on mobile\n- NEVER place Section inside Grid\n\nCOMMON PATTERNS:\n- Feature Grid: Grid (3 columns) > Card + Card + Card\n- Team Grid: Grid (4 columns) > Card + Card + Card + Card\n- Pricing Grid: Grid (3 columns) > Card (pricing tier) x 3\n- Gallery: Grid (2-3 columns) > Image + Image + Image\n\nRECOMMENDED VALUES:\n- numColumns: 2 (comparison), 3 (features/pricing), 4 (team/gallery)\n- gap: 16 (tight), 24 (comfortable), 32 (spacious)\n\nCOMPOSITION:\n- Section > Grid > Cards (for feature/team sections)\n- Section > Heading + Grid > Items (for titled grid sections)`,\n },\n fields: {\n content: {\n ai: {\n required: true,\n instructions:\n 'Slot for child components (usually Cards). Cannot contain Section components.',\n },\n },\n numColumns: {\n ai: {\n instructions: 'Number of columns (1-12). Common: 2, 3, or 4. Default: 3.',\n },\n },\n gap: {\n ai: {\n instructions: 'Space between grid items in pixels. Common: 16, 24, 32. Default: 16.',\n },\n },\n semanticElement: {\n ai: {\n instructions: \"'div' (default), 'ul' or 'ol' for list semantics.\",\n },\n },\n background: {\n ai: {\n instructions: `Background for the grid container. Use for grouped content with visual emphasis.\nExample: { type: 'solid', solid: { hex: '#fafafa' } }`,\n schema: backgroundSchema,\n },\n },\n border: {\n ai: {\n instructions: `Border styling for the grid container.\nExample: { style: 'solid', width: 1, color: { hex: '#e5e7eb' }, radius: 16, sides: { top: true, right: true, bottom: true, left: true } }`,\n schema: borderSchema,\n },\n },\n customPadding: {\n ai: {\n instructions: `Padding inside the grid container.\nExample: { xs: { top: 24, right: 24, bottom: 24, left: 24, unit: 'px', linked: true } }`,\n schema: responsivePaddingSchema,\n },\n },\n margin: {\n ai: {\n instructions: `Margin outside the grid container.\nExample: { xs: { top: 0, right: 0, bottom: 24, left: 0, unit: 'px', linked: false } }`,\n schema: responsivePaddingSchema,\n },\n },\n dimensions: {\n ai: {\n instructions: `Width/height constraints for the grid container.\nExample: { xs: { mode: 'contained', maxWidth: { value: 1000, unit: 'px', enabled: true }, alignment: 'center' } }`,\n schema: responsiveDimensionsSchema,\n },\n },\n animation: {\n ai: {\n instructions: `Entrance animation for the grid container. Use for key content groups.\nExample: { mode: 'preset', entrance: 'fade-up', entranceDuration: 500, triggerOnScroll: true, triggerOnce: true }`,\n schema: animationSchema,\n },\n },\n visibility: {\n ai: {\n instructions: `Show/hide at different breakpoints.\nExample: { xs: true, sm: true, md: true, lg: true, xl: true }`,\n schema: visibilitySchema,\n },\n },\n },\n },\n\n Spacer: {\n ai: {\n instructions: `Spacer component for adding vertical/horizontal space.\n\nPURPOSE:\n- Add breathing room between components\n- Create visual separation without borders\n- Fine-tune spacing beyond component margins\n\nUSAGE GUIDELINES:\n- Use sparingly - prefer component margin/padding when possible\n- Good for adding extra space between sections or within sections\n- Available sizes: 8, 16, 24, 32, 48, 64, 80, 96, 128 pixels\n\nWHEN TO USE:\n- Extra space between a heading and content\n- Separation between distinct content groups\n- When section padding alone isn't enough\n\nWHEN NOT TO USE:\n- Don't overuse - proper component spacing should suffice\n- Not for separating sections (use Section padding instead)`,\n },\n fields: {\n size: {\n ai: {\n instructions:\n 'Space in pixels: 8, 16, 24, 32 (small), 48, 64 (medium), 80, 96, 128 (large).',\n },\n },\n direction: {\n ai: {\n instructions: \"'vertical' (default), 'horizontal', or 'both'.\",\n },\n },\n },\n },\n}\n\n/**\n * Layout component names for reference\n */\nexport const layoutComponents = ['Section', 'Container', 'Flex', 'Grid', 'Spacer'] as const\n"],"names":["backgroundSchema","borderSchema","responsivePaddingSchema","responsiveDimensionsSchema","animationSchema","visibilitySchema","justifyContentSchema","alignItemsSchema","layoutInstructions","Section","ai","instructions","fields","content","required","semanticElement","id","sectionBackground","schema","sectionPadding","sectionMargin","contentDimensions","contentBackground","contentPadding","contentBorder","animation","visibility","Container","background","border","padding","dimensions","margin","Flex","direction","justifyContent","alignItems","gap","wrap","customPadding","Grid","numColumns","Spacer","size","layoutComponents"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../../src/ai/presets/instructions/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAG1D;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,oBA8H/B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,gCAAiC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/ai/presets/instructions/media.ts"],"sourcesContent":["import type { ComponentAiOverrides } from '../../types.js'\nimport { alignmentSchema, transformSchema } from './schemas.js'\n\n/**\n * Comprehensive AI instructions for media components\n *\n * These instructions teach the AI:\n * - Image and Template component usage\n * - Limitations (AI cannot select from media library)\n * - When and how to use these components\n */\nexport const mediaInstructions: ComponentAiOverrides = {\n Image: {\n ai: {\n instructions: `Image component for displaying images from the media library.\n\nPURPOSE:\n- Hero background images\n- Feature illustrations\n- Product photos\n- Team member avatars\n- Gallery images\n\nIMPORTANT LIMITATION:\nAI cannot select actual images from the media library. When generating pages:\n- The Image component can be placed in the layout\n- Users must manually select the image from the media library afterward\n- AI can suggest appropriate alt text describing what image should be there\n\nASPECT RATIOS:\n- 'auto': Original image proportions\n- '1:1': Square (avatars, product thumbnails)\n- '16:9': Widescreen (hero images, video thumbnails)\n- '4:3': Traditional (photos, cards)\n- '3:2': Photography standard\n\nUSAGE PATTERNS:\n- Hero Image: 16:9 ratio, full width\n- Team Avatar: 1:1 ratio, smaller dimensions\n- Product Photo: 4:3 or 1:1 ratio\n- Gallery Image: auto or 4:3 ratio\n\nCOMPOSITION:\n- Section > Image (for full-width hero images)\n- Card > Image (automatically uses card's image field)\n- Grid > Image + Image + Image (for galleries)\n- Flex (row) > Image + Content (for side-by-side layouts)`,\n },\n fields: {\n image: {\n ai: {\n exclude: true,\n instructions:\n 'AI cannot select images from media library. Leave this for users to fill in.',\n },\n },\n alt: {\n ai: {\n instructions:\n 'Descriptive alt text for accessibility. Describe what the image should show, e.g., \"Team members collaborating in modern office\".',\n },\n },\n aspectRatio: {\n ai: {\n instructions:\n \"'auto', '1:1' (square), '16:9' (widescreen), '4:3' (traditional), '3:2' (photo). Use '16:9' for hero images, '1:1' for avatars.\",\n },\n },\n link: {\n ai: {\n instructions: 'Optional URL to make image clickable.',\n },\n },\n openInNewTab: {\n ai: {\n instructions: \"'yes' or 'no'. Only relevant if link is provided.\",\n },\n },\n alignment: {\n ai: {\n instructions: \"'left', 'center' (default), or 'right'.\",\n schema: alignmentSchema,\n },\n },\n transform: {\n ai: {\n instructions: `CSS transforms. Usually leave unset for images.`,\n schema: transformSchema,\n },\n },\n },\n },\n\n Template: {\n ai: {\n instructions: `Template component for inserting saved page templates.\n\nPURPOSE:\n- Reuse common page sections across pages\n- Insert pre-built layouts\n- Maintain consistency across pages\n\nIMPORTANT LIMITATION:\nAI cannot select actual templates from the template library. When generating pages:\n- The Template component can be placed in the layout\n- Users must manually select the template afterward\n- Consider building sections directly instead of using Template placeholders\n\nWHEN TO USE:\n- When a pre-built section exists that matches the need\n- For complex layouts that have been saved as templates\n- For maintaining brand consistency\n\nWHEN NOT TO USE:\n- When building a custom section is more appropriate\n- When the needed layout doesn't exist as a template\n- For simple sections that can be built quickly\n\nRECOMMENDATION:\nIn most cases, build sections directly using Section, Flex, Grid, and other components\nrather than relying on Template placeholders that users must configure later.`,\n },\n fields: {\n templateId: {\n ai: {\n exclude: true,\n instructions:\n 'AI cannot select templates from the library. Leave for users to fill in.',\n },\n },\n content: {\n ai: {\n instructions: 'Slot for template content. Usually auto-populated from selected template.',\n },\n },\n },\n },\n}\n\n/**\n * Media component names for reference\n */\nexport const mediaComponents = ['Image', 'Template'] as const\n"],"names":["alignmentSchema","transformSchema","mediaInstructions","Image","ai","instructions","fields","image","exclude","alt","aspectRatio","link","openInNewTab","alignment","schema","transform","Template","templateId","content","mediaComponents"],"mappings":"AACA,SAASA,eAAe,EAAEC,eAAe,QAAQ,eAAc;AAE/D;;;;;;;CAOC,GACD,OAAO,MAAMC,oBAA0C;IACrDC,OAAO;QACLC,IAAI;YACFC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yDAgCoC,CAAC;QACtD;QACAC,QAAQ;YACNC,OAAO;gBACLH,IAAI;oBACFI,SAAS;oBACTH,cACE;gBACJ;YACF;YACAI,KAAK;gBACHL,IAAI;oBACFC,cACE;gBACJ;YACF;YACAK,aAAa;gBACXN,IAAI;oBACFC,cACE;gBACJ;YACF;YACAM,MAAM;gBACJP,IAAI;oBACFC,cAAc;gBAChB;YACF;YACAO,cAAc;gBACZR,IAAI;oBACFC,cAAc;gBAChB;YACF;YACAQ,WAAW;gBACTT,IAAI;oBACFC,cAAc;oBACdS,QAAQd;gBACV;YACF;YACAe,WAAW;gBACTX,IAAI;oBACFC,cAAc,CAAC,+CAA+C,CAAC;oBAC/DS,QAAQb;gBACV;YACF;QACF;IACF;IAEAe,UAAU;QACRZ,IAAI;YACFC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;6EAyBwD,CAAC;QAC1E;QACAC,QAAQ;YACNW,YAAY;gBACVb,IAAI;oBACFI,SAAS;oBACTH,cACE;gBACJ;YACF;YACAa,SAAS;gBACPd,IAAI;oBACFC,cAAc;gBAChB;YACF;QACF;IACF;AACF,EAAC;AAED;;CAEC,GACD,OAAO,MAAMc,kBAAkB;IAAC;IAAS;CAAW,CAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagePatterns.d.ts","sourceRoot":"","sources":["../../../../src/ai/presets/instructions/pagePatterns.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,kpOAgP9B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,+zCA8BnC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/ai/presets/instructions/pagePatterns.ts"],"sourcesContent":["/**\n * Page Patterns - System context for AI page generation\n *\n * This module provides comprehensive guidance on how to compose\n * components into complete pages and sections. This context is\n * injected into the AI system prompt to enable intelligent page generation.\n */\n\n/**\n * Comprehensive page composition patterns for AI\n *\n * This string is intended to be added to the AI system context\n * to teach it how to build complete, well-structured pages.\n */\nexport const pagePatternContext = `\n## Page Composition Guidelines\n\nWhen creating pages, follow these patterns to build professional, well-structured layouts.\n\n### Page Structure Fundamentals\n\nEVERY page should be composed of multiple Section components at the root level:\n- Pages are built by stacking Section components vertically\n- Each Section represents a distinct content area\n- Sections should NOT be nested inside other Sections\n- Use Flex and Grid INSIDE Sections for layout\n\n### Hero Section Pattern\n\nThe hero is typically the first section on a landing page.\n\nSTRUCTURE:\n\\`\\`\\`\nSection (with sectionPadding, optional sectionBackground)\n └─ Flex (direction: column, alignItems: center, gap: 24)\n ├─ Heading (level: h1, alignment: center) - Main headline\n ├─ Text (size: lg, alignment: center) - Subheadline/description\n └─ Flex (direction: row, gap: 16, justifyContent: center) - CTA buttons\n ├─ Button (variant: default, size: lg) - Primary CTA\n └─ Button (variant: outline) - Secondary CTA\n\\`\\`\\`\n\nVARIATIONS:\n- Minimal: Just Heading + Button\n- Standard: Heading + Text + Button(s)\n- Full: Heading + Text + Buttons + Image below\n\n### Features Section Pattern\n\nShowcase features, services, or benefits.\n\nSTRUCTURE:\n\\`\\`\\`\nSection (light or white background)\n ├─ Flex (direction: column, alignItems: center, gap: 16)\n │ ├─ Heading (level: h2, alignment: center) - Section title\n │ └─ Text (alignment: center) - Section description\n └─ Grid (numColumns: 3, gap: 24)\n ├─ Card (heading + text, no image)\n ├─ Card\n └─ Card\n\\`\\`\\`\n\nVARIATIONS:\n- 2 columns for comparison features\n- 3 columns for standard features (most common)\n- 4 columns for icon-style features\n\n### Testimonials Section Pattern\n\nSocial proof with customer quotes.\n\nSTRUCTURE:\n\\`\\`\\`\nSection (subtle background color for contrast)\n ├─ Heading (level: h2, alignment: center) - \"What Our Customers Say\"\n └─ Grid (numColumns: 2 or 3, gap: 24)\n ├─ Card (text: quote, heading: name + role)\n ├─ Card\n └─ Card\n\\`\\`\\`\n\n### FAQ Section Pattern\n\nFrequently asked questions with expandable answers.\n\nSTRUCTURE:\n\\`\\`\\`\nSection\n └─ Container (for constrained width)\n ├─ Heading (level: h2, alignment: center) - \"Frequently Asked Questions\"\n └─ Accordion (items array with questions/answers)\n\\`\\`\\`\n\n### CTA (Call-to-Action) Section Pattern\n\nFinal conversion section, often with contrasting background.\n\nSTRUCTURE:\n\\`\\`\\`\nSection (contrasting sectionBackground color)\n └─ Flex (direction: column, alignItems: center, gap: 24)\n ├─ Heading (level: h2, alignment: center) - Compelling headline\n ├─ Text (alignment: center) - Supporting message\n └─ Button (variant: default, size: lg) - Single strong CTA\n\\`\\`\\`\n\n### About Section Pattern\n\nCompany or personal introduction.\n\nSTRUCTURE:\n\\`\\`\\`\nSection\n └─ Flex (direction: row, gap: 48, alignItems: center)\n ├─ Image (aspectRatio: 4:3) - Team photo or illustration\n └─ Flex (direction: column, gap: 16)\n ├─ Heading (level: h2)\n ├─ Text or RichText\n └─ Button (optional)\n\\`\\`\\`\n\n### Team Section Pattern\n\nTeam members or leadership profiles.\n\nSTRUCTURE:\n\\`\\`\\`\nSection\n ├─ Heading (level: h2, alignment: center) - \"Meet Our Team\"\n └─ Grid (numColumns: 3 or 4, gap: 24)\n ├─ Card (image: avatar, heading: name, text: role)\n ├─ Card\n ├─ Card\n └─ Card\n\\`\\`\\`\n\n### Pricing Section Pattern\n\nPricing tiers or plans.\n\nSTRUCTURE:\n\\`\\`\\`\nSection\n ├─ Flex (direction: column, alignItems: center)\n │ ├─ Heading (level: h2, alignment: center) - \"Simple Pricing\"\n │ └─ Text (alignment: center) - \"Choose the plan that works for you\"\n └─ Grid (numColumns: 3, gap: 24)\n ├─ Card (heading: plan name, text: price + features)\n ├─ Card (featured tier)\n └─ Card\n\\`\\`\\`\n\n---\n\n## Page Type Templates\n\n### Landing Page Structure\n1. Hero Section (headline, subheadline, CTA buttons)\n2. Features Section (3-column grid of benefit cards)\n3. About/How It Works Section (image + text side-by-side)\n4. Testimonials Section (2-3 customer quotes)\n5. FAQ Section (common questions in accordion)\n6. CTA Section (final conversion push)\n\n### About Page Structure\n1. Hero Section (company name, mission statement)\n2. Story Section (company history/journey)\n3. Values Section (3-4 core values in cards)\n4. Team Section (team member grid)\n5. CTA Section (contact or join us)\n\n### Services Page Structure\n1. Hero Section (services overview)\n2. Services Grid (3-4 service cards)\n3. Process Section (how you work)\n4. Testimonials (client success stories)\n5. CTA Section (get started)\n\n### Contact Page Structure\n1. Hero Section (contact headline)\n2. Contact Info Section (address, phone, email)\n3. FAQ Section (common questions)\n\n---\n\n## Typography Hierarchy Rules\n\nHEADING LEVELS:\n- h1: Page title in hero (ONE per page maximum)\n- h2: Major section headings\n- h3: Card titles, subsection headings\n- h4-h6: Rarely needed, for deeply nested content\n\nTEXT SIZES:\n- xl/lg: Hero subtitles, important callouts\n- base: Body text, descriptions (default)\n- sm: Secondary text, captions\n- xs: Legal text, fine print\n\n---\n\n## Spacing Guidelines\n\nSECTION PADDING (sectionPadding):\n- Hero sections: 80-96px top/bottom\n- Standard sections: 48-64px top/bottom\n- Dense sections: 32-48px top/bottom\n\nCOMPONENT GAP:\n- Tight: 8px (buttons in a compact row)\n- Compact: 16px (related elements)\n- Comfortable: 24px (card grids, flex items)\n- Spacious: 32-48px (section content groups)\n\nGRID GAP:\n- Cards: 24px typical\n- Compact grid: 16px\n- Spacious grid: 32px\n\n---\n\n## Color & Background Strategy\n\nUse sectionBackground to create visual hierarchy and professional appearance.\n\nSECTION BACKGROUND PATTERNS:\n- Hero Section: Dark or gradient background to create impact\n- Features/Content: Light or white background\n- Testimonials: Subtle contrasting background\n- CTA Section: Brand color or contrasting background\n- Alternating: Switch between white and light gray for visual rhythm\n\nVISUAL RHYTHM:\n- Alternate section backgrounds to create clear visual separation\n- Hero sections typically have bold backgrounds (dark, gradient, or brand color)\n- Content sections typically have light/white backgrounds\n- CTA sections often use brand colors for emphasis\n\n---\n\n## Responsive Considerations\n\nGRID BEHAVIOR:\n- Grid automatically stacks to single column on mobile\n- Plan content to work in both multi-column and stacked views\n\nFLEX BEHAVIOR:\n- Row layouts wrap on narrow screens\n- Consider how button groups will stack\n\nCONTENT WIDTH:\n- Section content constrained to ~1200px max-width by default\n- Text-heavy sections might use narrower (800-900px) constraint\n`\n\n/**\n * Condensed reference for component field names\n * Useful as a quick reference in AI context\n */\nexport const componentFieldReference = `\n## Quick Field Reference\n\nBUTTON: text (required), link (required), variant (default/secondary/outline), size (sm/default/lg), openInNewTab (yes/no)\n\nCARD: heading (required), text, image (user selects), link, shadow (none/sm/md/lg/xl)\n\nHEADING: text (required), level (h1-h6), alignment (left/center/right)\n\nTEXT: content (required), size (xs/sm/base/lg/xl), alignment (left/center/right)\n\nRICHTEXT: content (required, HTML string)\n\nACCORDION: items (array of {title, content, defaultOpen}), allowMultiple (yes/no)\n\nSECTION: content (slot), semanticElement, id, sectionBackground, sectionPadding\n - sectionBackground: { type: 'solid', solid: { hex, opacity? } } or { type: 'gradient', gradient: { type, angle, stops } }\n - sectionPadding: { xs: { top, right, bottom, left, unit: 'px', linked: boolean } }\n\nFLEX: content (slot), direction (row/column), justifyContent, alignItems, gap (number), wrap (wrap/nowrap)\n - justifyContent: 'flex-start' | 'center' | 'flex-end' | 'space-between'\n - alignItems: 'flex-start' | 'center' | 'flex-end' | 'stretch'\n\nGRID: content (slot), numColumns (1-12), gap (number)\n\nSPACER: size (8/16/24/32/48/64/80/96/128), direction (vertical/horizontal/both)\n\nDIVIDER: style (solid/dashed/dotted)\n\nIMAGE: image (user selects), alt, aspectRatio (auto/1:1/16:9/4:3/3:2), link\n`\n"],"names":["pagePatternContext","componentFieldReference"],"mappings":"AAAA;;;;;;CAMC,GAED;;;;;CAKC,GACD,OAAO,MAAMA,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgPnC,CAAC,CAAA;AAED;;;CAGC,GACD,OAAO,MAAMC,0BAA0B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BxC,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/ai/presets/instructions/schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,iCAAiC;AACjC,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;CAOvB,CAAA;AAED,iDAAiD;AACjD,eAAO,MAAM,eAAe;;;;CAI3B,CAAA;AAED,4CAA4C;AAC5C,eAAO,MAAM,oBAAoB;;;;CAIhC,CAAA;AAED,wCAAwC;AACxC,eAAO,MAAM,gBAAgB;;;;CAI5B,CAAA;AAMD,0DAA0D;AAC1D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWzB,CAAA;AAED,oDAAoD;AACpD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUnC,CAAA;AAMD,0CAA0C;AAC1C,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;CAQrC,CAAA;AAED,sCAAsC;AACtC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAW5B,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUtC,CAAA;AAMD,mCAAmC;AACnC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAO9B,CAAA;AAED,oCAAoC;AACpC,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU1B,CAAA;AAED,sCAAsC;AACtC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS5B,CAAA;AAMD,kCAAkC;AAClC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBxB,CAAA;AAMD,yDAAyD;AACzD,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAe3B,CAAA;AAMD,sCAAsC;AACtC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;CAU5B,CAAA;AAMD,gCAAgC;AAChC,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWtB,CAAA;AAMD,qCAAqC;AACrC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsB3B,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/ai/presets/instructions/schemas.ts"],"sourcesContent":["/**\n * Shared JSON Schemas for AI Field Generation\n *\n * Puck Cloud requires JSON schemas for custom fields to know what format to generate.\n * These schemas are used across all component instruction files.\n */\n\n// =============================================================================\n// Basic Types\n// =============================================================================\n\n/** JSON Schema for ColorValue */\nexport const colorSchema = {\n type: 'object',\n properties: {\n hex: { type: 'string', description: 'Hex color code, e.g., \"#3b82f6\"' },\n opacity: { type: 'number', minimum: 0, maximum: 100, description: 'Opacity 0-100, default 100' },\n },\n required: ['hex'],\n}\n\n/** JSON Schema for Alignment (text alignment) */\nexport const alignmentSchema = {\n type: 'string',\n enum: ['left', 'center', 'right'],\n description: \"Text/content alignment: 'left', 'center', or 'right'\",\n}\n\n/** JSON Schema for JustifyContent (flex) */\nexport const justifyContentSchema = {\n type: 'string',\n enum: ['flex-start', 'center', 'flex-end', 'space-between', 'space-around'],\n description: 'Main-axis distribution: flex-start (default), center, flex-end, space-between, space-around',\n}\n\n/** JSON Schema for AlignItems (flex) */\nexport const alignItemsSchema = {\n type: 'string',\n enum: ['flex-start', 'center', 'flex-end', 'stretch'],\n description: 'Cross-axis alignment: flex-start, center, flex-end, stretch',\n}\n\n// =============================================================================\n// Padding/Margin Types\n// =============================================================================\n\n/** JSON Schema for PaddingValue (also used for margin) */\nexport const paddingSchema = {\n type: 'object',\n properties: {\n top: { type: 'number', description: 'Top padding in units' },\n right: { type: 'number', description: 'Right padding in units' },\n bottom: { type: 'number', description: 'Bottom padding in units' },\n left: { type: 'number', description: 'Left padding in units' },\n unit: { type: 'string', enum: ['px', 'rem', 'em', '%'], description: 'Unit for all values' },\n linked: { type: 'boolean', description: 'Whether all sides sync together' },\n },\n required: ['top', 'right', 'bottom', 'left', 'unit'],\n}\n\n/** JSON Schema for ResponsiveValue<PaddingValue> */\nexport const responsivePaddingSchema = {\n type: 'object',\n properties: {\n xs: { ...paddingSchema, description: 'Base (mobile) value - required' },\n sm: { ...paddingSchema, description: 'Small screens (640px+) - optional override' },\n md: { ...paddingSchema, description: 'Medium screens (768px+) - optional override' },\n lg: { ...paddingSchema, description: 'Large screens (1024px+) - optional override' },\n xl: { ...paddingSchema, description: 'Extra large screens (1280px+) - optional override' },\n },\n required: ['xs'],\n}\n\n// =============================================================================\n// Dimensions Types\n// =============================================================================\n\n/** JSON Schema for DimensionConstraint */\nexport const dimensionConstraintSchema = {\n type: 'object',\n properties: {\n value: { type: 'number', description: 'Numeric value' },\n unit: { type: 'string', enum: ['px', 'rem', '%', 'vw', 'vh'], description: 'CSS unit' },\n enabled: { type: 'boolean', description: 'Whether this constraint is active' },\n },\n required: ['value', 'unit', 'enabled'],\n}\n\n/** JSON Schema for DimensionsValue */\nexport const dimensionsSchema = {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['full', 'contained', 'custom'], description: 'Width mode' },\n alignment: { type: 'string', enum: ['left', 'center', 'right'], description: 'Content alignment' },\n maxWidth: { ...dimensionConstraintSchema, description: 'Maximum width constraint' },\n minWidth: { ...dimensionConstraintSchema, description: 'Minimum width constraint (optional)' },\n minHeight: { ...dimensionConstraintSchema, description: 'Minimum height constraint (optional)' },\n maxHeight: { ...dimensionConstraintSchema, description: 'Maximum height constraint (optional)' },\n },\n required: ['mode', 'alignment', 'maxWidth'],\n}\n\n/** JSON Schema for ResponsiveValue<DimensionsValue> */\nexport const responsiveDimensionsSchema = {\n type: 'object',\n properties: {\n xs: { ...dimensionsSchema, description: 'Base (mobile) value - required' },\n sm: { ...dimensionsSchema, description: 'Small screens (640px+) - optional override' },\n md: { ...dimensionsSchema, description: 'Medium screens (768px+) - optional override' },\n lg: { ...dimensionsSchema, description: 'Large screens (1024px+) - optional override' },\n xl: { ...dimensionsSchema, description: 'Extra large screens (1280px+) - optional override' },\n },\n required: ['xs'],\n}\n\n// =============================================================================\n// Background Types\n// =============================================================================\n\n/** JSON Schema for GradientStop */\nexport const gradientStopSchema = {\n type: 'object',\n properties: {\n color: colorSchema,\n position: { type: 'number', minimum: 0, maximum: 100, description: 'Position 0-100%' },\n },\n required: ['color', 'position'],\n}\n\n/** JSON Schema for GradientValue */\nexport const gradientSchema = {\n type: 'object',\n properties: {\n type: { type: 'string', enum: ['linear', 'radial'], description: 'Gradient type' },\n angle: { type: 'number', minimum: 0, maximum: 360, description: 'Angle in degrees (linear)' },\n stops: { type: 'array', items: gradientStopSchema, description: 'Color stops' },\n radialShape: { type: 'string', enum: ['circle', 'ellipse'], description: 'Radial shape' },\n radialPosition: { type: 'string', enum: ['center', 'top', 'bottom', 'left', 'right'] },\n },\n required: ['type', 'stops'],\n}\n\n/** JSON Schema for BackgroundValue */\nexport const backgroundSchema = {\n type: 'object',\n properties: {\n type: { type: 'string', enum: ['none', 'solid', 'gradient', 'image'], description: 'Background type' },\n solid: { ...colorSchema, description: 'Solid color (when type=\"solid\")' },\n gradient: { ...gradientSchema, description: 'Gradient (when type=\"gradient\")' },\n // Note: image backgrounds require media selection, AI should use solid/gradient\n },\n required: ['type'],\n}\n\n// =============================================================================\n// Border Types\n// =============================================================================\n\n/** JSON Schema for BorderValue */\nexport const borderSchema = {\n type: 'object',\n properties: {\n style: { type: 'string', enum: ['none', 'solid', 'dashed', 'dotted'], description: 'Border style' },\n width: { type: 'number', description: 'Border width in pixels' },\n color: { ...colorSchema, description: 'Border color' },\n radius: { type: 'number', description: 'Border radius in pixels' },\n sides: {\n type: 'object',\n properties: {\n top: { type: 'boolean' },\n right: { type: 'boolean' },\n bottom: { type: 'boolean' },\n left: { type: 'boolean' },\n },\n description: 'Which sides have borders',\n },\n },\n required: ['style', 'width', 'radius', 'sides'],\n}\n\n// =============================================================================\n// Animation Types\n// =============================================================================\n\n/** JSON Schema for AnimationValue (simplified for AI) */\nexport const animationSchema = {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['preset', 'custom'], description: 'Animation mode' },\n entrance: {\n type: 'string',\n enum: ['none', 'fade-in', 'fade-up', 'fade-down', 'fade-left', 'fade-right', 'fade-scale',\n 'scale-in', 'scale-up', 'scale-down', 'slide-up', 'slide-down', 'slide-left', 'slide-right'],\n description: 'Entrance animation preset',\n },\n entranceDuration: { type: 'number', description: 'Duration in ms, default 500' },\n entranceDelay: { type: 'number', description: 'Delay in ms, default 0' },\n triggerOnScroll: { type: 'boolean', description: 'Trigger when scrolled into view' },\n triggerOnce: { type: 'boolean', description: 'Only animate once' },\n },\n}\n\n// =============================================================================\n// Visibility Types\n// =============================================================================\n\n/** JSON Schema for VisibilityValue */\nexport const visibilitySchema = {\n type: 'object',\n properties: {\n xs: { type: 'boolean', description: 'Visible on mobile (default true)' },\n sm: { type: 'boolean', description: 'Visible on small screens 640px+' },\n md: { type: 'boolean', description: 'Visible on medium screens 768px+' },\n lg: { type: 'boolean', description: 'Visible on large screens 1024px+' },\n xl: { type: 'boolean', description: 'Visible on extra large screens 1280px+' },\n },\n required: ['xs'],\n}\n\n// =============================================================================\n// Size Types (for Button, etc.)\n// =============================================================================\n\n/** JSON Schema for SizeValue */\nexport const sizeSchema = {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['sm', 'default', 'lg', 'custom'], description: 'Size preset or custom' },\n height: { type: 'number', description: 'Custom height in units (only when mode=\"custom\")' },\n paddingX: { type: 'number', description: 'Custom horizontal padding (only when mode=\"custom\")' },\n paddingY: { type: 'number', description: 'Custom vertical padding (only when mode=\"custom\")' },\n fontSize: { type: 'number', description: 'Custom font size (only when mode=\"custom\")' },\n unit: { type: 'string', enum: ['px', 'rem'], description: 'Unit for custom values' },\n },\n required: ['mode'],\n}\n\n// =============================================================================\n// Transform Types\n// =============================================================================\n\n/** JSON Schema for TransformValue */\nexport const transformSchema = {\n type: 'object',\n properties: {\n rotate: { type: 'number', minimum: -360, maximum: 360, description: 'Rotation in degrees' },\n scaleX: { type: 'number', minimum: 0.1, maximum: 3, description: 'Horizontal scale factor' },\n scaleY: { type: 'number', minimum: 0.1, maximum: 3, description: 'Vertical scale factor' },\n scaleLocked: { type: 'boolean', description: 'Lock X and Y scale together' },\n skewX: { type: 'number', minimum: -45, maximum: 45, description: 'Horizontal skew in degrees' },\n skewY: { type: 'number', minimum: -45, maximum: 45, description: 'Vertical skew in degrees' },\n translateX: { type: 'number', description: 'Horizontal translation' },\n translateY: { type: 'number', description: 'Vertical translation' },\n translateUnit: { type: 'string', enum: ['px', 'rem', '%'], description: 'Unit for translation' },\n origin: {\n type: 'string',\n enum: ['center', 'top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right'],\n description: 'Transform origin point',\n },\n enable3D: { type: 'boolean', description: 'Enable 3D transforms' },\n perspective: { type: 'number', description: '3D perspective in pixels' },\n rotateX: { type: 'number', description: '3D rotation around X axis' },\n rotateY: { type: 'number', description: '3D rotation around Y axis' },\n },\n}\n"],"names":["colorSchema","type","properties","hex","description","opacity","minimum","maximum","required","alignmentSchema","enum","justifyContentSchema","alignItemsSchema","paddingSchema","top","right","bottom","left","unit","linked","responsivePaddingSchema","xs","sm","md","lg","xl","dimensionConstraintSchema","value","enabled","dimensionsSchema","mode","alignment","maxWidth","minWidth","minHeight","maxHeight","responsiveDimensionsSchema","gradientStopSchema","color","position","gradientSchema","angle","stops","items","radialShape","radialPosition","backgroundSchema","solid","gradient","borderSchema","style","width","radius","sides","animationSchema","entrance","entranceDuration","entranceDelay","triggerOnScroll","triggerOnce","visibilitySchema","sizeSchema","height","paddingX","paddingY","fontSize","transformSchema","rotate","scaleX","scaleY","scaleLocked","skewX","skewY","translateX","translateY","translateUnit","origin","enable3D","perspective","rotateX","rotateY"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"typography.d.ts","sourceRoot":"","sources":["../../../../src/ai/presets/instructions/typography.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAG1D;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,EAAE,oBAwLpC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,0CAA2C,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/ai/presets/instructions/typography.ts"],"sourcesContent":["import type { ComponentAiOverrides } from '../../types.js'\nimport { colorSchema, alignmentSchema } from './schemas.js'\n\n/**\n * Comprehensive AI instructions for typography components\n *\n * These instructions teach the AI:\n * - What each component is for\n * - Correct field names and values\n * - When to use each component\n * - How to compose them with other components\n */\nexport const typographyInstructions: ComponentAiOverrides = {\n Heading: {\n ai: {\n instructions: `Heading component for titles and section headings.\n\nPURPOSE:\n- Page titles, section headings, and subsection titles\n- Establishes content hierarchy and structure\n- Improves accessibility and SEO\n\nUSAGE GUIDELINES:\n- Use h1 ONLY ONCE per page for the main page title (in the hero section)\n- Use h2 for major section headings (Features, Testimonials, FAQ, etc.)\n- Use h3 for subsection headings or card titles within sections\n- Use h4-h6 rarely, only for deeply nested content\n\nCOMMON PATTERNS:\n- Hero headline: h1 level, centered alignment\n- Section title: h2 level, often centered\n- Card/feature title: h3 level, left or center aligned\n- Sidebar heading: h4 level\n\nCOMPOSITION:\n- Place inside Section > Container for centered section headings\n- Place inside Flex (column) for grouped text content\n- Pair with Text component for headline + description combos`,\n },\n fields: {\n text: {\n ai: {\n required: true,\n instructions:\n 'The heading text content. Keep headlines concise and impactful - typically 3-8 words for h1/h2, can be longer for h3+.',\n },\n },\n level: {\n ai: {\n instructions:\n 'Heading level (h1-h6). Follow hierarchy: h1 once for page title, h2 for sections, h3 for subsections. Default: h2.',\n },\n },\n textColor: {\n ai: {\n instructions: `Optional text color. Use for emphasis or brand colors.\nExample: { hex: '#3b82f6', opacity: 100 }`,\n schema: colorSchema,\n },\n },\n alignment: {\n ai: {\n instructions:\n \"Text alignment: 'left', 'center', or 'right'. Use 'center' for hero/section headings, 'left' for content areas.\",\n schema: alignmentSchema,\n },\n },\n },\n },\n\n Text: {\n ai: {\n instructions: `Text component for paragraphs and body content.\n\nPURPOSE:\n- Body text, descriptions, and supporting content\n- Single paragraphs or short text blocks\n- Subtitles and secondary text under headings\n\nUSAGE GUIDELINES:\n- Use for 1-3 paragraphs of plain text\n- For longer formatted content with lists/links, use RichText instead\n- Size options: xs, sm, base (default), lg, xl\n\nCOMMON PATTERNS:\n- Hero subtitle: lg or xl size, centered, below h1\n- Section description: base size, centered, below h2\n- Card description: sm or base size, left-aligned\n- Feature text: base size, often paired with heading\n\nCOMPOSITION:\n- Usually follows a Heading component\n- Place inside Flex (column) with Heading for text blocks\n- Place inside Card for card descriptions`,\n },\n fields: {\n content: {\n ai: {\n required: true,\n instructions:\n 'The text content. Write clear, concise copy. Use line breaks for multiple paragraphs if needed.',\n },\n },\n size: {\n ai: {\n instructions:\n \"Text size: 'xs', 'sm', 'base' (default), 'lg', 'xl'. Use 'lg' or 'xl' for hero subtitles, 'sm' for secondary text.\",\n },\n },\n textColor: {\n ai: {\n instructions: `Optional text color. Use for emphasis or brand colors.\nExample: { hex: '#64748b', opacity: 100 }`,\n schema: colorSchema,\n },\n },\n alignment: {\n ai: {\n instructions:\n \"Text alignment: 'left', 'center', or 'right'. Match the alignment of the heading above it.\",\n schema: alignmentSchema,\n },\n },\n },\n },\n\n RichText: {\n ai: {\n instructions: `RichText component - TipTap-powered rich text with advanced formatting.\n\nPURPOSE:\n- Long-form content with sophisticated formatting\n- Content needing font sizes, colors, highlights\n- Blog posts, about pages, formatted descriptions\n- Any content needing more than plain text\n\nUSAGE GUIDELINES:\n- Use RichText over Text when you need ANY formatting\n- Supports font sizes from xs to 5xl\n- Supports text colors with opacity\n- Supports highlights/background colors\n- Content is HTML with data attributes for styling\n\nTIPTAP FEATURES AVAILABLE:\n- Font sizes: text-xs, text-sm, text-base, text-lg, text-xl, text-2xl, text-3xl, text-4xl, text-5xl\n- Text colors: Any hex color with opacity (via data attributes)\n- Highlights: Background color highlights on text\n- Formatting: bold, italic, underline, strikethrough\n- Special: superscript, subscript\n- Blocks: blockquotes, code blocks\n- Lists: bullet lists, numbered lists\n- Links: clickable hyperlinks\n\nCOMMON PATTERNS:\n- Hero subtitle with large colorful text\n- Feature descriptions with highlights\n- Blog content with mixed formatting\n- FAQ answers with styled callouts\n- About page with branded text colors\n\nHTML STRUCTURE:\n- <p>Paragraph text</p>\n- <p><span style=\"font-size:...\">Sized text</span></p>\n- <p><span style=\"color:...\">Colored text</span></p>\n- <p><mark>Highlighted text</mark></p>\n- <ul><li>Bullet item</li></ul>\n- <ol><li>Numbered item</li></ol>\n- <blockquote>Quote text</blockquote>\n- <pre><code>Code block</code></pre>\n- <a href=\"url\">Link text</a>\n- <strong>Bold</strong>, <em>Italic</em>, <u>Underline</u>, <s>Strikethrough</s>\n- <sup>Superscript</sup>, <sub>Subscript</sub>\n\nCOMPOSITION:\n- Place inside Container for constrained width\n- Use in Accordion items for formatted FAQ answers\n- Combine with Section backgrounds for contrast`,\n },\n fields: {\n content: {\n ai: {\n required: true,\n schema: { type: 'string' },\n instructions: `HTML content for the TipTap rich text editor. Structure with proper HTML tags:\n- <p>Paragraph text</p>\n- <p><span style=\"font-size: 1.5rem\">Large text</span></p>\n- <p><span style=\"color: #3b82f6\">Colored text</span></p>\n- <ul><li>Bullet item</li></ul>\n- <ol><li>Numbered item</li></ol>\n- <blockquote>Quote</blockquote>\n- <a href=\"url\">Link text</a>\n- <strong>Bold</strong>, <em>Italic</em>`,\n },\n },\n },\n },\n}\n\n/**\n * Typography component names for reference\n */\nexport const typographyComponents = ['Heading', 'Text', 'RichText'] as const\n"],"names":["colorSchema","alignmentSchema","typographyInstructions","Heading","ai","instructions","fields","text","required","level","textColor","schema","alignment","Text","content","size","RichText","type","typographyComponents"],"mappings":"AACA,SAASA,WAAW,EAAEC,eAAe,QAAQ,eAAc;AAE3D;;;;;;;;CAQC,GACD,OAAO,MAAMC,yBAA+C;IAC1DC,SAAS;QACPC,IAAI;YACFC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;4DAsBuC,CAAC;QACzD;QACAC,QAAQ;YACNC,MAAM;gBACJH,IAAI;oBACFI,UAAU;oBACVH,cACE;gBACJ;YACF;YACAI,OAAO;gBACLL,IAAI;oBACFC,cACE;gBACJ;YACF;YACAK,WAAW;gBACTN,IAAI;oBACFC,cAAc,CAAC;yCACgB,CAAC;oBAChCM,QAAQX;gBACV;YACF;YACAY,WAAW;gBACTR,IAAI;oBACFC,cACE;oBACFM,QAAQV;gBACV;YACF;QACF;IACF;IAEAY,MAAM;QACJT,IAAI;YACFC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;yCAqBoB,CAAC;QACtC;QACAC,QAAQ;YACNQ,SAAS;gBACPV,IAAI;oBACFI,UAAU;oBACVH,cACE;gBACJ;YACF;YACAU,MAAM;gBACJX,IAAI;oBACFC,cACE;gBACJ;YACF;YACAK,WAAW;gBACTN,IAAI;oBACFC,cAAc,CAAC;yCACgB,CAAC;oBAChCM,QAAQX;gBACV;YACF;YACAY,WAAW;gBACTR,IAAI;oBACFC,cACE;oBACFM,QAAQV;gBACV;YACF;QACF;IACF;IAEAe,UAAU;QACRZ,IAAI;YACFC,cAAc,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CAgD0B,CAAC;QAC5C;QACAC,QAAQ;YACNQ,SAAS;gBACPV,IAAI;oBACFI,UAAU;oBACVG,QAAQ;wBAAEM,MAAM;oBAAS;oBACzBZ,cAAc,CAAC;;;;;;;;wCAQe,CAAC;gBACjC;YACF;QACF;IACF;AACF,EAAC;AAED;;CAEC,GACD,OAAO,MAAMa,uBAAuB;IAAC;IAAW;IAAQ;CAAW,CAAS"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ai/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AAoBxD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE/C;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IAExB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAmL/F;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElG"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/ai/tools/index.ts"],"sourcesContent":["/**\n * Pre-built AI tools for Payload CMS integration\n *\n * These tools allow the AI to query your Payload database during page generation,\n * enabling it to use real content instead of placeholder text.\n *\n * @example\n * ```typescript\n * import { createPayloadTools } from '@delmaredigital/payload-puck/ai'\n *\n * createPuckPlugin({\n * ai: {\n * enabled: true,\n * tools: createPayloadTools({\n * collections: ['products', 'team-members', 'testimonials'],\n * media: true,\n * pages: 'pages',\n * }),\n * },\n * })\n * ```\n */\n\nimport { z } from 'zod'\nimport type { AiTool, AiToolContext } from '../types.js'\n\n// Input types for the tools\ninterface CollectionQueryInput {\n limit?: number\n where?: Record<string, unknown>\n search?: string\n}\n\ninterface MediaQueryInput {\n search?: string\n mimeType?: string\n limit?: number\n}\n\ninterface PagesQueryInput {\n search?: string\n limit?: number\n}\n\n/**\n * Configuration for createPayloadTools\n */\nexport interface PayloadToolsConfig {\n /**\n * Collections the AI can query.\n * Pass an array of collection slugs, or an object mapping slugs to descriptions.\n *\n * @example\n * ```typescript\n * // Simple - just collection names\n * collections: ['products', 'team-members']\n *\n * // With descriptions - helps AI understand when to use each\n * collections: {\n * products: 'Product catalog with name, price, description, and image',\n * 'team-members': 'Staff profiles with name, role, bio, and headshot',\n * }\n * ```\n */\n collections?: string[] | Record<string, string>\n\n /**\n * Enable media library tool.\n * When true, AI can search for images by filename or alt text.\n * @default false\n */\n media?: boolean | string // true uses 'media', string specifies collection slug\n\n /**\n * Pages collection slug for internal linking.\n * When set, AI can look up page URLs for navigation/links.\n */\n pages?: string\n\n /**\n * Globals the AI can read.\n * Useful for site settings, contact info, etc.\n *\n * @example\n * ```typescript\n * globals: ['site-settings', 'contact-info']\n * ```\n */\n globals?: string[]\n}\n\n/**\n * Creates a set of AI tools for querying Payload CMS\n *\n * IMPORTANT: These tools need the `payload` instance at runtime.\n * The plugin automatically injects `payload` into the tool execution context.\n *\n * @example\n * ```typescript\n * import { createPayloadTools } from '@delmaredigital/payload-puck/ai'\n *\n * createPuckPlugin({\n * ai: {\n * enabled: true,\n * context: 'You are building pages for Acme Corp...',\n * tools: createPayloadTools({\n * collections: {\n * products: 'Products with name, price, description, and image',\n * testimonials: 'Customer testimonials with quote, author, and company',\n * },\n * media: true,\n * pages: 'pages',\n * globals: ['site-settings'],\n * }),\n * },\n * })\n * ```\n */\nexport function createPayloadTools(config: PayloadToolsConfig): Record<string, AiTool<any, any>> {\n const tools: Record<string, AiTool<any, any>> = {}\n\n // Collection query tools\n if (config.collections) {\n const collections = Array.isArray(config.collections)\n ? Object.fromEntries(config.collections.map((c) => [c, `Items from the ${c} collection`]))\n : config.collections\n\n for (const [slug, description] of Object.entries(collections)) {\n const toolName = `get${slug.charAt(0).toUpperCase()}${slug.slice(1).replace(/-([a-z])/g, (_, c) => c.toUpperCase())}`\n\n tools[toolName] = {\n description: `Query ${slug} collection. ${description}`,\n inputSchema: z.object({\n limit: z.number().optional().describe('Maximum number of items to return (default: 10)'),\n where: z\n .record(z.string(), z.unknown())\n .optional()\n .describe('Payload where query for filtering results'),\n search: z.string().optional().describe('Search term to filter by title/name fields'),\n }),\n execute: async (input: CollectionQueryInput, context?: AiToolContext) => {\n if (!context?.payload) {\n throw new Error('Payload instance not available in tool context')\n }\n const { payload } = context\n\n const query: {\n collection: string\n limit: number\n where?: Record<string, unknown>\n } = {\n collection: slug,\n limit: input.limit || 10,\n }\n\n if (input.where) {\n query.where = input.where\n }\n\n // If search is provided, try common text fields\n if (input.search) {\n query.where = {\n or: [\n { title: { contains: input.search } },\n { name: { contains: input.search } },\n { label: { contains: input.search } },\n ],\n }\n }\n\n const result = await payload.find(query as any)\n return result.docs\n },\n }\n }\n }\n\n // Media library tool\n if (config.media) {\n const mediaCollection = typeof config.media === 'string' ? config.media : 'media'\n\n tools.getMedia = {\n description:\n 'Search the media library for images. Returns URLs and metadata for matching images.',\n inputSchema: z.object({\n search: z.string().optional().describe('Search by filename or alt text'),\n mimeType: z.string().optional().describe('Filter by MIME type (e.g., \"image/jpeg\")'),\n limit: z.number().optional().describe('Maximum number of results (default: 10)'),\n }),\n execute: async (input: MediaQueryInput, context?: AiToolContext) => {\n if (!context?.payload) {\n throw new Error('Payload instance not available in tool context')\n }\n const { payload } = context\n\n const query: {\n collection: string\n limit: number\n where?: Record<string, unknown>\n } = {\n collection: mediaCollection,\n limit: input.limit || 10,\n }\n\n const conditions: Record<string, unknown>[] = []\n\n if (input.search) {\n conditions.push(\n { filename: { contains: input.search } },\n { alt: { contains: input.search } }\n )\n }\n\n if (input.mimeType) {\n conditions.push({ mimeType: { equals: input.mimeType } })\n }\n\n if (conditions.length > 0) {\n query.where = input.search ? { or: conditions } : { and: conditions }\n }\n\n const result = await payload.find(query as any)\n return result.docs.map((doc: any) => ({\n id: doc.id,\n url: doc.url,\n filename: doc.filename,\n alt: doc.alt,\n width: doc.width,\n height: doc.height,\n mimeType: doc.mimeType,\n }))\n },\n }\n }\n\n // Pages tool for internal linking\n if (config.pages) {\n tools.getPages = {\n description:\n 'Look up existing pages for internal linking. Returns page titles, slugs, and URLs.',\n inputSchema: z.object({\n search: z.string().optional().describe('Search by page title'),\n limit: z.number().optional().describe('Maximum number of results (default: 10)'),\n }),\n execute: async (input: PagesQueryInput, context?: AiToolContext) => {\n if (!context?.payload) {\n throw new Error('Payload instance not available in tool context')\n }\n const { payload } = context\n\n const query: {\n collection: string\n limit: number\n where?: Record<string, unknown>\n } = {\n collection: config.pages!,\n limit: input.limit || 10,\n }\n\n if (input.search) {\n query.where = {\n or: [{ title: { contains: input.search } }, { slug: { contains: input.search } }],\n }\n }\n\n const result = await payload.find(query as any)\n return result.docs.map((doc: any) => ({\n id: doc.id,\n title: doc.title,\n slug: doc.slug,\n url: `/${doc.slug}`,\n }))\n },\n }\n }\n\n // Globals tools\n if (config.globals && config.globals.length > 0) {\n for (const globalSlug of config.globals) {\n const toolName = `get${globalSlug.charAt(0).toUpperCase()}${globalSlug.slice(1).replace(/-([a-z])/g, (_, c) => c.toUpperCase())}`\n\n tools[toolName] = {\n description: `Get ${globalSlug} global data (site-wide settings/configuration)`,\n inputSchema: z.object({}),\n execute: async (_input: Record<string, never>, context?: AiToolContext) => {\n if (!context?.payload) {\n throw new Error('Payload instance not available in tool context')\n }\n const { payload } = context\n\n return await payload.findGlobal({ slug: globalSlug })\n },\n }\n }\n }\n\n return tools\n}\n\n/**\n * Create a custom AI tool with proper typing\n *\n * @example\n * ```typescript\n * import { createTool } from '@delmaredigital/payload-puck/ai'\n * import { z } from 'zod'\n *\n * const getWeather = createTool({\n * description: 'Get current weather for a location',\n * inputSchema: z.object({\n * city: z.string().describe('City name'),\n * }),\n * execute: async ({ city }, context) => {\n * const response = await fetch(`https://api.weather.com/...`)\n * return response.json()\n * },\n * })\n * ```\n */\nexport function createTool<TInput, TOutput>(tool: AiTool<TInput, TOutput>): AiTool<TInput, TOutput> {\n return tool\n}\n"],"names":["z","createPayloadTools","config","tools","collections","Array","isArray","Object","fromEntries","map","c","slug","description","entries","toolName","charAt","toUpperCase","slice","replace","_","inputSchema","object","limit","number","optional","describe","where","record","string","unknown","search","execute","input","context","payload","Error","query","collection","or","title","contains","name","label","result","find","docs","media","mediaCollection","getMedia","mimeType","conditions","push","filename","alt","equals","length","and","doc","id","url","width","height","pages","getPages","globals","globalSlug","_input","findGlobal","createTool","tool"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;CAqBC,GAED,SAASA,CAAC,QAAQ,MAAK;AAoEvB;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BC,GACD,OAAO,SAASC,mBAAmBC,MAA0B;IAC3D,MAAMC,QAA0C,CAAC;IAEjD,yBAAyB;IACzB,IAAID,OAAOE,WAAW,EAAE;QACtB,MAAMA,cAAcC,MAAMC,OAAO,CAACJ,OAAOE,WAAW,IAChDG,OAAOC,WAAW,CAACN,OAAOE,WAAW,CAACK,GAAG,CAAC,CAACC,IAAM;gBAACA;gBAAG,CAAC,eAAe,EAAEA,EAAE,WAAW,CAAC;aAAC,KACtFR,OAAOE,WAAW;QAEtB,KAAK,MAAM,CAACO,MAAMC,YAAY,IAAIL,OAAOM,OAAO,CAACT,aAAc;YAC7D,MAAMU,WAAW,CAAC,GAAG,EAAEH,KAAKI,MAAM,CAAC,GAAGC,WAAW,KAAKL,KAAKM,KAAK,CAAC,GAAGC,OAAO,CAAC,aAAa,CAACC,GAAGT,IAAMA,EAAEM,WAAW,KAAK;YAErHb,KAAK,CAACW,SAAS,GAAG;gBAChBF,aAAa,CAAC,MAAM,EAAED,KAAK,aAAa,EAAEC,aAAa;gBACvDQ,aAAapB,EAAEqB,MAAM,CAAC;oBACpBC,OAAOtB,EAAEuB,MAAM,GAAGC,QAAQ,GAAGC,QAAQ,CAAC;oBACtCC,OAAO1B,EACJ2B,MAAM,CAAC3B,EAAE4B,MAAM,IAAI5B,EAAE6B,OAAO,IAC5BL,QAAQ,GACRC,QAAQ,CAAC;oBACZK,QAAQ9B,EAAE4B,MAAM,GAAGJ,QAAQ,GAAGC,QAAQ,CAAC;gBACzC;gBACAM,SAAS,OAAOC,OAA6BC;oBAC3C,IAAI,CAACA,SAASC,SAAS;wBACrB,MAAM,IAAIC,MAAM;oBAClB;oBACA,MAAM,EAAED,OAAO,EAAE,GAAGD;oBAEpB,MAAMG,QAIF;wBACFC,YAAY1B;wBACZW,OAAOU,MAAMV,KAAK,IAAI;oBACxB;oBAEA,IAAIU,MAAMN,KAAK,EAAE;wBACfU,MAAMV,KAAK,GAAGM,MAAMN,KAAK;oBAC3B;oBAEA,gDAAgD;oBAChD,IAAIM,MAAMF,MAAM,EAAE;wBAChBM,MAAMV,KAAK,GAAG;4BACZY,IAAI;gCACF;oCAAEC,OAAO;wCAAEC,UAAUR,MAAMF,MAAM;oCAAC;gCAAE;gCACpC;oCAAEW,MAAM;wCAAED,UAAUR,MAAMF,MAAM;oCAAC;gCAAE;gCACnC;oCAAEY,OAAO;wCAAEF,UAAUR,MAAMF,MAAM;oCAAC;gCAAE;6BACrC;wBACH;oBACF;oBAEA,MAAMa,SAAS,MAAMT,QAAQU,IAAI,CAACR;oBAClC,OAAOO,OAAOE,IAAI;gBACpB;YACF;QACF;IACF;IAEA,qBAAqB;IACrB,IAAI3C,OAAO4C,KAAK,EAAE;QAChB,MAAMC,kBAAkB,OAAO7C,OAAO4C,KAAK,KAAK,WAAW5C,OAAO4C,KAAK,GAAG;QAE1E3C,MAAM6C,QAAQ,GAAG;YACfpC,aACE;YACFQ,aAAapB,EAAEqB,MAAM,CAAC;gBACpBS,QAAQ9B,EAAE4B,MAAM,GAAGJ,QAAQ,GAAGC,QAAQ,CAAC;gBACvCwB,UAAUjD,EAAE4B,MAAM,GAAGJ,QAAQ,GAAGC,QAAQ,CAAC;gBACzCH,OAAOtB,EAAEuB,MAAM,GAAGC,QAAQ,GAAGC,QAAQ,CAAC;YACxC;YACAM,SAAS,OAAOC,OAAwBC;gBACtC,IAAI,CAACA,SAASC,SAAS;oBACrB,MAAM,IAAIC,MAAM;gBAClB;gBACA,MAAM,EAAED,OAAO,EAAE,GAAGD;gBAEpB,MAAMG,QAIF;oBACFC,YAAYU;oBACZzB,OAAOU,MAAMV,KAAK,IAAI;gBACxB;gBAEA,MAAM4B,aAAwC,EAAE;gBAEhD,IAAIlB,MAAMF,MAAM,EAAE;oBAChBoB,WAAWC,IAAI,CACb;wBAAEC,UAAU;4BAAEZ,UAAUR,MAAMF,MAAM;wBAAC;oBAAE,GACvC;wBAAEuB,KAAK;4BAAEb,UAAUR,MAAMF,MAAM;wBAAC;oBAAE;gBAEtC;gBAEA,IAAIE,MAAMiB,QAAQ,EAAE;oBAClBC,WAAWC,IAAI,CAAC;wBAAEF,UAAU;4BAAEK,QAAQtB,MAAMiB,QAAQ;wBAAC;oBAAE;gBACzD;gBAEA,IAAIC,WAAWK,MAAM,GAAG,GAAG;oBACzBnB,MAAMV,KAAK,GAAGM,MAAMF,MAAM,GAAG;wBAAEQ,IAAIY;oBAAW,IAAI;wBAAEM,KAAKN;oBAAW;gBACtE;gBAEA,MAAMP,SAAS,MAAMT,QAAQU,IAAI,CAACR;gBAClC,OAAOO,OAAOE,IAAI,CAACpC,GAAG,CAAC,CAACgD,MAAc,CAAA;wBACpCC,IAAID,IAAIC,EAAE;wBACVC,KAAKF,IAAIE,GAAG;wBACZP,UAAUK,IAAIL,QAAQ;wBACtBC,KAAKI,IAAIJ,GAAG;wBACZO,OAAOH,IAAIG,KAAK;wBAChBC,QAAQJ,IAAII,MAAM;wBAClBZ,UAAUQ,IAAIR,QAAQ;oBACxB,CAAA;YACF;QACF;IACF;IAEA,kCAAkC;IAClC,IAAI/C,OAAO4D,KAAK,EAAE;QAChB3D,MAAM4D,QAAQ,GAAG;YACfnD,aACE;YACFQ,aAAapB,EAAEqB,MAAM,CAAC;gBACpBS,QAAQ9B,EAAE4B,MAAM,GAAGJ,QAAQ,GAAGC,QAAQ,CAAC;gBACvCH,OAAOtB,EAAEuB,MAAM,GAAGC,QAAQ,GAAGC,QAAQ,CAAC;YACxC;YACAM,SAAS,OAAOC,OAAwBC;gBACtC,IAAI,CAACA,SAASC,SAAS;oBACrB,MAAM,IAAIC,MAAM;gBAClB;gBACA,MAAM,EAAED,OAAO,EAAE,GAAGD;gBAEpB,MAAMG,QAIF;oBACFC,YAAYnC,OAAO4D,KAAK;oBACxBxC,OAAOU,MAAMV,KAAK,IAAI;gBACxB;gBAEA,IAAIU,MAAMF,MAAM,EAAE;oBAChBM,MAAMV,KAAK,GAAG;wBACZY,IAAI;4BAAC;gCAAEC,OAAO;oCAAEC,UAAUR,MAAMF,MAAM;gCAAC;4BAAE;4BAAG;gCAAEnB,MAAM;oCAAE6B,UAAUR,MAAMF,MAAM;gCAAC;4BAAE;yBAAE;oBACnF;gBACF;gBAEA,MAAMa,SAAS,MAAMT,QAAQU,IAAI,CAACR;gBAClC,OAAOO,OAAOE,IAAI,CAACpC,GAAG,CAAC,CAACgD,MAAc,CAAA;wBACpCC,IAAID,IAAIC,EAAE;wBACVnB,OAAOkB,IAAIlB,KAAK;wBAChB5B,MAAM8C,IAAI9C,IAAI;wBACdgD,KAAK,CAAC,CAAC,EAAEF,IAAI9C,IAAI,EAAE;oBACrB,CAAA;YACF;QACF;IACF;IAEA,gBAAgB;IAChB,IAAIT,OAAO8D,OAAO,IAAI9D,OAAO8D,OAAO,CAACT,MAAM,GAAG,GAAG;QAC/C,KAAK,MAAMU,cAAc/D,OAAO8D,OAAO,CAAE;YACvC,MAAMlD,WAAW,CAAC,GAAG,EAAEmD,WAAWlD,MAAM,CAAC,GAAGC,WAAW,KAAKiD,WAAWhD,KAAK,CAAC,GAAGC,OAAO,CAAC,aAAa,CAACC,GAAGT,IAAMA,EAAEM,WAAW,KAAK;YAEjIb,KAAK,CAACW,SAAS,GAAG;gBAChBF,aAAa,CAAC,IAAI,EAAEqD,WAAW,+CAA+C,CAAC;gBAC/E7C,aAAapB,EAAEqB,MAAM,CAAC,CAAC;gBACvBU,SAAS,OAAOmC,QAA+BjC;oBAC7C,IAAI,CAACA,SAASC,SAAS;wBACrB,MAAM,IAAIC,MAAM;oBAClB;oBACA,MAAM,EAAED,OAAO,EAAE,GAAGD;oBAEpB,OAAO,MAAMC,QAAQiC,UAAU,CAAC;wBAAExD,MAAMsD;oBAAW;gBACrD;YACF;QACF;IACF;IAEA,OAAO9D;AACT;AAEA;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,SAASiE,WAA4BC,IAA6B;IACvE,OAAOA;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ai/types.ts"],"sourcesContent":["import type { NextRequest } from 'next/server'\nimport type { Config as PuckConfig, Data as PuckData } from '@puckeditor/core'\nimport type { SanitizedConfig } from 'payload'\nimport type { PuckApiAuthHooks, AuthenticatedUser } from '../api/types.js'\n\n// =============================================================================\n// AI Tool Types\n// =============================================================================\n\n/**\n * Tool definition for AI agent\n *\n * Tools enable the AI to query your system for information,\n * executing functions directly on your server.\n *\n * @example\n * ```typescript\n * import { z } from 'zod'\n *\n * const getProducts: AiTool = {\n * description: 'Get a list of products',\n * inputSchema: z.object({\n * category: z.enum(['consumer', 'business']),\n * }),\n * execute: async ({ category }) => {\n * return await payload.find({ collection: 'products', where: { category } })\n * },\n * }\n * ```\n */\n/**\n * Context passed to tool execution\n * Contains the Payload instance for database operations\n */\nexport interface AiToolContext {\n /**\n * Payload CMS instance for database operations\n */\n payload: import('payload').Payload\n /**\n * The authenticated user making the request\n */\n user?: import('payload').User\n}\n\nexport interface AiTool<TInput = unknown, TOutput = unknown> {\n /**\n * A description that the agent will use to understand how to use this tool\n */\n description: string\n /**\n * The shape of the parameters provided to the execute function.\n * Must be a Zod object schema.\n */\n inputSchema: import('zod').ZodObject<any>\n /**\n * The execution function for the tool.\n * Will receive parameters provided by the agent that match the inputSchema.\n * The second parameter is optional execution context containing the Payload instance\n * (available when using createPuckPlugin with auto-registered endpoints).\n */\n execute: (params: TInput, context?: AiToolContext) => Promise<TOutput> | TOutput\n /**\n * Optional name for the tool\n */\n name?: string\n}\n\n// =============================================================================\n// AI Configuration Types\n// =============================================================================\n\n/**\n * AI-specific configuration options for the server-side handler\n */\nexport interface AiOptions {\n /**\n * System context and instructions for the AI agent.\n * Guides the AI's behavior and output.\n *\n * @example\n * ```typescript\n * context: `## Overview\n * We are Google. You help us build Google landing pages.\n *\n * ## Brand Guidelines\n * Our brand colors are:\n * - #4285F4 (primary)\n * - #DB4437\n *\n * ## Tone of Voice\n * - American English\n * - Professional but friendly`\n * ```\n */\n context?: string\n /**\n * Custom tools that enable the AI to execute server-side functions.\n * Tools allow the agent to query your database, fetch external data, etc.\n */\n tools?: Record<string, AiTool>\n /**\n * Custom Puck Cloud API key.\n * Defaults to PUCK_API_KEY environment variable.\n */\n apiKey?: string\n /**\n * Custom Puck Cloud host URL\n */\n host?: string\n}\n\n// =============================================================================\n// AI Field Configuration\n// =============================================================================\n\n/**\n * AI configuration for a Puck field\n *\n * Add to any field's configuration to control how the AI generates content for it.\n *\n * @example\n * ```typescript\n * fields: {\n * title: {\n * type: 'text',\n * ai: {\n * instructions: 'Always use sentence case',\n * required: true,\n * },\n * },\n * }\n * ```\n */\nexport interface AiFieldConfig {\n /**\n * Instructions for the AI when generating this field's value\n */\n instructions?: string\n /**\n * Whether this field is required for AI generation\n * (even if not present in defaultProps)\n */\n required?: boolean\n /**\n * Exclude this field from AI generation.\n * Useful for fields like media library references that AI can't populate.\n */\n exclude?: boolean\n /**\n * Custom JSON schema for the field.\n * Required for 'custom', 'external', or user-defined fields\n * where Puck AI cannot automatically infer the schema.\n */\n schema?: {\n type: string\n [key: string]: unknown\n }\n}\n\n/**\n * AI configuration for a Puck component\n *\n * @example\n * ```typescript\n * const HeadingConfig = {\n * ai: {\n * instructions: 'Always place this at the top of sections',\n * },\n * fields: { ... },\n * render: ({ title }) => <h1>{title}</h1>,\n * }\n * ```\n */\nexport interface AiComponentConfig {\n /**\n * Instructions for the AI when using this component\n */\n instructions?: string\n /**\n * Custom JSON schema for the entire component.\n * For when Puck can't infer from fields.\n */\n schema?: {\n type: 'object'\n parameters: Record<string, { type: string; [key: string]: unknown }>\n required?: string[]\n }\n}\n\n// =============================================================================\n// API Routes Configuration\n// =============================================================================\n\n/**\n * Configuration for Puck AI API routes\n *\n * @example\n * ```typescript\n * // app/api/puck/[...all]/route.ts\n * import { createPuckAiApiRoutes } from '@delmaredigital/payload-puck/ai'\n *\n * export const POST = createPuckAiApiRoutes({\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * // Your auth implementation\n * },\n * },\n * ai: {\n * context: 'We are Acme Corp. You build our landing pages.',\n * },\n * })\n * ```\n */\nexport interface PuckAiRoutesConfig {\n /**\n * Payload configuration - import from @payload-config\n */\n payloadConfig: Promise<SanitizedConfig>\n /**\n * Authentication hooks (reuses existing pattern from API routes)\n */\n auth: PuckApiAuthHooks\n /**\n * AI-specific options\n */\n ai?: AiOptions\n /**\n * Custom error handler for logging/monitoring\n */\n onError?: (error: unknown, context: { operation: string; request: NextRequest }) => void\n}\n\n/**\n * Route handlers returned by createPuckAiApiRoutes\n */\nexport interface PuckAiRouteHandlers {\n POST: (request: NextRequest) => Promise<Response>\n}\n\n// =============================================================================\n// Headless Generation Configuration\n// =============================================================================\n\n/**\n * Configuration for headless AI page generation\n *\n * @example\n * ```typescript\n * const generatePage = createAiGenerate({\n * payloadConfig: config,\n * auth: { authenticate: async (req) => ... },\n * ai: { context: 'We are Acme Corp...' },\n * })\n *\n * const pageData = await generatePage({\n * prompt: 'Create a landing page for our new product',\n * puckConfig: editorConfig,\n * })\n * ```\n */\nexport interface AiGenerateConfig {\n /**\n * Payload configuration - import from @payload-config\n */\n payloadConfig: Promise<SanitizedConfig>\n /**\n * Authentication hooks\n */\n auth: PuckApiAuthHooks\n /**\n * AI-specific options\n */\n ai?: AiOptions\n}\n\n/**\n * Options for a single generation request\n */\nexport interface AiGenerateOptions {\n /**\n * Natural language prompt for generation\n */\n prompt: string\n /**\n * The Puck configuration with component definitions\n */\n puckConfig: PuckConfig\n /**\n * Optional authenticated user for the generation\n */\n user?: AuthenticatedUser\n /**\n * Existing Puck data to consider when actioning the prompt.\n * Use this to update an existing page rather than create from scratch.\n */\n pageData?: PuckData\n}\n\n/**\n * Function returned by createAiGenerate\n */\nexport type AiGenerateFunction = (options: AiGenerateOptions) => Promise<PuckData>\n\n// =============================================================================\n// Client Plugin Configuration\n// =============================================================================\n\n/**\n * Example prompt for the AI chat interface\n */\nexport interface AiExamplePrompt {\n /**\n * Display label for the prompt\n */\n label: string\n /**\n * The actual prompt text\n */\n prompt: string\n}\n\n/**\n * Configuration options for the AI plugin\n *\n * @example\n * ```typescript\n * const aiPlugin = createAiPlugin({\n * host: '/api/puck',\n * examplePrompts: [\n * { label: 'Landing page', prompt: 'Create a landing page about dogs' },\n * ],\n * })\n * ```\n */\nexport interface AiPluginOptions {\n /**\n * API host for AI requests.\n * @default '/api/puck'\n */\n host?: string\n /**\n * Example prompts to show in the chat interface.\n * Users can click these to quickly send common prompts.\n */\n examplePrompts?: AiExamplePrompt[]\n /**\n * Callback when user submits a prompt\n */\n onSubmit?: (prompt: string) => void\n}\n\n// =============================================================================\n// Config Injection Types\n// =============================================================================\n\n/**\n * AI configuration overrides for components\n *\n * Used with injectAiConfig to add AI metadata to existing component configs.\n *\n * @example\n * ```typescript\n * const overrides: ComponentAiOverrides = {\n * Heading: {\n * ai: {\n * instructions: 'Use for section titles',\n * },\n * fields: {\n * text: {\n * ai: { required: true },\n * },\n * },\n * },\n * }\n * ```\n */\nexport interface ComponentAiOverrides {\n [componentName: string]: {\n ai?: AiComponentConfig\n fields?: {\n [fieldName: string]: {\n ai?: AiFieldConfig\n }\n }\n }\n}\n\n// =============================================================================\n// Prompt Editor Plugin Types\n// =============================================================================\n\n/**\n * A stored AI prompt from the database\n */\nexport interface AiPrompt {\n id: string\n label: string\n prompt: string\n category?: string\n order?: number\n createdAt: string\n updatedAt: string\n}\n\n/**\n * A stored AI context entry from the database\n */\nexport interface AiContext {\n id: string\n name: string\n content: string\n category?: 'brand' | 'tone' | 'product' | 'industry' | 'technical' | 'patterns' | 'other'\n enabled: boolean\n order?: number\n createdAt: string\n updatedAt: string\n}\n\n/**\n * Configuration for the prompt editor plugin\n */\nexport interface PromptEditorPluginOptions {\n /**\n * API endpoint for prompt CRUD operations\n * @default '/api/puck/ai-prompts'\n */\n apiEndpoint?: string\n /**\n * Whether users can edit prompts in the panel\n * @default true\n */\n canEdit?: boolean\n /**\n * Whether to show the create button\n * @default true\n */\n canCreate?: boolean\n /**\n * Whether to show delete buttons\n * @default true\n */\n canDelete?: boolean\n}\n\n/**\n * Configuration for the context editor plugin\n */\nexport interface ContextEditorPluginOptions {\n /**\n * API endpoint for context CRUD operations\n * @default '/api/puck/ai-context'\n */\n apiEndpoint?: string\n /**\n * Whether users can edit context in the panel\n * @default true\n */\n canEdit?: boolean\n /**\n * Whether to show the create button\n * @default true\n */\n canCreate?: boolean\n /**\n * Whether to show delete buttons\n * @default true\n */\n canDelete?: boolean\n}\n\n// =============================================================================\n// Plugin System Integration Types\n// =============================================================================\n\n/**\n * AI configuration for createPuckPlugin\n */\nexport interface PuckPluginAiConfig {\n /**\n * Enable AI features\n * @default false\n */\n enabled?: boolean\n /**\n * System context for the AI agent\n */\n context?: string\n /**\n * Custom tools that enable the AI to execute server-side functions.\n * Tools allow the agent to query your database, fetch external data, etc.\n *\n * @example\n * ```typescript\n * import { z } from 'zod'\n *\n * createPuckPlugin({\n * ai: {\n * enabled: true,\n * tools: {\n * getProducts: {\n * description: 'Get products from the database',\n * inputSchema: z.object({ category: z.string() }),\n * execute: async ({ category }) => {\n * return await payload.find({ collection: 'products', where: { category } })\n * },\n * },\n * },\n * },\n * })\n * ```\n */\n tools?: Record<string, AiTool>\n /**\n * Example prompts for the chat interface\n */\n examplePrompts?: AiExamplePrompt[]\n /**\n * Auto-create puck-ai-prompts collection for storing prompts\n * @default false\n */\n promptsCollection?: boolean\n /**\n * Auto-create puck-ai-context collection for dynamic business context.\n * When enabled, context entries can be managed via Payload admin and\n * the Context Editor panel in the Puck editor.\n * @default false\n */\n contextCollection?: boolean\n /**\n * Custom component AI instructions to override or extend defaults.\n * When AI is enabled, built-in component instructions are auto-applied.\n * Use this to customize instructions for your brand/use case.\n *\n * @example\n * ```typescript\n * createPuckPlugin({\n * ai: {\n * enabled: true,\n * componentInstructions: {\n * Heading: {\n * ai: { instructions: 'Use our brand voice: professional but approachable' },\n * fields: {\n * text: { ai: { instructions: 'Keep under 8 words' } },\n * },\n * },\n * },\n * },\n * })\n * ```\n */\n componentInstructions?: ComponentAiOverrides\n}\n"],"names":[],"mappings":"AAwdA,gFAAgF;AAChF,kCAAkC;AAClC,gFAAgF;AAEhF;;CAEC,GACD,WA0EC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"injectAiConfig.d.ts","sourceRoot":"","sources":["../../../src/ai/utils/injectAiConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAuBvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,oBAAoB,GAC9B,UAAU,CAuJZ;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAgBvD"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/ai/utils/injectAiConfig.ts"],"sourcesContent":["import type { Config as PuckConfig } from '@puckeditor/core'\nimport type { ComponentAiOverrides } from '../types.js'\n\n// Extended types to include AI configuration\n// These match what Puck AI expects but aren't in the core types yet\ntype ComponentWithAi = {\n ai?: {\n instructions?: string\n schema?: object\n }\n fields?: Record<string, FieldWithAi>\n [key: string]: unknown\n}\n\ntype FieldWithAi = {\n ai?: {\n instructions?: string\n required?: boolean\n exclude?: boolean\n schema?: object\n }\n [key: string]: unknown\n}\n\n/**\n * Injects AI configuration into an existing Puck config\n *\n * This function:\n * 1. Applies component-level and field-level AI overrides from the provided config\n * 2. **Automatically excludes ALL `type: 'custom'` fields** from AI generation\n * (custom fields are UI-only interactive fields that AI cannot generate values for)\n *\n * @example Basic usage\n * ```typescript\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n * import { injectAiConfig, defaultComponentAiConfig } from '@delmaredigital/payload-puck/ai'\n *\n * // Use default AI configs for built-in components\n * const aiEnabledConfig = injectAiConfig(editorConfig, defaultComponentAiConfig)\n * ```\n *\n * @example With custom overrides\n * ```typescript\n * const aiEnabledConfig = injectAiConfig(editorConfig, {\n * ...defaultComponentAiConfig,\n * // Override a built-in component\n * Heading: {\n * ai: {\n * instructions: 'Use our brand voice: professional but approachable',\n * },\n * fields: {\n * text: {\n * ai: {\n * instructions: 'Keep headings concise (under 10 words)',\n * required: true,\n * },\n * },\n * },\n * },\n * // Add config for a custom component\n * HeroSection: {\n * ai: {\n * instructions: 'Always place at the top of the page',\n * },\n * fields: {\n * headline: {\n * ai: {\n * instructions: 'Use power words, keep under 8 words',\n * required: true,\n * },\n * },\n * },\n * },\n * })\n * ```\n *\n * @param config - The base Puck configuration to enhance\n * @param overrides - AI configuration overrides for each component\n * @returns A new Puck config with AI metadata injected\n */\nexport function injectAiConfig(\n config: PuckConfig,\n overrides: ComponentAiOverrides\n): PuckConfig {\n // Deep clone the config to avoid mutating the original\n // Use type assertion to work with AI-extended types\n const newConfig = {\n ...config,\n components: { ...config.components } as Record<string, ComponentWithAi>,\n }\n\n // First pass: Apply user-provided overrides\n for (const [componentName, componentOverride] of Object.entries(overrides)) {\n const existingComponent = newConfig.components[componentName]\n\n // Skip if component doesn't exist in config\n if (!existingComponent) {\n continue\n }\n\n // Create a new component config with AI metadata\n const newComponent: ComponentWithAi = {\n ...existingComponent,\n }\n\n // Add component-level AI config\n if (componentOverride.ai) {\n newComponent.ai = {\n ...existingComponent.ai,\n ...componentOverride.ai,\n }\n }\n\n // Process field-level AI configs from overrides\n if (componentOverride.fields && existingComponent.fields) {\n const newFields: Record<string, FieldWithAi> = { ...existingComponent.fields }\n\n for (const [fieldName, fieldOverride] of Object.entries(componentOverride.fields)) {\n const existingField = existingComponent.fields[fieldName]\n\n // Skip if field doesn't exist\n if (!existingField) {\n continue\n }\n\n // Add AI config to field\n newFields[fieldName] = {\n ...existingField,\n ai: {\n ...existingField.ai,\n ...fieldOverride.ai,\n },\n }\n }\n\n newComponent.fields = newFields\n }\n\n newConfig.components[componentName] = newComponent\n }\n\n // Second pass: Auto-exclude custom fields that don't have AI instructions\n // Custom fields (type: 'custom') are typically interactive UI elements,\n // BUT some styling fields (background, padding, etc.) ARE custom fields\n // that we want AI to use. Only auto-exclude if NO AI instructions provided.\n for (const [componentName, component] of Object.entries(newConfig.components)) {\n if (!component.fields) continue\n\n const updatedFields: Record<string, FieldWithAi> = {}\n let hasChanges = false\n\n for (const [fieldName, field] of Object.entries(component.fields)) {\n const existingAi = (field as FieldWithAi).ai\n\n // Check if this is a custom field type\n if ((field as any).type === 'custom') {\n // If the field has AI instructions, DON'T auto-exclude it\n // The presence of instructions indicates we want AI to use this field\n if (existingAi?.instructions) {\n updatedFields[fieldName] = field as FieldWithAi\n }\n // Otherwise, auto-exclude custom fields from AI generation\n // (unless already excluded)\n else if (!existingAi?.exclude) {\n updatedFields[fieldName] = {\n ...field,\n ai: {\n ...existingAi,\n exclude: true,\n },\n }\n hasChanges = true\n } else {\n updatedFields[fieldName] = field as FieldWithAi\n }\n } else {\n updatedFields[fieldName] = field as FieldWithAi\n }\n }\n\n // Only update component if we made changes\n if (hasChanges) {\n newConfig.components[componentName] = {\n ...component,\n fields: updatedFields,\n }\n }\n }\n\n // Third pass: Auto-exclude custom fields from ROOT config (same logic as components)\n // Root can have fields just like components (e.g., isHomepage, pageLayout, etc.)\n if ((config as any).root?.fields) {\n const rootFields = (config as any).root.fields\n const updatedRootFields: Record<string, FieldWithAi> = {}\n let hasRootChanges = false\n\n for (const [fieldName, field] of Object.entries(rootFields)) {\n const existingAi = (field as FieldWithAi).ai\n\n // Check if this is a custom field type\n if ((field as any).type === 'custom') {\n // If the field has AI instructions, DON'T auto-exclude it\n if (existingAi?.instructions) {\n updatedRootFields[fieldName] = field as FieldWithAi\n }\n // Otherwise, auto-exclude custom fields from AI generation\n else if (!existingAi?.exclude) {\n updatedRootFields[fieldName] = {\n ...(field as FieldWithAi),\n ai: {\n ...existingAi,\n exclude: true,\n },\n }\n hasRootChanges = true\n } else {\n updatedRootFields[fieldName] = field as FieldWithAi\n }\n } else {\n updatedRootFields[fieldName] = field as FieldWithAi\n }\n }\n\n // Update root if we made changes\n if (hasRootChanges) {\n ;(newConfig as any).root = {\n ...(newConfig as any).root,\n fields: updatedRootFields,\n }\n }\n }\n\n // Cast back to PuckConfig for return\n return newConfig as unknown as PuckConfig\n}\n\n/**\n * Checks if a config already has AI configuration\n *\n * @param config - The Puck configuration to check\n * @returns True if any component has AI configuration\n */\nexport function hasAiConfig(config: PuckConfig): boolean {\n for (const component of Object.values(config.components)) {\n if ((component as any).ai) {\n return true\n }\n\n if (component.fields) {\n for (const field of Object.values(component.fields)) {\n if ((field as any).ai) {\n return true\n }\n }\n }\n }\n\n return false\n}\n"],"names":["injectAiConfig","config","overrides","newConfig","components","componentName","componentOverride","Object","entries","existingComponent","newComponent","ai","fields","newFields","fieldName","fieldOverride","existingField","component","updatedFields","hasChanges","field","existingAi","type","instructions","exclude","root","rootFields","updatedRootFields","hasRootChanges","hasAiConfig","values"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createPuckApiRoutes.d.ts","sourceRoot":"","sources":["../../src/api/createPuckApiRoutes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EAGrB,MAAM,YAAY,CAAA;AAenB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,mBAAmB,GAC/B,oBAAoB,CAyMtB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/api/createPuckApiRoutes.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type { Where } from 'payload'\nimport type { Data as PuckData } from '@puckeditor/core'\nimport type {\n PuckApiRoutesConfig,\n PuckApiRouteHandlers,\n CreatePageBody,\n RouteHandlerContext,\n} from './types.js'\n\n/**\n * Default Puck data for new pages\n */\nconst DEFAULT_PUCK_DATA: PuckData = {\n root: {\n props: {\n title: '',\n } as Record<string, unknown>,\n },\n content: [],\n zones: {},\n}\n\n/**\n * Create API route handlers for /api/puck/pages\n *\n * Provides GET (list pages) and POST (create page) handlers\n * with configurable authentication and authorization.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/route.ts\n * import { createPuckApiRoutes } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, POST } = createPuckApiRoutes({\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 * canCreate: async (user) => {\n * return { allowed: user.role === 'admin' || user.role === 'editor' }\n * },\n * },\n * })\n * ```\n */\nexport function createPuckApiRoutes(\n routeConfig: PuckApiRoutesConfig\n): PuckApiRouteHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n defaultPuckData = DEFAULT_PUCK_DATA,\n enableDrafts = true,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages\n * List all pages with optional filtering\n *\n * Query Parameters:\n * - page: Page number (default: 1)\n * - limit: Items per page (default: 10)\n * - search: Search in title field\n * - status: Filter by _status ('draft', 'published', 'all')\n * - editorVersion: Filter by editorVersion field\n * - sort: Sort field (default: '-updatedAt')\n */\n async function GET(request: NextRequest, _context: RouteHandlerContext): Promise<Response> {\n try {\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 list permission\n if (auth.canList) {\n const permission = await auth.canList(authResult.user)\n if (!permission.allowed) {\n return NextResponse.json(\n { error: permission.error || 'Forbidden' },\n { status: 403 }\n )\n }\n }\n\n // Parse query parameters\n const { searchParams } = new URL(request.url)\n const page = parseInt(searchParams.get('page') || '1', 10)\n const limit = Math.min(parseInt(searchParams.get('limit') || '10', 10), 100)\n const search = searchParams.get('search') || ''\n const status = searchParams.get('status')\n const editorVersion = searchParams.get('editorVersion')\n const sort = searchParams.get('sort') || '-updatedAt'\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Build where clause\n const conditions: Where[] = []\n\n if (search) {\n conditions.push({ title: { contains: search } })\n }\n\n if (status && status !== 'all') {\n conditions.push({ _status: { equals: status } })\n }\n\n if (editorVersion && editorVersion !== 'all') {\n conditions.push({ editorVersion: { equals: editorVersion } })\n }\n\n const where: Where | undefined =\n conditions.length > 0\n ? conditions.length === 1\n ? conditions[0]\n : { and: conditions }\n : undefined\n\n const result = await payload.find({\n collection,\n page,\n limit,\n sort,\n where,\n })\n\n return NextResponse.json(result)\n } catch (error) {\n if (onError) {\n onError(error, { operation: 'list', request })\n }\n console.error('Error listing pages:', error)\n return NextResponse.json(\n { error: 'Failed to list pages' },\n { status: 500 }\n )\n }\n }\n\n /**\n * POST /api/puck/pages\n * Create a new page with Puck data\n *\n * Request Body:\n * - title: string (required)\n * - slug: string (required)\n * - puckData?: PuckData (optional, uses default if not provided)\n * - status?: 'draft' | 'published' (default: 'draft')\n */\n async function POST(request: NextRequest, _context: RouteHandlerContext): Promise<Response> {\n try {\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 create permission\n if (auth.canCreate) {\n const permission = await auth.canCreate(authResult.user)\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 CreatePageBody\n const { title, slug, puckData, status = 'draft' } = body\n\n // Validate required fields\n if (!title || !slug) {\n return NextResponse.json(\n { error: 'Title and slug are required' },\n { status: 400 }\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 slug already exists\n const existing = await payload.find({\n collection,\n where: { slug: { equals: slug } },\n limit: 1,\n })\n\n if (existing.docs.length > 0) {\n return NextResponse.json(\n { error: 'A page with this slug already exists' },\n { status: 409 }\n )\n }\n\n // Prepare initial Puck data with title in root.props\n const initialPuckData = puckData || {\n ...defaultPuckData,\n root: {\n ...defaultPuckData.root,\n props: {\n ...(defaultPuckData.root as { props?: Record<string, unknown> })?.props,\n title,\n },\n },\n }\n\n // Create the page\n const newPage = await payload.create({\n collection,\n draft: enableDrafts,\n data: {\n title,\n slug,\n editorVersion: 'puck',\n puckData: initialPuckData,\n _status: status,\n },\n })\n\n return NextResponse.json({ doc: newPage }, { status: 201 })\n } catch (error) {\n if (onError) {\n onError(error, { operation: 'create', request })\n }\n console.error('Error creating page:', error)\n return NextResponse.json(\n { error: 'Failed to create page' },\n { status: 500 }\n )\n }\n }\n\n return { GET, POST }\n}\n"],"names":["NextResponse","getPayload","DEFAULT_PUCK_DATA","root","props","title","content","zones","createPuckApiRoutes","routeConfig","collection","payloadConfig","auth","defaultPuckData","enableDrafts","onError","GET","request","_context","authResult","authenticate","authenticated","user","json","error","status","canList","permission","allowed","searchParams","URL","url","page","parseInt","get","limit","Math","min","search","editorVersion","sort","config","payload","conditions","push","contains","_status","equals","where","length","and","undefined","result","find","operation","console","POST","canCreate","body","slug","puckData","existing","docs","initialPuckData","newPage","create","draft","data","doc"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createPuckApiRoutesVersions.d.ts","sourceRoot":"","sources":["../../src/api/createPuckApiRoutesVersions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,4BAA4B,EAE7B,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,mBAAmB,GAC/B,4BAA4B,CAyK9B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/api/createPuckApiRoutesVersions.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server'\nimport { getPayload } from 'payload'\nimport type {\n PuckApiRoutesConfig,\n PuckApiVersionsRouteHandlers,\n RouteHandlerWithIdContext,\n} from './types.js'\n\n/**\n * Create API route handlers for /api/puck/pages/[id]/versions\n *\n * Provides GET (list versions) and POST (restore version) handlers\n * for managing page version history.\n *\n * @example\n * ```typescript\n * // src/app/api/puck/pages/[id]/versions/route.ts\n * import { createPuckApiRoutesVersions } from '@delmaredigital/payload-puck/api'\n * import config from '@payload-config'\n *\n * export const { GET, POST } = createPuckApiRoutesVersions({\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 * },\n * })\n * ```\n */\nexport function createPuckApiRoutesVersions(\n routeConfig: PuckApiRoutesConfig\n): PuckApiVersionsRouteHandlers {\n const {\n collection = 'pages',\n payloadConfig,\n auth,\n onError,\n } = routeConfig\n\n /**\n * GET /api/puck/pages/[id]/versions\n * Fetch version history for a page\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 // Parse query params for pagination\n const url = new URL(request.url)\n const limit = parseInt(url.searchParams.get('limit') || '20', 10)\n const page = parseInt(url.searchParams.get('page') || '1', 10)\n\n // Fetch versions for this page\n const versions = await payload.findVersions({\n collection,\n where: {\n parent: { equals: id },\n },\n sort: '-updatedAt',\n limit,\n page,\n })\n\n return NextResponse.json({\n docs: versions.docs,\n totalDocs: versions.totalDocs,\n totalPages: versions.totalPages,\n page: versions.page,\n limit: versions.limit,\n hasPrevPage: versions.hasPrevPage,\n hasNextPage: versions.hasNextPage,\n })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'listVersions', request, pageId: params.id })\n }\n console.error('Error fetching versions:', error)\n return NextResponse.json(\n { error: 'Failed to fetch versions' },\n { status: 500 }\n )\n }\n }\n\n /**\n * POST /api/puck/pages/[id]/versions\n * Restore a specific version\n *\n * Request Body:\n * - versionId: string - The version ID to restore\n */\n async function POST(\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()\n const { versionId } = body as { versionId: string }\n\n if (!versionId) {\n return NextResponse.json(\n { error: 'Version ID is required' },\n { status: 400 }\n )\n }\n\n // Get Payload instance with provided config\n const config = await payloadConfig\n const payload = await getPayload({ config })\n\n // Restore the version\n const restoredDoc = await payload.restoreVersion({\n collection,\n id: versionId,\n })\n\n return NextResponse.json({ doc: restoredDoc })\n } catch (error) {\n const params = await context.params\n if (onError) {\n onError(error, { operation: 'restoreVersion', request, pageId: params.id })\n }\n console.error('Error restoring version:', error)\n return NextResponse.json(\n { error: 'Failed to restore version' },\n { status: 500 }\n )\n }\n }\n\n return { GET, POST }\n}\n"],"names":["NextResponse","getPayload","createPuckApiRoutesVersions","routeConfig","collection","payloadConfig","auth","onError","GET","request","context","params","id","json","error","status","authResult","authenticate","authenticated","user","canView","permission","allowed","config","payload","url","URL","limit","parseInt","searchParams","get","page","versions","findVersions","where","parent","equals","sort","docs","totalDocs","totalPages","hasPrevPage","hasNextPage","operation","pageId","console","POST","canEdit","body","versionId","restoredDoc","restoreVersion","doc"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"createPuckApiRoutesWithId.d.ts","sourceRoot":"","sources":["../../src/api/createPuckApiRoutesWithId.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,0BAA0B,EAG3B,MAAM,YAAY,CAAA;AAGnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,mBAAmB,GAC/B,0BAA0B,CAsW5B"}
@@ -1 +0,0 @@
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":"AAAA,SAAsBA,YAAY,QAAQ,cAAa;AACvD,SAASC,UAAU,QAAQ,UAAS;AAOpC,SAASC,2BAA2B,EAAEC,SAAS,QAAQ,0BAAyB;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,GACD,OAAO,SAASC,0BACdC,WAAgC;IAEhC,MAAM,EACJC,aAAa,OAAO,EACpBC,aAAa,EACbC,IAAI,EACJC,gBAAgB,EAChBC,OAAO,EACR,GAAGL;IAEJ;;;GAGC,GACD,eAAeM,IACbC,OAAoB,EACpBC,OAAkC;QAElC,IAAI;YACF,0BAA0B;YAC1B,MAAMC,SAAS,MAAMD,QAAQC,MAAM;YACnC,MAAMC,KAAKD,OAAOC,EAAE;YAEpB,IAAI,CAACA,IAAI;gBACP,OAAOf,aAAagB,IAAI,CACtB;oBAAEC,OAAO;gBAAsB,GAC/B;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,eAAe;YACf,MAAMC,aAAa,MAAMX,KAAKY,YAAY,CAACR;YAC3C,IAAI,CAACO,WAAWE,aAAa,IAAI,CAACF,WAAWG,IAAI,EAAE;gBACjD,OAAOtB,aAAagB,IAAI,CACtB;oBAAEC,OAAOE,WAAWF,KAAK,IAAI;gBAAe,GAC5C;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,wBAAwB;YACxB,IAAIV,KAAKe,OAAO,EAAE;gBAChB,MAAMC,aAAa,MAAMhB,KAAKe,OAAO,CAACJ,WAAWG,IAAI,EAAEP;gBACvD,IAAI,CAACS,WAAWC,OAAO,EAAE;oBACvB,OAAOzB,aAAagB,IAAI,CACtB;wBAAEC,OAAOO,WAAWP,KAAK,IAAI;oBAAY,GACzC;wBAAEC,QAAQ;oBAAI;gBAElB;YACF;YAEA,4CAA4C;YAC5C,MAAMQ,SAAS,MAAMnB;YACrB,MAAMoB,UAAU,MAAM1B,WAAW;gBAAEyB;YAAO;YAE1C,mDAAmD;YACnD,2DAA2D;YAC3D,MAAME,MAAM,IAAIC,IAAIjB,QAAQgB,GAAG;YAC/B,MAAME,aAAaF,IAAIG,YAAY,CAACC,GAAG,CAAC,aAAa;YAErD,MAAMC,OAAO,MAAMN,QAAQO,QAAQ,CAAC;gBAClC5B;gBACAS;gBACAoB,OAAOL;YACT;YAEA,IAAI,CAACG,MAAM;gBACT,OAAOjC,aAAagB,IAAI,CAAC;oBAAEC,OAAO;gBAAiB,GAAG;oBAAEC,QAAQ;gBAAI;YACtE;YAEA,OAAOlB,aAAagB,IAAI,CAAC;gBAAEoB,KAAKH;YAAK;QACvC,EAAE,OAAOhB,OAAO;YACd,MAAMH,SAAS,MAAMD,QAAQC,MAAM;YACnC,IAAIJ,SAAS;gBACXA,QAAQO,OAAO;oBAAEoB,WAAW;oBAAQzB;oBAAS0B,QAAQxB,OAAOC,EAAE;gBAAC;YACjE;YACAwB,QAAQtB,KAAK,CAAC,wBAAwBA;YACtC,OAAOjB,aAAagB,IAAI,CACtB;gBAAEC,OAAO;YAAuB,GAChC;gBAAEC,QAAQ;YAAI;QAElB;IACF;IAEA;;;;;;;;;;;;GAYC,GACD,eAAesB,MACb5B,OAAoB,EACpBC,OAAkC;QAElC,IAAI;YACF,0BAA0B;YAC1B,MAAMC,SAAS,MAAMD,QAAQC,MAAM;YACnC,MAAMC,KAAKD,OAAOC,EAAE;YAEpB,IAAI,CAACA,IAAI;gBACP,OAAOf,aAAagB,IAAI,CACtB;oBAAEC,OAAO;gBAAsB,GAC/B;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,eAAe;YACf,MAAMC,aAAa,MAAMX,KAAKY,YAAY,CAACR;YAC3C,IAAI,CAACO,WAAWE,aAAa,IAAI,CAACF,WAAWG,IAAI,EAAE;gBACjD,OAAOtB,aAAagB,IAAI,CACtB;oBAAEC,OAAOE,WAAWF,KAAK,IAAI;gBAAe,GAC5C;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,wBAAwB;YACxB,IAAIV,KAAKiC,OAAO,EAAE;gBAChB,MAAMjB,aAAa,MAAMhB,KAAKiC,OAAO,CAACtB,WAAWG,IAAI,EAAEP;gBACvD,IAAI,CAACS,WAAWC,OAAO,EAAE;oBACvB,OAAOzB,aAAagB,IAAI,CACtB;wBAAEC,OAAOO,WAAWP,KAAK,IAAI;oBAAY,GACzC;wBAAEC,QAAQ;oBAAI;gBAElB;YACF;YAEA,qBAAqB;YACrB,MAAMwB,OAAQ,MAAM9B,QAAQI,IAAI;YAChC,MAAM,EAAE2B,QAAQ,EAAEC,KAAK,EAAEC,IAAI,EAAE3B,MAAM,EAAEiB,KAAK,EAAEW,UAAU,EAAEC,YAAY,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGP;YAEhG,yDAAyD;YACzD,IAAIxB,WAAW,aAAa;gBAC1B,MAAMgC,aAAa1C,KAAK0C,UAAU,IAAI1C,KAAKiC,OAAO;gBAClD,IAAIS,YAAY;oBACd,MAAM1B,aAAa,MAAM0B,WAAW/B,WAAWG,IAAI,EAAEP;oBACrD,IAAI,CAACS,WAAWC,OAAO,EAAE;wBACvB,OAAOzB,aAAagB,IAAI,CACtB;4BAAEC,OAAOO,WAAWP,KAAK,IAAI;wBAAkC,GAC/D;4BAAEC,QAAQ;wBAAI;oBAElB;gBACF;YACF;YAEA,4CAA4C;YAC5C,MAAMQ,SAAS,MAAMnB;YACrB,MAAMoB,UAAU,MAAM1B,WAAW;gBAAEyB;YAAO;YAE1C,8EAA8E;YAC9E,oCAAoC;YACpC,IAAIqB,gBAAgBD,eAAe,MAAM;gBACvC,MAAMK,mBAAmB,MAAMxB,QAAQyB,IAAI,CAAC;oBAC1C9C;oBACA+C,OAAO;wBACLC,KAAK;4BACH;gCAAER,YAAY;oCAAES,QAAQ;gCAAK;4BAAE;4BAC/B;gCAAExC,IAAI;oCAAEyC,YAAYzC;gCAAG;4BAAE;yBAC1B;oBACH;oBACA0C,OAAO;oBACPC,OAAO;gBACT;gBAEA,IAAIP,iBAAiBQ,IAAI,CAACC,MAAM,GAAG,GAAG;oBACpC,MAAMjC,QAAQkC,MAAM,CAAC;wBACnBvD;wBACAS,IAAIoC,iBAAiBQ,IAAI,CAAC,EAAE,CAAC5C,EAAE;wBAC/B+C,MAAM;4BAAEhB,YAAY;wBAAM;wBAC1B,0DAA0D;wBAC1DjC,SAAS;4BAAEkD,oBAAoB;wBAAK;oBACtC;gBACF;YACF;YAEA,iEAAiE;YACjE,MAAMC,YACJ,AAACrB,UAAUsB,MAA8CC,SAAS,CAAC;YAErE,gDAAgD;YAChD,MAAMC,aAAsC;gBAC1CC,eAAe;YACjB;YAEA,2BAA2B;YAC3B,IAAIzB,UAAU;gBACZwB,WAAWxB,QAAQ,GAAGA;YACxB;YAEA,mCAAmC;YACnC,MAAM0B,eAAenE,4BAA4B8D,WAAWvD;YAE5D,uEAAuE;YACvEN,UAAUgE,YAAYE;YAEtB,iDAAiD;YACjD,IAAIzB,UAAU0B,WAAW;gBACvBH,WAAWvB,KAAK,GAAGA;YACrB;YACA,IAAIC,SAASyB,WAAW;gBACtBH,WAAWtB,IAAI,GAAGA;YACpB;YAEA,gEAAgE;YAChE,IAAIC,eAAewB,WAAW;gBAC5BH,WAAWrB,UAAU,GAAGA;YAC1B;YAEA,gFAAgF;YAChF,IAAIE,WAAWsB,WAAW;gBACxBH,WAAWnB,MAAM,GAAGA;YACtB;YACA,IAAIC,gBAAgBqB,WAAW;gBAC7BH,WAAWlB,WAAW,GAAGA;YAC3B;YAEA,gDAAgD;YAChD,IAAI/B,QAAQ;gBACViD,WAAWI,OAAO,GAAGrD;YACvB;YAEA,gFAAgF;YAChF,0FAA0F;YAC1F,+DAA+D;YAC/D,2DAA2D;YAC3D,MAAMsD,gBAKF;gBACFlE;gBACAS;gBACA+C,MAAMK;YACR;YAEA,yEAAyE;YACzE,4EAA4E;YAC5E,qCAAqC;YACrC,IAAIhC,UAAU,QAAQjB,WAAW,aAAa;gBAC5CsD,cAAcrC,KAAK,GAAG;YACxB;YAEA,MAAMsC,cAAc,MAAM9C,QAAQkC,MAAM,CAACW;YAEzC,OAAOxE,aAAagB,IAAI,CAAC;gBAAEoB,KAAKqC;YAAY;QAC9C,EAAE,OAAOxD,OAAO;YACd,MAAMH,SAAS,MAAMD,QAAQC,MAAM;YACnC,IAAIJ,SAAS;gBACXA,QAAQO,OAAO;oBAAEoB,WAAW;oBAAUzB;oBAAS0B,QAAQxB,OAAOC,EAAE;gBAAC;YACnE;YACAwB,QAAQtB,KAAK,CAAC,wBAAwBA;YAEtC,8CAA8C;YAC9C,IAAIA,iBAAiByD,SAASzD,MAAM0D,IAAI,KAAK,mBAAmB;gBAC9D,MAAMC,kBAAkB3D;gBAGxB,MAAM4D,cAAcD,gBAAgBd,IAAI,EAAEgB,UAAU,EAAE;gBAEtD,mEAAmE;gBACnE,MAAMC,YAAYF,YAAYzB,IAAI,CAAC,CAAC4B,IAAMA,EAAEC,KAAK,KAAK;gBACtD,IAAIF,WAAW;oBACb,OAAO/E,aAAagB,IAAI,CACtB;wBACEC,OAAO;wBACPgE,OAAO;wBACPC,SAASL;oBACX,GACA;wBAAE3D,QAAQ;oBAAI;gBAElB;gBAEA,2BAA2B;gBAC3B,OAAOlB,aAAagB,IAAI,CACtB;oBACEC,OAAO,CAAC,mBAAmB,EAAE4D,YAAYM,GAAG,CAAC,CAACH,IAAMA,EAAEI,OAAO,IAAIJ,EAAEC,KAAK,EAAEI,IAAI,CAAC,OAAO;oBACtFH,SAASL;gBACX,GACA;oBAAE3D,QAAQ;gBAAI;YAElB;YAEA,OAAOlB,aAAagB,IAAI,CACtB;gBAAEC,OAAO;YAAwB,GACjC;gBAAEC,QAAQ;YAAI;QAElB;IACF;IAEA;;;GAGC,GACD,eAAeoE,OACb1E,OAAoB,EACpBC,OAAkC;QAElC,IAAI;YACF,0BAA0B;YAC1B,MAAMC,SAAS,MAAMD,QAAQC,MAAM;YACnC,MAAMC,KAAKD,OAAOC,EAAE;YAEpB,IAAI,CAACA,IAAI;gBACP,OAAOf,aAAagB,IAAI,CACtB;oBAAEC,OAAO;gBAAsB,GAC/B;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,eAAe;YACf,MAAMC,aAAa,MAAMX,KAAKY,YAAY,CAACR;YAC3C,IAAI,CAACO,WAAWE,aAAa,IAAI,CAACF,WAAWG,IAAI,EAAE;gBACjD,OAAOtB,aAAagB,IAAI,CACtB;oBAAEC,OAAOE,WAAWF,KAAK,IAAI;gBAAe,GAC5C;oBAAEC,QAAQ;gBAAI;YAElB;YAEA,0BAA0B;YAC1B,IAAIV,KAAK+E,SAAS,EAAE;gBAClB,MAAM/D,aAAa,MAAMhB,KAAK+E,SAAS,CAACpE,WAAWG,IAAI,EAAEP;gBACzD,IAAI,CAACS,WAAWC,OAAO,EAAE;oBACvB,OAAOzB,aAAagB,IAAI,CACtB;wBAAEC,OAAOO,WAAWP,KAAK,IAAI;oBAAY,GACzC;wBAAEC,QAAQ;oBAAI;gBAElB;YACF;YAEA,4CAA4C;YAC5C,MAAMQ,SAAS,MAAMnB;YACrB,MAAMoB,UAAU,MAAM1B,WAAW;gBAAEyB;YAAO;YAE1C,MAAMC,QAAQ6D,MAAM,CAAC;gBACnBlF;gBACAS;YACF;YAEA,OAAOf,aAAagB,IAAI,CAAC;gBAAEyE,SAAS;YAAK;QAC3C,EAAE,OAAOxE,OAAO;YACd,MAAMH,SAAS,MAAMD,QAAQC,MAAM;YACnC,IAAIJ,SAAS;gBACXA,QAAQO,OAAO;oBAAEoB,WAAW;oBAAUzB;oBAAS0B,QAAQxB,OAAOC,EAAE;gBAAC;YACnE;YACAwB,QAAQtB,KAAK,CAAC,wBAAwBA;YACtC,OAAOjB,aAAagB,IAAI,CACtB;gBAAEC,OAAO;YAAwB,GACjC;gBAAEC,QAAQ;YAAI;QAElB;IACF;IAEA,OAAO;QAAEP;QAAK6B;QAAO8C;IAAO;AAC9B"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
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 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/api/utils/mapRootProps.ts"],"sourcesContent":["import type { RootPropsMapping } from '../types.js'\n\n/**\n * Default mappings from Puck root.props to Payload fields\n *\n * These mappings sync common page properties from Puck's visual editor\n * to the corresponding Payload collection fields.\n *\n * SEO fields use the official @payloadcms/plugin-seo convention: meta.title, meta.description\n */\nexport const DEFAULT_ROOT_PROPS_MAPPINGS: RootPropsMapping[] = [\n // Core page fields\n { from: 'title', to: 'title' },\n { from: 'slug', to: 'slug' },\n { from: 'pageLayout', to: 'pageLayout' },\n { from: 'pageType', to: 'pageType' },\n { from: 'isHomepage', to: 'isHomepage' },\n\n // Page-tree integration fields\n { from: 'folder', to: 'folder' },\n { from: 'pageSegment', to: 'pageSegment' },\n\n // SEO/Meta fields (uses official @payloadcms/plugin-seo convention)\n { from: 'metaTitle', to: 'meta.title' },\n { from: 'metaDescription', to: 'meta.description' },\n { from: 'noindex', to: 'meta.noindex' },\n { from: 'nofollow', to: 'meta.nofollow' },\n { from: 'excludeFromSitemap', to: 'meta.excludeFromSitemap' },\n\n // Conversion tracking fields\n { from: 'isConversionPage', to: 'conversionTracking.isConversionPage' },\n { from: 'conversionType', to: 'conversionTracking.conversionType' },\n { from: 'conversionValue', to: 'conversionTracking.conversionValue' },\n]\n\n/**\n * Set a nested value in an object using dot notation path\n *\n * @example\n * ```typescript\n * const obj = {}\n * setNestedValue(obj, 'meta.title', 'My Title')\n * // Result: { meta: { title: 'My Title' } }\n * ```\n */\nexport function setNestedValue(\n obj: Record<string, unknown>,\n path: string,\n value: unknown\n): void {\n const keys = path.split('.')\n let current = obj\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i]\n if (!(key in current) || typeof current[key] !== 'object') {\n current[key] = {}\n }\n current = current[key] as Record<string, unknown>\n }\n\n const finalKey = keys[keys.length - 1]\n current[finalKey] = value\n}\n\n/**\n * Get a nested value from an object using dot notation path\n *\n * @example\n * ```typescript\n * const obj = { meta: { title: 'My Title' } }\n * getNestedValue(obj, 'meta.title') // 'My Title'\n * ```\n */\nexport function getNestedValue(\n obj: Record<string, unknown>,\n path: string\n): unknown {\n const keys = path.split('.')\n let current: unknown = obj\n\n for (const key of keys) {\n if (current === null || current === undefined) {\n return undefined\n }\n if (typeof current !== 'object') {\n return undefined\n }\n current = (current as Record<string, unknown>)[key]\n }\n\n return current\n}\n\n/**\n * Merge mappings, with custom mappings taking precedence over defaults\n *\n * @param customMappings - Custom mappings to merge with defaults\n * @returns Merged array of mappings with duplicates resolved (custom wins)\n */\nexport function mergeMappings(\n customMappings?: RootPropsMapping[]\n): RootPropsMapping[] {\n if (!customMappings || customMappings.length === 0) {\n return DEFAULT_ROOT_PROPS_MAPPINGS\n }\n\n // Create a map to track unique mappings by 'from' field\n const mappingMap = new Map<string, RootPropsMapping>()\n\n // Add defaults first\n for (const mapping of DEFAULT_ROOT_PROPS_MAPPINGS) {\n mappingMap.set(mapping.from, mapping)\n }\n\n // Custom mappings override defaults\n for (const mapping of customMappings) {\n mappingMap.set(mapping.from, mapping)\n }\n\n return Array.from(mappingMap.values())\n}\n\n/**\n * Map Puck root.props to Payload field update data\n *\n * Takes the root.props from Puck data and maps them to the appropriate\n * Payload fields based on the provided mappings.\n *\n * @param rootProps - The root.props object from Puck data\n * @param customMappings - Optional custom mappings to merge with defaults\n * @returns Object ready to be spread into Payload update data\n *\n * @example\n * ```typescript\n * const rootProps = {\n * title: 'My Page',\n * metaTitle: 'My Page | Site Name',\n * metaDescription: 'Description here',\n * }\n *\n * const updateData = mapRootPropsToPayloadFields(rootProps)\n * // Result: {\n * // title: 'My Page',\n * // meta: {\n * // title: 'My Page | Site Name',\n * // description: 'Description here',\n * // },\n * // }\n * ```\n */\nexport function mapRootPropsToPayloadFields(\n rootProps: Record<string, unknown>,\n customMappings?: RootPropsMapping[]\n): Record<string, unknown> {\n const mappings = mergeMappings(customMappings)\n const result: Record<string, unknown> = {}\n\n for (const mapping of mappings) {\n const value = rootProps[mapping.from]\n\n // Skip undefined values to avoid overwriting existing data\n if (value === undefined) {\n continue\n }\n\n // Apply transformation if provided\n const transformedValue = mapping.transform ? mapping.transform(value) : value\n\n // Set the value at the target path\n setNestedValue(result, mapping.to, transformedValue)\n }\n\n return result\n}\n\n/**\n * Deep merge objects, with source values overwriting target values\n *\n * @param target - The target object to merge into\n * @param source - The source object to merge from\n * @returns The merged object (target is modified in place)\n */\nexport function deepMerge(\n target: Record<string, unknown>,\n source: Record<string, unknown>\n): Record<string, unknown> {\n for (const key of Object.keys(source)) {\n const sourceValue = source[key]\n const targetValue = target[key]\n\n if (\n sourceValue !== null &&\n typeof sourceValue === 'object' &&\n !Array.isArray(sourceValue) &&\n targetValue !== null &&\n typeof targetValue === 'object' &&\n !Array.isArray(targetValue)\n ) {\n // Recursively merge nested objects\n target[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n )\n } else {\n // Direct assignment for non-object values or arrays\n target[key] = sourceValue\n }\n }\n\n return target\n}\n\n/**\n * Map Payload document fields to Puck root.props format\n *\n * This is the reverse of mapRootPropsToPayloadFields. It takes a Payload\n * document and extracts the fields that should be synced to root.props\n * when loading the editor.\n *\n * @param doc - The Payload document\n * @param customMappings - Optional custom mappings to merge with defaults\n * @returns Object with root.props field names and values\n *\n * @example\n * ```typescript\n * const page = { title: 'My Page', isHomepage: true, meta: { title: 'SEO Title' } }\n * const rootProps = mapPayloadFieldsToRootProps(page)\n * // Result: { title: 'My Page', isHomepage: true, metaTitle: 'SEO Title' }\n * ```\n */\nexport function mapPayloadFieldsToRootProps(\n doc: Record<string, unknown>,\n customMappings?: RootPropsMapping[]\n): Record<string, unknown> {\n const mappings = mergeMappings(customMappings)\n const result: Record<string, unknown> = {}\n\n for (const mapping of mappings) {\n // Get value from Payload field (supports dot notation for nested fields)\n const value = getNestedValue(doc, mapping.to)\n\n // Skip undefined values\n if (value === undefined) {\n continue\n }\n\n // Set the value using the root.props field name\n result[mapping.from] = value\n }\n\n return result\n}\n"],"names":["DEFAULT_ROOT_PROPS_MAPPINGS","from","to","setNestedValue","obj","path","value","keys","split","current","i","length","key","finalKey","getNestedValue","undefined","mergeMappings","customMappings","mappingMap","Map","mapping","set","Array","values","mapRootPropsToPayloadFields","rootProps","mappings","result","transformedValue","transform","deepMerge","target","source","Object","sourceValue","targetValue","isArray","mapPayloadFieldsToRootProps","doc"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Templates.d.ts","sourceRoot":"","sources":["../../src/collections/Templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,gBAsDjC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/collections/Templates.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\n/**\n * Templates Collection - Stores reusable Puck component configurations\n *\n * This collection stores serialized Puck component data that can be\n * loaded into Template components for reuse across pages.\n */\nexport const TemplatesCollection: CollectionConfig = {\n slug: 'puck-templates',\n admin: {\n useAsTitle: 'name',\n group: 'Puck',\n defaultColumns: ['name', 'category', 'updatedAt'],\n description: 'Reusable component templates for the visual editor',\n },\n access: {\n read: () => true,\n create: ({ req }) => !!req.user,\n update: ({ req }) => !!req.user,\n delete: ({ req }) => !!req.user,\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n required: true,\n admin: {\n description: 'A descriptive name for this template',\n },\n },\n {\n name: 'description',\n type: 'textarea',\n admin: {\n description: 'Optional description of what this template contains',\n },\n },\n {\n name: 'category',\n type: 'text',\n admin: {\n description: 'Category for organizing templates (e.g., \"Hero\", \"Footer\", \"CTA\")',\n },\n },\n {\n name: 'content',\n type: 'json',\n required: true,\n admin: {\n description: 'Serialized Puck component data',\n },\n },\n {\n name: 'thumbnail',\n type: 'text',\n admin: {\n description: 'Optional thumbnail URL for template preview',\n },\n },\n ],\n timestamps: true,\n}\n"],"names":["TemplatesCollection","slug","admin","useAsTitle","group","defaultColumns","description","access","read","create","req","user","update","delete","fields","name","type","required","timestamps"],"mappings":"AAEA;;;;;CAKC,GACD,OAAO,MAAMA,sBAAwC;IACnDC,MAAM;IACNC,OAAO;QACLC,YAAY;QACZC,OAAO;QACPC,gBAAgB;YAAC;YAAQ;YAAY;SAAY;QACjDC,aAAa;IACf;IACAC,QAAQ;QACNC,MAAM,IAAM;QACZC,QAAQ,CAAC,EAAEC,GAAG,EAAE,GAAK,CAAC,CAACA,IAAIC,IAAI;QAC/BC,QAAQ,CAAC,EAAEF,GAAG,EAAE,GAAK,CAAC,CAACA,IAAIC,IAAI;QAC/BE,QAAQ,CAAC,EAAEH,GAAG,EAAE,GAAK,CAAC,CAACA,IAAIC,IAAI;IACjC;IACAG,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,UAAU;YACVf,OAAO;gBACLI,aAAa;YACf;QACF;QACA;YACES,MAAM;YACNC,MAAM;YACNd,OAAO;gBACLI,aAAa;YACf;QACF;QACA;YACES,MAAM;YACNC,MAAM;YACNd,OAAO;gBACLI,aAAa;YACf;QACF;QACA;YACES,MAAM;YACNC,MAAM;YACNC,UAAU;YACVf,OAAO;gBACLI,aAAa;YACf;QACF;QACA;YACES,MAAM;YACNC,MAAM;YACNd,OAAO;gBACLI,aAAa;YACf;QACF;KACD;IACDY,YAAY;AACd,EAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AccordionClient.d.ts","sourceRoot":"","sources":["../../src/components/AccordionClient.tsx"],"names":[],"mappings":"AAWA,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,qBAAqB,CAAA;AAG5B,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,aAAa,EAAE,OAAO,CAAA;IACtB,SAAS,EAAE,UAAU,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;IAClC,UAAU,EAAE,eAAe,GAAG,IAAI,CAAA;IAClC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAA;IAChC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAA;IAChC,aAAa,EAAE,YAAY,GAAG,IAAI,CAAA;CACnC;AAiDD,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,aAAa,EACb,SAAS,EACT,MAAM,EACN,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,aAAa,GACd,EAAE,oBAAoB,+BAiFtB"}