@wordpress/fields 0.29.0 → 0.29.1-next.06ee73755.0

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 (282) hide show
  1. package/CHANGELOG.md +0 -2
  2. package/LICENSE.md +1 -1
  3. package/README.md +41 -0
  4. package/build/actions/{delete-post.js → delete-post.cjs} +4 -4
  5. package/build/actions/{duplicate-pattern.js → duplicate-pattern.cjs} +2 -2
  6. package/build/actions/{duplicate-post.js → duplicate-post.cjs} +2 -2
  7. package/build/actions/{duplicate-template-part.js → duplicate-template-part.cjs} +3 -3
  8. package/build/actions/{export-pattern.js → export-pattern.cjs} +2 -2
  9. package/build/actions/{index.js → index.cjs} +14 -14
  10. package/build/actions/{permanently-delete-post.js → permanently-delete-post.cjs} +2 -2
  11. package/build/actions/{rename-post.js → rename-post.cjs} +3 -4
  12. package/build/actions/{rename-post.js.map → rename-post.cjs.map} +2 -2
  13. package/build/actions/{reorder-page.js → reorder-page.cjs} +2 -2
  14. package/build/actions/reorder-page.cjs.map +7 -0
  15. package/build/actions/{reset-post.js → reset-post.cjs} +2 -2
  16. package/build/actions/{restore-post.js → restore-post.cjs} +2 -2
  17. package/build/actions/{trash-post.js → trash-post.cjs} +2 -2
  18. package/build/actions/{utils.js → utils.cjs} +1 -1
  19. package/build/actions/{view-post-revisions.js → view-post-revisions.cjs} +1 -1
  20. package/build/actions/{view-post.js → view-post.cjs} +1 -1
  21. package/build/components/create-template-part-modal/{index.js → index.cjs} +3 -4
  22. package/build/components/create-template-part-modal/index.cjs.map +7 -0
  23. package/build/components/create-template-part-modal/{utils.js → utils.cjs} +1 -1
  24. package/build/components/media-edit/index.cjs +494 -0
  25. package/build/components/media-edit/index.cjs.map +7 -0
  26. package/build/fields/author/{author-view.js → author-view.cjs} +1 -1
  27. package/build/fields/author/{index.js → index.cjs} +2 -2
  28. package/build/fields/comment-status/{index.js → index.cjs} +1 -1
  29. package/build/fields/date/{date-view.js → date-view.cjs} +1 -1
  30. package/build/fields/date/{index.js → index.cjs} +2 -2
  31. package/build/fields/discussion/{index.js → index.cjs} +1 -1
  32. package/build/fields/featured-image/{featured-image-view.js → featured-image-view.cjs} +1 -1
  33. package/build/fields/featured-image/index.cjs +52 -0
  34. package/build/fields/featured-image/index.cjs.map +7 -0
  35. package/build/fields/{index.js → index.cjs} +18 -18
  36. package/build/fields/notes/{index.js → index.cjs} +1 -1
  37. package/build/fields/order/{index.js → index.cjs} +1 -1
  38. package/build/fields/page-title/{index.js → index.cjs} +3 -3
  39. package/build/fields/page-title/{view.js → view.cjs} +3 -3
  40. package/build/fields/parent/{index.js → index.cjs} +3 -3
  41. package/build/fields/parent/{parent-edit.js → parent-edit.cjs} +2 -3
  42. package/build/fields/parent/{parent-edit.js.map → parent-edit.cjs.map} +2 -2
  43. package/build/fields/parent/{parent-view.js → parent-view.cjs} +2 -2
  44. package/build/fields/parent/{utils.js → utils.cjs} +1 -1
  45. package/build/fields/password/{edit.js → edit.cjs} +1 -3
  46. package/build/fields/password/{edit.js.map → edit.cjs.map} +2 -2
  47. package/build/fields/password/{index.js → index.cjs} +2 -2
  48. package/build/fields/pattern-title/{index.js → index.cjs} +3 -3
  49. package/build/fields/pattern-title/{view.js → view.cjs} +3 -3
  50. package/build/fields/ping-status/{index.js → index.cjs} +1 -2
  51. package/build/fields/ping-status/index.cjs.map +7 -0
  52. package/build/fields/slug/{index.js → index.cjs} +3 -3
  53. package/build/fields/slug/{slug-edit.js → slug-edit.cjs} +2 -2
  54. package/build/fields/slug/{slug-view.js → slug-view.cjs} +2 -2
  55. package/build/fields/slug/{utils.js → utils.cjs} +2 -2
  56. package/build/fields/status/{index.js → index.cjs} +3 -3
  57. package/build/fields/status/{status-elements.js → status-elements.cjs} +1 -1
  58. package/build/fields/status/{status-view.js → status-view.cjs} +2 -2
  59. package/build/fields/template/{index.js → index.cjs} +2 -2
  60. package/build/fields/template/{template-edit.js → template-edit.cjs} +3 -3
  61. package/build/fields/template-title/{index.js → index.cjs} +3 -3
  62. package/build/fields/title/{index.js → index.cjs} +3 -3
  63. package/build/fields/title/{view.js → view.cjs} +2 -2
  64. package/build/{index.js → index.cjs} +10 -7
  65. package/build/index.cjs.map +7 -0
  66. package/build/{lock-unlock.js → lock-unlock.cjs} +1 -1
  67. package/build/mutation/{index.js → index.cjs} +1 -1
  68. package/build/{types.js → types.cjs} +1 -1
  69. package/build/types.cjs.map +7 -0
  70. package/build-module/actions/{delete-post.js → delete-post.mjs} +4 -4
  71. package/build-module/actions/{duplicate-pattern.js → duplicate-pattern.mjs} +2 -2
  72. package/build-module/actions/{duplicate-post.js → duplicate-post.mjs} +2 -2
  73. package/build-module/actions/{duplicate-template-part.js → duplicate-template-part.mjs} +3 -3
  74. package/build-module/actions/{export-pattern.js → export-pattern.mjs} +2 -2
  75. package/build-module/actions/index.mjs +30 -0
  76. package/build-module/actions/{permanently-delete-post.js → permanently-delete-post.mjs} +2 -2
  77. package/build-module/actions/{rename-post.js → rename-post.mjs} +3 -4
  78. package/build-module/actions/{rename-post.js.map → rename-post.mjs.map} +2 -2
  79. package/build-module/actions/{reorder-page.js → reorder-page.mjs} +2 -2
  80. package/build-module/actions/reorder-page.mjs.map +7 -0
  81. package/build-module/actions/{reset-post.js → reset-post.mjs} +2 -2
  82. package/build-module/actions/{restore-post.js → restore-post.mjs} +2 -2
  83. package/build-module/actions/{trash-post.js → trash-post.mjs} +2 -2
  84. package/build-module/actions/{utils.js → utils.mjs} +1 -1
  85. package/build-module/actions/{view-post-revisions.js → view-post-revisions.mjs} +1 -1
  86. package/build-module/actions/{view-post.js → view-post.mjs} +1 -1
  87. package/build-module/components/create-template-part-modal/{index.js → index.mjs} +3 -4
  88. package/build-module/components/create-template-part-modal/index.mjs.map +7 -0
  89. package/build-module/components/create-template-part-modal/{utils.js → utils.mjs} +1 -1
  90. package/build-module/components/media-edit/index.mjs +478 -0
  91. package/build-module/components/media-edit/index.mjs.map +7 -0
  92. package/build-module/fields/author/{author-view.js → author-view.mjs} +1 -1
  93. package/build-module/fields/author/{index.js → index.mjs} +2 -2
  94. package/build-module/fields/comment-status/{index.js → index.mjs} +1 -1
  95. package/build-module/fields/date/{date-view.js → date-view.mjs} +1 -1
  96. package/build-module/fields/date/{index.js → index.mjs} +2 -2
  97. package/build-module/fields/discussion/{index.js → index.mjs} +1 -1
  98. package/build-module/fields/featured-image/{featured-image-view.js → featured-image-view.mjs} +1 -1
  99. package/build-module/fields/featured-image/{index.js → index.mjs} +8 -5
  100. package/build-module/fields/featured-image/index.mjs.map +7 -0
  101. package/build-module/fields/index.mjs +38 -0
  102. package/build-module/fields/notes/{index.js → index.mjs} +1 -1
  103. package/build-module/fields/order/{index.js → index.mjs} +1 -1
  104. package/build-module/fields/page-title/{index.js → index.mjs} +3 -3
  105. package/build-module/fields/page-title/{view.js → view.mjs} +3 -3
  106. package/build-module/fields/parent/{index.js → index.mjs} +3 -3
  107. package/build-module/fields/parent/{parent-edit.js → parent-edit.mjs} +2 -3
  108. package/build-module/fields/parent/{parent-edit.js.map → parent-edit.mjs.map} +2 -2
  109. package/build-module/fields/parent/{parent-view.js → parent-view.mjs} +2 -2
  110. package/build-module/fields/parent/{utils.js → utils.mjs} +1 -1
  111. package/build-module/fields/password/{edit.js → edit.mjs} +1 -3
  112. package/build-module/fields/password/{edit.js.map → edit.mjs.map} +2 -2
  113. package/build-module/fields/password/{index.js → index.mjs} +2 -2
  114. package/build-module/fields/pattern-title/{index.js → index.mjs} +3 -3
  115. package/build-module/fields/pattern-title/{view.js → view.mjs} +3 -3
  116. package/build-module/fields/ping-status/{index.js → index.mjs} +1 -2
  117. package/build-module/fields/ping-status/index.mjs.map +7 -0
  118. package/build-module/fields/slug/{index.js → index.mjs} +3 -3
  119. package/build-module/fields/slug/{slug-edit.js → slug-edit.mjs} +2 -2
  120. package/build-module/fields/slug/{slug-view.js → slug-view.mjs} +2 -2
  121. package/build-module/fields/slug/{utils.js → utils.mjs} +2 -2
  122. package/build-module/fields/status/{index.js → index.mjs} +3 -3
  123. package/build-module/fields/status/{status-elements.js → status-elements.mjs} +1 -1
  124. package/build-module/fields/status/{status-view.js → status-view.mjs} +2 -2
  125. package/build-module/fields/template/{index.js → index.mjs} +2 -2
  126. package/build-module/fields/template/{template-edit.js → template-edit.mjs} +3 -3
  127. package/build-module/fields/template-title/{index.js → index.mjs} +3 -3
  128. package/build-module/fields/title/{index.js → index.mjs} +3 -3
  129. package/build-module/fields/title/{view.js → view.mjs} +2 -2
  130. package/build-module/index.mjs +10 -0
  131. package/build-module/index.mjs.map +7 -0
  132. package/build-module/{lock-unlock.js → lock-unlock.mjs} +1 -1
  133. package/build-module/mutation/{index.js → index.mjs} +1 -1
  134. package/build-module/types.mjs +1 -0
  135. package/build-style/style-rtl.css +191 -62
  136. package/build-style/style.css +191 -62
  137. package/build-types/actions/rename-post.d.ts.map +1 -1
  138. package/build-types/actions/reorder-page.d.ts.map +1 -1
  139. package/build-types/components/create-template-part-modal/index.d.ts.map +1 -1
  140. package/build-types/components/media-edit/index.d.ts +42 -0
  141. package/build-types/components/media-edit/index.d.ts.map +1 -0
  142. package/build-types/fields/featured-image/index.d.ts +0 -3
  143. package/build-types/fields/featured-image/index.d.ts.map +1 -1
  144. package/build-types/fields/parent/parent-edit.d.ts.map +1 -1
  145. package/build-types/fields/password/edit.d.ts.map +1 -1
  146. package/build-types/fields/ping-status/index.d.ts.map +1 -1
  147. package/build-types/index.d.ts +2 -1
  148. package/build-types/index.d.ts.map +1 -1
  149. package/build-types/types.d.ts +24 -0
  150. package/build-types/types.d.ts.map +1 -1
  151. package/package.json +38 -30
  152. package/src/actions/rename-post.tsx +0 -1
  153. package/src/actions/reorder-page.tsx +1 -2
  154. package/src/components/create-template-part-modal/index.tsx +2 -3
  155. package/src/components/media-edit/index.tsx +616 -0
  156. package/src/components/media-edit/style.scss +232 -0
  157. package/src/fields/featured-image/{index.ts → index.tsx} +5 -2
  158. package/src/fields/featured-image/style.scss +7 -89
  159. package/src/fields/parent/parent-edit.tsx +0 -1
  160. package/src/fields/password/edit.tsx +0 -2
  161. package/src/fields/ping-status/index.tsx +0 -1
  162. package/src/index.ts +2 -0
  163. package/src/style.scss +1 -0
  164. package/src/types.ts +30 -0
  165. package/build/actions/reorder-page.js.map +0 -7
  166. package/build/components/create-template-part-modal/index.js.map +0 -7
  167. package/build/fields/featured-image/featured-image-edit.js +0 -162
  168. package/build/fields/featured-image/featured-image-edit.js.map +0 -7
  169. package/build/fields/featured-image/index.js +0 -39
  170. package/build/fields/featured-image/index.js.map +0 -7
  171. package/build/fields/ping-status/index.js.map +0 -7
  172. package/build/index.js.map +0 -7
  173. package/build/types.js.map +0 -7
  174. package/build-module/actions/index.js +0 -30
  175. package/build-module/actions/reorder-page.js.map +0 -7
  176. package/build-module/components/create-template-part-modal/index.js.map +0 -7
  177. package/build-module/fields/featured-image/featured-image-edit.js +0 -140
  178. package/build-module/fields/featured-image/featured-image-edit.js.map +0 -7
  179. package/build-module/fields/featured-image/index.js.map +0 -7
  180. package/build-module/fields/index.js +0 -38
  181. package/build-module/fields/ping-status/index.js.map +0 -7
  182. package/build-module/index.js +0 -8
  183. package/build-module/index.js.map +0 -7
  184. package/build-module/types.js +0 -1
  185. package/build-types/fields/featured-image/featured-image-edit.d.ts +0 -7
  186. package/build-types/fields/featured-image/featured-image-edit.d.ts.map +0 -1
  187. package/src/fields/featured-image/featured-image-edit.tsx +0 -170
  188. package/tsconfig.json +0 -31
  189. package/tsconfig.tsbuildinfo +0 -1
  190. /package/build/actions/{delete-post.js.map → delete-post.cjs.map} +0 -0
  191. /package/build/actions/{duplicate-pattern.js.map → duplicate-pattern.cjs.map} +0 -0
  192. /package/build/actions/{duplicate-post.js.map → duplicate-post.cjs.map} +0 -0
  193. /package/build/actions/{duplicate-template-part.js.map → duplicate-template-part.cjs.map} +0 -0
  194. /package/build/actions/{export-pattern.js.map → export-pattern.cjs.map} +0 -0
  195. /package/build/actions/{index.js.map → index.cjs.map} +0 -0
  196. /package/build/actions/{permanently-delete-post.js.map → permanently-delete-post.cjs.map} +0 -0
  197. /package/build/actions/{reset-post.js.map → reset-post.cjs.map} +0 -0
  198. /package/build/actions/{restore-post.js.map → restore-post.cjs.map} +0 -0
  199. /package/build/actions/{trash-post.js.map → trash-post.cjs.map} +0 -0
  200. /package/build/actions/{utils.js.map → utils.cjs.map} +0 -0
  201. /package/build/actions/{view-post-revisions.js.map → view-post-revisions.cjs.map} +0 -0
  202. /package/build/actions/{view-post.js.map → view-post.cjs.map} +0 -0
  203. /package/build/components/create-template-part-modal/{utils.js.map → utils.cjs.map} +0 -0
  204. /package/build/fields/author/{author-view.js.map → author-view.cjs.map} +0 -0
  205. /package/build/fields/author/{index.js.map → index.cjs.map} +0 -0
  206. /package/build/fields/comment-status/{index.js.map → index.cjs.map} +0 -0
  207. /package/build/fields/date/{date-view.js.map → date-view.cjs.map} +0 -0
  208. /package/build/fields/date/{index.js.map → index.cjs.map} +0 -0
  209. /package/build/fields/discussion/{index.js.map → index.cjs.map} +0 -0
  210. /package/build/fields/featured-image/{featured-image-view.js.map → featured-image-view.cjs.map} +0 -0
  211. /package/build/fields/{index.js.map → index.cjs.map} +0 -0
  212. /package/build/fields/notes/{index.js.map → index.cjs.map} +0 -0
  213. /package/build/fields/order/{index.js.map → index.cjs.map} +0 -0
  214. /package/build/fields/page-title/{index.js.map → index.cjs.map} +0 -0
  215. /package/build/fields/page-title/{view.js.map → view.cjs.map} +0 -0
  216. /package/build/fields/parent/{index.js.map → index.cjs.map} +0 -0
  217. /package/build/fields/parent/{parent-view.js.map → parent-view.cjs.map} +0 -0
  218. /package/build/fields/parent/{utils.js.map → utils.cjs.map} +0 -0
  219. /package/build/fields/password/{index.js.map → index.cjs.map} +0 -0
  220. /package/build/fields/pattern-title/{index.js.map → index.cjs.map} +0 -0
  221. /package/build/fields/pattern-title/{view.js.map → view.cjs.map} +0 -0
  222. /package/build/fields/slug/{index.js.map → index.cjs.map} +0 -0
  223. /package/build/fields/slug/{slug-edit.js.map → slug-edit.cjs.map} +0 -0
  224. /package/build/fields/slug/{slug-view.js.map → slug-view.cjs.map} +0 -0
  225. /package/build/fields/slug/{utils.js.map → utils.cjs.map} +0 -0
  226. /package/build/fields/status/{index.js.map → index.cjs.map} +0 -0
  227. /package/build/fields/status/{status-elements.js.map → status-elements.cjs.map} +0 -0
  228. /package/build/fields/status/{status-view.js.map → status-view.cjs.map} +0 -0
  229. /package/build/fields/template/{index.js.map → index.cjs.map} +0 -0
  230. /package/build/fields/template/{template-edit.js.map → template-edit.cjs.map} +0 -0
  231. /package/build/fields/template-title/{index.js.map → index.cjs.map} +0 -0
  232. /package/build/fields/title/{index.js.map → index.cjs.map} +0 -0
  233. /package/build/fields/title/{view.js.map → view.cjs.map} +0 -0
  234. /package/build/{lock-unlock.js.map → lock-unlock.cjs.map} +0 -0
  235. /package/build/mutation/{index.js.map → index.cjs.map} +0 -0
  236. /package/build-module/actions/{delete-post.js.map → delete-post.mjs.map} +0 -0
  237. /package/build-module/actions/{duplicate-pattern.js.map → duplicate-pattern.mjs.map} +0 -0
  238. /package/build-module/actions/{duplicate-post.js.map → duplicate-post.mjs.map} +0 -0
  239. /package/build-module/actions/{duplicate-template-part.js.map → duplicate-template-part.mjs.map} +0 -0
  240. /package/build-module/actions/{export-pattern.js.map → export-pattern.mjs.map} +0 -0
  241. /package/build-module/actions/{index.js.map → index.mjs.map} +0 -0
  242. /package/build-module/actions/{permanently-delete-post.js.map → permanently-delete-post.mjs.map} +0 -0
  243. /package/build-module/actions/{reset-post.js.map → reset-post.mjs.map} +0 -0
  244. /package/build-module/actions/{restore-post.js.map → restore-post.mjs.map} +0 -0
  245. /package/build-module/actions/{trash-post.js.map → trash-post.mjs.map} +0 -0
  246. /package/build-module/actions/{utils.js.map → utils.mjs.map} +0 -0
  247. /package/build-module/actions/{view-post-revisions.js.map → view-post-revisions.mjs.map} +0 -0
  248. /package/build-module/actions/{view-post.js.map → view-post.mjs.map} +0 -0
  249. /package/build-module/components/create-template-part-modal/{utils.js.map → utils.mjs.map} +0 -0
  250. /package/build-module/fields/author/{author-view.js.map → author-view.mjs.map} +0 -0
  251. /package/build-module/fields/author/{index.js.map → index.mjs.map} +0 -0
  252. /package/build-module/fields/comment-status/{index.js.map → index.mjs.map} +0 -0
  253. /package/build-module/fields/date/{date-view.js.map → date-view.mjs.map} +0 -0
  254. /package/build-module/fields/date/{index.js.map → index.mjs.map} +0 -0
  255. /package/build-module/fields/discussion/{index.js.map → index.mjs.map} +0 -0
  256. /package/build-module/fields/featured-image/{featured-image-view.js.map → featured-image-view.mjs.map} +0 -0
  257. /package/build-module/fields/{index.js.map → index.mjs.map} +0 -0
  258. /package/build-module/fields/notes/{index.js.map → index.mjs.map} +0 -0
  259. /package/build-module/fields/order/{index.js.map → index.mjs.map} +0 -0
  260. /package/build-module/fields/page-title/{index.js.map → index.mjs.map} +0 -0
  261. /package/build-module/fields/page-title/{view.js.map → view.mjs.map} +0 -0
  262. /package/build-module/fields/parent/{index.js.map → index.mjs.map} +0 -0
  263. /package/build-module/fields/parent/{parent-view.js.map → parent-view.mjs.map} +0 -0
  264. /package/build-module/fields/parent/{utils.js.map → utils.mjs.map} +0 -0
  265. /package/build-module/fields/password/{index.js.map → index.mjs.map} +0 -0
  266. /package/build-module/fields/pattern-title/{index.js.map → index.mjs.map} +0 -0
  267. /package/build-module/fields/pattern-title/{view.js.map → view.mjs.map} +0 -0
  268. /package/build-module/fields/slug/{index.js.map → index.mjs.map} +0 -0
  269. /package/build-module/fields/slug/{slug-edit.js.map → slug-edit.mjs.map} +0 -0
  270. /package/build-module/fields/slug/{slug-view.js.map → slug-view.mjs.map} +0 -0
  271. /package/build-module/fields/slug/{utils.js.map → utils.mjs.map} +0 -0
  272. /package/build-module/fields/status/{index.js.map → index.mjs.map} +0 -0
  273. /package/build-module/fields/status/{status-elements.js.map → status-elements.mjs.map} +0 -0
  274. /package/build-module/fields/status/{status-view.js.map → status-view.mjs.map} +0 -0
  275. /package/build-module/fields/template/{index.js.map → index.mjs.map} +0 -0
  276. /package/build-module/fields/template/{template-edit.js.map → template-edit.mjs.map} +0 -0
  277. /package/build-module/fields/template-title/{index.js.map → index.mjs.map} +0 -0
  278. /package/build-module/fields/title/{index.js.map → index.mjs.map} +0 -0
  279. /package/build-module/fields/title/{view.js.map → view.mjs.map} +0 -0
  280. /package/build-module/{lock-unlock.js.map → lock-unlock.mjs.map} +0 -0
  281. /package/build-module/mutation/{index.js.map → index.mjs.map} +0 -0
  282. /package/build-module/{types.js.map → types.mjs.map} +0 -0
@@ -0,0 +1,478 @@
1
+ // packages/fields/src/components/media-edit/index.tsx
2
+ import clsx from "clsx";
3
+ import {
4
+ Button,
5
+ DropZone,
6
+ Icon,
7
+ Spinner,
8
+ __experimentalText as Text,
9
+ __experimentalTruncate as Truncate,
10
+ __experimentalVStack as VStack,
11
+ BaseControl,
12
+ Tooltip,
13
+ VisuallyHidden
14
+ } from "@wordpress/components";
15
+ import { isBlobURL, getBlobTypeByURL } from "@wordpress/blob";
16
+ import { store as coreStore } from "@wordpress/core-data";
17
+ import { useSelect, useDispatch } from "@wordpress/data";
18
+ import { useCallback, useMemo, useState } from "@wordpress/element";
19
+ import { __ } from "@wordpress/i18n";
20
+ import { archive, audio, video, file, closeSmall } from "@wordpress/icons";
21
+ import {
22
+ MediaUpload,
23
+ uploadMedia,
24
+ privateApis as mediaUtilsPrivateApis
25
+ } from "@wordpress/media-utils";
26
+ import { store as noticesStore } from "@wordpress/notices";
27
+ import { unlock } from "../../lock-unlock.mjs";
28
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
29
+ var { MediaUploadModal } = unlock(mediaUtilsPrivateApis);
30
+ function ConditionalMediaUpload({ render, multiple, ...props }) {
31
+ const [isModalOpen, setIsModalOpen] = useState(false);
32
+ if (window.__experimentalDataViewsMediaModal) {
33
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
34
+ render && render({ open: () => setIsModalOpen(true) }),
35
+ isModalOpen && /* @__PURE__ */ jsx(
36
+ MediaUploadModal,
37
+ {
38
+ ...props,
39
+ multiple,
40
+ isOpen: isModalOpen,
41
+ onClose: () => {
42
+ setIsModalOpen(false);
43
+ props.onClose?.();
44
+ },
45
+ onSelect: (media) => {
46
+ setIsModalOpen(false);
47
+ props.onSelect?.(media);
48
+ }
49
+ }
50
+ )
51
+ ] });
52
+ }
53
+ return /* @__PURE__ */ jsx(
54
+ MediaUpload,
55
+ {
56
+ ...props,
57
+ render,
58
+ multiple: multiple ? "add" : void 0
59
+ }
60
+ );
61
+ }
62
+ function MediaPickerButton({
63
+ open,
64
+ children,
65
+ label,
66
+ showTooltip = false,
67
+ onFilesDrop,
68
+ attachment,
69
+ isUploading = false
70
+ }) {
71
+ const isBlob = attachment && isBlobURL(attachment.source_url);
72
+ const mediaPickerButton = /* @__PURE__ */ jsxs(
73
+ "div",
74
+ {
75
+ className: "fields__media-edit-picker-button",
76
+ role: "button",
77
+ tabIndex: 0,
78
+ onClick: () => {
79
+ if (!isUploading) {
80
+ open();
81
+ }
82
+ },
83
+ onKeyDown: (event) => {
84
+ if (isUploading) {
85
+ return;
86
+ }
87
+ if (event.key === "Enter" || event.key === " ") {
88
+ event.preventDefault();
89
+ open();
90
+ }
91
+ },
92
+ "aria-label": label,
93
+ "aria-disabled": isUploading,
94
+ children: [
95
+ children,
96
+ isBlob && /* @__PURE__ */ jsx("span", { className: "fields__media-edit-picker-button-spinner", children: /* @__PURE__ */ jsx(Spinner, {}) }),
97
+ !isUploading && /* @__PURE__ */ jsx(
98
+ DropZone,
99
+ {
100
+ onFilesDrop: (files) => onFilesDrop(files, attachment?.id)
101
+ }
102
+ )
103
+ ]
104
+ }
105
+ );
106
+ if (!showTooltip) {
107
+ return mediaPickerButton;
108
+ }
109
+ return /* @__PURE__ */ jsx(Tooltip, { text: label, children: mediaPickerButton });
110
+ }
111
+ var archiveMimeTypes = [
112
+ "application/zip",
113
+ "application/x-zip-compressed",
114
+ "application/x-rar-compressed",
115
+ "application/x-7z-compressed",
116
+ "application/x-tar",
117
+ "application/x-gzip"
118
+ ];
119
+ function MediaTitle({ attachment }) {
120
+ return /* @__PURE__ */ jsx(Truncate, { className: "fields__media-edit-filename", children: attachment.title.rendered });
121
+ }
122
+ function MediaEditPlaceholder(props) {
123
+ return /* @__PURE__ */ jsx(MediaPickerButton, { ...props, children: /* @__PURE__ */ jsx("span", { className: "fields__media-edit-placeholder", children: props.label }) });
124
+ }
125
+ function MediaPreview({ attachment }) {
126
+ const url = attachment.source_url;
127
+ const mimeType = attachment.mime_type || "";
128
+ if (mimeType.startsWith("image")) {
129
+ return /* @__PURE__ */ jsx(
130
+ "img",
131
+ {
132
+ className: "fields__media-edit-thumbnail",
133
+ alt: attachment.alt_text || "",
134
+ src: url
135
+ }
136
+ );
137
+ } else if (mimeType.startsWith("audio")) {
138
+ return /* @__PURE__ */ jsx(Icon, { icon: audio });
139
+ } else if (mimeType.startsWith("video")) {
140
+ return /* @__PURE__ */ jsx(Icon, { icon: video });
141
+ } else if (archiveMimeTypes.includes(mimeType)) {
142
+ return /* @__PURE__ */ jsx(Icon, { icon: archive });
143
+ }
144
+ return /* @__PURE__ */ jsx(Icon, { icon: file });
145
+ }
146
+ function ExpandedMediaEditAttachments({
147
+ allItems,
148
+ addButtonLabel,
149
+ multiple,
150
+ removeItem,
151
+ open,
152
+ onFilesDrop,
153
+ isUploading
154
+ }) {
155
+ return /* @__PURE__ */ jsxs(
156
+ "div",
157
+ {
158
+ className: clsx("fields__media-edit-expanded", {
159
+ "is-multiple": multiple,
160
+ "is-single": !multiple,
161
+ "is-empty": !allItems?.length
162
+ }),
163
+ children: [
164
+ allItems?.map((attachment) => {
165
+ const hasPreviewImage = attachment.mime_type?.startsWith("image");
166
+ const isBlob = isBlobURL(attachment.source_url);
167
+ return /* @__PURE__ */ jsxs(
168
+ "div",
169
+ {
170
+ className: clsx("fields__media-edit-expanded-item", {
171
+ "has-preview-image": hasPreviewImage
172
+ }),
173
+ children: [
174
+ /* @__PURE__ */ jsx(
175
+ MediaPickerButton,
176
+ {
177
+ open,
178
+ label: __("Replace"),
179
+ showTooltip: true,
180
+ onFilesDrop,
181
+ attachment,
182
+ isUploading,
183
+ children: /* @__PURE__ */ jsx("div", { className: "fields__media-edit-expanded-preview", children: /* @__PURE__ */ jsxs(
184
+ VStack,
185
+ {
186
+ spacing: 0,
187
+ alignment: "center",
188
+ justify: "center",
189
+ className: "fields__media-edit-expanded-preview-stack",
190
+ children: [
191
+ (!isBlob || hasPreviewImage) && /* @__PURE__ */ jsx(
192
+ MediaPreview,
193
+ {
194
+ attachment
195
+ }
196
+ ),
197
+ !isBlob && (!hasPreviewImage ? /* @__PURE__ */ jsx(
198
+ MediaTitle,
199
+ {
200
+ attachment
201
+ }
202
+ ) : /* @__PURE__ */ jsx("div", { className: "fields__media-edit-expanded-overlay", children: /* @__PURE__ */ jsx("div", { className: "fields__media-edit-expanded-title", children: /* @__PURE__ */ jsx(
203
+ MediaTitle,
204
+ {
205
+ attachment
206
+ }
207
+ ) }) }))
208
+ ]
209
+ }
210
+ ) })
211
+ }
212
+ ),
213
+ !isBlob && /* @__PURE__ */ jsx("div", { className: "fields__media-edit-expanded-overlay", children: /* @__PURE__ */ jsx(
214
+ Button,
215
+ {
216
+ __next40pxDefaultSize: true,
217
+ className: "fields__media-edit-expanded-remove",
218
+ icon: closeSmall,
219
+ label: __("Remove"),
220
+ size: "small",
221
+ disabled: isUploading,
222
+ accessibleWhenDisabled: true,
223
+ onClick: (event) => {
224
+ event.stopPropagation();
225
+ removeItem(attachment.id);
226
+ }
227
+ }
228
+ ) })
229
+ ]
230
+ },
231
+ attachment.id
232
+ );
233
+ }),
234
+ (multiple || !allItems?.length) && /* @__PURE__ */ jsx(
235
+ MediaEditPlaceholder,
236
+ {
237
+ open,
238
+ label: addButtonLabel,
239
+ onFilesDrop,
240
+ isUploading
241
+ }
242
+ )
243
+ ]
244
+ }
245
+ );
246
+ }
247
+ function CompactMediaEditAttachments({
248
+ allItems,
249
+ addButtonLabel,
250
+ multiple,
251
+ removeItem,
252
+ open,
253
+ onFilesDrop,
254
+ isUploading
255
+ }) {
256
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
257
+ !!allItems?.length && /* @__PURE__ */ jsx(VStack, { spacing: 2, children: allItems.map((attachment) => {
258
+ const isBlob = isBlobURL(attachment.source_url);
259
+ return /* @__PURE__ */ jsxs(
260
+ "div",
261
+ {
262
+ className: "fields__media-edit-compact",
263
+ children: [
264
+ /* @__PURE__ */ jsx(
265
+ MediaPickerButton,
266
+ {
267
+ open,
268
+ label: __("Replace"),
269
+ showTooltip: true,
270
+ onFilesDrop,
271
+ attachment,
272
+ isUploading,
273
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
274
+ /* @__PURE__ */ jsx(
275
+ MediaPreview,
276
+ {
277
+ attachment
278
+ }
279
+ ),
280
+ !isBlob && /* @__PURE__ */ jsx(
281
+ MediaTitle,
282
+ {
283
+ attachment
284
+ }
285
+ )
286
+ ] })
287
+ }
288
+ ),
289
+ /* @__PURE__ */ jsx(
290
+ Button,
291
+ {
292
+ __next40pxDefaultSize: true,
293
+ className: "fields__media-edit-remove",
294
+ text: __("Remove"),
295
+ variant: "secondary",
296
+ disabled: isUploading,
297
+ accessibleWhenDisabled: true,
298
+ onClick: (event) => {
299
+ event.stopPropagation();
300
+ if (typeof attachment.id === "number") {
301
+ removeItem(attachment.id);
302
+ }
303
+ }
304
+ }
305
+ )
306
+ ]
307
+ },
308
+ attachment.id
309
+ );
310
+ }) }),
311
+ (multiple || !allItems?.length) && /* @__PURE__ */ jsx(
312
+ MediaEditPlaceholder,
313
+ {
314
+ open,
315
+ label: addButtonLabel,
316
+ onFilesDrop,
317
+ isUploading
318
+ }
319
+ )
320
+ ] });
321
+ }
322
+ function MediaEdit({
323
+ data,
324
+ field,
325
+ onChange,
326
+ hideLabelFromVision,
327
+ allowedTypes = ["image"],
328
+ multiple,
329
+ isExpanded
330
+ }) {
331
+ const value = field.getValue({ item: data });
332
+ const attachments = useSelect(
333
+ (select) => {
334
+ if (!value) {
335
+ return null;
336
+ }
337
+ const normalizedValue = Array.isArray(value) ? value : [value];
338
+ const { getEntityRecords } = select(coreStore);
339
+ return getEntityRecords("postType", "attachment", {
340
+ include: normalizedValue
341
+ });
342
+ },
343
+ [value]
344
+ );
345
+ const { createErrorNotice } = useDispatch(noticesStore);
346
+ const [replacementId, setReplacementId] = useState();
347
+ const [blobs, setBlobs] = useState([]);
348
+ const onChangeControl = useCallback(
349
+ (newValue) => onChange(field.setValue({ item: data, value: newValue })),
350
+ [data, field, onChange]
351
+ );
352
+ const removeItem = (itemId) => {
353
+ const currentIds = Array.isArray(value) ? value : [value];
354
+ const newIds = currentIds.filter((id) => id !== itemId);
355
+ onChangeControl(newIds.length ? newIds : void 0);
356
+ };
357
+ const onFilesDrop = useCallback(
358
+ (files, _replacementId) => {
359
+ uploadMedia({
360
+ allowedTypes: allowedTypes?.length ? allowedTypes : void 0,
361
+ filesList: files,
362
+ onFileChange(uploadedMedia) {
363
+ setReplacementId(_replacementId);
364
+ const { blobItems, uploadedItems } = uploadedMedia.reduce(
365
+ (accumulator, item) => {
366
+ if (isBlobURL(item.url)) {
367
+ accumulator.blobItems.push(item.url);
368
+ } else {
369
+ accumulator.uploadedItems.push(item.id);
370
+ }
371
+ return accumulator;
372
+ },
373
+ {
374
+ blobItems: [],
375
+ uploadedItems: []
376
+ }
377
+ );
378
+ setBlobs(blobItems);
379
+ if (uploadedItems.length === uploadedMedia.length) {
380
+ setReplacementId(void 0);
381
+ }
382
+ if (!uploadedItems.length) {
383
+ return;
384
+ }
385
+ if (!multiple) {
386
+ onChangeControl(uploadedItems[0]);
387
+ return;
388
+ }
389
+ if (!value) {
390
+ onChangeControl(uploadedItems);
391
+ return;
392
+ }
393
+ const normalizedValue = Array.isArray(value) ? value : [value];
394
+ const newIds = [
395
+ ..._replacementId ? normalizedValue.filter(
396
+ (id) => id !== _replacementId
397
+ ) : normalizedValue,
398
+ ...uploadedItems
399
+ ];
400
+ onChangeControl(newIds);
401
+ },
402
+ onError(error) {
403
+ setReplacementId(void 0);
404
+ setBlobs([]);
405
+ createErrorNotice(error.message, { type: "snackbar" });
406
+ },
407
+ multiple: !!multiple
408
+ });
409
+ },
410
+ [allowedTypes, value, multiple, createErrorNotice, onChangeControl]
411
+ );
412
+ const addButtonLabel = field.placeholder || (multiple ? __("Choose files") : __("Choose file"));
413
+ const allItems = useMemo(() => {
414
+ if (!blobs.length) {
415
+ return attachments;
416
+ }
417
+ const items = [
418
+ ...attachments || []
419
+ ];
420
+ const blobItems = blobs.map((url) => ({
421
+ id: url,
422
+ source_url: url,
423
+ mime_type: getBlobTypeByURL(url)
424
+ }));
425
+ const replacementIndex = items.findIndex(
426
+ (a) => a.id === replacementId
427
+ );
428
+ if (replacementIndex !== -1) {
429
+ return [
430
+ ...items.slice(0, replacementIndex),
431
+ ...blobItems,
432
+ ...items.slice(replacementIndex + 1)
433
+ ];
434
+ }
435
+ items.push(...blobItems);
436
+ return items;
437
+ }, [attachments, replacementId, blobs]);
438
+ return /* @__PURE__ */ jsx("fieldset", { className: "fields__media-edit", "data-field-id": field.id, children: /* @__PURE__ */ jsx(
439
+ ConditionalMediaUpload,
440
+ {
441
+ onSelect: (selectedMedia) => {
442
+ if (multiple) {
443
+ const newIds = Array.isArray(selectedMedia) ? selectedMedia.map((m) => m.id) : [selectedMedia.id];
444
+ onChangeControl(newIds);
445
+ } else {
446
+ onChangeControl(selectedMedia.id);
447
+ }
448
+ },
449
+ allowedTypes,
450
+ value,
451
+ multiple,
452
+ title: field.label,
453
+ render: ({ open }) => {
454
+ const AttachmentsComponent = isExpanded ? ExpandedMediaEditAttachments : CompactMediaEditAttachments;
455
+ return /* @__PURE__ */ jsxs(VStack, { spacing: 2, children: [
456
+ field.label && (hideLabelFromVision ? /* @__PURE__ */ jsx(VisuallyHidden, { as: "legend", children: field.label }) : /* @__PURE__ */ jsx(BaseControl.VisualLabel, { as: "legend", children: field.label })),
457
+ /* @__PURE__ */ jsx(
458
+ AttachmentsComponent,
459
+ {
460
+ allItems,
461
+ addButtonLabel,
462
+ multiple,
463
+ removeItem,
464
+ open,
465
+ onFilesDrop,
466
+ isUploading: !!blobs.length
467
+ }
468
+ ),
469
+ field.description && /* @__PURE__ */ jsx(Text, { variant: "muted", children: field.description })
470
+ ] });
471
+ }
472
+ }
473
+ ) });
474
+ }
475
+ export {
476
+ MediaEdit as default
477
+ };
478
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/media-edit/index.tsx"],
4
+ "sourcesContent": ["/**\n * External dependencies\n */\nimport clsx from 'clsx';\n\n/**\n * WordPress dependencies\n */\nimport {\n\tButton,\n\tDropZone,\n\tIcon,\n\tSpinner,\n\t__experimentalText as Text,\n\t__experimentalTruncate as Truncate,\n\t__experimentalVStack as VStack,\n\tBaseControl,\n\tTooltip,\n\tVisuallyHidden,\n} from '@wordpress/components';\nimport { isBlobURL, getBlobTypeByURL } from '@wordpress/blob';\nimport { store as coreStore, type Attachment } from '@wordpress/core-data';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCallback, useMemo, useState } from '@wordpress/element';\nimport { __ } from '@wordpress/i18n';\nimport { archive, audio, video, file, closeSmall } from '@wordpress/icons';\nimport {\n\tMediaUpload,\n\tuploadMedia,\n\tprivateApis as mediaUtilsPrivateApis,\n} from '@wordpress/media-utils';\nimport { store as noticesStore } from '@wordpress/notices';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport type { MediaEditProps } from '../../types';\n\nconst { MediaUploadModal } = unlock( mediaUtilsPrivateApis );\n\ntype BlobItem = {\n\tid: string;\n\tsource_url: string;\n\tmime_type: string | undefined;\n\talt_text?: string;\n};\n\n/**\n * Conditional Media component that uses MediaUploadModal when experiment is enabled,\n * otherwise falls back to media-utils MediaUpload.\n *\n * @param root0 Component props.\n * @param root0.render Render prop function that receives { open } object.\n * @param root0.multiple Whether to allow multiple media selections.\n * @return The component.\n */\nfunction ConditionalMediaUpload( { render, multiple, ...props }: any ) {\n\tconst [ isModalOpen, setIsModalOpen ] = useState( false );\n\tif ( ( window as any ).__experimentalDataViewsMediaModal ) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ render && render( { open: () => setIsModalOpen( true ) } ) }\n\t\t\t\t{ isModalOpen && (\n\t\t\t\t\t<MediaUploadModal\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\tmultiple={ multiple }\n\t\t\t\t\t\tisOpen={ isModalOpen }\n\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tprops.onClose?.();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonSelect={ ( media: any ) => {\n\t\t\t\t\t\t\tsetIsModalOpen( false );\n\t\t\t\t\t\t\tprops.onSelect?.( media );\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</>\n\t\t);\n\t}\n\t// Fallback to media-utils MediaUpload when experiment is disabled.\n\treturn (\n\t\t<MediaUpload\n\t\t\t{ ...props }\n\t\t\trender={ render }\n\t\t\tmultiple={ multiple ? 'add' : undefined }\n\t\t/>\n\t);\n}\n\nfunction MediaPickerButton( {\n\topen,\n\tchildren,\n\tlabel,\n\tshowTooltip = false,\n\tonFilesDrop,\n\tattachment,\n\tisUploading = false,\n}: {\n\topen: () => void;\n\tchildren: React.ReactNode;\n\tlabel: string;\n\tshowTooltip?: boolean;\n\tonFilesDrop: MediaEditAttachmentsProps[ 'onFilesDrop' ];\n\tattachment?: MediaEditAttachment;\n\tisUploading?: boolean;\n} ) {\n\tconst isBlob = attachment && isBlobURL( attachment.source_url );\n\tconst mediaPickerButton = (\n\t\t<div\n\t\t\tclassName=\"fields__media-edit-picker-button\"\n\t\t\trole=\"button\"\n\t\t\ttabIndex={ 0 }\n\t\t\tonClick={ () => {\n\t\t\t\tif ( ! isUploading ) {\n\t\t\t\t\topen();\n\t\t\t\t}\n\t\t\t} }\n\t\t\tonKeyDown={ ( event ) => {\n\t\t\t\tif ( isUploading ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\topen();\n\t\t\t\t}\n\t\t\t} }\n\t\t\taria-label={ label }\n\t\t\taria-disabled={ isUploading }\n\t\t>\n\t\t\t{ children }\n\t\t\t{ isBlob && (\n\t\t\t\t<span className=\"fields__media-edit-picker-button-spinner\">\n\t\t\t\t\t<Spinner />\n\t\t\t\t</span>\n\t\t\t) }\n\t\t\t{ ! isUploading && (\n\t\t\t\t<DropZone\n\t\t\t\t\tonFilesDrop={ ( files ) =>\n\t\t\t\t\t\tonFilesDrop( files, attachment?.id as number )\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n\tif ( ! showTooltip ) {\n\t\treturn mediaPickerButton;\n\t}\n\treturn <Tooltip text={ label }>{ mediaPickerButton }</Tooltip>;\n}\n\nconst archiveMimeTypes = [\n\t'application/zip',\n\t'application/x-zip-compressed',\n\t'application/x-rar-compressed',\n\t'application/x-7z-compressed',\n\t'application/x-tar',\n\t'application/x-gzip',\n];\n\nfunction MediaTitle( { attachment }: { attachment: Attachment< 'view' > } ) {\n\treturn (\n\t\t<Truncate className=\"fields__media-edit-filename\">\n\t\t\t{ attachment.title.rendered }\n\t\t</Truncate>\n\t);\n}\n\nfunction MediaEditPlaceholder( props: {\n\topen: () => void;\n\tlabel: string;\n\tonFilesDrop: MediaEditAttachmentsProps[ 'onFilesDrop' ];\n\tisUploading: boolean;\n} ) {\n\treturn (\n\t\t<MediaPickerButton { ...props }>\n\t\t\t<span className=\"fields__media-edit-placeholder\">\n\t\t\t\t{ props.label }\n\t\t\t</span>\n\t\t</MediaPickerButton>\n\t);\n}\n\nfunction MediaPreview( { attachment }: { attachment: MediaEditAttachment } ) {\n\tconst url = attachment.source_url;\n\tconst mimeType = attachment.mime_type || '';\n\tif ( mimeType.startsWith( 'image' ) ) {\n\t\treturn (\n\t\t\t<img\n\t\t\t\tclassName=\"fields__media-edit-thumbnail\"\n\t\t\t\talt={ attachment.alt_text || '' }\n\t\t\t\tsrc={ url }\n\t\t\t/>\n\t\t);\n\t} else if ( mimeType.startsWith( 'audio' ) ) {\n\t\treturn <Icon icon={ audio } />;\n\t} else if ( mimeType.startsWith( 'video' ) ) {\n\t\treturn <Icon icon={ video } />;\n\t} else if ( archiveMimeTypes.includes( mimeType ) ) {\n\t\treturn <Icon icon={ archive } />;\n\t}\n\treturn <Icon icon={ file } />;\n}\n\ntype MediaEditAttachment = Attachment< 'view' > | BlobItem;\ninterface MediaEditAttachmentsProps {\n\tallItems: Array< MediaEditAttachment > | null;\n\taddButtonLabel: string;\n\tmultiple?: boolean;\n\tremoveItem: ( itemId: number ) => void;\n\topen: () => void;\n\tonFilesDrop: ( files: File[], attachmentId?: number ) => void;\n\tisUploading: boolean;\n}\n\nfunction ExpandedMediaEditAttachments( {\n\tallItems,\n\taddButtonLabel,\n\tmultiple,\n\tremoveItem,\n\topen,\n\tonFilesDrop,\n\tisUploading,\n}: MediaEditAttachmentsProps ) {\n\treturn (\n\t\t<div\n\t\t\tclassName={ clsx( 'fields__media-edit-expanded', {\n\t\t\t\t'is-multiple': multiple,\n\t\t\t\t'is-single': ! multiple,\n\t\t\t\t'is-empty': ! allItems?.length,\n\t\t\t} ) }\n\t\t>\n\t\t\t{ allItems?.map( ( attachment ) => {\n\t\t\t\tconst hasPreviewImage =\n\t\t\t\t\tattachment.mime_type?.startsWith( 'image' );\n\t\t\t\tconst isBlob = isBlobURL( attachment.source_url );\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={ attachment.id }\n\t\t\t\t\t\tclassName={ clsx( 'fields__media-edit-expanded-item', {\n\t\t\t\t\t\t\t'has-preview-image': hasPreviewImage,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<MediaPickerButton\n\t\t\t\t\t\t\topen={ open }\n\t\t\t\t\t\t\tlabel={ __( 'Replace' ) }\n\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\t\t\t\tattachment={ attachment }\n\t\t\t\t\t\t\tisUploading={ isUploading }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"fields__media-edit-expanded-preview\">\n\t\t\t\t\t\t\t\t<VStack\n\t\t\t\t\t\t\t\t\tspacing={ 0 }\n\t\t\t\t\t\t\t\t\talignment=\"center\"\n\t\t\t\t\t\t\t\t\tjustify=\"center\"\n\t\t\t\t\t\t\t\t\tclassName=\"fields__media-edit-expanded-preview-stack\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ ( ! isBlob || hasPreviewImage ) && (\n\t\t\t\t\t\t\t\t\t\t<MediaPreview\n\t\t\t\t\t\t\t\t\t\t\tattachment={ attachment }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t{ ! isBlob &&\n\t\t\t\t\t\t\t\t\t\t( ! hasPreviewImage ? (\n\t\t\t\t\t\t\t\t\t\t\t<MediaTitle\n\t\t\t\t\t\t\t\t\t\t\t\tattachment={\n\t\t\t\t\t\t\t\t\t\t\t\t\tattachment as Attachment< 'view' >\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"fields__media-edit-expanded-overlay\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"fields__media-edit-expanded-title\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<MediaTitle\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tattachment={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tattachment as Attachment< 'view' >\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t\t</VStack>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</MediaPickerButton>\n\t\t\t\t\t\t{ ! isBlob && (\n\t\t\t\t\t\t\t<div className=\"fields__media-edit-expanded-overlay\">\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tclassName=\"fields__media-edit-expanded-remove\"\n\t\t\t\t\t\t\t\t\ticon={ closeSmall }\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Remove' ) }\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tdisabled={ isUploading }\n\t\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\t\tonClick={ (\n\t\t\t\t\t\t\t\t\t\tevent: React.MouseEvent< HTMLButtonElement >\n\t\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tremoveItem( attachment.id as number );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t\t{ ( multiple || ! allItems?.length ) && (\n\t\t\t\t<MediaEditPlaceholder\n\t\t\t\t\topen={ open }\n\t\t\t\t\tlabel={ addButtonLabel }\n\t\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\t\tisUploading={ isUploading }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</div>\n\t);\n}\n\nfunction CompactMediaEditAttachments( {\n\tallItems,\n\taddButtonLabel,\n\tmultiple,\n\tremoveItem,\n\topen,\n\tonFilesDrop,\n\tisUploading,\n}: MediaEditAttachmentsProps ) {\n\treturn (\n\t\t<>\n\t\t\t{ !! allItems?.length && (\n\t\t\t\t<VStack spacing={ 2 }>\n\t\t\t\t\t{ allItems.map( ( attachment ) => {\n\t\t\t\t\t\tconst isBlob = isBlobURL( attachment.source_url );\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={ attachment.id }\n\t\t\t\t\t\t\t\tclassName=\"fields__media-edit-compact\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<MediaPickerButton\n\t\t\t\t\t\t\t\t\topen={ open }\n\t\t\t\t\t\t\t\t\tlabel={ __( 'Replace' ) }\n\t\t\t\t\t\t\t\t\tshowTooltip\n\t\t\t\t\t\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\t\t\t\t\t\tattachment={ attachment }\n\t\t\t\t\t\t\t\t\tisUploading={ isUploading }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<MediaPreview\n\t\t\t\t\t\t\t\t\t\t\tattachment={ attachment }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{ ! isBlob && (\n\t\t\t\t\t\t\t\t\t\t\t<MediaTitle\n\t\t\t\t\t\t\t\t\t\t\t\tattachment={\n\t\t\t\t\t\t\t\t\t\t\t\t\tattachment as Attachment< 'view' >\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t</MediaPickerButton>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t__next40pxDefaultSize\n\t\t\t\t\t\t\t\t\tclassName=\"fields__media-edit-remove\"\n\t\t\t\t\t\t\t\t\ttext={ __( 'Remove' ) }\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tdisabled={ isUploading }\n\t\t\t\t\t\t\t\t\taccessibleWhenDisabled\n\t\t\t\t\t\t\t\t\tonClick={ (\n\t\t\t\t\t\t\t\t\t\tevent: React.MouseEvent< HTMLButtonElement >\n\t\t\t\t\t\t\t\t\t) => {\n\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\ttypeof attachment.id === 'number'\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tremoveItem( attachment.id );\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t} ) }\n\t\t\t\t</VStack>\n\t\t\t) }\n\t\t\t{ ( multiple || ! allItems?.length ) && (\n\t\t\t\t<MediaEditPlaceholder\n\t\t\t\t\topen={ open }\n\t\t\t\t\tlabel={ addButtonLabel }\n\t\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\t\tisUploading={ isUploading }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n}\n\n/**\n * A media edit control component that provides a media picker UI with upload functionality\n * for selecting WordPress media attachments. Supports both the traditional WordPress media\n * library and the experimental DataViews media modal.\n *\n * This component is intended to be used as the `Edit` property of a field definition when\n * registering fields with `registerEntityField` from `@wordpress/editor`.\n *\n * @template Item - The type of the item being edited.\n *\n * @param {MediaEditProps<Item>} props - The component props.\n * @param {Item} props.data - The item being edited.\n * @param {Object} props.field - The field configuration with getValue and setValue methods.\n * @param {Function} props.onChange - Callback function when the media selection changes.\n * @param {string[]} [props.allowedTypes] - Array of allowed media types. Default `['image']`.\n * @param {boolean} [props.multiple] - Whether to allow multiple media selections. Default `false`.\n * @param {boolean} [props.hideLabelFromVision] - Whether the label should be hidden from vision.\n * @param {boolean} [props.isExpanded] - Whether to render in an expanded form. Default `false`.\n *\n * @return {JSX.Element} The media edit control component.\n *\n * @example\n * ```tsx\n * import { MediaEdit } from '@wordpress/fields';\n * import type { DataFormControlProps } from '@wordpress/dataviews';\n *\n * const featuredImageField = {\n * id: 'featured_media',\n * type: 'media',\n * label: 'Featured Image',\n * Edit: (props: DataFormControlProps<MyPostType>) => (\n * <MediaEdit\n * {...props}\n * allowedTypes={['image']}\n * />\n * ),\n * };\n * ```\n */\nexport default function MediaEdit< Item >( {\n\tdata,\n\tfield,\n\tonChange,\n\thideLabelFromVision,\n\tallowedTypes = [ 'image' ],\n\tmultiple,\n\tisExpanded,\n}: MediaEditProps< Item > ) {\n\tconst value = field.getValue( { item: data } );\n\tconst attachments = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! value ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst normalizedValue = Array.isArray( value ) ? value : [ value ];\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\t\t\treturn getEntityRecords( 'postType', 'attachment', {\n\t\t\t\tinclude: normalizedValue,\n\t\t\t} ) as Attachment< 'view' >[] | null;\n\t\t},\n\t\t[ value ]\n\t);\n\tconst { createErrorNotice } = useDispatch( noticesStore );\n\t// Support one upload action at a time for now.\n\tconst [ replacementId, setReplacementId ] = useState< number >();\n\tconst [ blobs, setBlobs ] = useState< string[] >( [] );\n\tconst onChangeControl = useCallback(\n\t\t( newValue: number | number[] | undefined ) =>\n\t\t\tonChange( field.setValue( { item: data, value: newValue } ) ),\n\t\t[ data, field, onChange ]\n\t);\n\tconst removeItem = ( itemId: number ) => {\n\t\tconst currentIds = Array.isArray( value ) ? value : [ value ];\n\t\tconst newIds = currentIds.filter( ( id ) => id !== itemId );\n\t\tonChangeControl( newIds.length ? newIds : undefined );\n\t};\n\tconst onFilesDrop = useCallback(\n\t\t( files: File[], _replacementId?: number ) => {\n\t\t\tuploadMedia( {\n\t\t\t\tallowedTypes: allowedTypes?.length ? allowedTypes : undefined,\n\t\t\t\tfilesList: files,\n\t\t\t\tonFileChange( uploadedMedia: any[] ) {\n\t\t\t\t\tsetReplacementId( _replacementId );\n\t\t\t\t\tconst { blobItems, uploadedItems } = uploadedMedia.reduce(\n\t\t\t\t\t\t( accumulator, item ) => {\n\t\t\t\t\t\t\tif ( isBlobURL( item.url ) ) {\n\t\t\t\t\t\t\t\taccumulator.blobItems.push( item.url );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\taccumulator.uploadedItems.push( item.id );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn accumulator;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tblobItems: [] as string[],\n\t\t\t\t\t\t\tuploadedItems: [] as number[],\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\tsetBlobs( blobItems );\n\t\t\t\t\t// If all uploads are complete reset the replacementId.\n\t\t\t\t\tif ( uploadedItems.length === uploadedMedia.length ) {\n\t\t\t\t\t\tsetReplacementId( undefined );\n\t\t\t\t\t}\n\t\t\t\t\tif ( ! uploadedItems.length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ! multiple ) {\n\t\t\t\t\t\tonChangeControl( uploadedItems[ 0 ] );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( ! value ) {\n\t\t\t\t\t\tonChangeControl( uploadedItems );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst normalizedValue = Array.isArray( value )\n\t\t\t\t\t\t? value\n\t\t\t\t\t\t: [ value ];\n\t\t\t\t\tconst newIds = [\n\t\t\t\t\t\t...( _replacementId\n\t\t\t\t\t\t\t? normalizedValue.filter(\n\t\t\t\t\t\t\t\t\t( id: any ) => id !== _replacementId\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: normalizedValue ),\n\t\t\t\t\t\t...uploadedItems,\n\t\t\t\t\t];\n\t\t\t\t\tonChangeControl( newIds );\n\t\t\t\t},\n\t\t\t\tonError( error: Error ) {\n\t\t\t\t\tsetReplacementId( undefined );\n\t\t\t\t\tsetBlobs( [] );\n\t\t\t\t\tcreateErrorNotice( error.message, { type: 'snackbar' } );\n\t\t\t\t},\n\t\t\t\tmultiple: !! multiple,\n\t\t\t} );\n\t\t},\n\t\t[ allowedTypes, value, multiple, createErrorNotice, onChangeControl ]\n\t);\n\tconst addButtonLabel =\n\t\tfield.placeholder ||\n\t\t( multiple ? __( 'Choose files' ) : __( 'Choose file' ) );\n\t// Merge real attachments with any existing blob items that are being uploaded.\n\tconst allItems: Array< MediaEditAttachment > | null = useMemo( () => {\n\t\tif ( ! blobs.length ) {\n\t\t\treturn attachments;\n\t\t}\n\t\tconst items: Array< MediaEditAttachment > = [\n\t\t\t...( attachments || [] ),\n\t\t];\n\t\tconst blobItems = blobs.map( ( url ) => ( {\n\t\t\tid: url,\n\t\t\tsource_url: url,\n\t\t\tmime_type: getBlobTypeByURL( url ),\n\t\t} ) );\n\t\tconst replacementIndex = items.findIndex(\n\t\t\t( a ) => a.id === replacementId\n\t\t);\n\t\t// Place blobs at the replacement index, when files\n\t\t// dropped in existing media item.\n\t\tif ( replacementIndex !== -1 ) {\n\t\t\treturn [\n\t\t\t\t...items.slice( 0, replacementIndex ),\n\t\t\t\t...blobItems,\n\t\t\t\t...items.slice( replacementIndex + 1 ),\n\t\t\t];\n\t\t}\n\t\titems.push( ...blobItems );\n\t\treturn items;\n\t}, [ attachments, replacementId, blobs ] );\n\treturn (\n\t\t<fieldset className=\"fields__media-edit\" data-field-id={ field.id }>\n\t\t\t<ConditionalMediaUpload\n\t\t\t\tonSelect={ ( selectedMedia: any ) => {\n\t\t\t\t\tif ( multiple ) {\n\t\t\t\t\t\tconst newIds = Array.isArray( selectedMedia )\n\t\t\t\t\t\t\t? selectedMedia.map( ( m: any ) => m.id )\n\t\t\t\t\t\t\t: [ selectedMedia.id ];\n\t\t\t\t\t\tonChangeControl( newIds );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonChangeControl( selectedMedia.id );\n\t\t\t\t\t}\n\t\t\t\t} }\n\t\t\t\tallowedTypes={ allowedTypes }\n\t\t\t\tvalue={ value }\n\t\t\t\tmultiple={ multiple }\n\t\t\t\ttitle={ field.label }\n\t\t\t\trender={ ( { open }: any ) => {\n\t\t\t\t\tconst AttachmentsComponent = isExpanded\n\t\t\t\t\t\t? ExpandedMediaEditAttachments\n\t\t\t\t\t\t: CompactMediaEditAttachments;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<VStack spacing={ 2 }>\n\t\t\t\t\t\t\t{ field.label &&\n\t\t\t\t\t\t\t\t( hideLabelFromVision ? (\n\t\t\t\t\t\t\t\t\t<VisuallyHidden as=\"legend\">\n\t\t\t\t\t\t\t\t\t\t{ field.label }\n\t\t\t\t\t\t\t\t\t</VisuallyHidden>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<BaseControl.VisualLabel as=\"legend\">\n\t\t\t\t\t\t\t\t\t\t{ field.label }\n\t\t\t\t\t\t\t\t\t</BaseControl.VisualLabel>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t<AttachmentsComponent\n\t\t\t\t\t\t\t\tallItems={ allItems }\n\t\t\t\t\t\t\t\taddButtonLabel={ addButtonLabel }\n\t\t\t\t\t\t\t\tmultiple={ multiple }\n\t\t\t\t\t\t\t\tremoveItem={ removeItem }\n\t\t\t\t\t\t\t\topen={ open }\n\t\t\t\t\t\t\t\tonFilesDrop={ onFilesDrop }\n\t\t\t\t\t\t\t\tisUploading={ !! blobs.length }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{ field.description && (\n\t\t\t\t\t\t\t\t<Text variant=\"muted\">\n\t\t\t\t\t\t\t\t\t{ field.description }\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</VStack>\n\t\t\t\t\t);\n\t\t\t\t} }\n\t\t\t/>\n\t\t</fieldset>\n\t);\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -51,4 +51,4 @@ var author_view_default = AuthorView;
51
51
  export {
52
52
  author_view_default as default
53
53
  };
54
- //# sourceMappingURL=author-view.js.map
54
+ //# sourceMappingURL=author-view.mjs.map
@@ -2,7 +2,7 @@
2
2
  import { __ } from "@wordpress/i18n";
3
3
  import { resolveSelect } from "@wordpress/data";
4
4
  import { store as coreDataStore } from "@wordpress/core-data";
5
- import AuthorView from "./author-view";
5
+ import AuthorView from "./author-view.mjs";
6
6
  var authorField = {
7
7
  label: __("Author"),
8
8
  id: "author",
@@ -35,4 +35,4 @@ var author_default = authorField;
35
35
  export {
36
36
  author_default as default
37
37
  };
38
- //# sourceMappingURL=index.js.map
38
+ //# sourceMappingURL=index.mjs.map
@@ -27,4 +27,4 @@ var comment_status_default = commentStatusField;
27
27
  export {
28
28
  comment_status_default as default
29
29
  };
30
- //# sourceMappingURL=index.js.map
30
+ //# sourceMappingURL=index.mjs.map
@@ -73,4 +73,4 @@ var date_view_default = DateView;
73
73
  export {
74
74
  date_view_default as default
75
75
  };
76
- //# sourceMappingURL=date-view.js.map
76
+ //# sourceMappingURL=date-view.mjs.map
@@ -1,6 +1,6 @@
1
1
  // packages/fields/src/fields/date/index.tsx
2
2
  import { __ } from "@wordpress/i18n";
3
- import DateView from "./date-view";
3
+ import DateView from "./date-view.mjs";
4
4
  var dateField = {
5
5
  id: "date",
6
6
  type: "datetime",
@@ -14,4 +14,4 @@ var date_default = dateField;
14
14
  export {
15
15
  date_default as default
16
16
  };
17
- //# sourceMappingURL=index.js.map
17
+ //# sourceMappingURL=index.mjs.map
@@ -24,4 +24,4 @@ var discussion_default = discussionField;
24
24
  export {
25
25
  discussion_default as default
26
26
  };
27
- //# sourceMappingURL=index.js.map
27
+ //# sourceMappingURL=index.mjs.map
@@ -25,4 +25,4 @@ var FeaturedImageView = ({
25
25
  export {
26
26
  FeaturedImageView
27
27
  };
28
- //# sourceMappingURL=featured-image-view.js.map
28
+ //# sourceMappingURL=featured-image-view.mjs.map
@@ -1,13 +1,16 @@
1
- // packages/fields/src/fields/featured-image/index.ts
1
+ // packages/fields/src/fields/featured-image/index.tsx
2
2
  import { __ } from "@wordpress/i18n";
3
- import { FeaturedImageEdit } from "./featured-image-edit";
4
- import { FeaturedImageView } from "./featured-image-view";
3
+ import MediaEdit from "../../components/media-edit/index.mjs";
4
+ import { FeaturedImageView } from "./featured-image-view.mjs";
5
5
  var featuredImageField = {
6
6
  id: "featured_media",
7
7
  type: "media",
8
8
  label: __("Featured Image"),
9
- Edit: FeaturedImageEdit,
9
+ Edit: MediaEdit,
10
10
  render: FeaturedImageView,
11
+ setValue: ({ value }) => ({
12
+ featured_media: value ?? 0
13
+ }),
11
14
  enableSorting: false,
12
15
  filterBy: false
13
16
  };
@@ -15,4 +18,4 @@ var featured_image_default = featuredImageField;
15
18
  export {
16
19
  featured_image_default as default
17
20
  };
18
- //# sourceMappingURL=index.js.map
21
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/fields/featured-image/index.tsx"],
4
+ "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport type { Field } from '@wordpress/dataviews';\nimport { __ } from '@wordpress/i18n';\n\n/**\n * Internal dependencies\n */\nimport MediaEdit from '../../components/media-edit';\nimport type { BasePostWithEmbeddedFeaturedMedia } from '../../types';\nimport { FeaturedImageView } from './featured-image-view';\n\nconst featuredImageField: Field< BasePostWithEmbeddedFeaturedMedia > = {\n\tid: 'featured_media',\n\ttype: 'media',\n\tlabel: __( 'Featured Image' ),\n\tEdit: MediaEdit,\n\trender: FeaturedImageView,\n\tsetValue: ( { value } ) => ( {\n\t\tfeatured_media: value ?? 0,\n\t} ),\n\tenableSorting: false,\n\tfilterBy: false,\n};\n\n/**\n * Featured Image field for BasePostWithEmbeddedFeaturedMedia.\n */\nexport default featuredImageField;\n"],
5
+ "mappings": ";AAIA,SAAS,UAAU;AAKnB,OAAO,eAAe;AAEtB,SAAS,yBAAyB;AAElC,IAAM,qBAAiE;AAAA,EACtE,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO,GAAI,gBAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU,CAAE,EAAE,MAAM,OAAS;AAAA,IAC5B,gBAAgB,SAAS;AAAA,EAC1B;AAAA,EACA,eAAe;AAAA,EACf,UAAU;AACX;AAKA,IAAO,yBAAQ;",
6
+ "names": []
7
+ }