@wordpress/block-library 9.48.1 → 10.0.1-next.v.202606191442.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 (480) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/build/breadcrumbs/edit.cjs +1 -1
  3. package/build/breadcrumbs/edit.cjs.map +1 -1
  4. package/build/button/edit.cjs +1 -1
  5. package/build/button/edit.cjs.map +2 -2
  6. package/build/categories/edit.cjs +1 -1
  7. package/build/categories/edit.cjs.map +1 -1
  8. package/build/code/edit.cjs +1 -1
  9. package/build/code/edit.cjs.map +2 -2
  10. package/build/code/index.cjs +1 -1
  11. package/build/code/index.cjs.map +1 -1
  12. package/build/columns/utils.cjs.map +1 -1
  13. package/build/comments/edit/comments-legacy.cjs +1 -1
  14. package/build/comments/edit/comments-legacy.cjs.map +1 -1
  15. package/build/comments/edit/placeholder.cjs +4 -4
  16. package/build/comments/edit/placeholder.cjs.map +1 -1
  17. package/build/comments-pagination-next/edit.cjs +2 -2
  18. package/build/comments-pagination-next/edit.cjs.map +1 -1
  19. package/build/comments-pagination-previous/edit.cjs +2 -2
  20. package/build/comments-pagination-previous/edit.cjs.map +1 -1
  21. package/build/cover/deprecated.cjs +3 -3
  22. package/build/cover/deprecated.cjs.map +2 -2
  23. package/build/cover/edit/block-controls.cjs +13 -0
  24. package/build/cover/edit/block-controls.cjs.map +2 -2
  25. package/build/cover/edit/index.cjs +61 -2
  26. package/build/cover/edit/index.cjs.map +3 -3
  27. package/build/cover/edit/inspector-controls.cjs +93 -35
  28. package/build/cover/edit/inspector-controls.cjs.map +2 -2
  29. package/build/details/edit.cjs +1 -1
  30. package/build/details/edit.cjs.map +2 -2
  31. package/build/embed/embed-placeholder.cjs +1 -1
  32. package/build/embed/embed-placeholder.cjs.map +2 -2
  33. package/build/file/edit.cjs +3 -11
  34. package/build/file/edit.cjs.map +2 -2
  35. package/build/file/index.cjs +3 -1
  36. package/build/file/index.cjs.map +3 -3
  37. package/build/file/transforms.cjs +11 -32
  38. package/build/file/transforms.cjs.map +2 -2
  39. package/build/file/variations.cjs +38 -0
  40. package/build/file/variations.cjs.map +7 -0
  41. package/build/footnotes/edit.cjs +1 -1
  42. package/build/footnotes/edit.cjs.map +2 -2
  43. package/build/form-input/edit.cjs +1 -1
  44. package/build/form-input/edit.cjs.map +2 -2
  45. package/build/freeform/edit.cjs +1 -1
  46. package/build/freeform/edit.cjs.map +1 -1
  47. package/build/gallery/edit.cjs +2 -2
  48. package/build/gallery/edit.cjs.map +2 -2
  49. package/build/home-link/edit.cjs +1 -1
  50. package/build/home-link/edit.cjs.map +2 -2
  51. package/build/html/index.cjs +1 -1
  52. package/build/html/index.cjs.map +2 -2
  53. package/build/html/modal.cjs +3 -3
  54. package/build/html/modal.cjs.map +2 -2
  55. package/build/icon/block.json +12 -0
  56. package/build/icon/edit.cjs +90 -39
  57. package/build/icon/edit.cjs.map +3 -3
  58. package/build/icon/index.cjs +3 -1
  59. package/build/icon/index.cjs.map +3 -3
  60. package/build/{tab/save.cjs → icon/variations.cjs} +14 -15
  61. package/build/icon/variations.cjs.map +7 -0
  62. package/build/image/block.json +1 -0
  63. package/build/image/edit.cjs +4 -3
  64. package/build/image/edit.cjs.map +2 -2
  65. package/build/image/image.cjs +91 -27
  66. package/build/image/image.cjs.map +2 -2
  67. package/build/image/index.cjs +1 -1
  68. package/build/image/index.cjs.map +2 -2
  69. package/build/image/transforms.cjs +9 -3
  70. package/build/image/transforms.cjs.map +2 -2
  71. package/build/index.cjs +1 -3
  72. package/build/index.cjs.map +2 -2
  73. package/build/latest-posts/edit.cjs +1 -1
  74. package/build/latest-posts/edit.cjs.map +1 -1
  75. package/build/math/edit.cjs +1 -1
  76. package/build/math/index.cjs +1 -1
  77. package/build/math/index.cjs.map +1 -1
  78. package/build/media-text/constants.cjs +1 -1
  79. package/build/media-text/constants.cjs.map +2 -2
  80. package/build/media-text/index.cjs +1 -1
  81. package/build/media-text/index.cjs.map +2 -2
  82. package/build/missing/edit.cjs +2 -2
  83. package/build/missing/edit.cjs.map +1 -1
  84. package/build/navigation/edit/index.cjs +14 -8
  85. package/build/navigation/edit/index.cjs.map +2 -2
  86. package/build/navigation/edit/navigation-menu-selector.cjs +1 -1
  87. package/build/navigation/edit/navigation-menu-selector.cjs.map +2 -2
  88. package/build/navigation/edit/placeholder/index.cjs +1 -1
  89. package/build/navigation/edit/placeholder/index.cjs.map +2 -2
  90. package/build/navigation-link/edit.cjs +1 -1
  91. package/build/navigation-link/edit.cjs.map +2 -2
  92. package/build/navigation-submenu/block.json +7 -0
  93. package/build/navigation-submenu/edit.cjs +1 -1
  94. package/build/navigation-submenu/edit.cjs.map +2 -2
  95. package/build/page-list/block.json +2 -5
  96. package/build/page-list/edit.cjs +1 -11
  97. package/build/page-list/edit.cjs.map +2 -2
  98. package/build/post-author/edit.cjs +1 -1
  99. package/build/post-author/edit.cjs.map +2 -2
  100. package/build/post-author/utils.cjs +1 -1
  101. package/build/post-author/utils.cjs.map +2 -2
  102. package/build/post-date/edit.cjs +2 -2
  103. package/build/post-date/edit.cjs.map +2 -2
  104. package/build/post-excerpt/edit.cjs +2 -2
  105. package/build/post-excerpt/edit.cjs.map +2 -2
  106. package/build/post-featured-image/block.json +1 -0
  107. package/build/post-featured-image/dimension-controls.cjs +90 -178
  108. package/build/post-featured-image/dimension-controls.cjs.map +3 -3
  109. package/build/post-featured-image/edit.cjs +47 -17
  110. package/build/post-featured-image/edit.cjs.map +2 -2
  111. package/build/post-navigation-link/edit.cjs +2 -2
  112. package/build/post-navigation-link/edit.cjs.map +2 -2
  113. package/build/post-time-to-read/edit.cjs +1 -1
  114. package/build/post-time-to-read/edit.cjs.map +1 -1
  115. package/build/preformatted/edit.cjs +1 -1
  116. package/build/preformatted/edit.cjs.map +2 -2
  117. package/build/pullquote/block.json +1 -3
  118. package/build/pullquote/deprecated.cjs +114 -9
  119. package/build/pullquote/deprecated.cjs.map +3 -3
  120. package/build/pullquote/edit.cjs +43 -61
  121. package/build/pullquote/edit.cjs.map +3 -3
  122. package/build/pullquote/save.cjs +5 -26
  123. package/build/pullquote/save.cjs.map +3 -3
  124. package/build/query/edit/inspector-controls/enhanced-pagination-control.cjs +1 -1
  125. package/build/query/edit/inspector-controls/enhanced-pagination-control.cjs.map +1 -1
  126. package/build/query/edit/inspector-controls/order-control.cjs +2 -2
  127. package/build/query/edit/inspector-controls/order-control.cjs.map +2 -2
  128. package/build/query/utils.cjs +2 -2
  129. package/build/query/utils.cjs.map +2 -2
  130. package/build/query-pagination-next/edit.cjs +2 -2
  131. package/build/query-pagination-next/edit.cjs.map +1 -1
  132. package/build/query-pagination-previous/edit.cjs +2 -2
  133. package/build/query-pagination-previous/edit.cjs.map +1 -1
  134. package/build/query-title/edit.cjs +1 -1
  135. package/build/query-title/edit.cjs.map +2 -2
  136. package/build/query-total/edit.cjs +1 -1
  137. package/build/query-total/edit.cjs.map +2 -2
  138. package/build/quote/index.cjs +1 -1
  139. package/build/quote/index.cjs.map +2 -2
  140. package/build/read-more/edit.cjs +1 -1
  141. package/build/read-more/edit.cjs.map +2 -2
  142. package/build/rss/edit.cjs +1 -1
  143. package/build/rss/edit.cjs.map +2 -2
  144. package/build/search/edit.cjs +3 -3
  145. package/build/search/edit.cjs.map +2 -2
  146. package/build/shortcode/edit.cjs +1 -1
  147. package/build/shortcode/edit.cjs.map +2 -2
  148. package/build/site-tagline/edit.cjs +1 -1
  149. package/build/site-tagline/edit.cjs.map +2 -2
  150. package/build/site-title/edit.cjs +1 -1
  151. package/build/site-title/edit.cjs.map +2 -2
  152. package/build/tab-list/block.json +34 -21
  153. package/build/tab-list/edit.cjs +116 -12
  154. package/build/tab-list/edit.cjs.map +3 -3
  155. package/build/tab-list/save.cjs +33 -3
  156. package/build/tab-list/save.cjs.map +3 -3
  157. package/build/tab-panel/add-tab-toolbar-control.cjs +19 -8
  158. package/build/tab-panel/add-tab-toolbar-control.cjs.map +2 -2
  159. package/build/tab-panel/block.json +2 -6
  160. package/build/tab-panel/remove-tab-toolbar-control.cjs +9 -14
  161. package/build/tab-panel/remove-tab-toolbar-control.cjs.map +2 -2
  162. package/build/tab-panels/block.json +2 -27
  163. package/build/table/index.cjs +1 -1
  164. package/build/table/index.cjs.map +2 -2
  165. package/build/tabs/block.json +3 -17
  166. package/build/tabs/edit.cjs +7 -21
  167. package/build/tabs/edit.cjs.map +3 -3
  168. package/build/tabs/index.cjs +6 -10
  169. package/build/tabs/index.cjs.map +2 -2
  170. package/build/tabs/use-tab-list-items-sync.cjs +53 -0
  171. package/build/tabs/use-tab-list-items-sync.cjs.map +7 -0
  172. package/build/tabs/view.cjs +2 -10
  173. package/build/tabs/view.cjs.map +2 -2
  174. package/build/terms-query/edit/inspector-controls/order-control.cjs +2 -2
  175. package/build/terms-query/edit/inspector-controls/order-control.cjs.map +2 -2
  176. package/build/utils/style-state.cjs +164 -0
  177. package/build/utils/style-state.cjs.map +7 -0
  178. package/build/utils/waveform-player.cjs +1 -1
  179. package/build/verse/edit.cjs +1 -1
  180. package/build/verse/edit.cjs.map +2 -2
  181. package/build-module/breadcrumbs/edit.mjs +1 -1
  182. package/build-module/breadcrumbs/edit.mjs.map +1 -1
  183. package/build-module/button/edit.mjs +1 -1
  184. package/build-module/button/edit.mjs.map +2 -2
  185. package/build-module/categories/edit.mjs +1 -1
  186. package/build-module/categories/edit.mjs.map +1 -1
  187. package/build-module/code/edit.mjs +1 -1
  188. package/build-module/code/edit.mjs.map +2 -2
  189. package/build-module/code/index.mjs +1 -1
  190. package/build-module/code/index.mjs.map +1 -1
  191. package/build-module/columns/utils.mjs.map +1 -1
  192. package/build-module/comments/edit/comments-legacy.mjs +1 -1
  193. package/build-module/comments/edit/comments-legacy.mjs.map +1 -1
  194. package/build-module/comments/edit/placeholder.mjs +4 -4
  195. package/build-module/comments/edit/placeholder.mjs.map +1 -1
  196. package/build-module/comments-pagination-next/edit.mjs +2 -2
  197. package/build-module/comments-pagination-next/edit.mjs.map +1 -1
  198. package/build-module/comments-pagination-previous/edit.mjs +2 -2
  199. package/build-module/comments-pagination-previous/edit.mjs.map +1 -1
  200. package/build-module/cover/deprecated.mjs +3 -3
  201. package/build-module/cover/deprecated.mjs.map +2 -2
  202. package/build-module/cover/edit/block-controls.mjs +15 -2
  203. package/build-module/cover/edit/block-controls.mjs.map +2 -2
  204. package/build-module/cover/edit/index.mjs +64 -3
  205. package/build-module/cover/edit/index.mjs.map +2 -2
  206. package/build-module/cover/edit/inspector-controls.mjs +98 -35
  207. package/build-module/cover/edit/inspector-controls.mjs.map +2 -2
  208. package/build-module/details/edit.mjs +1 -1
  209. package/build-module/details/edit.mjs.map +2 -2
  210. package/build-module/embed/embed-placeholder.mjs +1 -1
  211. package/build-module/embed/embed-placeholder.mjs.map +2 -2
  212. package/build-module/file/edit.mjs +5 -13
  213. package/build-module/file/edit.mjs.map +2 -2
  214. package/build-module/file/index.mjs +3 -1
  215. package/build-module/file/index.mjs.map +2 -2
  216. package/build-module/file/transforms.mjs +11 -32
  217. package/build-module/file/transforms.mjs.map +2 -2
  218. package/build-module/file/variations.mjs +17 -0
  219. package/build-module/file/variations.mjs.map +7 -0
  220. package/build-module/footnotes/edit.mjs +1 -1
  221. package/build-module/footnotes/edit.mjs.map +2 -2
  222. package/build-module/form-input/edit.mjs +1 -1
  223. package/build-module/form-input/edit.mjs.map +2 -2
  224. package/build-module/freeform/edit.mjs +1 -1
  225. package/build-module/freeform/edit.mjs.map +1 -1
  226. package/build-module/gallery/edit.mjs +2 -2
  227. package/build-module/gallery/edit.mjs.map +2 -2
  228. package/build-module/home-link/edit.mjs +1 -1
  229. package/build-module/home-link/edit.mjs.map +2 -2
  230. package/build-module/html/index.mjs +1 -1
  231. package/build-module/html/index.mjs.map +2 -2
  232. package/build-module/html/modal.mjs +3 -3
  233. package/build-module/html/modal.mjs.map +2 -2
  234. package/build-module/icon/block.json +12 -0
  235. package/build-module/icon/edit.mjs +94 -40
  236. package/build-module/icon/edit.mjs.map +2 -2
  237. package/build-module/icon/index.mjs +3 -1
  238. package/build-module/icon/index.mjs.map +2 -2
  239. package/build-module/icon/variations.mjs +13 -0
  240. package/build-module/icon/variations.mjs.map +7 -0
  241. package/build-module/image/block.json +1 -0
  242. package/build-module/image/edit.mjs +4 -3
  243. package/build-module/image/edit.mjs.map +2 -2
  244. package/build-module/image/image.mjs +96 -27
  245. package/build-module/image/image.mjs.map +2 -2
  246. package/build-module/image/index.mjs +1 -1
  247. package/build-module/image/index.mjs.map +2 -2
  248. package/build-module/image/transforms.mjs +9 -3
  249. package/build-module/image/transforms.mjs.map +2 -2
  250. package/build-module/index.mjs +1 -3
  251. package/build-module/index.mjs.map +2 -2
  252. package/build-module/latest-posts/edit.mjs +1 -1
  253. package/build-module/latest-posts/edit.mjs.map +1 -1
  254. package/build-module/math/edit.mjs +1 -1
  255. package/build-module/math/index.mjs +1 -1
  256. package/build-module/math/index.mjs.map +1 -1
  257. package/build-module/media-text/constants.mjs +1 -1
  258. package/build-module/media-text/constants.mjs.map +2 -2
  259. package/build-module/media-text/index.mjs +1 -1
  260. package/build-module/media-text/index.mjs.map +2 -2
  261. package/build-module/missing/edit.mjs +2 -2
  262. package/build-module/missing/edit.mjs.map +1 -1
  263. package/build-module/navigation/edit/index.mjs +14 -8
  264. package/build-module/navigation/edit/index.mjs.map +2 -2
  265. package/build-module/navigation/edit/navigation-menu-selector.mjs +1 -1
  266. package/build-module/navigation/edit/navigation-menu-selector.mjs.map +2 -2
  267. package/build-module/navigation/edit/placeholder/index.mjs +1 -1
  268. package/build-module/navigation/edit/placeholder/index.mjs.map +2 -2
  269. package/build-module/navigation-link/edit.mjs +1 -1
  270. package/build-module/navigation-link/edit.mjs.map +2 -2
  271. package/build-module/navigation-submenu/block.json +7 -0
  272. package/build-module/navigation-submenu/edit.mjs +1 -1
  273. package/build-module/navigation-submenu/edit.mjs.map +2 -2
  274. package/build-module/page-list/block.json +2 -5
  275. package/build-module/page-list/edit.mjs +1 -11
  276. package/build-module/page-list/edit.mjs.map +2 -2
  277. package/build-module/post-author/edit.mjs +1 -1
  278. package/build-module/post-author/edit.mjs.map +2 -2
  279. package/build-module/post-author/utils.mjs +1 -1
  280. package/build-module/post-author/utils.mjs.map +2 -2
  281. package/build-module/post-date/edit.mjs +2 -2
  282. package/build-module/post-date/edit.mjs.map +2 -2
  283. package/build-module/post-excerpt/edit.mjs +2 -2
  284. package/build-module/post-excerpt/edit.mjs.map +2 -2
  285. package/build-module/post-featured-image/block.json +1 -0
  286. package/build-module/post-featured-image/dimension-controls.mjs +99 -187
  287. package/build-module/post-featured-image/dimension-controls.mjs.map +2 -2
  288. package/build-module/post-featured-image/edit.mjs +47 -17
  289. package/build-module/post-featured-image/edit.mjs.map +2 -2
  290. package/build-module/post-navigation-link/edit.mjs +2 -2
  291. package/build-module/post-navigation-link/edit.mjs.map +2 -2
  292. package/build-module/post-time-to-read/edit.mjs +1 -1
  293. package/build-module/post-time-to-read/edit.mjs.map +1 -1
  294. package/build-module/preformatted/edit.mjs +1 -1
  295. package/build-module/preformatted/edit.mjs.map +2 -2
  296. package/build-module/pullquote/block.json +1 -3
  297. package/build-module/pullquote/deprecated.mjs +114 -9
  298. package/build-module/pullquote/deprecated.mjs.map +2 -2
  299. package/build-module/pullquote/edit.mjs +44 -67
  300. package/build-module/pullquote/edit.mjs.map +2 -2
  301. package/build-module/pullquote/save.mjs +5 -16
  302. package/build-module/pullquote/save.mjs.map +2 -2
  303. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.mjs +1 -1
  304. package/build-module/query/edit/inspector-controls/enhanced-pagination-control.mjs.map +1 -1
  305. package/build-module/query/edit/inspector-controls/order-control.mjs +2 -2
  306. package/build-module/query/edit/inspector-controls/order-control.mjs.map +2 -2
  307. package/build-module/query/utils.mjs +2 -2
  308. package/build-module/query/utils.mjs.map +2 -2
  309. package/build-module/query-pagination-next/edit.mjs +2 -2
  310. package/build-module/query-pagination-next/edit.mjs.map +1 -1
  311. package/build-module/query-pagination-previous/edit.mjs +2 -2
  312. package/build-module/query-pagination-previous/edit.mjs.map +1 -1
  313. package/build-module/query-title/edit.mjs +1 -1
  314. package/build-module/query-title/edit.mjs.map +2 -2
  315. package/build-module/query-total/edit.mjs +1 -1
  316. package/build-module/query-total/edit.mjs.map +2 -2
  317. package/build-module/quote/index.mjs +1 -1
  318. package/build-module/quote/index.mjs.map +2 -2
  319. package/build-module/read-more/edit.mjs +1 -1
  320. package/build-module/read-more/edit.mjs.map +2 -2
  321. package/build-module/rss/edit.mjs +1 -1
  322. package/build-module/rss/edit.mjs.map +2 -2
  323. package/build-module/search/edit.mjs +3 -3
  324. package/build-module/search/edit.mjs.map +2 -2
  325. package/build-module/shortcode/edit.mjs +1 -1
  326. package/build-module/shortcode/edit.mjs.map +2 -2
  327. package/build-module/site-tagline/edit.mjs +1 -1
  328. package/build-module/site-tagline/edit.mjs.map +2 -2
  329. package/build-module/site-title/edit.mjs +1 -1
  330. package/build-module/site-title/edit.mjs.map +2 -2
  331. package/build-module/tab-list/block.json +34 -21
  332. package/build-module/tab-list/edit.mjs +122 -15
  333. package/build-module/tab-list/edit.mjs.map +2 -2
  334. package/build-module/tab-list/save.mjs +29 -4
  335. package/build-module/tab-list/save.mjs.map +2 -2
  336. package/build-module/tab-panel/add-tab-toolbar-control.mjs +19 -8
  337. package/build-module/tab-panel/add-tab-toolbar-control.mjs.map +2 -2
  338. package/build-module/tab-panel/block.json +2 -6
  339. package/build-module/tab-panel/remove-tab-toolbar-control.mjs +9 -14
  340. package/build-module/tab-panel/remove-tab-toolbar-control.mjs.map +2 -2
  341. package/build-module/tab-panels/block.json +2 -27
  342. package/build-module/table/index.mjs +1 -1
  343. package/build-module/table/index.mjs.map +2 -2
  344. package/build-module/tabs/block.json +3 -17
  345. package/build-module/tabs/edit.mjs +7 -21
  346. package/build-module/tabs/edit.mjs.map +2 -2
  347. package/build-module/tabs/index.mjs +6 -10
  348. package/build-module/tabs/index.mjs.map +2 -2
  349. package/build-module/tabs/use-tab-list-items-sync.mjs +32 -0
  350. package/build-module/tabs/use-tab-list-items-sync.mjs.map +7 -0
  351. package/build-module/tabs/view.mjs +2 -10
  352. package/build-module/tabs/view.mjs.map +2 -2
  353. package/build-module/terms-query/edit/inspector-controls/order-control.mjs +2 -2
  354. package/build-module/terms-query/edit/inspector-controls/order-control.mjs.map +2 -2
  355. package/build-module/utils/style-state.mjs +132 -0
  356. package/build-module/utils/style-state.mjs.map +7 -0
  357. package/build-module/utils/waveform-player.mjs +1 -1
  358. package/build-module/verse/edit.mjs +1 -1
  359. package/build-module/verse/edit.mjs.map +2 -2
  360. package/build-style/editor-rtl.css +12 -16
  361. package/build-style/editor.css +12 -16
  362. package/build-style/icon/style-rtl.css +9 -0
  363. package/build-style/icon/style.css +9 -0
  364. package/build-style/style-rtl.css +11 -24
  365. package/build-style/style.css +11 -24
  366. package/build-style/tab-list/editor-rtl.css +12 -4
  367. package/build-style/tab-list/editor.css +12 -4
  368. package/build-style/{tab → tab-list}/style-rtl.css +2 -2
  369. package/build-style/{tab → tab-list}/style.css +2 -2
  370. package/build-style/tab-panel/style-rtl.css +0 -17
  371. package/build-style/tab-panel/style.css +0 -17
  372. package/package.json +48 -45
  373. package/src/avatar/index.php +2 -2
  374. package/src/block/index.php +2 -26
  375. package/src/comment-author-avatar/index.php +3 -3
  376. package/src/comment-author-name/index.php +1 -1
  377. package/src/comment-date/index.php +1 -1
  378. package/src/cover/edit/block-controls.js +14 -2
  379. package/src/cover/edit/index.js +86 -0
  380. package/src/cover/edit/inspector-controls.js +124 -54
  381. package/src/editor.scss +0 -1
  382. package/src/file/edit.js +3 -16
  383. package/src/file/index.js +2 -0
  384. package/src/file/transforms.js +12 -31
  385. package/src/file/variations.js +17 -0
  386. package/src/gallery/edit.js +13 -13
  387. package/src/icon/README.md +3 -0
  388. package/src/icon/block.json +12 -0
  389. package/src/icon/edit.js +86 -36
  390. package/src/icon/index.js +3 -1
  391. package/src/icon/index.php +23 -0
  392. package/src/icon/style.scss +12 -0
  393. package/src/icon/variations.js +9 -0
  394. package/src/image/README.md +1 -0
  395. package/src/image/block.json +1 -0
  396. package/src/image/edit.js +8 -3
  397. package/src/image/image.js +120 -54
  398. package/src/image/index.php +0 -1
  399. package/src/image/transforms.js +34 -8
  400. package/src/index.js +4 -11
  401. package/src/navigation/edit/index.js +23 -10
  402. package/src/navigation/index.php +58 -0
  403. package/src/navigation-submenu/README.md +5 -0
  404. package/src/navigation-submenu/block.json +7 -0
  405. package/src/page-list/README.md +1 -1
  406. package/src/page-list/block.json +2 -5
  407. package/src/page-list/edit.js +0 -11
  408. package/src/page-list/index.php +1 -1
  409. package/src/post-date/edit.js +2 -2
  410. package/src/post-featured-image/README.md +1 -0
  411. package/src/post-featured-image/block.json +1 -0
  412. package/src/post-featured-image/dimension-controls.js +105 -184
  413. package/src/post-featured-image/edit.js +53 -21
  414. package/src/post-featured-image/index.php +24 -22
  415. package/src/pullquote/README.md +1 -1
  416. package/src/pullquote/block.json +1 -3
  417. package/src/pullquote/deprecated.js +121 -9
  418. package/src/pullquote/edit.js +7 -31
  419. package/src/pullquote/save.js +2 -13
  420. package/src/search/index.php +1 -1
  421. package/src/style.scss +1 -2
  422. package/src/tab-list/README.md +19 -17
  423. package/src/tab-list/block.json +34 -21
  424. package/src/tab-list/edit.js +147 -15
  425. package/src/tab-list/editor.scss +13 -6
  426. package/src/tab-list/index.php +23 -30
  427. package/src/tab-list/save.js +39 -4
  428. package/src/{tab → tab-list}/style.scss +1 -1
  429. package/src/tab-panel/README.md +0 -3
  430. package/src/tab-panel/add-tab-toolbar-control.js +24 -11
  431. package/src/tab-panel/block.json +2 -6
  432. package/src/tab-panel/remove-tab-toolbar-control.js +10 -14
  433. package/src/tab-panel/style.scss +0 -17
  434. package/src/tab-panels/README.md +0 -16
  435. package/src/tab-panels/block.json +2 -27
  436. package/src/tabs/README.md +1 -7
  437. package/src/tabs/block.json +3 -17
  438. package/src/tabs/edit.js +8 -19
  439. package/src/tabs/index.js +6 -10
  440. package/src/tabs/index.php +0 -13
  441. package/src/tabs/use-tab-list-items-sync.js +49 -0
  442. package/src/tabs/view.js +2 -10
  443. package/src/utils/style-state.js +151 -0
  444. package/src/utils/test/style-state.js +307 -0
  445. package/babel-plugin.cjs +0 -150
  446. package/build/tab/block.json +0 -56
  447. package/build/tab/controls.cjs +0 -46
  448. package/build/tab/controls.cjs.map +0 -7
  449. package/build/tab/edit.cjs +0 -135
  450. package/build/tab/edit.cjs.map +0 -7
  451. package/build/tab/index.cjs +0 -58
  452. package/build/tab/index.cjs.map +0 -7
  453. package/build/tab/save.cjs.map +0 -7
  454. package/build/tabs/use-tab-list-sync.cjs +0 -190
  455. package/build/tabs/use-tab-list-sync.cjs.map +0 -7
  456. package/build-module/tab/block.json +0 -56
  457. package/build-module/tab/controls.mjs +0 -15
  458. package/build-module/tab/controls.mjs.map +0 -7
  459. package/build-module/tab/edit.mjs +0 -108
  460. package/build-module/tab/edit.mjs.map +0 -7
  461. package/build-module/tab/index.mjs +0 -20
  462. package/build-module/tab/index.mjs.map +0 -7
  463. package/build-module/tab/save.mjs +0 -14
  464. package/build-module/tab/save.mjs.map +0 -7
  465. package/build-module/tabs/use-tab-list-sync.mjs +0 -169
  466. package/build-module/tabs/use-tab-list-sync.mjs.map +0 -7
  467. package/build-style/tab/editor-rtl.css +0 -11
  468. package/build-style/tab/editor.css +0 -11
  469. package/build-style/tab-panels/style-rtl.css +0 -4
  470. package/build-style/tab-panels/style.css +0 -4
  471. package/src/tab/README.md +0 -69
  472. package/src/tab/block.json +0 -56
  473. package/src/tab/controls.js +0 -19
  474. package/src/tab/edit.js +0 -141
  475. package/src/tab/editor.scss +0 -14
  476. package/src/tab/index.js +0 -24
  477. package/src/tab/index.php +0 -70
  478. package/src/tab/save.js +0 -13
  479. package/src/tab-panels/style.scss +0 -4
  480. package/src/tabs/use-tab-list-sync.js +0 -237
@@ -0,0 +1,49 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { store as blockEditorStore } from '@wordpress/block-editor';
5
+ import { useDispatch } from '@wordpress/data';
6
+ import { useEffect, useRef } from '@wordpress/element';
7
+
8
+ /**
9
+ * Keep the tab-list block's `tabs` attribute in sync with the tab-panel blocks.
10
+ *
11
+ * Whenever the list of core/tab-panel blocks changes (add, remove, reorder, or
12
+ * label edit), this hook updates the `tabs` attribute on the core/tab-list
13
+ * block so that save.js can render the correct buttons.
14
+ *
15
+ * @param {Object} props
16
+ * @param {Array} props.tabPanels Raw core/tab-panel block objects.
17
+ * @param {string|null} props.tabListClientId Client ID of the core/tab-list block.
18
+ */
19
+ export default function useTabListItemsSync( { tabPanels, tabListClientId } ) {
20
+ const { updateBlockAttributes, __unstableMarkNextChangeAsNotPersistent } =
21
+ useDispatch( blockEditorStore );
22
+
23
+ const prevTabsRef = useRef( null );
24
+
25
+ useEffect( () => {
26
+ if ( ! tabListClientId ) {
27
+ return;
28
+ }
29
+
30
+ const newTabs = tabPanels.map( ( tab ) => ( {
31
+ label: tab.attributes.label || '',
32
+ } ) );
33
+
34
+ // Only update if tabs actually changed to avoid unnecessary re-renders.
35
+ const serialized = JSON.stringify( newTabs );
36
+ if ( serialized === prevTabsRef.current ) {
37
+ return;
38
+ }
39
+ prevTabsRef.current = serialized;
40
+
41
+ __unstableMarkNextChangeAsNotPersistent();
42
+ updateBlockAttributes( tabListClientId, { tabs: newTabs } );
43
+ }, [
44
+ tabPanels,
45
+ tabListClientId,
46
+ updateBlockAttributes,
47
+ __unstableMarkNextChangeAsNotPersistent,
48
+ ] );
49
+ }
package/src/tabs/view.js CHANGED
@@ -102,24 +102,16 @@ const { actions: privateActions, state: privateState } = store(
102
102
  * @param {KeyboardEvent} event The keydown event.
103
103
  */
104
104
  handleTabKeyDown: withSyncEvent( ( event ) => {
105
- const context = getContext();
106
- const { isVertical } = context;
107
105
  const { tabIndex } = privateState;
108
106
 
109
107
  if ( tabIndex === null ) {
110
108
  return;
111
109
  }
112
110
 
113
- if ( event.key === 'ArrowRight' && ! isVertical ) {
114
- event.preventDefault();
115
- privateActions.moveFocus( tabIndex + 1 );
116
- } else if ( event.key === 'ArrowLeft' && ! isVertical ) {
117
- event.preventDefault();
118
- privateActions.moveFocus( tabIndex - 1 );
119
- } else if ( event.key === 'ArrowDown' && isVertical ) {
111
+ if ( event.key === 'ArrowRight' ) {
120
112
  event.preventDefault();
121
113
  privateActions.moveFocus( tabIndex + 1 );
122
- } else if ( event.key === 'ArrowUp' && isVertical ) {
114
+ } else if ( event.key === 'ArrowLeft' ) {
123
115
  event.preventDefault();
124
116
  privateActions.moveFocus( tabIndex - 1 );
125
117
  }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor';
5
+
6
+ /**
7
+ * Internal dependencies
8
+ */
9
+ import { unlock } from '../lock-unlock';
10
+
11
+ const { cleanEmptyObject, getStyleForState, setStyleForState } = unlock(
12
+ blockEditorPrivateApis
13
+ );
14
+
15
+ function getStateStyle( style, selectedState ) {
16
+ return getStyleForState( style, selectedState ) || {};
17
+ }
18
+
19
+ function getMappedDimensions( dimensions, dimensionKeyMap = {} ) {
20
+ return Object.fromEntries(
21
+ Object.entries( dimensions ).map( ( [ key, value ] ) => [
22
+ dimensionKeyMap[ key ] || key,
23
+ value,
24
+ ] )
25
+ );
26
+ }
27
+
28
+ function getControlledDimensions( dimensions, dimensionKeys ) {
29
+ if ( ! dimensionKeys ) {
30
+ return dimensions;
31
+ }
32
+
33
+ return Object.fromEntries(
34
+ dimensionKeys.map( ( key ) => [ key, dimensions[ key ] ] )
35
+ );
36
+ }
37
+
38
+ export function getStyleStateKey( selectedState ) {
39
+ return [
40
+ selectedState?.viewport || 'default',
41
+ selectedState?.pseudo || 'default',
42
+ ].join( ':' );
43
+ }
44
+
45
+ export function getStateDimensions( style, selectedState ) {
46
+ return getStateStyle( style, selectedState )?.dimensions || {};
47
+ }
48
+
49
+ export function getActiveDimensionValue( options = {} ) {
50
+ const {
51
+ attributes = {},
52
+ style = attributes?.style,
53
+ selectedState,
54
+ hasSelectedStyleState,
55
+ attributeKey,
56
+ styleKey = attributeKey,
57
+ rootValue,
58
+ } = options;
59
+
60
+ if ( hasSelectedStyleState ) {
61
+ return getStateDimensions( style, selectedState )?.[ styleKey ];
62
+ }
63
+
64
+ if ( Object.hasOwn( options, 'rootValue' ) ) {
65
+ return rootValue;
66
+ }
67
+
68
+ return attributes?.[ attributeKey ];
69
+ }
70
+
71
+ export function setStateDimensions( style, selectedState, nextDimensions ) {
72
+ const stateStyle = getStateStyle( style, selectedState );
73
+
74
+ return setStyleForState(
75
+ style,
76
+ selectedState,
77
+ cleanEmptyObject( {
78
+ ...stateStyle,
79
+ dimensions: cleanEmptyObject( {
80
+ ...stateStyle?.dimensions,
81
+ ...nextDimensions,
82
+ } ),
83
+ } )
84
+ );
85
+ }
86
+
87
+ export function getDimensionUpdateAttributes( {
88
+ style,
89
+ selectedState,
90
+ hasSelectedStyleState,
91
+ nextDimensions,
92
+ dimensionKeyMap,
93
+ dimensionKeys,
94
+ } ) {
95
+ const controlledDimensions = getControlledDimensions(
96
+ nextDimensions,
97
+ dimensionKeys
98
+ );
99
+
100
+ if ( ! hasSelectedStyleState ) {
101
+ return controlledDimensions;
102
+ }
103
+
104
+ return {
105
+ style: setStateDimensions(
106
+ style,
107
+ selectedState,
108
+ getMappedDimensions( controlledDimensions, dimensionKeyMap )
109
+ ),
110
+ };
111
+ }
112
+
113
+ export function resetDimensions( style, keys ) {
114
+ const dimensionsReset = Object.fromEntries(
115
+ keys.map( ( key ) => [ key, undefined ] )
116
+ );
117
+
118
+ return cleanEmptyObject( {
119
+ ...style,
120
+ dimensions: cleanEmptyObject( {
121
+ ...style?.dimensions,
122
+ ...dimensionsReset,
123
+ } ),
124
+ } );
125
+ }
126
+
127
+ export function resetStateDimensions( style, selectedState, keys ) {
128
+ return setStyleForState(
129
+ style,
130
+ selectedState,
131
+ resetDimensions( getStateStyle( style, selectedState ), keys )
132
+ );
133
+ }
134
+
135
+ export function getDimensionResetAttributes( {
136
+ attributes = {},
137
+ style = attributes?.style,
138
+ selectedState,
139
+ hasSelectedStyleState,
140
+ keys,
141
+ defaultAttributes = {},
142
+ } ) {
143
+ return {
144
+ ...( hasSelectedStyleState
145
+ ? {}
146
+ : { ...attributes, ...defaultAttributes } ),
147
+ style: hasSelectedStyleState
148
+ ? resetStateDimensions( style, selectedState, keys )
149
+ : resetDimensions( style, keys ),
150
+ };
151
+ }
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import {
5
+ getActiveDimensionValue,
6
+ getDimensionResetAttributes,
7
+ getDimensionUpdateAttributes,
8
+ getStyleStateKey,
9
+ resetDimensions,
10
+ resetStateDimensions,
11
+ setStateDimensions,
12
+ } from '../style-state';
13
+
14
+ describe( 'style state dimension utilities', () => {
15
+ it( 'resets root dimensions without changing viewport dimensions', () => {
16
+ const style = {
17
+ dimensions: {
18
+ aspectRatio: '1',
19
+ minHeight: '40px',
20
+ },
21
+ mobile: {
22
+ dimensions: {
23
+ aspectRatio: '2',
24
+ },
25
+ },
26
+ };
27
+
28
+ expect( resetDimensions( style, [ 'aspectRatio' ] ) ).toEqual( {
29
+ dimensions: {
30
+ minHeight: '40px',
31
+ },
32
+ mobile: {
33
+ dimensions: {
34
+ aspectRatio: '2',
35
+ },
36
+ },
37
+ } );
38
+ } );
39
+
40
+ it( 'resets dimensions only for the selected viewport state', () => {
41
+ const style = {
42
+ dimensions: {
43
+ aspectRatio: '1',
44
+ },
45
+ mobile: {
46
+ dimensions: {
47
+ aspectRatio: '2',
48
+ width: '200px',
49
+ },
50
+ },
51
+ tablet: {
52
+ dimensions: {
53
+ aspectRatio: '3',
54
+ },
55
+ },
56
+ };
57
+
58
+ expect(
59
+ resetStateDimensions(
60
+ style,
61
+ { viewport: 'mobile', pseudo: 'default' },
62
+ [ 'aspectRatio' ]
63
+ )
64
+ ).toEqual( {
65
+ dimensions: {
66
+ aspectRatio: '1',
67
+ },
68
+ mobile: {
69
+ dimensions: {
70
+ width: '200px',
71
+ },
72
+ },
73
+ tablet: {
74
+ dimensions: {
75
+ aspectRatio: '3',
76
+ },
77
+ },
78
+ } );
79
+ } );
80
+
81
+ it( 'sets dimensions only for the selected viewport state', () => {
82
+ const style = {
83
+ mobile: {
84
+ dimensions: {
85
+ width: '200px',
86
+ },
87
+ },
88
+ tablet: {
89
+ dimensions: {
90
+ width: '300px',
91
+ },
92
+ },
93
+ };
94
+
95
+ expect(
96
+ setStateDimensions(
97
+ style,
98
+ { viewport: 'mobile', pseudo: 'default' },
99
+ { height: '100px' }
100
+ )
101
+ ).toEqual( {
102
+ mobile: {
103
+ dimensions: {
104
+ height: '100px',
105
+ width: '200px',
106
+ },
107
+ },
108
+ tablet: {
109
+ dimensions: {
110
+ width: '300px',
111
+ },
112
+ },
113
+ } );
114
+ } );
115
+
116
+ it( 'generates a stable key for selected style states', () => {
117
+ expect(
118
+ getStyleStateKey( { viewport: 'mobile', pseudo: ':hover' } )
119
+ ).toBe( 'mobile::hover' );
120
+ expect( getStyleStateKey( undefined ) ).toBe( 'default:default' );
121
+ } );
122
+
123
+ it( 'reads root attribute dimensions for the default state', () => {
124
+ expect(
125
+ getActiveDimensionValue( {
126
+ attributes: {
127
+ width: '200px',
128
+ },
129
+ attributeKey: 'width',
130
+ hasSelectedStyleState: false,
131
+ } )
132
+ ).toBe( '200px' );
133
+ } );
134
+
135
+ it( 'reads mapped dimensions for selected style states', () => {
136
+ expect(
137
+ getActiveDimensionValue( {
138
+ attributes: {
139
+ scale: 'cover',
140
+ style: {
141
+ mobile: {
142
+ dimensions: {
143
+ objectFit: 'contain',
144
+ },
145
+ },
146
+ },
147
+ },
148
+ selectedState: { viewport: 'mobile', pseudo: 'default' },
149
+ hasSelectedStyleState: true,
150
+ attributeKey: 'scale',
151
+ styleKey: 'objectFit',
152
+ } )
153
+ ).toBe( 'contain' );
154
+ } );
155
+
156
+ it( 'maps root dimension attributes to selected style state dimensions', () => {
157
+ expect(
158
+ getDimensionUpdateAttributes( {
159
+ style: {
160
+ mobile: {
161
+ dimensions: {
162
+ width: '200px',
163
+ },
164
+ },
165
+ },
166
+ selectedState: { viewport: 'mobile', pseudo: 'default' },
167
+ hasSelectedStyleState: true,
168
+ nextDimensions: {
169
+ scale: 'contain',
170
+ },
171
+ dimensionKeyMap: {
172
+ scale: 'objectFit',
173
+ },
174
+ } )
175
+ ).toEqual( {
176
+ style: {
177
+ mobile: {
178
+ dimensions: {
179
+ objectFit: 'contain',
180
+ width: '200px',
181
+ },
182
+ },
183
+ },
184
+ } );
185
+ } );
186
+
187
+ it( 'clears omitted controlled root dimension attributes', () => {
188
+ expect(
189
+ getDimensionUpdateAttributes( {
190
+ hasSelectedStyleState: false,
191
+ nextDimensions: {
192
+ aspectRatio: '16/9',
193
+ width: '200px',
194
+ scale: 'cover',
195
+ },
196
+ dimensionKeys: [ 'aspectRatio', 'width', 'height', 'scale' ],
197
+ } )
198
+ ).toEqual( {
199
+ aspectRatio: '16/9',
200
+ width: '200px',
201
+ height: undefined,
202
+ scale: 'cover',
203
+ } );
204
+ } );
205
+
206
+ it( 'clears omitted controlled selected style state dimensions', () => {
207
+ expect(
208
+ getDimensionUpdateAttributes( {
209
+ style: {
210
+ mobile: {
211
+ dimensions: {
212
+ height: '100px',
213
+ width: '200px',
214
+ },
215
+ },
216
+ },
217
+ selectedState: { viewport: 'mobile', pseudo: 'default' },
218
+ hasSelectedStyleState: true,
219
+ nextDimensions: {
220
+ aspectRatio: '16/9',
221
+ width: '200px',
222
+ scale: 'cover',
223
+ },
224
+ dimensionKeyMap: {
225
+ scale: 'objectFit',
226
+ },
227
+ dimensionKeys: [ 'aspectRatio', 'width', 'height', 'scale' ],
228
+ } )
229
+ ).toEqual( {
230
+ style: {
231
+ mobile: {
232
+ dimensions: {
233
+ aspectRatio: '16/9',
234
+ objectFit: 'cover',
235
+ width: '200px',
236
+ },
237
+ },
238
+ },
239
+ } );
240
+ } );
241
+
242
+ it( 'resets selected style state dimensions without root attributes', () => {
243
+ expect(
244
+ getDimensionResetAttributes( {
245
+ attributes: {
246
+ width: '200px',
247
+ style: {
248
+ dimensions: {
249
+ width: '300px',
250
+ },
251
+ mobile: {
252
+ dimensions: {
253
+ width: '400px',
254
+ },
255
+ },
256
+ },
257
+ },
258
+ selectedState: { viewport: 'mobile', pseudo: 'default' },
259
+ hasSelectedStyleState: true,
260
+ keys: [ 'width' ],
261
+ defaultAttributes: {
262
+ width: undefined,
263
+ },
264
+ } )
265
+ ).toEqual( {
266
+ style: {
267
+ dimensions: {
268
+ width: '300px',
269
+ },
270
+ },
271
+ } );
272
+ } );
273
+
274
+ it( 'resets default dimensions and root attributes', () => {
275
+ expect(
276
+ getDimensionResetAttributes( {
277
+ attributes: {
278
+ width: '200px',
279
+ style: {
280
+ dimensions: {
281
+ width: '300px',
282
+ },
283
+ mobile: {
284
+ dimensions: {
285
+ width: '400px',
286
+ },
287
+ },
288
+ },
289
+ },
290
+ hasSelectedStyleState: false,
291
+ keys: [ 'width' ],
292
+ defaultAttributes: {
293
+ width: undefined,
294
+ },
295
+ } )
296
+ ).toEqual( {
297
+ width: undefined,
298
+ style: {
299
+ mobile: {
300
+ dimensions: {
301
+ width: '400px',
302
+ },
303
+ },
304
+ },
305
+ } );
306
+ } );
307
+ } );
package/babel-plugin.cjs DELETED
@@ -1,150 +0,0 @@
1
- /**
2
- * External dependencies
3
- */
4
- const fs = require( 'fs' );
5
-
6
- /**
7
- * Creates a babel plugin that replaces experimental block imports with
8
- * null variable declarations.
9
- *
10
- * For example:
11
- * import * as experimentalBlock from "./experimental-block";
12
- * On build becomes:
13
- * const experimentalBlock = null;
14
- *
15
- * This ensures the dead code elimination removes the experimental blocks modules
16
- * during the production build.
17
- *
18
- * For more context, see https://github.com/WordPress/gutenberg/pull/40655/
19
- *
20
- * @param {Function} shouldProcessImport Optional callback to decide whether a given import should be processed.
21
- * @param {boolean} isGutenbergPlugin Whether to run the plugin.
22
- */
23
- function createBabelPlugin( shouldProcessImport, isGutenbergPlugin ) {
24
- if ( ! shouldProcessImport ) {
25
- shouldProcessImport = isImportDeclarationAnExperimentalBlock;
26
- }
27
- if ( isGutenbergPlugin === undefined ) {
28
- // process.env.npm_package_config_IS_GUTENBERG_PLUGIN is a string, not a boolean
29
- isGutenbergPlugin =
30
- String( process.env.npm_package_config_IS_GUTENBERG_PLUGIN ) ===
31
- 'true';
32
- }
33
- /**
34
- * The babel plugin created by createBabelPlugin.
35
- *
36
- * @see createBabelPlugin.
37
- * @param {import('@babel/core')} babel Current Babel object.
38
- * @return {import('@babel/core').PluginObj} Babel plugin object.
39
- */
40
- return function babelPlugin( { types: t } ) {
41
- if ( isGutenbergPlugin ) {
42
- return {};
43
- }
44
-
45
- return {
46
- visitor: {
47
- ImportDeclaration( path ) {
48
- // Only process the experimental blocks.
49
- if ( ! shouldProcessImport( path ) ) {
50
- return;
51
- }
52
-
53
- // Get the imported variable name.
54
- const namespaceSpecifier = path.node.specifiers.find(
55
- ( specifier ) =>
56
- specifier.type === 'ImportNamespaceSpecifier'
57
- );
58
- const { name } = namespaceSpecifier.local;
59
-
60
- path.replaceWith(
61
- t.variableDeclaration( 'const', [
62
- t.variableDeclarator(
63
- t.identifier( name ),
64
- t.nullLiteral()
65
- ),
66
- ] )
67
- );
68
- },
69
- },
70
- };
71
- };
72
- }
73
-
74
- /**
75
- * Tests whether an import declaration refers to an experimental block.
76
- * In broad strokes, it's a block that says "__experimental" in its block.json file.
77
- * For details, check the implementation.
78
- *
79
- * @param {Object} path Babel.js AST path representing the import declaration,
80
- * @return {boolean | undefined} Whether the import represents an experimental block.
81
- */
82
- function isImportDeclarationAnExperimentalBlock( path ) {
83
- // Only look for wildcard imports like import * as a from "source":
84
- const { node } = path;
85
- const namespaceSpecifier = node.specifiers.find(
86
- ( specifier ) => specifier.type === 'ImportNamespaceSpecifier'
87
- );
88
- if ( ! namespaceSpecifier || ! namespaceSpecifier.local ) {
89
- return;
90
- }
91
-
92
- // Only look for imports starting with ./ and without additional slashes in the path.
93
- const importedPath = node.source.value;
94
- if (
95
- ! importedPath ||
96
- ! importedPath.startsWith( './' ) ||
97
- importedPath.split( '/' ).length > 2
98
- ) {
99
- return false;
100
- }
101
-
102
- // Check the imported directory has a related block.json file.
103
- const blockJsonPath = __dirname + '/src/' + importedPath + '/block.json';
104
- if ( ! fs.existsSync( blockJsonPath ) ) {
105
- return false;
106
- }
107
-
108
- // Read the block.json file related to this block
109
- const { name } = namespaceSpecifier.local;
110
- let blockJSONBuffer;
111
- try {
112
- blockJSONBuffer = fs.readFileSync( blockJsonPath );
113
- } catch ( e ) {
114
- process.stderr.write(
115
- 'Could not read block.json for the module "' +
116
- importedPath +
117
- '" imported under name "' +
118
- name +
119
- '" from path "' +
120
- blockJsonPath +
121
- '"'
122
- );
123
- throw e;
124
- }
125
- let blockJSON;
126
- try {
127
- blockJSON = JSON.parse( blockJSONBuffer );
128
- } catch ( e ) {
129
- process.stderr.write(
130
- 'Could not parse block.json for the module "' +
131
- importedPath +
132
- '" imported under name "' +
133
- name +
134
- '" read from path "' +
135
- blockJsonPath +
136
- '"'
137
- );
138
- throw e;
139
- }
140
-
141
- return (
142
- blockJSON &&
143
- '__experimental' in blockJSON &&
144
- blockJSON.__experimental !== false
145
- );
146
- }
147
-
148
- const babelPlugin = createBabelPlugin();
149
- babelPlugin.createBabelPlugin = createBabelPlugin;
150
- module.exports = babelPlugin;