@delmaredigital/payload-puck 0.6.12 → 0.6.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/README.md +50 -1
  2. package/dist/admin/EditWithPuckButton.d.ts +1 -1
  3. package/dist/admin/EditWithPuckButton.d.ts.map +1 -1
  4. package/dist/admin/EditWithPuckButton.js +65 -25
  5. package/dist/admin/EditWithPuckButton.js.map +1 -1
  6. package/dist/admin/EditWithPuckCell.js +43 -13
  7. package/dist/admin/EditWithPuckCell.js.map +1 -1
  8. package/dist/admin/PuckEditorView.d.ts +1 -1
  9. package/dist/admin/PuckEditorView.d.ts.map +1 -1
  10. package/dist/admin/PuckEditorView.js +118 -32
  11. package/dist/admin/PuckEditorView.js.map +1 -1
  12. package/dist/admin/client.d.ts +2 -2
  13. package/dist/admin/client.d.ts.map +1 -1
  14. package/dist/admin/client.js +4 -4
  15. package/dist/admin/client.js.map +1 -1
  16. package/dist/admin/generateAdminComponents.js +7 -7
  17. package/dist/admin/generateAdminComponents.js.map +1 -1
  18. package/dist/admin/index.d.ts +5 -5
  19. package/dist/admin/index.d.ts.map +1 -1
  20. package/dist/admin/index.js +3 -2
  21. package/dist/admin/index.js.map +1 -1
  22. package/dist/ai/collections/AiContext.js +56 -29
  23. package/dist/ai/collections/AiContext.js.map +1 -1
  24. package/dist/ai/collections/AiPrompts.js +24 -19
  25. package/dist/ai/collections/AiPrompts.js.map +1 -1
  26. package/dist/ai/createAiApiRoutes.js +28 -19
  27. package/dist/ai/createAiApiRoutes.js.map +1 -1
  28. package/dist/ai/createAiGenerate.js +7 -8
  29. package/dist/ai/createAiGenerate.js.map +1 -1
  30. package/dist/ai/createAiPlugin.js +7 -9
  31. package/dist/ai/createAiPlugin.js.map +1 -1
  32. package/dist/ai/hooks/useAiContext.js +50 -39
  33. package/dist/ai/hooks/useAiContext.js.map +1 -1
  34. package/dist/ai/hooks/useAiPrompts.js +33 -25
  35. package/dist/ai/hooks/useAiPrompts.js.map +1 -1
  36. package/dist/ai/index.js +9 -10
  37. package/dist/ai/index.js.map +1 -1
  38. package/dist/ai/plugins/ContextEditorPanel.d.ts +1 -1
  39. package/dist/ai/plugins/ContextEditorPanel.d.ts.map +1 -1
  40. package/dist/ai/plugins/ContextEditorPanel.js +399 -107
  41. package/dist/ai/plugins/ContextEditorPanel.js.map +1 -1
  42. package/dist/ai/plugins/PromptEditorPanel.d.ts +1 -1
  43. package/dist/ai/plugins/PromptEditorPanel.d.ts.map +1 -1
  44. package/dist/ai/plugins/PromptEditorPanel.js +237 -51
  45. package/dist/ai/plugins/PromptEditorPanel.js.map +1 -1
  46. package/dist/ai/plugins/contextEditorPlugin.js +12 -5
  47. package/dist/ai/plugins/contextEditorPlugin.js.map +1 -1
  48. package/dist/ai/plugins/promptApiRoutes.js +119 -50
  49. package/dist/ai/plugins/promptApiRoutes.js.map +1 -1
  50. package/dist/ai/plugins/promptEditorPlugin.js +12 -5
  51. package/dist/ai/plugins/promptEditorPlugin.js.map +1 -1
  52. package/dist/ai/presets/componentAiDefaults.js +108 -83
  53. package/dist/ai/presets/componentAiDefaults.js.map +1 -1
  54. package/dist/ai/presets/index.js +12 -18
  55. package/dist/ai/presets/index.js.map +1 -1
  56. package/dist/ai/presets/instructions/interactive.js +85 -75
  57. package/dist/ai/presets/instructions/interactive.js.map +1 -1
  58. package/dist/ai/presets/instructions/layout.js +122 -117
  59. package/dist/ai/presets/instructions/layout.js.map +1 -1
  60. package/dist/ai/presets/instructions/media.js +31 -29
  61. package/dist/ai/presets/instructions/media.js.map +1 -1
  62. package/dist/ai/presets/instructions/pagePatterns.js +4 -6
  63. package/dist/ai/presets/instructions/pagePatterns.js.map +1 -1
  64. package/dist/ai/presets/instructions/schemas.js +495 -137
  65. package/dist/ai/presets/instructions/schemas.js.map +1 -1
  66. package/dist/ai/presets/instructions/typography.js +38 -33
  67. package/dist/ai/presets/instructions/typography.js.map +1 -1
  68. package/dist/ai/tools/index.js +92 -55
  69. package/dist/ai/tools/index.js.map +1 -1
  70. package/dist/ai/types.js +7 -1
  71. package/dist/ai/types.js.map +1 -1
  72. package/dist/ai/utils/injectAiConfig.js +33 -40
  73. package/dist/ai/utils/injectAiConfig.js.map +1 -1
  74. package/dist/api/createPuckApiRoutes.d.ts +1 -1
  75. package/dist/api/createPuckApiRoutes.d.ts.map +1 -1
  76. package/dist/api/createPuckApiRoutes.js +123 -65
  77. package/dist/api/createPuckApiRoutes.js.map +1 -1
  78. package/dist/api/createPuckApiRoutesVersions.d.ts +1 -1
  79. package/dist/api/createPuckApiRoutesVersions.d.ts.map +1 -1
  80. package/dist/api/createPuckApiRoutesVersions.js +88 -37
  81. package/dist/api/createPuckApiRoutesVersions.js.map +1 -1
  82. package/dist/api/createPuckApiRoutesWithId.d.ts +1 -1
  83. package/dist/api/createPuckApiRoutesWithId.d.ts.map +1 -1
  84. package/dist/api/createPuckApiRoutesWithId.js +166 -72
  85. package/dist/api/createPuckApiRoutesWithId.js.map +1 -1
  86. package/dist/api/index.d.ts +5 -5
  87. package/dist/api/index.d.ts.map +1 -1
  88. package/dist/api/index.js +6 -6
  89. package/dist/api/index.js.map +1 -1
  90. package/dist/api/payload-config.d.js +15 -0
  91. package/dist/api/payload-config.d.js.map +1 -0
  92. package/dist/api/types.js +4 -1
  93. package/dist/api/types.js.map +1 -1
  94. package/dist/api/utils/mapRootProps.d.ts +1 -1
  95. package/dist/api/utils/mapRootProps.d.ts.map +1 -1
  96. package/dist/api/utils/mapRootProps.js +77 -44
  97. package/dist/api/utils/mapRootProps.js.map +1 -1
  98. package/dist/collections/Templates.js +24 -20
  99. package/dist/collections/Templates.js.map +1 -1
  100. package/dist/components/AccordionClient.d.ts +2 -2
  101. package/dist/components/AccordionClient.d.ts.map +1 -1
  102. package/dist/components/AccordionClient.js +81 -22
  103. package/dist/components/AccordionClient.js.map +1 -1
  104. package/dist/components/AnimatedWrapper.d.ts +2 -2
  105. package/dist/components/AnimatedWrapper.d.ts.map +1 -1
  106. package/dist/components/AnimatedWrapper.js +31 -16
  107. package/dist/components/AnimatedWrapper.js.map +1 -1
  108. package/dist/components/exports.js +2 -2
  109. package/dist/components/exports.js.map +1 -1
  110. package/dist/components/index.d.ts +5 -5
  111. package/dist/components/index.d.ts.map +1 -1
  112. package/dist/components/index.js +7 -7
  113. package/dist/components/index.js.map +1 -1
  114. package/dist/components/interactive/Accordion.d.ts +1 -1
  115. package/dist/components/interactive/Accordion.d.ts.map +1 -1
  116. package/dist/components/interactive/Accordion.js +149 -55
  117. package/dist/components/interactive/Accordion.js.map +1 -1
  118. package/dist/components/interactive/Accordion.server.d.ts +1 -1
  119. package/dist/components/interactive/Accordion.server.d.ts.map +1 -1
  120. package/dist/components/interactive/Accordion.server.js +25 -7
  121. package/dist/components/interactive/Accordion.server.js.map +1 -1
  122. package/dist/components/interactive/Button.d.ts +3 -3
  123. package/dist/components/interactive/Button.d.ts.map +1 -1
  124. package/dist/components/interactive/Button.js +89 -43
  125. package/dist/components/interactive/Button.js.map +1 -1
  126. package/dist/components/interactive/Button.server.d.ts +2 -2
  127. package/dist/components/interactive/Button.server.d.ts.map +1 -1
  128. package/dist/components/interactive/Button.server.js +40 -20
  129. package/dist/components/interactive/Button.server.js.map +1 -1
  130. package/dist/components/interactive/Card.d.ts +3 -3
  131. package/dist/components/interactive/Card.d.ts.map +1 -1
  132. package/dist/components/interactive/Card.js +131 -39
  133. package/dist/components/interactive/Card.js.map +1 -1
  134. package/dist/components/interactive/Card.server.d.ts +3 -3
  135. package/dist/components/interactive/Card.server.d.ts.map +1 -1
  136. package/dist/components/interactive/Card.server.js +72 -11
  137. package/dist/components/interactive/Card.server.js.map +1 -1
  138. package/dist/components/interactive/Divider.d.ts +1 -1
  139. package/dist/components/interactive/Divider.d.ts.map +1 -1
  140. package/dist/components/interactive/Divider.js +54 -26
  141. package/dist/components/interactive/Divider.js.map +1 -1
  142. package/dist/components/interactive/Divider.server.d.ts +1 -1
  143. package/dist/components/interactive/Divider.server.d.ts.map +1 -1
  144. package/dist/components/interactive/Divider.server.js +28 -12
  145. package/dist/components/interactive/Divider.server.js.map +1 -1
  146. package/dist/components/interactive/index.d.ts +4 -4
  147. package/dist/components/interactive/index.d.ts.map +1 -1
  148. package/dist/components/interactive/index.js +5 -5
  149. package/dist/components/interactive/index.js.map +1 -1
  150. package/dist/components/layout/Container.d.ts +1 -1
  151. package/dist/components/layout/Container.d.ts.map +1 -1
  152. package/dist/components/layout/Container.js +101 -47
  153. package/dist/components/layout/Container.js.map +1 -1
  154. package/dist/components/layout/Container.server.d.ts +1 -1
  155. package/dist/components/layout/Container.server.d.ts.map +1 -1
  156. package/dist/components/layout/Container.server.js +67 -19
  157. package/dist/components/layout/Container.server.js.map +1 -1
  158. package/dist/components/layout/Flex.d.ts +2 -2
  159. package/dist/components/layout/Flex.d.ts.map +1 -1
  160. package/dist/components/layout/Flex.js +124 -55
  161. package/dist/components/layout/Flex.js.map +1 -1
  162. package/dist/components/layout/Flex.server.d.ts +1 -1
  163. package/dist/components/layout/Flex.server.d.ts.map +1 -1
  164. package/dist/components/layout/Flex.server.js +50 -14
  165. package/dist/components/layout/Flex.server.js.map +1 -1
  166. package/dist/components/layout/Grid.d.ts +1 -1
  167. package/dist/components/layout/Grid.d.ts.map +1 -1
  168. package/dist/components/layout/Grid.js +93 -44
  169. package/dist/components/layout/Grid.js.map +1 -1
  170. package/dist/components/layout/Grid.server.d.ts +1 -1
  171. package/dist/components/layout/Grid.server.d.ts.map +1 -1
  172. package/dist/components/layout/Grid.server.js +56 -14
  173. package/dist/components/layout/Grid.server.js.map +1 -1
  174. package/dist/components/layout/Section.d.ts +1 -1
  175. package/dist/components/layout/Section.d.ts.map +1 -1
  176. package/dist/components/layout/Section.js +147 -64
  177. package/dist/components/layout/Section.js.map +1 -1
  178. package/dist/components/layout/Section.server.d.ts +1 -1
  179. package/dist/components/layout/Section.server.d.ts.map +1 -1
  180. package/dist/components/layout/Section.server.js +92 -28
  181. package/dist/components/layout/Section.server.js.map +1 -1
  182. package/dist/components/layout/Spacer.d.ts +1 -1
  183. package/dist/components/layout/Spacer.d.ts.map +1 -1
  184. package/dist/components/layout/Spacer.js +80 -30
  185. package/dist/components/layout/Spacer.js.map +1 -1
  186. package/dist/components/layout/Spacer.server.d.ts +1 -1
  187. package/dist/components/layout/Spacer.server.d.ts.map +1 -1
  188. package/dist/components/layout/Spacer.server.js +31 -9
  189. package/dist/components/layout/Spacer.server.js.map +1 -1
  190. package/dist/components/layout/Template.d.ts +1 -1
  191. package/dist/components/layout/Template.d.ts.map +1 -1
  192. package/dist/components/layout/Template.js +58 -30
  193. package/dist/components/layout/Template.js.map +1 -1
  194. package/dist/components/layout/Template.server.d.ts +1 -1
  195. package/dist/components/layout/Template.server.d.ts.map +1 -1
  196. package/dist/components/layout/Template.server.js +43 -11
  197. package/dist/components/layout/Template.server.js.map +1 -1
  198. package/dist/components/layout/index.d.ts +8 -8
  199. package/dist/components/layout/index.d.ts.map +1 -1
  200. package/dist/components/layout/index.js +8 -8
  201. package/dist/components/layout/index.js.map +1 -1
  202. package/dist/components/media/Image.d.ts +3 -3
  203. package/dist/components/media/Image.d.ts.map +1 -1
  204. package/dist/components/media/Image.js +122 -39
  205. package/dist/components/media/Image.js.map +1 -1
  206. package/dist/components/media/Image.server.d.ts +3 -3
  207. package/dist/components/media/Image.server.d.ts.map +1 -1
  208. package/dist/components/media/Image.server.js +76 -13
  209. package/dist/components/media/Image.server.js.map +1 -1
  210. package/dist/components/media/index.d.ts +1 -1
  211. package/dist/components/media/index.d.ts.map +1 -1
  212. package/dist/components/media/index.js +2 -2
  213. package/dist/components/media/index.js.map +1 -1
  214. package/dist/components/typography/Heading.d.ts +2 -2
  215. package/dist/components/typography/Heading.d.ts.map +1 -1
  216. package/dist/components/typography/Heading.js +45 -25
  217. package/dist/components/typography/Heading.js.map +1 -1
  218. package/dist/components/typography/Heading.server.d.ts +2 -2
  219. package/dist/components/typography/Heading.server.d.ts.map +1 -1
  220. package/dist/components/typography/Heading.server.js +16 -10
  221. package/dist/components/typography/Heading.server.js.map +1 -1
  222. package/dist/components/typography/RichText.editor.d.ts +1 -1
  223. package/dist/components/typography/RichText.editor.d.ts.map +1 -1
  224. package/dist/components/typography/RichText.editor.js +44 -19
  225. package/dist/components/typography/RichText.editor.js.map +1 -1
  226. package/dist/components/typography/RichText.server.d.ts +2 -2
  227. package/dist/components/typography/RichText.server.d.ts.map +1 -1
  228. package/dist/components/typography/RichText.server.js +33 -14
  229. package/dist/components/typography/RichText.server.js.map +1 -1
  230. package/dist/components/typography/Text.d.ts +2 -2
  231. package/dist/components/typography/Text.d.ts.map +1 -1
  232. package/dist/components/typography/Text.js +49 -23
  233. package/dist/components/typography/Text.js.map +1 -1
  234. package/dist/components/typography/Text.server.d.ts +2 -2
  235. package/dist/components/typography/Text.server.d.ts.map +1 -1
  236. package/dist/components/typography/Text.server.js +21 -8
  237. package/dist/components/typography/Text.server.js.map +1 -1
  238. package/dist/components/typography/index.d.ts +4 -4
  239. package/dist/components/typography/index.d.ts.map +1 -1
  240. package/dist/components/typography/index.js +5 -5
  241. package/dist/components/typography/index.js.map +1 -1
  242. package/dist/config/config.editor.d.ts +3 -3
  243. package/dist/config/config.editor.d.ts.map +1 -1
  244. package/dist/config/config.editor.js +119 -54
  245. package/dist/config/config.editor.js.map +1 -1
  246. package/dist/config/index.d.ts +4 -4
  247. package/dist/config/index.d.ts.map +1 -1
  248. package/dist/config/index.js +62 -35
  249. package/dist/config/index.js.map +1 -1
  250. package/dist/config/merge.d.ts +1 -1
  251. package/dist/config/merge.d.ts.map +1 -1
  252. package/dist/config/merge.js +23 -26
  253. package/dist/config/merge.js.map +1 -1
  254. package/dist/config/presets.d.ts +4 -4
  255. package/dist/config/presets.js +195 -75
  256. package/dist/config/presets.js.map +1 -1
  257. package/dist/config/types.js +6 -2
  258. package/dist/config/types.js.map +1 -1
  259. package/dist/editor/PuckEditor.d.ts +4 -4
  260. package/dist/editor/PuckEditor.d.ts.map +1 -1
  261. package/dist/editor/PuckEditor.js +162 -70
  262. package/dist/editor/PuckEditor.js.map +1 -1
  263. package/dist/editor/PuckEditorImpl.client.d.ts +4 -4
  264. package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
  265. package/dist/editor/PuckEditorImpl.client.js +304 -152
  266. package/dist/editor/PuckEditorImpl.client.js.map +1 -1
  267. package/dist/editor/components/DarkModeStyles.js +11 -12
  268. package/dist/editor/components/DarkModeStyles.js.map +1 -1
  269. package/dist/editor/components/HeaderActions.js +308 -64
  270. package/dist/editor/components/HeaderActions.js.map +1 -1
  271. package/dist/editor/components/IframeWrapper.d.ts +1 -1
  272. package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
  273. package/dist/editor/components/IframeWrapper.js +82 -58
  274. package/dist/editor/components/IframeWrapper.js.map +1 -1
  275. package/dist/editor/components/LoadingState.d.ts +1 -1
  276. package/dist/editor/components/LoadingState.d.ts.map +1 -1
  277. package/dist/editor/components/LoadingState.js +17 -3
  278. package/dist/editor/components/LoadingState.js.map +1 -1
  279. package/dist/editor/components/PreviewModal.js +234 -78
  280. package/dist/editor/components/PreviewModal.js.map +1 -1
  281. package/dist/editor/components/PreviewModeToggle.js +43 -15
  282. package/dist/editor/components/PreviewModeToggle.js.map +1 -1
  283. package/dist/editor/components/VersionHistory.js +219 -71
  284. package/dist/editor/components/VersionHistory.js.map +1 -1
  285. package/dist/editor/hooks/useDarkMode.js +36 -23
  286. package/dist/editor/hooks/useDarkMode.js.map +1 -1
  287. package/dist/editor/hooks/useUnsavedChanges.js +8 -8
  288. package/dist/editor/hooks/useUnsavedChanges.js.map +1 -1
  289. package/dist/editor/index.js +5 -6
  290. package/dist/editor/index.js.map +1 -1
  291. package/dist/editor/plugins/VersionHistoryPanel.js +236 -75
  292. package/dist/editor/plugins/VersionHistoryPanel.js.map +1 -1
  293. package/dist/editor/plugins/index.js +4 -4
  294. package/dist/editor/plugins/index.js.map +1 -1
  295. package/dist/editor/plugins/versionHistoryPlugin.js +10 -8
  296. package/dist/editor/plugins/versionHistoryPlugin.js.map +1 -1
  297. package/dist/editor/utils/detectPageTree.js +5 -5
  298. package/dist/editor/utils/detectPageTree.js.map +1 -1
  299. package/dist/editor/utils/index.js +1 -0
  300. package/dist/editor/utils/index.js.map +1 -1
  301. package/dist/editor/utils/injectPageTreeFields.js +13 -9
  302. package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
  303. package/dist/endpoints/ai.js +58 -34
  304. package/dist/endpoints/ai.js.map +1 -1
  305. package/dist/endpoints/context.js +86 -40
  306. package/dist/endpoints/context.js.map +1 -1
  307. package/dist/endpoints/index.js +153 -76
  308. package/dist/endpoints/index.js.map +1 -1
  309. package/dist/endpoints/postcss.d.js +5 -0
  310. package/dist/endpoints/postcss.d.js.map +1 -0
  311. package/dist/endpoints/prompts.js +81 -39
  312. package/dist/endpoints/prompts.js.map +1 -1
  313. package/dist/endpoints/styles.js +34 -36
  314. package/dist/endpoints/styles.js.map +1 -1
  315. package/dist/exports/client.js +2 -2
  316. package/dist/exports/client.js.map +1 -1
  317. package/dist/exports/rsc.js +2 -2
  318. package/dist/exports/rsc.js.map +1 -1
  319. package/dist/fields/AlignmentField.d.ts +1 -1
  320. package/dist/fields/AlignmentField.d.ts.map +1 -1
  321. package/dist/fields/AlignmentField.js +93 -30
  322. package/dist/fields/AlignmentField.js.map +1 -1
  323. package/dist/fields/AnimationField.d.ts +2 -2
  324. package/dist/fields/AnimationField.d.ts.map +1 -1
  325. package/dist/fields/AnimationField.js +558 -84
  326. package/dist/fields/AnimationField.js.map +1 -1
  327. package/dist/fields/BackgroundField.d.ts +2 -2
  328. package/dist/fields/BackgroundField.d.ts.map +1 -1
  329. package/dist/fields/BackgroundField.js +754 -120
  330. package/dist/fields/BackgroundField.js.map +1 -1
  331. package/dist/fields/BorderField.d.ts +2 -2
  332. package/dist/fields/BorderField.d.ts.map +1 -1
  333. package/dist/fields/BorderField.js +275 -73
  334. package/dist/fields/BorderField.js.map +1 -1
  335. package/dist/fields/ColorPickerField.d.ts +2 -2
  336. package/dist/fields/ColorPickerField.d.ts.map +1 -1
  337. package/dist/fields/ColorPickerField.js +210 -68
  338. package/dist/fields/ColorPickerField.js.map +1 -1
  339. package/dist/fields/ContentAlignmentField.d.ts +1 -1
  340. package/dist/fields/ContentAlignmentField.d.ts.map +1 -1
  341. package/dist/fields/ContentAlignmentField.js +161 -75
  342. package/dist/fields/ContentAlignmentField.js.map +1 -1
  343. package/dist/fields/DimensionsField.d.ts +2 -2
  344. package/dist/fields/DimensionsField.d.ts.map +1 -1
  345. package/dist/fields/DimensionsField.js +575 -146
  346. package/dist/fields/DimensionsField.js.map +1 -1
  347. package/dist/fields/FlexAlignmentField.d.ts +2 -2
  348. package/dist/fields/FlexAlignmentField.d.ts.map +1 -1
  349. package/dist/fields/FlexAlignmentField.js +189 -51
  350. package/dist/fields/FlexAlignmentField.js.map +1 -1
  351. package/dist/fields/FolderPickerField.d.ts +8 -1
  352. package/dist/fields/FolderPickerField.d.ts.map +1 -1
  353. package/dist/fields/FolderPickerField.js +288 -75
  354. package/dist/fields/FolderPickerField.js.map +1 -1
  355. package/dist/fields/GradientEditor.d.ts +2 -2
  356. package/dist/fields/GradientEditor.d.ts.map +1 -1
  357. package/dist/fields/GradientEditor.js +462 -86
  358. package/dist/fields/GradientEditor.js.map +1 -1
  359. package/dist/fields/LockedField.d.ts +15 -2
  360. package/dist/fields/LockedField.d.ts.map +1 -1
  361. package/dist/fields/LockedField.js +180 -49
  362. package/dist/fields/LockedField.js.map +1 -1
  363. package/dist/fields/MarginField.d.ts +2 -2
  364. package/dist/fields/MarginField.d.ts.map +1 -1
  365. package/dist/fields/MarginField.js +144 -46
  366. package/dist/fields/MarginField.js.map +1 -1
  367. package/dist/fields/MediaField.d.ts +1 -1
  368. package/dist/fields/MediaField.d.ts.map +1 -1
  369. package/dist/fields/MediaField.js +688 -186
  370. package/dist/fields/MediaField.js.map +1 -1
  371. package/dist/fields/PaddingField.d.ts +2 -2
  372. package/dist/fields/PaddingField.d.ts.map +1 -1
  373. package/dist/fields/PaddingField.js +144 -46
  374. package/dist/fields/PaddingField.js.map +1 -1
  375. package/dist/fields/PageSegmentField.d.ts +15 -2
  376. package/dist/fields/PageSegmentField.d.ts.map +1 -1
  377. package/dist/fields/PageSegmentField.js +156 -54
  378. package/dist/fields/PageSegmentField.js.map +1 -1
  379. package/dist/fields/ResetField.d.ts +1 -1
  380. package/dist/fields/ResetField.d.ts.map +1 -1
  381. package/dist/fields/ResetField.js +59 -31
  382. package/dist/fields/ResetField.js.map +1 -1
  383. package/dist/fields/ResponsiveField.d.ts +1 -1
  384. package/dist/fields/ResponsiveField.d.ts.map +1 -1
  385. package/dist/fields/ResponsiveField.js +233 -90
  386. package/dist/fields/ResponsiveField.js.map +1 -1
  387. package/dist/fields/ResponsiveVisibilityField.d.ts +2 -2
  388. package/dist/fields/ResponsiveVisibilityField.d.ts.map +1 -1
  389. package/dist/fields/ResponsiveVisibilityField.js +119 -36
  390. package/dist/fields/ResponsiveVisibilityField.js.map +1 -1
  391. package/dist/fields/SizeField.d.ts +3 -3
  392. package/dist/fields/SizeField.d.ts.map +1 -1
  393. package/dist/fields/SizeField.js +226 -52
  394. package/dist/fields/SizeField.js.map +1 -1
  395. package/dist/fields/SlugPreviewField.d.ts +8 -1
  396. package/dist/fields/SlugPreviewField.d.ts.map +1 -1
  397. package/dist/fields/SlugPreviewField.js +65 -16
  398. package/dist/fields/SlugPreviewField.js.map +1 -1
  399. package/dist/fields/TemplateField.d.ts +1 -1
  400. package/dist/fields/TemplateField.d.ts.map +1 -1
  401. package/dist/fields/TemplateField.js +362 -120
  402. package/dist/fields/TemplateField.js.map +1 -1
  403. package/dist/fields/TransformField.d.ts +2 -2
  404. package/dist/fields/TransformField.d.ts.map +1 -1
  405. package/dist/fields/TransformField.js +517 -81
  406. package/dist/fields/TransformField.js.map +1 -1
  407. package/dist/fields/VerticalAlignmentField.d.ts +1 -1
  408. package/dist/fields/VerticalAlignmentField.d.ts.map +1 -1
  409. package/dist/fields/VerticalAlignmentField.js +93 -30
  410. package/dist/fields/VerticalAlignmentField.js.map +1 -1
  411. package/dist/fields/WidthField.d.ts +2 -2
  412. package/dist/fields/WidthField.d.ts.map +1 -1
  413. package/dist/fields/WidthField.js +278 -81
  414. package/dist/fields/WidthField.js.map +1 -1
  415. package/dist/fields/index.d.ts +41 -41
  416. package/dist/fields/index.d.ts.map +1 -1
  417. package/dist/fields/index.js +37 -43
  418. package/dist/fields/index.js.map +1 -1
  419. package/dist/fields/richtext/controls/ColorPickerControl.d.ts +13 -2
  420. package/dist/fields/richtext/controls/ColorPickerControl.d.ts.map +1 -1
  421. package/dist/fields/richtext/controls/ColorPickerControl.js +212 -47
  422. package/dist/fields/richtext/controls/ColorPickerControl.js.map +1 -1
  423. package/dist/fields/richtext/controls/DropdownPortal.d.ts +2 -2
  424. package/dist/fields/richtext/controls/DropdownPortal.d.ts.map +1 -1
  425. package/dist/fields/richtext/controls/DropdownPortal.js +36 -4
  426. package/dist/fields/richtext/controls/DropdownPortal.js.map +1 -1
  427. package/dist/fields/richtext/controls/FontSizeControl.d.ts +9 -1
  428. package/dist/fields/richtext/controls/FontSizeControl.d.ts.map +1 -1
  429. package/dist/fields/richtext/controls/FontSizeControl.js +109 -24
  430. package/dist/fields/richtext/controls/FontSizeControl.js.map +1 -1
  431. package/dist/fields/richtext/controls/HighlightControl.d.ts +12 -1
  432. package/dist/fields/richtext/controls/HighlightControl.d.ts.map +1 -1
  433. package/dist/fields/richtext/controls/HighlightControl.js +54 -17
  434. package/dist/fields/richtext/controls/HighlightControl.js.map +1 -1
  435. package/dist/fields/richtext/controls/index.d.ts +5 -5
  436. package/dist/fields/richtext/controls/index.d.ts.map +1 -1
  437. package/dist/fields/richtext/controls/index.js +8 -11
  438. package/dist/fields/richtext/controls/index.js.map +1 -1
  439. package/dist/fields/richtext/controls/shared.js +108 -63
  440. package/dist/fields/richtext/controls/shared.js.map +1 -1
  441. package/dist/fields/richtext/createRichTextField.d.ts +18 -4
  442. package/dist/fields/richtext/createRichTextField.d.ts.map +1 -1
  443. package/dist/fields/richtext/createRichTextField.js +113 -26
  444. package/dist/fields/richtext/createRichTextField.js.map +1 -1
  445. package/dist/fields/richtext/extensions/FontSize.js +26 -20
  446. package/dist/fields/richtext/extensions/FontSize.js.map +1 -1
  447. package/dist/fields/richtext/extensions/index.d.ts +1 -1
  448. package/dist/fields/richtext/extensions/index.d.ts.map +1 -1
  449. package/dist/fields/richtext/extensions/index.js +2 -2
  450. package/dist/fields/richtext/extensions/index.js.map +1 -1
  451. package/dist/fields/richtext/index.d.ts +6 -6
  452. package/dist/fields/richtext/index.d.ts.map +1 -1
  453. package/dist/fields/richtext/index.js +8 -8
  454. package/dist/fields/richtext/index.js.map +1 -1
  455. package/dist/fields/shared.d.ts +1 -1
  456. package/dist/fields/shared.d.ts.map +1 -1
  457. package/dist/fields/shared.js +915 -478
  458. package/dist/fields/shared.js.map +1 -1
  459. package/dist/hooks/index.d.ts +2 -2
  460. package/dist/hooks/index.d.ts.map +1 -1
  461. package/dist/hooks/index.js +3 -3
  462. package/dist/hooks/index.js.map +1 -1
  463. package/dist/hooks/useResponsiveStyles.d.ts +1 -1
  464. package/dist/hooks/useResponsiveStyles.d.ts.map +1 -1
  465. package/dist/hooks/useResponsiveStyles.js +36 -32
  466. package/dist/hooks/useResponsiveStyles.js.map +1 -1
  467. package/dist/hooks/useScrollAnimation.js +26 -24
  468. package/dist/hooks/useScrollAnimation.js.map +1 -1
  469. package/dist/index.d.ts +4 -4
  470. package/dist/index.d.ts.map +1 -1
  471. package/dist/index.js +5 -5
  472. package/dist/index.js.map +1 -1
  473. package/dist/layouts/LayoutWrapper.d.ts +3 -3
  474. package/dist/layouts/LayoutWrapper.d.ts.map +1 -1
  475. package/dist/layouts/LayoutWrapper.js +115 -51
  476. package/dist/layouts/LayoutWrapper.js.map +1 -1
  477. package/dist/layouts/defaults.d.ts +1 -1
  478. package/dist/layouts/defaults.d.ts.map +1 -1
  479. package/dist/layouts/defaults.js +23 -31
  480. package/dist/layouts/defaults.js.map +1 -1
  481. package/dist/layouts/index.d.ts +4 -4
  482. package/dist/layouts/index.d.ts.map +1 -1
  483. package/dist/layouts/index.js +5 -4
  484. package/dist/layouts/index.js.map +1 -1
  485. package/dist/layouts/types.js +4 -2
  486. package/dist/layouts/types.js.map +1 -1
  487. package/dist/layouts/utils.d.ts +1 -1
  488. package/dist/layouts/utils.d.ts.map +1 -1
  489. package/dist/layouts/utils.js +32 -40
  490. package/dist/layouts/utils.js.map +1 -1
  491. package/dist/next/index.js +31 -34
  492. package/dist/next/index.js.map +1 -1
  493. package/dist/plugin/collections/Pages.d.ts +2 -2
  494. package/dist/plugin/collections/Pages.d.ts.map +1 -1
  495. package/dist/plugin/collections/Pages.js +46 -43
  496. package/dist/plugin/collections/Pages.js.map +1 -1
  497. package/dist/plugin/fields/index.d.ts +3 -3
  498. package/dist/plugin/fields/index.d.ts.map +1 -1
  499. package/dist/plugin/fields/index.js +100 -78
  500. package/dist/plugin/fields/index.js.map +1 -1
  501. package/dist/plugin/fields/types.d.ts +1 -1
  502. package/dist/plugin/fields/types.d.ts.map +1 -1
  503. package/dist/plugin/fields/types.js +26 -2
  504. package/dist/plugin/fields/types.js.map +1 -1
  505. package/dist/plugin/hooks/index.d.ts +1 -1
  506. package/dist/plugin/hooks/index.d.ts.map +1 -1
  507. package/dist/plugin/hooks/index.js +2 -2
  508. package/dist/plugin/hooks/index.js.map +1 -1
  509. package/dist/plugin/hooks/isHomepageUnique.js +28 -19
  510. package/dist/plugin/hooks/isHomepageUnique.js.map +1 -1
  511. package/dist/plugin/index.d.ts +8 -8
  512. package/dist/plugin/index.d.ts.map +1 -1
  513. package/dist/plugin/index.js +190 -188
  514. package/dist/plugin/index.js.map +1 -1
  515. package/dist/render/HybridPageRenderer.d.ts +2 -2
  516. package/dist/render/HybridPageRenderer.d.ts.map +1 -1
  517. package/dist/render/HybridPageRenderer.js +58 -10
  518. package/dist/render/HybridPageRenderer.js.map +1 -1
  519. package/dist/render/PageRenderer.d.ts +2 -2
  520. package/dist/render/PageRenderer.d.ts.map +1 -1
  521. package/dist/render/PageRenderer.js +31 -14
  522. package/dist/render/PageRenderer.js.map +1 -1
  523. package/dist/render/PuckEditor.client.d.ts +1 -1
  524. package/dist/render/PuckEditor.client.d.ts.map +1 -1
  525. package/dist/render/PuckEditor.client.js +33 -16
  526. package/dist/render/PuckEditor.client.js.map +1 -1
  527. package/dist/render/index.d.ts +5 -5
  528. package/dist/render/index.d.ts.map +1 -1
  529. package/dist/render/index.js +5 -6
  530. package/dist/render/index.js.map +1 -1
  531. package/dist/styles/puck-dark-mode.css +101 -0
  532. package/dist/theme/context.d.ts +2 -2
  533. package/dist/theme/context.d.ts.map +1 -1
  534. package/dist/theme/context.js +21 -18
  535. package/dist/theme/context.js.map +1 -1
  536. package/dist/theme/defaults.d.ts +1 -1
  537. package/dist/theme/defaults.d.ts.map +1 -1
  538. package/dist/theme/defaults.js +83 -37
  539. package/dist/theme/defaults.js.map +1 -1
  540. package/dist/theme/example.d.ts +1 -1
  541. package/dist/theme/example.d.ts.map +1 -1
  542. package/dist/theme/example.js +68 -30
  543. package/dist/theme/example.js.map +1 -1
  544. package/dist/theme/index.d.ts +5 -5
  545. package/dist/theme/index.d.ts.map +1 -1
  546. package/dist/theme/index.js +6 -5
  547. package/dist/theme/index.js.map +1 -1
  548. package/dist/theme/types.js +6 -2
  549. package/dist/theme/types.js.map +1 -1
  550. package/dist/theme/utils.d.ts +1 -1
  551. package/dist/theme/utils.d.ts.map +1 -1
  552. package/dist/theme/utils.js +24 -25
  553. package/dist/theme/utils.js.map +1 -1
  554. package/dist/types/index.d.ts +6 -6
  555. package/dist/types/index.d.ts.map +1 -1
  556. package/dist/types/index.js +3 -1
  557. package/dist/types/index.js.map +1 -1
  558. package/dist/utils/index.d.ts +2 -2
  559. package/dist/utils/index.d.ts.map +1 -1
  560. package/dist/utils/index.js +13 -22
  561. package/dist/utils/index.js.map +1 -1
  562. package/dist/utils/migration.d.ts +1 -1
  563. package/dist/utils/migration.d.ts.map +1 -1
  564. package/dist/utils/migration.js +43 -49
  565. package/dist/utils/migration.js.map +1 -1
  566. package/dist/utils/validation.d.ts +1 -1
  567. package/dist/utils/validation.d.ts.map +1 -1
  568. package/dist/utils/validation.js +36 -43
  569. package/dist/utils/validation.js.map +1 -1
  570. package/dist/version.d.ts +1 -1
  571. package/dist/version.js +2 -1
  572. package/dist/version.js.map +1 -1
  573. package/dist/views/PuckConfigContext.d.ts +1 -1
  574. package/dist/views/PuckConfigContext.d.ts.map +1 -1
  575. package/dist/views/PuckConfigContext.js +25 -10
  576. package/dist/views/PuckConfigContext.js.map +1 -1
  577. package/dist/views/PuckEditorView.d.ts +1 -1
  578. package/dist/views/PuckEditorView.d.ts.map +1 -1
  579. package/dist/views/PuckEditorView.js +106 -38
  580. package/dist/views/PuckEditorView.js.map +1 -1
  581. package/dist/views/index.js +2 -2
  582. package/dist/views/index.js.map +1 -1
  583. package/package.json +62 -42
@@ -5,8 +5,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
5
5
  *
6
6
  * This component provides a media picker that integrates with Payload's
7
7
  * media collection, allowing users to browse and select images.
8
- */
9
- import { useState, useEffect, useCallback, memo } from 'react';
8
+ */ import React, { useState, useEffect, useCallback, memo } from 'react';
10
9
  import { Image, X, Search, Loader2, Upload, AlertCircle, Link } from 'lucide-react';
11
10
  // =============================================================================
12
11
  // Styles
@@ -17,22 +16,22 @@ const styles = {
17
16
  fontSize: '14px',
18
17
  fontWeight: 500,
19
18
  color: 'var(--theme-elevation-700)',
20
- marginBottom: '8px',
19
+ marginBottom: '8px'
21
20
  },
22
21
  previewContainer: {
23
22
  display: 'flex',
24
23
  alignItems: 'flex-start',
25
- gap: '16px',
24
+ gap: '16px'
26
25
  },
27
26
  imagePreview: {
28
- position: 'relative',
27
+ position: 'relative'
29
28
  },
30
29
  previewImage: {
31
30
  width: '96px',
32
31
  height: '96px',
33
32
  objectFit: 'cover',
34
33
  borderRadius: '6px',
35
- border: '1px solid var(--theme-elevation-200)',
34
+ border: '1px solid var(--theme-elevation-200)'
36
35
  },
37
36
  removeButton: {
38
37
  position: 'absolute',
@@ -45,7 +44,7 @@ const styles = {
45
44
  border: 'none',
46
45
  cursor: 'pointer',
47
46
  opacity: 0,
48
- transition: 'opacity 0.15s',
47
+ transition: 'opacity 0.15s'
49
48
  },
50
49
  placeholder: {
51
50
  width: '96px',
@@ -55,12 +54,12 @@ const styles = {
55
54
  border: '1px dashed var(--theme-elevation-300)',
56
55
  display: 'flex',
57
56
  alignItems: 'center',
58
- justifyContent: 'center',
57
+ justifyContent: 'center'
59
58
  },
60
59
  actionsColumn: {
61
60
  display: 'flex',
62
61
  flexDirection: 'column',
63
- gap: '8px',
62
+ gap: '8px'
64
63
  },
65
64
  buttonOutline: {
66
65
  display: 'inline-flex',
@@ -74,7 +73,7 @@ const styles = {
74
73
  border: '1px solid var(--theme-elevation-300)',
75
74
  borderRadius: '6px',
76
75
  cursor: 'pointer',
77
- transition: 'background-color 0.15s',
76
+ transition: 'background-color 0.15s'
78
77
  },
79
78
  buttonGhost: {
80
79
  display: 'inline-flex',
@@ -88,7 +87,7 @@ const styles = {
88
87
  border: 'none',
89
88
  borderRadius: '6px',
90
89
  cursor: 'pointer',
91
- transition: 'background-color 0.15s',
90
+ transition: 'background-color 0.15s'
92
91
  },
93
92
  buttonPrimary: {
94
93
  display: 'inline-flex',
@@ -102,11 +101,11 @@ const styles = {
102
101
  border: 'none',
103
102
  borderRadius: '6px',
104
103
  cursor: 'pointer',
105
- transition: 'background-color 0.15s',
104
+ transition: 'background-color 0.15s'
106
105
  },
107
106
  buttonDisabled: {
108
107
  opacity: 0.5,
109
- cursor: 'not-allowed',
108
+ cursor: 'not-allowed'
110
109
  },
111
110
  urlDisplay: {
112
111
  display: 'flex',
@@ -114,7 +113,7 @@ const styles = {
114
113
  gap: '6px',
115
114
  fontSize: '12px',
116
115
  color: 'var(--theme-elevation-500)',
117
- marginTop: '8px',
116
+ marginTop: '8px'
118
117
  },
119
118
  // Dialog styles
120
119
  dialogOverlay: {
@@ -124,7 +123,7 @@ const styles = {
124
123
  backgroundColor: 'rgba(0, 0, 0, 0.5)',
125
124
  display: 'flex',
126
125
  alignItems: 'center',
127
- justifyContent: 'center',
126
+ justifyContent: 'center'
128
127
  },
129
128
  dialogContent: {
130
129
  backgroundColor: 'var(--theme-bg)',
@@ -136,7 +135,7 @@ const styles = {
136
135
  margin: '16px',
137
136
  display: 'flex',
138
137
  flexDirection: 'column',
139
- overflow: 'hidden',
138
+ overflow: 'hidden'
140
139
  },
141
140
  dialogHeader: {
142
141
  padding: '16px 20px',
@@ -144,13 +143,13 @@ const styles = {
144
143
  display: 'flex',
145
144
  alignItems: 'center',
146
145
  justifyContent: 'space-between',
147
- flexShrink: 0,
146
+ flexShrink: 0
148
147
  },
149
148
  dialogTitle: {
150
149
  fontSize: '18px',
151
150
  fontWeight: 600,
152
151
  color: 'var(--theme-elevation-900)',
153
- margin: 0,
152
+ margin: 0
154
153
  },
155
154
  closeButton: {
156
155
  padding: '4px',
@@ -161,14 +160,14 @@ const styles = {
161
160
  borderRadius: '4px',
162
161
  display: 'flex',
163
162
  alignItems: 'center',
164
- justifyContent: 'center',
163
+ justifyContent: 'center'
165
164
  },
166
165
  tabBar: {
167
166
  display: 'flex',
168
167
  flexWrap: 'wrap',
169
168
  borderBottom: '1px solid var(--theme-elevation-200)',
170
169
  padding: '0 20px',
171
- flexShrink: 0,
170
+ flexShrink: 0
172
171
  },
173
172
  tabButton: {
174
173
  padding: '12px 16px',
@@ -181,16 +180,16 @@ const styles = {
181
180
  borderBottomColor: 'transparent',
182
181
  cursor: 'pointer',
183
182
  transition: 'color 0.15s, border-color 0.15s',
184
- color: 'var(--theme-elevation-500)',
183
+ color: 'var(--theme-elevation-500)'
185
184
  },
186
185
  tabButtonActive: {
187
186
  color: 'var(--theme-elevation-900)',
188
- borderBottomColor: 'var(--theme-elevation-900)',
187
+ borderBottomColor: 'var(--theme-elevation-900)'
189
188
  },
190
189
  searchContainer: {
191
190
  padding: '16px 20px',
192
191
  position: 'relative',
193
- flexShrink: 0,
192
+ flexShrink: 0
194
193
  },
195
194
  searchInput: {
196
195
  width: '100%',
@@ -198,7 +197,7 @@ const styles = {
198
197
  fontSize: '14px',
199
198
  border: '1px solid var(--theme-elevation-300)',
200
199
  borderRadius: '6px',
201
- outline: 'none',
200
+ outline: 'none'
202
201
  },
203
202
  searchIcon: {
204
203
  position: 'absolute',
@@ -206,17 +205,17 @@ const styles = {
206
205
  top: '50%',
207
206
  transform: 'translateY(-50%)',
208
207
  color: 'var(--theme-elevation-400)',
209
- pointerEvents: 'none',
208
+ pointerEvents: 'none'
210
209
  },
211
210
  contentArea: {
212
211
  flex: 1,
213
212
  overflowY: 'auto',
214
- padding: '16px 20px',
213
+ padding: '16px 20px'
215
214
  },
216
215
  mediaGrid: {
217
216
  display: 'grid',
218
217
  gridTemplateColumns: 'repeat(auto-fill, minmax(80px, 1fr))',
219
- gap: '12px',
218
+ gap: '12px'
220
219
  },
221
220
  mediaItem: {
222
221
  position: 'relative',
@@ -226,16 +225,16 @@ const styles = {
226
225
  border: '2px solid var(--theme-elevation-200)',
227
226
  cursor: 'pointer',
228
227
  transition: 'border-color 0.15s, box-shadow 0.15s',
229
- backgroundColor: 'var(--theme-elevation-100)',
228
+ backgroundColor: 'var(--theme-elevation-100)'
230
229
  },
231
230
  mediaItemSelected: {
232
231
  borderColor: 'var(--theme-elevation-900)',
233
- boxShadow: '0 0 0 2px var(--theme-elevation-200)',
232
+ boxShadow: '0 0 0 2px var(--theme-elevation-200)'
234
233
  },
235
234
  mediaItemImage: {
236
235
  width: '100%',
237
236
  height: '100%',
238
- objectFit: 'cover',
237
+ objectFit: 'cover'
239
238
  },
240
239
  mediaItemAlt: {
241
240
  position: 'absolute',
@@ -248,25 +247,25 @@ const styles = {
248
247
  padding: '4px',
249
248
  overflow: 'hidden',
250
249
  textOverflow: 'ellipsis',
251
- whiteSpace: 'nowrap',
250
+ whiteSpace: 'nowrap'
252
251
  },
253
252
  loadMoreContainer: {
254
253
  display: 'flex',
255
254
  justifyContent: 'center',
256
- marginTop: '16px',
255
+ marginTop: '16px'
257
256
  },
258
257
  emptyState: {
259
258
  display: 'flex',
260
259
  alignItems: 'center',
261
260
  justifyContent: 'center',
262
261
  height: '200px',
263
- color: 'var(--theme-elevation-500)',
262
+ color: 'var(--theme-elevation-500)'
264
263
  },
265
264
  skeleton: {
266
265
  backgroundColor: 'var(--theme-elevation-200)',
267
266
  borderRadius: '6px',
268
267
  aspectRatio: '1',
269
- animation: 'pulse 2s infinite',
268
+ animation: 'pulse 2s infinite'
270
269
  },
271
270
  uploadContainer: {
272
271
  display: 'flex',
@@ -274,33 +273,33 @@ const styles = {
274
273
  alignItems: 'center',
275
274
  justifyContent: 'center',
276
275
  minHeight: '300px',
277
- padding: '20px',
276
+ padding: '20px'
278
277
  },
279
278
  uploadPreview: {
280
279
  width: '100%',
281
280
  maxWidth: '448px',
282
281
  display: 'flex',
283
282
  flexDirection: 'column',
284
- gap: '16px',
283
+ gap: '16px'
285
284
  },
286
285
  uploadImageContainer: {
287
286
  position: 'relative',
288
287
  aspectRatio: '16/9',
289
288
  backgroundColor: 'var(--theme-elevation-100)',
290
289
  borderRadius: '8px',
291
- overflow: 'hidden',
290
+ overflow: 'hidden'
292
291
  },
293
292
  uploadImage: {
294
293
  width: '100%',
295
294
  height: '100%',
296
- objectFit: 'contain',
295
+ objectFit: 'contain'
297
296
  },
298
297
  uploadMeta: {
299
298
  fontSize: '14px',
300
299
  color: 'var(--theme-elevation-500)',
301
300
  display: 'flex',
302
301
  flexDirection: 'column',
303
- gap: '4px',
302
+ gap: '4px'
304
303
  },
305
304
  errorBox: {
306
305
  padding: '12px',
@@ -311,50 +310,50 @@ const styles = {
311
310
  fontSize: '14px',
312
311
  display: 'flex',
313
312
  alignItems: 'flex-start',
314
- gap: '8px',
313
+ gap: '8px'
315
314
  },
316
315
  actionsRow: {
317
316
  display: 'flex',
318
- gap: '8px',
317
+ gap: '8px'
319
318
  },
320
319
  dropZone: {
321
- textAlign: 'center',
320
+ textAlign: 'center'
322
321
  },
323
322
  dropZoneIcon: {
324
323
  width: '64px',
325
324
  height: '64px',
326
325
  color: 'var(--theme-elevation-300)',
327
- margin: '0 auto 16px',
326
+ margin: '0 auto 16px'
328
327
  },
329
328
  hiddenInput: {
330
- display: 'none',
329
+ display: 'none'
331
330
  },
332
331
  urlContainer: {
333
332
  width: '100%',
334
333
  maxWidth: '448px',
335
334
  display: 'flex',
336
335
  flexDirection: 'column',
337
- gap: '16px',
336
+ gap: '16px'
338
337
  },
339
338
  urlIntro: {
340
339
  textAlign: 'center',
341
- marginBottom: '24px',
340
+ marginBottom: '24px'
342
341
  },
343
342
  urlIcon: {
344
343
  width: '48px',
345
344
  height: '48px',
346
345
  color: 'var(--theme-elevation-400)',
347
- margin: '0 auto 8px',
346
+ margin: '0 auto 8px'
348
347
  },
349
348
  inputGroup: {
350
349
  display: 'flex',
351
350
  flexDirection: 'column',
352
- gap: '8px',
351
+ gap: '8px'
353
352
  },
354
353
  inputLabel: {
355
354
  fontSize: '14px',
356
355
  fontWeight: 500,
357
- color: 'var(--theme-elevation-700)',
356
+ color: 'var(--theme-elevation-700)'
358
357
  },
359
358
  input: {
360
359
  width: '100%',
@@ -362,7 +361,7 @@ const styles = {
362
361
  fontSize: '14px',
363
362
  border: '1px solid var(--theme-elevation-300)',
364
363
  borderRadius: '6px',
365
- outline: 'none',
364
+ outline: 'none'
366
365
  },
367
366
  previewLoading: {
368
367
  position: 'absolute',
@@ -370,34 +369,31 @@ const styles = {
370
369
  display: 'flex',
371
370
  alignItems: 'center',
372
371
  justifyContent: 'center',
373
- backgroundColor: 'var(--theme-elevation-100)',
372
+ backgroundColor: 'var(--theme-elevation-100)'
374
373
  },
375
374
  icon: {
376
375
  width: '16px',
377
- height: '16px',
376
+ height: '16px'
378
377
  },
379
378
  iconSmall: {
380
379
  width: '12px',
381
380
  height: '12px',
382
- flexShrink: 0,
383
- },
381
+ flexShrink: 0
382
+ }
384
383
  };
385
384
  // =============================================================================
386
385
  // Utility Functions
387
386
  // =============================================================================
388
387
  function formatFileSize(bytes) {
389
- if (!bytes)
390
- return 'Unknown';
391
- if (bytes < 1024)
392
- return `${bytes} B`;
393
- if (bytes < 1024 * 1024)
394
- return `${(bytes / 1024).toFixed(1)} KB`;
388
+ if (!bytes) return 'Unknown';
389
+ if (bytes < 1024) return `${bytes} B`;
390
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
395
391
  return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
396
392
  }
397
393
  // =============================================================================
398
394
  // MediaField Component
399
395
  // =============================================================================
400
- function MediaFieldInner({ value, onChange, label, readOnly, apiEndpoint = '/api/media', }) {
396
+ function MediaFieldInner({ value, onChange, label, readOnly, apiEndpoint = '/api/media' }) {
401
397
  const [isOpen, setIsOpen] = useState(false);
402
398
  const [mediaList, setMediaList] = useState([]);
403
399
  const [loading, setLoading] = useState(false);
@@ -411,159 +407,198 @@ function MediaFieldInner({ value, onChange, label, readOnly, apiEndpoint = '/api
411
407
  file: null,
412
408
  preview: null,
413
409
  uploading: false,
414
- error: null,
410
+ error: null
415
411
  });
416
412
  const [urlState, setUrlState] = useState({
417
413
  url: '',
418
414
  loading: false,
419
415
  error: null,
420
- previewLoaded: false,
416
+ previewLoaded: false
421
417
  });
422
418
  // Fetch media from Payload API
423
- const fetchMedia = useCallback(async (searchTerm = '', pageNum = 1) => {
419
+ const fetchMedia = useCallback(async (searchTerm = '', pageNum = 1)=>{
424
420
  setLoading(true);
425
421
  try {
426
422
  const params = new URLSearchParams({
427
423
  limit: '24',
428
424
  page: pageNum.toString(),
429
- sort: '-createdAt',
425
+ sort: '-createdAt'
430
426
  });
431
427
  params.set('where[mimeType][contains]', 'image');
432
428
  if (searchTerm) {
433
429
  params.set('where[alt][contains]', searchTerm);
434
430
  }
435
431
  const response = await fetch(`${apiEndpoint}?${params}`);
436
- if (!response.ok)
437
- throw new Error('Failed to fetch media');
432
+ if (!response.ok) throw new Error('Failed to fetch media');
438
433
  const data = await response.json();
439
- const items = (data.docs || []).map((doc) => ({
440
- id: doc.id,
441
- url: doc.url || '',
442
- alt: doc.alt || '',
443
- filename: doc.filename || '',
444
- width: doc.width,
445
- height: doc.height,
446
- mimeType: doc.mimeType || '',
447
- }));
434
+ const items = (data.docs || []).map((doc)=>({
435
+ id: doc.id,
436
+ url: doc.url || '',
437
+ alt: doc.alt || '',
438
+ filename: doc.filename || '',
439
+ width: doc.width,
440
+ height: doc.height,
441
+ mimeType: doc.mimeType || ''
442
+ }));
448
443
  if (pageNum === 1) {
449
444
  setMediaList(items);
450
- }
451
- else {
452
- setMediaList((prev) => [...prev, ...items]);
445
+ } else {
446
+ setMediaList((prev)=>[
447
+ ...prev,
448
+ ...items
449
+ ]);
453
450
  }
454
451
  setHasMore(data.hasNextPage || false);
455
- }
456
- catch (error) {
452
+ } catch (error) {
457
453
  console.error('Error fetching media:', error);
458
- }
459
- finally {
454
+ } finally{
460
455
  setLoading(false);
461
456
  }
462
- }, [apiEndpoint]);
457
+ }, [
458
+ apiEndpoint
459
+ ]);
463
460
  // Load media when dialog opens
464
- useEffect(() => {
461
+ useEffect(()=>{
465
462
  if (isOpen) {
466
463
  setPage(1);
467
464
  fetchMedia(searchQuery, 1);
468
465
  }
469
- }, [isOpen, fetchMedia, searchQuery]);
466
+ }, [
467
+ isOpen,
468
+ fetchMedia,
469
+ searchQuery
470
+ ]);
470
471
  // Handle search with debounce
471
- useEffect(() => {
472
- if (!isOpen)
473
- return;
474
- const timer = setTimeout(() => {
472
+ useEffect(()=>{
473
+ if (!isOpen) return;
474
+ const timer = setTimeout(()=>{
475
475
  setPage(1);
476
476
  fetchMedia(searchQuery, 1);
477
477
  }, 300);
478
- return () => clearTimeout(timer);
479
- }, [searchQuery, isOpen, fetchMedia]);
478
+ return ()=>clearTimeout(timer);
479
+ }, [
480
+ searchQuery,
481
+ isOpen,
482
+ fetchMedia
483
+ ]);
480
484
  // Handle media selection
481
- const handleSelect = (item) => {
485
+ const handleSelect = (item)=>{
482
486
  onChange({
483
487
  id: item.id,
484
488
  url: item.url,
485
489
  alt: item.alt,
486
490
  width: item.width,
487
- height: item.height,
491
+ height: item.height
488
492
  });
489
493
  setIsOpen(false);
490
494
  };
491
495
  // Handle remove
492
- const handleRemove = () => {
496
+ const handleRemove = ()=>{
493
497
  onChange(null);
494
498
  };
495
499
  // Load more
496
- const handleLoadMore = () => {
500
+ const handleLoadMore = ()=>{
497
501
  const nextPage = page + 1;
498
502
  setPage(nextPage);
499
503
  fetchMedia(searchQuery, nextPage);
500
504
  };
501
505
  // Reset upload state
502
- const resetUploadState = useCallback(() => {
503
- setUploadState((prev) => {
504
- if (prev.preview)
505
- URL.revokeObjectURL(prev.preview);
506
- return { file: null, preview: null, uploading: false, error: null };
506
+ const resetUploadState = useCallback(()=>{
507
+ setUploadState((prev)=>{
508
+ if (prev.preview) URL.revokeObjectURL(prev.preview);
509
+ return {
510
+ file: null,
511
+ preview: null,
512
+ uploading: false,
513
+ error: null
514
+ };
507
515
  });
508
516
  }, []);
509
517
  // Reset URL state
510
- const resetUrlState = useCallback(() => {
511
- setUrlState({ url: '', loading: false, error: null, previewLoaded: false });
518
+ const resetUrlState = useCallback(()=>{
519
+ setUrlState({
520
+ url: '',
521
+ loading: false,
522
+ error: null,
523
+ previewLoaded: false
524
+ });
512
525
  }, []);
513
526
  // Handle URL submission
514
- const handleUrlSubmit = useCallback(() => {
527
+ const handleUrlSubmit = useCallback(()=>{
515
528
  const url = urlState.url.trim();
516
529
  if (!url) {
517
- setUrlState((prev) => ({ ...prev, error: 'Please enter a URL' }));
530
+ setUrlState((prev)=>({
531
+ ...prev,
532
+ error: 'Please enter a URL'
533
+ }));
518
534
  return;
519
535
  }
520
536
  try {
521
537
  new URL(url);
522
- }
523
- catch {
524
- setUrlState((prev) => ({ ...prev, error: 'Please enter a valid URL' }));
538
+ } catch {
539
+ setUrlState((prev)=>({
540
+ ...prev,
541
+ error: 'Please enter a valid URL'
542
+ }));
525
543
  return;
526
544
  }
527
545
  onChange({
528
546
  id: `external-${Date.now()}`,
529
547
  url: url,
530
- alt: '',
548
+ alt: ''
531
549
  });
532
550
  setIsOpen(false);
533
551
  resetUrlState();
534
- }, [urlState.url, onChange, resetUrlState]);
535
- const handleUrlPreviewLoad = useCallback(() => {
536
- setUrlState((prev) => ({ ...prev, previewLoaded: true, error: null }));
552
+ }, [
553
+ urlState.url,
554
+ onChange,
555
+ resetUrlState
556
+ ]);
557
+ const handleUrlPreviewLoad = useCallback(()=>{
558
+ setUrlState((prev)=>({
559
+ ...prev,
560
+ previewLoaded: true,
561
+ error: null
562
+ }));
537
563
  }, []);
538
- const handleUrlPreviewError = useCallback(() => {
539
- setUrlState((prev) => ({
540
- ...prev,
541
- previewLoaded: false,
542
- error: 'Unable to load image from this URL',
543
- }));
564
+ const handleUrlPreviewError = useCallback(()=>{
565
+ setUrlState((prev)=>({
566
+ ...prev,
567
+ previewLoaded: false,
568
+ error: 'Unable to load image from this URL'
569
+ }));
544
570
  }, []);
545
571
  // Handle file selection
546
- const handleFileSelect = useCallback((e) => {
572
+ const handleFileSelect = useCallback((e)=>{
547
573
  const file = e.target.files?.[0];
548
- if (!file)
549
- return;
574
+ if (!file) return;
550
575
  if (!file.type.startsWith('image/')) {
551
- setUploadState((prev) => ({ ...prev, error: 'Only image files are allowed' }));
576
+ setUploadState((prev)=>({
577
+ ...prev,
578
+ error: 'Only image files are allowed'
579
+ }));
552
580
  return;
553
581
  }
554
- setUploadState((prev) => {
555
- if (prev.preview)
556
- URL.revokeObjectURL(prev.preview);
582
+ setUploadState((prev)=>{
583
+ if (prev.preview) URL.revokeObjectURL(prev.preview);
557
584
  return prev;
558
585
  });
559
586
  const preview = URL.createObjectURL(file);
560
- setUploadState({ file, preview, uploading: false, error: null });
587
+ setUploadState({
588
+ file,
589
+ preview,
590
+ uploading: false,
591
+ error: null
592
+ });
561
593
  }, []);
562
594
  // Handle upload
563
- const handleUpload = useCallback(async () => {
564
- if (!uploadState.file)
565
- return;
566
- setUploadState((prev) => ({ ...prev, uploading: true, error: null }));
595
+ const handleUpload = useCallback(async ()=>{
596
+ if (!uploadState.file) return;
597
+ setUploadState((prev)=>({
598
+ ...prev,
599
+ uploading: true,
600
+ error: null
601
+ }));
567
602
  try {
568
603
  const formData = new FormData();
569
604
  formData.append('file', uploadState.file);
@@ -571,10 +606,12 @@ function MediaFieldInner({ value, onChange, label, readOnly, apiEndpoint = '/api
571
606
  formData.append('alt', altText);
572
607
  const response = await fetch(apiEndpoint, {
573
608
  method: 'POST',
574
- body: formData,
609
+ body: formData
575
610
  });
576
611
  if (!response.ok) {
577
- const error = await response.json().catch(() => ({ message: 'Upload failed' }));
612
+ const error = await response.json().catch(()=>({
613
+ message: 'Upload failed'
614
+ }));
578
615
  throw new Error(error.message || error.errors?.[0]?.message || 'Upload failed');
579
616
  }
580
617
  const data = await response.json();
@@ -584,97 +621,562 @@ function MediaFieldInner({ value, onChange, label, readOnly, apiEndpoint = '/api
584
621
  url: doc.url,
585
622
  alt: doc.alt,
586
623
  width: doc.width,
587
- height: doc.height,
624
+ height: doc.height
588
625
  });
589
626
  setIsOpen(false);
590
627
  resetUploadState();
628
+ } catch (error) {
629
+ setUploadState((prev)=>({
630
+ ...prev,
631
+ uploading: false,
632
+ error: error instanceof Error ? error.message : 'Upload failed'
633
+ }));
591
634
  }
592
- catch (error) {
593
- setUploadState((prev) => ({
594
- ...prev,
595
- uploading: false,
596
- error: error instanceof Error ? error.message : 'Upload failed',
597
- }));
598
- }
599
- }, [uploadState.file, apiEndpoint, onChange, resetUploadState]);
635
+ }, [
636
+ uploadState.file,
637
+ apiEndpoint,
638
+ onChange,
639
+ resetUploadState
640
+ ]);
600
641
  // Handle dialog close
601
- const handleDialogClose = useCallback(() => {
642
+ const handleDialogClose = useCallback(()=>{
602
643
  setIsOpen(false);
603
644
  resetUploadState();
604
645
  resetUrlState();
605
646
  setActiveTab('browse');
606
- }, [resetUploadState, resetUrlState]);
647
+ }, [
648
+ resetUploadState,
649
+ resetUrlState
650
+ ]);
607
651
  // Handle escape key
608
- useEffect(() => {
609
- if (!isOpen)
610
- return;
611
- const handleEscape = (e) => {
652
+ useEffect(()=>{
653
+ if (!isOpen) return;
654
+ const handleEscape = (e)=>{
612
655
  if (e.key === 'Escape') {
613
656
  handleDialogClose();
614
657
  }
615
658
  };
616
659
  document.addEventListener('keydown', handleEscape);
617
- return () => document.removeEventListener('keydown', handleEscape);
618
- }, [isOpen, handleDialogClose]);
619
- return (_jsxs("div", { className: "puck-field", children: [label && _jsx("label", { style: styles.label, children: label }), _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: '8px' }, children: [_jsxs("div", { style: styles.previewContainer, children: [value?.url ? (_jsxs("div", { style: styles.imagePreview, onMouseEnter: () => setPreviewHovered(true), onMouseLeave: () => setPreviewHovered(false), children: [_jsx("img", { src: value.url, alt: value.alt || '', style: styles.previewImage }), !readOnly && (_jsx("button", { type: "button", onClick: handleRemove, style: {
660
+ return ()=>document.removeEventListener('keydown', handleEscape);
661
+ }, [
662
+ isOpen,
663
+ handleDialogClose
664
+ ]);
665
+ return /*#__PURE__*/ _jsxs("div", {
666
+ className: "puck-field",
667
+ children: [
668
+ label && /*#__PURE__*/ _jsx("label", {
669
+ style: styles.label,
670
+ children: label
671
+ }),
672
+ /*#__PURE__*/ _jsxs("div", {
673
+ style: {
674
+ display: 'flex',
675
+ flexDirection: 'column',
676
+ gap: '8px'
677
+ },
678
+ children: [
679
+ /*#__PURE__*/ _jsxs("div", {
680
+ style: styles.previewContainer,
681
+ children: [
682
+ value?.url ? /*#__PURE__*/ _jsxs("div", {
683
+ style: styles.imagePreview,
684
+ onMouseEnter: ()=>setPreviewHovered(true),
685
+ onMouseLeave: ()=>setPreviewHovered(false),
686
+ children: [
687
+ /*#__PURE__*/ _jsx("img", {
688
+ src: value.url,
689
+ alt: value.alt || '',
690
+ style: styles.previewImage
691
+ }),
692
+ !readOnly && /*#__PURE__*/ _jsx("button", {
693
+ type: "button",
694
+ onClick: handleRemove,
695
+ style: {
620
696
  ...styles.removeButton,
621
- opacity: previewHovered ? 1 : 0,
622
- }, "aria-label": "Remove image", children: _jsx(X, { style: styles.iconSmall }) }))] })) : (_jsx("div", { style: styles.placeholder, children: _jsx(Image, { style: { width: '32px', height: '32px', color: 'var(--theme-elevation-400)' } }) })), !readOnly && (_jsxs("div", { style: styles.actionsColumn, children: [_jsx("button", { type: "button", onClick: () => setIsOpen(true), style: styles.buttonOutline, children: value ? 'Change Image' : 'Select Image' }), value && (_jsx("button", { type: "button", onClick: handleRemove, style: styles.buttonGhost, children: "Remove" }))] }))] }), value?.url && (_jsxs("div", { style: styles.urlDisplay, children: [_jsx(Link, { style: styles.iconSmall }), _jsx("span", { style: { overflow: 'hidden', textOverflow: 'ellipsis', maxWidth: '280px' }, title: value.url, children: value.url })] }))] }), isOpen && (_jsx("div", { style: styles.dialogOverlay, onClick: handleDialogClose, children: _jsxs("div", { style: styles.dialogContent, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { style: styles.dialogHeader, children: [_jsx("h2", { style: styles.dialogTitle, children: "Select Media" }), _jsx("button", { type: "button", onClick: handleDialogClose, style: styles.closeButton, children: _jsx(X, { style: styles.icon }) })] }), _jsxs("div", { style: styles.tabBar, children: [_jsx("button", { type: "button", onClick: () => setActiveTab('browse'), style: {
697
+ opacity: previewHovered ? 1 : 0
698
+ },
699
+ "aria-label": "Remove image",
700
+ children: /*#__PURE__*/ _jsx(X, {
701
+ style: styles.iconSmall
702
+ })
703
+ })
704
+ ]
705
+ }) : /*#__PURE__*/ _jsx("div", {
706
+ style: styles.placeholder,
707
+ children: /*#__PURE__*/ _jsx(Image, {
708
+ style: {
709
+ width: '32px',
710
+ height: '32px',
711
+ color: 'var(--theme-elevation-400)'
712
+ }
713
+ })
714
+ }),
715
+ !readOnly && /*#__PURE__*/ _jsxs("div", {
716
+ style: styles.actionsColumn,
717
+ children: [
718
+ /*#__PURE__*/ _jsx("button", {
719
+ type: "button",
720
+ onClick: ()=>setIsOpen(true),
721
+ style: styles.buttonOutline,
722
+ children: value ? 'Change Image' : 'Select Image'
723
+ }),
724
+ value && /*#__PURE__*/ _jsx("button", {
725
+ type: "button",
726
+ onClick: handleRemove,
727
+ style: styles.buttonGhost,
728
+ children: "Remove"
729
+ })
730
+ ]
731
+ })
732
+ ]
733
+ }),
734
+ value?.url && /*#__PURE__*/ _jsxs("div", {
735
+ style: styles.urlDisplay,
736
+ children: [
737
+ /*#__PURE__*/ _jsx(Link, {
738
+ style: styles.iconSmall
739
+ }),
740
+ /*#__PURE__*/ _jsx("span", {
741
+ style: {
742
+ overflow: 'hidden',
743
+ textOverflow: 'ellipsis',
744
+ maxWidth: '280px'
745
+ },
746
+ title: value.url,
747
+ children: value.url
748
+ })
749
+ ]
750
+ })
751
+ ]
752
+ }),
753
+ isOpen && /*#__PURE__*/ _jsx("div", {
754
+ style: styles.dialogOverlay,
755
+ onClick: handleDialogClose,
756
+ children: /*#__PURE__*/ _jsxs("div", {
757
+ style: styles.dialogContent,
758
+ onClick: (e)=>e.stopPropagation(),
759
+ children: [
760
+ /*#__PURE__*/ _jsxs("div", {
761
+ style: styles.dialogHeader,
762
+ children: [
763
+ /*#__PURE__*/ _jsx("h2", {
764
+ style: styles.dialogTitle,
765
+ children: "Select Media"
766
+ }),
767
+ /*#__PURE__*/ _jsx("button", {
768
+ type: "button",
769
+ onClick: handleDialogClose,
770
+ style: styles.closeButton,
771
+ children: /*#__PURE__*/ _jsx(X, {
772
+ style: styles.icon
773
+ })
774
+ })
775
+ ]
776
+ }),
777
+ /*#__PURE__*/ _jsxs("div", {
778
+ style: styles.tabBar,
779
+ children: [
780
+ /*#__PURE__*/ _jsx("button", {
781
+ type: "button",
782
+ onClick: ()=>setActiveTab('browse'),
783
+ style: {
623
784
  ...styles.tabButton,
624
- ...(activeTab === 'browse' ? styles.tabButtonActive : {}),
625
- }, children: "Browse Library" }), _jsx("button", { type: "button", onClick: () => setActiveTab('upload'), style: {
785
+ ...activeTab === 'browse' ? styles.tabButtonActive : {}
786
+ },
787
+ children: "Browse Library"
788
+ }),
789
+ /*#__PURE__*/ _jsx("button", {
790
+ type: "button",
791
+ onClick: ()=>setActiveTab('upload'),
792
+ style: {
626
793
  ...styles.tabButton,
627
- ...(activeTab === 'upload' ? styles.tabButtonActive : {}),
628
- }, children: "Upload New" }), _jsx("button", { type: "button", onClick: () => setActiveTab('url'), style: {
794
+ ...activeTab === 'upload' ? styles.tabButtonActive : {}
795
+ },
796
+ children: "Upload New"
797
+ }),
798
+ /*#__PURE__*/ _jsx("button", {
799
+ type: "button",
800
+ onClick: ()=>setActiveTab('url'),
801
+ style: {
629
802
  ...styles.tabButton,
630
- ...(activeTab === 'url' ? styles.tabButtonActive : {}),
631
- }, children: "From URL" })] }), activeTab === 'browse' && (_jsxs("div", { style: styles.searchContainer, children: [_jsx(Search, { style: styles.searchIcon }), _jsx("input", { type: "text", placeholder: "Search by alt text...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), style: styles.searchInput })] })), _jsx("div", { style: styles.contentArea, children: activeTab === 'browse' ? (
632
- /* Browse Tab */
633
- loading && mediaList.length === 0 ? (_jsx("div", { style: styles.mediaGrid, children: [...Array(8)].map((_, i) => (_jsx("div", { style: styles.skeleton }, i))) })) : mediaList.length === 0 ? (_jsx("div", { style: styles.emptyState, children: "No images found" })) : (_jsxs(_Fragment, { children: [_jsx("div", { style: styles.mediaGrid, children: mediaList.map((item) => (_jsxs("button", { type: "button", onClick: () => handleSelect(item), onMouseEnter: () => setHoveredItem(item.id), onMouseLeave: () => setHoveredItem(null), style: {
634
- ...styles.mediaItem,
635
- ...(value?.id === item.id ? styles.mediaItemSelected : {}),
636
- ...(hoveredItem === item.id ? { borderColor: 'var(--theme-elevation-600)' } : {}),
637
- }, children: [_jsx("img", { src: item.url, alt: item.alt || item.filename || '', style: styles.mediaItemImage, loading: "lazy" }), item.alt && (_jsx("div", { style: styles.mediaItemAlt, children: item.alt }))] }, item.id))) }), hasMore && (_jsx("div", { style: styles.loadMoreContainer, children: _jsx("button", { type: "button", onClick: handleLoadMore, disabled: loading, style: {
803
+ ...activeTab === 'url' ? styles.tabButtonActive : {}
804
+ },
805
+ children: "From URL"
806
+ })
807
+ ]
808
+ }),
809
+ activeTab === 'browse' && /*#__PURE__*/ _jsxs("div", {
810
+ style: styles.searchContainer,
811
+ children: [
812
+ /*#__PURE__*/ _jsx(Search, {
813
+ style: styles.searchIcon
814
+ }),
815
+ /*#__PURE__*/ _jsx("input", {
816
+ type: "text",
817
+ placeholder: "Search by alt text...",
818
+ value: searchQuery,
819
+ onChange: (e)=>setSearchQuery(e.target.value),
820
+ style: styles.searchInput
821
+ })
822
+ ]
823
+ }),
824
+ /*#__PURE__*/ _jsx("div", {
825
+ style: styles.contentArea,
826
+ children: activeTab === 'browse' ? /* Browse Tab */ loading && mediaList.length === 0 ? /*#__PURE__*/ _jsx("div", {
827
+ style: styles.mediaGrid,
828
+ children: [
829
+ ...Array(8)
830
+ ].map((_, i)=>/*#__PURE__*/ _jsx("div", {
831
+ style: styles.skeleton
832
+ }, i))
833
+ }) : mediaList.length === 0 ? /*#__PURE__*/ _jsx("div", {
834
+ style: styles.emptyState,
835
+ children: "No images found"
836
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
837
+ children: [
838
+ /*#__PURE__*/ _jsx("div", {
839
+ style: styles.mediaGrid,
840
+ children: mediaList.map((item)=>/*#__PURE__*/ _jsxs("button", {
841
+ type: "button",
842
+ onClick: ()=>handleSelect(item),
843
+ onMouseEnter: ()=>setHoveredItem(item.id),
844
+ onMouseLeave: ()=>setHoveredItem(null),
845
+ style: {
846
+ ...styles.mediaItem,
847
+ ...value?.id === item.id ? styles.mediaItemSelected : {},
848
+ ...hoveredItem === item.id ? {
849
+ borderColor: 'var(--theme-elevation-600)'
850
+ } : {}
851
+ },
852
+ children: [
853
+ /*#__PURE__*/ _jsx("img", {
854
+ src: item.url,
855
+ alt: item.alt || item.filename || '',
856
+ style: styles.mediaItemImage,
857
+ loading: "lazy"
858
+ }),
859
+ item.alt && /*#__PURE__*/ _jsx("div", {
860
+ style: styles.mediaItemAlt,
861
+ children: item.alt
862
+ })
863
+ ]
864
+ }, item.id))
865
+ }),
866
+ hasMore && /*#__PURE__*/ _jsx("div", {
867
+ style: styles.loadMoreContainer,
868
+ children: /*#__PURE__*/ _jsx("button", {
869
+ type: "button",
870
+ onClick: handleLoadMore,
871
+ disabled: loading,
872
+ style: {
638
873
  ...styles.buttonOutline,
639
- ...(loading ? styles.buttonDisabled : {}),
640
- }, children: loading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { style: { ...styles.icon, marginRight: '8px', animation: 'spin 1s linear infinite' } }), "Loading..."] })) : ('Load More') }) }))] }))) : activeTab === 'upload' ? (
641
- /* Upload Tab */
642
- _jsx("div", { style: styles.uploadContainer, children: uploadState.preview ? (_jsxs("div", { style: styles.uploadPreview, children: [_jsx("div", { style: styles.uploadImageContainer, children: _jsx("img", { src: uploadState.preview, alt: "Preview", style: styles.uploadImage }) }), _jsxs("div", { style: styles.uploadMeta, children: [_jsxs("p", { children: [_jsx("span", { style: { fontWeight: 500 }, children: "Filename:" }), " ", uploadState.file?.name] }), _jsxs("p", { children: [_jsx("span", { style: { fontWeight: 500 }, children: "Size:" }), " ", formatFileSize(uploadState.file?.size)] })] }), uploadState.error && (_jsxs("div", { style: styles.errorBox, children: [_jsx(AlertCircle, { style: { ...styles.icon, flexShrink: 0, marginTop: '2px' } }), _jsx("span", { children: uploadState.error })] })), _jsxs("div", { style: styles.actionsRow, children: [_jsx("button", { type: "button", onClick: handleUpload, disabled: uploadState.uploading, style: {
874
+ ...loading ? styles.buttonDisabled : {}
875
+ },
876
+ children: loading ? /*#__PURE__*/ _jsxs(_Fragment, {
877
+ children: [
878
+ /*#__PURE__*/ _jsx(Loader2, {
879
+ style: {
880
+ ...styles.icon,
881
+ marginRight: '8px',
882
+ animation: 'spin 1s linear infinite'
883
+ }
884
+ }),
885
+ "Loading..."
886
+ ]
887
+ }) : 'Load More'
888
+ })
889
+ })
890
+ ]
891
+ }) : activeTab === 'upload' ? /* Upload Tab */ /*#__PURE__*/ _jsx("div", {
892
+ style: styles.uploadContainer,
893
+ children: uploadState.preview ? /*#__PURE__*/ _jsxs("div", {
894
+ style: styles.uploadPreview,
895
+ children: [
896
+ /*#__PURE__*/ _jsx("div", {
897
+ style: styles.uploadImageContainer,
898
+ children: /*#__PURE__*/ _jsx("img", {
899
+ src: uploadState.preview,
900
+ alt: "Preview",
901
+ style: styles.uploadImage
902
+ })
903
+ }),
904
+ /*#__PURE__*/ _jsxs("div", {
905
+ style: styles.uploadMeta,
906
+ children: [
907
+ /*#__PURE__*/ _jsxs("p", {
908
+ children: [
909
+ /*#__PURE__*/ _jsx("span", {
910
+ style: {
911
+ fontWeight: 500
912
+ },
913
+ children: "Filename:"
914
+ }),
915
+ " ",
916
+ uploadState.file?.name
917
+ ]
918
+ }),
919
+ /*#__PURE__*/ _jsxs("p", {
920
+ children: [
921
+ /*#__PURE__*/ _jsx("span", {
922
+ style: {
923
+ fontWeight: 500
924
+ },
925
+ children: "Size:"
926
+ }),
927
+ " ",
928
+ formatFileSize(uploadState.file?.size)
929
+ ]
930
+ })
931
+ ]
932
+ }),
933
+ uploadState.error && /*#__PURE__*/ _jsxs("div", {
934
+ style: styles.errorBox,
935
+ children: [
936
+ /*#__PURE__*/ _jsx(AlertCircle, {
937
+ style: {
938
+ ...styles.icon,
939
+ flexShrink: 0,
940
+ marginTop: '2px'
941
+ }
942
+ }),
943
+ /*#__PURE__*/ _jsx("span", {
944
+ children: uploadState.error
945
+ })
946
+ ]
947
+ }),
948
+ /*#__PURE__*/ _jsxs("div", {
949
+ style: styles.actionsRow,
950
+ children: [
951
+ /*#__PURE__*/ _jsx("button", {
952
+ type: "button",
953
+ onClick: handleUpload,
954
+ disabled: uploadState.uploading,
955
+ style: {
643
956
  ...styles.buttonPrimary,
644
- ...(uploadState.uploading ? styles.buttonDisabled : {}),
645
- }, children: uploadState.uploading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { style: { ...styles.icon, marginRight: '8px', animation: 'spin 1s linear infinite' } }), "Uploading..."] })) : (_jsxs(_Fragment, { children: [_jsx(Upload, { style: { ...styles.icon, marginRight: '8px' } }), "Upload & Select"] })) }), _jsx("button", { type: "button", onClick: resetUploadState, disabled: uploadState.uploading, style: {
957
+ ...uploadState.uploading ? styles.buttonDisabled : {}
958
+ },
959
+ children: uploadState.uploading ? /*#__PURE__*/ _jsxs(_Fragment, {
960
+ children: [
961
+ /*#__PURE__*/ _jsx(Loader2, {
962
+ style: {
963
+ ...styles.icon,
964
+ marginRight: '8px',
965
+ animation: 'spin 1s linear infinite'
966
+ }
967
+ }),
968
+ "Uploading..."
969
+ ]
970
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
971
+ children: [
972
+ /*#__PURE__*/ _jsx(Upload, {
973
+ style: {
974
+ ...styles.icon,
975
+ marginRight: '8px'
976
+ }
977
+ }),
978
+ "Upload & Select"
979
+ ]
980
+ })
981
+ }),
982
+ /*#__PURE__*/ _jsx("button", {
983
+ type: "button",
984
+ onClick: resetUploadState,
985
+ disabled: uploadState.uploading,
986
+ style: {
646
987
  ...styles.buttonOutline,
647
- ...(uploadState.uploading ? styles.buttonDisabled : {}),
648
- }, children: "Cancel" })] })] })) : (_jsxs("div", { style: styles.dropZone, children: [_jsx(Image, { style: styles.dropZoneIcon }), _jsxs("label", { style: { cursor: 'pointer' }, children: [_jsx("span", { style: styles.buttonPrimary, children: "Select Image" }), _jsx("input", { type: "file", accept: "image/*", onChange: handleFileSelect, style: styles.hiddenInput })] }), _jsx("p", { style: { marginTop: '8px', fontSize: '14px', color: 'var(--theme-elevation-500)' }, children: "Select an image file to upload" }), uploadState.error && (_jsx("div", { style: { ...styles.errorBox, marginTop: '16px' }, children: uploadState.error }))] })) })) : activeTab === 'url' ? (
649
- /* URL Tab */
650
- _jsx("div", { style: styles.uploadContainer, children: _jsxs("div", { style: styles.urlContainer, children: [_jsxs("div", { style: styles.urlIntro, children: [_jsx(Link, { style: styles.urlIcon }), _jsx("p", { style: { fontSize: '14px', color: 'var(--theme-elevation-500)' }, children: "Enter an image URL from an external source" })] }), _jsxs("div", { style: styles.inputGroup, children: [_jsx("label", { style: styles.inputLabel, htmlFor: "image-url", children: "Image URL" }), _jsx("input", { id: "image-url", type: "url", placeholder: "https://example.com/image.jpg", value: urlState.url, onChange: (e) => setUrlState((prev) => ({
651
- ...prev,
652
- url: e.target.value,
653
- error: null,
654
- previewLoaded: false,
655
- })), onKeyDown: (e) => {
988
+ ...uploadState.uploading ? styles.buttonDisabled : {}
989
+ },
990
+ children: "Cancel"
991
+ })
992
+ ]
993
+ })
994
+ ]
995
+ }) : /*#__PURE__*/ _jsxs("div", {
996
+ style: styles.dropZone,
997
+ children: [
998
+ /*#__PURE__*/ _jsx(Image, {
999
+ style: styles.dropZoneIcon
1000
+ }),
1001
+ /*#__PURE__*/ _jsxs("label", {
1002
+ style: {
1003
+ cursor: 'pointer'
1004
+ },
1005
+ children: [
1006
+ /*#__PURE__*/ _jsx("span", {
1007
+ style: styles.buttonPrimary,
1008
+ children: "Select Image"
1009
+ }),
1010
+ /*#__PURE__*/ _jsx("input", {
1011
+ type: "file",
1012
+ accept: "image/*",
1013
+ onChange: handleFileSelect,
1014
+ style: styles.hiddenInput
1015
+ })
1016
+ ]
1017
+ }),
1018
+ /*#__PURE__*/ _jsx("p", {
1019
+ style: {
1020
+ marginTop: '8px',
1021
+ fontSize: '14px',
1022
+ color: 'var(--theme-elevation-500)'
1023
+ },
1024
+ children: "Select an image file to upload"
1025
+ }),
1026
+ uploadState.error && /*#__PURE__*/ _jsx("div", {
1027
+ style: {
1028
+ ...styles.errorBox,
1029
+ marginTop: '16px'
1030
+ },
1031
+ children: uploadState.error
1032
+ })
1033
+ ]
1034
+ })
1035
+ }) : activeTab === 'url' ? /* URL Tab */ /*#__PURE__*/ _jsx("div", {
1036
+ style: styles.uploadContainer,
1037
+ children: /*#__PURE__*/ _jsxs("div", {
1038
+ style: styles.urlContainer,
1039
+ children: [
1040
+ /*#__PURE__*/ _jsxs("div", {
1041
+ style: styles.urlIntro,
1042
+ children: [
1043
+ /*#__PURE__*/ _jsx(Link, {
1044
+ style: styles.urlIcon
1045
+ }),
1046
+ /*#__PURE__*/ _jsx("p", {
1047
+ style: {
1048
+ fontSize: '14px',
1049
+ color: 'var(--theme-elevation-500)'
1050
+ },
1051
+ children: "Enter an image URL from an external source"
1052
+ })
1053
+ ]
1054
+ }),
1055
+ /*#__PURE__*/ _jsxs("div", {
1056
+ style: styles.inputGroup,
1057
+ children: [
1058
+ /*#__PURE__*/ _jsx("label", {
1059
+ style: styles.inputLabel,
1060
+ htmlFor: "image-url",
1061
+ children: "Image URL"
1062
+ }),
1063
+ /*#__PURE__*/ _jsx("input", {
1064
+ id: "image-url",
1065
+ type: "url",
1066
+ placeholder: "https://example.com/image.jpg",
1067
+ value: urlState.url,
1068
+ onChange: (e)=>setUrlState((prev)=>({
1069
+ ...prev,
1070
+ url: e.target.value,
1071
+ error: null,
1072
+ previewLoaded: false
1073
+ })),
1074
+ onKeyDown: (e)=>{
656
1075
  if (e.key === 'Enter') {
657
1076
  e.preventDefault();
658
1077
  handleUrlSubmit();
659
1078
  }
660
- }, style: styles.input })] }), urlState.url && !urlState.error && (_jsxs("div", { style: styles.uploadImageContainer, children: [_jsx("img", { src: urlState.url, alt: "Preview", style: styles.uploadImage, onLoad: handleUrlPreviewLoad, onError: handleUrlPreviewError }), !urlState.previewLoaded && (_jsx("div", { style: styles.previewLoading, children: _jsx(Loader2, { style: { width: '32px', height: '32px', animation: 'spin 1s linear infinite', color: 'var(--theme-elevation-400)' } }) }))] })), urlState.error && (_jsxs("div", { style: styles.errorBox, children: [_jsx(AlertCircle, { style: { ...styles.icon, flexShrink: 0, marginTop: '2px' } }), _jsx("span", { children: urlState.error })] })), _jsxs("div", { style: styles.actionsRow, children: [_jsxs("button", { type: "button", onClick: handleUrlSubmit, disabled: !urlState.url || urlState.loading, style: {
1079
+ },
1080
+ style: styles.input
1081
+ })
1082
+ ]
1083
+ }),
1084
+ urlState.url && !urlState.error && /*#__PURE__*/ _jsxs("div", {
1085
+ style: styles.uploadImageContainer,
1086
+ children: [
1087
+ /*#__PURE__*/ _jsx("img", {
1088
+ src: urlState.url,
1089
+ alt: "Preview",
1090
+ style: styles.uploadImage,
1091
+ onLoad: handleUrlPreviewLoad,
1092
+ onError: handleUrlPreviewError
1093
+ }),
1094
+ !urlState.previewLoaded && /*#__PURE__*/ _jsx("div", {
1095
+ style: styles.previewLoading,
1096
+ children: /*#__PURE__*/ _jsx(Loader2, {
1097
+ style: {
1098
+ width: '32px',
1099
+ height: '32px',
1100
+ animation: 'spin 1s linear infinite',
1101
+ color: 'var(--theme-elevation-400)'
1102
+ }
1103
+ })
1104
+ })
1105
+ ]
1106
+ }),
1107
+ urlState.error && /*#__PURE__*/ _jsxs("div", {
1108
+ style: styles.errorBox,
1109
+ children: [
1110
+ /*#__PURE__*/ _jsx(AlertCircle, {
1111
+ style: {
1112
+ ...styles.icon,
1113
+ flexShrink: 0,
1114
+ marginTop: '2px'
1115
+ }
1116
+ }),
1117
+ /*#__PURE__*/ _jsx("span", {
1118
+ children: urlState.error
1119
+ })
1120
+ ]
1121
+ }),
1122
+ /*#__PURE__*/ _jsxs("div", {
1123
+ style: styles.actionsRow,
1124
+ children: [
1125
+ /*#__PURE__*/ _jsxs("button", {
1126
+ type: "button",
1127
+ onClick: handleUrlSubmit,
1128
+ disabled: !urlState.url || urlState.loading,
1129
+ style: {
661
1130
  ...styles.buttonPrimary,
662
- ...((!urlState.url || urlState.loading) ? styles.buttonDisabled : {}),
663
- }, children: [_jsx(Link, { style: { ...styles.icon, marginRight: '8px' } }), "Use This URL"] }), urlState.url && (_jsx("button", { type: "button", onClick: resetUrlState, style: styles.buttonOutline, children: "Clear" }))] })] }) })) : null })] }) }))] }));
1131
+ ...!urlState.url || urlState.loading ? styles.buttonDisabled : {}
1132
+ },
1133
+ children: [
1134
+ /*#__PURE__*/ _jsx(Link, {
1135
+ style: {
1136
+ ...styles.icon,
1137
+ marginRight: '8px'
1138
+ }
1139
+ }),
1140
+ "Use This URL"
1141
+ ]
1142
+ }),
1143
+ urlState.url && /*#__PURE__*/ _jsx("button", {
1144
+ type: "button",
1145
+ onClick: resetUrlState,
1146
+ style: styles.buttonOutline,
1147
+ children: "Clear"
1148
+ })
1149
+ ]
1150
+ })
1151
+ ]
1152
+ })
1153
+ }) : null
1154
+ })
1155
+ ]
1156
+ })
1157
+ })
1158
+ ]
1159
+ });
664
1160
  }
665
1161
  // Memoize to prevent unnecessary re-renders
666
- export const MediaField = memo(MediaFieldInner);
1162
+ export const MediaField = /*#__PURE__*/ memo(MediaFieldInner);
667
1163
  // =============================================================================
668
1164
  // Field Configuration Factory
669
1165
  // =============================================================================
670
1166
  /**
671
1167
  * Creates a Puck field configuration for media selection
672
- */
673
- export function createMediaField(config) {
1168
+ */ export function createMediaField(config) {
674
1169
  return {
675
1170
  type: 'custom',
676
1171
  label: config.label,
677
- render: ({ value, onChange, readOnly }) => (_jsx(MediaField, { value: value, onChange: onChange, label: config.label, readOnly: readOnly, apiEndpoint: config.apiEndpoint })),
1172
+ render: ({ value, onChange, readOnly })=>/*#__PURE__*/ _jsx(MediaField, {
1173
+ value: value,
1174
+ onChange: onChange,
1175
+ label: config.label,
1176
+ readOnly: readOnly,
1177
+ apiEndpoint: config.apiEndpoint
1178
+ })
678
1179
  };
679
1180
  }
1181
+
680
1182
  //# sourceMappingURL=MediaField.js.map