@delmaredigital/payload-puck 0.6.13 → 0.6.15

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 (698) hide show
  1. package/README.md +15 -3
  2. package/dist/admin/EditWithPuckButton.d.ts +0 -1
  3. package/dist/admin/EditWithPuckButton.js +0 -2
  4. package/dist/admin/EditWithPuckCell.d.ts +0 -1
  5. package/dist/admin/EditWithPuckCell.js +0 -2
  6. package/dist/admin/PuckEditorView.d.ts +0 -1
  7. package/dist/admin/PuckEditorView.js +0 -2
  8. package/dist/admin/client.d.ts +0 -1
  9. package/dist/admin/client.js +0 -2
  10. package/dist/admin/generateAdminComponents.d.ts +0 -1
  11. package/dist/admin/generateAdminComponents.js +0 -2
  12. package/dist/admin/index.d.ts +0 -1
  13. package/dist/admin/index.js +0 -2
  14. package/dist/ai/collections/AiContext.d.ts +0 -1
  15. package/dist/ai/collections/AiContext.js +0 -2
  16. package/dist/ai/collections/AiPrompts.d.ts +0 -1
  17. package/dist/ai/collections/AiPrompts.js +0 -2
  18. package/dist/ai/createAiApiRoutes.d.ts +0 -1
  19. package/dist/ai/createAiApiRoutes.js +5 -4
  20. package/dist/ai/createAiGenerate.d.ts +0 -1
  21. package/dist/ai/createAiGenerate.js +5 -4
  22. package/dist/ai/createAiPlugin.d.ts +0 -1
  23. package/dist/ai/createAiPlugin.js +4 -4
  24. package/dist/ai/hooks/useAiContext.d.ts +0 -1
  25. package/dist/ai/hooks/useAiContext.js +0 -2
  26. package/dist/ai/hooks/useAiPrompts.d.ts +0 -1
  27. package/dist/ai/hooks/useAiPrompts.js +0 -2
  28. package/dist/ai/index.d.ts +0 -1
  29. package/dist/ai/index.js +0 -2
  30. package/dist/ai/plugins/ContextEditorPanel.d.ts +0 -1
  31. package/dist/ai/plugins/ContextEditorPanel.js +0 -2
  32. package/dist/ai/plugins/PromptEditorPanel.d.ts +0 -1
  33. package/dist/ai/plugins/PromptEditorPanel.js +0 -2
  34. package/dist/ai/plugins/contextEditorPlugin.d.ts +0 -1
  35. package/dist/ai/plugins/contextEditorPlugin.js +0 -2
  36. package/dist/ai/plugins/promptApiRoutes.d.ts +0 -1
  37. package/dist/ai/plugins/promptApiRoutes.js +0 -2
  38. package/dist/ai/plugins/promptEditorPlugin.d.ts +0 -1
  39. package/dist/ai/plugins/promptEditorPlugin.js +0 -2
  40. package/dist/ai/presets/componentAiDefaults.d.ts +0 -1
  41. package/dist/ai/presets/componentAiDefaults.js +0 -2
  42. package/dist/ai/presets/index.d.ts +0 -1
  43. package/dist/ai/presets/index.js +0 -2
  44. package/dist/ai/presets/instructions/interactive.d.ts +0 -1
  45. package/dist/ai/presets/instructions/interactive.js +0 -2
  46. package/dist/ai/presets/instructions/layout.d.ts +0 -1
  47. package/dist/ai/presets/instructions/layout.js +0 -2
  48. package/dist/ai/presets/instructions/media.d.ts +0 -1
  49. package/dist/ai/presets/instructions/media.js +0 -2
  50. package/dist/ai/presets/instructions/pagePatterns.d.ts +0 -1
  51. package/dist/ai/presets/instructions/pagePatterns.js +0 -2
  52. package/dist/ai/presets/instructions/schemas.d.ts +0 -1
  53. package/dist/ai/presets/instructions/schemas.js +0 -2
  54. package/dist/ai/presets/instructions/typography.d.ts +0 -1
  55. package/dist/ai/presets/instructions/typography.js +0 -2
  56. package/dist/ai/tools/index.d.ts +0 -1
  57. package/dist/ai/tools/index.js +0 -2
  58. package/dist/ai/types.d.ts +109 -3
  59. package/dist/ai/types.js +0 -2
  60. package/dist/ai/utils/injectAiConfig.d.ts +0 -1
  61. package/dist/ai/utils/injectAiConfig.js +0 -2
  62. package/dist/api/createPuckApiRoutes.d.ts +0 -1
  63. package/dist/api/createPuckApiRoutes.js +0 -2
  64. package/dist/api/createPuckApiRoutesVersions.d.ts +0 -1
  65. package/dist/api/createPuckApiRoutesVersions.js +0 -2
  66. package/dist/api/createPuckApiRoutesWithId.d.ts +0 -1
  67. package/dist/api/createPuckApiRoutesWithId.js +0 -2
  68. package/dist/api/index.d.ts +0 -1
  69. package/dist/api/index.js +0 -2
  70. package/dist/api/payload-config.d.js +1 -2
  71. package/dist/api/types.d.ts +0 -1
  72. package/dist/api/types.js +0 -2
  73. package/dist/api/utils/mapRootProps.d.ts +0 -1
  74. package/dist/api/utils/mapRootProps.js +0 -2
  75. package/dist/collections/Templates.d.ts +0 -1
  76. package/dist/collections/Templates.js +0 -2
  77. package/dist/components/AccordionClient.d.ts +0 -1
  78. package/dist/components/AccordionClient.js +0 -2
  79. package/dist/components/AnimatedWrapper.d.ts +0 -1
  80. package/dist/components/AnimatedWrapper.js +0 -2
  81. package/dist/components/exports.d.ts +0 -1
  82. package/dist/components/exports.js +0 -2
  83. package/dist/components/index.d.ts +0 -1
  84. package/dist/components/index.js +0 -2
  85. package/dist/components/interactive/Accordion.d.ts +0 -1
  86. package/dist/components/interactive/Accordion.js +0 -2
  87. package/dist/components/interactive/Accordion.server.d.ts +0 -1
  88. package/dist/components/interactive/Accordion.server.js +0 -2
  89. package/dist/components/interactive/Button.d.ts +0 -1
  90. package/dist/components/interactive/Button.js +0 -2
  91. package/dist/components/interactive/Button.server.d.ts +0 -1
  92. package/dist/components/interactive/Button.server.js +0 -2
  93. package/dist/components/interactive/Card.d.ts +0 -1
  94. package/dist/components/interactive/Card.js +0 -2
  95. package/dist/components/interactive/Card.server.d.ts +0 -1
  96. package/dist/components/interactive/Card.server.js +0 -2
  97. package/dist/components/interactive/Divider.d.ts +0 -1
  98. package/dist/components/interactive/Divider.js +0 -2
  99. package/dist/components/interactive/Divider.server.d.ts +0 -1
  100. package/dist/components/interactive/Divider.server.js +0 -2
  101. package/dist/components/interactive/index.d.ts +0 -1
  102. package/dist/components/interactive/index.js +0 -2
  103. package/dist/components/layout/Container.d.ts +0 -1
  104. package/dist/components/layout/Container.js +0 -2
  105. package/dist/components/layout/Container.server.d.ts +0 -1
  106. package/dist/components/layout/Container.server.js +0 -2
  107. package/dist/components/layout/Flex.d.ts +0 -1
  108. package/dist/components/layout/Flex.js +0 -2
  109. package/dist/components/layout/Flex.server.d.ts +0 -1
  110. package/dist/components/layout/Flex.server.js +0 -2
  111. package/dist/components/layout/Grid.d.ts +0 -1
  112. package/dist/components/layout/Grid.js +0 -2
  113. package/dist/components/layout/Grid.server.d.ts +0 -1
  114. package/dist/components/layout/Grid.server.js +0 -2
  115. package/dist/components/layout/Section.d.ts +0 -1
  116. package/dist/components/layout/Section.js +0 -2
  117. package/dist/components/layout/Section.server.d.ts +0 -1
  118. package/dist/components/layout/Section.server.js +0 -2
  119. package/dist/components/layout/Spacer.d.ts +0 -1
  120. package/dist/components/layout/Spacer.js +0 -2
  121. package/dist/components/layout/Spacer.server.d.ts +0 -1
  122. package/dist/components/layout/Spacer.server.js +0 -2
  123. package/dist/components/layout/Template.d.ts +0 -1
  124. package/dist/components/layout/Template.js +0 -2
  125. package/dist/components/layout/Template.server.d.ts +0 -1
  126. package/dist/components/layout/Template.server.js +0 -2
  127. package/dist/components/layout/index.d.ts +0 -1
  128. package/dist/components/layout/index.js +0 -2
  129. package/dist/components/media/Image.d.ts +0 -1
  130. package/dist/components/media/Image.js +0 -2
  131. package/dist/components/media/Image.server.d.ts +0 -1
  132. package/dist/components/media/Image.server.js +0 -2
  133. package/dist/components/media/index.d.ts +0 -1
  134. package/dist/components/media/index.js +0 -2
  135. package/dist/components/typography/Heading.d.ts +0 -1
  136. package/dist/components/typography/Heading.js +0 -2
  137. package/dist/components/typography/Heading.server.d.ts +0 -1
  138. package/dist/components/typography/Heading.server.js +0 -2
  139. package/dist/components/typography/RichText.editor.d.ts +0 -1
  140. package/dist/components/typography/RichText.editor.js +0 -2
  141. package/dist/components/typography/RichText.server.d.ts +0 -1
  142. package/dist/components/typography/RichText.server.js +0 -2
  143. package/dist/components/typography/Text.d.ts +0 -1
  144. package/dist/components/typography/Text.js +0 -2
  145. package/dist/components/typography/Text.server.d.ts +0 -1
  146. package/dist/components/typography/Text.server.js +0 -2
  147. package/dist/components/typography/index.d.ts +0 -1
  148. package/dist/components/typography/index.js +0 -2
  149. package/dist/config/config.editor.d.ts +0 -1
  150. package/dist/config/config.editor.js +0 -2
  151. package/dist/config/index.d.ts +0 -1
  152. package/dist/config/index.js +0 -2
  153. package/dist/config/merge.d.ts +0 -1
  154. package/dist/config/merge.js +0 -2
  155. package/dist/config/presets.d.ts +0 -1
  156. package/dist/config/presets.js +0 -2
  157. package/dist/config/types.d.ts +0 -1
  158. package/dist/config/types.js +0 -2
  159. package/dist/editor/PuckEditor.d.ts +18 -1
  160. package/dist/editor/PuckEditor.js +0 -2
  161. package/dist/editor/PuckEditorImpl.client.d.ts +10 -1
  162. package/dist/editor/PuckEditorImpl.client.js +3 -3
  163. package/dist/editor/components/DarkModeStyles.d.ts +0 -1
  164. package/dist/editor/components/DarkModeStyles.js +0 -2
  165. package/dist/editor/components/HeaderActions.d.ts +0 -1
  166. package/dist/editor/components/HeaderActions.js +0 -2
  167. package/dist/editor/components/IframeWrapper.d.ts +0 -1
  168. package/dist/editor/components/IframeWrapper.js +0 -2
  169. package/dist/editor/components/LoadingState.d.ts +0 -1
  170. package/dist/editor/components/LoadingState.js +0 -2
  171. package/dist/editor/components/PreviewModal.d.ts +0 -1
  172. package/dist/editor/components/PreviewModal.js +0 -2
  173. package/dist/editor/components/PreviewModeToggle.d.ts +0 -1
  174. package/dist/editor/components/PreviewModeToggle.js +0 -2
  175. package/dist/editor/components/VersionHistory.d.ts +0 -1
  176. package/dist/editor/components/VersionHistory.js +0 -2
  177. package/dist/editor/hooks/useDarkMode.d.ts +0 -1
  178. package/dist/editor/hooks/useDarkMode.js +0 -2
  179. package/dist/editor/hooks/useUnsavedChanges.d.ts +0 -1
  180. package/dist/editor/hooks/useUnsavedChanges.js +0 -2
  181. package/dist/editor/index.d.ts +0 -1
  182. package/dist/editor/index.js +0 -2
  183. package/dist/editor/plugins/VersionHistoryPanel.d.ts +0 -1
  184. package/dist/editor/plugins/VersionHistoryPanel.js +0 -2
  185. package/dist/editor/plugins/index.d.ts +0 -1
  186. package/dist/editor/plugins/index.js +0 -2
  187. package/dist/editor/plugins/versionHistoryPlugin.d.ts +0 -1
  188. package/dist/editor/plugins/versionHistoryPlugin.js +0 -2
  189. package/dist/editor/utils/detectPageTree.d.ts +0 -1
  190. package/dist/editor/utils/detectPageTree.js +0 -2
  191. package/dist/editor/utils/index.d.ts +0 -1
  192. package/dist/editor/utils/index.js +0 -2
  193. package/dist/editor/utils/injectPageTreeFields.d.ts +0 -1
  194. package/dist/editor/utils/injectPageTreeFields.js +0 -2
  195. package/dist/endpoints/ai.d.ts +13 -1
  196. package/dist/endpoints/ai.js +6 -3
  197. package/dist/endpoints/context.d.ts +0 -1
  198. package/dist/endpoints/context.js +0 -2
  199. package/dist/endpoints/index.d.ts +0 -1
  200. package/dist/endpoints/index.js +0 -2
  201. package/dist/endpoints/postcss.d.js +1 -2
  202. package/dist/endpoints/prompts.d.ts +0 -1
  203. package/dist/endpoints/prompts.js +0 -2
  204. package/dist/endpoints/styles.d.ts +0 -1
  205. package/dist/endpoints/styles.js +0 -2
  206. package/dist/exports/client.d.ts +0 -1
  207. package/dist/exports/client.js +0 -2
  208. package/dist/exports/rsc.d.ts +0 -1
  209. package/dist/exports/rsc.js +0 -2
  210. package/dist/fields/AlignmentField.d.ts +0 -1
  211. package/dist/fields/AlignmentField.js +0 -2
  212. package/dist/fields/AnimationField.d.ts +0 -1
  213. package/dist/fields/AnimationField.js +0 -2
  214. package/dist/fields/BackgroundField.d.ts +0 -1
  215. package/dist/fields/BackgroundField.js +0 -2
  216. package/dist/fields/BorderField.d.ts +0 -1
  217. package/dist/fields/BorderField.js +0 -2
  218. package/dist/fields/ColorPickerField.d.ts +0 -1
  219. package/dist/fields/ColorPickerField.js +0 -2
  220. package/dist/fields/ContentAlignmentField.d.ts +0 -1
  221. package/dist/fields/ContentAlignmentField.js +0 -2
  222. package/dist/fields/DimensionsField.d.ts +0 -1
  223. package/dist/fields/DimensionsField.js +0 -2
  224. package/dist/fields/FlexAlignmentField.d.ts +0 -1
  225. package/dist/fields/FlexAlignmentField.js +0 -2
  226. package/dist/fields/FolderPickerField.d.ts +0 -1
  227. package/dist/fields/FolderPickerField.js +0 -2
  228. package/dist/fields/GradientEditor.d.ts +0 -1
  229. package/dist/fields/GradientEditor.js +0 -2
  230. package/dist/fields/LockedField.d.ts +0 -1
  231. package/dist/fields/LockedField.js +0 -2
  232. package/dist/fields/MarginField.d.ts +0 -1
  233. package/dist/fields/MarginField.js +0 -2
  234. package/dist/fields/MediaField.d.ts +0 -1
  235. package/dist/fields/MediaField.js +0 -2
  236. package/dist/fields/PaddingField.d.ts +0 -1
  237. package/dist/fields/PaddingField.js +0 -2
  238. package/dist/fields/PageSegmentField.d.ts +0 -1
  239. package/dist/fields/PageSegmentField.js +0 -2
  240. package/dist/fields/ResetField.d.ts +0 -1
  241. package/dist/fields/ResetField.js +0 -2
  242. package/dist/fields/ResponsiveField.d.ts +0 -1
  243. package/dist/fields/ResponsiveField.js +0 -2
  244. package/dist/fields/ResponsiveVisibilityField.d.ts +0 -1
  245. package/dist/fields/ResponsiveVisibilityField.js +0 -2
  246. package/dist/fields/SizeField.d.ts +0 -1
  247. package/dist/fields/SizeField.js +0 -2
  248. package/dist/fields/SlugPreviewField.d.ts +0 -1
  249. package/dist/fields/SlugPreviewField.js +0 -2
  250. package/dist/fields/TemplateField.d.ts +0 -1
  251. package/dist/fields/TemplateField.js +0 -2
  252. package/dist/fields/TransformField.d.ts +0 -1
  253. package/dist/fields/TransformField.js +0 -2
  254. package/dist/fields/VerticalAlignmentField.d.ts +0 -1
  255. package/dist/fields/VerticalAlignmentField.js +0 -2
  256. package/dist/fields/WidthField.d.ts +0 -1
  257. package/dist/fields/WidthField.js +0 -2
  258. package/dist/fields/index.d.ts +0 -1
  259. package/dist/fields/index.js +0 -2
  260. package/dist/fields/richtext/controls/ColorPickerControl.d.ts +0 -1
  261. package/dist/fields/richtext/controls/ColorPickerControl.js +0 -2
  262. package/dist/fields/richtext/controls/DropdownPortal.d.ts +0 -1
  263. package/dist/fields/richtext/controls/DropdownPortal.js +0 -2
  264. package/dist/fields/richtext/controls/FontSizeControl.d.ts +0 -1
  265. package/dist/fields/richtext/controls/FontSizeControl.js +0 -2
  266. package/dist/fields/richtext/controls/HighlightControl.d.ts +0 -1
  267. package/dist/fields/richtext/controls/HighlightControl.js +0 -2
  268. package/dist/fields/richtext/controls/index.d.ts +0 -1
  269. package/dist/fields/richtext/controls/index.js +0 -2
  270. package/dist/fields/richtext/controls/shared.d.ts +0 -1
  271. package/dist/fields/richtext/controls/shared.js +0 -2
  272. package/dist/fields/richtext/createRichTextField.d.ts +0 -1
  273. package/dist/fields/richtext/createRichTextField.js +0 -2
  274. package/dist/fields/richtext/extensions/FontSize.d.ts +0 -1
  275. package/dist/fields/richtext/extensions/FontSize.js +0 -2
  276. package/dist/fields/richtext/extensions/index.d.ts +0 -1
  277. package/dist/fields/richtext/extensions/index.js +0 -2
  278. package/dist/fields/richtext/index.d.ts +0 -1
  279. package/dist/fields/richtext/index.js +0 -2
  280. package/dist/fields/shared.d.ts +0 -1
  281. package/dist/fields/shared.js +0 -2
  282. package/dist/hooks/index.d.ts +0 -1
  283. package/dist/hooks/index.js +0 -2
  284. package/dist/hooks/useResponsiveStyles.d.ts +0 -1
  285. package/dist/hooks/useResponsiveStyles.js +0 -2
  286. package/dist/hooks/useScrollAnimation.d.ts +0 -1
  287. package/dist/hooks/useScrollAnimation.js +0 -2
  288. package/dist/index.d.ts +0 -1
  289. package/dist/index.js +0 -2
  290. package/dist/layouts/LayoutWrapper.d.ts +0 -1
  291. package/dist/layouts/LayoutWrapper.js +0 -2
  292. package/dist/layouts/defaults.d.ts +0 -1
  293. package/dist/layouts/defaults.js +0 -2
  294. package/dist/layouts/index.d.ts +0 -1
  295. package/dist/layouts/index.js +0 -2
  296. package/dist/layouts/types.d.ts +0 -1
  297. package/dist/layouts/types.js +0 -2
  298. package/dist/layouts/utils.d.ts +0 -1
  299. package/dist/layouts/utils.js +0 -2
  300. package/dist/next/index.d.ts +0 -1
  301. package/dist/next/index.js +0 -2
  302. package/dist/plugin/collections/Pages.d.ts +0 -1
  303. package/dist/plugin/collections/Pages.js +0 -2
  304. package/dist/plugin/fields/index.d.ts +0 -1
  305. package/dist/plugin/fields/index.js +0 -2
  306. package/dist/plugin/fields/types.d.ts +0 -1
  307. package/dist/plugin/fields/types.js +0 -2
  308. package/dist/plugin/hooks/index.d.ts +0 -1
  309. package/dist/plugin/hooks/index.js +0 -2
  310. package/dist/plugin/hooks/isHomepageUnique.d.ts +0 -1
  311. package/dist/plugin/hooks/isHomepageUnique.js +0 -2
  312. package/dist/plugin/index.d.ts +0 -1
  313. package/dist/plugin/index.js +2 -3
  314. package/dist/render/HybridPageRenderer.d.ts +0 -1
  315. package/dist/render/HybridPageRenderer.js +0 -2
  316. package/dist/render/PageRenderer.d.ts +0 -1
  317. package/dist/render/PageRenderer.js +0 -2
  318. package/dist/render/PuckEditor.client.d.ts +0 -1
  319. package/dist/render/PuckEditor.client.js +0 -2
  320. package/dist/render/index.d.ts +0 -1
  321. package/dist/render/index.js +0 -2
  322. package/dist/theme/context.d.ts +0 -1
  323. package/dist/theme/context.js +0 -2
  324. package/dist/theme/defaults.d.ts +0 -1
  325. package/dist/theme/defaults.js +0 -2
  326. package/dist/theme/example.d.ts +0 -1
  327. package/dist/theme/example.js +0 -2
  328. package/dist/theme/index.d.ts +0 -1
  329. package/dist/theme/index.js +0 -2
  330. package/dist/theme/types.d.ts +0 -1
  331. package/dist/theme/types.js +0 -2
  332. package/dist/theme/utils.d.ts +0 -1
  333. package/dist/theme/utils.js +0 -2
  334. package/dist/types/index.d.ts +0 -1
  335. package/dist/types/index.js +0 -2
  336. package/dist/utils/index.d.ts +0 -1
  337. package/dist/utils/index.js +0 -2
  338. package/dist/utils/migration.d.ts +0 -1
  339. package/dist/utils/migration.js +0 -2
  340. package/dist/utils/validation.d.ts +0 -1
  341. package/dist/utils/validation.js +0 -2
  342. package/dist/version.d.ts +1 -2
  343. package/dist/version.js +1 -3
  344. package/dist/views/PuckConfigContext.d.ts +0 -1
  345. package/dist/views/PuckConfigContext.js +0 -2
  346. package/dist/views/PuckEditorView.d.ts +0 -1
  347. package/dist/views/PuckEditorView.js +0 -2
  348. package/dist/views/index.d.ts +0 -1
  349. package/dist/views/index.js +0 -2
  350. package/package.json +20 -20
  351. package/dist/admin/EditWithPuckButton.d.ts.map +0 -1
  352. package/dist/admin/EditWithPuckButton.js.map +0 -1
  353. package/dist/admin/EditWithPuckCell.d.ts.map +0 -1
  354. package/dist/admin/EditWithPuckCell.js.map +0 -1
  355. package/dist/admin/PuckEditorView.d.ts.map +0 -1
  356. package/dist/admin/PuckEditorView.js.map +0 -1
  357. package/dist/admin/client.d.ts.map +0 -1
  358. package/dist/admin/client.js.map +0 -1
  359. package/dist/admin/generateAdminComponents.d.ts.map +0 -1
  360. package/dist/admin/generateAdminComponents.js.map +0 -1
  361. package/dist/admin/index.d.ts.map +0 -1
  362. package/dist/admin/index.js.map +0 -1
  363. package/dist/ai/collections/AiContext.d.ts.map +0 -1
  364. package/dist/ai/collections/AiContext.js.map +0 -1
  365. package/dist/ai/collections/AiPrompts.d.ts.map +0 -1
  366. package/dist/ai/collections/AiPrompts.js.map +0 -1
  367. package/dist/ai/createAiApiRoutes.d.ts.map +0 -1
  368. package/dist/ai/createAiApiRoutes.js.map +0 -1
  369. package/dist/ai/createAiGenerate.d.ts.map +0 -1
  370. package/dist/ai/createAiGenerate.js.map +0 -1
  371. package/dist/ai/createAiPlugin.d.ts.map +0 -1
  372. package/dist/ai/createAiPlugin.js.map +0 -1
  373. package/dist/ai/hooks/useAiContext.d.ts.map +0 -1
  374. package/dist/ai/hooks/useAiContext.js.map +0 -1
  375. package/dist/ai/hooks/useAiPrompts.d.ts.map +0 -1
  376. package/dist/ai/hooks/useAiPrompts.js.map +0 -1
  377. package/dist/ai/index.d.ts.map +0 -1
  378. package/dist/ai/index.js.map +0 -1
  379. package/dist/ai/plugins/ContextEditorPanel.d.ts.map +0 -1
  380. package/dist/ai/plugins/ContextEditorPanel.js.map +0 -1
  381. package/dist/ai/plugins/PromptEditorPanel.d.ts.map +0 -1
  382. package/dist/ai/plugins/PromptEditorPanel.js.map +0 -1
  383. package/dist/ai/plugins/contextEditorPlugin.d.ts.map +0 -1
  384. package/dist/ai/plugins/contextEditorPlugin.js.map +0 -1
  385. package/dist/ai/plugins/promptApiRoutes.d.ts.map +0 -1
  386. package/dist/ai/plugins/promptApiRoutes.js.map +0 -1
  387. package/dist/ai/plugins/promptEditorPlugin.d.ts.map +0 -1
  388. package/dist/ai/plugins/promptEditorPlugin.js.map +0 -1
  389. package/dist/ai/presets/componentAiDefaults.d.ts.map +0 -1
  390. package/dist/ai/presets/componentAiDefaults.js.map +0 -1
  391. package/dist/ai/presets/index.d.ts.map +0 -1
  392. package/dist/ai/presets/index.js.map +0 -1
  393. package/dist/ai/presets/instructions/interactive.d.ts.map +0 -1
  394. package/dist/ai/presets/instructions/interactive.js.map +0 -1
  395. package/dist/ai/presets/instructions/layout.d.ts.map +0 -1
  396. package/dist/ai/presets/instructions/layout.js.map +0 -1
  397. package/dist/ai/presets/instructions/media.d.ts.map +0 -1
  398. package/dist/ai/presets/instructions/media.js.map +0 -1
  399. package/dist/ai/presets/instructions/pagePatterns.d.ts.map +0 -1
  400. package/dist/ai/presets/instructions/pagePatterns.js.map +0 -1
  401. package/dist/ai/presets/instructions/schemas.d.ts.map +0 -1
  402. package/dist/ai/presets/instructions/schemas.js.map +0 -1
  403. package/dist/ai/presets/instructions/typography.d.ts.map +0 -1
  404. package/dist/ai/presets/instructions/typography.js.map +0 -1
  405. package/dist/ai/tools/index.d.ts.map +0 -1
  406. package/dist/ai/tools/index.js.map +0 -1
  407. package/dist/ai/types.d.ts.map +0 -1
  408. package/dist/ai/types.js.map +0 -1
  409. package/dist/ai/utils/injectAiConfig.d.ts.map +0 -1
  410. package/dist/ai/utils/injectAiConfig.js.map +0 -1
  411. package/dist/api/createPuckApiRoutes.d.ts.map +0 -1
  412. package/dist/api/createPuckApiRoutes.js.map +0 -1
  413. package/dist/api/createPuckApiRoutesVersions.d.ts.map +0 -1
  414. package/dist/api/createPuckApiRoutesVersions.js.map +0 -1
  415. package/dist/api/createPuckApiRoutesWithId.d.ts.map +0 -1
  416. package/dist/api/createPuckApiRoutesWithId.js.map +0 -1
  417. package/dist/api/index.d.ts.map +0 -1
  418. package/dist/api/index.js.map +0 -1
  419. package/dist/api/payload-config.d.js.map +0 -1
  420. package/dist/api/types.d.ts.map +0 -1
  421. package/dist/api/types.js.map +0 -1
  422. package/dist/api/utils/mapRootProps.d.ts.map +0 -1
  423. package/dist/api/utils/mapRootProps.js.map +0 -1
  424. package/dist/collections/Templates.d.ts.map +0 -1
  425. package/dist/collections/Templates.js.map +0 -1
  426. package/dist/components/AccordionClient.d.ts.map +0 -1
  427. package/dist/components/AccordionClient.js.map +0 -1
  428. package/dist/components/AnimatedWrapper.d.ts.map +0 -1
  429. package/dist/components/AnimatedWrapper.js.map +0 -1
  430. package/dist/components/exports.d.ts.map +0 -1
  431. package/dist/components/exports.js.map +0 -1
  432. package/dist/components/index.d.ts.map +0 -1
  433. package/dist/components/index.js.map +0 -1
  434. package/dist/components/interactive/Accordion.d.ts.map +0 -1
  435. package/dist/components/interactive/Accordion.js.map +0 -1
  436. package/dist/components/interactive/Accordion.server.d.ts.map +0 -1
  437. package/dist/components/interactive/Accordion.server.js.map +0 -1
  438. package/dist/components/interactive/Button.d.ts.map +0 -1
  439. package/dist/components/interactive/Button.js.map +0 -1
  440. package/dist/components/interactive/Button.server.d.ts.map +0 -1
  441. package/dist/components/interactive/Button.server.js.map +0 -1
  442. package/dist/components/interactive/Card.d.ts.map +0 -1
  443. package/dist/components/interactive/Card.js.map +0 -1
  444. package/dist/components/interactive/Card.server.d.ts.map +0 -1
  445. package/dist/components/interactive/Card.server.js.map +0 -1
  446. package/dist/components/interactive/Divider.d.ts.map +0 -1
  447. package/dist/components/interactive/Divider.js.map +0 -1
  448. package/dist/components/interactive/Divider.server.d.ts.map +0 -1
  449. package/dist/components/interactive/Divider.server.js.map +0 -1
  450. package/dist/components/interactive/index.d.ts.map +0 -1
  451. package/dist/components/interactive/index.js.map +0 -1
  452. package/dist/components/layout/Container.d.ts.map +0 -1
  453. package/dist/components/layout/Container.js.map +0 -1
  454. package/dist/components/layout/Container.server.d.ts.map +0 -1
  455. package/dist/components/layout/Container.server.js.map +0 -1
  456. package/dist/components/layout/Flex.d.ts.map +0 -1
  457. package/dist/components/layout/Flex.js.map +0 -1
  458. package/dist/components/layout/Flex.server.d.ts.map +0 -1
  459. package/dist/components/layout/Flex.server.js.map +0 -1
  460. package/dist/components/layout/Grid.d.ts.map +0 -1
  461. package/dist/components/layout/Grid.js.map +0 -1
  462. package/dist/components/layout/Grid.server.d.ts.map +0 -1
  463. package/dist/components/layout/Grid.server.js.map +0 -1
  464. package/dist/components/layout/Section.d.ts.map +0 -1
  465. package/dist/components/layout/Section.js.map +0 -1
  466. package/dist/components/layout/Section.server.d.ts.map +0 -1
  467. package/dist/components/layout/Section.server.js.map +0 -1
  468. package/dist/components/layout/Spacer.d.ts.map +0 -1
  469. package/dist/components/layout/Spacer.js.map +0 -1
  470. package/dist/components/layout/Spacer.server.d.ts.map +0 -1
  471. package/dist/components/layout/Spacer.server.js.map +0 -1
  472. package/dist/components/layout/Template.d.ts.map +0 -1
  473. package/dist/components/layout/Template.js.map +0 -1
  474. package/dist/components/layout/Template.server.d.ts.map +0 -1
  475. package/dist/components/layout/Template.server.js.map +0 -1
  476. package/dist/components/layout/index.d.ts.map +0 -1
  477. package/dist/components/layout/index.js.map +0 -1
  478. package/dist/components/media/Image.d.ts.map +0 -1
  479. package/dist/components/media/Image.js.map +0 -1
  480. package/dist/components/media/Image.server.d.ts.map +0 -1
  481. package/dist/components/media/Image.server.js.map +0 -1
  482. package/dist/components/media/index.d.ts.map +0 -1
  483. package/dist/components/media/index.js.map +0 -1
  484. package/dist/components/typography/Heading.d.ts.map +0 -1
  485. package/dist/components/typography/Heading.js.map +0 -1
  486. package/dist/components/typography/Heading.server.d.ts.map +0 -1
  487. package/dist/components/typography/Heading.server.js.map +0 -1
  488. package/dist/components/typography/RichText.editor.d.ts.map +0 -1
  489. package/dist/components/typography/RichText.editor.js.map +0 -1
  490. package/dist/components/typography/RichText.server.d.ts.map +0 -1
  491. package/dist/components/typography/RichText.server.js.map +0 -1
  492. package/dist/components/typography/Text.d.ts.map +0 -1
  493. package/dist/components/typography/Text.js.map +0 -1
  494. package/dist/components/typography/Text.server.d.ts.map +0 -1
  495. package/dist/components/typography/Text.server.js.map +0 -1
  496. package/dist/components/typography/index.d.ts.map +0 -1
  497. package/dist/components/typography/index.js.map +0 -1
  498. package/dist/config/config.editor.d.ts.map +0 -1
  499. package/dist/config/config.editor.js.map +0 -1
  500. package/dist/config/index.d.ts.map +0 -1
  501. package/dist/config/index.js.map +0 -1
  502. package/dist/config/merge.d.ts.map +0 -1
  503. package/dist/config/merge.js.map +0 -1
  504. package/dist/config/presets.d.ts.map +0 -1
  505. package/dist/config/presets.js.map +0 -1
  506. package/dist/config/types.d.ts.map +0 -1
  507. package/dist/config/types.js.map +0 -1
  508. package/dist/editor/PuckEditor.d.ts.map +0 -1
  509. package/dist/editor/PuckEditor.js.map +0 -1
  510. package/dist/editor/PuckEditorImpl.client.d.ts.map +0 -1
  511. package/dist/editor/PuckEditorImpl.client.js.map +0 -1
  512. package/dist/editor/components/DarkModeStyles.d.ts.map +0 -1
  513. package/dist/editor/components/DarkModeStyles.js.map +0 -1
  514. package/dist/editor/components/HeaderActions.d.ts.map +0 -1
  515. package/dist/editor/components/HeaderActions.js.map +0 -1
  516. package/dist/editor/components/IframeWrapper.d.ts.map +0 -1
  517. package/dist/editor/components/IframeWrapper.js.map +0 -1
  518. package/dist/editor/components/LoadingState.d.ts.map +0 -1
  519. package/dist/editor/components/LoadingState.js.map +0 -1
  520. package/dist/editor/components/PreviewModal.d.ts.map +0 -1
  521. package/dist/editor/components/PreviewModal.js.map +0 -1
  522. package/dist/editor/components/PreviewModeToggle.d.ts.map +0 -1
  523. package/dist/editor/components/PreviewModeToggle.js.map +0 -1
  524. package/dist/editor/components/VersionHistory.d.ts.map +0 -1
  525. package/dist/editor/components/VersionHistory.js.map +0 -1
  526. package/dist/editor/hooks/useDarkMode.d.ts.map +0 -1
  527. package/dist/editor/hooks/useDarkMode.js.map +0 -1
  528. package/dist/editor/hooks/useUnsavedChanges.d.ts.map +0 -1
  529. package/dist/editor/hooks/useUnsavedChanges.js.map +0 -1
  530. package/dist/editor/index.d.ts.map +0 -1
  531. package/dist/editor/index.js.map +0 -1
  532. package/dist/editor/plugins/VersionHistoryPanel.d.ts.map +0 -1
  533. package/dist/editor/plugins/VersionHistoryPanel.js.map +0 -1
  534. package/dist/editor/plugins/index.d.ts.map +0 -1
  535. package/dist/editor/plugins/index.js.map +0 -1
  536. package/dist/editor/plugins/versionHistoryPlugin.d.ts.map +0 -1
  537. package/dist/editor/plugins/versionHistoryPlugin.js.map +0 -1
  538. package/dist/editor/utils/detectPageTree.d.ts.map +0 -1
  539. package/dist/editor/utils/detectPageTree.js.map +0 -1
  540. package/dist/editor/utils/index.d.ts.map +0 -1
  541. package/dist/editor/utils/index.js.map +0 -1
  542. package/dist/editor/utils/injectPageTreeFields.d.ts.map +0 -1
  543. package/dist/editor/utils/injectPageTreeFields.js.map +0 -1
  544. package/dist/endpoints/ai.d.ts.map +0 -1
  545. package/dist/endpoints/ai.js.map +0 -1
  546. package/dist/endpoints/context.d.ts.map +0 -1
  547. package/dist/endpoints/context.js.map +0 -1
  548. package/dist/endpoints/index.d.ts.map +0 -1
  549. package/dist/endpoints/index.js.map +0 -1
  550. package/dist/endpoints/postcss.d.js.map +0 -1
  551. package/dist/endpoints/prompts.d.ts.map +0 -1
  552. package/dist/endpoints/prompts.js.map +0 -1
  553. package/dist/endpoints/styles.d.ts.map +0 -1
  554. package/dist/endpoints/styles.js.map +0 -1
  555. package/dist/exports/client.d.ts.map +0 -1
  556. package/dist/exports/client.js.map +0 -1
  557. package/dist/exports/rsc.d.ts.map +0 -1
  558. package/dist/exports/rsc.js.map +0 -1
  559. package/dist/fields/AlignmentField.d.ts.map +0 -1
  560. package/dist/fields/AlignmentField.js.map +0 -1
  561. package/dist/fields/AnimationField.d.ts.map +0 -1
  562. package/dist/fields/AnimationField.js.map +0 -1
  563. package/dist/fields/BackgroundField.d.ts.map +0 -1
  564. package/dist/fields/BackgroundField.js.map +0 -1
  565. package/dist/fields/BorderField.d.ts.map +0 -1
  566. package/dist/fields/BorderField.js.map +0 -1
  567. package/dist/fields/ColorPickerField.d.ts.map +0 -1
  568. package/dist/fields/ColorPickerField.js.map +0 -1
  569. package/dist/fields/ContentAlignmentField.d.ts.map +0 -1
  570. package/dist/fields/ContentAlignmentField.js.map +0 -1
  571. package/dist/fields/DimensionsField.d.ts.map +0 -1
  572. package/dist/fields/DimensionsField.js.map +0 -1
  573. package/dist/fields/FlexAlignmentField.d.ts.map +0 -1
  574. package/dist/fields/FlexAlignmentField.js.map +0 -1
  575. package/dist/fields/FolderPickerField.d.ts.map +0 -1
  576. package/dist/fields/FolderPickerField.js.map +0 -1
  577. package/dist/fields/GradientEditor.d.ts.map +0 -1
  578. package/dist/fields/GradientEditor.js.map +0 -1
  579. package/dist/fields/LockedField.d.ts.map +0 -1
  580. package/dist/fields/LockedField.js.map +0 -1
  581. package/dist/fields/MarginField.d.ts.map +0 -1
  582. package/dist/fields/MarginField.js.map +0 -1
  583. package/dist/fields/MediaField.d.ts.map +0 -1
  584. package/dist/fields/MediaField.js.map +0 -1
  585. package/dist/fields/PaddingField.d.ts.map +0 -1
  586. package/dist/fields/PaddingField.js.map +0 -1
  587. package/dist/fields/PageSegmentField.d.ts.map +0 -1
  588. package/dist/fields/PageSegmentField.js.map +0 -1
  589. package/dist/fields/ResetField.d.ts.map +0 -1
  590. package/dist/fields/ResetField.js.map +0 -1
  591. package/dist/fields/ResponsiveField.d.ts.map +0 -1
  592. package/dist/fields/ResponsiveField.js.map +0 -1
  593. package/dist/fields/ResponsiveVisibilityField.d.ts.map +0 -1
  594. package/dist/fields/ResponsiveVisibilityField.js.map +0 -1
  595. package/dist/fields/SizeField.d.ts.map +0 -1
  596. package/dist/fields/SizeField.js.map +0 -1
  597. package/dist/fields/SlugPreviewField.d.ts.map +0 -1
  598. package/dist/fields/SlugPreviewField.js.map +0 -1
  599. package/dist/fields/TemplateField.d.ts.map +0 -1
  600. package/dist/fields/TemplateField.js.map +0 -1
  601. package/dist/fields/TransformField.d.ts.map +0 -1
  602. package/dist/fields/TransformField.js.map +0 -1
  603. package/dist/fields/VerticalAlignmentField.d.ts.map +0 -1
  604. package/dist/fields/VerticalAlignmentField.js.map +0 -1
  605. package/dist/fields/WidthField.d.ts.map +0 -1
  606. package/dist/fields/WidthField.js.map +0 -1
  607. package/dist/fields/index.d.ts.map +0 -1
  608. package/dist/fields/index.js.map +0 -1
  609. package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +0 -1
  610. package/dist/fields/richtext/controls/ColorPickerControl.js.map +0 -1
  611. package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +0 -1
  612. package/dist/fields/richtext/controls/DropdownPortal.js.map +0 -1
  613. package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +0 -1
  614. package/dist/fields/richtext/controls/FontSizeControl.js.map +0 -1
  615. package/dist/fields/richtext/controls/HighlightControl.d.ts.map +0 -1
  616. package/dist/fields/richtext/controls/HighlightControl.js.map +0 -1
  617. package/dist/fields/richtext/controls/index.d.ts.map +0 -1
  618. package/dist/fields/richtext/controls/index.js.map +0 -1
  619. package/dist/fields/richtext/controls/shared.d.ts.map +0 -1
  620. package/dist/fields/richtext/controls/shared.js.map +0 -1
  621. package/dist/fields/richtext/createRichTextField.d.ts.map +0 -1
  622. package/dist/fields/richtext/createRichTextField.js.map +0 -1
  623. package/dist/fields/richtext/extensions/FontSize.d.ts.map +0 -1
  624. package/dist/fields/richtext/extensions/FontSize.js.map +0 -1
  625. package/dist/fields/richtext/extensions/index.d.ts.map +0 -1
  626. package/dist/fields/richtext/extensions/index.js.map +0 -1
  627. package/dist/fields/richtext/index.d.ts.map +0 -1
  628. package/dist/fields/richtext/index.js.map +0 -1
  629. package/dist/fields/shared.d.ts.map +0 -1
  630. package/dist/fields/shared.js.map +0 -1
  631. package/dist/hooks/index.d.ts.map +0 -1
  632. package/dist/hooks/index.js.map +0 -1
  633. package/dist/hooks/useResponsiveStyles.d.ts.map +0 -1
  634. package/dist/hooks/useResponsiveStyles.js.map +0 -1
  635. package/dist/hooks/useScrollAnimation.d.ts.map +0 -1
  636. package/dist/hooks/useScrollAnimation.js.map +0 -1
  637. package/dist/index.d.ts.map +0 -1
  638. package/dist/index.js.map +0 -1
  639. package/dist/layouts/LayoutWrapper.d.ts.map +0 -1
  640. package/dist/layouts/LayoutWrapper.js.map +0 -1
  641. package/dist/layouts/defaults.d.ts.map +0 -1
  642. package/dist/layouts/defaults.js.map +0 -1
  643. package/dist/layouts/index.d.ts.map +0 -1
  644. package/dist/layouts/index.js.map +0 -1
  645. package/dist/layouts/types.d.ts.map +0 -1
  646. package/dist/layouts/types.js.map +0 -1
  647. package/dist/layouts/utils.d.ts.map +0 -1
  648. package/dist/layouts/utils.js.map +0 -1
  649. package/dist/next/index.d.ts.map +0 -1
  650. package/dist/next/index.js.map +0 -1
  651. package/dist/plugin/collections/Pages.d.ts.map +0 -1
  652. package/dist/plugin/collections/Pages.js.map +0 -1
  653. package/dist/plugin/fields/index.d.ts.map +0 -1
  654. package/dist/plugin/fields/index.js.map +0 -1
  655. package/dist/plugin/fields/types.d.ts.map +0 -1
  656. package/dist/plugin/fields/types.js.map +0 -1
  657. package/dist/plugin/hooks/index.d.ts.map +0 -1
  658. package/dist/plugin/hooks/index.js.map +0 -1
  659. package/dist/plugin/hooks/isHomepageUnique.d.ts.map +0 -1
  660. package/dist/plugin/hooks/isHomepageUnique.js.map +0 -1
  661. package/dist/plugin/index.d.ts.map +0 -1
  662. package/dist/plugin/index.js.map +0 -1
  663. package/dist/render/HybridPageRenderer.d.ts.map +0 -1
  664. package/dist/render/HybridPageRenderer.js.map +0 -1
  665. package/dist/render/PageRenderer.d.ts.map +0 -1
  666. package/dist/render/PageRenderer.js.map +0 -1
  667. package/dist/render/PuckEditor.client.d.ts.map +0 -1
  668. package/dist/render/PuckEditor.client.js.map +0 -1
  669. package/dist/render/index.d.ts.map +0 -1
  670. package/dist/render/index.js.map +0 -1
  671. package/dist/theme/context.d.ts.map +0 -1
  672. package/dist/theme/context.js.map +0 -1
  673. package/dist/theme/defaults.d.ts.map +0 -1
  674. package/dist/theme/defaults.js.map +0 -1
  675. package/dist/theme/example.d.ts.map +0 -1
  676. package/dist/theme/example.js.map +0 -1
  677. package/dist/theme/index.d.ts.map +0 -1
  678. package/dist/theme/index.js.map +0 -1
  679. package/dist/theme/types.d.ts.map +0 -1
  680. package/dist/theme/types.js.map +0 -1
  681. package/dist/theme/utils.d.ts.map +0 -1
  682. package/dist/theme/utils.js.map +0 -1
  683. package/dist/types/index.d.ts.map +0 -1
  684. package/dist/types/index.js.map +0 -1
  685. package/dist/utils/index.d.ts.map +0 -1
  686. package/dist/utils/index.js.map +0 -1
  687. package/dist/utils/migration.d.ts.map +0 -1
  688. package/dist/utils/migration.js.map +0 -1
  689. package/dist/utils/validation.d.ts.map +0 -1
  690. package/dist/utils/validation.js.map +0 -1
  691. package/dist/version.d.ts.map +0 -1
  692. package/dist/version.js.map +0 -1
  693. package/dist/views/PuckConfigContext.d.ts.map +0 -1
  694. package/dist/views/PuckConfigContext.js.map +0 -1
  695. package/dist/views/PuckEditorView.d.ts.map +0 -1
  696. package/dist/views/PuckEditorView.js.map +0 -1
  697. package/dist/views/index.d.ts.map +0 -1
  698. package/dist/views/index.js.map +0 -1
@@ -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":"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"}
@@ -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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/BackgroundField.tsx"],"sourcesContent":["'use client'\n\n/**\n * BackgroundField - Custom Puck field for unified background selection\n *\n * This component provides a tabbed interface for selecting:\n * - None: No background\n * - Solid: Single color with opacity\n * - Gradient: Linear or radial gradients with multiple stops\n * - Image: Background image from media library with sizing options\n */\n\nimport React, { useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { X } from 'lucide-react'\nimport type {\n BackgroundValue,\n BackgroundImageValue,\n ColorValue,\n GradientValue,\n GradientMask,\n BackgroundOverlay,\n} from './shared.js'\nimport { backgroundValueToCSS, getBackgroundImageOpacity } from './shared.js'\nimport { ColorPickerField } from './ColorPickerField.js'\nimport { MediaField, type MediaReference } from './MediaField.js'\nimport { GradientEditor } from './GradientEditor.js'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype BackgroundType = 'none' | 'solid' | 'gradient' | 'image'\n\ninterface BackgroundFieldProps {\n value: BackgroundValue | null\n onChange: (value: BackgroundValue | null) => void\n label?: string\n readOnly?: boolean\n apiEndpoint?: string\n showOpacity?: boolean\n colorPresets?: Array<{ hex: string; label: string }>\n}\n\n// =============================================================================\n// Default Values\n// =============================================================================\n\nconst DEFAULT_VALUE: BackgroundValue = {\n type: 'none',\n solid: null,\n gradient: null,\n image: null,\n}\n\nconst DEFAULT_GRADIENT: GradientValue = {\n type: 'linear',\n angle: 90,\n stops: [\n { color: { hex: '#000000', opacity: 100 }, position: 0 },\n { color: { hex: '#ffffff', opacity: 100 }, position: 100 },\n ],\n radialShape: 'circle',\n radialPosition: 'center',\n}\n\nconst DEFAULT_IMAGE: BackgroundImageValue = {\n media: null,\n size: 'cover',\n position: 'center',\n repeat: 'no-repeat',\n attachment: 'scroll',\n opacity: 100,\n mask: undefined,\n}\n\nconst DEFAULT_MASK: GradientMask = {\n enabled: false,\n direction: 'to-bottom',\n startOpacity: 100,\n endOpacity: 0,\n startPosition: 0,\n endPosition: 100,\n}\n\nconst DEFAULT_OVERLAY: BackgroundOverlay = {\n enabled: false,\n type: 'solid',\n solid: { hex: '#000000', opacity: 50 },\n gradient: null,\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 tabContainer: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '4px',\n padding: '4px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '8px',\n } as CSSProperties,\n tabButton: {\n flex: '1 1 auto',\n minWidth: 0,\n padding: '6px 8px',\n fontSize: '12px',\n fontWeight: 500,\n border: 'none',\n borderRadius: '6px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n } as CSSProperties,\n tabButtonActive: {\n flex: '1 1 auto',\n minWidth: 0,\n padding: '6px 8px',\n fontSize: '12px',\n fontWeight: 500,\n border: 'none',\n borderRadius: '6px',\n backgroundColor: 'var(--theme-elevation-800)',\n color: 'var(--theme-bg)',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n } as CSSProperties,\n tabButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n } as CSSProperties,\n previewContainer: {\n position: 'relative',\n height: '64px',\n borderRadius: '6px',\n border: '1px solid var(--theme-elevation-150)',\n overflow: 'hidden',\n } as CSSProperties,\n previewEmpty: {\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n backgroundColor: 'var(--theme-elevation-50)',\n } as CSSProperties,\n checkerboard: {\n position: 'absolute',\n inset: 0,\n backgroundImage:\n 'linear-gradient(45deg, #e0e0e0 25%, transparent 25%), linear-gradient(-45deg, #e0e0e0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e0e0e0 75%), linear-gradient(-45deg, transparent 75%, #e0e0e0 75%)',\n backgroundSize: '12px 12px',\n backgroundPosition: '0 0, 0 6px, 6px -6px, -6px 0px',\n } as CSSProperties,\n contentContainer: {\n minHeight: '100px',\n } as CSSProperties,\n emptyContent: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: '96px',\n fontSize: '14px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n imageOptionsContainer: {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\n } as CSSProperties,\n optionsSection: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n paddingTop: '8px',\n borderTop: '1px solid var(--theme-elevation-150)',\n } as CSSProperties,\n optionRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n } as CSSProperties,\n optionLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n width: '80px',\n flexShrink: 0,\n } as CSSProperties,\n optionLabelSmall: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n width: '48px',\n flexShrink: 0,\n } as CSSProperties,\n select: {\n flex: 1,\n height: '32px',\n padding: '0 8px',\n fontSize: '12px',\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 flex: 1,\n minWidth: 0,\n height: '28px',\n padding: '0 8px',\n fontSize: '12px',\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 slider: {\n flex: 1,\n minWidth: 0,\n height: '6px',\n accentColor: 'var(--theme-elevation-800)',\n cursor: 'pointer',\n } as CSSProperties,\n sliderValue: {\n fontSize: '12px',\n fontFamily: 'monospace',\n color: 'var(--theme-elevation-500)',\n width: '32px',\n textAlign: 'right',\n flexShrink: 0,\n } as CSSProperties,\n checkboxRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n cursor: 'pointer',\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: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n maskSection: {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n paddingLeft: '24px',\n } as CSSProperties,\n overlaySection: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n paddingTop: '12px',\n } as CSSProperties,\n}\n\n// =============================================================================\n// Tab Button Component\n// =============================================================================\n\ninterface TabButtonProps {\n active: boolean\n onClick: () => void\n disabled?: boolean\n children: React.ReactNode\n}\n\nfunction TabButton({ active, onClick, disabled, children }: TabButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n style={{\n ...(active ? styles.tabButtonActive : styles.tabButton),\n ...(disabled ? styles.tabButtonDisabled : {}),\n }}\n >\n {children}\n </button>\n )\n}\n\n// =============================================================================\n// Background Preview Component\n// =============================================================================\n\ninterface BackgroundPreviewProps {\n value: BackgroundValue\n}\n\nfunction BackgroundPreview({ value }: BackgroundPreviewProps) {\n const style = backgroundValueToCSS(value)\n const imageOpacity = getBackgroundImageOpacity(value)\n const hasBackground = value.type !== 'none' && Object.keys(style).length > 0\n\n return (\n <div style={styles.previewContainer as CSSProperties}>\n {/* Checkerboard background for transparency preview */}\n {hasBackground && <div style={styles.checkerboard as CSSProperties} />}\n\n {/* Background layer */}\n {hasBackground && (\n <div\n style={{\n position: 'absolute',\n inset: 0,\n ...style,\n opacity: imageOpacity !== undefined ? imageOpacity : 1,\n } as CSSProperties}\n />\n )}\n\n {!hasBackground && (\n <div style={styles.previewEmpty}>No background</div>\n )}\n </div>\n )\n}\n\n// =============================================================================\n// Image Options Component\n// =============================================================================\n\ninterface ImageOptionsProps {\n value: BackgroundImageValue\n onChange: (value: BackgroundImageValue) => void\n readOnly?: boolean\n apiEndpoint?: string\n}\n\nfunction ImageOptionsInner({ value, onChange, readOnly, apiEndpoint }: ImageOptionsProps) {\n const handleMediaChange = useCallback(\n (media: MediaReference | null) => {\n onChange({ ...value, media })\n },\n [value, onChange]\n )\n\n const handleSizeChange = useCallback(\n (size: BackgroundImageValue['size']) => {\n onChange({ ...value, size })\n },\n [value, onChange]\n )\n\n const handlePositionChange = useCallback(\n (position: BackgroundImageValue['position']) => {\n onChange({ ...value, position })\n },\n [value, onChange]\n )\n\n const handleRepeatChange = useCallback(\n (repeat: BackgroundImageValue['repeat']) => {\n onChange({ ...value, repeat })\n },\n [value, onChange]\n )\n\n const handleAttachmentChange = useCallback(\n (attachment: BackgroundImageValue['attachment']) => {\n onChange({ ...value, attachment })\n },\n [value, onChange]\n )\n\n const handleOpacityChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const opacity = parseInt(e.target.value, 10)\n onChange({ ...value, opacity })\n },\n [value, onChange]\n )\n\n const handleMaskToggle = useCallback(\n (checked: boolean) => {\n if (checked) {\n onChange({ ...value, mask: { ...DEFAULT_MASK, enabled: true } })\n } else {\n onChange({ ...value, mask: undefined })\n }\n },\n [value, onChange]\n )\n\n const handleMaskDirectionChange = useCallback(\n (direction: GradientMask['direction']) => {\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, direction, enabled: true } })\n },\n [value, onChange]\n )\n\n const handleMaskStartPositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const startPosition = parseInt(e.target.value, 10)\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, startPosition, enabled: true } })\n },\n [value, onChange]\n )\n\n const handleMaskEndPositionChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const endPosition = parseInt(e.target.value, 10)\n const currentMask = value.mask || DEFAULT_MASK\n onChange({ ...value, mask: { ...currentMask, endPosition, enabled: true } })\n },\n [value, onChange]\n )\n\n const opacity = value.opacity ?? 100\n const maskEnabled = value.mask?.enabled ?? false\n\n return (\n <div style={styles.imageOptionsContainer as CSSProperties}>\n {/* Media Picker */}\n <MediaField\n value={value.media}\n onChange={handleMediaChange}\n readOnly={readOnly}\n apiEndpoint={apiEndpoint}\n />\n\n {/* Image Options - only show when image is selected */}\n {value.media && (\n <div style={styles.optionsSection as CSSProperties}>\n {/* Opacity */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabel}>Opacity</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={opacity}\n onChange={handleOpacityChange}\n disabled={readOnly}\n style={styles.slider}\n />\n <span style={styles.sliderValue as CSSProperties}>{opacity}%</span>\n </div>\n\n {/* Size */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabel}>Size</label>\n <select\n value={value.size}\n onChange={(e) => handleSizeChange(e.target.value as BackgroundImageValue['size'])}\n disabled={readOnly}\n style={styles.select}\n >\n <option value=\"cover\">Cover</option>\n <option value=\"contain\">Contain</option>\n <option value=\"auto\">Auto</option>\n </select>\n </div>\n\n {/* Position */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabel}>Position</label>\n <select\n value={value.position}\n onChange={(e) => handlePositionChange(e.target.value as BackgroundImageValue['position'])}\n disabled={readOnly}\n style={styles.select}\n >\n <option value=\"center\">Center</option>\n <option value=\"top\">Top</option>\n <option value=\"bottom\">Bottom</option>\n <option value=\"left\">Left</option>\n <option value=\"right\">Right</option>\n <option value=\"top-left\">Top Left</option>\n <option value=\"top-right\">Top Right</option>\n <option value=\"bottom-left\">Bottom Left</option>\n <option value=\"bottom-right\">Bottom Right</option>\n </select>\n </div>\n\n {/* Repeat */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabel}>Repeat</label>\n <select\n value={value.repeat}\n onChange={(e) => handleRepeatChange(e.target.value as BackgroundImageValue['repeat'])}\n disabled={readOnly}\n style={styles.select}\n >\n <option value=\"no-repeat\">No Repeat</option>\n <option value=\"repeat\">Repeat</option>\n <option value=\"repeat-x\">Repeat X</option>\n <option value=\"repeat-y\">Repeat Y</option>\n </select>\n </div>\n\n {/* Attachment */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabel}>Attachment</label>\n <select\n value={value.attachment}\n onChange={(e) => handleAttachmentChange(e.target.value as BackgroundImageValue['attachment'])}\n disabled={readOnly}\n style={styles.select}\n >\n <option value=\"scroll\">Scroll</option>\n <option value=\"fixed\">Fixed</option>\n </select>\n </div>\n\n {/* Fade to Transparent (Gradient Mask) */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px', paddingTop: '12px' } as CSSProperties}>\n <label style={styles.checkboxRow}>\n <input\n type=\"checkbox\"\n checked={maskEnabled}\n onChange={(e) => handleMaskToggle(e.target.checked)}\n disabled={readOnly}\n style={styles.checkbox}\n />\n <span style={styles.checkboxLabel}>Fade to transparent</span>\n </label>\n\n {maskEnabled && (\n <div style={styles.maskSection as CSSProperties}>\n {/* Direction */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabelSmall}>Dir</label>\n <select\n value={value.mask?.direction || 'to-bottom'}\n onChange={(e) => handleMaskDirectionChange(e.target.value as GradientMask['direction'])}\n disabled={readOnly}\n style={styles.selectSmall}\n >\n <option value=\"to-top\">To Top</option>\n <option value=\"to-bottom\">To Bottom</option>\n <option value=\"to-left\">To Left</option>\n <option value=\"to-right\">To Right</option>\n <option value=\"to-top-left\">To Top Left</option>\n <option value=\"to-top-right\">To Top Right</option>\n <option value=\"to-bottom-left\">To Bottom Left</option>\n <option value=\"to-bottom-right\">To Bottom Right</option>\n <option value=\"from-center\">From Center (Radial)</option>\n </select>\n </div>\n\n {/* Start Position */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabelSmall}>Start</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.mask?.startPosition ?? 0}\n onChange={handleMaskStartPositionChange}\n disabled={readOnly}\n style={styles.slider}\n />\n <span style={styles.sliderValue as CSSProperties}>\n {value.mask?.startPosition ?? 0}%\n </span>\n </div>\n\n {/* End Position */}\n <div style={styles.optionRow}>\n <label style={styles.optionLabelSmall}>End</label>\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.mask?.endPosition ?? 100}\n onChange={handleMaskEndPositionChange}\n disabled={readOnly}\n style={styles.slider}\n />\n <span style={styles.sliderValue as CSSProperties}>\n {value.mask?.endPosition ?? 100}%\n </span>\n </div>\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nconst ImageOptions = memo(ImageOptionsInner)\n\n// =============================================================================\n// BackgroundField Component\n// =============================================================================\n\nfunction BackgroundFieldInner({\n value,\n onChange,\n label,\n readOnly,\n apiEndpoint = '/api/media',\n showOpacity = true,\n colorPresets,\n}: BackgroundFieldProps) {\n const currentValue = value || DEFAULT_VALUE\n const currentType = currentValue.type\n\n // Handle type change\n const handleTypeChange = useCallback(\n (type: BackgroundType) => {\n const newValue: BackgroundValue = {\n ...currentValue,\n type,\n }\n\n // Initialize defaults for the new type if needed\n if (type === 'gradient' && !newValue.gradient) {\n newValue.gradient = DEFAULT_GRADIENT\n }\n if (type === 'image' && !newValue.image) {\n newValue.image = DEFAULT_IMAGE\n }\n\n onChange(newValue)\n },\n [currentValue, onChange]\n )\n\n // Handle solid color change\n const handleSolidChange = useCallback(\n (solid: ColorValue | null) => {\n onChange({ ...currentValue, solid })\n },\n [currentValue, onChange]\n )\n\n // Handle gradient change\n const handleGradientChange = useCallback(\n (gradient: GradientValue) => {\n onChange({ ...currentValue, gradient })\n },\n [currentValue, onChange]\n )\n\n // Handle image change\n const handleImageChange = useCallback(\n (image: BackgroundImageValue) => {\n onChange({ ...currentValue, image })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay toggle\n const handleOverlayToggle = useCallback(\n (checked: boolean) => {\n if (checked) {\n onChange({ ...currentValue, overlay: { ...DEFAULT_OVERLAY, enabled: true } })\n } else {\n onChange({ ...currentValue, overlay: { ...DEFAULT_OVERLAY, enabled: false } })\n }\n },\n [currentValue, onChange]\n )\n\n // Handle overlay type change\n const handleOverlayTypeChange = useCallback(\n (type: 'solid' | 'gradient') => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: {\n ...currentOverlay,\n type,\n enabled: true,\n // Initialize gradient if switching to gradient and not set\n gradient:\n type === 'gradient' && !currentOverlay.gradient ? DEFAULT_GRADIENT : currentOverlay.gradient,\n },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay solid color change\n const handleOverlaySolidChange = useCallback(\n (solid: ColorValue | null) => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: { ...currentOverlay, solid, enabled: true },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle overlay gradient change\n const handleOverlayGradientChange = useCallback(\n (gradient: GradientValue) => {\n const currentOverlay = currentValue.overlay || DEFAULT_OVERLAY\n onChange({\n ...currentValue,\n overlay: { ...currentOverlay, gradient, enabled: true },\n })\n },\n [currentValue, onChange]\n )\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const overlayEnabled = currentValue.overlay?.enabled ?? false\n const overlayType = currentValue.overlay?.type ?? 'solid'\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n {label && <label style={styles.label}>{label}</label>}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n title=\"Clear background\"\n style={styles.clearButton}\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Preview */}\n <BackgroundPreview value={currentValue} />\n\n {/* Type Tabs */}\n <div style={styles.tabContainer}>\n <TabButton\n active={currentType === 'none'}\n onClick={() => handleTypeChange('none')}\n disabled={readOnly}\n >\n None\n </TabButton>\n <TabButton\n active={currentType === 'solid'}\n onClick={() => handleTypeChange('solid')}\n disabled={readOnly}\n >\n Solid\n </TabButton>\n <TabButton\n active={currentType === 'gradient'}\n onClick={() => handleTypeChange('gradient')}\n disabled={readOnly}\n >\n Gradient\n </TabButton>\n <TabButton\n active={currentType === 'image'}\n onClick={() => handleTypeChange('image')}\n disabled={readOnly}\n >\n Image\n </TabButton>\n </div>\n\n {/* Tab Content */}\n <div style={styles.contentContainer}>\n {currentType === 'none' && (\n <div style={styles.emptyContent}>No background selected</div>\n )}\n\n {currentType === 'solid' && (\n <ColorPickerField\n value={currentValue.solid || null}\n onChange={handleSolidChange}\n readOnly={readOnly}\n showOpacity={showOpacity}\n presets={colorPresets}\n />\n )}\n\n {currentType === 'gradient' && (\n <GradientEditor\n value={currentValue.gradient || null}\n onChange={handleGradientChange}\n readOnly={readOnly}\n />\n )}\n\n {currentType === 'image' && (\n <div style={styles.imageOptionsContainer as CSSProperties}>\n <ImageOptions\n value={currentValue.image || DEFAULT_IMAGE}\n onChange={handleImageChange}\n readOnly={readOnly}\n apiEndpoint={apiEndpoint}\n />\n\n {/* Overlay Section - only show when image is selected */}\n {currentValue.image?.media && (\n <div style={styles.overlaySection as CSSProperties}>\n <label style={styles.checkboxRow}>\n <input\n type=\"checkbox\"\n checked={overlayEnabled}\n onChange={(e) => handleOverlayToggle(e.target.checked)}\n disabled={readOnly}\n style={styles.checkbox}\n />\n <span style={styles.checkboxLabel}>Enable overlay</span>\n </label>\n\n {overlayEnabled && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' } as CSSProperties}>\n {/* Overlay Type Toggle */}\n <div style={styles.tabContainer}>\n <TabButton\n active={overlayType === 'solid'}\n onClick={() => handleOverlayTypeChange('solid')}\n disabled={readOnly}\n >\n Solid Color\n </TabButton>\n <TabButton\n active={overlayType === 'gradient'}\n onClick={() => handleOverlayTypeChange('gradient')}\n disabled={readOnly}\n >\n Gradient\n </TabButton>\n </div>\n\n {/* Overlay Editor */}\n {overlayType === 'solid' ? (\n <ColorPickerField\n value={currentValue.overlay?.solid || null}\n onChange={handleOverlaySolidChange}\n readOnly={readOnly}\n showOpacity={true}\n />\n ) : (\n <GradientEditor\n value={currentValue.overlay?.gradient || null}\n onChange={handleOverlayGradientChange}\n readOnly={readOnly}\n />\n )}\n </div>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\nexport const BackgroundField = memo(BackgroundFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for background selection\n */\nexport function createBackgroundField(config: {\n label?: string\n apiEndpoint?: string\n showOpacity?: boolean\n colorPresets?: Array<{ hex: string; label: string }>\n} = {}): CustomField<BackgroundValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <BackgroundField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n apiEndpoint={config.apiEndpoint}\n showOpacity={config.showOpacity}\n colorPresets={config.colorPresets}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","X","backgroundValueToCSS","getBackgroundImageOpacity","ColorPickerField","MediaField","GradientEditor","DEFAULT_VALUE","type","solid","gradient","image","DEFAULT_GRADIENT","angle","stops","color","hex","opacity","position","radialShape","radialPosition","DEFAULT_IMAGE","media","size","repeat","attachment","mask","undefined","DEFAULT_MASK","enabled","direction","startOpacity","endOpacity","startPosition","endPosition","DEFAULT_OVERLAY","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","label","fontSize","fontWeight","clearButton","width","height","padding","border","borderRadius","backgroundColor","cursor","tabContainer","flexWrap","tabButton","flex","minWidth","whiteSpace","tabButtonActive","tabButtonDisabled","previewContainer","overflow","previewEmpty","checkerboard","inset","backgroundImage","backgroundSize","backgroundPosition","contentContainer","minHeight","emptyContent","imageOptionsContainer","optionsSection","paddingTop","borderTop","optionRow","optionLabel","flexShrink","optionLabelSmall","select","selectSmall","slider","accentColor","sliderValue","fontFamily","textAlign","checkboxRow","checkbox","checkboxLabel","maskSection","paddingLeft","overlaySection","TabButton","active","onClick","disabled","children","button","style","BackgroundPreview","value","imageOpacity","hasBackground","Object","keys","length","div","ImageOptionsInner","onChange","readOnly","apiEndpoint","handleMediaChange","handleSizeChange","handlePositionChange","handleRepeatChange","handleAttachmentChange","handleOpacityChange","e","parseInt","target","handleMaskToggle","checked","handleMaskDirectionChange","currentMask","handleMaskStartPositionChange","handleMaskEndPositionChange","maskEnabled","input","min","max","span","option","ImageOptions","BackgroundFieldInner","showOpacity","colorPresets","currentValue","currentType","handleTypeChange","newValue","handleSolidChange","handleGradientChange","handleImageChange","handleOverlayToggle","overlay","handleOverlayTypeChange","currentOverlay","handleOverlaySolidChange","handleOverlayGradientChange","handleClear","overlayEnabled","overlayType","className","title","presets","BackgroundField","createBackgroundField","config","render"],"mappings":"AAAA;;AAEA;;;;;;;;CAQC,GAED,OAAOA,SAASC,WAAW,EAAEC,IAAI,QAA4B,QAAO;AAEpE,SAASC,CAAC,QAAQ,eAAc;AAShC,SAASC,oBAAoB,EAAEC,yBAAyB,QAAQ,cAAa;AAC7E,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,UAAU,QAA6B,kBAAiB;AACjE,SAASC,cAAc,QAAQ,sBAAqB;AAkBpD,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,MAAMC,gBAAiC;IACrCC,MAAM;IACNC,OAAO;IACPC,UAAU;IACVC,OAAO;AACT;AAEA,MAAMC,mBAAkC;IACtCJ,MAAM;IACNK,OAAO;IACPC,OAAO;QACL;YAAEC,OAAO;gBAAEC,KAAK;gBAAWC,SAAS;YAAI;YAAGC,UAAU;QAAE;QACvD;YAAEH,OAAO;gBAAEC,KAAK;gBAAWC,SAAS;YAAI;YAAGC,UAAU;QAAI;KAC1D;IACDC,aAAa;IACbC,gBAAgB;AAClB;AAEA,MAAMC,gBAAsC;IAC1CC,OAAO;IACPC,MAAM;IACNL,UAAU;IACVM,QAAQ;IACRC,YAAY;IACZR,SAAS;IACTS,MAAMC;AACR;AAEA,MAAMC,eAA6B;IACjCC,SAAS;IACTC,WAAW;IACXC,cAAc;IACdC,YAAY;IACZC,eAAe;IACfC,aAAa;AACf;AAEA,MAAMC,kBAAqC;IACzCN,SAAS;IACTrB,MAAM;IACNC,OAAO;QAAEO,KAAK;QAAWC,SAAS;IAAG;IACrCP,UAAU;AACZ;AAEA,gFAAgF;AAChF,SAAS;AACT,gFAAgF;AAEhF,MAAM0B,SAAS;IACbC,WAAW;QACTC,SAAS;QACTC,eAAe;QACfC,KAAK;IACP;IACAC,QAAQ;QACNH,SAAS;QACTI,YAAY;QACZC,gBAAgB;IAClB;IACAC,OAAO;QACLC,UAAU;QACVC,YAAY;QACZ/B,OAAO;IACT;IACAgC,aAAa;QACXT,SAAS;QACTI,YAAY;QACZC,gBAAgB;QAChBK,OAAO;QACPC,QAAQ;QACRC,SAAS;QACTC,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBtC,OAAO;QACPuC,QAAQ;IACV;IACAC,cAAc;QACZjB,SAAS;QACTkB,UAAU;QACVhB,KAAK;QACLU,SAAS;QACTG,iBAAiB;QACjBD,cAAc;IAChB;IACAK,WAAW;QACTC,MAAM;QACNC,UAAU;QACVT,SAAS;QACTL,UAAU;QACVC,YAAY;QACZK,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBtC,OAAO;QACPuC,QAAQ;QACRM,YAAY;IACd;IACAC,iBAAiB;QACfH,MAAM;QACNC,UAAU;QACVT,SAAS;QACTL,UAAU;QACVC,YAAY;QACZK,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBtC,OAAO;QACPuC,QAAQ;QACRM,YAAY;IACd;IACAE,mBAAmB;QACjB7C,SAAS;QACTqC,QAAQ;IACV;IACAS,kBAAkB;QAChB7C,UAAU;QACV+B,QAAQ;QACRG,cAAc;QACdD,QAAQ;QACRa,UAAU;IACZ;IACAC,cAAc;QACZhB,QAAQ;QACRX,SAAS;QACTI,YAAY;QACZC,gBAAgB;QAChBE,UAAU;QACV9B,OAAO;QACPsC,iBAAiB;IACnB;IACAa,cAAc;QACZhD,UAAU;QACViD,OAAO;QACPC,iBACE;QACFC,gBAAgB;QAChBC,oBAAoB;IACtB;IACAC,kBAAkB;QAChBC,WAAW;IACb;IACAC,cAAc;QACZnC,SAAS;QACTI,YAAY;QACZC,gBAAgB;QAChBM,QAAQ;QACRJ,UAAU;QACV9B,OAAO;IACT;IACA2D,uBAAuB;QACrBpC,SAAS;QACTC,eAAe;QACfC,KAAK;IACP;IACAmC,gBAAgB;QACdrC,SAAS;QACTC,eAAe;QACfC,KAAK;QACLoC,YAAY;QACZC,WAAW;IACb;IACAC,WAAW;QACTxC,SAAS;QACTI,YAAY;QACZF,KAAK;IACP;IACAuC,aAAa;QACXlC,UAAU;QACV9B,OAAO;QACPiC,OAAO;QACPgC,YAAY;IACd;IACAC,kBAAkB;QAChBpC,UAAU;QACV9B,OAAO;QACPiC,OAAO;QACPgC,YAAY;IACd;IACAE,QAAQ;QACNxB,MAAM;QACNT,QAAQ;QACRC,SAAS;QACTL,UAAU;QACVM,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBtC,OAAO;QACPuC,QAAQ;IACV;IACA6B,aAAa;QACXzB,MAAM;QACNC,UAAU;QACVV,QAAQ;QACRC,SAAS;QACTL,UAAU;QACVM,QAAQ;QACRC,cAAc;QACdC,iBAAiB;QACjBtC,OAAO;QACPuC,QAAQ;IACV;IACA8B,QAAQ;QACN1B,MAAM;QACNC,UAAU;QACVV,QAAQ;QACRoC,aAAa;QACb/B,QAAQ;IACV;IACAgC,aAAa;QACXzC,UAAU;QACV0C,YAAY;QACZxE,OAAO;QACPiC,OAAO;QACPwC,WAAW;QACXR,YAAY;IACd;IACAS,aAAa;QACXnD,SAAS;QACTI,YAAY;QACZF,KAAK;QACLc,QAAQ;IACV;IACAoC,UAAU;QACR1C,OAAO;QACPC,QAAQ;QACRoC,aAAa;QACb/B,QAAQ;IACV;IACAqC,eAAe;QACb9C,UAAU;QACV9B,OAAO;IACT;IACA6E,aAAa;QACXtD,SAAS;QACTC,eAAe;QACfC,KAAK;QACLqD,aAAa;IACf;IACAC,gBAAgB;QACdxD,SAAS;QACTC,eAAe;QACfC,KAAK;QACLoC,YAAY;IACd;AACF;AAaA,SAASmB,UAAU,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,QAAQ,EAAkB;IACxE,qBACE,KAACC;QACC5F,MAAK;QACLyF,SAASA;QACTC,UAAUA;QACVG,OAAO;YACL,GAAIL,SAAS5D,OAAOyB,eAAe,GAAGzB,OAAOqB,SAAS;YACtD,GAAIyC,WAAW9D,OAAO0B,iBAAiB,GAAG,CAAC,CAAC;QAC9C;kBAECqC;;AAGP;AAUA,SAASG,kBAAkB,EAAEC,KAAK,EAA0B;IAC1D,MAAMF,QAAQnG,qBAAqBqG;IACnC,MAAMC,eAAerG,0BAA0BoG;IAC/C,MAAME,gBAAgBF,MAAM/F,IAAI,KAAK,UAAUkG,OAAOC,IAAI,CAACN,OAAOO,MAAM,GAAG;IAE3E,qBACE,MAACC;QAAIR,OAAOjE,OAAO2B,gBAAgB;;YAEhC0C,+BAAiB,KAACI;gBAAIR,OAAOjE,OAAO8B,YAAY;;YAGhDuC,+BACC,KAACI;gBACCR,OAAO;oBACLnF,UAAU;oBACViD,OAAO;oBACP,GAAGkC,KAAK;oBACRpF,SAASuF,iBAAiB7E,YAAY6E,eAAe;gBACvD;;YAIH,CAACC,+BACA,KAACI;gBAAIR,OAAOjE,OAAO6B,YAAY;0BAAE;;;;AAIzC;AAaA,SAAS6C,kBAAkB,EAAEP,KAAK,EAAEQ,QAAQ,EAAEC,QAAQ,EAAEC,WAAW,EAAqB;IACtF,MAAMC,oBAAoBnH,YACxB,CAACuB;QACCyF,SAAS;YAAE,GAAGR,KAAK;YAAEjF;QAAM;IAC7B,GACA;QAACiF;QAAOQ;KAAS;IAGnB,MAAMI,mBAAmBpH,YACvB,CAACwB;QACCwF,SAAS;YAAE,GAAGR,KAAK;YAAEhF;QAAK;IAC5B,GACA;QAACgF;QAAOQ;KAAS;IAGnB,MAAMK,uBAAuBrH,YAC3B,CAACmB;QACC6F,SAAS;YAAE,GAAGR,KAAK;YAAErF;QAAS;IAChC,GACA;QAACqF;QAAOQ;KAAS;IAGnB,MAAMM,qBAAqBtH,YACzB,CAACyB;QACCuF,SAAS;YAAE,GAAGR,KAAK;YAAE/E;QAAO;IAC9B,GACA;QAAC+E;QAAOQ;KAAS;IAGnB,MAAMO,yBAAyBvH,YAC7B,CAAC0B;QACCsF,SAAS;YAAE,GAAGR,KAAK;YAAE9E;QAAW;IAClC,GACA;QAAC8E;QAAOQ;KAAS;IAGnB,MAAMQ,sBAAsBxH,YAC1B,CAACyH;QACC,MAAMvG,UAAUwG,SAASD,EAAEE,MAAM,CAACnB,KAAK,EAAE;QACzCQ,SAAS;YAAE,GAAGR,KAAK;YAAEtF;QAAQ;IAC/B,GACA;QAACsF;QAAOQ;KAAS;IAGnB,MAAMY,mBAAmB5H,YACvB,CAAC6H;QACC,IAAIA,SAAS;YACXb,SAAS;gBAAE,GAAGR,KAAK;gBAAE7E,MAAM;oBAAE,GAAGE,YAAY;oBAAEC,SAAS;gBAAK;YAAE;QAChE,OAAO;YACLkF,SAAS;gBAAE,GAAGR,KAAK;gBAAE7E,MAAMC;YAAU;QACvC;IACF,GACA;QAAC4E;QAAOQ;KAAS;IAGnB,MAAMc,4BAA4B9H,YAChC,CAAC+B;QACC,MAAMgG,cAAcvB,MAAM7E,IAAI,IAAIE;QAClCmF,SAAS;YAAE,GAAGR,KAAK;YAAE7E,MAAM;gBAAE,GAAGoG,WAAW;gBAAEhG;gBAAWD,SAAS;YAAK;QAAE;IAC1E,GACA;QAAC0E;QAAOQ;KAAS;IAGnB,MAAMgB,gCAAgChI,YACpC,CAACyH;QACC,MAAMvF,gBAAgBwF,SAASD,EAAEE,MAAM,CAACnB,KAAK,EAAE;QAC/C,MAAMuB,cAAcvB,MAAM7E,IAAI,IAAIE;QAClCmF,SAAS;YAAE,GAAGR,KAAK;YAAE7E,MAAM;gBAAE,GAAGoG,WAAW;gBAAE7F;gBAAeJ,SAAS;YAAK;QAAE;IAC9E,GACA;QAAC0E;QAAOQ;KAAS;IAGnB,MAAMiB,8BAA8BjI,YAClC,CAACyH;QACC,MAAMtF,cAAcuF,SAASD,EAAEE,MAAM,CAACnB,KAAK,EAAE;QAC7C,MAAMuB,cAAcvB,MAAM7E,IAAI,IAAIE;QAClCmF,SAAS;YAAE,GAAGR,KAAK;YAAE7E,MAAM;gBAAE,GAAGoG,WAAW;gBAAE5F;gBAAaL,SAAS;YAAK;QAAE;IAC5E,GACA;QAAC0E;QAAOQ;KAAS;IAGnB,MAAM9F,UAAUsF,MAAMtF,OAAO,IAAI;IACjC,MAAMgH,cAAc1B,MAAM7E,IAAI,EAAEG,WAAW;IAE3C,qBACE,MAACgF;QAAIR,OAAOjE,OAAOsC,qBAAqB;;0BAEtC,KAACrE;gBACCkG,OAAOA,MAAMjF,KAAK;gBAClByF,UAAUG;gBACVF,UAAUA;gBACVC,aAAaA;;YAIdV,MAAMjF,KAAK,kBACV,MAACuF;gBAAIR,OAAOjE,OAAOuC,cAAc;;kCAE/B,MAACkC;wBAAIR,OAAOjE,OAAO0C,SAAS;;0CAC1B,KAAClC;gCAAMyD,OAAOjE,OAAO2C,WAAW;0CAAE;;0CAClC,KAACmD;gCACC1H,MAAK;gCACL2H,KAAI;gCACJC,KAAI;gCACJ7B,OAAOtF;gCACP8F,UAAUQ;gCACVrB,UAAUc;gCACVX,OAAOjE,OAAOgD,MAAM;;0CAEtB,MAACiD;gCAAKhC,OAAOjE,OAAOkD,WAAW;;oCAAoBrE;oCAAQ;;;;;kCAI7D,MAAC4F;wBAAIR,OAAOjE,OAAO0C,SAAS;;0CAC1B,KAAClC;gCAAMyD,OAAOjE,OAAO2C,WAAW;0CAAE;;0CAClC,MAACG;gCACCqB,OAAOA,MAAMhF,IAAI;gCACjBwF,UAAU,CAACS,IAAML,iBAAiBK,EAAEE,MAAM,CAACnB,KAAK;gCAChDL,UAAUc;gCACVX,OAAOjE,OAAO8C,MAAM;;kDAEpB,KAACoD;wCAAO/B,OAAM;kDAAQ;;kDACtB,KAAC+B;wCAAO/B,OAAM;kDAAU;;kDACxB,KAAC+B;wCAAO/B,OAAM;kDAAO;;;;;;kCAKzB,MAACM;wBAAIR,OAAOjE,OAAO0C,SAAS;;0CAC1B,KAAClC;gCAAMyD,OAAOjE,OAAO2C,WAAW;0CAAE;;0CAClC,MAACG;gCACCqB,OAAOA,MAAMrF,QAAQ;gCACrB6F,UAAU,CAACS,IAAMJ,qBAAqBI,EAAEE,MAAM,CAACnB,KAAK;gCACpDL,UAAUc;gCACVX,OAAOjE,OAAO8C,MAAM;;kDAEpB,KAACoD;wCAAO/B,OAAM;kDAAS;;kDACvB,KAAC+B;wCAAO/B,OAAM;kDAAM;;kDACpB,KAAC+B;wCAAO/B,OAAM;kDAAS;;kDACvB,KAAC+B;wCAAO/B,OAAM;kDAAO;;kDACrB,KAAC+B;wCAAO/B,OAAM;kDAAQ;;kDACtB,KAAC+B;wCAAO/B,OAAM;kDAAW;;kDACzB,KAAC+B;wCAAO/B,OAAM;kDAAY;;kDAC1B,KAAC+B;wCAAO/B,OAAM;kDAAc;;kDAC5B,KAAC+B;wCAAO/B,OAAM;kDAAe;;;;;;kCAKjC,MAACM;wBAAIR,OAAOjE,OAAO0C,SAAS;;0CAC1B,KAAClC;gCAAMyD,OAAOjE,OAAO2C,WAAW;0CAAE;;0CAClC,MAACG;gCACCqB,OAAOA,MAAM/E,MAAM;gCACnBuF,UAAU,CAACS,IAAMH,mBAAmBG,EAAEE,MAAM,CAACnB,KAAK;gCAClDL,UAAUc;gCACVX,OAAOjE,OAAO8C,MAAM;;kDAEpB,KAACoD;wCAAO/B,OAAM;kDAAY;;kDAC1B,KAAC+B;wCAAO/B,OAAM;kDAAS;;kDACvB,KAAC+B;wCAAO/B,OAAM;kDAAW;;kDACzB,KAAC+B;wCAAO/B,OAAM;kDAAW;;;;;;kCAK7B,MAACM;wBAAIR,OAAOjE,OAAO0C,SAAS;;0CAC1B,KAAClC;gCAAMyD,OAAOjE,OAAO2C,WAAW;0CAAE;;0CAClC,MAACG;gCACCqB,OAAOA,MAAM9E,UAAU;gCACvBsF,UAAU,CAACS,IAAMF,uBAAuBE,EAAEE,MAAM,CAACnB,KAAK;gCACtDL,UAAUc;gCACVX,OAAOjE,OAAO8C,MAAM;;kDAEpB,KAACoD;wCAAO/B,OAAM;kDAAS;;kDACvB,KAAC+B;wCAAO/B,OAAM;kDAAQ;;;;;;kCAK1B,MAACM;wBAAIR,OAAO;4BAAE/D,SAAS;4BAAQC,eAAe;4BAAUC,KAAK;4BAAOoC,YAAY;wBAAO;;0CACrF,MAAChC;gCAAMyD,OAAOjE,OAAOqD,WAAW;;kDAC9B,KAACyC;wCACC1H,MAAK;wCACLoH,SAASK;wCACTlB,UAAU,CAACS,IAAMG,iBAAiBH,EAAEE,MAAM,CAACE,OAAO;wCAClD1B,UAAUc;wCACVX,OAAOjE,OAAOsD,QAAQ;;kDAExB,KAAC2C;wCAAKhC,OAAOjE,OAAOuD,aAAa;kDAAE;;;;4BAGpCsC,6BACC,MAACpB;gCAAIR,OAAOjE,OAAOwD,WAAW;;kDAE5B,MAACiB;wCAAIR,OAAOjE,OAAO0C,SAAS;;0DAC1B,KAAClC;gDAAMyD,OAAOjE,OAAO6C,gBAAgB;0DAAE;;0DACvC,MAACC;gDACCqB,OAAOA,MAAM7E,IAAI,EAAEI,aAAa;gDAChCiF,UAAU,CAACS,IAAMK,0BAA0BL,EAAEE,MAAM,CAACnB,KAAK;gDACzDL,UAAUc;gDACVX,OAAOjE,OAAO+C,WAAW;;kEAEzB,KAACmD;wDAAO/B,OAAM;kEAAS;;kEACvB,KAAC+B;wDAAO/B,OAAM;kEAAY;;kEAC1B,KAAC+B;wDAAO/B,OAAM;kEAAU;;kEACxB,KAAC+B;wDAAO/B,OAAM;kEAAW;;kEACzB,KAAC+B;wDAAO/B,OAAM;kEAAc;;kEAC5B,KAAC+B;wDAAO/B,OAAM;kEAAe;;kEAC7B,KAAC+B;wDAAO/B,OAAM;kEAAiB;;kEAC/B,KAAC+B;wDAAO/B,OAAM;kEAAkB;;kEAChC,KAAC+B;wDAAO/B,OAAM;kEAAc;;;;;;kDAKhC,MAACM;wCAAIR,OAAOjE,OAAO0C,SAAS;;0DAC1B,KAAClC;gDAAMyD,OAAOjE,OAAO6C,gBAAgB;0DAAE;;0DACvC,KAACiD;gDACC1H,MAAK;gDACL2H,KAAI;gDACJC,KAAI;gDACJ7B,OAAOA,MAAM7E,IAAI,EAAEO,iBAAiB;gDACpC8E,UAAUgB;gDACV7B,UAAUc;gDACVX,OAAOjE,OAAOgD,MAAM;;0DAEtB,MAACiD;gDAAKhC,OAAOjE,OAAOkD,WAAW;;oDAC5BiB,MAAM7E,IAAI,EAAEO,iBAAiB;oDAAE;;;;;kDAKpC,MAAC4E;wCAAIR,OAAOjE,OAAO0C,SAAS;;0DAC1B,KAAClC;gDAAMyD,OAAOjE,OAAO6C,gBAAgB;0DAAE;;0DACvC,KAACiD;gDACC1H,MAAK;gDACL2H,KAAI;gDACJC,KAAI;gDACJ7B,OAAOA,MAAM7E,IAAI,EAAEQ,eAAe;gDAClC6E,UAAUiB;gDACV9B,UAAUc;gDACVX,OAAOjE,OAAOgD,MAAM;;0DAEtB,MAACiD;gDAAKhC,OAAOjE,OAAOkD,WAAW;;oDAC5BiB,MAAM7E,IAAI,EAAEQ,eAAe;oDAAI;;;;;;;;;;;;;AAUpD;AAEA,MAAMqG,6BAAevI,KAAK8G;AAE1B,gFAAgF;AAChF,4BAA4B;AAC5B,gFAAgF;AAEhF,SAAS0B,qBAAqB,EAC5BjC,KAAK,EACLQ,QAAQ,EACRnE,KAAK,EACLoE,QAAQ,EACRC,cAAc,YAAY,EAC1BwB,cAAc,IAAI,EAClBC,YAAY,EACS;IACrB,MAAMC,eAAepC,SAAShG;IAC9B,MAAMqI,cAAcD,aAAanI,IAAI;IAErC,qBAAqB;IACrB,MAAMqI,mBAAmB9I,YACvB,CAACS;QACC,MAAMsI,WAA4B;YAChC,GAAGH,YAAY;YACfnI;QACF;QAEA,iDAAiD;QACjD,IAAIA,SAAS,cAAc,CAACsI,SAASpI,QAAQ,EAAE;YAC7CoI,SAASpI,QAAQ,GAAGE;QACtB;QACA,IAAIJ,SAAS,WAAW,CAACsI,SAASnI,KAAK,EAAE;YACvCmI,SAASnI,KAAK,GAAGU;QACnB;QAEA0F,SAAS+B;IACX,GACA;QAACH;QAAc5B;KAAS;IAG1B,4BAA4B;IAC5B,MAAMgC,oBAAoBhJ,YACxB,CAACU;QACCsG,SAAS;YAAE,GAAG4B,YAAY;YAAElI;QAAM;IACpC,GACA;QAACkI;QAAc5B;KAAS;IAG1B,yBAAyB;IACzB,MAAMiC,uBAAuBjJ,YAC3B,CAACW;QACCqG,SAAS;YAAE,GAAG4B,YAAY;YAAEjI;QAAS;IACvC,GACA;QAACiI;QAAc5B;KAAS;IAG1B,sBAAsB;IACtB,MAAMkC,oBAAoBlJ,YACxB,CAACY;QACCoG,SAAS;YAAE,GAAG4B,YAAY;YAAEhI;QAAM;IACpC,GACA;QAACgI;QAAc5B;KAAS;IAG1B,wBAAwB;IACxB,MAAMmC,sBAAsBnJ,YAC1B,CAAC6H;QACC,IAAIA,SAAS;YACXb,SAAS;gBAAE,GAAG4B,YAAY;gBAAEQ,SAAS;oBAAE,GAAGhH,eAAe;oBAAEN,SAAS;gBAAK;YAAE;QAC7E,OAAO;YACLkF,SAAS;gBAAE,GAAG4B,YAAY;gBAAEQ,SAAS;oBAAE,GAAGhH,eAAe;oBAAEN,SAAS;gBAAM;YAAE;QAC9E;IACF,GACA;QAAC8G;QAAc5B;KAAS;IAG1B,6BAA6B;IAC7B,MAAMqC,0BAA0BrJ,YAC9B,CAACS;QACC,MAAM6I,iBAAiBV,aAAaQ,OAAO,IAAIhH;QAC/C4E,SAAS;YACP,GAAG4B,YAAY;YACfQ,SAAS;gBACP,GAAGE,cAAc;gBACjB7I;gBACAqB,SAAS;gBACT,2DAA2D;gBAC3DnB,UACEF,SAAS,cAAc,CAAC6I,eAAe3I,QAAQ,GAAGE,mBAAmByI,eAAe3I,QAAQ;YAChG;QACF;IACF,GACA;QAACiI;QAAc5B;KAAS;IAG1B,oCAAoC;IACpC,MAAMuC,2BAA2BvJ,YAC/B,CAACU;QACC,MAAM4I,iBAAiBV,aAAaQ,OAAO,IAAIhH;QAC/C4E,SAAS;YACP,GAAG4B,YAAY;YACfQ,SAAS;gBAAE,GAAGE,cAAc;gBAAE5I;gBAAOoB,SAAS;YAAK;QACrD;IACF,GACA;QAAC8G;QAAc5B;KAAS;IAG1B,iCAAiC;IACjC,MAAMwC,8BAA8BxJ,YAClC,CAACW;QACC,MAAM2I,iBAAiBV,aAAaQ,OAAO,IAAIhH;QAC/C4E,SAAS;YACP,GAAG4B,YAAY;YACfQ,SAAS;gBAAE,GAAGE,cAAc;gBAAE3I;gBAAUmB,SAAS;YAAK;QACxD;IACF,GACA;QAAC8G;QAAc5B;KAAS;IAG1B,eAAe;IACf,MAAMyC,cAAczJ,YAAY;QAC9BgH,SAAS;IACX,GAAG;QAACA;KAAS;IAEb,MAAM0C,iBAAiBd,aAAaQ,OAAO,EAAEtH,WAAW;IACxD,MAAM6H,cAAcf,aAAaQ,OAAO,EAAE3I,QAAQ;IAElD,qBACE,MAACqG;QAAI8C,WAAU;QAAatD,OAAOjE,OAAOC,SAAS;;0BAEjD,MAACwE;gBAAIR,OAAOjE,OAAOK,MAAM;;oBACtBG,uBAAS,KAACA;wBAAMyD,OAAOjE,OAAOQ,KAAK;kCAAGA;;oBACtC2D,SAAS,CAACS,0BACT,KAACZ;wBACC5F,MAAK;wBACLyF,SAASuD;wBACTI,OAAM;wBACNvD,OAAOjE,OAAOW,WAAW;kCAEzB,cAAA,KAAC9C;4BAAEoG,OAAO;gCAAErD,OAAO;gCAAQC,QAAQ;4BAAO;;;;;0BAMhD,KAACqD;gBAAkBC,OAAOoC;;0BAG1B,MAAC9B;gBAAIR,OAAOjE,OAAOmB,YAAY;;kCAC7B,KAACwC;wBACCC,QAAQ4C,gBAAgB;wBACxB3C,SAAS,IAAM4C,iBAAiB;wBAChC3C,UAAUc;kCACX;;kCAGD,KAACjB;wBACCC,QAAQ4C,gBAAgB;wBACxB3C,SAAS,IAAM4C,iBAAiB;wBAChC3C,UAAUc;kCACX;;kCAGD,KAACjB;wBACCC,QAAQ4C,gBAAgB;wBACxB3C,SAAS,IAAM4C,iBAAiB;wBAChC3C,UAAUc;kCACX;;kCAGD,KAACjB;wBACCC,QAAQ4C,gBAAgB;wBACxB3C,SAAS,IAAM4C,iBAAiB;wBAChC3C,UAAUc;kCACX;;;;0BAMH,MAACH;gBAAIR,OAAOjE,OAAOmC,gBAAgB;;oBAChCqE,gBAAgB,wBACf,KAAC/B;wBAAIR,OAAOjE,OAAOqC,YAAY;kCAAE;;oBAGlCmE,gBAAgB,yBACf,KAACxI;wBACCmG,OAAOoC,aAAalI,KAAK,IAAI;wBAC7BsG,UAAUgC;wBACV/B,UAAUA;wBACVyB,aAAaA;wBACboB,SAASnB;;oBAIZE,gBAAgB,4BACf,KAACtI;wBACCiG,OAAOoC,aAAajI,QAAQ,IAAI;wBAChCqG,UAAUiC;wBACVhC,UAAUA;;oBAIb4B,gBAAgB,yBACf,MAAC/B;wBAAIR,OAAOjE,OAAOsC,qBAAqB;;0CACtC,KAAC6D;gCACChC,OAAOoC,aAAahI,KAAK,IAAIU;gCAC7B0F,UAAUkC;gCACVjC,UAAUA;gCACVC,aAAaA;;4BAId0B,aAAahI,KAAK,EAAEW,uBACnB,MAACuF;gCAAIR,OAAOjE,OAAO0D,cAAc;;kDAC/B,MAAClD;wCAAMyD,OAAOjE,OAAOqD,WAAW;;0DAC9B,KAACyC;gDACC1H,MAAK;gDACLoH,SAAS6B;gDACT1C,UAAU,CAACS,IAAM0B,oBAAoB1B,EAAEE,MAAM,CAACE,OAAO;gDACrD1B,UAAUc;gDACVX,OAAOjE,OAAOsD,QAAQ;;0DAExB,KAAC2C;gDAAKhC,OAAOjE,OAAOuD,aAAa;0DAAE;;;;oCAGpC8D,gCACC,MAAC5C;wCAAIR,OAAO;4CAAE/D,SAAS;4CAAQC,eAAe;4CAAUC,KAAK;wCAAO;;0DAElE,MAACqE;gDAAIR,OAAOjE,OAAOmB,YAAY;;kEAC7B,KAACwC;wDACCC,QAAQ0D,gBAAgB;wDACxBzD,SAAS,IAAMmD,wBAAwB;wDACvClD,UAAUc;kEACX;;kEAGD,KAACjB;wDACCC,QAAQ0D,gBAAgB;wDACxBzD,SAAS,IAAMmD,wBAAwB;wDACvClD,UAAUc;kEACX;;;;4CAMF0C,gBAAgB,wBACf,KAACtJ;gDACCmG,OAAOoC,aAAaQ,OAAO,EAAE1I,SAAS;gDACtCsG,UAAUuC;gDACVtC,UAAUA;gDACVyB,aAAa;+DAGf,KAACnI;gDACCiG,OAAOoC,aAAaQ,OAAO,EAAEzI,YAAY;gDACzCqG,UAAUwC;gDACVvC,UAAUA;;;;;;;;;;;;AAYlC;AAEA,OAAO,MAAM8C,gCAAkB9J,KAAKwI,sBAAqB;AAEzD,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAEhF;;CAEC,GACD,OAAO,SAASuB,sBAAsBC,SAKlC,CAAC,CAAC;IACJ,OAAO;QACLxJ,MAAM;QACNoC,OAAOoH,OAAOpH,KAAK;QACnBqH,QAAQ,CAAC,EAAE1D,KAAK,EAAEQ,QAAQ,EAAEC,QAAQ,EAAE,iBACpC,KAAC8C;gBACCvD,OAAOA;gBACPQ,UAAUA;gBACVnE,OAAOoH,OAAOpH,KAAK;gBACnBoE,UAAUA;gBACVC,aAAa+C,OAAO/C,WAAW;gBAC/BwB,aAAauB,OAAOvB,WAAW;gBAC/BC,cAAcsB,OAAOtB,YAAY;;IAGvC;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BorderField.d.ts","sourceRoot":"","sources":["../../src/fields/BorderField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AASnD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAA;AAQ1D,UAAU,gBAAgB;IACxB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAA;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAkKD,iBAAS,gBAAgB,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,gBAAgB,qBAqMlB;AAED,eAAO,MAAM,WAAW,oDAAyB,CAAA;AAMjD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,CAalC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/BorderField.tsx"],"sourcesContent":["'use client'\n\n/**\n * BorderField - Custom Puck field for border styling\n *\n * This component provides:\n * - Border width input (px)\n * - Border color picker (reuses ColorPickerField)\n * - Border radius input\n * - Border style selector (solid, dashed, dotted, none)\n * - Per-side toggles (top, right, bottom, left)\n */\n\nimport React, { useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport {\n X,\n ArrowUp,\n ArrowRight,\n ArrowDown,\n ArrowLeft,\n} from 'lucide-react'\nimport { ColorPickerField } from './ColorPickerField.js'\nimport type { BorderValue, ColorValue } from './shared.js'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype BorderStyle = 'none' | 'solid' | 'dashed' | 'dotted'\n\ninterface BorderFieldProps {\n value: BorderValue | null\n onChange: (value: BorderValue | null) => void\n label?: string\n readOnly?: boolean\n}\n\n// =============================================================================\n// Default Value\n// =============================================================================\n\nconst DEFAULT_VALUE: BorderValue = {\n width: 1,\n color: { hex: '#e5e7eb', opacity: 100 }, // gray-200\n radius: 0,\n style: 'solid',\n sides: {\n top: true,\n right: true,\n bottom: true,\n left: true,\n },\n}\n\n// =============================================================================\n// Border Style Options\n// =============================================================================\n\nconst BORDER_STYLES: Array<{ value: BorderStyle; label: string }> = [\n { value: 'solid', label: 'Solid' },\n { value: 'dashed', label: 'Dashed' },\n { value: 'dotted', label: 'Dotted' },\n { value: 'none', label: 'None' },\n]\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '16px',\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 preview: {\n height: '64px',\n backgroundColor: 'var(--theme-elevation-50)',\n borderRadius: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n } as CSSProperties,\n previewText: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n grid: {\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: '12px',\n } as CSSProperties,\n inputGroup: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n } as CSSProperties,\n inputLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n input: {\n height: '32px',\n padding: '0 8px',\n fontSize: '14px',\n fontFamily: 'monospace',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n select: {\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 sidesSection: {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n } as CSSProperties,\n sidesLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n sidesButtons: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n gap: '8px',\n } as CSSProperties,\n sideButton: {\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 sideButtonActive: {\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 sidesInfo: {\n fontSize: '10px',\n color: 'var(--theme-elevation-500)',\n textAlign: 'center',\n } as CSSProperties,\n}\n\n// =============================================================================\n// BorderField Component\n// =============================================================================\n\nfunction BorderFieldInner({\n value,\n onChange,\n label,\n readOnly,\n}: BorderFieldProps) {\n // Use default if no value\n const currentValue = value || DEFAULT_VALUE\n\n // Handle width change\n const handleWidthChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newWidth = parseInt(e.target.value, 10) || 0\n onChange({\n ...currentValue,\n width: Math.max(0, newWidth),\n })\n }, [currentValue, onChange])\n\n // Handle color change\n const handleColorChange = useCallback((newColor: ColorValue | null) => {\n onChange({\n ...currentValue,\n color: newColor || { hex: '#000000', opacity: 100 },\n })\n }, [currentValue, onChange])\n\n // Handle radius change\n const handleRadiusChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newRadius = parseInt(e.target.value, 10) || 0\n onChange({\n ...currentValue,\n radius: Math.max(0, newRadius),\n })\n }, [currentValue, onChange])\n\n // Handle style change\n const handleStyleChange = useCallback((e: React.ChangeEvent<HTMLSelectElement>) => {\n onChange({\n ...currentValue,\n style: e.target.value as BorderStyle,\n })\n }, [currentValue, onChange])\n\n // Handle side toggle\n const handleSideToggle = useCallback((side: 'top' | 'right' | 'bottom' | 'left') => {\n onChange({\n ...currentValue,\n sides: {\n ...currentValue.sides,\n [side]: !currentValue.sides[side],\n },\n })\n }, [currentValue, onChange])\n\n // Handle clear\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n // Check if all sides are enabled\n const allSidesEnabled = currentValue.sides.top &&\n currentValue.sides.right &&\n currentValue.sides.bottom &&\n currentValue.sides.left\n\n const sideConfig = [\n { side: 'top' as const, icon: ArrowUp, title: 'Top border' },\n { side: 'right' as const, icon: ArrowRight, title: 'Right border' },\n { side: 'bottom' as const, icon: ArrowDown, title: 'Bottom border' },\n { side: 'left' as const, icon: ArrowLeft, title: 'Left border' },\n ]\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header */}\n <div style={styles.header}>\n {label && (\n <label style={styles.label}>{label}</label>\n )}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n style={styles.clearButton}\n title=\"Clear border\"\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Border preview */}\n <div\n style={{\n ...styles.preview,\n borderWidth: currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderStyle: currentValue.style,\n borderColor: currentValue.color?.hex || '#000000',\n borderRadius: `${currentValue.radius}px`,\n borderTopWidth: currentValue.sides.top && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderRightWidth: currentValue.sides.right && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderBottomWidth: currentValue.sides.bottom && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n borderLeftWidth: currentValue.sides.left && currentValue.style !== 'none' ? `${currentValue.width}px` : 0,\n opacity: (currentValue.color?.opacity ?? 100) / 100,\n }}\n >\n <span style={styles.previewText}>Preview</span>\n </div>\n\n {/* Width and Style row */}\n <div style={styles.grid}>\n {/* Width */}\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel}>Width (px)</label>\n <input\n type=\"number\"\n min={0}\n max={20}\n value={currentValue.width}\n onChange={handleWidthChange}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n\n {/* Style */}\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel}>Style</label>\n <select\n value={currentValue.style}\n onChange={handleStyleChange}\n disabled={readOnly}\n style={styles.select}\n >\n {BORDER_STYLES.map((style) => (\n <option key={style.value} value={style.value}>\n {style.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Radius */}\n <div style={styles.inputGroup as CSSProperties}>\n <label style={styles.inputLabel}>Radius (px)</label>\n <input\n type=\"number\"\n min={0}\n max={100}\n value={currentValue.radius}\n onChange={handleRadiusChange}\n disabled={readOnly}\n style={styles.input}\n />\n </div>\n\n {/* Color */}\n <ColorPickerField\n value={currentValue.color}\n onChange={handleColorChange}\n label=\"Color\"\n readOnly={readOnly}\n showOpacity={true}\n presets={[\n { hex: '#000000', label: 'Black' },\n { hex: '#374151', label: 'Gray 700' },\n { hex: '#6b7280', label: 'Gray 500' },\n { hex: '#d1d5db', label: 'Gray 300' },\n { hex: '#e5e7eb', label: 'Gray 200' },\n { hex: '#3b82f6', label: 'Blue' },\n { hex: '#ef4444', label: 'Red' },\n ]}\n />\n\n {/* Per-side toggles */}\n {!readOnly && (\n <div style={styles.sidesSection as CSSProperties}>\n <label style={styles.sidesLabel}>Sides</label>\n <div style={styles.sidesButtons}>\n {sideConfig.map(({ side, icon: Icon, title }) => {\n const isActive = currentValue.sides[side]\n return (\n <button\n key={side}\n type=\"button\"\n onClick={() => handleSideToggle(side)}\n style={isActive ? styles.sideButtonActive : styles.sideButton}\n title={title}\n >\n <Icon style={{ width: '16px', height: '16px' }} />\n </button>\n )\n })}\n </div>\n <p style={styles.sidesInfo as CSSProperties}>\n {allSidesEnabled ? 'All sides' : 'Custom sides'}\n </p>\n </div>\n )}\n </div>\n )\n}\n\nexport const BorderField = memo(BorderFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for border styling\n */\nexport function createBorderField(config: {\n label?: string\n}): CustomField<BorderValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <BorderField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n />\n ),\n }\n}\n"],"names":["React","useCallback","memo","X","ArrowUp","ArrowRight","ArrowDown","ArrowLeft","ColorPickerField","DEFAULT_VALUE","width","color","hex","opacity","radius","style","sides","top","right","bottom","left","BORDER_STYLES","value","label","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","fontSize","fontWeight","clearButton","height","padding","border","borderRadius","backgroundColor","cursor","preview","previewText","grid","gridTemplateColumns","inputGroup","inputLabel","input","fontFamily","select","sidesSection","sidesLabel","sidesButtons","flexWrap","sideButton","sideButtonActive","sidesInfo","textAlign","BorderFieldInner","onChange","readOnly","currentValue","handleWidthChange","e","newWidth","parseInt","target","Math","max","handleColorChange","newColor","handleRadiusChange","newRadius","handleStyleChange","handleSideToggle","side","handleClear","allSidesEnabled","sideConfig","icon","title","div","className","button","type","onClick","borderWidth","borderStyle","borderColor","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","span","min","disabled","map","option","showOpacity","presets","Icon","isActive","p","BorderField","createBorderField","config","render"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorPickerField.d.ts","sourceRoot":"","sources":["../../src/fields/ColorPickerField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAO7C,UAAU,qBAAqB;IAC7B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAA;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD;AAuBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMhE;AAqKD,iBAAS,qBAAqB,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAkB,EAClB,OAAO,GACR,EAAE,qBAAqB,qBAuLvB;AAED,eAAO,MAAM,gBAAgB,yDAA8B,CAAA;AAM3D;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD,GAAG,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,CAejC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/ColorPickerField.tsx"],"sourcesContent":["'use client'\n\n/**\n * ColorPickerField - Custom Puck field for selecting colors with opacity\n *\n * This component provides a color picker with:\n * - Native color input for visual picking\n * - Hex input for direct entry\n * - Opacity slider (0-100%)\n * - Preview swatch\n * - Optional preset color swatches\n */\n\nimport React, { useState, useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { X } from 'lucide-react'\nimport type { ColorValue } from './shared.js'\nimport { useTheme } from '../theme/index.js'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ninterface ColorPickerFieldProps {\n value: ColorValue | null\n onChange: (value: ColorValue | null) => void\n label?: string\n readOnly?: boolean\n showOpacity?: boolean\n presets?: Array<{ hex: string; label: string }>\n}\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Validates and normalizes a hex color string\n */\nfunction normalizeHex(hex: string): string {\n let clean = hex.replace(/^#/, '')\n\n if (clean.length === 3) {\n clean = clean.split('').map(c => c + c).join('')\n }\n\n if (!/^[0-9A-Fa-f]{6}$/.test(clean)) {\n return ''\n }\n\n return `#${clean.toLowerCase()}`\n}\n\n/**\n * Converts hex + opacity to rgba CSS string\n */\nexport function colorToRgba(hex: string, opacity: number): string {\n const clean = hex.replace(/^#/, '')\n const r = parseInt(clean.substring(0, 2), 16)\n const g = parseInt(clean.substring(2, 4), 16)\n const b = parseInt(clean.substring(4, 6), 16)\n return `rgba(${r}, ${g}, ${b}, ${opacity / 100})`\n}\n\n// =============================================================================\n// Styles\n// =============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n } as CSSProperties,\n label: {\n display: 'block',\n fontSize: '14px',\n fontWeight: 500,\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n row: {\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '8px',\n } as CSSProperties,\n colorInput: {\n width: '40px',\n height: '40px',\n padding: 0,\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '6px',\n cursor: 'pointer',\n } as CSSProperties,\n hexInput: {\n flex: '1 1 80px',\n minWidth: 0,\n height: '40px',\n padding: '0 12px',\n fontSize: '14px',\n fontFamily: 'monospace',\n border: '1px solid var(--theme-elevation-150)',\n borderRadius: '6px',\n backgroundColor: 'var(--theme-input-bg)',\n color: 'var(--theme-elevation-800)',\n } as CSSProperties,\n previewSwatch: {\n width: '40px',\n height: '40px',\n borderRadius: '6px',\n border: '1px solid var(--theme-elevation-150)',\n flexShrink: 0,\n position: 'relative',\n overflow: 'hidden',\n } as CSSProperties,\n checkerboard: {\n position: 'absolute',\n inset: 0,\n backgroundImage:\n 'linear-gradient(45deg, #d0d0d0 25%, transparent 25%), linear-gradient(-45deg, #d0d0d0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #d0d0d0 75%), linear-gradient(-45deg, transparent 75%, #d0d0d0 75%)',\n backgroundSize: '8px 8px',\n backgroundPosition: '0 0, 0 4px, 4px -4px, -4px 0px',\n backgroundColor: '#f0f0f0',\n } as CSSProperties,\n colorOverlay: {\n position: 'absolute',\n inset: 0,\n } as CSSProperties,\n clearButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n backgroundColor: 'transparent',\n color: 'var(--theme-elevation-500)',\n cursor: 'pointer',\n flexShrink: 0,\n } as CSSProperties,\n opacitySection: {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n } as CSSProperties,\n opacityHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n } as CSSProperties,\n opacityLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n opacityValue: {\n fontSize: '12px',\n fontFamily: 'monospace',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n opacitySlider: {\n position: 'relative',\n height: '12px',\n borderRadius: '6px',\n overflow: 'hidden',\n border: '1px solid var(--theme-elevation-150)',\n } as CSSProperties,\n opacityInput: {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n opacity: 0,\n cursor: 'pointer',\n margin: 0,\n } as CSSProperties,\n opacityThumb: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: '4px',\n backgroundColor: 'white',\n border: '1px solid var(--theme-elevation-400)',\n borderRadius: '2px',\n boxShadow: '0 1px 2px rgba(0,0,0,0.1)',\n pointerEvents: 'none',\n } as CSSProperties,\n presetsSection: {\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n } as CSSProperties,\n presetsLabel: {\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n presetsGrid: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '6px',\n } as CSSProperties,\n presetButton: {\n width: '24px',\n height: '24px',\n padding: 0,\n borderRadius: '4px',\n cursor: 'pointer',\n border: '1px solid var(--theme-elevation-150)',\n outline: 'none',\n } as CSSProperties,\n presetButtonSelected: {\n width: '24px',\n height: '24px',\n padding: 0,\n borderRadius: '4px',\n cursor: 'pointer',\n border: '2px solid var(--theme-elevation-800)',\n outline: '2px solid var(--theme-elevation-300)',\n outlineOffset: '2px',\n } as CSSProperties,\n}\n\n// =============================================================================\n// ColorPickerField Component\n// =============================================================================\n\nfunction ColorPickerFieldInner({\n value,\n onChange,\n label,\n readOnly,\n showOpacity = true,\n presets,\n}: ColorPickerFieldProps) {\n // Use theme presets if none provided\n const theme = useTheme()\n const resolvedPresets = presets ?? theme.colorPresets\n const [hexInput, setHexInput] = useState(value?.hex || '')\n\n const handleColorChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newHex = e.target.value\n onChange({\n hex: newHex,\n opacity: value?.opacity ?? 100,\n })\n setHexInput(newHex)\n }, [onChange, value?.opacity])\n\n const handleHexInputChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const input = e.target.value\n setHexInput(input)\n\n const normalized = normalizeHex(input)\n if (normalized) {\n onChange({\n hex: normalized,\n opacity: value?.opacity ?? 100,\n })\n }\n }, [onChange, value?.opacity])\n\n const handleHexInputBlur = useCallback(() => {\n if (value?.hex) {\n setHexInput(value.hex)\n }\n }, [value?.hex])\n\n const handleOpacityChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const newOpacity = parseInt(e.target.value, 10)\n if (value?.hex) {\n onChange({\n hex: value.hex,\n opacity: newOpacity,\n })\n }\n }, [onChange, value?.hex])\n\n const handlePresetClick = useCallback((preset: { hex: string; label: string }) => {\n onChange({\n hex: preset.hex,\n opacity: value?.opacity ?? 100,\n })\n setHexInput(preset.hex)\n }, [onChange, value?.opacity])\n\n const handleClear = useCallback(() => {\n onChange(null)\n setHexInput('')\n }, [onChange])\n\n const previewColor = value?.hex\n ? colorToRgba(value.hex, value.opacity ?? 100)\n : 'transparent'\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {label && (\n <label style={styles.label}>\n {label}\n </label>\n )}\n\n {/* Color picker and hex input row */}\n <div style={styles.row}>\n {/* Native color picker */}\n <input\n type=\"color\"\n value={value?.hex || '#000000'}\n onChange={handleColorChange}\n disabled={readOnly}\n style={{\n ...styles.colorInput,\n ...(readOnly ? { cursor: 'not-allowed', opacity: 0.5 } : {}),\n }}\n />\n\n {/* Hex input */}\n <input\n type=\"text\"\n value={hexInput}\n onChange={handleHexInputChange}\n onBlur={handleHexInputBlur}\n placeholder=\"#000000\"\n disabled={readOnly}\n style={styles.hexInput}\n />\n\n {/* Preview swatch with checkerboard for transparency */}\n <div\n style={styles.previewSwatch as CSSProperties}\n title={value?.hex ? `${value.hex} at ${value.opacity ?? 100}% opacity` : 'No color selected'}\n >\n <div style={styles.checkerboard as CSSProperties} />\n <div style={{ ...styles.colorOverlay as CSSProperties, backgroundColor: previewColor }} />\n </div>\n\n {/* Clear button */}\n {value && !readOnly && (\n <button\n type=\"button\"\n onClick={handleClear}\n title=\"Clear color\"\n style={styles.clearButton}\n >\n <X style={{ width: '16px', height: '16px' }} />\n </button>\n )}\n </div>\n\n {/* Opacity slider */}\n {showOpacity && value?.hex && (\n <div style={styles.opacitySection as CSSProperties}>\n <div style={styles.opacityHeader}>\n <label style={styles.opacityLabel}>Opacity</label>\n <span style={styles.opacityValue}>{value.opacity ?? 100}%</span>\n </div>\n {/* Custom opacity slider with checkerboard + color gradient */}\n <div style={styles.opacitySlider as CSSProperties}>\n {/* Checkerboard background */}\n <div style={styles.checkerboard as CSSProperties} />\n {/* Color gradient from transparent to solid */}\n <div\n style={{\n ...styles.colorOverlay as CSSProperties,\n background: `linear-gradient(to right, transparent 0%, ${value.hex} 100%)`,\n }}\n />\n {/* Range input overlay */}\n <input\n type=\"range\"\n min=\"0\"\n max=\"100\"\n value={value.opacity ?? 100}\n onChange={handleOpacityChange}\n disabled={readOnly}\n style={{\n ...styles.opacityInput as CSSProperties,\n ...(readOnly ? { cursor: 'not-allowed' } : {}),\n }}\n />\n {/* Thumb indicator */}\n <div\n style={{\n ...styles.opacityThumb as CSSProperties,\n left: `calc(${value.opacity ?? 100}% - 2px)`,\n }}\n />\n </div>\n </div>\n )}\n\n {/* Preset swatches */}\n {resolvedPresets.length > 0 && !readOnly && (\n <div style={styles.presetsSection as CSSProperties}>\n <label style={styles.presetsLabel}>Presets</label>\n <div style={styles.presetsGrid}>\n {resolvedPresets.map((preset) => {\n const isSelected = value?.hex?.toLowerCase() === preset.hex.toLowerCase()\n return (\n <button\n key={preset.hex}\n type=\"button\"\n onClick={() => handlePresetClick(preset)}\n style={{\n ...(isSelected ? styles.presetButtonSelected : styles.presetButton),\n backgroundColor: preset.hex,\n }}\n title={preset.label}\n />\n )\n })}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport const ColorPickerField = memo(ColorPickerFieldInner)\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\n/**\n * Creates a Puck field configuration for color selection\n */\nexport function createColorPickerField(config: {\n label?: string\n showOpacity?: boolean\n presets?: Array<{ hex: string; label: string }>\n}): CustomField<ColorValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ColorPickerField\n value={value}\n onChange={onChange}\n label={config.label}\n readOnly={readOnly}\n showOpacity={config.showOpacity}\n presets={config.presets}\n />\n ),\n }\n}\n"],"names":["React","useState","useCallback","memo","X","useTheme","normalizeHex","hex","clean","replace","length","split","map","c","join","test","toLowerCase","colorToRgba","opacity","r","parseInt","substring","g","b","styles","container","display","flexDirection","gap","label","fontSize","fontWeight","color","row","alignItems","flexWrap","colorInput","width","height","padding","border","borderRadius","cursor","hexInput","flex","minWidth","fontFamily","backgroundColor","previewSwatch","flexShrink","position","overflow","checkerboard","inset","backgroundImage","backgroundSize","backgroundPosition","colorOverlay","clearButton","justifyContent","opacitySection","opacityHeader","opacityLabel","opacityValue","opacitySlider","opacityInput","margin","opacityThumb","top","bottom","boxShadow","pointerEvents","presetsSection","presetsLabel","presetsGrid","presetButton","outline","presetButtonSelected","outlineOffset","ColorPickerFieldInner","value","onChange","readOnly","showOpacity","presets","theme","resolvedPresets","colorPresets","setHexInput","handleColorChange","e","newHex","target","handleHexInputChange","input","normalized","handleHexInputBlur","handleOpacityChange","newOpacity","handlePresetClick","preset","handleClear","previewColor","div","className","style","type","disabled","onBlur","placeholder","title","button","onClick","span","background","min","max","left","isSelected","ColorPickerField","createColorPickerField","config","render"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ContentAlignmentField.d.ts","sourceRoot":"","sources":["../../src/fields/ContentAlignmentField.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAgD,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAOnD,2BAA2B;AAC3B,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;AAExD,yBAAyB;AACzB,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAA;AAEtD,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,eAAe,CAAA;IAC3B,QAAQ,EAAE,aAAa,CAAA;CACxB;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GACrB,UAAU,GAAG,YAAY,GAAG,WAAW,GACvC,aAAa,GAAG,QAAQ,GAAG,cAAc,GACzC,aAAa,GAAG,eAAe,GAAG,cAAc,CAAA;AAEpD,UAAU,0BAA0B;IAClC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,KAAK,IAAI,CAAA;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kCAAkC;IAClC,YAAY,CAAC,EAAE,qBAAqB,CAAA;CACrC;AAkID,iBAAS,0BAA0B,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,KAA2B,EAC3B,QAAQ,EACR,YAAgC,GACjC,EAAE,0BAA0B,qBA2E5B;AAED,eAAO,MAAM,qBAAqB,8DAAmC,CAAA;AAMrE;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAClD,KAAK,CAAC,aAAa,CAmBrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAClD,KAAK,CAAC,aAAa,CAarB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAClD,KAAK,CAAC,aAAa,CAYrB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAClD,MAAM,CAgBR;AAMD,UAAU,iCAAiC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,qBAAqB,CAAA;CACrC;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,GAAE,iCAAsC,GAC7C,WAAW,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAc3C"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/fields/ContentAlignmentField.tsx"],"sourcesContent":["'use client'\n\n/**\n * ContentAlignmentField - Visual 3x3 grid selector for content positioning\n *\n * A d-pad style control for selecting content alignment within a container.\n * Works with both Flexbox (justify-content + align-items) and Grid (place-content).\n */\n\nimport React, { useCallback, memo, type CSSProperties } from 'react'\nimport type { CustomField } from '@puckeditor/core'\nimport { X } from 'lucide-react'\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Horizontal alignment */\nexport type HorizontalAlign = 'start' | 'center' | 'end'\n\n/** Vertical alignment */\nexport type VerticalAlign = 'start' | 'center' | 'end'\n\n/** Combined alignment position (9 positions) */\nexport interface ContentAlignmentValue {\n horizontal: HorizontalAlign\n vertical: VerticalAlign\n}\n\n/** Position labels for accessibility */\nexport type PositionLabel =\n | 'top-left' | 'top-center' | 'top-right'\n | 'center-left' | 'center' | 'center-right'\n | 'bottom-left' | 'bottom-center' | 'bottom-right'\n\ninterface ContentAlignmentFieldProps {\n value: ContentAlignmentValue | null\n onChange: (value: ContentAlignmentValue | null) => void\n label?: string\n readOnly?: boolean\n /** Default alignment when null */\n defaultValue?: ContentAlignmentValue\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst DEFAULT_ALIGNMENT: ContentAlignmentValue = {\n horizontal: 'center',\n vertical: 'center',\n}\n\n/** Grid positions in order (row by row) */\nconst POSITIONS: Array<{ h: HorizontalAlign; v: VerticalAlign; label: PositionLabel }> = [\n { h: 'start', v: 'start', label: 'top-left' },\n { h: 'center', v: 'start', label: 'top-center' },\n { h: 'end', v: 'start', label: 'top-right' },\n { h: 'start', v: 'center', label: 'center-left' },\n { h: 'center', v: 'center', label: 'center' },\n { h: 'end', v: 'center', label: 'center-right' },\n { h: 'start', v: 'end', label: 'bottom-left' },\n { h: 'center', v: 'end', label: 'bottom-center' },\n { h: 'end', v: 'end', label: 'bottom-right' },\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 gridContainer: {\n display: 'flex',\n justifyContent: 'center',\n padding: '8px 0',\n } as CSSProperties,\n grid: {\n display: 'grid',\n gridTemplateColumns: 'repeat(3, 28px)',\n gridTemplateRows: 'repeat(3, 28px)',\n gap: '3px',\n padding: '4px',\n backgroundColor: 'var(--theme-elevation-100)',\n borderRadius: '8px',\n border: '1px solid var(--theme-elevation-150)',\n } as CSSProperties,\n cell: {\n width: '28px',\n height: '28px',\n border: '1px solid var(--theme-elevation-200)',\n borderRadius: '4px',\n backgroundColor: 'var(--theme-bg)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 0.15s ease',\n } as CSSProperties,\n cellActive: {\n width: '28px',\n height: '28px',\n border: '2px 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 transition: 'all 0.15s ease',\n } as CSSProperties,\n cellHover: {\n borderColor: 'var(--theme-elevation-400)',\n backgroundColor: 'var(--theme-elevation-50)',\n } as CSSProperties,\n cellDisabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n } as CSSProperties,\n dot: {\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: 'var(--theme-elevation-400)',\n } as CSSProperties,\n dotActive: {\n width: '10px',\n height: '10px',\n borderRadius: '50%',\n backgroundColor: 'var(--theme-bg)',\n } as CSSProperties,\n preview: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n fontSize: '12px',\n color: 'var(--theme-elevation-500)',\n } as CSSProperties,\n}\n\n// =============================================================================\n// ContentAlignmentField Component\n// =============================================================================\n\nfunction ContentAlignmentFieldInner({\n value,\n onChange,\n label = 'Content Alignment',\n readOnly,\n defaultValue = DEFAULT_ALIGNMENT,\n}: ContentAlignmentFieldProps) {\n const currentValue = value || defaultValue\n\n const handleCellClick = useCallback(\n (horizontal: HorizontalAlign, vertical: VerticalAlign) => {\n if (readOnly) return\n onChange({ horizontal, vertical })\n },\n [onChange, readOnly]\n )\n\n const handleClear = useCallback(() => {\n onChange(null)\n }, [onChange])\n\n const isActive = (h: HorizontalAlign, v: VerticalAlign) =>\n currentValue.horizontal === h && currentValue.vertical === v\n\n // Human-readable label for current position\n const getPositionLabel = (h: HorizontalAlign, v: VerticalAlign): string => {\n const vLabel = v === 'start' ? 'Top' : v === 'end' ? 'Bottom' : 'Middle'\n const hLabel = h === 'start' ? 'Left' : h === 'end' ? 'Right' : 'Center'\n if (h === 'center' && v === 'center') return 'Center'\n return `${vLabel} ${hLabel}`\n }\n\n return (\n <div className=\"puck-field\" style={styles.container}>\n {/* Header */}\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 {/* 3x3 Grid Selector */}\n <div style={styles.gridContainer}>\n <div style={styles.grid}>\n {POSITIONS.map(({ h, v, label: posLabel }) => {\n const active = isActive(h, v)\n return (\n <button\n key={posLabel}\n type=\"button\"\n onClick={() => handleCellClick(h, v)}\n disabled={readOnly}\n style={{\n ...(active ? styles.cellActive : styles.cell),\n ...(readOnly ? styles.cellDisabled : {}),\n }}\n title={getPositionLabel(h, v)}\n aria-label={getPositionLabel(h, v)}\n aria-pressed={active}\n >\n <span style={active ? styles.dotActive : styles.dot} />\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Current position label */}\n <div style={styles.preview}>\n {getPositionLabel(currentValue.horizontal, currentValue.vertical)}\n </div>\n </div>\n )\n}\n\nexport const ContentAlignmentField = memo(ContentAlignmentFieldInner)\n\n// =============================================================================\n// CSS Helper Utilities\n// =============================================================================\n\n/**\n * Convert ContentAlignmentValue to Flexbox CSS properties\n * Use this when the container is display: flex\n */\nexport function alignmentToFlexCSS(\n alignment: ContentAlignmentValue | null | undefined\n): React.CSSProperties {\n if (!alignment) return {}\n\n const justifyMap: Record<HorizontalAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n }\n\n const alignMap: Record<VerticalAlign, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n }\n\n return {\n justifyContent: justifyMap[alignment.horizontal],\n alignItems: alignMap[alignment.vertical],\n }\n}\n\n/**\n * Convert ContentAlignmentValue to Grid CSS properties\n * Use this when the container is display: grid\n */\nexport function alignmentToGridCSS(\n alignment: ContentAlignmentValue | null | undefined\n): React.CSSProperties {\n if (!alignment) return {}\n\n const map: Record<HorizontalAlign | VerticalAlign, string> = {\n start: 'start',\n center: 'center',\n end: 'end',\n }\n\n return {\n justifyContent: map[alignment.horizontal],\n alignContent: map[alignment.vertical],\n }\n}\n\n/**\n * Convert ContentAlignmentValue to place-self CSS for grid items\n * Use this on individual items within a grid\n */\nexport function alignmentToPlaceSelfCSS(\n alignment: ContentAlignmentValue | null | undefined\n): React.CSSProperties {\n if (!alignment) return {}\n\n const map: Record<HorizontalAlign | VerticalAlign, string> = {\n start: 'start',\n center: 'center',\n end: 'end',\n }\n\n return {\n placeSelf: `${map[alignment.vertical]} ${map[alignment.horizontal]}`,\n }\n}\n\n/**\n * Get Tailwind classes for alignment\n * Returns both justify-* and items-* classes\n */\nexport function alignmentToTailwind(\n alignment: ContentAlignmentValue | null | undefined\n): string {\n if (!alignment) return ''\n\n const justifyMap: Record<HorizontalAlign, string> = {\n start: 'justify-start',\n center: 'justify-center',\n end: 'justify-end',\n }\n\n const alignMap: Record<VerticalAlign, string> = {\n start: 'items-start',\n center: 'items-center',\n end: 'items-end',\n }\n\n return `${justifyMap[alignment.horizontal]} ${alignMap[alignment.vertical]}`\n}\n\n// =============================================================================\n// Field Configuration Factory\n// =============================================================================\n\ninterface CreateContentAlignmentFieldConfig {\n label?: string\n defaultValue?: ContentAlignmentValue\n}\n\n/**\n * Creates a Puck field configuration for content alignment\n *\n * @example\n * ```ts\n * fields: {\n * contentAlignment: createContentAlignmentField({ label: 'Align Content' }),\n * }\n * ```\n */\nexport function createContentAlignmentField(\n config: CreateContentAlignmentFieldConfig = {}\n): CustomField<ContentAlignmentValue | null> {\n return {\n type: 'custom',\n label: config.label,\n render: ({ value, onChange, readOnly }) => (\n <ContentAlignmentField\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","X","DEFAULT_ALIGNMENT","horizontal","vertical","POSITIONS","h","v","label","styles","container","display","flexDirection","gap","header","alignItems","justifyContent","fontSize","fontWeight","color","clearButton","width","height","padding","border","borderRadius","backgroundColor","cursor","gridContainer","grid","gridTemplateColumns","gridTemplateRows","cell","transition","cellActive","cellHover","borderColor","cellDisabled","opacity","dot","dotActive","preview","ContentAlignmentFieldInner","value","onChange","readOnly","defaultValue","currentValue","handleCellClick","handleClear","isActive","getPositionLabel","vLabel","hLabel","div","className","style","button","type","onClick","title","map","posLabel","active","disabled","aria-label","aria-pressed","span","ContentAlignmentField","alignmentToFlexCSS","alignment","justifyMap","start","center","end","alignMap","alignmentToGridCSS","alignContent","alignmentToPlaceSelfCSS","placeSelf","alignmentToTailwind","createContentAlignmentField","config","render"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DimensionsField.d.ts","sourceRoot":"","sources":["../../src/fields/DimensionsField.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,OAAO,KAA0D,MAAM,OAAO,CAAA;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAYnD,OAAO,KAAK,EACV,eAAe,EAKhB,MAAM,aAAa,CAAA;AAOpB,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,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,yDAAyD;IACzD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAobD,iBAAS,oBAAoB,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,kBAAyB,EACzB,eAAsB,EACtB,mBAA2B,GAC5B,EAAE,oBAAoB,qBAubtB;AAED,eAAO,MAAM,eAAe,wDAA6B,CAAA;AAMzD,UAAU,2BAA2B;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,2CAA2C;IAC3C,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,yDAAyD;IACzD,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,2BAAgC,GACvC,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,CAgBrC"}