@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/editor/hooks/useDarkMode.ts"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback } from 'react'\n\n/**\n * Source of dark mode detection\n */\nexport type DarkModeSource = 'class' | 'media-query' | 'none'\n\n/**\n * Return type for useDarkMode hook\n */\nexport interface UseDarkModeReturn {\n /**\n * Whether dark mode is currently active\n */\n isDarkMode: boolean\n /**\n * How dark mode was detected\n */\n source: DarkModeSource\n}\n\n/**\n * Detects dark mode state from PayloadCMS admin or OS preferences.\n *\n * Detection priority:\n * 1. `.dark` class on `document.documentElement` (PayloadCMS admin)\n * 2. `prefers-color-scheme: dark` media query (OS preference)\n *\n * Uses MutationObserver to track class changes in real-time.\n *\n * @example\n * ```tsx\n * const { isDarkMode, source } = useDarkMode()\n *\n * if (isDarkMode) {\n * // Apply dark mode styles\n * }\n * ```\n */\nexport function useDarkMode(): UseDarkModeReturn {\n const [state, setState] = useState<UseDarkModeReturn>({\n isDarkMode: false,\n source: 'none',\n })\n\n // Check for dark mode class on document element\n const checkDarkModeClass = useCallback((): boolean => {\n if (typeof document === 'undefined') return false\n return document.documentElement.classList.contains('dark')\n }, [])\n\n // Check for OS dark mode preference\n const checkMediaQuery = useCallback((): boolean => {\n if (typeof window === 'undefined') return false\n return window.matchMedia('(prefers-color-scheme: dark)').matches\n }, [])\n\n // Compute current dark mode state\n const computeState = useCallback((): UseDarkModeReturn => {\n // Priority 1: Check for .dark class (PayloadCMS)\n if (checkDarkModeClass()) {\n return { isDarkMode: true, source: 'class' }\n }\n\n // Priority 2: Check OS preference\n if (checkMediaQuery()) {\n return { isDarkMode: true, source: 'media-query' }\n }\n\n return { isDarkMode: false, source: 'none' }\n }, [checkDarkModeClass, checkMediaQuery])\n\n useEffect(() => {\n // Set initial state\n setState(computeState())\n\n // Watch for class changes on document element\n const observer = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n if (\n mutation.type === 'attributes' &&\n mutation.attributeName === 'class'\n ) {\n setState(computeState())\n break\n }\n }\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class'],\n })\n\n // Watch for OS preference changes\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\n const handleMediaChange = () => {\n setState(computeState())\n }\n mediaQuery.addEventListener('change', handleMediaChange)\n\n return () => {\n observer.disconnect()\n mediaQuery.removeEventListener('change', handleMediaChange)\n }\n }, [computeState])\n\n return state\n}\n"],"names":["useState","useEffect","useCallback","useDarkMode","state","setState","isDarkMode","source","checkDarkModeClass","document","documentElement","classList","contains","checkMediaQuery","window","matchMedia","matches","computeState","observer","MutationObserver","mutations","mutation","type","attributeName","observe","attributes","attributeFilter","mediaQuery","handleMediaChange","addEventListener","disconnect","removeEventListener"],"mappings":"AAAA;AAEA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,WAAW,QAAQ,QAAO;AAqBxD;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,SAASC;IACd,MAAM,CAACC,OAAOC,SAAS,GAAGL,SAA4B;QACpDM,YAAY;QACZC,QAAQ;IACV;IAEA,gDAAgD;IAChD,MAAMC,qBAAqBN,YAAY;QACrC,IAAI,OAAOO,aAAa,aAAa,OAAO;QAC5C,OAAOA,SAASC,eAAe,CAACC,SAAS,CAACC,QAAQ,CAAC;IACrD,GAAG,EAAE;IAEL,oCAAoC;IACpC,MAAMC,kBAAkBX,YAAY;QAClC,IAAI,OAAOY,WAAW,aAAa,OAAO;QAC1C,OAAOA,OAAOC,UAAU,CAAC,gCAAgCC,OAAO;IAClE,GAAG,EAAE;IAEL,kCAAkC;IAClC,MAAMC,eAAef,YAAY;QAC/B,iDAAiD;QACjD,IAAIM,sBAAsB;YACxB,OAAO;gBAAEF,YAAY;gBAAMC,QAAQ;YAAQ;QAC7C;QAEA,kCAAkC;QAClC,IAAIM,mBAAmB;YACrB,OAAO;gBAAEP,YAAY;gBAAMC,QAAQ;YAAc;QACnD;QAEA,OAAO;YAAED,YAAY;YAAOC,QAAQ;QAAO;IAC7C,GAAG;QAACC;QAAoBK;KAAgB;IAExCZ,UAAU;QACR,oBAAoB;QACpBI,SAASY;QAET,8CAA8C;QAC9C,MAAMC,WAAW,IAAIC,iBAAiB,CAACC;YACrC,KAAK,MAAMC,YAAYD,UAAW;gBAChC,IACEC,SAASC,IAAI,KAAK,gBAClBD,SAASE,aAAa,KAAK,SAC3B;oBACAlB,SAASY;oBACT;gBACF;YACF;QACF;QAEAC,SAASM,OAAO,CAACf,SAASC,eAAe,EAAE;YACzCe,YAAY;YACZC,iBAAiB;gBAAC;aAAQ;QAC5B;QAEA,kCAAkC;QAClC,MAAMC,aAAab,OAAOC,UAAU,CAAC;QACrC,MAAMa,oBAAoB;YACxBvB,SAASY;QACX;QACAU,WAAWE,gBAAgB,CAAC,UAAUD;QAEtC,OAAO;YACLV,SAASY,UAAU;YACnBH,WAAWI,mBAAmB,CAAC,UAAUH;QAC3C;IACF,GAAG;QAACX;KAAa;IAEjB,OAAOb;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useUnsavedChanges.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useUnsavedChanges.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,IAAI,uBAAuB,CAqC3D"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/editor/hooks/useUnsavedChanges.ts"],"sourcesContent":["'use client'\n\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\nexport interface UseUnsavedChangesReturn {\n hasUnsavedChanges: boolean\n markClean: () => void\n markDirty: () => void\n}\n\n/**\n * Hook to track unsaved changes and warn before navigation\n *\n * Registers a beforeunload handler to prevent accidental navigation\n * when there are unsaved changes.\n *\n * @example\n * ```tsx\n * const { hasUnsavedChanges, markClean, markDirty } = useUnsavedChanges()\n *\n * const handleChange = () => {\n * markDirty()\n * }\n *\n * const handleSave = async () => {\n * await save()\n * markClean()\n * }\n * ```\n */\nexport function useUnsavedChanges(): UseUnsavedChangesReturn {\n const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false)\n\n // Use a ref to track the latest value for the beforeunload handler\n // This ensures the handler always checks the current value, not a stale closure\n const hasUnsavedChangesRef = useRef(hasUnsavedChanges)\n hasUnsavedChangesRef.current = hasUnsavedChanges\n\n // Register beforeunload handler once (uses ref for latest value)\n useEffect(() => {\n const handleBeforeUnload = (e: BeforeUnloadEvent) => {\n if (hasUnsavedChangesRef.current) {\n e.preventDefault()\n // Modern browsers ignore custom messages but still show a warning\n e.returnValue = ''\n }\n }\n\n window.addEventListener('beforeunload', handleBeforeUnload)\n return () => window.removeEventListener('beforeunload', handleBeforeUnload)\n }, [])\n\n const markClean = useCallback(() => {\n hasUnsavedChangesRef.current = false // Update ref immediately for beforeunload\n setHasUnsavedChanges(false)\n }, [])\n\n const markDirty = useCallback(() => {\n hasUnsavedChangesRef.current = true // Update ref immediately for beforeunload\n setHasUnsavedChanges(true)\n }, [])\n\n return {\n hasUnsavedChanges,\n markClean,\n markDirty,\n }\n}\n"],"names":["useState","useEffect","useCallback","useRef","useUnsavedChanges","hasUnsavedChanges","setHasUnsavedChanges","hasUnsavedChangesRef","current","handleBeforeUnload","e","preventDefault","returnValue","window","addEventListener","removeEventListener","markClean","markDirty"],"mappings":"AAAA;AAEA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,WAAW,EAAEC,MAAM,QAAQ,QAAO;AAQhE;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,SAASC;IACd,MAAM,CAACC,mBAAmBC,qBAAqB,GAAGN,SAAS;IAE3D,mEAAmE;IACnE,gFAAgF;IAChF,MAAMO,uBAAuBJ,OAAOE;IACpCE,qBAAqBC,OAAO,GAAGH;IAE/B,iEAAiE;IACjEJ,UAAU;QACR,MAAMQ,qBAAqB,CAACC;YAC1B,IAAIH,qBAAqBC,OAAO,EAAE;gBAChCE,EAAEC,cAAc;gBAChB,kEAAkE;gBAClED,EAAEE,WAAW,GAAG;YAClB;QACF;QAEAC,OAAOC,gBAAgB,CAAC,gBAAgBL;QACxC,OAAO,IAAMI,OAAOE,mBAAmB,CAAC,gBAAgBN;IAC1D,GAAG,EAAE;IAEL,MAAMO,YAAYd,YAAY;QAC5BK,qBAAqBC,OAAO,GAAG,OAAM,0CAA0C;QAC/EF,qBAAqB;IACvB,GAAG,EAAE;IAEL,MAAMW,YAAYf,YAAY;QAC5BK,qBAAqBC,OAAO,GAAG,MAAK,0CAA0C;QAC9EF,qBAAqB;IACvB,GAAG,EAAE;IAEL,OAAO;QACLD;QACAW;QACAC;IACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGlE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGrF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACtF,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAClG;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAG3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7E,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGjG,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,oBAAoB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/editor/index.ts"],"sourcesContent":["'use client'\n\n/**\n * @delmaredigital/payload-puck/editor\n *\n * Full-featured Puck editor component with built-in page-tree support,\n * dynamic loading, unsaved changes tracking, and theme-aware preview.\n *\n * @example Basic usage\n * ```tsx\n * 'use client'\n *\n * import { PuckEditor } from '@delmaredigital/payload-puck/editor'\n * import { editorConfig } from '@delmaredigital/payload-puck/config/editor'\n *\n * export function PageEditor({ page }) {\n * return (\n * <PuckEditor\n * pageId={page.id}\n * initialData={page.puckData}\n * config={editorConfig}\n * pageTitle={page.title}\n * pageSlug={page.slug}\n * apiEndpoint=\"/api/puck/pages\"\n * backUrl=\"/admin/pages\"\n * />\n * )\n * }\n * ```\n *\n * @example With page-tree integration\n * ```tsx\n * <PuckEditor\n * pageId={page.id}\n * initialData={page.puckData}\n * config={editorConfig}\n * pageTitle={page.title}\n * pageSlug={page.slug}\n * apiEndpoint=\"/api/puck/pages\"\n * hasPageTree={true}\n * folder={page.folder}\n * pageSegment={page.pageSegment}\n * />\n * ```\n */\n\n// Main editor component\nexport { PuckEditor, type PuckEditorProps } from './PuckEditor.js'\n\n// Ready-to-use editor page component (auto-fetches page data from route params)\nexport { PuckEditorView, type PuckEditorViewProps } from '../admin/PuckEditorView.js'\n\n// Sub-components for advanced customization\nexport { HeaderActions, type HeaderActionsProps } from './components/HeaderActions.js'\nexport {\n IframeWrapper,\n type IframeWrapperProps,\n type LayoutStyle,\n PuckPreviewThemeContext,\n usePuckPreviewTheme,\n} from './components/IframeWrapper.js'\nexport { LoadingState, type LoadingStateProps } from './components/LoadingState.js'\nexport { PreviewModal, type PreviewModalProps } from './components/PreviewModal.js'\nexport { DarkModeStyles, type DarkModeStylesProps } from './components/DarkModeStyles.js'\nexport { PreviewModeToggle, type PreviewModeToggleProps } from './components/PreviewModeToggle.js'\n/**\n * @deprecated Use createVersionHistoryPlugin instead. VersionHistory has moved to the plugin rail.\n */\nexport { VersionHistory, type VersionHistoryProps, type PageVersion } from './components/VersionHistory.js'\n\n// Utilities\nexport { injectPageTreeFields } from './utils/injectPageTreeFields.js'\nexport { detectPageTree, hasPageTreeFields } from './utils/detectPageTree.js'\n\n// Hooks\nexport { useUnsavedChanges, type UseUnsavedChangesReturn } from './hooks/useUnsavedChanges.js'\nexport { useDarkMode, type UseDarkModeReturn, type DarkModeSource } from './hooks/useDarkMode.js'\n\n// Plugins\nexport { headingAnalyzer } from './plugins/index.js'\nexport {\n createVersionHistoryPlugin,\n type VersionHistoryPluginOptions,\n VersionHistoryPanel,\n type VersionHistoryPanelProps,\n} from './plugins/index.js'\n"],"names":["PuckEditor","PuckEditorView","HeaderActions","IframeWrapper","PuckPreviewThemeContext","usePuckPreviewTheme","LoadingState","PreviewModal","DarkModeStyles","PreviewModeToggle","VersionHistory","injectPageTreeFields","detectPageTree","hasPageTreeFields","useUnsavedChanges","useDarkMode","headingAnalyzer","createVersionHistoryPlugin","VersionHistoryPanel"],"mappings":"AAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CC,GAED,wBAAwB;AACxB,SAASA,UAAU,QAA8B,kBAAiB;AAElE,gFAAgF;AAChF,SAASC,cAAc,QAAkC,6BAA4B;AAErF,4CAA4C;AAC5C,SAASC,aAAa,QAAiC,gCAA+B;AACtF,SACEC,aAAa,EAGbC,uBAAuB,EACvBC,mBAAmB,QACd,gCAA+B;AACtC,SAASC,YAAY,QAAgC,+BAA8B;AACnF,SAASC,YAAY,QAAgC,+BAA8B;AACnF,SAASC,cAAc,QAAkC,iCAAgC;AACzF,SAASC,iBAAiB,QAAqC,oCAAmC;AAClG;;CAEC,GACD,SAASC,cAAc,QAAoD,iCAAgC;AAE3G,YAAY;AACZ,SAASC,oBAAoB,QAAQ,kCAAiC;AACtE,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,4BAA2B;AAE7E,QAAQ;AACR,SAASC,iBAAiB,QAAsC,+BAA8B;AAC9F,SAASC,WAAW,QAAqD,yBAAwB;AAEjG,UAAU;AACV,SAASC,eAAe,QAAQ,qBAAoB;AACpD,SACEC,0BAA0B,EAE1BC,mBAAmB,QAEd,qBAAoB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"VersionHistoryPanel.d.ts","sourceRoot":"","sources":["../../../src/editor/plugins/VersionHistoryPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAM3D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,IAAI,CAAA;QACf,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,CAAA;QAC/B,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B;AA2KD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,gEAgP9B,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/editor/plugins/VersionHistoryPanel.tsx"],"sourcesContent":["'use client'\n\nimport { useState, useCallback, useEffect, memo, type CSSProperties } from 'react'\nimport { createUsePuck, type Data } from '@puckeditor/core'\nimport { Loader2, Check, RotateCcw, AlertCircle } from 'lucide-react'\n\n// Create usePuck hook for accessing editor state and dispatch\nconst usePuck = createUsePuck()\n\n/**\n * 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?: Data\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\nexport interface VersionHistoryPanelProps {\n /**\n * Page ID to fetch versions for\n */\n pageId: string\n /**\n * API endpoint base path\n * @default '/api/puck/pages'\n */\n apiEndpoint?: string\n /**\n * Callback after successful restore (e.g., to mark editor as clean)\n */\n onRestoreSuccess?: () => void\n}\n\n// Panel styles using Puck's CSS variables\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n backgroundColor: 'var(--puck-color-white)',\n } as CSSProperties,\n header: {\n padding: '16px',\n borderBottom: '1px solid var(--puck-color-grey-09)',\n flexShrink: 0,\n } as CSSProperties,\n headerTitle: {\n fontSize: '14px',\n fontWeight: 600,\n color: 'var(--puck-color-grey-02)',\n margin: 0,\n } as CSSProperties,\n headerSubtitle: {\n fontSize: '12px',\n color: 'var(--puck-color-grey-05)',\n marginTop: '4px',\n } as CSSProperties,\n content: {\n flex: 1,\n overflowY: 'auto',\n padding: '8px',\n } as CSSProperties,\n loadingContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '48px 16px',\n gap: '12px',\n } as CSSProperties,\n loadingIcon: {\n width: '24px',\n height: '24px',\n color: 'var(--puck-color-grey-05)',\n animation: 'spin 1s linear infinite',\n } as CSSProperties,\n loadingText: {\n fontSize: '14px',\n color: 'var(--puck-color-grey-05)',\n } as CSSProperties,\n errorContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '32px 16px',\n gap: '8px',\n } as CSSProperties,\n errorIcon: {\n width: '32px',\n height: '32px',\n color: 'var(--puck-color-red-06)',\n } as CSSProperties,\n errorText: {\n fontSize: '14px',\n color: 'var(--puck-color-red-06)',\n textAlign: 'center',\n } as CSSProperties,\n emptyContainer: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '48px 16px',\n gap: '8px',\n } as CSSProperties,\n emptyText: {\n fontSize: '14px',\n color: 'var(--puck-color-grey-05)',\n textAlign: 'center',\n } as CSSProperties,\n versionItem: {\n borderRadius: '8px',\n transition: 'background-color 0.15s',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '12px',\n gap: '12px',\n marginBottom: '4px',\n } as CSSProperties,\n versionInfo: {\n flex: 1,\n minWidth: 0,\n } as CSSProperties,\n versionHeader: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n flexWrap: 'wrap',\n } as CSSProperties,\n versionDate: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-02)',\n } as CSSProperties,\n badge: {\n fontSize: '11px',\n fontWeight: 500,\n borderRadius: '4px',\n padding: '2px 6px',\n } as CSSProperties,\n badgeCurrent: {\n backgroundColor: 'var(--puck-color-azure-11)',\n color: 'var(--puck-color-azure-04)',\n } as CSSProperties,\n badgePublished: {\n backgroundColor: 'var(--puck-color-green-11)',\n color: 'var(--puck-color-green-04)',\n } as CSSProperties,\n autosaveText: {\n fontSize: '11px',\n color: 'var(--puck-color-grey-06)',\n fontStyle: 'italic',\n } as CSSProperties,\n versionDetails: {\n fontSize: '12px',\n color: 'var(--puck-color-grey-05)',\n marginTop: '4px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n } as CSSProperties,\n restoreButton: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--puck-color-grey-04)',\n transition: 'all 0.15s',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '6px 10px',\n flexShrink: 0,\n background: 'none',\n border: '1px solid var(--puck-color-grey-08)',\n borderRadius: '6px',\n cursor: 'pointer',\n } as CSSProperties,\n restoreButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n } as CSSProperties,\n checkIcon: {\n width: '16px',\n height: '16px',\n color: 'var(--puck-color-azure-05)',\n flexShrink: 0,\n } as CSSProperties,\n successMessage: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '12px 16px',\n backgroundColor: 'var(--puck-color-green-11)',\n borderRadius: '8px',\n marginBottom: '8px',\n } as CSSProperties,\n successText: {\n fontSize: '13px',\n color: 'var(--puck-color-green-03)',\n fontWeight: 500,\n } as CSSProperties,\n}\n\n/**\n * Version history panel for the Puck plugin rail\n *\n * Displays a list of previous versions with the ability to restore them.\n * Uses Puck's dispatch to update editor state without page reload.\n */\nexport const VersionHistoryPanel = memo(function VersionHistoryPanel({\n pageId,\n apiEndpoint = '/api/puck/pages',\n onRestoreSuccess,\n}: VersionHistoryPanelProps) {\n const dispatch = usePuck((s) => s.dispatch)\n\n const [isLoading, setIsLoading] = useState(true)\n const [isRestoring, setIsRestoring] = useState(false)\n const [versions, setVersions] = useState<PageVersion[]>([])\n const [error, setError] = useState<string | null>(null)\n const [hoveredIndex, setHoveredIndex] = useState<number | null>(null)\n const [successMessage, setSuccessMessage] = useState<string | null>(null)\n\n // Fetch versions on mount\n const fetchVersions = useCallback(async () => {\n setIsLoading(true)\n setError(null)\n try {\n const url = `${apiEndpoint}/${pageId}/versions?limit=20`\n const response = await fetch(url)\n if (!response.ok) {\n if (response.status === 404) {\n setError('Version history is not available for this page.')\n } else {\n throw new Error('Failed to fetch versions')\n }\n return\n }\n const data = await response.json()\n // Handle both 'docs' (our API) and 'versions' (Payload direct) response formats\n setVersions(data.docs || data.versions || [])\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load versions')\n console.error('Error fetching versions:', err)\n } finally {\n setIsLoading(false)\n }\n }, [apiEndpoint, pageId])\n\n useEffect(() => {\n fetchVersions()\n }, [fetchVersions])\n\n // Handle version restore\n const handleRestore = useCallback(\n async (version: PageVersion) => {\n if (!confirm(`Restore this version from ${formatDate(version.updatedAt)}? This will replace your current content.`)) {\n return\n }\n\n setIsRestoring(true)\n setError(null)\n setSuccessMessage(null)\n\n try {\n // Call restore endpoint\n const response = await fetch(`${apiEndpoint}/${pageId}/versions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ versionId: version.id }),\n })\n\n if (!response.ok) {\n throw new Error('Failed to restore version')\n }\n\n const result = await response.json()\n const restoredDoc = result.doc\n\n // Update Puck editor state with restored data\n if (restoredDoc?.puckData) {\n dispatch({\n type: 'setData',\n data: restoredDoc.puckData,\n })\n }\n\n // Show success message\n setSuccessMessage(`Restored version from ${formatDate(version.updatedAt)}`)\n setTimeout(() => setSuccessMessage(null), 3000)\n\n // Notify parent to mark as clean\n onRestoreSuccess?.()\n\n // Refresh version list\n fetchVersions()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to restore version')\n console.error('Error restoring version:', err)\n } finally {\n setIsRestoring(false)\n }\n },\n [apiEndpoint, pageId, dispatch, onRestoreSuccess, fetchVersions]\n )\n\n // Format date for display\n function formatDate(dateStr: string): string {\n const date = new Date(dateStr)\n const now = new Date()\n const diffMs = now.getTime() - date.getTime()\n const diffMins = Math.floor(diffMs / 60000)\n const diffHours = Math.floor(diffMs / 3600000)\n const diffDays = Math.floor(diffMs / 86400000)\n\n if (diffMins < 1) return 'Just now'\n if (diffMins < 60) return `${diffMins}m ago`\n if (diffHours < 24) return `${diffHours}h ago`\n if (diffDays < 7) return `${diffDays}d ago`\n return date.toLocaleDateString()\n }\n\n // Format time for display\n function formatTime(dateStr: string): string {\n const date = new Date(dateStr)\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n }\n\n return (\n <div style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n <h3 style={styles.headerTitle}>Version History</h3>\n {!isLoading && !error && versions.length > 0 && (\n <div style={styles.headerSubtitle}>\n {versions.length} version{versions.length !== 1 ? 's' : ''} available\n </div>\n )}\n </div>\n\n {/* Content */}\n <div style={styles.content}>\n {/* Success message */}\n {successMessage && (\n <div style={styles.successMessage}>\n <Check style={{ width: '16px', height: '16px', color: 'var(--puck-color-green-04)' }} />\n <span style={styles.successText}>{successMessage}</span>\n </div>\n )}\n\n {isLoading ? (\n <div style={styles.loadingContainer}>\n <Loader2 style={styles.loadingIcon} />\n <span style={styles.loadingText}>Loading versions...</span>\n </div>\n ) : error ? (\n <div style={styles.errorContainer}>\n <AlertCircle style={styles.errorIcon} />\n <div style={styles.errorText as CSSProperties}>{error}</div>\n </div>\n ) : versions.length === 0 ? (\n <div style={styles.emptyContainer}>\n <div style={styles.emptyText as CSSProperties}>\n No version history available yet.\n <br />\n Versions are created when you save or publish.\n </div>\n </div>\n ) : (\n versions.map((version, index) => (\n <div\n key={version.id}\n style={{\n ...styles.versionItem,\n backgroundColor: hoveredIndex === index ? 'var(--puck-color-grey-11)' : 'transparent',\n }}\n onMouseEnter={() => setHoveredIndex(index)}\n onMouseLeave={() => setHoveredIndex(null)}\n >\n {/* Version info */}\n <div style={styles.versionInfo}>\n <div style={styles.versionHeader}>\n <span style={styles.versionDate}>\n {formatDate(version.updatedAt)}\n </span>\n {index === 0 && (\n <span style={{ ...styles.badge, ...styles.badgeCurrent }}>\n Current\n </span>\n )}\n {version.version._status === 'published' && (\n <span style={{ ...styles.badge, ...styles.badgePublished }}>\n Published\n </span>\n )}\n {version.autosave && (\n <span style={styles.autosaveText}>\n auto\n </span>\n )}\n </div>\n <div style={styles.versionDetails}>\n {formatTime(version.updatedAt)}\n {version.version.title && (\n <span> &middot; {version.version.title}</span>\n )}\n </div>\n </div>\n\n {/* Restore button (not for current version) */}\n {index > 0 && (\n <button\n type=\"button\"\n onClick={() => handleRestore(version)}\n disabled={isRestoring}\n style={{\n ...styles.restoreButton,\n ...(isRestoring ? styles.restoreButtonDisabled : {}),\n }}\n onMouseEnter={(e) => {\n if (!isRestoring) {\n e.currentTarget.style.backgroundColor = 'var(--puck-color-grey-10)'\n e.currentTarget.style.borderColor = 'var(--puck-color-grey-07)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent'\n e.currentTarget.style.borderColor = 'var(--puck-color-grey-08)'\n }}\n >\n {isRestoring ? (\n <Loader2 style={{ width: '14px', height: '14px', animation: 'spin 1s linear infinite' }} />\n ) : (\n <RotateCcw style={{ width: '14px', height: '14px' }} />\n )}\n Restore\n </button>\n )}\n\n {/* Current indicator */}\n {index === 0 && (\n <Check style={styles.checkIcon} />\n )}\n </div>\n ))\n )}\n </div>\n </div>\n )\n})\n"],"names":["useState","useCallback","useEffect","memo","createUsePuck","Loader2","Check","RotateCcw","AlertCircle","usePuck","styles","container","display","flexDirection","height","backgroundColor","header","padding","borderBottom","flexShrink","headerTitle","fontSize","fontWeight","color","margin","headerSubtitle","marginTop","content","flex","overflowY","loadingContainer","alignItems","justifyContent","gap","loadingIcon","width","animation","loadingText","errorContainer","errorIcon","errorText","textAlign","emptyContainer","emptyText","versionItem","borderRadius","transition","marginBottom","versionInfo","minWidth","versionHeader","flexWrap","versionDate","badge","badgeCurrent","badgePublished","autosaveText","fontStyle","versionDetails","overflow","textOverflow","whiteSpace","restoreButton","background","border","cursor","restoreButtonDisabled","opacity","checkIcon","successMessage","successText","VersionHistoryPanel","pageId","apiEndpoint","onRestoreSuccess","dispatch","s","isLoading","setIsLoading","isRestoring","setIsRestoring","versions","setVersions","error","setError","hoveredIndex","setHoveredIndex","setSuccessMessage","fetchVersions","url","response","fetch","ok","status","Error","data","json","docs","err","message","console","handleRestore","version","confirm","formatDate","updatedAt","method","headers","body","JSON","stringify","versionId","id","result","restoredDoc","doc","puckData","type","setTimeout","dateStr","date","Date","now","diffMs","getTime","diffMins","Math","floor","diffHours","diffDays","toLocaleDateString","formatTime","toLocaleTimeString","hour","minute","div","style","h3","length","span","br","map","index","onMouseEnter","onMouseLeave","_status","autosave","title","button","onClick","disabled","e","currentTarget","borderColor"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAGhF,OAAO,EACL,0BAA0B,EAC1B,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,GACjB,MAAM,0BAA0B,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/editor/plugins/index.ts"],"sourcesContent":["/**\n * Puck plugins re-exported for easy consumption\n *\n * @example\n * ```tsx\n * import { PuckEditor, headingAnalyzer, createVersionHistoryPlugin } from '@delmaredigital/payload-puck/editor'\n *\n * const versionPlugin = createVersionHistoryPlugin({ pageId: 'page-123' })\n * <PuckEditor plugins={[headingAnalyzer, versionPlugin]} />\n * ```\n */\n\nexport { default as headingAnalyzer } from '@puckeditor/plugin-heading-analyzer'\n\n// Version History plugin for plugin rail\nexport {\n createVersionHistoryPlugin,\n type VersionHistoryPluginOptions,\n} from './versionHistoryPlugin.js'\n\nexport {\n VersionHistoryPanel,\n type VersionHistoryPanelProps,\n type PageVersion,\n} from './VersionHistoryPanel.js'\n"],"names":["default","headingAnalyzer","createVersionHistoryPlugin","VersionHistoryPanel"],"mappings":"AAAA;;;;;;;;;;CAUC,GAED,SAASA,WAAWC,eAAe,QAAQ,sCAAqC;AAEhF,yCAAyC;AACzC,SACEC,0BAA0B,QAErB,4BAA2B;AAElC,SACEC,mBAAmB,QAGd,2BAA0B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"versionHistoryPlugin.d.ts","sourceRoot":"","sources":["../../../src/editor/plugins/versionHistoryPlugin.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAG9C,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,MAAM,CAYvF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/editor/plugins/versionHistoryPlugin.tsx"],"sourcesContent":["'use client'\n\nimport { createElement } from 'react'\nimport { History } from 'lucide-react'\nimport type { Plugin } from '@puckeditor/core'\nimport { VersionHistoryPanel } from './VersionHistoryPanel.js'\n\nexport interface VersionHistoryPluginOptions {\n /**\n * Page ID to fetch versions for\n */\n pageId: string\n /**\n * API endpoint base path\n * @default '/api/puck/pages'\n */\n apiEndpoint?: string\n /**\n * Callback after successful restore (e.g., to mark editor as clean)\n */\n onRestoreSuccess?: () => void\n}\n\n/**\n * Creates a Puck plugin for version history\n *\n * Adds a \"History\" button to the plugin rail that opens a panel\n * showing version history with the ability to restore previous versions.\n *\n * @example\n * ```tsx\n * import { createVersionHistoryPlugin } from '@delmaredigital/payload-puck/editor'\n *\n * const versionPlugin = createVersionHistoryPlugin({\n * pageId: 'page-123',\n * apiEndpoint: '/api/puck/pages',\n * onRestoreSuccess: () => markEditorClean(),\n * })\n *\n * <Puck plugins={[versionPlugin]} />\n * ```\n */\nexport function createVersionHistoryPlugin(options: VersionHistoryPluginOptions): Plugin {\n return {\n name: 'version-history',\n label: 'History',\n icon: createElement(History, { size: 20 }),\n render: () =>\n createElement(VersionHistoryPanel, {\n pageId: options.pageId,\n apiEndpoint: options.apiEndpoint,\n onRestoreSuccess: options.onRestoreSuccess,\n }),\n }\n}\n"],"names":["createElement","History","VersionHistoryPanel","createVersionHistoryPlugin","options","name","label","icon","size","render","pageId","apiEndpoint","onRestoreSuccess"],"mappings":"AAAA;AAEA,SAASA,aAAa,QAAQ,QAAO;AACrC,SAASC,OAAO,QAAQ,eAAc;AAEtC,SAASC,mBAAmB,QAAQ,2BAA0B;AAkB9D;;;;;;;;;;;;;;;;;;CAkBC,GACD,OAAO,SAASC,2BAA2BC,OAAoC;IAC7E,OAAO;QACLC,MAAM;QACNC,OAAO;QACPC,oBAAMP,cAAcC,SAAS;YAAEO,MAAM;QAAG;QACxCC,QAAQ,kBACNT,cAAcE,qBAAqB;gBACjCQ,QAAQN,QAAQM,MAAM;gBACtBC,aAAaP,QAAQO,WAAW;gBAChCC,kBAAkBR,QAAQQ,gBAAgB;YAC5C;IACJ;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"detectPageTree.d.ts","sourceRoot":"","sources":["../../../src/editor/utils/detectPageTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE5D;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAclF;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAG7D"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/editor/utils/detectPageTree.ts"],"sourcesContent":["import type { Config as PuckConfig } from '@puckeditor/core'\n\n/**\n * Detects whether page-tree integration should be enabled.\n *\n * Detection priority:\n * 1. Explicit prop takes precedence (true/false)\n * 2. Auto-detect from config: checks if root.fields has both 'folder' and 'pageSegment'\n *\n * @param config - The Puck config to check\n * @param explicitProp - Optional explicit hasPageTree prop value\n * @returns Whether page-tree fields should be injected\n */\nexport function detectPageTree(config: PuckConfig, explicitProp?: boolean): boolean {\n // Explicit prop takes precedence\n if (explicitProp !== undefined) {\n return explicitProp\n }\n\n // Auto-detect from config: if root.fields already has folder and pageSegment,\n // the user is using pageTreeRoot preset - don't double-inject\n const rootFields = config.root?.fields || {}\n const hasPageTreeFields = 'folder' in rootFields && 'pageSegment' in rootFields\n\n // If fields already exist, page-tree is already configured (via preset)\n // Return false to avoid re-injecting\n return false && hasPageTreeFields // Never auto-inject - require explicit opt-in\n}\n\n/**\n * Checks if a config already has page-tree fields configured.\n * Useful for determining if injectPageTreeFields would be redundant.\n *\n * @param config - The Puck config to check\n * @returns Whether the config already has page-tree fields\n */\nexport function hasPageTreeFields(config: PuckConfig): boolean {\n const rootFields = config.root?.fields || {}\n return 'folder' in rootFields && 'pageSegment' in rootFields\n}\n"],"names":["detectPageTree","config","explicitProp","undefined","rootFields","root","fields","hasPageTreeFields"],"mappings":"AAEA;;;;;;;;;;CAUC,GACD,OAAO,SAASA,eAAeC,MAAkB,EAAEC,YAAsB;IACvE,iCAAiC;IACjC,IAAIA,iBAAiBC,WAAW;QAC9B,OAAOD;IACT;IAEA,8EAA8E;IAC9E,8DAA8D;IAC9D,MAAME,aAAaH,OAAOI,IAAI,EAAEC,UAAU,CAAC;IAC3C,MAAMC,oBAAoB,YAAYH,cAAc,iBAAiBA;IAErE,wEAAwE;IACxE,qCAAqC;IACrC,OAAO,SAASG,kBAAkB,8CAA8C;;AAClF;AAEA;;;;;;CAMC,GACD,OAAO,SAASA,kBAAkBN,MAAkB;IAClD,MAAMG,aAAaH,OAAOI,IAAI,EAAEC,UAAU,CAAC;IAC3C,OAAO,YAAYF,cAAc,iBAAiBA;AACpD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/editor/utils/index.ts"],"sourcesContent":["export { injectPageTreeFields } from './injectPageTreeFields.js'\nexport { detectPageTree, hasPageTreeFields } from './detectPageTree.js'\n"],"names":["injectPageTreeFields","detectPageTree","hasPageTreeFields"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,4BAA2B;AAChE,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,sBAAqB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"injectPageTreeFields.d.ts","sourceRoot":"","sources":["../../../src/editor/utils/injectPageTreeFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAK5D;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAyBnE"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/editor/utils/injectPageTreeFields.ts"],"sourcesContent":["import type { Config as PuckConfig } from '@puckeditor/core'\nimport { createFolderPickerField } from '../../fields/FolderPickerField.js'\nimport { createLockedPageSegmentField } from '../../fields/PageSegmentField.js'\nimport { createSlugPreviewField } from '../../fields/SlugPreviewField.js'\n\n/**\n * Injects page-tree fields (folder, pageSegment, slug) into a Puck config's root fields.\n * Replaces any existing slug field with the page-tree slug preview.\n *\n * @param config - The base Puck config to enhance\n * @returns A new config with page-tree fields injected into root.fields\n */\nexport function injectPageTreeFields(config: PuckConfig): PuckConfig {\n // Create page-tree specific fields\n const pageTreeFields = {\n folder: createFolderPickerField({ label: 'Folder' }),\n pageSegment: createLockedPageSegmentField({ label: 'Page Segment' }),\n slug: createSlugPreviewField({\n label: 'URL Slug',\n hint: 'Auto-generated from folder + page segment',\n }),\n }\n\n // Merge page-tree fields into root config, replacing existing slug field\n const existingRootFields = config.root?.fields || {}\n const { slug: _existingSlug, ...otherFields } = existingRootFields as Record<string, unknown>\n\n return {\n ...config,\n root: {\n ...config.root,\n fields: {\n ...otherFields,\n ...pageTreeFields,\n },\n },\n } as PuckConfig\n}\n"],"names":["createFolderPickerField","createLockedPageSegmentField","createSlugPreviewField","injectPageTreeFields","config","pageTreeFields","folder","label","pageSegment","slug","hint","existingRootFields","root","fields","_existingSlug","otherFields"],"mappings":"AACA,SAASA,uBAAuB,QAAQ,oCAAmC;AAC3E,SAASC,4BAA4B,QAAQ,mCAAkC;AAC/E,SAASC,sBAAsB,QAAQ,mCAAkC;AAEzE;;;;;;CAMC,GACD,OAAO,SAASC,qBAAqBC,MAAkB;IACrD,mCAAmC;IACnC,MAAMC,iBAAiB;QACrBC,QAAQN,wBAAwB;YAAEO,OAAO;QAAS;QAClDC,aAAaP,6BAA6B;YAAEM,OAAO;QAAe;QAClEE,MAAMP,uBAAuB;YAC3BK,OAAO;YACPG,MAAM;QACR;IACF;IAEA,yEAAyE;IACzE,MAAMC,qBAAqBP,OAAOQ,IAAI,EAAEC,UAAU,CAAC;IACnD,MAAM,EAAEJ,MAAMK,aAAa,EAAE,GAAGC,aAAa,GAAGJ;IAEhD,OAAO;QACL,GAAGP,MAAM;QACTQ,MAAM;YACJ,GAAGR,OAAOQ,IAAI;YACdC,QAAQ;gBACN,GAAGE,WAAW;gBACd,GAAGV,cAAc;YACnB;QACF;IACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/endpoints/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,SAAS,CAAA;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAa,MAAM,gBAAgB,CAAA;AAItE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;AAiDrC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,iBAAsB,GAAG,cAAc,CAqLvF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/endpoints/ai.ts"],"sourcesContent":["import type { PayloadHandler, PayloadRequest } from 'payload'\nimport type { AiTool, AiToolContext, AiContext } from '../ai/types.js'\nimport { pagePatternSystemContext } from '../ai/presets/index.js'\n\n// Re-export for convenience\nexport type { AiTool, AiToolContext }\n\n/**\n * Collection slug for AI context\n * Matches the auto-generated collection from createPuckPlugin\n */\nconst AI_CONTEXT_COLLECTION = 'puck-ai-context'\n\n/**\n * Fetches dynamic context entries from the database\n * @param req - The Payload request object\n * @returns Concatenated context string or undefined if no entries\n */\nasync function fetchDynamicContext(req: PayloadRequest): Promise<string | undefined> {\n try {\n // Check if the context collection exists (it's optional)\n const collections = req.payload.config.collections\n const hasContextCollection = collections?.some((c) => c.slug === AI_CONTEXT_COLLECTION)\n\n if (!hasContextCollection) {\n return undefined\n }\n\n // Fetch enabled context entries, sorted by order\n const result = await req.payload.find({\n collection: AI_CONTEXT_COLLECTION,\n where: { enabled: { equals: true } },\n sort: 'order',\n limit: 100, // Reasonable limit for context entries\n })\n\n if (!result.docs || result.docs.length === 0) {\n return undefined\n }\n\n // Format each context entry with its name as a header\n const contextBlocks = (result.docs as AiContext[]).map((doc) => {\n const header = doc.category ? `## ${doc.name} (${doc.category})` : `## ${doc.name}`\n return `${header}\\n\\n${doc.content}`\n })\n\n return contextBlocks.join('\\n\\n---\\n\\n')\n } catch (e) {\n // Log but don't fail - context is optional\n console.warn('[payload-puck] Failed to fetch dynamic AI context:', e)\n return undefined\n }\n}\n\n/**\n * Options for the AI endpoint handler\n */\nexport interface AiEndpointOptions {\n /**\n * Business context for AI generation\n * Helps the AI understand your brand, tone, and requirements\n */\n context?: string\n /**\n * Custom tools for AI to use during generation\n * These allow AI to perform actions like database lookups, API calls, etc.\n */\n tools?: Record<string, AiTool>\n}\n\n/**\n * Creates a Payload endpoint handler for Puck AI\n *\n * This handler wraps @puckeditor/cloud-client's puckHandler with\n * Payload authentication. It's auto-registered by createPuckPlugin\n * when `ai.enabled: true`.\n *\n * @example\n * // Automatically registered at /api/puck/ai when:\n * createPuckPlugin({\n * ai: {\n * enabled: true,\n * context: 'You build pages for Acme Corp...',\n * },\n * })\n */\nexport function createAiEndpointHandler(options: AiEndpointOptions = {}): PayloadHandler {\n return async (req) => {\n // 1. Require authentication - AI features are admin-only\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n // 2. Lazy import to avoid bundle bloat (like PostCSS pattern in styles.ts)\n let puckHandler: typeof import('@puckeditor/cloud-client').puckHandler\n try {\n const cloudClient = await import('@puckeditor/cloud-client')\n puckHandler = cloudClient.puckHandler\n } catch (e) {\n console.error('[payload-puck] Failed to load @puckeditor/cloud-client:', e)\n return Response.json(\n { error: 'AI requires @puckeditor/cloud-client. This should be bundled with the plugin.' },\n { status: 500 }\n )\n }\n\n // 3. Check for API key\n const apiKey = process.env.PUCK_API_KEY\n if (!apiKey) {\n return Response.json(\n { error: 'PUCK_API_KEY environment variable is not set' },\n { status: 500 }\n )\n }\n\n // 4. Forward to Puck Cloud handler\n // puckHandler expects a standard Web Request object with specific pathname\n // The handler internally routes based on pathname - it expects /api/puck/chat\n // See: @puckeditor/cloud-client/src/routes.ts - routeRegistry['/api/puck/chat']\n try {\n // Get the request body\n const body = await req.json?.()\n\n // NOTE: We previously removed null values from defaultProps here, but this\n // was preventing the AI from knowing about optional styling fields.\n // Per Puck docs: \"All fields in defaultProps are considered required by the agent\"\n // Fields with null values still need to be present so the AI knows they exist.\n\n // Auto-exclude custom fields in root that don't have ai.exclude set\n // BUT: if field has AI instructions, don't exclude it (we want AI to use it)\n // This handles fields added by page-tree or user customization\n if (body?.config?.root?.fields) {\n for (const [fieldName, field] of Object.entries(body.config.root.fields)) {\n const f = field as any\n // Only exclude if: is custom, doesn't have exclude set, AND doesn't have instructions\n if (f.type === 'custom' && !f.ai?.exclude && !f.ai?.instructions) {\n f.ai = { ...f.ai, exclude: true }\n }\n }\n }\n\n // Auto-exclude custom fields in components that don't have ai.exclude set\n // BUT: if field has AI instructions, don't exclude it (we want AI to use it)\n if (body?.config?.components) {\n for (const [, comp] of Object.entries(body.config.components)) {\n const c = comp as any\n if (c.fields) {\n for (const [, field] of Object.entries(c.fields)) {\n const f = field as any\n // Only exclude if: is custom, doesn't have exclude set, AND doesn't have instructions\n if (f.type === 'custom' && !f.ai?.exclude && !f.ai?.instructions) {\n f.ai = { ...f.ai, exclude: true }\n }\n }\n }\n }\n }\n\n // Validate required fields - puckHandler expects config and pageData\n if (!body) {\n return Response.json({ error: 'Request body is required' }, { status: 400 })\n }\n\n // Ensure config exists (puckHandler needs this)\n if (!body.config) {\n console.warn('[payload-puck] AI request missing config, this may cause issues')\n }\n\n // Construct URL with the pathname puckHandler expects\n // Our Payload endpoint is /api/puck/ai but puckHandler routes to /api/puck/chat\n const protocol = req.headers.get('x-forwarded-proto') || 'http'\n const host = req.headers.get('host') || 'localhost'\n const url = `${protocol}://${host}/api/puck/chat`\n\n // Create new headers without content-length (will be recalculated)\n const headers = new Headers()\n headers.set('content-type', 'application/json')\n // Copy auth headers\n const authHeader = req.headers.get('authorization')\n if (authHeader) {\n headers.set('authorization', authHeader)\n }\n\n const webRequest = new Request(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n })\n\n // Build AI options, only including properties that have values\n // (passing `tools: undefined` explicitly prevents the default from applying)\n const aiOptions: { context?: string; tools?: Record<string, any> } = {}\n\n // Build context from multiple sources:\n // 1. Static context from plugin config\n // 2. Dynamic context from database (puck-ai-context collection)\n // 3. Page pattern system context (composition guidance)\n const contextParts: string[] = []\n\n // Add static context from plugin config\n if (options.context) {\n contextParts.push(options.context)\n }\n\n // Fetch and add dynamic context from database\n const dynamicContext = await fetchDynamicContext(req)\n if (dynamicContext) {\n contextParts.push('# Business Context\\n\\n' + dynamicContext)\n }\n\n // Always add page pattern system context for better composition\n if (pagePatternSystemContext) {\n contextParts.push(pagePatternSystemContext)\n }\n\n // Combine all context parts\n if (contextParts.length > 0) {\n aiOptions.context = contextParts.join('\\n\\n---\\n\\n')\n }\n\n // Wrap tools to inject Payload context into execute functions\n if (options.tools && Object.keys(options.tools).length > 0) {\n const toolContext: AiToolContext = {\n payload: req.payload,\n user: req.user,\n }\n\n // Create wrapped tools that inject the context\n const wrappedTools: Record<string, any> = {}\n for (const [name, tool] of Object.entries(options.tools)) {\n wrappedTools[name] = {\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n // Wrap execute to inject Payload context\n execute: (input: any) => tool.execute(input, toolContext),\n }\n }\n aiOptions.tools = wrappedTools\n }\n\n const response = await puckHandler(webRequest, {\n ai: aiOptions,\n apiKey,\n })\n\n if (!response.ok) {\n // Try to get more info from error response\n const clonedResponse = response.clone()\n try {\n const errorBody = await clonedResponse.json()\n console.error('[payload-puck] Puck Cloud error body:', errorBody)\n } catch {\n const errorText = await clonedResponse.text()\n console.error('[payload-puck] Puck Cloud error text:', errorText)\n }\n }\n\n return response\n } catch (e) {\n console.error('[payload-puck] AI handler error:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'AI request failed' },\n { status: 500 }\n )\n }\n }\n}\n"],"names":["pagePatternSystemContext","AI_CONTEXT_COLLECTION","fetchDynamicContext","req","collections","payload","config","hasContextCollection","some","c","slug","undefined","result","find","collection","where","enabled","equals","sort","limit","docs","length","contextBlocks","map","doc","header","category","name","content","join","e","console","warn","createAiEndpointHandler","options","user","Response","json","error","status","puckHandler","cloudClient","apiKey","process","env","PUCK_API_KEY","body","root","fields","fieldName","field","Object","entries","f","type","ai","exclude","instructions","components","comp","protocol","headers","get","host","url","Headers","set","authHeader","webRequest","Request","method","JSON","stringify","aiOptions","contextParts","context","push","dynamicContext","tools","keys","toolContext","wrappedTools","tool","description","inputSchema","execute","input","response","ok","clonedResponse","clone","errorBody","errorText","text","Error","message"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/endpoints/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAQ7C;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAyBzD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,CAyB3D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,CA+B3D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,CAyB3D"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/endpoints/context.ts"],"sourcesContent":["import type { PayloadHandler } from 'payload'\n\n/**\n * Collection slug for AI context\n * Matches the auto-generated collection from createPuckPlugin\n */\nconst COLLECTION = 'puck-ai-context'\n\n/**\n * List all AI context entries, sorted by order\n * Only returns enabled entries by default\n *\n * GET /api/puck/ai-context\n * Query: ?all=true to include disabled entries\n */\nexport function createContextListHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n try {\n // Check if we should include all entries (including disabled)\n const includeAll = req.query?.all === 'true'\n\n const result = await req.payload.find({\n collection: COLLECTION,\n sort: 'order',\n limit: 100, // Reasonable limit for context entries\n where: includeAll ? {} : { enabled: { equals: true } },\n })\n return Response.json(result)\n } catch (e) {\n console.error('[payload-puck] Error listing context:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to list context' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * Create a new AI context entry\n *\n * POST /api/puck/ai-context\n * Body: { name: string, content: string, category?: string, enabled?: boolean, order?: number }\n */\nexport function createContextCreateHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n try {\n const data = await req.json?.()\n if (!data) {\n return Response.json({ error: 'Request body is required' }, { status: 400 })\n }\n\n const doc = await req.payload.create({\n collection: COLLECTION,\n data,\n })\n return Response.json(doc)\n } catch (e) {\n console.error('[payload-puck] Error creating context:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to create context' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * Update an existing AI context entry\n *\n * PATCH /api/puck/ai-context/:id\n * Body: { name?: string, content?: string, category?: string, enabled?: boolean, order?: number }\n */\nexport function createContextUpdateHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const id = req.routeParams?.id as string\n if (!id) {\n return Response.json({ error: 'Context ID is required' }, { status: 400 })\n }\n\n try {\n const data = await req.json?.()\n if (!data) {\n return Response.json({ error: 'Request body is required' }, { status: 400 })\n }\n\n const doc = await req.payload.update({\n collection: COLLECTION,\n id,\n data,\n })\n return Response.json(doc)\n } catch (e) {\n console.error('[payload-puck] Error updating context:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to update context' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * Delete an AI context entry\n *\n * DELETE /api/puck/ai-context/:id\n */\nexport function createContextDeleteHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const id = req.routeParams?.id as string\n if (!id) {\n return Response.json({ error: 'Context ID is required' }, { status: 400 })\n }\n\n try {\n await req.payload.delete({\n collection: COLLECTION,\n id,\n })\n return Response.json({ success: true })\n } catch (e) {\n console.error('[payload-puck] Error deleting context:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to delete context' },\n { status: 500 }\n )\n }\n }\n}\n"],"names":["COLLECTION","createContextListHandler","req","user","Response","json","error","status","includeAll","query","all","result","payload","find","collection","sort","limit","where","enabled","equals","e","console","Error","message","createContextCreateHandler","data","doc","create","createContextUpdateHandler","id","routeParams","update","createContextDeleteHandler","delete","success"],"mappings":"AAEA;;;CAGC,GACD,MAAMA,aAAa;AAEnB;;;;;;CAMC,GACD,OAAO,SAASC;IACd,OAAO,OAAOC;QACZ,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAOC,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAe,GAAG;gBAAEC,QAAQ;YAAI;QAChE;QAEA,IAAI;YACF,8DAA8D;YAC9D,MAAMC,aAAaN,IAAIO,KAAK,EAAEC,QAAQ;YAEtC,MAAMC,SAAS,MAAMT,IAAIU,OAAO,CAACC,IAAI,CAAC;gBACpCC,YAAYd;gBACZe,MAAM;gBACNC,OAAO;gBACPC,OAAOT,aAAa,CAAC,IAAI;oBAAEU,SAAS;wBAAEC,QAAQ;oBAAK;gBAAE;YACvD;YACA,OAAOf,SAASC,IAAI,CAACM;QACvB,EAAE,OAAOS,GAAG;YACVC,QAAQf,KAAK,CAAC,yCAAyCc;YACvD,OAAOhB,SAASC,IAAI,CAClB;gBAAEC,OAAOc,aAAaE,QAAQF,EAAEG,OAAO,GAAG;YAAyB,GACnE;gBAAEhB,QAAQ;YAAI;QAElB;IACF;AACF;AAEA;;;;;CAKC,GACD,OAAO,SAASiB;IACd,OAAO,OAAOtB;QACZ,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAOC,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAe,GAAG;gBAAEC,QAAQ;YAAI;QAChE;QAEA,IAAI;YACF,MAAMkB,OAAO,MAAMvB,IAAIG,IAAI;YAC3B,IAAI,CAACoB,MAAM;gBACT,OAAOrB,SAASC,IAAI,CAAC;oBAAEC,OAAO;gBAA2B,GAAG;oBAAEC,QAAQ;gBAAI;YAC5E;YAEA,MAAMmB,MAAM,MAAMxB,IAAIU,OAAO,CAACe,MAAM,CAAC;gBACnCb,YAAYd;gBACZyB;YACF;YACA,OAAOrB,SAASC,IAAI,CAACqB;QACvB,EAAE,OAAON,GAAG;YACVC,QAAQf,KAAK,CAAC,0CAA0Cc;YACxD,OAAOhB,SAASC,IAAI,CAClB;gBAAEC,OAAOc,aAAaE,QAAQF,EAAEG,OAAO,GAAG;YAA2B,GACrE;gBAAEhB,QAAQ;YAAI;QAElB;IACF;AACF;AAEA;;;;;CAKC,GACD,OAAO,SAASqB;IACd,OAAO,OAAO1B;QACZ,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAOC,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAe,GAAG;gBAAEC,QAAQ;YAAI;QAChE;QAEA,MAAMsB,KAAK3B,IAAI4B,WAAW,EAAED;QAC5B,IAAI,CAACA,IAAI;YACP,OAAOzB,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAyB,GAAG;gBAAEC,QAAQ;YAAI;QAC1E;QAEA,IAAI;YACF,MAAMkB,OAAO,MAAMvB,IAAIG,IAAI;YAC3B,IAAI,CAACoB,MAAM;gBACT,OAAOrB,SAASC,IAAI,CAAC;oBAAEC,OAAO;gBAA2B,GAAG;oBAAEC,QAAQ;gBAAI;YAC5E;YAEA,MAAMmB,MAAM,MAAMxB,IAAIU,OAAO,CAACmB,MAAM,CAAC;gBACnCjB,YAAYd;gBACZ6B;gBACAJ;YACF;YACA,OAAOrB,SAASC,IAAI,CAACqB;QACvB,EAAE,OAAON,GAAG;YACVC,QAAQf,KAAK,CAAC,0CAA0Cc;YACxD,OAAOhB,SAASC,IAAI,CAClB;gBAAEC,OAAOc,aAAaE,QAAQF,EAAEG,OAAO,GAAG;YAA2B,GACrE;gBAAEhB,QAAQ;YAAI;QAElB;IACF;AACF;AAEA;;;;CAIC,GACD,OAAO,SAASyB;IACd,OAAO,OAAO9B;QACZ,IAAI,CAACA,IAAIC,IAAI,EAAE;YACb,OAAOC,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAe,GAAG;gBAAEC,QAAQ;YAAI;QAChE;QAEA,MAAMsB,KAAK3B,IAAI4B,WAAW,EAAED;QAC5B,IAAI,CAACA,IAAI;YACP,OAAOzB,SAASC,IAAI,CAAC;gBAAEC,OAAO;YAAyB,GAAG;gBAAEC,QAAQ;YAAI;QAC1E;QAEA,IAAI;YACF,MAAML,IAAIU,OAAO,CAACqB,MAAM,CAAC;gBACvBnB,YAAYd;gBACZ6B;YACF;YACA,OAAOzB,SAASC,IAAI,CAAC;gBAAE6B,SAAS;YAAK;QACvC,EAAE,OAAOd,GAAG;YACVC,QAAQf,KAAK,CAAC,0CAA0Cc;YACxD,OAAOhB,SAASC,IAAI,CAClB;gBAAEC,OAAOc,aAAaE,QAAQF,EAAEG,OAAO,GAAG;YAA2B,GACrE;gBAAEhB,QAAQ;YAAI;QAElB;IACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoints/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,SAAS,CAAA;AAI7D,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CA8B9E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CA+BhF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CA+B7E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CAyFhF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CA6BhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CAiClF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc,CAuCjF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/endpoints/index.ts"],"sourcesContent":["/**\n * Puck API Endpoint Handlers\n *\n * These handlers are registered via config.endpoints in the plugin.\n * They provide CRUD operations for Puck-enabled collections.\n */\n\nimport type { PayloadHandler, CollectionSlug } from 'payload'\nimport { APIError } from 'payload'\nimport { unsetHomepage, HomepageConflictError } from '../plugin/hooks/isHomepageUnique.js'\n\nexport interface PuckEndpointOptions {\n collections: string[]\n}\n\n/**\n * GET /api/puck/:collection\n * List all documents in a Puck-enabled collection\n */\nexport function createListHandler(options: PuckEndpointOptions): PayloadHandler {\n const { collections } = options\n\n return async (req) => {\n try {\n const collection = req.routeParams?.collection as string\n\n if (!collections.includes(collection)) {\n return Response.json(\n { error: `Collection '${collection}' is not configured for Puck` },\n { status: 400 }\n )\n }\n\n const result = await req.payload.find({\n collection: collection as CollectionSlug,\n draft: true,\n depth: 0,\n limit: 100,\n })\n\n return Response.json(result)\n } catch (error) {\n console.error('[payload-puck] List error:', error)\n return Response.json(\n { error: error instanceof Error ? error.message : 'List failed' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * POST /api/puck/:collection\n * Create a new document in a Puck-enabled collection\n */\nexport function createCreateHandler(options: PuckEndpointOptions): PayloadHandler {\n const { collections } = options\n\n return async (req) => {\n try {\n const collection = req.routeParams?.collection as string\n\n if (!collections.includes(collection)) {\n return Response.json(\n { error: `Collection '${collection}' is not configured for Puck` },\n { status: 400 }\n )\n }\n\n const body = await req.json?.()\n\n const doc = await req.payload.create({\n collection: collection as CollectionSlug,\n data: body,\n draft: true,\n })\n\n return Response.json({ doc })\n } catch (error) {\n console.error('[payload-puck] Create error:', error)\n return Response.json(\n { error: error instanceof Error ? error.message : 'Create failed' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * GET /api/puck/:collection/:id\n * Get a single document by ID\n */\nexport function createGetHandler(options: PuckEndpointOptions): PayloadHandler {\n const { collections } = options\n\n return async (req) => {\n try {\n const collection = req.routeParams?.collection as string\n const id = req.routeParams?.id as string\n\n if (!collections.includes(collection)) {\n return Response.json(\n { error: `Collection '${collection}' is not configured for Puck` },\n { status: 400 }\n )\n }\n\n const doc = await req.payload.findByID({\n collection: collection as CollectionSlug,\n id,\n draft: true,\n depth: 0,\n })\n\n return Response.json({ doc })\n } catch (error) {\n console.error('[payload-puck] Get error:', error)\n return Response.json(\n { error: error instanceof Error ? error.message : 'Get failed' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * PATCH /api/puck/:collection/:id\n * Update a document (supports draft saving, publishing, and homepage swapping)\n */\nexport function createUpdateHandler(options: PuckEndpointOptions): PayloadHandler {\n const { collections } = options\n\n return async (req) => {\n try {\n const collection = req.routeParams?.collection as string\n const id = req.routeParams?.id as string\n\n if (!collections.includes(collection)) {\n return Response.json(\n { error: `Collection '${collection}' is not configured for Puck` },\n { status: 400 }\n )\n }\n\n const body = await req.json?.()\n const { _status, swapHomepage, ...data } = body || {}\n\n // Determine if this is a publish or draft save\n const shouldPublish = _status === 'published'\n\n // Handle homepage swap if requested\n // When swapHomepage is true and isHomepage is being set to true,\n // we need to unset the current homepage first\n if (swapHomepage && data.isHomepage === true) {\n // Find the current homepage\n const existingHomepage = await req.payload.find({\n collection: collection as CollectionSlug,\n where: {\n and: [\n { isHomepage: { equals: true } },\n { id: { not_equals: id } },\n ],\n },\n limit: 1,\n depth: 0,\n })\n\n // Unset the existing homepage if found\n if (existingHomepage.docs.length > 0) {\n const existingId = String(existingHomepage.docs[0].id)\n await unsetHomepage(req.payload, collection, existingId)\n }\n }\n\n const doc = await req.payload.update({\n collection: collection as CollectionSlug,\n id,\n data: {\n ...data,\n _status: shouldPublish ? 'published' : 'draft',\n },\n draft: !shouldPublish,\n // Skip the isHomepage hook if we've already handled the swap\n context: swapHomepage ? { skipIsHomepageHook: true } : undefined,\n })\n\n return Response.json({ doc, published: shouldPublish })\n } catch (error) {\n console.error('[payload-puck] Update error:', error)\n\n // Handle HomepageConflictError specially - pass through existingHomepage data\n if (error instanceof HomepageConflictError) {\n return Response.json(\n {\n error: error.message,\n data: { existingHomepage: error.existingHomepage },\n },\n { status: 400 }\n )\n }\n\n // Handle other APIErrors\n if (error instanceof APIError) {\n return Response.json(\n {\n error: error.message,\n data: error.data,\n },\n { status: error.status || 500 }\n )\n }\n\n return Response.json(\n { error: error instanceof Error ? error.message : 'Update failed' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * DELETE /api/puck/:collection/:id\n * Delete a document\n */\nexport function createDeleteHandler(options: PuckEndpointOptions): PayloadHandler {\n const { collections } = options\n\n return async (req) => {\n try {\n const collection = req.routeParams?.collection as string\n const id = req.routeParams?.id as string\n\n if (!collections.includes(collection)) {\n return Response.json(\n { error: `Collection '${collection}' is not configured for Puck` },\n { status: 400 }\n )\n }\n\n await req.payload.delete({\n collection: collection as CollectionSlug,\n id,\n })\n\n return Response.json({ success: true })\n } catch (error) {\n console.error('[payload-puck] Delete error:', error)\n return Response.json(\n { error: error instanceof Error ? error.message : 'Delete failed' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * GET /api/puck/:collection/:id/versions\n * Get version history for a document\n */\nexport function createVersionsHandler(options: PuckEndpointOptions): PayloadHandler {\n const { collections } = options\n\n return async (req) => {\n try {\n const collection = req.routeParams?.collection as string\n const id = req.routeParams?.id as string\n\n if (!collections.includes(collection)) {\n return Response.json(\n { error: `Collection '${collection}' is not configured for Puck` },\n { status: 400 }\n )\n }\n\n const versions = await req.payload.findVersions({\n collection: collection as CollectionSlug,\n where: {\n parent: { equals: id },\n },\n sort: '-updatedAt',\n limit: 20,\n })\n\n return Response.json({ versions: versions.docs })\n } catch (error) {\n console.error('[payload-puck] Versions error:', error)\n return Response.json(\n { error: error instanceof Error ? error.message : 'Versions failed' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * POST /api/puck/:collection/:id/restore\n * Restore a specific version\n */\nexport function createRestoreHandler(options: PuckEndpointOptions): PayloadHandler {\n const { collections } = options\n\n return async (req) => {\n try {\n const collection = req.routeParams?.collection as string\n const id = req.routeParams?.id as string\n\n if (!collections.includes(collection)) {\n return Response.json(\n { error: `Collection '${collection}' is not configured for Puck` },\n { status: 400 }\n )\n }\n\n const body = await req.json?.()\n const { versionId } = body || {}\n\n if (!versionId) {\n return Response.json(\n { error: 'Missing versionId in request body' },\n { status: 400 }\n )\n }\n\n const doc = await req.payload.restoreVersion({\n collection: collection as CollectionSlug,\n id: versionId,\n })\n\n return Response.json({ doc })\n } catch (error) {\n console.error('[payload-puck] Restore error:', error)\n return Response.json(\n { error: error instanceof Error ? error.message : 'Restore failed' },\n { status: 500 }\n )\n }\n }\n}\n"],"names":["APIError","unsetHomepage","HomepageConflictError","createListHandler","options","collections","req","collection","routeParams","includes","Response","json","error","status","result","payload","find","draft","depth","limit","console","Error","message","createCreateHandler","body","doc","create","data","createGetHandler","id","findByID","createUpdateHandler","_status","swapHomepage","shouldPublish","isHomepage","existingHomepage","where","and","equals","not_equals","docs","length","existingId","String","update","context","skipIsHomepageHook","undefined","published","createDeleteHandler","delete","success","createVersionsHandler","versions","findVersions","parent","sort","createRestoreHandler","versionId","restoreVersion"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/endpoints/postcss.d.ts"],"sourcesContent":["/**\n * Ambient type declarations for optional PostCSS/Tailwind peer dependencies\n * These modules are dynamically imported at runtime from the consumer's project\n */\n\ndeclare module 'postcss' {\n const postcss: (plugins?: unknown[]) => {\n process: (css: string, options?: { from?: string }) => Promise<{ css: string }>\n }\n export default postcss\n}\n\ndeclare module '@tailwindcss/postcss' {\n const tailwindcss: unknown\n export default tailwindcss\n}\n\ndeclare module 'tailwindcss' {\n const tailwindcss: unknown\n export default tailwindcss\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAED"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/endpoints/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAQ7C;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAqBzD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,CAyB3D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,CA+B3D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,CAyB3D"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/endpoints/prompts.ts"],"sourcesContent":["import type { PayloadHandler } from 'payload'\n\n/**\n * Collection slug for AI prompts\n * Matches the auto-generated collection from createPuckPlugin\n */\nconst COLLECTION = 'puck-ai-prompts'\n\n/**\n * List all AI prompts, sorted by order\n *\n * GET /api/puck/ai-prompts\n */\nexport function createPromptsListHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n try {\n const result = await req.payload.find({\n collection: COLLECTION,\n sort: 'order',\n limit: 100, // Reasonable limit for prompts\n })\n return Response.json(result)\n } catch (e) {\n console.error('[payload-puck] Error listing prompts:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to list prompts' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * Create a new AI prompt\n *\n * POST /api/puck/ai-prompts\n * Body: { label: string, prompt: string, category?: string, order?: number }\n */\nexport function createPromptsCreateHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n try {\n const data = await req.json?.()\n if (!data) {\n return Response.json({ error: 'Request body is required' }, { status: 400 })\n }\n\n const doc = await req.payload.create({\n collection: COLLECTION,\n data,\n })\n return Response.json(doc)\n } catch (e) {\n console.error('[payload-puck] Error creating prompt:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to create prompt' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * Update an existing AI prompt\n *\n * PATCH /api/puck/ai-prompts/:id\n * Body: { label?: string, prompt?: string, category?: string, order?: number }\n */\nexport function createPromptsUpdateHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const id = req.routeParams?.id as string\n if (!id) {\n return Response.json({ error: 'Prompt ID is required' }, { status: 400 })\n }\n\n try {\n const data = await req.json?.()\n if (!data) {\n return Response.json({ error: 'Request body is required' }, { status: 400 })\n }\n\n const doc = await req.payload.update({\n collection: COLLECTION,\n id,\n data,\n })\n return Response.json(doc)\n } catch (e) {\n console.error('[payload-puck] Error updating prompt:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to update prompt' },\n { status: 500 }\n )\n }\n }\n}\n\n/**\n * Delete an AI prompt\n *\n * DELETE /api/puck/ai-prompts/:id\n */\nexport function createPromptsDeleteHandler(): PayloadHandler {\n return async (req) => {\n if (!req.user) {\n return Response.json({ error: 'Unauthorized' }, { status: 401 })\n }\n\n const id = req.routeParams?.id as string\n if (!id) {\n return Response.json({ error: 'Prompt ID is required' }, { status: 400 })\n }\n\n try {\n await req.payload.delete({\n collection: COLLECTION,\n id,\n })\n return Response.json({ success: true })\n } catch (e) {\n console.error('[payload-puck] Error deleting prompt:', e)\n return Response.json(\n { error: e instanceof Error ? e.message : 'Failed to delete prompt' },\n { status: 500 }\n )\n }\n }\n}\n"],"names":["COLLECTION","createPromptsListHandler","req","user","Response","json","error","status","result","payload","find","collection","sort","limit","e","console","Error","message","createPromptsCreateHandler","data","doc","create","createPromptsUpdateHandler","id","routeParams","update","createPromptsDeleteHandler","delete","success"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/endpoints/styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAqF7C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA2DvE;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,qBAAqB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/endpoints/styles.ts"],"sourcesContent":["/**\n * Styles Endpoint Handler\n *\n * Compiles and serves CSS for the editor iframe.\n * Uses the consumer's PostCSS/Tailwind installation via peer dependencies.\n * Loads the project's postcss.config.js for proper plugin configuration.\n */\n\nimport type { PayloadHandler } from 'payload'\nimport { readFileSync, statSync, existsSync } from 'fs'\nimport { join } from 'path'\n\n// Cache compiled CSS in memory with file modification time tracking\ninterface CssCache {\n css: string\n mtime: number\n}\n\nconst cssCache = new Map<string, CssCache>()\n\n/**\n * Compile CSS using PostCSS with the project's configuration\n * Loads postcss.config.js from project root for proper plugin setup\n * Falls back to minimal Tailwind-only config if no config file found\n */\nasync function compileCss(css: string, filePath: string): Promise<string> {\n try {\n // Dynamic import to use consumer's PostCSS installation\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let postcss: any\n try {\n postcss = (await import(/* webpackIgnore: true */ 'postcss')).default\n } catch {\n console.warn(\n '[payload-puck] PostCSS not found. CSS will not be processed. Install postcss as a dependency.'\n )\n return css\n }\n\n // Try to load the project's postcss.config.js using postcss-load-config\n // This ensures all plugins (typography, etc.) are properly loaded\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let processor: any\n let usedProjectConfig = false\n try {\n // Dynamic import of postcss-load-config (optional peer dependency)\n // This package is commonly installed alongside PostCSS\n const loadConfigModule = await import(\n /* webpackIgnore: true */\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore - optional dependency may not have types\n 'postcss-load-config'\n )\n const postcssLoadConfig = loadConfigModule.default\n // Load config from project root (where postcss.config.js lives)\n const { plugins } = await postcssLoadConfig({}, process.cwd())\n processor = postcss(plugins)\n usedProjectConfig = true\n } catch {\n // postcss-load-config not available or no config found - this is fine\n // Fall back to direct Tailwind import silently\n\n // Try Tailwind v4 first (@tailwindcss/postcss)\n try {\n const tailwindcss = (\n await import(/* webpackIgnore: true */ '@tailwindcss/postcss')\n ).default\n processor = postcss([tailwindcss])\n } catch {\n // Fall back to Tailwind v3 (tailwindcss)\n try {\n const tailwindcss = (\n await import(/* webpackIgnore: true */ 'tailwindcss')\n ).default\n processor = postcss([tailwindcss])\n } catch {\n // No Tailwind available - just return the CSS as-is\n console.warn(\n '[payload-puck] No Tailwind CSS installation found. CSS will not be processed.'\n )\n return css\n }\n }\n }\n\n const result = await processor.process(css, { from: filePath })\n return result.css\n } catch (error) {\n console.error('[payload-puck] CSS compilation error:', error)\n throw error\n }\n}\n\n/**\n * Creates a handler that serves compiled CSS for the editor iframe\n *\n * @param cssFilePath - Path to CSS file relative to project root\n * @returns PayloadHandler that serves compiled CSS\n */\nexport function createStylesHandler(cssFilePath: string): PayloadHandler {\n return async () => {\n try {\n const fullPath = join(process.cwd(), cssFilePath)\n\n // Check if file exists\n if (!existsSync(fullPath)) {\n console.error(`[payload-puck] CSS file not found: ${fullPath}`)\n return new Response(`/* CSS file not found: ${cssFilePath} */`, {\n status: 404,\n headers: {\n 'Content-Type': 'text/css',\n },\n })\n }\n\n // Get file modification time for cache invalidation\n const stats = statSync(fullPath)\n const mtime = stats.mtimeMs\n\n // Check cache\n const cached = cssCache.get(cssFilePath)\n if (cached && cached.mtime === mtime) {\n return new Response(cached.css, {\n headers: {\n 'Content-Type': 'text/css',\n 'Cache-Control': 'public, max-age=31536000, immutable',\n 'X-Puck-Cache': 'hit',\n },\n })\n }\n\n // Read and compile CSS\n const rawCss = readFileSync(fullPath, 'utf-8')\n const compiledCss = await compileCss(rawCss, fullPath)\n\n // Update cache\n cssCache.set(cssFilePath, { css: compiledCss, mtime })\n\n return new Response(compiledCss, {\n headers: {\n 'Content-Type': 'text/css',\n 'Cache-Control': 'public, max-age=31536000, immutable',\n 'X-Puck-Cache': 'miss',\n },\n })\n } catch (error) {\n console.error('[payload-puck] Styles endpoint error:', error)\n return new Response(\n `/* Error compiling CSS: ${error instanceof Error ? error.message : 'Unknown error'} */`,\n {\n status: 500,\n headers: {\n 'Content-Type': 'text/css',\n },\n }\n )\n }\n }\n}\n\n/**\n * Helper constant for the styles endpoint URL\n */\nexport const PUCK_STYLES_ENDPOINT = '/api/puck/styles'\n"],"names":["readFileSync","statSync","existsSync","join","cssCache","Map","compileCss","css","filePath","postcss","default","console","warn","processor","usedProjectConfig","loadConfigModule","postcssLoadConfig","plugins","process","cwd","tailwindcss","result","from","error","createStylesHandler","cssFilePath","fullPath","Response","status","headers","stats","mtime","mtimeMs","cached","get","rawCss","compiledCss","set","Error","message","PUCK_STYLES_ENDPOINT"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/exports/client.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAG9D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AACjF,YAAY,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAGpG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACrF,YAAY,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AAG7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/exports/client.ts"],"sourcesContent":["'use client'\n\n/**\n * Client component exports for Payload admin and custom UIs\n *\n * These components require 'use client' and can use React hooks.\n * Import via: '@delmaredigital/payload-puck/client'\n *\n * @example\n * ```tsx\n * import { PuckEditor, PuckConfigProvider } from '@delmaredigital/payload-puck/client'\n * ```\n */\n\n// Main editor component\nexport { PuckEditor } from '../editor/PuckEditor.js'\nexport type { PuckEditorProps } from '../editor/PuckEditor.js'\n\n// Context (optional - for multi-editor apps sharing config)\nexport { PuckConfigProvider, usePuckConfig } from '../views/PuckConfigContext.js'\nexport type { PuckConfigProviderProps, PuckConfigContextValue } from '../views/PuckConfigContext.js'\n\n// Admin components\nexport { EditWithPuckButton, EditWithPuckLink } from '../admin/EditWithPuckButton.js'\nexport type { EditWithPuckButtonProps } from '../admin/EditWithPuckButton.js'\n\n// Page-tree utilities\nexport { injectPageTreeFields } from '../editor/utils/injectPageTreeFields.js'\nexport { detectPageTree, hasPageTreeFields } from '../editor/utils/detectPageTree.js'\n"],"names":["PuckEditor","PuckConfigProvider","usePuckConfig","EditWithPuckButton","EditWithPuckLink","injectPageTreeFields","detectPageTree","hasPageTreeFields"],"mappings":"AAAA;AAEA;;;;;;;;;;CAUC,GAED,wBAAwB;AACxB,SAASA,UAAU,QAAQ,0BAAyB;AAGpD,4DAA4D;AAC5D,SAASC,kBAAkB,EAAEC,aAAa,QAAQ,gCAA+B;AAGjF,mBAAmB;AACnB,SAASC,kBAAkB,EAAEC,gBAAgB,QAAQ,iCAAgC;AAGrF,sBAAsB;AACtB,SAASC,oBAAoB,QAAQ,0CAAyC;AAC9E,SAASC,cAAc,EAAEC,iBAAiB,QAAQ,oCAAmC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rsc.d.ts","sourceRoot":"","sources":["../../src/exports/rsc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/exports/rsc.ts"],"sourcesContent":["/**\n * RSC (React Server Component) exports for Payload admin views\n *\n * These components are server-rendered and should be imported via:\n * '@delmaredigital/payload-puck/rsc#ComponentName'\n *\n * @example\n * ```ts\n * // In plugin config:\n * config.admin.components.views = {\n * puckEditor: {\n * Component: '@delmaredigital/payload-puck/rsc#PuckEditorView',\n * path: '/puck-editor/:segments*',\n * },\n * }\n * ```\n */\n\nexport { PuckEditorView } from '../views/PuckEditorView.js'\n"],"names":["PuckEditorView"],"mappings":"AAAA;;;;;;;;;;;;;;;;CAgBC,GAED,SAASA,cAAc,QAAQ,6BAA4B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AlignmentField.d.ts","sourceRoot":"","sources":["../../src/fields/AlignmentField.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAYnD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEnD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAA;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mDAAmD;IACnD,YAAY,CAAC,EAAE,SAAS,CAAA;CACzB;AA4ED,iBAAS,mBAAmB,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,KAAmB,EACnB,QAAQ,EACR,YAAqB,GACtB,EAAE,mBAAmB,qBA2DrB;AAED,eAAO,MAAM,cAAc,uDAA4B,CAAA;AAMvD,UAAU,0BAA0B;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,SAAS,CAAA;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,GAAE,0BAA+B,GACtC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,CAc/B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/AlignmentField.tsx"],"sourcesContent":["'use client'\n\n/**\n * AlignmentField - Icon toggle buttons for text/content alignment\n *\n * Replaces select dropdowns with intuitive icon toggles for\n * left, center, right alignment.\n */\n\nimport React, { useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport {\n AlignLeft,\n AlignCenter,\n AlignRight,\n X,\n} from 'lucide-react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type Alignment = 'left' | 'center' | 'right'\n\ninterface AlignmentFieldProps {\n value: Alignment | null\n onChange: (value: Alignment | null) => void\n label?: string\n readOnly?: boolean\n /** Default value when cleared or initially null */\n defaultValue?: Alignment\n}\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n } as CSSProperties,\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n label: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n buttonGroup: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n } as CSSProperties,\n button: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n padding: 0,\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-bg)',\n color: 'var(--theme-elevation-700)',\n cursor: 'pointer',\n } as CSSProperties,\n buttonActive: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n padding: 0,\n border: '1px solid var(--theme-elevation-800)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-elevation-800)',\n color: 'var(--theme-bg)',\n cursor: 'pointer',\n } as CSSProperties,\n buttonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n } as CSSProperties,\n}\n\n// =============================================================================\n// AlignmentField Component\n// =============================================================================\n\nfunction AlignmentFieldInner({\n value,\n onChange,\n label = 'Alignment',\n readOnly,\n defaultValue = 'left',\n}: AlignmentFieldProps) {\n const currentValue = value ?? defaultValue\n\n const handleChange = useCallback((alignment: Alignment) => {\n onChange(alignment)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const alignments = [\n { value: 'left' as Alignment, icon: AlignLeft, title: 'Align left' },\n { value: 'center' as Alignment, icon: AlignCenter, title: 'Align center' },\n { value: 'right' as Alignment, icon: AlignRight, title: 'Align right' },\n ]\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header with label and clear */}\n <div style={styles.header}>\n <label style={styles.label}>\n {label}\n </label>\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n title=\"Reset to default\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Alignment toggle buttons */}\n <div style={styles.buttonGroup}>\n {alignments.map(({ value: alignment, icon: Icon, title }) => {\n const isActive = currentValue === alignment\n return (\n <button\n key={alignment}\n type=\"button\"\n onClick={() => handleChange(alignment)}\n disabled={readOnly}\n style={{\n ...(isActive ? styles.buttonActive : styles.button),\n ...(readOnly ? styles.buttonDisabled : {}),\n }}\n title={title}\n >\n <Icon style={{ width: '16px', height: '16px' }} />\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\nexport const AlignmentField = memo(AlignmentFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateAlignmentFieldConfig {\n label?: string\n defaultValue?: Alignment\n}\n\n/**\n * Creates a Puck field configuration for alignment control\n *\n * @example\n * ```ts\n * fields: {\n * alignment: createAlignmentField({ label: 'Text Alignment' }),\n * }\n * ```\n */\nexport function createAlignmentField(\n config: CreateAlignmentFieldConfig = {}\n): CustomField<Alignment | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AlignmentField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n defaultValue={config.defaultValue}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","AlignLeft","AlignCenter","AlignRight","X","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","label","fontSize","fontWeight","color","clearButton","width","height","padding","border","borderRadius","backgroundColor","cursor","buttonGroup","flexWrap","button","buttonActive","buttonDisabled","opacity","AlignmentFieldInner","value","onChange","readOnly","defaultValue","currentValue","handleChange","alignment","handleClear","alignments","icon","title","div","className","style","type","onClick","map","Icon","isActive","disabled","AlignmentField","createAlignmentField","config","render"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnimationField.d.ts","sourceRoot":"","sources":["../../src/fields/AnimationField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,aAAa,CAAA;AAYpB,UAAU,mBAAmB;IAC3B,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAA;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAgVD,iBAAS,mBAAmB,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,KAAmB,EACnB,QAAQ,EACR,WAAmB,GACpB,EAAE,mBAAmB,qBA8UrB;AAED,eAAO,MAAM,cAAc,uDAA4B,CAAA;AAMvD,UAAU,0BAA0B;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kFAAkF;IAClF,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,0BAA+B,GAAG,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,CAchH"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/AnimationField.tsx"],"sourcesContent":["'use client'\n\n/**\n * AnimationField - Custom Puck field for transition and entrance animation controls\n *\n * Provides comprehensive animation configuration with:\n * - 27 preset entrance animations organized by category\n * - Customizable intensity (distance, scale, rotate, blur)\n * - Transform origin control\n * - Advanced easing options (including spring/bounce)\n * - Scroll trigger settings\n * - Stagger support for child elements\n */\n\nimport React, { useCallback, memo, useState, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { X, ChevronDown, ChevronRight } from 'lucide-react'\nimport type {\n AnimationValue,\n AdvancedEasingFunction,\n EntranceAnimation,\n AnimationOrigin,\n StaggerDirection,\n} from './shared.js'\nimport {\n ANIMATION_CATEGORIES,\n DEFAULT_ANIMATION,\n getRelevantIntensityControls,\n getDefaultEasingForAnimation,\n} from './shared.js'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface AnimationFieldProps {\n value: AnimationValue | null\n onChange: (value: AnimationValue | null) => void\n label?: string\n readOnly?: boolean\n /** Whether to show stagger controls (for container components) */\n showStagger?: boolean\n}\n\n// =============================================================================\n// Easing Options\n// =============================================================================\n\nconst EASING_OPTIONS: Array<{ value: AdvancedEasingFunction; label: string; group: string }> = [\n // Standard\n { value: 'linear', label: 'Linear', group: 'Standard' },\n { value: 'ease', label: 'Ease', group: 'Standard' },\n { value: 'ease-in', label: 'Ease In', group: 'Standard' },\n { value: 'ease-out', label: 'Ease Out', group: 'Standard' },\n { value: 'ease-in-out', label: 'Ease In Out', group: 'Standard' },\n // Spring/Bounce\n { value: 'spring', label: 'Spring', group: 'Spring' },\n { value: 'spring-gentle', label: 'Spring Gentle', group: 'Spring' },\n { value: 'bounce', label: 'Bounce', group: 'Spring' },\n { value: 'bounce-in', label: 'Bounce In', group: 'Spring' },\n { value: 'bounce-out', label: 'Bounce Out', group: 'Spring' },\n // Back\n { value: 'back-in', label: 'Back In', group: 'Back' },\n { value: 'back-out', label: 'Back Out', group: 'Back' },\n { value: 'back-in-out', label: 'Back In Out', group: 'Back' },\n // Elastic\n { value: 'elastic', label: 'Elastic', group: 'Elastic' },\n]\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n } as CSSProperties,\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n label: {\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '24px',\n height: '24px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n } as CSSProperties,\n sectionLabel: {\n fontSize: '10px',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n select: {\n width: '100%',\n height: '36px',\n padding: '0 8px',\n fontSize: '14px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n selectSmall: {\n width: '100%',\n height: '32px',\n padding: '0 8px',\n fontSize: '14px',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n controlsPanel: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '12px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '6px',\n } as CSSProperties,\n collapsibleContainer: {\n border: '1px solid var(--theme-elevation-100)',\n borderRadius: '6px',\n overflow: 'hidden',\n } as CSSProperties,\n collapsibleHeader: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n backgroundColor: 'var(--theme-elevation-50)',\n border: 'none',\n cursor: 'pointer',\n } as CSSProperties,\n collapsibleTitle: {\n fontSize: '12px',\n fontWeight: 500,\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n collapsibleContent: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n padding: '12px',\n } as CSSProperties,\n sliderRow: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n } as CSSProperties,\n sliderHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n sliderValue: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n slider: {\n width: '100%',\n height: '6px',\n accentColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n sliderDisabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n } as CSSProperties,\n originGrid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 1fr)',\n gap: '4px',\n width: '96px',\n } as CSSProperties,\n originButton: {\n width: '28px',\n height: '28px',\n padding: 0,\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-elevation-50)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n } as CSSProperties,\n originButtonActive: {\n width: '28px',\n height: '28px',\n padding: 0,\n border: '1px solid var(--theme-elevation-800)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n } as CSSProperties,\n originDot: {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: 'var(--theme-elevation-400)',\n } as CSSProperties,\n originDotActive: {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: 'var(--theme-bg)',\n } as CSSProperties,\n originDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n } as CSSProperties,\n checkboxRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n } as CSSProperties,\n checkbox: {\n width: '16px',\n height: '16px',\n accentColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n checkboxLabel: {\n fontSize: '14px',\n color: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n helpText: {\n fontSize: '10px',\n color: 'var(--theme-elevation-500)',\n marginTop: '-8px',\n } as CSSProperties,\n inputGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n } as CSSProperties,\n}\n\n// =============================================================================\n// Collapsible Section Component\n// =============================================================================\n\ninterface CollapsibleSectionProps {\n title: string\n defaultOpen?: boolean\n children: React.ReactNode\n}\n\nfunction CollapsibleSection({ title, defaultOpen = false, children }: CollapsibleSectionProps) {\n const [isOpen, setIsOpen] = useState(defaultOpen)\n\n return (\n <div style={styles.collapsibleContainer}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={styles.collapsibleHeader}\n >\n <span style={styles.collapsibleTitle}>{title}</span>\n {isOpen ? (\n <ChevronDown style={{ width: '14px', height: '14px', color: 'var(--theme-elevation-500)' }} />\n ) : (\n <ChevronRight style={{ width: '14px', height: '14px', color: 'var(--theme-elevation-500)' }} />\n )}\n </button>\n {isOpen && <div style={styles.collapsibleContent as CSSProperties}>{children}</div>}\n </div>\n )\n}\n\n// =============================================================================\n// Origin Grid Component\n// =============================================================================\n\ninterface OriginGridProps {\n value: AnimationOrigin\n onChange: (value: AnimationOrigin) => void\n disabled?: boolean\n}\n\nfunction OriginGrid({ value, onChange, disabled }: OriginGridProps) {\n const origins: AnimationOrigin[] = [\n 'top-left', 'top', 'top-right',\n 'left', 'center', 'right',\n 'bottom-left', 'bottom', 'bottom-right',\n ]\n\n return (\n <div style={styles.originGrid}>\n {origins.map((origin) => {\n const isActive = value === origin\n return (\n <button\n key={origin}\n type=\"button\"\n onClick={() => onChange(origin)}\n disabled={disabled}\n style={{\n ...(isActive ? styles.originButtonActive : styles.originButton),\n ...(disabled ? styles.originDisabled : {}),\n }}\n title={origin.replace('-', ' ')}\n >\n <span style={isActive ? styles.originDotActive : styles.originDot} />\n </button>\n )\n })}\n </div>\n )\n}\n\n// =============================================================================\n// Slider Component\n// =============================================================================\n\ninterface SliderRowProps {\n label: string\n value: number\n min: number\n max: number\n step?: number\n unit?: string\n onChange: (value: number) => void\n disabled?: boolean\n}\n\nfunction SliderRow({ label, value, min, max, step = 1, unit = '', onChange, disabled }: SliderRowProps) {\n return (\n <div style={styles.sliderRow as CSSProperties}>\n <div style={styles.sliderHeader}>\n <label style={styles.sectionLabel as CSSProperties}>{label}</label>\n <span style={styles.sliderValue}>{value}{unit}</span>\n </div>\n <input\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n disabled={disabled}\n style={{\n ...styles.slider,\n ...(disabled ? styles.sliderDisabled : {}),\n }}\n />\n </div>\n )\n}\n\n// =============================================================================\n// AnimationField Component\n// =============================================================================\n\nfunction AnimationFieldInner({\n value,\n onChange,\n label = 'Animation',\n readOnly,\n showStagger = false,\n}: AnimationFieldProps) {\n const currentValue = value || DEFAULT_ANIMATION\n\n // Get which intensity controls to show based on animation type\n const intensityControls = getRelevantIntensityControls(currentValue.entrance || 'none')\n const hasIntensityControls = Object.values(intensityControls).some(Boolean)\n\n // Helpers to update specific fields\n const updateField = useCallback(\n <K extends keyof AnimationValue>(key: K, val: AnimationValue[K]) => {\n onChange({\n ...currentValue,\n [key]: val,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle entrance animation change - also update default easing\n const handleEntranceChange = useCallback(\n (entrance: EntranceAnimation) => {\n const defaultEasing = getDefaultEasingForAnimation(entrance)\n onChange({\n ...currentValue,\n entrance,\n // Only set default easing if current is 'ease' (not explicitly set)\n easing: currentValue.easing === 'ease' ? defaultEasing : currentValue.easing,\n })\n },\n [currentValue, onChange]\n )\n\n // Handle stagger config updates\n const updateStagger = useCallback(\n (updates: Partial<NonNullable<AnimationValue['stagger']>>) => {\n onChange({\n ...currentValue,\n stagger: {\n enabled: currentValue.stagger?.enabled ?? false,\n delay: currentValue.stagger?.delay ?? 100,\n direction: currentValue.stagger?.direction ?? 'forward',\n ...currentValue.stagger,\n ...updates,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const thresholdPercent = Math.round((currentValue.triggerThreshold ?? 0.1) * 100)\n\n // Format animation label\n const formatAnimationLabel = (anim: EntranceAnimation): string => {\n if (anim === 'none') return 'None'\n return anim\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ')\n }\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header with label and clear */}\n <div style={styles.header}>\n <label style={styles.label}>{label}</label>\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n title=\"Reset to default\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Animation Type Select (grouped by category) */}\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.sectionLabel as CSSProperties}>Animation</label>\n <select\n value={currentValue.entrance || 'none'}\n onChange={(e) => handleEntranceChange(e.target.value as EntranceAnimation)}\n disabled={readOnly}\n style={styles.select}\n >\n {ANIMATION_CATEGORIES.map(({ category, label: catLabel, animations }) => (\n <optgroup key={category} label={catLabel}>\n {animations.map((anim) => (\n <option key={anim} value={anim}>\n {formatAnimationLabel(anim)}\n </option>\n ))}\n </optgroup>\n ))}\n </select>\n </div>\n\n {/* Only show controls if animation is not 'none' */}\n {currentValue.entrance && currentValue.entrance !== 'none' && (\n <>\n {/* Timing Controls */}\n <div style={styles.controlsPanel as CSSProperties}>\n <SliderRow\n label=\"Duration\"\n value={currentValue.entranceDuration ?? 500}\n min={100}\n max={2000}\n step={50}\n unit=\"ms\"\n onChange={(v) => updateField('entranceDuration', v)}\n disabled={readOnly}\n />\n <SliderRow\n label=\"Delay\"\n value={currentValue.entranceDelay ?? 0}\n min={0}\n max={2000}\n step={50}\n unit=\"ms\"\n onChange={(v) => updateField('entranceDelay', v)}\n disabled={readOnly}\n />\n </div>\n\n {/* Intensity Controls (context-aware) */}\n {hasIntensityControls && (\n <CollapsibleSection title=\"Intensity\">\n {intensityControls.showDistance && (\n <SliderRow\n label=\"Distance\"\n value={currentValue.distance ?? 24}\n min={8}\n max={200}\n step={4}\n unit=\"px\"\n onChange={(v) => updateField('distance', v)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showScale && (\n <SliderRow\n label=\"Scale From\"\n value={Math.round((currentValue.scaleFrom ?? 0.9) * 100)}\n min={10}\n max={200}\n step={5}\n unit=\"%\"\n onChange={(v) => updateField('scaleFrom', v / 100)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showRotate && (\n <SliderRow\n label=\"Rotation\"\n value={currentValue.rotateAngle ?? 15}\n min={-180}\n max={180}\n step={5}\n unit=\"deg\"\n onChange={(v) => updateField('rotateAngle', v)}\n disabled={readOnly}\n />\n )}\n {intensityControls.showBlur && (\n <SliderRow\n label=\"Blur\"\n value={currentValue.blurAmount ?? 8}\n min={0}\n max={50}\n step={1}\n unit=\"px\"\n onChange={(v) => updateField('blurAmount', v)}\n disabled={readOnly}\n />\n )}\n </CollapsibleSection>\n )}\n\n {/* Transform Origin */}\n <CollapsibleSection title=\"Transform Origin\">\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <OriginGrid\n value={currentValue.origin ?? 'center'}\n onChange={(v) => updateField('origin', v)}\n disabled={readOnly}\n />\n </div>\n </CollapsibleSection>\n\n {/* Easing */}\n <CollapsibleSection title=\"Easing\">\n <select\n value={currentValue.easing || 'ease'}\n onChange={(e) => updateField('easing', e.target.value as AdvancedEasingFunction)}\n disabled={readOnly}\n style={styles.selectSmall}\n >\n {['Standard', 'Spring', 'Back', 'Elastic'].map((group) => (\n <optgroup key={group} label={group}>\n {EASING_OPTIONS.filter(e => e.group === group).map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </optgroup>\n ))}\n </select>\n <p style={styles.helpText}>\n Spring and bounce easings create overshoot effects\n </p>\n </CollapsibleSection>\n\n {/* Scroll Trigger */}\n <CollapsibleSection title=\"Scroll Trigger\" defaultOpen>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' } as CSSProperties}>\n <div style={styles.checkboxRow}>\n <input\n type=\"checkbox\"\n id=\"trigger-on-scroll\"\n checked={currentValue.triggerOnScroll ?? true}\n onChange={(e) => updateField('triggerOnScroll', e.target.checked)}\n disabled={readOnly}\n style={styles.checkbox}\n />\n <label htmlFor=\"trigger-on-scroll\" style={styles.checkboxLabel}>\n Trigger on scroll\n </label>\n </div>\n\n {currentValue.triggerOnScroll && (\n <>\n <SliderRow\n label=\"Threshold\"\n value={thresholdPercent}\n min={0}\n max={100}\n step={5}\n unit=\"%\"\n onChange={(v) => updateField('triggerThreshold', v / 100)}\n disabled={readOnly}\n />\n <p style={styles.helpText}>\n Element visibility % before animation triggers\n </p>\n\n <div style={styles.checkboxRow}>\n <input\n type=\"checkbox\"\n id=\"animate-once\"\n checked={currentValue.triggerOnce ?? true}\n onChange={(e) => updateField('triggerOnce', e.target.checked)}\n disabled={readOnly}\n style={styles.checkbox}\n />\n <label htmlFor=\"animate-once\" style={styles.checkboxLabel}>\n Animate only once\n </label>\n </div>\n </>\n )}\n </div>\n </CollapsibleSection>\n\n {/* Stagger Controls (only for container components) */}\n {showStagger && (\n <CollapsibleSection title=\"Stagger Children\">\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' } as CSSProperties}>\n <div style={styles.checkboxRow}>\n <input\n type=\"checkbox\"\n id=\"stagger-enabled\"\n checked={currentValue.stagger?.enabled ?? false}\n onChange={(e) => updateStagger({ enabled: e.target.checked })}\n disabled={readOnly}\n style={styles.checkbox}\n />\n <label htmlFor=\"stagger-enabled\" style={styles.checkboxLabel}>\n Enable stagger\n </label>\n </div>\n\n {currentValue.stagger?.enabled && (\n <>\n <SliderRow\n label=\"Delay Between\"\n value={currentValue.stagger?.delay ?? 100}\n min={50}\n max={500}\n step={25}\n unit=\"ms\"\n onChange={(v) => updateStagger({ delay: v })}\n disabled={readOnly}\n />\n\n <SliderRow\n label=\"Max Total Delay\"\n value={currentValue.stagger?.maxDelay ?? 2000}\n min={500}\n max={5000}\n step={100}\n unit=\"ms\"\n onChange={(v) => updateStagger({ maxDelay: v })}\n disabled={readOnly}\n />\n\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.sectionLabel as CSSProperties}>Direction</label>\n <select\n value={currentValue.stagger?.direction ?? 'forward'}\n onChange={(e) => updateStagger({ direction: e.target.value as StaggerDirection })}\n disabled={readOnly}\n style={styles.selectSmall}\n >\n <option value=\"forward\">Forward</option>\n <option value=\"reverse\">Reverse</option>\n <option value=\"center\">From Center</option>\n <option value=\"edges\">From Edges</option>\n </select>\n </div>\n </>\n )}\n </div>\n </CollapsibleSection>\n )}\n </>\n )}\n </div>\n )\n}\n\nexport const AnimationField = memo(AnimationFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateAnimationFieldConfig {\n label?: string\n /** Whether to show stagger controls (for container components like Flex, Grid) */\n showStagger?: boolean\n}\n\n/**\n * Creates a Puck field configuration for animation control\n *\n * @example\n * ```ts\n * fields: {\n * animation: createAnimationField({ label: 'Animation' }),\n * // For containers with child elements:\n * animation: createAnimationField({ label: 'Animation', showStagger: true }),\n * }\n * ```\n */\nexport function createAnimationField(config: CreateAnimationFieldConfig = {}): CustomField<AnimationValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <AnimationField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showStagger={config.showStagger}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","useState","X","ChevronDown","ChevronRight","ANIMATION_CATEGORIES","DEFAULT_ANIMATION","getRelevantIntensityControls","getDefaultEasingForAnimation","EASING_OPTIONS","value","label","group","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","fontSize","fontWeight","color","clearButton","width","height","padding","border","borderRadius","backgroundColor","cursor","sectionLabel","textTransform","letterSpacing","select","selectSmall","controlsPanel","collapsibleContainer","overflow","collapsibleHeader","collapsibleTitle","collapsibleContent","sliderRow","sliderHeader","sliderValue","slider","accentColor","sliderDisabled","opacity","originGrid","gridTemplateColumns","originButton","originButtonActive","originDot","originDotActive","originDisabled","checkboxRow","checkbox","checkboxLabel","helpText","marginTop","inputGroup","CollapsibleSection","title","defaultOpen","children","isOpen","setIsOpen","div","style","button","type","onClick","span","OriginGrid","onChange","disabled","origins","map","origin","isActive","replace","SliderRow","min","max","step","unit","input","e","Number","target","AnimationFieldInner","readOnly","showStagger","currentValue","intensityControls","entrance","hasIntensityControls","Object","values","some","Boolean","updateField","key","val","handleEntranceChange","defaultEasing","easing","updateStagger","updates","stagger","enabled","delay","direction","handleClear","thresholdPercent","Math","round","triggerThreshold","formatAnimationLabel","anim","split","word","charAt","toUpperCase","slice","join","className","category","catLabel","animations","optgroup","option","entranceDuration","v","entranceDelay","showDistance","distance","showScale","scaleFrom","showRotate","rotateAngle","showBlur","blurAmount","filter","opt","p","id","checked","triggerOnScroll","htmlFor","triggerOnce","maxDelay","AnimationField","createAnimationField","config","render"],"mappings":"AAAA;;AAEA;;;;;;;;;;CAUC,GAED,OAAOA,SAASC,WAAW,EAAEC,IAAI,EAAEC,QAAQ,QAA4B,QAAO;AAE9E,SAASC,CAAC,EAAEC,WAAW,EAAEC,YAAY,QAAQ,eAAc;AAQ3D,SACEC,oBAAoB,EACpBC,iBAAiB,EACjBC,4BAA4B,EAC5BC,4BAA4B,QACvB,cAAa;AAepB,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,MAAMC,iBAAyF;IAC7F,WAAW;IACX;QAAEC,OAAO;QAAUC,OAAO;QAAUC,OAAO;IAAW;IACtD;QAAEF,OAAO;QAAQC,OAAO;QAAQC,OAAO;IAAW;IAClD;QAAEF,OAAO;QAAWC,OAAO;QAAWC,OAAO;IAAW;IACxD;QAAEF,OAAO;QAAYC,OAAO;QAAYC,OAAO;IAAW;IAC1D;QAAEF,OAAO;QAAeC,OAAO;QAAeC,OAAO;IAAW;IAChE,gBAAgB;IAChB;QAAEF,OAAO;QAAUC,OAAO;QAAUC,OAAO;IAAS;IACpD;QAAEF,OAAO;QAAiBC,OAAO;QAAiBC,OAAO;IAAS;IAClE;QAAEF,OAAO;QAAUC,OAAO;QAAUC,OAAO;IAAS;IACpD;QAAEF,OAAO;QAAaC,OAAO;QAAaC,OAAO;IAAS;IAC1D;QAAEF,OAAO;QAAcC,OAAO;QAAcC,OAAO;IAAS;IAC5D,OAAO;IACP;QAAEF,OAAO;QAAWC,OAAO;QAAWC,OAAO;IAAO;IACpD;QAAEF,OAAO;QAAYC,OAAO;QAAYC,OAAO;IAAO;IACtD;QAAEF,OAAO;QAAeC,OAAO;QAAeC,OAAO;IAAO;IAC5D,UAAU;IACV;QAAEF,OAAO;QAAWC,OAAO;QAAWC,OAAO;IAAU;CACxD;AAED,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,MAAMC,SAAS;IACbC,WAAW;QACTC,SAAS;QACTC,eAAe;QACfC,KAAK;IACP;IACAC,QAAQ;QACNH,SAAS;QACTI,YAAY;QACZC,gBAAgB;IAClB;IACAT,OAAO;QACLU,UAAU;QACVC,YAAY;QACZC,OAAO;IACT;IACAC,aAAa;QACXT,SAAS;QACTI,YAAY;QACZC,gBAAgB;QAChBK,OAAO;QACPC,QAAQ;QACRC,SAAS;QACTC,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBP,OAAO;QACPQ,QAAQ;IACV;IACAC,cAAc;QACZX,UAAU;QACVY,eAAe;QACfC,eAAe;QACfX,OAAO;IACT;IACAY,QAAQ;QACNV,OAAO;QACPC,QAAQ;QACRC,SAAS;QACTN,UAAU;QACVO,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBP,OAAO;QACPQ,QAAQ;IACV;IACAK,aAAa;QACXX,OAAO;QACPC,QAAQ;QACRC,SAAS;QACTN,UAAU;QACVO,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBP,OAAO;QACPQ,QAAQ;IACV;IACAM,eAAe;QACbtB,SAAS;QACTC,eAAe;QACfC,KAAK;QACLU,SAAS;QACTG,iBAAiB;QACjBD,cAAc;IAChB;IACAS,sBAAsB;QACpBV,QAAQ;QACRC,cAAc;QACdU,UAAU;IACZ;IACAC,mBAAmB;QACjBf,OAAO;QACPV,SAAS;QACTI,YAAY;QACZC,gBAAgB;QAChBO,SAAS;QACTG,iBAAiB;QACjBF,QAAQ;QACRG,QAAQ;IACV;IACAU,kBAAkB;QAChBpB,UAAU;QACVC,YAAY;QACZC,OAAO;IACT;IACAmB,oBAAoB;QAClB3B,SAAS;QACTC,eAAe;QACfC,KAAK;QACLU,SAAS;IACX;IACAgB,WAAW;QACT5B,SAAS;QACTC,eAAe;QACfC,KAAK;IACP;IACA2B,cAAc;QACZ7B,SAAS;QACTI,YAAY;QACZC,gBAAgB;IAClB;IACAyB,aAAa;QACXxB,UAAU;QACVE,OAAO;IACT;IACAuB,QAAQ;QACNrB,OAAO;QACPC,QAAQ;QACRqB,aAAa;QACbhB,QAAQ;IACV;IACAiB,gBAAgB;QACdjB,QAAQ;QACRkB,SAAS;IACX;IACAC,YAAY;QACVnC,SAAS;QACToC,qBAAqB;QACrBlC,KAAK;QACLQ,OAAO;IACT;IACA2B,cAAc;QACZ3B,OAAO;QACPC,QAAQ;QACRC,SAAS;QACTC,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBC,QAAQ;QACRhB,SAAS;QACTI,YAAY;QACZC,gBAAgB;IAClB;IACAiC,oBAAoB;QAClB5B,OAAO;QACPC,QAAQ;QACRC,SAAS;QACTC,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBC,QAAQ;QACRhB,SAAS;QACTI,YAAY;QACZC,gBAAgB;IAClB;IACAkC,WAAW;QACT7B,OAAO;QACPC,QAAQ;QACRG,cAAc;QACdC,iBAAiB;IACnB;IACAyB,iBAAiB;QACf9B,OAAO;QACPC,QAAQ;QACRG,cAAc;QACdC,iBAAiB;IACnB;IACA0B,gBAAgB;QACdP,SAAS;QACTlB,QAAQ;IACV;IACA0B,aAAa;QACX1C,SAAS;QACTI,YAAY;QACZF,KAAK;IACP;IACAyC,UAAU;QACRjC,OAAO;QACPC,QAAQ;QACRqB,aAAa;QACbhB,QAAQ;IACV;IACA4B,eAAe;QACbtC,UAAU;QACVE,OAAO;QACPQ,QAAQ;IACV;IACA6B,UAAU;QACRvC,UAAU;QACVE,OAAO;QACPsC,WAAW;IACb;IACAC,YAAY;QACV/C,SAAS;QACTC,eAAe;QACfC,KAAK;IACP;AACF;AAYA,SAAS8C,mBAAmB,EAAEC,KAAK,EAAEC,cAAc,KAAK,EAAEC,QAAQ,EAA2B;IAC3F,MAAM,CAACC,QAAQC,UAAU,GAAGnE,SAASgE;IAErC,qBACE,MAACI;QAAIC,OAAOzD,OAAOyB,oBAAoB;;0BACrC,MAACiC;gBACCC,MAAK;gBACLC,SAAS,IAAML,UAAU,CAACD;gBAC1BG,OAAOzD,OAAO2B,iBAAiB;;kCAE/B,KAACkC;wBAAKJ,OAAOzD,OAAO4B,gBAAgB;kCAAGuB;;oBACtCG,uBACC,KAAChE;wBAAYmE,OAAO;4BAAE7C,OAAO;4BAAQC,QAAQ;4BAAQH,OAAO;wBAA6B;uCAEzF,KAACnB;wBAAakE,OAAO;4BAAE7C,OAAO;4BAAQC,QAAQ;4BAAQH,OAAO;wBAA6B;;;;YAG7F4C,wBAAU,KAACE;gBAAIC,OAAOzD,OAAO6B,kBAAkB;0BAAoBwB;;;;AAG1E;AAYA,SAASS,WAAW,EAAEjE,KAAK,EAAEkE,QAAQ,EAAEC,QAAQ,EAAmB;IAChE,MAAMC,UAA6B;QACjC;QAAY;QAAO;QACnB;QAAQ;QAAU;QAClB;QAAe;QAAU;KAC1B;IAED,qBACE,KAACT;QAAIC,OAAOzD,OAAOqC,UAAU;kBAC1B4B,QAAQC,GAAG,CAAC,CAACC;YACZ,MAAMC,WAAWvE,UAAUsE;YAC3B,qBACE,KAACT;gBAECC,MAAK;gBACLC,SAAS,IAAMG,SAASI;gBACxBH,UAAUA;gBACVP,OAAO;oBACL,GAAIW,WAAWpE,OAAOwC,kBAAkB,GAAGxC,OAAOuC,YAAY;oBAC9D,GAAIyB,WAAWhE,OAAO2C,cAAc,GAAG,CAAC,CAAC;gBAC3C;gBACAQ,OAAOgB,OAAOE,OAAO,CAAC,KAAK;0BAE3B,cAAA,KAACR;oBAAKJ,OAAOW,WAAWpE,OAAO0C,eAAe,GAAG1C,OAAOyC,SAAS;;eAV5D0B;QAaX;;AAGN;AAiBA,SAASG,UAAU,EAAExE,KAAK,EAAED,KAAK,EAAE0E,GAAG,EAAEC,GAAG,EAAEC,OAAO,CAAC,EAAEC,OAAO,EAAE,EAAEX,QAAQ,EAAEC,QAAQ,EAAkB;IACpG,qBACE,MAACR;QAAIC,OAAOzD,OAAO8B,SAAS;;0BAC1B,MAAC0B;gBAAIC,OAAOzD,OAAO+B,YAAY;;kCAC7B,KAACjC;wBAAM2D,OAAOzD,OAAOmB,YAAY;kCAAoBrB;;kCACrD,MAAC+D;wBAAKJ,OAAOzD,OAAOgC,WAAW;;4BAAGnC;4BAAO6E;;;;;0BAE3C,KAACC;gBACChB,MAAK;gBACLY,KAAKA;gBACLC,KAAKA;gBACLC,MAAMA;gBACN5E,OAAOA;gBACPkE,UAAU,CAACa,IAAMb,SAASc,OAAOD,EAAEE,MAAM,CAACjF,KAAK;gBAC/CmE,UAAUA;gBACVP,OAAO;oBACL,GAAGzD,OAAOiC,MAAM;oBAChB,GAAI+B,WAAWhE,OAAOmC,cAAc,GAAG,CAAC,CAAC;gBAC3C;;;;AAIR;AAEA,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,SAAS4C,oBAAoB,EAC3BlF,KAAK,EACLkE,QAAQ,EACRjE,QAAQ,WAAW,EACnBkF,QAAQ,EACRC,cAAc,KAAK,EACC;IACpB,MAAMC,eAAerF,SAASJ;IAE9B,+DAA+D;IAC/D,MAAM0F,oBAAoBzF,6BAA6BwF,aAAaE,QAAQ,IAAI;IAChF,MAAMC,uBAAuBC,OAAOC,MAAM,CAACJ,mBAAmBK,IAAI,CAACC;IAEnE,oCAAoC;IACpC,MAAMC,cAAcxG,YAClB,CAAiCyG,KAAQC;QACvC7B,SAAS;YACP,GAAGmB,YAAY;YACf,CAACS,IAAI,EAAEC;QACT;IACF,GACA;QAACV;QAAcnB;KAAS;IAG1B,gEAAgE;IAChE,MAAM8B,uBAAuB3G,YAC3B,CAACkG;QACC,MAAMU,gBAAgBnG,6BAA6ByF;QACnDrB,SAAS;YACP,GAAGmB,YAAY;YACfE;YACA,oEAAoE;YACpEW,QAAQb,aAAaa,MAAM,KAAK,SAASD,gBAAgBZ,aAAaa,MAAM;QAC9E;IACF,GACA;QAACb;QAAcnB;KAAS;IAG1B,gCAAgC;IAChC,MAAMiC,gBAAgB9G,YACpB,CAAC+G;QACClC,SAAS;YACP,GAAGmB,YAAY;YACfgB,SAAS;gBACPC,SAASjB,aAAagB,OAAO,EAAEC,WAAW;gBAC1CC,OAAOlB,aAAagB,OAAO,EAAEE,SAAS;gBACtCC,WAAWnB,aAAagB,OAAO,EAAEG,aAAa;gBAC9C,GAAGnB,aAAagB,OAAO;gBACvB,GAAGD,OAAO;YACZ;QACF;IACF,GACA;QAACf;QAAcnB;KAAS;IAG1B,eAAe;IACf,MAAMuC,cAAcpH,YAAY;QAC9B6E,SAAS;IACX,GAAG;QAACA;KAAS;IAEb,MAAMwC,mBAAmBC,KAAKC,KAAK,CAAC,AAACvB,CAAAA,aAAawB,gBAAgB,IAAI,GAAE,IAAK;IAE7E,yBAAyB;IACzB,MAAMC,uBAAuB,CAACC;QAC5B,IAAIA,SAAS,QAAQ,OAAO;QAC5B,OAAOA,KACJC,KAAK,CAAC,KACN3C,GAAG,CAAC4C,CAAAA,OAAQA,KAAKC,MAAM,CAAC,GAAGC,WAAW,KAAKF,KAAKG,KAAK,CAAC,IACtDC,IAAI,CAAC;IACV;IAEA,qBACE,MAAC1D;QAAI2D,WAAU;QAAa1D,OAAOzD,OAAOC,SAAS;;0BAEjD,MAACuD;gBAAIC,OAAOzD,OAAOK,MAAM;;kCACvB,KAACP;wBAAM2D,OAAOzD,OAAOF,KAAK;kCAAGA;;oBAC5BD,SAAS,CAACmF,0BACT,KAACtB;wBACCC,MAAK;wBACLC,SAAS0C;wBACT7C,OAAOzD,OAAOW,WAAW;wBACzBwC,OAAM;kCAEN,cAAA,KAAC9D;4BAAEoE,OAAO;gCAAE7C,OAAO;gCAAQC,QAAQ;4BAAO;;;;;0BAMhD,MAAC2C;gBAAIC,OAAOzD,OAAOiD,UAAU;;kCAC3B,KAACnD;wBAAM2D,OAAOzD,OAAOmB,YAAY;kCAAmB;;kCACpD,KAACG;wBACCzB,OAAOqF,aAAaE,QAAQ,IAAI;wBAChCrB,UAAU,CAACa,IAAMiB,qBAAqBjB,EAAEE,MAAM,CAACjF,KAAK;wBACpDmE,UAAUgB;wBACVvB,OAAOzD,OAAOsB,MAAM;kCAEnB9B,qBAAqB0E,GAAG,CAAC,CAAC,EAAEkD,QAAQ,EAAEtH,OAAOuH,QAAQ,EAAEC,UAAU,EAAE,iBAClE,KAACC;gCAAwBzH,OAAOuH;0CAC7BC,WAAWpD,GAAG,CAAC,CAAC0C,qBACf,KAACY;wCAAkB3H,OAAO+G;kDACvBD,qBAAqBC;uCADXA;+BAFFQ;;;;YAYpBlC,aAAaE,QAAQ,IAAIF,aAAaE,QAAQ,KAAK,wBAClD;;kCAEE,MAAC5B;wBAAIC,OAAOzD,OAAOwB,aAAa;;0CAC9B,KAAC8C;gCACCxE,OAAM;gCACND,OAAOqF,aAAauC,gBAAgB,IAAI;gCACxClD,KAAK;gCACLC,KAAK;gCACLC,MAAM;gCACNC,MAAK;gCACLX,UAAU,CAAC2D,IAAMhC,YAAY,oBAAoBgC;gCACjD1D,UAAUgB;;0CAEZ,KAACV;gCACCxE,OAAM;gCACND,OAAOqF,aAAayC,aAAa,IAAI;gCACrCpD,KAAK;gCACLC,KAAK;gCACLC,MAAM;gCACNC,MAAK;gCACLX,UAAU,CAAC2D,IAAMhC,YAAY,iBAAiBgC;gCAC9C1D,UAAUgB;;;;oBAKbK,sCACC,MAACnC;wBAAmBC,OAAM;;4BACvBgC,kBAAkByC,YAAY,kBAC7B,KAACtD;gCACCxE,OAAM;gCACND,OAAOqF,aAAa2C,QAAQ,IAAI;gCAChCtD,KAAK;gCACLC,KAAK;gCACLC,MAAM;gCACNC,MAAK;gCACLX,UAAU,CAAC2D,IAAMhC,YAAY,YAAYgC;gCACzC1D,UAAUgB;;4BAGbG,kBAAkB2C,SAAS,kBAC1B,KAACxD;gCACCxE,OAAM;gCACND,OAAO2G,KAAKC,KAAK,CAAC,AAACvB,CAAAA,aAAa6C,SAAS,IAAI,GAAE,IAAK;gCACpDxD,KAAK;gCACLC,KAAK;gCACLC,MAAM;gCACNC,MAAK;gCACLX,UAAU,CAAC2D,IAAMhC,YAAY,aAAagC,IAAI;gCAC9C1D,UAAUgB;;4BAGbG,kBAAkB6C,UAAU,kBAC3B,KAAC1D;gCACCxE,OAAM;gCACND,OAAOqF,aAAa+C,WAAW,IAAI;gCACnC1D,KAAK,CAAC;gCACNC,KAAK;gCACLC,MAAM;gCACNC,MAAK;gCACLX,UAAU,CAAC2D,IAAMhC,YAAY,eAAegC;gCAC5C1D,UAAUgB;;4BAGbG,kBAAkB+C,QAAQ,kBACzB,KAAC5D;gCACCxE,OAAM;gCACND,OAAOqF,aAAaiD,UAAU,IAAI;gCAClC5D,KAAK;gCACLC,KAAK;gCACLC,MAAM;gCACNC,MAAK;gCACLX,UAAU,CAAC2D,IAAMhC,YAAY,cAAcgC;gCAC3C1D,UAAUgB;;;;kCAOlB,KAAC9B;wBAAmBC,OAAM;kCACxB,cAAA,KAACK;4BAAIC,OAAO;gCAAEvD,SAAS;gCAAQI,YAAY;gCAAUC,gBAAgB;4BAAS;sCAC5E,cAAA,KAACuD;gCACCjE,OAAOqF,aAAaf,MAAM,IAAI;gCAC9BJ,UAAU,CAAC2D,IAAMhC,YAAY,UAAUgC;gCACvC1D,UAAUgB;;;;kCAMhB,MAAC9B;wBAAmBC,OAAM;;0CACxB,KAAC7B;gCACCzB,OAAOqF,aAAaa,MAAM,IAAI;gCAC9BhC,UAAU,CAACa,IAAMc,YAAY,UAAUd,EAAEE,MAAM,CAACjF,KAAK;gCACrDmE,UAAUgB;gCACVvB,OAAOzD,OAAOuB,WAAW;0CAExB;oCAAC;oCAAY;oCAAU;oCAAQ;iCAAU,CAAC2C,GAAG,CAAC,CAACnE,sBAC9C,KAACwH;wCAAqBzH,OAAOC;kDAC1BH,eAAewI,MAAM,CAACxD,CAAAA,IAAKA,EAAE7E,KAAK,KAAKA,OAAOmE,GAAG,CAAC,CAACmE,oBAClD,KAACb;gDAAuB3H,OAAOwI,IAAIxI,KAAK;0DACrCwI,IAAIvI,KAAK;+CADCuI,IAAIxI,KAAK;uCAFXE;;0CASnB,KAACuI;gCAAE7E,OAAOzD,OAAO+C,QAAQ;0CAAE;;;;kCAM7B,KAACG;wBAAmBC,OAAM;wBAAiBC,WAAW;kCACpD,cAAA,MAACI;4BAAIC,OAAO;gCAAEvD,SAAS;gCAAQC,eAAe;gCAAUC,KAAK;4BAAO;;8CAClE,MAACoD;oCAAIC,OAAOzD,OAAO4C,WAAW;;sDAC5B,KAAC+B;4CACChB,MAAK;4CACL4E,IAAG;4CACHC,SAAStD,aAAauD,eAAe,IAAI;4CACzC1E,UAAU,CAACa,IAAMc,YAAY,mBAAmBd,EAAEE,MAAM,CAAC0D,OAAO;4CAChExE,UAAUgB;4CACVvB,OAAOzD,OAAO6C,QAAQ;;sDAExB,KAAC/C;4CAAM4I,SAAQ;4CAAoBjF,OAAOzD,OAAO8C,aAAa;sDAAE;;;;gCAKjEoC,aAAauD,eAAe,kBAC3B;;sDACE,KAACnE;4CACCxE,OAAM;4CACND,OAAO0G;4CACPhC,KAAK;4CACLC,KAAK;4CACLC,MAAM;4CACNC,MAAK;4CACLX,UAAU,CAAC2D,IAAMhC,YAAY,oBAAoBgC,IAAI;4CACrD1D,UAAUgB;;sDAEZ,KAACsD;4CAAE7E,OAAOzD,OAAO+C,QAAQ;sDAAE;;sDAI3B,MAACS;4CAAIC,OAAOzD,OAAO4C,WAAW;;8DAC5B,KAAC+B;oDACChB,MAAK;oDACL4E,IAAG;oDACHC,SAAStD,aAAayD,WAAW,IAAI;oDACrC5E,UAAU,CAACa,IAAMc,YAAY,eAAed,EAAEE,MAAM,CAAC0D,OAAO;oDAC5DxE,UAAUgB;oDACVvB,OAAOzD,OAAO6C,QAAQ;;8DAExB,KAAC/C;oDAAM4I,SAAQ;oDAAejF,OAAOzD,OAAO8C,aAAa;8DAAE;;;;;;;;;oBAUpEmC,6BACC,KAAC/B;wBAAmBC,OAAM;kCACxB,cAAA,MAACK;4BAAIC,OAAO;gCAAEvD,SAAS;gCAAQC,eAAe;gCAAUC,KAAK;4BAAO;;8CAClE,MAACoD;oCAAIC,OAAOzD,OAAO4C,WAAW;;sDAC5B,KAAC+B;4CACChB,MAAK;4CACL4E,IAAG;4CACHC,SAAStD,aAAagB,OAAO,EAAEC,WAAW;4CAC1CpC,UAAU,CAACa,IAAMoB,cAAc;oDAAEG,SAASvB,EAAEE,MAAM,CAAC0D,OAAO;gDAAC;4CAC3DxE,UAAUgB;4CACVvB,OAAOzD,OAAO6C,QAAQ;;sDAExB,KAAC/C;4CAAM4I,SAAQ;4CAAkBjF,OAAOzD,OAAO8C,aAAa;sDAAE;;;;gCAK/DoC,aAAagB,OAAO,EAAEC,yBACrB;;sDACE,KAAC7B;4CACCxE,OAAM;4CACND,OAAOqF,aAAagB,OAAO,EAAEE,SAAS;4CACtC7B,KAAK;4CACLC,KAAK;4CACLC,MAAM;4CACNC,MAAK;4CACLX,UAAU,CAAC2D,IAAM1B,cAAc;oDAAEI,OAAOsB;gDAAE;4CAC1C1D,UAAUgB;;sDAGZ,KAACV;4CACCxE,OAAM;4CACND,OAAOqF,aAAagB,OAAO,EAAE0C,YAAY;4CACzCrE,KAAK;4CACLC,KAAK;4CACLC,MAAM;4CACNC,MAAK;4CACLX,UAAU,CAAC2D,IAAM1B,cAAc;oDAAE4C,UAAUlB;gDAAE;4CAC7C1D,UAAUgB;;sDAGZ,MAACxB;4CAAIC,OAAOzD,OAAOiD,UAAU;;8DAC3B,KAACnD;oDAAM2D,OAAOzD,OAAOmB,YAAY;8DAAmB;;8DACpD,MAACG;oDACCzB,OAAOqF,aAAagB,OAAO,EAAEG,aAAa;oDAC1CtC,UAAU,CAACa,IAAMoB,cAAc;4DAAEK,WAAWzB,EAAEE,MAAM,CAACjF,KAAK;wDAAqB;oDAC/EmE,UAAUgB;oDACVvB,OAAOzD,OAAOuB,WAAW;;sEAEzB,KAACiG;4DAAO3H,OAAM;sEAAU;;sEACxB,KAAC2H;4DAAO3H,OAAM;sEAAU;;sEACxB,KAAC2H;4DAAO3H,OAAM;sEAAS;;sEACvB,KAAC2H;4DAAO3H,OAAM;sEAAQ;;;;;;;;;;;;;;;AAY9C;AAEA,OAAO,MAAMgJ,+BAAiB1J,KAAK4F,qBAAoB;AAYvD;;;;;;;;;;;CAWC,GACD,OAAO,SAAS+D,qBAAqBC,SAAqC,CAAC,CAAC;IAC1E,OAAO;QACLpF,MAAM;QACN7D,OAAOiJ,OAAOjJ,KAAK;QACnBkJ,QAAQ,CAAC,EAAEnJ,KAAK,EAAEkE,QAAQ,EAAEiB,QAAQ,EAAE,iBACpC,KAAC6D;gBACChJ,OAAOA;gBACPkE,UAAUA;gBACVjE,OAAOiJ,OAAOjJ,KAAK;gBACnBkF,UAAUA;gBACVC,aAAa8D,OAAO9D,WAAW;;IAGrC;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackgroundField.d.ts","sourceRoot":"","sources":["../../src/fields/BackgroundField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EACV,eAAe,EAMhB,MAAM,aAAa,CAAA;AAYpB,UAAU,oBAAoB;IAC5B,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,KAAK,IAAI,CAAA;IACjD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrD;AA8kBD,iBAAS,oBAAoB,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAA0B,EAC1B,WAAkB,EAClB,YAAY,GACb,EAAE,oBAAoB,qBA+PtB;AAED,eAAO,MAAM,eAAe,wDAA6B,CAAA;AAMzD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD,GAAG,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,CAgB3C"}