@delmaredigital/payload-puck 0.6.10 → 0.6.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/README.md +79 -1
  2. package/dist/admin/EditWithPuckButton.d.ts +1 -1
  3. package/dist/admin/EditWithPuckButton.d.ts.map +1 -1
  4. package/dist/admin/EditWithPuckButton.js +65 -25
  5. package/dist/admin/EditWithPuckButton.js.map +1 -1
  6. package/dist/admin/EditWithPuckCell.js +43 -13
  7. package/dist/admin/EditWithPuckCell.js.map +1 -1
  8. package/dist/admin/PuckEditorView.d.ts +1 -1
  9. package/dist/admin/PuckEditorView.d.ts.map +1 -1
  10. package/dist/admin/PuckEditorView.js +118 -32
  11. package/dist/admin/PuckEditorView.js.map +1 -1
  12. package/dist/admin/client.d.ts +2 -2
  13. package/dist/admin/client.d.ts.map +1 -1
  14. package/dist/admin/client.js +4 -4
  15. package/dist/admin/client.js.map +1 -1
  16. package/dist/admin/generateAdminComponents.js +7 -7
  17. package/dist/admin/generateAdminComponents.js.map +1 -1
  18. package/dist/admin/index.d.ts +5 -5
  19. package/dist/admin/index.d.ts.map +1 -1
  20. package/dist/admin/index.js +3 -2
  21. package/dist/admin/index.js.map +1 -1
  22. package/dist/ai/collections/AiContext.js +56 -29
  23. package/dist/ai/collections/AiContext.js.map +1 -1
  24. package/dist/ai/collections/AiPrompts.js +24 -19
  25. package/dist/ai/collections/AiPrompts.js.map +1 -1
  26. package/dist/ai/createAiApiRoutes.js +28 -19
  27. package/dist/ai/createAiApiRoutes.js.map +1 -1
  28. package/dist/ai/createAiGenerate.js +7 -8
  29. package/dist/ai/createAiGenerate.js.map +1 -1
  30. package/dist/ai/createAiPlugin.js +7 -9
  31. package/dist/ai/createAiPlugin.js.map +1 -1
  32. package/dist/ai/hooks/useAiContext.js +50 -39
  33. package/dist/ai/hooks/useAiContext.js.map +1 -1
  34. package/dist/ai/hooks/useAiPrompts.js +33 -25
  35. package/dist/ai/hooks/useAiPrompts.js.map +1 -1
  36. package/dist/ai/index.js +9 -10
  37. package/dist/ai/index.js.map +1 -1
  38. package/dist/ai/plugins/ContextEditorPanel.d.ts +1 -1
  39. package/dist/ai/plugins/ContextEditorPanel.d.ts.map +1 -1
  40. package/dist/ai/plugins/ContextEditorPanel.js +399 -107
  41. package/dist/ai/plugins/ContextEditorPanel.js.map +1 -1
  42. package/dist/ai/plugins/PromptEditorPanel.d.ts +1 -1
  43. package/dist/ai/plugins/PromptEditorPanel.d.ts.map +1 -1
  44. package/dist/ai/plugins/PromptEditorPanel.js +237 -51
  45. package/dist/ai/plugins/PromptEditorPanel.js.map +1 -1
  46. package/dist/ai/plugins/contextEditorPlugin.js +12 -5
  47. package/dist/ai/plugins/contextEditorPlugin.js.map +1 -1
  48. package/dist/ai/plugins/promptApiRoutes.js +119 -50
  49. package/dist/ai/plugins/promptApiRoutes.js.map +1 -1
  50. package/dist/ai/plugins/promptEditorPlugin.js +12 -5
  51. package/dist/ai/plugins/promptEditorPlugin.js.map +1 -1
  52. package/dist/ai/presets/componentAiDefaults.js +108 -83
  53. package/dist/ai/presets/componentAiDefaults.js.map +1 -1
  54. package/dist/ai/presets/index.js +12 -18
  55. package/dist/ai/presets/index.js.map +1 -1
  56. package/dist/ai/presets/instructions/interactive.js +85 -75
  57. package/dist/ai/presets/instructions/interactive.js.map +1 -1
  58. package/dist/ai/presets/instructions/layout.js +122 -117
  59. package/dist/ai/presets/instructions/layout.js.map +1 -1
  60. package/dist/ai/presets/instructions/media.js +31 -29
  61. package/dist/ai/presets/instructions/media.js.map +1 -1
  62. package/dist/ai/presets/instructions/pagePatterns.js +4 -6
  63. package/dist/ai/presets/instructions/pagePatterns.js.map +1 -1
  64. package/dist/ai/presets/instructions/schemas.js +495 -137
  65. package/dist/ai/presets/instructions/schemas.js.map +1 -1
  66. package/dist/ai/presets/instructions/typography.js +38 -33
  67. package/dist/ai/presets/instructions/typography.js.map +1 -1
  68. package/dist/ai/tools/index.js +92 -55
  69. package/dist/ai/tools/index.js.map +1 -1
  70. package/dist/ai/types.js +7 -1
  71. package/dist/ai/types.js.map +1 -1
  72. package/dist/ai/utils/injectAiConfig.js +33 -40
  73. package/dist/ai/utils/injectAiConfig.js.map +1 -1
  74. package/dist/api/createPuckApiRoutes.d.ts +1 -1
  75. package/dist/api/createPuckApiRoutes.d.ts.map +1 -1
  76. package/dist/api/createPuckApiRoutes.js +123 -65
  77. package/dist/api/createPuckApiRoutes.js.map +1 -1
  78. package/dist/api/createPuckApiRoutesVersions.d.ts +1 -1
  79. package/dist/api/createPuckApiRoutesVersions.d.ts.map +1 -1
  80. package/dist/api/createPuckApiRoutesVersions.js +88 -37
  81. package/dist/api/createPuckApiRoutesVersions.js.map +1 -1
  82. package/dist/api/createPuckApiRoutesWithId.d.ts +1 -1
  83. package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -1
  84. package/dist/api/createPuckApiRoutesWithId.js +166 -72
  85. package/dist/api/createPuckApiRoutesWithId.js.map +1 -1
  86. package/dist/api/index.d.ts +5 -5
  87. package/dist/api/index.d.ts.map +1 -1
  88. package/dist/api/index.js +6 -6
  89. package/dist/api/index.js.map +1 -1
  90. package/dist/api/payload-config.d.js +15 -0
  91. package/dist/api/payload-config.d.js.map +1 -0
  92. package/dist/api/types.js +4 -1
  93. package/dist/api/types.js.map +1 -1
  94. package/dist/api/utils/mapRootProps.d.ts +1 -1
  95. package/dist/api/utils/mapRootProps.d.ts.map +1 -1
  96. package/dist/api/utils/mapRootProps.js +77 -44
  97. package/dist/api/utils/mapRootProps.js.map +1 -1
  98. package/dist/collections/Templates.js +24 -20
  99. package/dist/collections/Templates.js.map +1 -1
  100. package/dist/components/AccordionClient.d.ts +2 -2
  101. package/dist/components/AccordionClient.d.ts.map +1 -1
  102. package/dist/components/AccordionClient.js +81 -22
  103. package/dist/components/AccordionClient.js.map +1 -1
  104. package/dist/components/AnimatedWrapper.d.ts +2 -2
  105. package/dist/components/AnimatedWrapper.d.ts.map +1 -1
  106. package/dist/components/AnimatedWrapper.js +31 -16
  107. package/dist/components/AnimatedWrapper.js.map +1 -1
  108. package/dist/components/exports.js +2 -2
  109. package/dist/components/exports.js.map +1 -1
  110. package/dist/components/index.d.ts +5 -5
  111. package/dist/components/index.d.ts.map +1 -1
  112. package/dist/components/index.js +7 -7
  113. package/dist/components/index.js.map +1 -1
  114. package/dist/components/interactive/Accordion.d.ts +1 -1
  115. package/dist/components/interactive/Accordion.d.ts.map +1 -1
  116. package/dist/components/interactive/Accordion.js +149 -55
  117. package/dist/components/interactive/Accordion.js.map +1 -1
  118. package/dist/components/interactive/Accordion.server.d.ts +1 -1
  119. package/dist/components/interactive/Accordion.server.d.ts.map +1 -1
  120. package/dist/components/interactive/Accordion.server.js +25 -7
  121. package/dist/components/interactive/Accordion.server.js.map +1 -1
  122. package/dist/components/interactive/Button.d.ts +3 -3
  123. package/dist/components/interactive/Button.d.ts.map +1 -1
  124. package/dist/components/interactive/Button.js +89 -43
  125. package/dist/components/interactive/Button.js.map +1 -1
  126. package/dist/components/interactive/Button.server.d.ts +2 -2
  127. package/dist/components/interactive/Button.server.d.ts.map +1 -1
  128. package/dist/components/interactive/Button.server.js +40 -20
  129. package/dist/components/interactive/Button.server.js.map +1 -1
  130. package/dist/components/interactive/Card.d.ts +3 -3
  131. package/dist/components/interactive/Card.d.ts.map +1 -1
  132. package/dist/components/interactive/Card.js +131 -39
  133. package/dist/components/interactive/Card.js.map +1 -1
  134. package/dist/components/interactive/Card.server.d.ts +3 -3
  135. package/dist/components/interactive/Card.server.d.ts.map +1 -1
  136. package/dist/components/interactive/Card.server.js +72 -11
  137. package/dist/components/interactive/Card.server.js.map +1 -1
  138. package/dist/components/interactive/Divider.d.ts +1 -1
  139. package/dist/components/interactive/Divider.d.ts.map +1 -1
  140. package/dist/components/interactive/Divider.js +54 -26
  141. package/dist/components/interactive/Divider.js.map +1 -1
  142. package/dist/components/interactive/Divider.server.d.ts +1 -1
  143. package/dist/components/interactive/Divider.server.d.ts.map +1 -1
  144. package/dist/components/interactive/Divider.server.js +28 -12
  145. package/dist/components/interactive/Divider.server.js.map +1 -1
  146. package/dist/components/interactive/index.d.ts +4 -4
  147. package/dist/components/interactive/index.d.ts.map +1 -1
  148. package/dist/components/interactive/index.js +5 -5
  149. package/dist/components/interactive/index.js.map +1 -1
  150. package/dist/components/layout/Container.d.ts +1 -1
  151. package/dist/components/layout/Container.d.ts.map +1 -1
  152. package/dist/components/layout/Container.js +101 -47
  153. package/dist/components/layout/Container.js.map +1 -1
  154. package/dist/components/layout/Container.server.d.ts +1 -1
  155. package/dist/components/layout/Container.server.d.ts.map +1 -1
  156. package/dist/components/layout/Container.server.js +67 -19
  157. package/dist/components/layout/Container.server.js.map +1 -1
  158. package/dist/components/layout/Flex.d.ts +2 -2
  159. package/dist/components/layout/Flex.d.ts.map +1 -1
  160. package/dist/components/layout/Flex.js +124 -55
  161. package/dist/components/layout/Flex.js.map +1 -1
  162. package/dist/components/layout/Flex.server.d.ts +1 -1
  163. package/dist/components/layout/Flex.server.d.ts.map +1 -1
  164. package/dist/components/layout/Flex.server.js +50 -14
  165. package/dist/components/layout/Flex.server.js.map +1 -1
  166. package/dist/components/layout/Grid.d.ts +1 -1
  167. package/dist/components/layout/Grid.d.ts.map +1 -1
  168. package/dist/components/layout/Grid.js +93 -44
  169. package/dist/components/layout/Grid.js.map +1 -1
  170. package/dist/components/layout/Grid.server.d.ts +1 -1
  171. package/dist/components/layout/Grid.server.d.ts.map +1 -1
  172. package/dist/components/layout/Grid.server.js +56 -14
  173. package/dist/components/layout/Grid.server.js.map +1 -1
  174. package/dist/components/layout/Section.d.ts +1 -1
  175. package/dist/components/layout/Section.d.ts.map +1 -1
  176. package/dist/components/layout/Section.js +147 -64
  177. package/dist/components/layout/Section.js.map +1 -1
  178. package/dist/components/layout/Section.server.d.ts +1 -1
  179. package/dist/components/layout/Section.server.d.ts.map +1 -1
  180. package/dist/components/layout/Section.server.js +92 -28
  181. package/dist/components/layout/Section.server.js.map +1 -1
  182. package/dist/components/layout/Spacer.d.ts +1 -1
  183. package/dist/components/layout/Spacer.d.ts.map +1 -1
  184. package/dist/components/layout/Spacer.js +80 -30
  185. package/dist/components/layout/Spacer.js.map +1 -1
  186. package/dist/components/layout/Spacer.server.d.ts +1 -1
  187. package/dist/components/layout/Spacer.server.d.ts.map +1 -1
  188. package/dist/components/layout/Spacer.server.js +31 -9
  189. package/dist/components/layout/Spacer.server.js.map +1 -1
  190. package/dist/components/layout/Template.d.ts +1 -1
  191. package/dist/components/layout/Template.d.ts.map +1 -1
  192. package/dist/components/layout/Template.js +58 -30
  193. package/dist/components/layout/Template.js.map +1 -1
  194. package/dist/components/layout/Template.server.d.ts +1 -1
  195. package/dist/components/layout/Template.server.d.ts.map +1 -1
  196. package/dist/components/layout/Template.server.js +43 -11
  197. package/dist/components/layout/Template.server.js.map +1 -1
  198. package/dist/components/layout/index.d.ts +8 -8
  199. package/dist/components/layout/index.d.ts.map +1 -1
  200. package/dist/components/layout/index.js +8 -8
  201. package/dist/components/layout/index.js.map +1 -1
  202. package/dist/components/media/Image.d.ts +3 -3
  203. package/dist/components/media/Image.d.ts.map +1 -1
  204. package/dist/components/media/Image.js +122 -39
  205. package/dist/components/media/Image.js.map +1 -1
  206. package/dist/components/media/Image.server.d.ts +3 -3
  207. package/dist/components/media/Image.server.d.ts.map +1 -1
  208. package/dist/components/media/Image.server.js +76 -13
  209. package/dist/components/media/Image.server.js.map +1 -1
  210. package/dist/components/media/index.d.ts +1 -1
  211. package/dist/components/media/index.d.ts.map +1 -1
  212. package/dist/components/media/index.js +2 -2
  213. package/dist/components/media/index.js.map +1 -1
  214. package/dist/components/typography/Heading.d.ts +2 -2
  215. package/dist/components/typography/Heading.d.ts.map +1 -1
  216. package/dist/components/typography/Heading.js +45 -25
  217. package/dist/components/typography/Heading.js.map +1 -1
  218. package/dist/components/typography/Heading.server.d.ts +2 -2
  219. package/dist/components/typography/Heading.server.d.ts.map +1 -1
  220. package/dist/components/typography/Heading.server.js +16 -10
  221. package/dist/components/typography/Heading.server.js.map +1 -1
  222. package/dist/components/typography/RichText.editor.d.ts +1 -1
  223. package/dist/components/typography/RichText.editor.d.ts.map +1 -1
  224. package/dist/components/typography/RichText.editor.js +44 -19
  225. package/dist/components/typography/RichText.editor.js.map +1 -1
  226. package/dist/components/typography/RichText.server.d.ts +2 -2
  227. package/dist/components/typography/RichText.server.d.ts.map +1 -1
  228. package/dist/components/typography/RichText.server.js +33 -14
  229. package/dist/components/typography/RichText.server.js.map +1 -1
  230. package/dist/components/typography/Text.d.ts +2 -2
  231. package/dist/components/typography/Text.d.ts.map +1 -1
  232. package/dist/components/typography/Text.js +49 -23
  233. package/dist/components/typography/Text.js.map +1 -1
  234. package/dist/components/typography/Text.server.d.ts +2 -2
  235. package/dist/components/typography/Text.server.d.ts.map +1 -1
  236. package/dist/components/typography/Text.server.js +21 -8
  237. package/dist/components/typography/Text.server.js.map +1 -1
  238. package/dist/components/typography/index.d.ts +4 -4
  239. package/dist/components/typography/index.d.ts.map +1 -1
  240. package/dist/components/typography/index.js +5 -5
  241. package/dist/components/typography/index.js.map +1 -1
  242. package/dist/config/config.editor.d.ts +3 -3
  243. package/dist/config/config.editor.d.ts.map +1 -1
  244. package/dist/config/config.editor.js +119 -54
  245. package/dist/config/config.editor.js.map +1 -1
  246. package/dist/config/index.d.ts +4 -4
  247. package/dist/config/index.d.ts.map +1 -1
  248. package/dist/config/index.js +62 -35
  249. package/dist/config/index.js.map +1 -1
  250. package/dist/config/merge.d.ts +1 -1
  251. package/dist/config/merge.d.ts.map +1 -1
  252. package/dist/config/merge.js +23 -26
  253. package/dist/config/merge.js.map +1 -1
  254. package/dist/config/presets.d.ts +4 -4
  255. package/dist/config/presets.js +195 -75
  256. package/dist/config/presets.js.map +1 -1
  257. package/dist/config/types.js +6 -2
  258. package/dist/config/types.js.map +1 -1
  259. package/dist/editor/PuckEditor.d.ts +12 -4
  260. package/dist/editor/PuckEditor.d.ts.map +1 -1
  261. package/dist/editor/PuckEditor.js +168 -67
  262. package/dist/editor/PuckEditor.js.map +1 -1
  263. package/dist/editor/PuckEditorImpl.client.d.ts +4 -4
  264. package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
  265. package/dist/editor/PuckEditorImpl.client.js +304 -152
  266. package/dist/editor/PuckEditorImpl.client.js.map +1 -1
  267. package/dist/editor/components/DarkModeStyles.js +11 -12
  268. package/dist/editor/components/DarkModeStyles.js.map +1 -1
  269. package/dist/editor/components/HeaderActions.js +308 -64
  270. package/dist/editor/components/HeaderActions.js.map +1 -1
  271. package/dist/editor/components/IframeWrapper.d.ts +1 -1
  272. package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
  273. package/dist/editor/components/IframeWrapper.js +82 -58
  274. package/dist/editor/components/IframeWrapper.js.map +1 -1
  275. package/dist/editor/components/LoadingState.d.ts +1 -1
  276. package/dist/editor/components/LoadingState.d.ts.map +1 -1
  277. package/dist/editor/components/LoadingState.js +17 -3
  278. package/dist/editor/components/LoadingState.js.map +1 -1
  279. package/dist/editor/components/PreviewModal.js +234 -78
  280. package/dist/editor/components/PreviewModal.js.map +1 -1
  281. package/dist/editor/components/PreviewModeToggle.js +43 -15
  282. package/dist/editor/components/PreviewModeToggle.js.map +1 -1
  283. package/dist/editor/components/VersionHistory.js +219 -71
  284. package/dist/editor/components/VersionHistory.js.map +1 -1
  285. package/dist/editor/hooks/useDarkMode.js +36 -23
  286. package/dist/editor/hooks/useDarkMode.js.map +1 -1
  287. package/dist/editor/hooks/useUnsavedChanges.js +8 -8
  288. package/dist/editor/hooks/useUnsavedChanges.js.map +1 -1
  289. package/dist/editor/index.js +5 -6
  290. package/dist/editor/index.js.map +1 -1
  291. package/dist/editor/plugins/VersionHistoryPanel.js +236 -75
  292. package/dist/editor/plugins/VersionHistoryPanel.js.map +1 -1
  293. package/dist/editor/plugins/index.js +4 -4
  294. package/dist/editor/plugins/index.js.map +1 -1
  295. package/dist/editor/plugins/versionHistoryPlugin.js +10 -8
  296. package/dist/editor/plugins/versionHistoryPlugin.js.map +1 -1
  297. package/dist/editor/utils/detectPageTree.js +5 -5
  298. package/dist/editor/utils/detectPageTree.js.map +1 -1
  299. package/dist/editor/utils/index.js +1 -0
  300. package/dist/editor/utils/index.js.map +1 -1
  301. package/dist/editor/utils/injectPageTreeFields.js +13 -9
  302. package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
  303. package/dist/endpoints/ai.js +58 -34
  304. package/dist/endpoints/ai.js.map +1 -1
  305. package/dist/endpoints/context.js +86 -40
  306. package/dist/endpoints/context.js.map +1 -1
  307. package/dist/endpoints/index.js +153 -76
  308. package/dist/endpoints/index.js.map +1 -1
  309. package/dist/endpoints/postcss.d.js +5 -0
  310. package/dist/endpoints/postcss.d.js.map +1 -0
  311. package/dist/endpoints/prompts.js +81 -39
  312. package/dist/endpoints/prompts.js.map +1 -1
  313. package/dist/endpoints/styles.js +34 -36
  314. package/dist/endpoints/styles.js.map +1 -1
  315. package/dist/exports/client.js +2 -2
  316. package/dist/exports/client.js.map +1 -1
  317. package/dist/exports/rsc.js +2 -2
  318. package/dist/exports/rsc.js.map +1 -1
  319. package/dist/fields/AlignmentField.d.ts +1 -1
  320. package/dist/fields/AlignmentField.d.ts.map +1 -1
  321. package/dist/fields/AlignmentField.js +93 -30
  322. package/dist/fields/AlignmentField.js.map +1 -1
  323. package/dist/fields/AnimationField.d.ts +2 -2
  324. package/dist/fields/AnimationField.d.ts.map +1 -1
  325. package/dist/fields/AnimationField.js +558 -84
  326. package/dist/fields/AnimationField.js.map +1 -1
  327. package/dist/fields/BackgroundField.d.ts +2 -2
  328. package/dist/fields/BackgroundField.d.ts.map +1 -1
  329. package/dist/fields/BackgroundField.js +754 -120
  330. package/dist/fields/BackgroundField.js.map +1 -1
  331. package/dist/fields/BorderField.d.ts +2 -2
  332. package/dist/fields/BorderField.d.ts.map +1 -1
  333. package/dist/fields/BorderField.js +275 -73
  334. package/dist/fields/BorderField.js.map +1 -1
  335. package/dist/fields/ColorPickerField.d.ts +2 -2
  336. package/dist/fields/ColorPickerField.d.ts.map +1 -1
  337. package/dist/fields/ColorPickerField.js +210 -68
  338. package/dist/fields/ColorPickerField.js.map +1 -1
  339. package/dist/fields/ContentAlignmentField.d.ts +1 -1
  340. package/dist/fields/ContentAlignmentField.d.ts.map +1 -1
  341. package/dist/fields/ContentAlignmentField.js +161 -75
  342. package/dist/fields/ContentAlignmentField.js.map +1 -1
  343. package/dist/fields/DimensionsField.d.ts +2 -2
  344. package/dist/fields/DimensionsField.d.ts.map +1 -1
  345. package/dist/fields/DimensionsField.js +575 -146
  346. package/dist/fields/DimensionsField.js.map +1 -1
  347. package/dist/fields/FlexAlignmentField.d.ts +2 -2
  348. package/dist/fields/FlexAlignmentField.d.ts.map +1 -1
  349. package/dist/fields/FlexAlignmentField.js +189 -51
  350. package/dist/fields/FlexAlignmentField.js.map +1 -1
  351. package/dist/fields/FolderPickerField.d.ts +8 -1
  352. package/dist/fields/FolderPickerField.d.ts.map +1 -1
  353. package/dist/fields/FolderPickerField.js +288 -75
  354. package/dist/fields/FolderPickerField.js.map +1 -1
  355. package/dist/fields/GradientEditor.d.ts +2 -2
  356. package/dist/fields/GradientEditor.d.ts.map +1 -1
  357. package/dist/fields/GradientEditor.js +462 -86
  358. package/dist/fields/GradientEditor.js.map +1 -1
  359. package/dist/fields/LockedField.d.ts +15 -2
  360. package/dist/fields/LockedField.d.ts.map +1 -1
  361. package/dist/fields/LockedField.js +180 -49
  362. package/dist/fields/LockedField.js.map +1 -1
  363. package/dist/fields/MarginField.d.ts +2 -2
  364. package/dist/fields/MarginField.d.ts.map +1 -1
  365. package/dist/fields/MarginField.js +144 -46
  366. package/dist/fields/MarginField.js.map +1 -1
  367. package/dist/fields/MediaField.d.ts +1 -1
  368. package/dist/fields/MediaField.d.ts.map +1 -1
  369. package/dist/fields/MediaField.js +688 -186
  370. package/dist/fields/MediaField.js.map +1 -1
  371. package/dist/fields/PaddingField.d.ts +2 -2
  372. package/dist/fields/PaddingField.d.ts.map +1 -1
  373. package/dist/fields/PaddingField.js +144 -46
  374. package/dist/fields/PaddingField.js.map +1 -1
  375. package/dist/fields/PageSegmentField.d.ts +15 -2
  376. package/dist/fields/PageSegmentField.d.ts.map +1 -1
  377. package/dist/fields/PageSegmentField.js +156 -54
  378. package/dist/fields/PageSegmentField.js.map +1 -1
  379. package/dist/fields/ResetField.d.ts +1 -1
  380. package/dist/fields/ResetField.d.ts.map +1 -1
  381. package/dist/fields/ResetField.js +59 -31
  382. package/dist/fields/ResetField.js.map +1 -1
  383. package/dist/fields/ResponsiveField.d.ts +1 -1
  384. package/dist/fields/ResponsiveField.d.ts.map +1 -1
  385. package/dist/fields/ResponsiveField.js +233 -90
  386. package/dist/fields/ResponsiveField.js.map +1 -1
  387. package/dist/fields/ResponsiveVisibilityField.d.ts +2 -2
  388. package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -1
  389. package/dist/fields/ResponsiveVisibilityField.js +119 -36
  390. package/dist/fields/ResponsiveVisibilityField.js.map +1 -1
  391. package/dist/fields/SizeField.d.ts +3 -3
  392. package/dist/fields/SizeField.d.ts.map +1 -1
  393. package/dist/fields/SizeField.js +226 -52
  394. package/dist/fields/SizeField.js.map +1 -1
  395. package/dist/fields/SlugPreviewField.d.ts +8 -1
  396. package/dist/fields/SlugPreviewField.d.ts.map +1 -1
  397. package/dist/fields/SlugPreviewField.js +65 -16
  398. package/dist/fields/SlugPreviewField.js.map +1 -1
  399. package/dist/fields/TemplateField.d.ts +1 -1
  400. package/dist/fields/TemplateField.d.ts.map +1 -1
  401. package/dist/fields/TemplateField.js +362 -120
  402. package/dist/fields/TemplateField.js.map +1 -1
  403. package/dist/fields/TransformField.d.ts +2 -2
  404. package/dist/fields/TransformField.d.ts.map +1 -1
  405. package/dist/fields/TransformField.js +517 -81
  406. package/dist/fields/TransformField.js.map +1 -1
  407. package/dist/fields/VerticalAlignmentField.d.ts +1 -1
  408. package/dist/fields/VerticalAlignmentField.d.ts.map +1 -1
  409. package/dist/fields/VerticalAlignmentField.js +93 -30
  410. package/dist/fields/VerticalAlignmentField.js.map +1 -1
  411. package/dist/fields/WidthField.d.ts +2 -2
  412. package/dist/fields/WidthField.d.ts.map +1 -1
  413. package/dist/fields/WidthField.js +278 -81
  414. package/dist/fields/WidthField.js.map +1 -1
  415. package/dist/fields/index.d.ts +41 -41
  416. package/dist/fields/index.d.ts.map +1 -1
  417. package/dist/fields/index.js +37 -43
  418. package/dist/fields/index.js.map +1 -1
  419. package/dist/fields/richtext/controls/ColorPickerControl.d.ts +13 -2
  420. package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +1 -1
  421. package/dist/fields/richtext/controls/ColorPickerControl.js +212 -47
  422. package/dist/fields/richtext/controls/ColorPickerControl.js.map +1 -1
  423. package/dist/fields/richtext/controls/DropdownPortal.d.ts +2 -2
  424. package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +1 -1
  425. package/dist/fields/richtext/controls/DropdownPortal.js +36 -4
  426. package/dist/fields/richtext/controls/DropdownPortal.js.map +1 -1
  427. package/dist/fields/richtext/controls/FontSizeControl.d.ts +9 -1
  428. package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +1 -1
  429. package/dist/fields/richtext/controls/FontSizeControl.js +109 -24
  430. package/dist/fields/richtext/controls/FontSizeControl.js.map +1 -1
  431. package/dist/fields/richtext/controls/HighlightControl.d.ts +12 -1
  432. package/dist/fields/richtext/controls/HighlightControl.d.ts.map +1 -1
  433. package/dist/fields/richtext/controls/HighlightControl.js +54 -17
  434. package/dist/fields/richtext/controls/HighlightControl.js.map +1 -1
  435. package/dist/fields/richtext/controls/index.d.ts +5 -5
  436. package/dist/fields/richtext/controls/index.d.ts.map +1 -1
  437. package/dist/fields/richtext/controls/index.js +8 -11
  438. package/dist/fields/richtext/controls/index.js.map +1 -1
  439. package/dist/fields/richtext/controls/shared.js +108 -63
  440. package/dist/fields/richtext/controls/shared.js.map +1 -1
  441. package/dist/fields/richtext/createRichTextField.d.ts +18 -4
  442. package/dist/fields/richtext/createRichTextField.d.ts.map +1 -1
  443. package/dist/fields/richtext/createRichTextField.js +113 -26
  444. package/dist/fields/richtext/createRichTextField.js.map +1 -1
  445. package/dist/fields/richtext/extensions/FontSize.js +26 -20
  446. package/dist/fields/richtext/extensions/FontSize.js.map +1 -1
  447. package/dist/fields/richtext/extensions/index.d.ts +1 -1
  448. package/dist/fields/richtext/extensions/index.d.ts.map +1 -1
  449. package/dist/fields/richtext/extensions/index.js +2 -2
  450. package/dist/fields/richtext/extensions/index.js.map +1 -1
  451. package/dist/fields/richtext/index.d.ts +6 -6
  452. package/dist/fields/richtext/index.d.ts.map +1 -1
  453. package/dist/fields/richtext/index.js +8 -8
  454. package/dist/fields/richtext/index.js.map +1 -1
  455. package/dist/fields/shared.d.ts +1 -1
  456. package/dist/fields/shared.d.ts.map +1 -1
  457. package/dist/fields/shared.js +915 -478
  458. package/dist/fields/shared.js.map +1 -1
  459. package/dist/hooks/index.d.ts +2 -2
  460. package/dist/hooks/index.d.ts.map +1 -1
  461. package/dist/hooks/index.js +3 -3
  462. package/dist/hooks/index.js.map +1 -1
  463. package/dist/hooks/useResponsiveStyles.d.ts +1 -1
  464. package/dist/hooks/useResponsiveStyles.d.ts.map +1 -1
  465. package/dist/hooks/useResponsiveStyles.js +36 -32
  466. package/dist/hooks/useResponsiveStyles.js.map +1 -1
  467. package/dist/hooks/useScrollAnimation.js +26 -24
  468. package/dist/hooks/useScrollAnimation.js.map +1 -1
  469. package/dist/index.d.ts +4 -4
  470. package/dist/index.d.ts.map +1 -1
  471. package/dist/index.js +5 -5
  472. package/dist/index.js.map +1 -1
  473. package/dist/layouts/LayoutWrapper.d.ts +3 -3
  474. package/dist/layouts/LayoutWrapper.d.ts.map +1 -1
  475. package/dist/layouts/LayoutWrapper.js +115 -51
  476. package/dist/layouts/LayoutWrapper.js.map +1 -1
  477. package/dist/layouts/defaults.d.ts +1 -1
  478. package/dist/layouts/defaults.d.ts.map +1 -1
  479. package/dist/layouts/defaults.js +23 -31
  480. package/dist/layouts/defaults.js.map +1 -1
  481. package/dist/layouts/index.d.ts +4 -4
  482. package/dist/layouts/index.d.ts.map +1 -1
  483. package/dist/layouts/index.js +5 -4
  484. package/dist/layouts/index.js.map +1 -1
  485. package/dist/layouts/types.js +4 -2
  486. package/dist/layouts/types.js.map +1 -1
  487. package/dist/layouts/utils.d.ts +1 -1
  488. package/dist/layouts/utils.d.ts.map +1 -1
  489. package/dist/layouts/utils.js +32 -40
  490. package/dist/layouts/utils.js.map +1 -1
  491. package/dist/next/index.js +31 -34
  492. package/dist/next/index.js.map +1 -1
  493. package/dist/plugin/collections/Pages.d.ts +2 -2
  494. package/dist/plugin/collections/Pages.d.ts.map +1 -1
  495. package/dist/plugin/collections/Pages.js +46 -43
  496. package/dist/plugin/collections/Pages.js.map +1 -1
  497. package/dist/plugin/fields/index.d.ts +3 -3
  498. package/dist/plugin/fields/index.d.ts.map +1 -1
  499. package/dist/plugin/fields/index.js +100 -78
  500. package/dist/plugin/fields/index.js.map +1 -1
  501. package/dist/plugin/fields/types.d.ts +1 -1
  502. package/dist/plugin/fields/types.d.ts.map +1 -1
  503. package/dist/plugin/fields/types.js +26 -2
  504. package/dist/plugin/fields/types.js.map +1 -1
  505. package/dist/plugin/hooks/index.d.ts +1 -1
  506. package/dist/plugin/hooks/index.d.ts.map +1 -1
  507. package/dist/plugin/hooks/index.js +2 -2
  508. package/dist/plugin/hooks/index.js.map +1 -1
  509. package/dist/plugin/hooks/isHomepageUnique.js +28 -19
  510. package/dist/plugin/hooks/isHomepageUnique.js.map +1 -1
  511. package/dist/plugin/index.d.ts +8 -8
  512. package/dist/plugin/index.d.ts.map +1 -1
  513. package/dist/plugin/index.js +192 -188
  514. package/dist/plugin/index.js.map +1 -1
  515. package/dist/render/HybridPageRenderer.d.ts +2 -2
  516. package/dist/render/HybridPageRenderer.d.ts.map +1 -1
  517. package/dist/render/HybridPageRenderer.js +58 -10
  518. package/dist/render/HybridPageRenderer.js.map +1 -1
  519. package/dist/render/PageRenderer.d.ts +2 -2
  520. package/dist/render/PageRenderer.d.ts.map +1 -1
  521. package/dist/render/PageRenderer.js +31 -14
  522. package/dist/render/PageRenderer.js.map +1 -1
  523. package/dist/render/PuckEditor.client.d.ts +1 -1
  524. package/dist/render/PuckEditor.client.d.ts.map +1 -1
  525. package/dist/render/PuckEditor.client.js +33 -16
  526. package/dist/render/PuckEditor.client.js.map +1 -1
  527. package/dist/render/index.d.ts +5 -5
  528. package/dist/render/index.d.ts.map +1 -1
  529. package/dist/render/index.js +5 -6
  530. package/dist/render/index.js.map +1 -1
  531. package/dist/styles/puck-dark-mode.css +101 -0
  532. package/dist/theme/context.d.ts +2 -2
  533. package/dist/theme/context.d.ts.map +1 -1
  534. package/dist/theme/context.js +21 -18
  535. package/dist/theme/context.js.map +1 -1
  536. package/dist/theme/defaults.d.ts +1 -1
  537. package/dist/theme/defaults.d.ts.map +1 -1
  538. package/dist/theme/defaults.js +83 -37
  539. package/dist/theme/defaults.js.map +1 -1
  540. package/dist/theme/example.d.ts +1 -1
  541. package/dist/theme/example.d.ts.map +1 -1
  542. package/dist/theme/example.js +68 -30
  543. package/dist/theme/example.js.map +1 -1
  544. package/dist/theme/index.d.ts +5 -5
  545. package/dist/theme/index.d.ts.map +1 -1
  546. package/dist/theme/index.js +6 -5
  547. package/dist/theme/index.js.map +1 -1
  548. package/dist/theme/types.js +6 -2
  549. package/dist/theme/types.js.map +1 -1
  550. package/dist/theme/utils.d.ts +1 -1
  551. package/dist/theme/utils.d.ts.map +1 -1
  552. package/dist/theme/utils.js +24 -25
  553. package/dist/theme/utils.js.map +1 -1
  554. package/dist/types/index.d.ts +42 -6
  555. package/dist/types/index.d.ts.map +1 -1
  556. package/dist/types/index.js +3 -1
  557. package/dist/types/index.js.map +1 -1
  558. package/dist/utils/index.d.ts +2 -2
  559. package/dist/utils/index.d.ts.map +1 -1
  560. package/dist/utils/index.js +13 -22
  561. package/dist/utils/index.js.map +1 -1
  562. package/dist/utils/migration.d.ts +1 -1
  563. package/dist/utils/migration.d.ts.map +1 -1
  564. package/dist/utils/migration.js +43 -49
  565. package/dist/utils/migration.js.map +1 -1
  566. package/dist/utils/validation.d.ts +1 -1
  567. package/dist/utils/validation.d.ts.map +1 -1
  568. package/dist/utils/validation.js +36 -43
  569. package/dist/utils/validation.js.map +1 -1
  570. package/dist/version.d.ts +1 -1
  571. package/dist/version.js +2 -1
  572. package/dist/version.js.map +1 -1
  573. package/dist/views/PuckConfigContext.d.ts +1 -1
  574. package/dist/views/PuckConfigContext.d.ts.map +1 -1
  575. package/dist/views/PuckConfigContext.js +25 -10
  576. package/dist/views/PuckConfigContext.js.map +1 -1
  577. package/dist/views/PuckEditorView.d.ts +1 -1
  578. package/dist/views/PuckEditorView.d.ts.map +1 -1
  579. package/dist/views/PuckEditorView.js +137 -41
  580. package/dist/views/PuckEditorView.js.map +1 -1
  581. package/dist/views/index.js +2 -2
  582. package/dist/views/index.js.map +1 -1
  583. package/package.json +62 -42
@@ -1 +1 @@
1
- {"version":3,"file":"AiPrompts.js","sourceRoot":"","sources":["../../../src/ai/collections/AiPrompts.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,IAAI,EAAE,iBAAiB;IACvB,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,YAAY;KACrB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,UAAU,EAAE,OAAO;QACnB,cAAc,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,yCAAyC;KACzD;IACD,MAAM,EAAE;QACN,kDAAkD;QAClD,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACtC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;KACvC;IACD,MAAM,EAAE;QACN;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,WAAW,EAAE,qDAAqD;aACnE;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,WAAW,EAAE,uCAAuC;gBACpD,IAAI,EAAE,CAAC;aACR;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE;gBACL,WAAW,EAAE,uEAAuE;aACrF;SACF;QACD;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,CAAC;YACf,KAAK,EAAE;gBACL,WAAW,EAAE,4CAA4C;aAC1D;SACF;KACF;IACD,UAAU,EAAE,IAAI;CACjB,CAAA"}
1
+ {"version":3,"sources":["../../../src/ai/collections/AiPrompts.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\n/**\n * AI Prompts Collection\n *\n * Stores example prompts for the AI chat interface.\n * These prompts are displayed in the Puck editor for users to quickly\n * start common AI generation tasks.\n */\nexport const AiPromptsCollection: CollectionConfig = {\n slug: 'puck-ai-prompts',\n labels: {\n singular: 'AI Prompt',\n plural: 'AI Prompts',\n },\n admin: {\n group: 'Puck',\n useAsTitle: 'label',\n defaultColumns: ['label', 'category', 'order', 'updatedAt'],\n hidden: false, // Visible in admin for prompt management\n },\n access: {\n // Default: authenticated users can manage prompts\n read: ({ req }) => Boolean(req.user),\n create: ({ req }) => Boolean(req.user),\n update: ({ req }) => Boolean(req.user),\n delete: ({ req }) => Boolean(req.user),\n },\n fields: [\n {\n name: 'label',\n type: 'text',\n required: true,\n admin: {\n description: 'Display label for the prompt (e.g., \"Landing page\")',\n },\n },\n {\n name: 'prompt',\n type: 'textarea',\n required: true,\n admin: {\n description: 'The actual prompt text sent to the AI',\n rows: 4,\n },\n },\n {\n name: 'category',\n type: 'text',\n admin: {\n description: 'Optional category for grouping prompts (e.g., \"Marketing\", \"Product\")',\n },\n },\n {\n name: 'order',\n type: 'number',\n defaultValue: 0,\n admin: {\n description: 'Display order (lower numbers appear first)',\n },\n },\n ],\n timestamps: true,\n}\n"],"names":["AiPromptsCollection","slug","labels","singular","plural","admin","group","useAsTitle","defaultColumns","hidden","access","read","req","Boolean","user","create","update","delete","fields","name","type","required","description","rows","defaultValue","timestamps"],"mappings":"AAEA;;;;;;CAMC,GACD,OAAO,MAAMA,sBAAwC;IACnDC,MAAM;IACNC,QAAQ;QACNC,UAAU;QACVC,QAAQ;IACV;IACAC,OAAO;QACLC,OAAO;QACPC,YAAY;QACZC,gBAAgB;YAAC;YAAS;YAAY;YAAS;SAAY;QAC3DC,QAAQ;IACV;IACAC,QAAQ;QACN,kDAAkD;QAClDC,MAAM,CAAC,EAAEC,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACnCC,QAAQ,CAAC,EAAEH,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACrCE,QAAQ,CAAC,EAAEJ,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;QACrCG,QAAQ,CAAC,EAAEL,GAAG,EAAE,GAAKC,QAAQD,IAAIE,IAAI;IACvC;IACAI,QAAQ;QACN;YACEC,MAAM;YACNC,MAAM;YACNC,UAAU;YACVhB,OAAO;gBACLiB,aAAa;YACf;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNC,UAAU;YACVhB,OAAO;gBACLiB,aAAa;gBACbC,MAAM;YACR;QACF;QACA;YACEJ,MAAM;YACNC,MAAM;YACNf,OAAO;gBACLiB,aAAa;YACf;QACF;QACA;YACEH,MAAM;YACNC,MAAM;YACNI,cAAc;YACdnB,OAAO;gBACLiB,aAAa;YACf;QACF;KACD;IACDG,YAAY;AACd,EAAC"}
@@ -34,18 +34,21 @@
34
34
  * },
35
35
  * })
36
36
  * ```
37
- */
38
- export function createPuckAiApiRoutes(config) {
37
+ */ export function createPuckAiApiRoutes(config) {
39
38
  const { auth, ai, onError } = config;
40
39
  return {
41
- POST: async (request) => {
40
+ POST: async (request)=>{
42
41
  try {
43
42
  // 1. Authenticate the request
44
43
  const authResult = await auth.authenticate(request);
45
44
  if (!authResult.authenticated) {
46
- return new Response(JSON.stringify({ error: authResult.error || 'Unauthorized' }), {
45
+ return new Response(JSON.stringify({
46
+ error: authResult.error || 'Unauthorized'
47
+ }), {
47
48
  status: 401,
48
- headers: { 'Content-Type': 'application/json' },
49
+ headers: {
50
+ 'Content-Type': 'application/json'
51
+ }
49
52
  });
50
53
  }
51
54
  // 2. Lazy import @puckeditor/cloud-client to avoid errors if not installed
@@ -55,24 +58,25 @@ export function createPuckAiApiRoutes(config) {
55
58
  const cloudClient = await import('@puckeditor/cloud-client');
56
59
  puckHandler = cloudClient.puckHandler;
57
60
  tool = cloudClient.tool;
58
- }
59
- catch (e) {
61
+ } catch (e) {
60
62
  return new Response(JSON.stringify({
61
- error: 'AI features require @puckeditor/cloud-client. Please install it.',
63
+ error: 'AI features require @puckeditor/cloud-client. Please install it.'
62
64
  }), {
63
65
  status: 500,
64
- headers: { 'Content-Type': 'application/json' },
66
+ headers: {
67
+ 'Content-Type': 'application/json'
68
+ }
65
69
  });
66
70
  }
67
71
  // 3. Convert our tool format to Puck's tool format
68
72
  const puckTools = {};
69
73
  if (ai?.tools) {
70
- for (const [name, toolDef] of Object.entries(ai.tools)) {
74
+ for (const [name, toolDef] of Object.entries(ai.tools)){
71
75
  puckTools[name] = tool({
72
76
  description: toolDef.description,
73
77
  inputSchema: toolDef.inputSchema,
74
78
  execute: toolDef.execute,
75
- name: toolDef.name,
79
+ name: toolDef.name
76
80
  });
77
81
  }
78
82
  }
@@ -82,25 +86,30 @@ export function createPuckAiApiRoutes(config) {
82
86
  host: ai?.host,
83
87
  ai: {
84
88
  context: ai?.context,
85
- tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,
86
- },
89
+ tools: Object.keys(puckTools).length > 0 ? puckTools : undefined
90
+ }
87
91
  });
88
- }
89
- catch (error) {
92
+ } catch (error) {
90
93
  // Call custom error handler if provided
91
94
  if (onError) {
92
- onError(error, { operation: 'ai-chat', request });
95
+ onError(error, {
96
+ operation: 'ai-chat',
97
+ request
98
+ });
93
99
  }
94
100
  console.error('[Puck AI] Error handling request:', error);
95
101
  return new Response(JSON.stringify({
96
102
  error: 'Internal server error',
97
- message: error instanceof Error ? error.message : 'Unknown error',
103
+ message: error instanceof Error ? error.message : 'Unknown error'
98
104
  }), {
99
105
  status: 500,
100
- headers: { 'Content-Type': 'application/json' },
106
+ headers: {
107
+ 'Content-Type': 'application/json'
108
+ }
101
109
  });
102
110
  }
103
- },
111
+ }
104
112
  };
105
113
  }
114
+
106
115
  //# sourceMappingURL=createAiApiRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAiApiRoutes.js","sourceRoot":"","sources":["../../src/ai/createAiApiRoutes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/ai/createAiApiRoutes.ts"],"sourcesContent":["import type { NextRequest } from 'next/server'\nimport type { PuckAiRoutesConfig, PuckAiRouteHandlers } from './types.js'\n\n/**\n * Creates API route handlers for /api/puck/[...all]\n *\n * Wraps @puckeditor/cloud-client's puckHandler with authentication\n * and custom context/tools support.\n *\n * @example\n * ```typescript\n * // app/api/puck/[...all]/route.ts\n * import { createPuckAiApiRoutes } from '@delmaredigital/payload-puck/ai'\n * import config from '@payload-config'\n * import { z } from 'zod'\n *\n * export const POST = createPuckAiApiRoutes({\n * payloadConfig: config,\n * auth: {\n * authenticate: async (request) => {\n * const session = await auth.api.getSession({ headers: request.headers })\n * if (!session?.user) return { authenticated: false }\n * return { authenticated: true, user: session.user }\n * },\n * },\n * ai: {\n * context: 'We are Acme Corp. You build our landing pages.',\n * tools: {\n * getProducts: {\n * description: 'Get a list of products',\n * inputSchema: z.object({}),\n * execute: async () => {\n * return await payload.find({ collection: 'products' })\n * },\n * },\n * },\n * },\n * })\n * ```\n */\nexport function createPuckAiApiRoutes(config: PuckAiRoutesConfig): PuckAiRouteHandlers {\n const { auth, ai, onError } = config\n\n return {\n POST: async (request: NextRequest): Promise<Response> => {\n try {\n // 1. Authenticate the request\n const authResult = await auth.authenticate(request)\n\n if (!authResult.authenticated) {\n return new Response(\n JSON.stringify({ error: authResult.error || 'Unauthorized' }),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n )\n }\n\n // 2. Lazy import @puckeditor/cloud-client to avoid errors if not installed\n let puckHandler: typeof import('@puckeditor/cloud-client').puckHandler\n let tool: typeof import('@puckeditor/cloud-client').tool\n\n try {\n const cloudClient = await import('@puckeditor/cloud-client')\n puckHandler = cloudClient.puckHandler\n tool = cloudClient.tool\n } catch (e) {\n return new Response(\n JSON.stringify({\n error: 'AI features require @puckeditor/cloud-client. Please install it.',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n )\n }\n\n // 3. Convert our tool format to Puck's tool format\n const puckTools: Record<string, ReturnType<typeof tool>> = {}\n if (ai?.tools) {\n for (const [name, toolDef] of Object.entries(ai.tools)) {\n puckTools[name] = tool({\n description: toolDef.description,\n inputSchema: toolDef.inputSchema,\n execute: toolDef.execute,\n name: toolDef.name,\n })\n }\n }\n\n // 4. Call puckHandler with our configuration\n return puckHandler(request, {\n apiKey: ai?.apiKey,\n host: ai?.host,\n ai: {\n context: ai?.context,\n tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,\n },\n })\n } catch (error) {\n // Call custom error handler if provided\n if (onError) {\n onError(error, { operation: 'ai-chat', request })\n }\n\n console.error('[Puck AI] Error handling request:', error)\n\n return new Response(\n JSON.stringify({\n error: 'Internal server error',\n message: error instanceof Error ? error.message : 'Unknown error',\n }),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n )\n }\n },\n }\n}\n"],"names":["createPuckAiApiRoutes","config","auth","ai","onError","POST","request","authResult","authenticate","authenticated","Response","JSON","stringify","error","status","headers","puckHandler","tool","cloudClient","e","puckTools","tools","name","toolDef","Object","entries","description","inputSchema","execute","apiKey","host","context","keys","length","undefined","operation","console","message","Error"],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCC,GACD,OAAO,SAASA,sBAAsBC,MAA0B;IAC9D,MAAM,EAAEC,IAAI,EAAEC,EAAE,EAAEC,OAAO,EAAE,GAAGH;IAE9B,OAAO;QACLI,MAAM,OAAOC;YACX,IAAI;gBACF,8BAA8B;gBAC9B,MAAMC,aAAa,MAAML,KAAKM,YAAY,CAACF;gBAE3C,IAAI,CAACC,WAAWE,aAAa,EAAE;oBAC7B,OAAO,IAAIC,SACTC,KAAKC,SAAS,CAAC;wBAAEC,OAAON,WAAWM,KAAK,IAAI;oBAAe,IAC3D;wBACEC,QAAQ;wBACRC,SAAS;4BAAE,gBAAgB;wBAAmB;oBAChD;gBAEJ;gBAEA,2EAA2E;gBAC3E,IAAIC;gBACJ,IAAIC;gBAEJ,IAAI;oBACF,MAAMC,cAAc,MAAM,MAAM,CAAC;oBACjCF,cAAcE,YAAYF,WAAW;oBACrCC,OAAOC,YAAYD,IAAI;gBACzB,EAAE,OAAOE,GAAG;oBACV,OAAO,IAAIT,SACTC,KAAKC,SAAS,CAAC;wBACbC,OAAO;oBACT,IACA;wBACEC,QAAQ;wBACRC,SAAS;4BAAE,gBAAgB;wBAAmB;oBAChD;gBAEJ;gBAEA,mDAAmD;gBACnD,MAAMK,YAAqD,CAAC;gBAC5D,IAAIjB,IAAIkB,OAAO;oBACb,KAAK,MAAM,CAACC,MAAMC,QAAQ,IAAIC,OAAOC,OAAO,CAACtB,GAAGkB,KAAK,EAAG;wBACtDD,SAAS,CAACE,KAAK,GAAGL,KAAK;4BACrBS,aAAaH,QAAQG,WAAW;4BAChCC,aAAaJ,QAAQI,WAAW;4BAChCC,SAASL,QAAQK,OAAO;4BACxBN,MAAMC,QAAQD,IAAI;wBACpB;oBACF;gBACF;gBAEA,6CAA6C;gBAC7C,OAAON,YAAYV,SAAS;oBAC1BuB,QAAQ1B,IAAI0B;oBACZC,MAAM3B,IAAI2B;oBACV3B,IAAI;wBACF4B,SAAS5B,IAAI4B;wBACbV,OAAOG,OAAOQ,IAAI,CAACZ,WAAWa,MAAM,GAAG,IAAIb,YAAYc;oBACzD;gBACF;YACF,EAAE,OAAOrB,OAAO;gBACd,wCAAwC;gBACxC,IAAIT,SAAS;oBACXA,QAAQS,OAAO;wBAAEsB,WAAW;wBAAW7B;oBAAQ;gBACjD;gBAEA8B,QAAQvB,KAAK,CAAC,qCAAqCA;gBAEnD,OAAO,IAAIH,SACTC,KAAKC,SAAS,CAAC;oBACbC,OAAO;oBACPwB,SAASxB,iBAAiByB,QAAQzB,MAAMwB,OAAO,GAAG;gBACpD,IACA;oBACEvB,QAAQ;oBACRC,SAAS;wBAAE,gBAAgB;oBAAmB;gBAChD;YAEJ;QACF;IACF;AACF"}
@@ -59,10 +59,9 @@
59
59
  * data: { puckData: updatedData },
60
60
  * })
61
61
  * ```
62
- */
63
- export function createAiGenerate(config) {
62
+ */ export function createAiGenerate(config) {
64
63
  const { ai } = config;
65
- return async (options) => {
64
+ return async (options)=>{
66
65
  const { prompt, puckConfig, pageData } = options;
67
66
  // Lazy import @puckeditor/cloud-client
68
67
  let generate;
@@ -71,19 +70,18 @@ export function createAiGenerate(config) {
71
70
  const cloudClient = await import('@puckeditor/cloud-client');
72
71
  generate = cloudClient.generate;
73
72
  tool = cloudClient.tool;
74
- }
75
- catch (e) {
73
+ } catch (e) {
76
74
  throw new Error('AI generation requires @puckeditor/cloud-client. Please install it with: pnpm add @puckeditor/cloud-client');
77
75
  }
78
76
  // Convert our tool format to Puck's tool format
79
77
  const puckTools = {};
80
78
  if (ai?.tools) {
81
- for (const [name, toolDef] of Object.entries(ai.tools)) {
79
+ for (const [name, toolDef] of Object.entries(ai.tools)){
82
80
  puckTools[name] = tool({
83
81
  description: toolDef.description,
84
82
  inputSchema: toolDef.inputSchema,
85
83
  execute: toolDef.execute,
86
- name: toolDef.name,
84
+ name: toolDef.name
87
85
  });
88
86
  }
89
87
  }
@@ -95,7 +93,7 @@ export function createAiGenerate(config) {
95
93
  apiKey: ai?.apiKey,
96
94
  host: ai?.host,
97
95
  pageData,
98
- tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,
96
+ tools: Object.keys(puckTools).length > 0 ? puckTools : undefined
99
97
  });
100
98
  if (!result) {
101
99
  throw new Error('AI generation failed: no result returned');
@@ -103,4 +101,5 @@ export function createAiGenerate(config) {
103
101
  return result;
104
102
  };
105
103
  }
104
+
106
105
  //# sourceMappingURL=createAiGenerate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAiGenerate.js","sourceRoot":"","sources":["../../src/ai/createAiGenerate.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAA;IAErB,OAAO,KAAK,EAAE,OAA0B,EAAqB,EAAE;QAC7D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;QAEhD,uCAAuC;QACvC,IAAI,QAA4D,CAAA;QAChE,IAAI,IAAoD,CAAA;QAExD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;YAC5D,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAA;YAC/B,IAAI,GAAG,WAAW,CAAC,IAAI,CAAA;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAA;QACH,CAAC;QAED,gDAAgD;QAChD,MAAM,SAAS,GAA4C,EAAE,CAAA;QAC7D,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;YACd,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvD,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACrB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,MAAM;YACN,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,EAAE,EAAE,OAAO;YACpB,MAAM,EAAE,EAAE,EAAE,MAAM;YAClB,IAAI,EAAE,EAAE,EAAE,IAAI;YACd,QAAQ;YACR,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC7D,CAAC;QAED,OAAO,MAAkB,CAAA;IAC3B,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"sources":["../../src/ai/createAiGenerate.ts"],"sourcesContent":["import type { Data as PuckData } from '@puckeditor/core'\nimport type { AiGenerateConfig, AiGenerateOptions, AiGenerateFunction } from './types.js'\n\n/**\n * Creates a headless AI page generation function\n *\n * Use this to generate Puck pages programmatically without the editor UI.\n * Useful for batch generation, automated workflows, or API-driven page creation.\n *\n * @example Basic generation\n * ```typescript\n * import { createAiGenerate } from '@delmaredigital/payload-puck/ai'\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n * import config from '@payload-config'\n *\n * const generatePage = createAiGenerate({\n * payloadConfig: config,\n * auth: {\n * authenticate: async (req) => {\n * // Authenticate the request\n * return { authenticated: true, user: { id: 'system' } }\n * },\n * },\n * ai: {\n * context: 'We are Acme Corp. You build our marketing pages.',\n * },\n * })\n *\n * // Generate a new page\n * const pageData = await generatePage({\n * prompt: 'Create a landing page for our new product launch',\n * puckConfig: editorConfig,\n * })\n *\n * // Save to Payload\n * await payload.create({\n * collection: 'pages',\n * data: {\n * title: 'New Product Launch',\n * slug: 'new-product',\n * puckData: pageData,\n * },\n * })\n * ```\n *\n * @example Updating an existing page\n * ```typescript\n * // Fetch existing page\n * const page = await payload.findByID({ collection: 'pages', id: 'abc123' })\n *\n * // Update with AI\n * const updatedData = await generatePage({\n * prompt: 'Add a testimonials section after the hero',\n * puckConfig: editorConfig,\n * pageData: page.puckData, // Pass existing data\n * })\n *\n * // Save the update\n * await payload.update({\n * collection: 'pages',\n * id: 'abc123',\n * data: { puckData: updatedData },\n * })\n * ```\n */\nexport function createAiGenerate(config: AiGenerateConfig): AiGenerateFunction {\n const { ai } = config\n\n return async (options: AiGenerateOptions): Promise<PuckData> => {\n const { prompt, puckConfig, pageData } = options\n\n // Lazy import @puckeditor/cloud-client\n let generate: typeof import('@puckeditor/cloud-client').generate\n let tool: typeof import('@puckeditor/cloud-client').tool\n\n try {\n const cloudClient = await import('@puckeditor/cloud-client')\n generate = cloudClient.generate\n tool = cloudClient.tool\n } catch (e) {\n throw new Error(\n 'AI generation requires @puckeditor/cloud-client. Please install it with: pnpm add @puckeditor/cloud-client'\n )\n }\n\n // Convert our tool format to Puck's tool format\n const puckTools: Record<string, ReturnType<typeof tool>> = {}\n if (ai?.tools) {\n for (const [name, toolDef] of Object.entries(ai.tools)) {\n puckTools[name] = tool({\n description: toolDef.description,\n inputSchema: toolDef.inputSchema,\n execute: toolDef.execute,\n name: toolDef.name,\n })\n }\n }\n\n // Call the generate API\n const result = await generate({\n prompt,\n config: puckConfig,\n context: ai?.context,\n apiKey: ai?.apiKey,\n host: ai?.host,\n pageData,\n tools: Object.keys(puckTools).length > 0 ? puckTools : undefined,\n })\n\n if (!result) {\n throw new Error('AI generation failed: no result returned')\n }\n\n return result as PuckData\n }\n}\n"],"names":["createAiGenerate","config","ai","options","prompt","puckConfig","pageData","generate","tool","cloudClient","e","Error","puckTools","tools","name","toolDef","Object","entries","description","inputSchema","execute","result","context","apiKey","host","keys","length","undefined"],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DC,GACD,OAAO,SAASA,iBAAiBC,MAAwB;IACvD,MAAM,EAAEC,EAAE,EAAE,GAAGD;IAEf,OAAO,OAAOE;QACZ,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGH;QAEzC,uCAAuC;QACvC,IAAII;QACJ,IAAIC;QAEJ,IAAI;YACF,MAAMC,cAAc,MAAM,MAAM,CAAC;YACjCF,WAAWE,YAAYF,QAAQ;YAC/BC,OAAOC,YAAYD,IAAI;QACzB,EAAE,OAAOE,GAAG;YACV,MAAM,IAAIC,MACR;QAEJ;QAEA,gDAAgD;QAChD,MAAMC,YAAqD,CAAC;QAC5D,IAAIV,IAAIW,OAAO;YACb,KAAK,MAAM,CAACC,MAAMC,QAAQ,IAAIC,OAAOC,OAAO,CAACf,GAAGW,KAAK,EAAG;gBACtDD,SAAS,CAACE,KAAK,GAAGN,KAAK;oBACrBU,aAAaH,QAAQG,WAAW;oBAChCC,aAAaJ,QAAQI,WAAW;oBAChCC,SAASL,QAAQK,OAAO;oBACxBN,MAAMC,QAAQD,IAAI;gBACpB;YACF;QACF;QAEA,wBAAwB;QACxB,MAAMO,SAAS,MAAMd,SAAS;YAC5BH;YACAH,QAAQI;YACRiB,SAASpB,IAAIoB;YACbC,QAAQrB,IAAIqB;YACZC,MAAMtB,IAAIsB;YACVlB;YACAO,OAAOG,OAAOS,IAAI,CAACb,WAAWc,MAAM,GAAG,IAAId,YAAYe;QACzD;QAEA,IAAI,CAACN,QAAQ;YACX,MAAM,IAAIV,MAAM;QAClB;QAEA,OAAOU;IACT;AACF"}
@@ -33,8 +33,7 @@
33
33
  *
34
34
  * <PuckEditor plugins={[aiPlugin]} />
35
35
  * ```
36
- */
37
- export function createAiPlugin(options = {}) {
36
+ */ export function createAiPlugin(options = {}) {
38
37
  const { host = '/api/puck', examplePrompts, onSubmit } = options;
39
38
  // Dynamic import to avoid build errors if plugin-ai not installed
40
39
  // Also allows for tree-shaking when AI is not used
@@ -45,17 +44,16 @@ export function createAiPlugin(options = {}) {
45
44
  host,
46
45
  chat: {
47
46
  examplePrompts,
48
- onSubmit,
49
- },
47
+ onSubmit
48
+ }
50
49
  });
51
- }
52
- catch (e) {
50
+ } catch (e) {
53
51
  // Return a placeholder plugin if @puckeditor/plugin-ai is not installed
54
- console.warn('[payload-puck] AI plugin requested but @puckeditor/plugin-ai not installed. ' +
55
- 'Install it with: pnpm add @puckeditor/plugin-ai');
52
+ console.warn('[payload-puck] AI plugin requested but @puckeditor/plugin-ai not installed. ' + 'Install it with: pnpm add @puckeditor/plugin-ai');
56
53
  return {
57
- name: 'ai-placeholder',
54
+ name: 'ai-placeholder'
58
55
  };
59
56
  }
60
57
  }
58
+
61
59
  //# sourceMappingURL=createAiPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createAiPlugin.js","sourceRoot":"","sources":["../../src/ai/createAiPlugin.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAKZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,cAAc,CAAC,UAA2B,EAAE;IAC1D,MAAM,EAAE,IAAI,GAAG,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAEhE,kEAAkE;IAClE,mDAAmD;IACnD,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;QAE/E,OAAO,kBAAkB,CAAC;YACxB,IAAI;YACJ,IAAI,EAAE;gBACJ,cAAc;gBACd,QAAQ;aACT;SACF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,wEAAwE;QACxE,OAAO,CAAC,IAAI,CACV,8EAA8E;YAC5E,iDAAiD,CACpD,CAAA;QAED,OAAO;YACL,IAAI,EAAE,gBAAgB;SACvB,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"sources":["../../src/ai/createAiPlugin.ts"],"sourcesContent":["'use client'\n\nimport type { Plugin as PuckPlugin } from '@puckeditor/core'\nimport type { AiPluginOptions } from './types.js'\n\n/**\n * Creates a Puck AI plugin for the editor\n *\n * Wraps @puckeditor/plugin-ai with sensible defaults for payload-puck.\n * This factory allows for runtime-configurable prompts (from database, API, etc.).\n *\n * @example Basic usage\n * ```tsx\n * import { createAiPlugin } from '@delmaredigital/payload-puck/ai'\n *\n * const aiPlugin = createAiPlugin({\n * host: '/api/puck',\n * examplePrompts: [\n * { label: 'Landing page', prompt: 'Create a landing page about our product' },\n * ],\n * })\n *\n * <PuckEditor plugins={[aiPlugin]} />\n * ```\n *\n * @example With runtime prompts from database\n * ```tsx\n * // Fetch prompts from Payload\n * const prompts = await payload.find({ collection: 'puck-ai-prompts' })\n *\n * const aiPlugin = createAiPlugin({\n * examplePrompts: prompts.docs.map(p => ({\n * label: p.label,\n * prompt: p.prompt,\n * })),\n * })\n *\n * <PuckEditor plugins={[aiPlugin]} />\n * ```\n */\nexport function createAiPlugin(options: AiPluginOptions = {}): PuckPlugin {\n const { host = '/api/puck', examplePrompts, onSubmit } = options\n\n // Dynamic import to avoid build errors if plugin-ai not installed\n // Also allows for tree-shaking when AI is not used\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const { createAiPlugin: createPuckAiPlugin } = require('@puckeditor/plugin-ai')\n\n return createPuckAiPlugin({\n host,\n chat: {\n examplePrompts,\n onSubmit,\n },\n })\n } catch (e) {\n // Return a placeholder plugin if @puckeditor/plugin-ai is not installed\n console.warn(\n '[payload-puck] AI plugin requested but @puckeditor/plugin-ai not installed. ' +\n 'Install it with: pnpm add @puckeditor/plugin-ai'\n )\n\n return {\n name: 'ai-placeholder',\n }\n }\n}\n"],"names":["createAiPlugin","options","host","examplePrompts","onSubmit","createPuckAiPlugin","require","chat","e","console","warn","name"],"mappings":"AAAA;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCC,GACD,OAAO,SAASA,eAAeC,UAA2B,CAAC,CAAC;IAC1D,MAAM,EAAEC,OAAO,WAAW,EAAEC,cAAc,EAAEC,QAAQ,EAAE,GAAGH;IAEzD,kEAAkE;IAClE,mDAAmD;IACnD,IAAI;QACF,iEAAiE;QACjE,MAAM,EAAED,gBAAgBK,kBAAkB,EAAE,GAAGC,QAAQ;QAEvD,OAAOD,mBAAmB;YACxBH;YACAK,MAAM;gBACJJ;gBACAC;YACF;QACF;IACF,EAAE,OAAOI,GAAG;QACV,wEAAwE;QACxEC,QAAQC,IAAI,CACV,iFACE;QAGJ,OAAO;YACLC,MAAM;QACR;IACF;AACF"}
@@ -1,12 +1,10 @@
1
1
  'use client';
2
2
  import { useState, useEffect, useCallback } from 'react';
3
- /** Event name for context updates */
4
- export const AI_CONTEXT_UPDATED_EVENT = 'puck:ai-context-updated';
3
+ /** Event name for context updates */ export const AI_CONTEXT_UPDATED_EVENT = 'puck:ai-context-updated';
5
4
  /**
6
5
  * Dispatches an event to notify that AI context has been updated
7
6
  * Call this after creating, editing, or deleting a context entry
8
- */
9
- export function dispatchContextUpdated() {
7
+ */ export function dispatchContextUpdated() {
10
8
  if (typeof window !== 'undefined') {
11
9
  window.dispatchEvent(new CustomEvent(AI_CONTEXT_UPDATED_EVENT));
12
10
  }
@@ -30,13 +28,12 @@ export function dispatchContextUpdated() {
30
28
  * // Delete an entry
31
29
  * await remove(context[0].id)
32
30
  * ```
33
- */
34
- export function useAiContext(options = {}) {
35
- const { apiEndpoint = '/api/puck/ai-context', enabled = true, includeDisabled = false, } = options;
31
+ */ export function useAiContext(options = {}) {
32
+ const { apiEndpoint = '/api/puck/ai-context', enabled = true, includeDisabled = false } = options;
36
33
  const [context, setContext] = useState([]);
37
34
  const [loading, setLoading] = useState(true);
38
35
  const [error, setError] = useState(null);
39
- const fetchContext = useCallback(async () => {
36
+ const fetchContext = useCallback(async ()=>{
40
37
  if (!enabled) {
41
38
  setLoading(false);
42
39
  return;
@@ -51,22 +48,26 @@ export function useAiContext(options = {}) {
51
48
  }
52
49
  const data = await response.json();
53
50
  setContext(data.docs || []);
54
- }
55
- catch (err) {
51
+ } catch (err) {
56
52
  setError(err instanceof Error ? err.message : 'Failed to load context');
57
53
  setContext([]);
58
- }
59
- finally {
54
+ } finally{
60
55
  setLoading(false);
61
56
  }
62
- }, [apiEndpoint, enabled, includeDisabled]);
57
+ }, [
58
+ apiEndpoint,
59
+ enabled,
60
+ includeDisabled
61
+ ]);
63
62
  // Create a new context entry
64
- const create = useCallback(async (data) => {
63
+ const create = useCallback(async (data)=>{
65
64
  try {
66
65
  const response = await fetch(apiEndpoint, {
67
66
  method: 'POST',
68
- headers: { 'Content-Type': 'application/json' },
69
- body: JSON.stringify(data),
67
+ headers: {
68
+ 'Content-Type': 'application/json'
69
+ },
70
+ body: JSON.stringify(data)
70
71
  });
71
72
  if (!response.ok) {
72
73
  throw new Error('Failed to create context entry');
@@ -74,19 +75,22 @@ export function useAiContext(options = {}) {
74
75
  const newEntry = await response.json();
75
76
  dispatchContextUpdated();
76
77
  return newEntry;
77
- }
78
- catch (err) {
78
+ } catch (err) {
79
79
  setError(err instanceof Error ? err.message : 'Failed to create context entry');
80
80
  return null;
81
81
  }
82
- }, [apiEndpoint]);
82
+ }, [
83
+ apiEndpoint
84
+ ]);
83
85
  // Update an existing context entry
84
- const update = useCallback(async (id, data) => {
86
+ const update = useCallback(async (id, data)=>{
85
87
  try {
86
88
  const response = await fetch(`${apiEndpoint}/${id}`, {
87
89
  method: 'PATCH',
88
- headers: { 'Content-Type': 'application/json' },
89
- body: JSON.stringify(data),
90
+ headers: {
91
+ 'Content-Type': 'application/json'
92
+ },
93
+ body: JSON.stringify(data)
90
94
  });
91
95
  if (!response.ok) {
92
96
  throw new Error('Failed to update context entry');
@@ -94,45 +98,51 @@ export function useAiContext(options = {}) {
94
98
  const updatedEntry = await response.json();
95
99
  dispatchContextUpdated();
96
100
  return updatedEntry;
97
- }
98
- catch (err) {
101
+ } catch (err) {
99
102
  setError(err instanceof Error ? err.message : 'Failed to update context entry');
100
103
  return null;
101
104
  }
102
- }, [apiEndpoint]);
105
+ }, [
106
+ apiEndpoint
107
+ ]);
103
108
  // Delete a context entry
104
- const remove = useCallback(async (id) => {
109
+ const remove = useCallback(async (id)=>{
105
110
  try {
106
111
  const response = await fetch(`${apiEndpoint}/${id}`, {
107
- method: 'DELETE',
112
+ method: 'DELETE'
108
113
  });
109
114
  if (!response.ok) {
110
115
  throw new Error('Failed to delete context entry');
111
116
  }
112
117
  dispatchContextUpdated();
113
118
  return true;
114
- }
115
- catch (err) {
119
+ } catch (err) {
116
120
  setError(err instanceof Error ? err.message : 'Failed to delete context entry');
117
121
  return false;
118
122
  }
119
- }, [apiEndpoint]);
123
+ }, [
124
+ apiEndpoint
125
+ ]);
120
126
  // Initial fetch
121
- useEffect(() => {
127
+ useEffect(()=>{
122
128
  fetchContext();
123
- }, [fetchContext]);
129
+ }, [
130
+ fetchContext
131
+ ]);
124
132
  // Listen for context updates
125
- useEffect(() => {
126
- if (!enabled)
127
- return;
128
- const handleUpdate = () => {
133
+ useEffect(()=>{
134
+ if (!enabled) return;
135
+ const handleUpdate = ()=>{
129
136
  fetchContext();
130
137
  };
131
138
  window.addEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate);
132
- return () => {
139
+ return ()=>{
133
140
  window.removeEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate);
134
141
  };
135
- }, [enabled, fetchContext]);
142
+ }, [
143
+ enabled,
144
+ fetchContext
145
+ ]);
136
146
  return {
137
147
  context,
138
148
  loading,
@@ -140,7 +150,8 @@ export function useAiContext(options = {}) {
140
150
  refetch: fetchContext,
141
151
  create,
142
152
  update,
143
- remove,
153
+ remove
144
154
  };
145
155
  }
156
+
146
157
  //# sourceMappingURL=useAiContext.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAiContext.js","sourceRoot":"","sources":["../../../src/ai/hooks/useAiContext.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/ai/hooks/useAiContext.ts"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport type { AiContext } from '../types.js'\n\n/** Event name for context updates */\nexport const AI_CONTEXT_UPDATED_EVENT = 'puck:ai-context-updated'\n\n/**\n * Dispatches an event to notify that AI context has been updated\n * Call this after creating, editing, or deleting a context entry\n */\nexport function dispatchContextUpdated(): void {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(AI_CONTEXT_UPDATED_EVENT))\n }\n}\n\nexport interface UseAiContextOptions {\n /**\n * API endpoint to fetch context from\n * @default '/api/puck/ai-context'\n */\n apiEndpoint?: string\n /**\n * Whether to enable fetching\n * @default true\n */\n enabled?: boolean\n /**\n * Whether to include disabled entries\n * @default false\n */\n includeDisabled?: boolean\n}\n\nexport interface UseAiContextReturn {\n /** Array of context entries */\n context: AiContext[]\n /** Loading state */\n loading: boolean\n /** Error message if any */\n error: string | null\n /** Refetch context entries */\n refetch: () => Promise<void>\n /** Create a new context entry */\n create: (data: Omit<AiContext, 'id' | 'createdAt' | 'updatedAt'>) => Promise<AiContext | null>\n /** Update an existing context entry */\n update: (id: string, data: Partial<AiContext>) => Promise<AiContext | null>\n /** Delete a context entry */\n remove: (id: string) => Promise<boolean>\n}\n\n/**\n * Hook to fetch and manage AI context entries client-side\n *\n * When context is updated via the context editor panel, this hook will\n * automatically refetch to stay in sync.\n *\n * @example\n * ```tsx\n * const { context, loading, create, update, remove } = useAiContext()\n *\n * // Create a new context entry\n * await create({ name: 'Brand Guidelines', content: '...', enabled: true })\n *\n * // Update an entry\n * await update(context[0].id, { content: 'Updated content' })\n *\n * // Delete an entry\n * await remove(context[0].id)\n * ```\n */\nexport function useAiContext(options: UseAiContextOptions = {}): UseAiContextReturn {\n const {\n apiEndpoint = '/api/puck/ai-context',\n enabled = true,\n includeDisabled = false,\n } = options\n\n const [context, setContext] = useState<AiContext[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n const fetchContext = useCallback(async () => {\n if (!enabled) {\n setLoading(false)\n return\n }\n\n try {\n setLoading(true)\n setError(null)\n\n const url = includeDisabled ? `${apiEndpoint}?all=true` : apiEndpoint\n const response = await fetch(url)\n\n if (!response.ok) {\n throw new Error('Failed to fetch context')\n }\n\n const data = await response.json()\n setContext(data.docs || [])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load context')\n setContext([])\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint, enabled, includeDisabled])\n\n // Create a new context entry\n const create = useCallback(\n async (\n data: Omit<AiContext, 'id' | 'createdAt' | 'updatedAt'>\n ): Promise<AiContext | null> => {\n try {\n const response = await fetch(apiEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n })\n\n if (!response.ok) {\n throw new Error('Failed to create context entry')\n }\n\n const newEntry = await response.json()\n dispatchContextUpdated()\n return newEntry\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create context entry')\n return null\n }\n },\n [apiEndpoint]\n )\n\n // Update an existing context entry\n const update = useCallback(\n async (id: string, data: Partial<AiContext>): Promise<AiContext | null> => {\n try {\n const response = await fetch(`${apiEndpoint}/${id}`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(data),\n })\n\n if (!response.ok) {\n throw new Error('Failed to update context entry')\n }\n\n const updatedEntry = await response.json()\n dispatchContextUpdated()\n return updatedEntry\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to update context entry')\n return null\n }\n },\n [apiEndpoint]\n )\n\n // Delete a context entry\n const remove = useCallback(\n async (id: string): Promise<boolean> => {\n try {\n const response = await fetch(`${apiEndpoint}/${id}`, {\n method: 'DELETE',\n })\n\n if (!response.ok) {\n throw new Error('Failed to delete context entry')\n }\n\n dispatchContextUpdated()\n return true\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to delete context entry')\n return false\n }\n },\n [apiEndpoint]\n )\n\n // Initial fetch\n useEffect(() => {\n fetchContext()\n }, [fetchContext])\n\n // Listen for context updates\n useEffect(() => {\n if (!enabled) return\n\n const handleUpdate = () => {\n fetchContext()\n }\n\n window.addEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate)\n return () => {\n window.removeEventListener(AI_CONTEXT_UPDATED_EVENT, handleUpdate)\n }\n }, [enabled, fetchContext])\n\n return {\n context,\n loading,\n error,\n refetch: fetchContext,\n create,\n update,\n remove,\n }\n}\n"],"names":["useState","useEffect","useCallback","AI_CONTEXT_UPDATED_EVENT","dispatchContextUpdated","window","dispatchEvent","CustomEvent","useAiContext","options","apiEndpoint","enabled","includeDisabled","context","setContext","loading","setLoading","error","setError","fetchContext","url","response","fetch","ok","Error","data","json","docs","err","message","create","method","headers","body","JSON","stringify","newEntry","update","id","updatedEntry","remove","handleUpdate","addEventListener","removeEventListener","refetch"],"mappings":"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"}
@@ -1,12 +1,10 @@
1
1
  'use client';
2
2
  import { useState, useEffect, useCallback } from 'react';
3
- /** Event name for prompt updates */
4
- export const AI_PROMPTS_UPDATED_EVENT = 'puck:ai-prompts-updated';
3
+ /** Event name for prompt updates */ export const AI_PROMPTS_UPDATED_EVENT = 'puck:ai-prompts-updated';
5
4
  /**
6
5
  * Dispatches an event to notify that AI prompts have been updated
7
6
  * Call this after creating, editing, or deleting a prompt
8
- */
9
- export function dispatchPromptsUpdated() {
7
+ */ export function dispatchPromptsUpdated() {
10
8
  if (typeof window !== 'undefined') {
11
9
  window.dispatchEvent(new CustomEvent(AI_PROMPTS_UPDATED_EVENT));
12
10
  }
@@ -20,12 +18,11 @@ export function dispatchPromptsUpdated() {
20
18
  * @param apiEndpoint - API endpoint to fetch prompts from
21
19
  * @param enabled - Whether to enable fetching (default: true)
22
20
  * @returns Object with prompts array and loading state
23
- */
24
- export function useAiPrompts(apiEndpoint = '/api/puck/ai-prompts', enabled = true) {
21
+ */ export function useAiPrompts(apiEndpoint = '/api/puck/ai-prompts', enabled = true) {
25
22
  const [prompts, setPrompts] = useState([]);
26
23
  const [loading, setLoading] = useState(true);
27
24
  const [error, setError] = useState(null);
28
- const fetchPrompts = useCallback(async () => {
25
+ const fetchPrompts = useCallback(async ()=>{
29
26
  if (!enabled) {
30
27
  setLoading(false);
31
28
  return;
@@ -39,36 +36,47 @@ export function useAiPrompts(apiEndpoint = '/api/puck/ai-prompts', enabled = tru
39
36
  }
40
37
  const data = await response.json();
41
38
  // Transform API response to AiExamplePrompt format
42
- const fetchedPrompts = (data.docs || []).map((doc) => ({
43
- label: doc.label,
44
- prompt: doc.prompt,
45
- }));
39
+ const fetchedPrompts = (data.docs || []).map((doc)=>({
40
+ label: doc.label,
41
+ prompt: doc.prompt
42
+ }));
46
43
  setPrompts(fetchedPrompts);
47
- }
48
- catch (err) {
44
+ } catch (err) {
49
45
  setError(err instanceof Error ? err.message : 'Failed to load prompts');
50
46
  setPrompts([]);
51
- }
52
- finally {
47
+ } finally{
53
48
  setLoading(false);
54
49
  }
55
- }, [apiEndpoint, enabled]);
50
+ }, [
51
+ apiEndpoint,
52
+ enabled
53
+ ]);
56
54
  // Initial fetch
57
- useEffect(() => {
55
+ useEffect(()=>{
58
56
  fetchPrompts();
59
- }, [fetchPrompts]);
57
+ }, [
58
+ fetchPrompts
59
+ ]);
60
60
  // Listen for prompt updates
61
- useEffect(() => {
62
- if (!enabled)
63
- return;
64
- const handleUpdate = () => {
61
+ useEffect(()=>{
62
+ if (!enabled) return;
63
+ const handleUpdate = ()=>{
65
64
  fetchPrompts();
66
65
  };
67
66
  window.addEventListener(AI_PROMPTS_UPDATED_EVENT, handleUpdate);
68
- return () => {
67
+ return ()=>{
69
68
  window.removeEventListener(AI_PROMPTS_UPDATED_EVENT, handleUpdate);
70
69
  };
71
- }, [enabled, fetchPrompts]);
72
- return { prompts, loading, error, refetch: fetchPrompts };
70
+ }, [
71
+ enabled,
72
+ fetchPrompts
73
+ ]);
74
+ return {
75
+ prompts,
76
+ loading,
77
+ error,
78
+ refetch: fetchPrompts
79
+ };
73
80
  }
81
+
74
82
  //# sourceMappingURL=useAiPrompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAiPrompts.js","sourceRoot":"","sources":["../../../src/ai/hooks/useAiPrompts.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGxD,oCAAoC;AACpC,MAAM,CAAC,MAAM,wBAAwB,GAAG,yBAAyB,CAAA;AAEjE;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,wBAAwB,CAAC,CAAC,CAAA;IACjE,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAC1B,cAAsB,sBAAsB,EAC5C,UAAmB,IAAI;IAOvB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAoB,EAAE,CAAC,CAAA;IAC7D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEvD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAA;YAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;YAEd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAA;YAEzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;YAC5C,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,mDAAmD;YACnD,MAAM,cAAc,GAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAC7D,CAAC,GAAsC,EAAE,EAAE,CAAC,CAAC;gBAC3C,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CACH,CAAA;YACD,UAAU,CAAC,cAAc,CAAC,CAAA;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAA;YACvE,UAAU,CAAC,EAAE,CAAC,CAAA;QAChB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;IAE1B,gBAAgB;IAChB,SAAS,CAAC,GAAG,EAAE;QACb,YAAY,EAAE,CAAA;IAChB,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,4BAA4B;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,YAAY,EAAE,CAAA;QAChB,CAAC,CAAA;QAED,MAAM,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAA;QAC/D,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,YAAY,CAAC,CAAA;QACpE,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA;IAE3B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAA;AAC3D,CAAC"}
1
+ {"version":3,"sources":["../../../src/ai/hooks/useAiPrompts.ts"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\nimport type { AiExamplePrompt } from '../types.js'\n\n/** Event name for prompt updates */\nexport const AI_PROMPTS_UPDATED_EVENT = 'puck:ai-prompts-updated'\n\n/**\n * Dispatches an event to notify that AI prompts have been updated\n * Call this after creating, editing, or deleting a prompt\n */\nexport function dispatchPromptsUpdated(): void {\n if (typeof window !== 'undefined') {\n window.dispatchEvent(new CustomEvent(AI_PROMPTS_UPDATED_EVENT))\n }\n}\n\n/**\n * Hook to fetch AI prompts client-side with auto-refresh support\n *\n * When prompts are updated via the prompt editor panel, this hook will\n * automatically refetch to stay in sync.\n *\n * @param apiEndpoint - API endpoint to fetch prompts from\n * @param enabled - Whether to enable fetching (default: true)\n * @returns Object with prompts array and loading state\n */\nexport function useAiPrompts(\n apiEndpoint: string = '/api/puck/ai-prompts',\n enabled: boolean = true\n): {\n prompts: AiExamplePrompt[]\n loading: boolean\n error: string | null\n refetch: () => Promise<void>\n} {\n const [prompts, setPrompts] = useState<AiExamplePrompt[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n const fetchPrompts = useCallback(async () => {\n if (!enabled) {\n setLoading(false)\n return\n }\n\n try {\n setLoading(true)\n setError(null)\n\n const response = await fetch(apiEndpoint)\n\n if (!response.ok) {\n throw new Error('Failed to fetch prompts')\n }\n\n const data = await response.json()\n // Transform API response to AiExamplePrompt format\n const fetchedPrompts: AiExamplePrompt[] = (data.docs || []).map(\n (doc: { label: string; prompt: string }) => ({\n label: doc.label,\n prompt: doc.prompt,\n })\n )\n setPrompts(fetchedPrompts)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load prompts')\n setPrompts([])\n } finally {\n setLoading(false)\n }\n }, [apiEndpoint, enabled])\n\n // Initial fetch\n useEffect(() => {\n fetchPrompts()\n }, [fetchPrompts])\n\n // Listen for prompt updates\n useEffect(() => {\n if (!enabled) return\n\n const handleUpdate = () => {\n fetchPrompts()\n }\n\n window.addEventListener(AI_PROMPTS_UPDATED_EVENT, handleUpdate)\n return () => {\n window.removeEventListener(AI_PROMPTS_UPDATED_EVENT, handleUpdate)\n }\n }, [enabled, fetchPrompts])\n\n return { prompts, loading, error, refetch: fetchPrompts }\n}\n"],"names":["useState","useEffect","useCallback","AI_PROMPTS_UPDATED_EVENT","dispatchPromptsUpdated","window","dispatchEvent","CustomEvent","useAiPrompts","apiEndpoint","enabled","prompts","setPrompts","loading","setLoading","error","setError","fetchPrompts","response","fetch","ok","Error","data","json","fetchedPrompts","docs","map","doc","label","prompt","err","message","handleUpdate","addEventListener","removeEventListener","refetch"],"mappings":"AAAA;AAEA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,WAAW,QAAQ,QAAO;AAGxD,kCAAkC,GAClC,OAAO,MAAMC,2BAA2B,0BAAyB;AAEjE;;;CAGC,GACD,OAAO,SAASC;IACd,IAAI,OAAOC,WAAW,aAAa;QACjCA,OAAOC,aAAa,CAAC,IAAIC,YAAYJ;IACvC;AACF;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASK,aACdC,cAAsB,sBAAsB,EAC5CC,UAAmB,IAAI;IAOvB,MAAM,CAACC,SAASC,WAAW,GAAGZ,SAA4B,EAAE;IAC5D,MAAM,CAACa,SAASC,WAAW,GAAGd,SAAS;IACvC,MAAM,CAACe,OAAOC,SAAS,GAAGhB,SAAwB;IAElD,MAAMiB,eAAef,YAAY;QAC/B,IAAI,CAACQ,SAAS;YACZI,WAAW;YACX;QACF;QAEA,IAAI;YACFA,WAAW;YACXE,SAAS;YAET,MAAME,WAAW,MAAMC,MAAMV;YAE7B,IAAI,CAACS,SAASE,EAAE,EAAE;gBAChB,MAAM,IAAIC,MAAM;YAClB;YAEA,MAAMC,OAAO,MAAMJ,SAASK,IAAI;YAChC,mDAAmD;YACnD,MAAMC,iBAAoC,AAACF,CAAAA,KAAKG,IAAI,IAAI,EAAE,AAAD,EAAGC,GAAG,CAC7D,CAACC,MAA4C,CAAA;oBAC3CC,OAAOD,IAAIC,KAAK;oBAChBC,QAAQF,IAAIE,MAAM;gBACpB,CAAA;YAEFjB,WAAWY;QACb,EAAE,OAAOM,KAAK;YACZd,SAASc,eAAeT,QAAQS,IAAIC,OAAO,GAAG;YAC9CnB,WAAW,EAAE;QACf,SAAU;YACRE,WAAW;QACb;IACF,GAAG;QAACL;QAAaC;KAAQ;IAEzB,gBAAgB;IAChBT,UAAU;QACRgB;IACF,GAAG;QAACA;KAAa;IAEjB,4BAA4B;IAC5BhB,UAAU;QACR,IAAI,CAACS,SAAS;QAEd,MAAMsB,eAAe;YACnBf;QACF;QAEAZ,OAAO4B,gBAAgB,CAAC9B,0BAA0B6B;QAClD,OAAO;YACL3B,OAAO6B,mBAAmB,CAAC/B,0BAA0B6B;QACvD;IACF,GAAG;QAACtB;QAASO;KAAa;IAE1B,OAAO;QAAEN;QAASE;QAASE;QAAOoB,SAASlB;IAAa;AAC1D"}