@wordpress/block-editor 9.6.0 → 9.8.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 (462) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/build/components/block-alignment-control/use-available-alignments.js +1 -1
  3. package/build/components/block-alignment-control/use-available-alignments.js.map +1 -1
  4. package/build/components/block-edit-visually-button/index.js +46 -0
  5. package/build/components/block-edit-visually-button/index.js.map +1 -0
  6. package/build/components/block-list/block.js +12 -2
  7. package/build/components/block-list/block.js.map +1 -1
  8. package/build/components/block-list/index.native.js +1 -1
  9. package/build/components/block-list/index.native.js.map +1 -1
  10. package/build/components/block-popover/inbetween.js +5 -3
  11. package/build/components/block-popover/inbetween.js.map +1 -1
  12. package/build/components/block-popover/index.js +10 -4
  13. package/build/components/block-popover/index.js.map +1 -1
  14. package/build/components/block-settings-menu/index.js +2 -6
  15. package/build/components/block-settings-menu/index.js.map +1 -1
  16. package/build/components/block-styles/index.js +3 -6
  17. package/build/components/block-styles/index.js.map +1 -1
  18. package/build/components/block-switcher/index.js +10 -16
  19. package/build/components/block-switcher/index.js.map +1 -1
  20. package/build/components/block-toolbar/index.js +5 -1
  21. package/build/components/block-toolbar/index.js.map +1 -1
  22. package/build/components/block-tools/selected-block-popover.js +10 -2
  23. package/build/components/block-tools/selected-block-popover.js.map +1 -1
  24. package/build/components/block-tools/use-block-toolbar-popover-props.js +126 -0
  25. package/build/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  26. package/build/components/block-types-list/index.js +1 -1
  27. package/build/components/block-types-list/index.js.map +1 -1
  28. package/build/components/border-radius-control/all-input-control.js +31 -3
  29. package/build/components/border-radius-control/all-input-control.js.map +1 -1
  30. package/build/components/border-radius-control/index.js +23 -7
  31. package/build/components/border-radius-control/index.js.map +1 -1
  32. package/build/components/border-radius-control/input-controls.js +21 -6
  33. package/build/components/border-radius-control/input-controls.js.map +1 -1
  34. package/build/components/border-radius-control/utils.js +13 -16
  35. package/build/components/border-radius-control/utils.js.map +1 -1
  36. package/build/components/colors/utils.js +6 -2
  37. package/build/components/colors/utils.js.map +1 -1
  38. package/build/components/colors/with-colors.js +17 -4
  39. package/build/components/colors/with-colors.js.map +1 -1
  40. package/build/components/colors-gradients/control.js +7 -4
  41. package/build/components/colors-gradients/control.js.map +1 -1
  42. package/build/components/colors-gradients/dropdown.js +5 -2
  43. package/build/components/colors-gradients/dropdown.js.map +1 -1
  44. package/build/components/copy-handler/index.js +6 -0
  45. package/build/components/copy-handler/index.js.map +1 -1
  46. package/build/components/date-format-picker/index.js +2 -7
  47. package/build/components/date-format-picker/index.js.map +1 -1
  48. package/build/components/duotone/components.js +5 -5
  49. package/build/components/duotone/components.js.map +1 -1
  50. package/build/components/font-appearance-control/index.js +10 -4
  51. package/build/components/font-appearance-control/index.js.map +1 -1
  52. package/build/components/font-family/index.js +1 -1
  53. package/build/components/font-family/index.js.map +1 -1
  54. package/build/components/font-sizes/with-font-sizes.js +17 -4
  55. package/build/components/font-sizes/with-font-sizes.js.map +1 -1
  56. package/build/components/image-size-control/index.js +3 -1
  57. package/build/components/image-size-control/index.js.map +1 -1
  58. package/build/components/index.js +22 -6
  59. package/build/components/index.js.map +1 -1
  60. package/build/components/index.native.js +11 -4
  61. package/build/components/index.native.js.map +1 -1
  62. package/build/components/inserter/index.native.js +8 -3
  63. package/build/components/inserter/index.native.js.map +1 -1
  64. package/build/components/inserter/search-items.js +22 -4
  65. package/build/components/inserter/search-items.js.map +1 -1
  66. package/build/components/inserter-list-item/index.js +2 -19
  67. package/build/components/inserter-list-item/index.js.map +1 -1
  68. package/build/components/letter-spacing-control/index.js +6 -3
  69. package/build/components/letter-spacing-control/index.js.map +1 -1
  70. package/build/components/line-height-control/index.js +6 -3
  71. package/build/components/line-height-control/index.js.map +1 -1
  72. package/build/components/link-control/is-url-like.js +1 -7
  73. package/build/components/link-control/is-url-like.js.map +1 -1
  74. package/build/components/link-control/link-preview.js +0 -1
  75. package/build/components/link-control/link-preview.js.map +1 -1
  76. package/build/components/link-control/use-search-handler.js +1 -7
  77. package/build/components/link-control/use-search-handler.js.map +1 -1
  78. package/build/components/list-view/block-select-button.js +5 -2
  79. package/build/components/list-view/block-select-button.js.map +1 -1
  80. package/build/components/list-view/expander.js +3 -1
  81. package/build/components/list-view/expander.js.map +1 -1
  82. package/build/components/list-view/use-block-selection.js +1 -7
  83. package/build/components/list-view/use-block-selection.js.map +1 -1
  84. package/build/components/media-upload/index.native.js +8 -3
  85. package/build/components/media-upload/index.native.js.map +1 -1
  86. package/build/components/preview-options/index.js +2 -2
  87. package/build/components/preview-options/index.js.map +1 -1
  88. package/build/components/{use-no-recursive-renders → recursion-provider}/index.js +40 -18
  89. package/build/components/recursion-provider/index.js.map +1 -0
  90. package/build/components/rich-text/index.js +6 -1
  91. package/build/components/rich-text/index.js.map +1 -1
  92. package/build/components/rich-text/index.native.js +3 -1
  93. package/build/components/rich-text/index.native.js.map +1 -1
  94. package/build/components/rich-text/use-before-input-rules.js +110 -0
  95. package/build/components/rich-text/use-before-input-rules.js.map +1 -0
  96. package/build/components/rich-text/use-enter.js +0 -4
  97. package/build/components/rich-text/use-enter.js.map +1 -1
  98. package/build/components/rich-text/use-format-types.js +8 -11
  99. package/build/components/rich-text/use-format-types.js.map +1 -1
  100. package/build/components/spacing-sizes-control/all-input-control.js +53 -0
  101. package/build/components/spacing-sizes-control/all-input-control.js.map +1 -0
  102. package/build/components/spacing-sizes-control/axial-input-controls.js +69 -0
  103. package/build/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  104. package/build/components/spacing-sizes-control/index.js +100 -0
  105. package/build/components/spacing-sizes-control/index.js.map +1 -0
  106. package/build/components/spacing-sizes-control/input-controls.js +52 -0
  107. package/build/components/spacing-sizes-control/input-controls.js.map +1 -0
  108. package/build/components/spacing-sizes-control/linked-button.js +38 -0
  109. package/build/components/spacing-sizes-control/linked-button.js.map +1 -0
  110. package/build/components/spacing-sizes-control/spacing-input-control.js +208 -0
  111. package/build/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  112. package/build/components/spacing-sizes-control/utils.js +202 -0
  113. package/build/components/spacing-sizes-control/utils.js.map +1 -0
  114. package/build/components/text-decoration-control/index.js +3 -1
  115. package/build/components/text-decoration-control/index.js.map +1 -1
  116. package/build/components/text-transform-control/index.js +3 -1
  117. package/build/components/text-transform-control/index.js.map +1 -1
  118. package/build/components/url-input/index.js +1 -1
  119. package/build/components/url-input/index.js.map +1 -1
  120. package/build/components/url-popover/image-url-input-ui.js +4 -1
  121. package/build/components/url-popover/image-url-input-ui.js.map +1 -1
  122. package/build/components/writing-flow/use-arrow-nav.js +4 -25
  123. package/build/components/writing-flow/use-arrow-nav.js.map +1 -1
  124. package/build/components/writing-flow/use-drag-selection.js +9 -2
  125. package/build/components/writing-flow/use-drag-selection.js.map +1 -1
  126. package/build/components/writing-flow/use-multi-selection.js +4 -2
  127. package/build/components/writing-flow/use-multi-selection.js.map +1 -1
  128. package/build/components/writing-flow/use-select-all.js +3 -1
  129. package/build/components/writing-flow/use-select-all.js.map +1 -1
  130. package/build/components/writing-flow/use-selection-observer.js +10 -2
  131. package/build/components/writing-flow/use-selection-observer.js.map +1 -1
  132. package/build/hooks/border-radius.js +2 -7
  133. package/build/hooks/border-radius.js.map +1 -1
  134. package/build/hooks/border.js +2 -2
  135. package/build/hooks/border.js.map +1 -1
  136. package/build/hooks/color.js +4 -1
  137. package/build/hooks/color.js.map +1 -1
  138. package/build/hooks/dimensions.js +15 -0
  139. package/build/hooks/dimensions.js.map +1 -1
  140. package/build/hooks/duotone.js +4 -4
  141. package/build/hooks/duotone.js.map +1 -1
  142. package/build/hooks/gap.js +6 -4
  143. package/build/hooks/gap.js.map +1 -1
  144. package/build/hooks/generated-class-name.js +1 -7
  145. package/build/hooks/generated-class-name.js.map +1 -1
  146. package/build/hooks/layout.js +29 -14
  147. package/build/hooks/layout.js.map +1 -1
  148. package/build/hooks/margin.js +28 -12
  149. package/build/hooks/margin.js.map +1 -1
  150. package/build/hooks/padding.js +19 -8
  151. package/build/hooks/padding.js.map +1 -1
  152. package/build/hooks/style.js +4 -50
  153. package/build/hooks/style.js.map +1 -1
  154. package/build/layouts/constrained.js +215 -0
  155. package/build/layouts/constrained.js.map +1 -0
  156. package/build/layouts/flex.js +1 -1
  157. package/build/layouts/flex.js.map +1 -1
  158. package/build/layouts/flow.js +7 -151
  159. package/build/layouts/flow.js.map +1 -1
  160. package/build/layouts/index.js +3 -1
  161. package/build/layouts/index.js.map +1 -1
  162. package/build/layouts/utils.js +43 -0
  163. package/build/layouts/utils.js.map +1 -1
  164. package/build/store/actions.js +25 -3
  165. package/build/store/actions.js.map +1 -1
  166. package/build/store/selectors.js +4 -6
  167. package/build/store/selectors.js.map +1 -1
  168. package/build/utils/block-variation-transforms.js +15 -9
  169. package/build/utils/block-variation-transforms.js.map +1 -1
  170. package/build/utils/pasting.js +9 -1
  171. package/build/utils/pasting.js.map +1 -1
  172. package/build-module/components/block-alignment-control/use-available-alignments.js +1 -1
  173. package/build-module/components/block-alignment-control/use-available-alignments.js.map +1 -1
  174. package/build-module/components/block-edit-visually-button/index.js +35 -0
  175. package/build-module/components/block-edit-visually-button/index.js.map +1 -0
  176. package/build-module/components/block-list/block.js +13 -3
  177. package/build-module/components/block-list/block.js.map +1 -1
  178. package/build-module/components/block-list/index.native.js +1 -1
  179. package/build-module/components/block-list/index.native.js.map +1 -1
  180. package/build-module/components/block-popover/inbetween.js +5 -3
  181. package/build-module/components/block-popover/inbetween.js.map +1 -1
  182. package/build-module/components/block-popover/index.js +8 -4
  183. package/build-module/components/block-popover/index.js.map +1 -1
  184. package/build-module/components/block-settings-menu/index.js +3 -6
  185. package/build-module/components/block-settings-menu/index.js.map +1 -1
  186. package/build-module/components/block-styles/index.js +4 -7
  187. package/build-module/components/block-styles/index.js.map +1 -1
  188. package/build-module/components/block-switcher/index.js +10 -16
  189. package/build-module/components/block-switcher/index.js.map +1 -1
  190. package/build-module/components/block-toolbar/index.js +4 -1
  191. package/build-module/components/block-toolbar/index.js.map +1 -1
  192. package/build-module/components/block-tools/selected-block-popover.js +8 -2
  193. package/build-module/components/block-tools/selected-block-popover.js.map +1 -1
  194. package/build-module/components/block-tools/use-block-toolbar-popover-props.js +114 -0
  195. package/build-module/components/block-tools/use-block-toolbar-popover-props.js.map +1 -0
  196. package/build-module/components/block-types-list/index.js +1 -1
  197. package/build-module/components/block-types-list/index.js.map +1 -1
  198. package/build-module/components/border-radius-control/all-input-control.js +32 -4
  199. package/build-module/components/border-radius-control/all-input-control.js.map +1 -1
  200. package/build-module/components/border-radius-control/index.js +24 -8
  201. package/build-module/components/border-radius-control/index.js.map +1 -1
  202. package/build-module/components/border-radius-control/input-controls.js +22 -7
  203. package/build-module/components/border-radius-control/input-controls.js.map +1 -1
  204. package/build-module/components/border-radius-control/utils.js +13 -16
  205. package/build-module/components/border-radius-control/utils.js.map +1 -1
  206. package/build-module/components/colors/utils.js +7 -3
  207. package/build-module/components/colors/utils.js.map +1 -1
  208. package/build-module/components/colors/with-colors.js +16 -3
  209. package/build-module/components/colors/with-colors.js.map +1 -1
  210. package/build-module/components/colors-gradients/control.js +7 -4
  211. package/build-module/components/colors-gradients/control.js.map +1 -1
  212. package/build-module/components/colors-gradients/dropdown.js +5 -2
  213. package/build-module/components/colors-gradients/dropdown.js.map +1 -1
  214. package/build-module/components/copy-handler/index.js +7 -1
  215. package/build-module/components/copy-handler/index.js.map +1 -1
  216. package/build-module/components/date-format-picker/index.js +2 -6
  217. package/build-module/components/date-format-picker/index.js.map +1 -1
  218. package/build-module/components/duotone/components.js +5 -5
  219. package/build-module/components/duotone/components.js.map +1 -1
  220. package/build-module/components/font-appearance-control/index.js +7 -4
  221. package/build-module/components/font-appearance-control/index.js.map +1 -1
  222. package/build-module/components/font-family/index.js +1 -1
  223. package/build-module/components/font-family/index.js.map +1 -1
  224. package/build-module/components/font-sizes/with-font-sizes.js +16 -3
  225. package/build-module/components/font-sizes/with-font-sizes.js.map +1 -1
  226. package/build-module/components/image-size-control/index.js +3 -1
  227. package/build-module/components/image-size-control/index.js.map +1 -1
  228. package/build-module/components/index.js +2 -1
  229. package/build-module/components/index.js.map +1 -1
  230. package/build-module/components/index.native.js +1 -1
  231. package/build-module/components/index.native.js.map +1 -1
  232. package/build-module/components/inserter/index.native.js +9 -2
  233. package/build-module/components/inserter/index.native.js.map +1 -1
  234. package/build-module/components/inserter/search-items.js +19 -5
  235. package/build-module/components/inserter/search-items.js.map +1 -1
  236. package/build-module/components/inserter-list-item/index.js +1 -17
  237. package/build-module/components/inserter-list-item/index.js.map +1 -1
  238. package/build-module/components/letter-spacing-control/index.js +5 -3
  239. package/build-module/components/letter-spacing-control/index.js.map +1 -1
  240. package/build-module/components/line-height-control/index.js +5 -3
  241. package/build-module/components/line-height-control/index.js.map +1 -1
  242. package/build-module/components/link-control/is-url-like.js +1 -6
  243. package/build-module/components/link-control/is-url-like.js.map +1 -1
  244. package/build-module/components/link-control/link-preview.js +0 -1
  245. package/build-module/components/link-control/link-preview.js.map +1 -1
  246. package/build-module/components/link-control/use-search-handler.js +1 -6
  247. package/build-module/components/link-control/use-search-handler.js.map +1 -1
  248. package/build-module/components/list-view/block-select-button.js +5 -2
  249. package/build-module/components/list-view/block-select-button.js.map +1 -1
  250. package/build-module/components/list-view/expander.js +3 -2
  251. package/build-module/components/list-view/expander.js.map +1 -1
  252. package/build-module/components/list-view/use-block-selection.js +1 -6
  253. package/build-module/components/list-view/use-block-selection.js.map +1 -1
  254. package/build-module/components/media-upload/index.native.js +9 -2
  255. package/build-module/components/media-upload/index.native.js.map +1 -1
  256. package/build-module/components/preview-options/index.js +2 -2
  257. package/build-module/components/preview-options/index.js.map +1 -1
  258. package/build-module/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -19
  259. package/build-module/components/recursion-provider/index.js.map +1 -0
  260. package/build-module/components/rich-text/index.js +5 -1
  261. package/build-module/components/rich-text/index.js.map +1 -1
  262. package/build-module/components/rich-text/index.native.js +3 -1
  263. package/build-module/components/rich-text/index.native.js.map +1 -1
  264. package/build-module/components/rich-text/use-before-input-rules.js +96 -0
  265. package/build-module/components/rich-text/use-before-input-rules.js.map +1 -0
  266. package/build-module/components/rich-text/use-enter.js +0 -4
  267. package/build-module/components/rich-text/use-enter.js.map +1 -1
  268. package/build-module/components/rich-text/use-format-types.js +8 -10
  269. package/build-module/components/rich-text/use-format-types.js.map +1 -1
  270. package/build-module/components/spacing-sizes-control/all-input-control.js +41 -0
  271. package/build-module/components/spacing-sizes-control/all-input-control.js.map +1 -0
  272. package/build-module/components/spacing-sizes-control/axial-input-controls.js +57 -0
  273. package/build-module/components/spacing-sizes-control/axial-input-controls.js.map +1 -0
  274. package/build-module/components/spacing-sizes-control/index.js +83 -0
  275. package/build-module/components/spacing-sizes-control/index.js.map +1 -0
  276. package/build-module/components/spacing-sizes-control/input-controls.js +41 -0
  277. package/build-module/components/spacing-sizes-control/input-controls.js.map +1 -0
  278. package/build-module/components/spacing-sizes-control/linked-button.js +28 -0
  279. package/build-module/components/spacing-sizes-control/linked-button.js.map +1 -0
  280. package/build-module/components/spacing-sizes-control/spacing-input-control.js +192 -0
  281. package/build-module/components/spacing-sizes-control/spacing-input-control.js.map +1 -0
  282. package/build-module/components/spacing-sizes-control/utils.js +174 -0
  283. package/build-module/components/spacing-sizes-control/utils.js.map +1 -0
  284. package/build-module/components/text-decoration-control/index.js +4 -2
  285. package/build-module/components/text-decoration-control/index.js.map +1 -1
  286. package/build-module/components/text-transform-control/index.js +4 -2
  287. package/build-module/components/text-transform-control/index.js.map +1 -1
  288. package/build-module/components/url-input/index.js +1 -1
  289. package/build-module/components/url-input/index.js.map +1 -1
  290. package/build-module/components/url-popover/image-url-input-ui.js +4 -1
  291. package/build-module/components/url-popover/image-url-input-ui.js.map +1 -1
  292. package/build-module/components/writing-flow/use-arrow-nav.js +5 -26
  293. package/build-module/components/writing-flow/use-arrow-nav.js.map +1 -1
  294. package/build-module/components/writing-flow/use-drag-selection.js +9 -2
  295. package/build-module/components/writing-flow/use-drag-selection.js.map +1 -1
  296. package/build-module/components/writing-flow/use-multi-selection.js +4 -2
  297. package/build-module/components/writing-flow/use-multi-selection.js.map +1 -1
  298. package/build-module/components/writing-flow/use-select-all.js +3 -1
  299. package/build-module/components/writing-flow/use-select-all.js.map +1 -1
  300. package/build-module/components/writing-flow/use-selection-observer.js +10 -2
  301. package/build-module/components/writing-flow/use-selection-observer.js.map +1 -1
  302. package/build-module/hooks/border-radius.js +2 -7
  303. package/build-module/hooks/border-radius.js.map +1 -1
  304. package/build-module/hooks/border.js +2 -2
  305. package/build-module/hooks/border.js.map +1 -1
  306. package/build-module/hooks/color.js +4 -1
  307. package/build-module/hooks/color.js.map +1 -1
  308. package/build-module/hooks/dimensions.js +13 -0
  309. package/build-module/hooks/dimensions.js.map +1 -1
  310. package/build-module/hooks/duotone.js +4 -4
  311. package/build-module/hooks/duotone.js.map +1 -1
  312. package/build-module/hooks/gap.js +3 -2
  313. package/build-module/hooks/gap.js.map +1 -1
  314. package/build-module/hooks/generated-class-name.js +1 -6
  315. package/build-module/hooks/generated-class-name.js.map +1 -1
  316. package/build-module/hooks/layout.js +29 -14
  317. package/build-module/hooks/layout.js.map +1 -1
  318. package/build-module/hooks/margin.js +26 -12
  319. package/build-module/hooks/margin.js.map +1 -1
  320. package/build-module/hooks/padding.js +17 -8
  321. package/build-module/hooks/padding.js.map +1 -1
  322. package/build-module/hooks/style.js +7 -53
  323. package/build-module/hooks/style.js.map +1 -1
  324. package/build-module/layouts/constrained.js +197 -0
  325. package/build-module/layouts/constrained.js.map +1 -0
  326. package/build-module/layouts/flex.js +1 -1
  327. package/build-module/layouts/flex.js.map +1 -1
  328. package/build-module/layouts/flow.js +8 -145
  329. package/build-module/layouts/flow.js.map +1 -1
  330. package/build-module/layouts/index.js +2 -1
  331. package/build-module/layouts/index.js.map +1 -1
  332. package/build-module/layouts/utils.js +40 -0
  333. package/build-module/layouts/utils.js.map +1 -1
  334. package/build-module/store/actions.js +25 -3
  335. package/build-module/store/actions.js.map +1 -1
  336. package/build-module/store/selectors.js +5 -7
  337. package/build-module/store/selectors.js.map +1 -1
  338. package/build-module/utils/block-variation-transforms.js +14 -7
  339. package/build-module/utils/block-variation-transforms.js.map +1 -1
  340. package/build-module/utils/pasting.js +9 -1
  341. package/build-module/utils/pasting.js.map +1 -1
  342. package/build-style/style-rtl.css +154 -27
  343. package/build-style/style.css +154 -27
  344. package/package.json +30 -28
  345. package/src/components/block-alignment-control/use-available-alignments.js +1 -1
  346. package/src/components/block-edit-visually-button/index.js +39 -0
  347. package/src/components/block-list/block.js +13 -2
  348. package/src/components/block-list/index.native.js +1 -1
  349. package/src/components/block-popover/inbetween.js +5 -1
  350. package/src/components/block-popover/index.js +22 -13
  351. package/src/components/block-popover/style.scss +25 -2
  352. package/src/components/block-settings-menu/index.js +11 -15
  353. package/src/components/block-styles/index.js +4 -7
  354. package/src/components/block-styles/style.scss +10 -0
  355. package/src/components/block-switcher/index.js +9 -13
  356. package/src/components/block-switcher/test/index.js +1 -0
  357. package/src/components/block-toolbar/index.js +2 -0
  358. package/src/components/block-tools/selected-block-popover.js +7 -0
  359. package/src/components/block-tools/use-block-toolbar-popover-props.js +123 -0
  360. package/src/components/block-types-list/index.js +1 -1
  361. package/src/components/border-radius-control/all-input-control.js +41 -4
  362. package/src/components/border-radius-control/index.js +29 -6
  363. package/src/components/border-radius-control/input-controls.js +40 -13
  364. package/src/components/border-radius-control/test/utils.js +22 -60
  365. package/src/components/border-radius-control/utils.js +12 -16
  366. package/src/components/color-palette/test/__snapshots__/control.js.snap +93 -77
  367. package/src/components/colors/utils.js +5 -2
  368. package/src/components/colors/with-colors.js +11 -1
  369. package/src/components/colors-gradients/control.js +12 -8
  370. package/src/components/colors-gradients/dropdown.js +7 -2
  371. package/src/components/colors-gradients/style.scss +27 -5
  372. package/src/components/colors-gradients/test/control.js +3 -3
  373. package/src/components/copy-handler/index.js +18 -0
  374. package/src/components/date-format-picker/index.js +12 -14
  375. package/src/components/date-format-picker/style.scss +0 -4
  376. package/src/components/duotone/components.js +5 -5
  377. package/src/components/duotone-control/style.scss +0 -4
  378. package/src/components/font-appearance-control/index.js +3 -0
  379. package/src/components/font-appearance-control/style.scss +0 -2
  380. package/src/components/font-family/index.js +1 -1
  381. package/src/components/font-sizes/with-font-sizes.js +11 -1
  382. package/src/components/image-size-control/README.md +7 -0
  383. package/src/components/image-size-control/index.js +2 -0
  384. package/src/components/index.js +5 -1
  385. package/src/components/index.native.js +4 -1
  386. package/src/components/inserter/index.native.js +7 -2
  387. package/src/components/inserter/search-items.js +17 -5
  388. package/src/components/inserter-list-item/index.js +1 -17
  389. package/src/components/letter-spacing-control/index.js +2 -0
  390. package/src/components/line-height-control/index.js +2 -0
  391. package/src/components/link-control/is-url-like.js +1 -6
  392. package/src/components/link-control/link-preview.js +0 -1
  393. package/src/components/link-control/test/index.js +540 -893
  394. package/src/components/link-control/use-search-handler.js +1 -6
  395. package/src/components/list-view/block-select-button.js +7 -2
  396. package/src/components/list-view/expander.js +4 -2
  397. package/src/components/list-view/style.scss +11 -4
  398. package/src/components/list-view/use-block-selection.js +2 -8
  399. package/src/components/media-replace-flow/style.scss +1 -0
  400. package/src/components/media-upload/index.native.js +7 -3
  401. package/src/components/preview-options/index.js +2 -2
  402. package/src/components/{use-no-recursive-renders → recursion-provider}/index.js +39 -28
  403. package/src/components/{use-no-recursive-renders/test/use-no-recursive-renders.js → recursion-provider/test/index.js} +5 -6
  404. package/src/components/rich-text/README.md +13 -1
  405. package/src/components/rich-text/index.js +2 -0
  406. package/src/components/rich-text/index.native.js +2 -0
  407. package/src/components/rich-text/use-before-input-rules.js +91 -0
  408. package/src/components/rich-text/use-enter.js +0 -3
  409. package/src/components/rich-text/use-format-types.js +6 -6
  410. package/src/components/spacing-sizes-control/all-input-control.js +40 -0
  411. package/src/components/spacing-sizes-control/axial-input-controls.js +62 -0
  412. package/src/components/spacing-sizes-control/index.js +91 -0
  413. package/src/components/spacing-sizes-control/input-controls.js +46 -0
  414. package/src/components/spacing-sizes-control/linked-button.js +25 -0
  415. package/src/components/spacing-sizes-control/spacing-input-control.js +280 -0
  416. package/src/components/spacing-sizes-control/style.scss +122 -0
  417. package/src/components/spacing-sizes-control/test/utils.js +156 -0
  418. package/src/components/spacing-sizes-control/utils.js +195 -0
  419. package/src/components/text-decoration-control/index.js +4 -2
  420. package/src/components/text-transform-control/index.js +4 -2
  421. package/src/components/url-input/index.js +1 -1
  422. package/src/components/url-input/style.scss +2 -2
  423. package/src/components/url-popover/image-url-input-ui.js +3 -0
  424. package/src/components/url-popover/style.scss +0 -3
  425. package/src/components/writing-flow/use-arrow-nav.js +4 -33
  426. package/src/components/writing-flow/use-drag-selection.js +7 -1
  427. package/src/components/writing-flow/use-multi-selection.js +4 -1
  428. package/src/components/writing-flow/use-select-all.js +2 -1
  429. package/src/components/writing-flow/use-selection-observer.js +10 -2
  430. package/src/hooks/border-radius.js +2 -6
  431. package/src/hooks/border.js +2 -2
  432. package/src/hooks/color.js +13 -3
  433. package/src/hooks/dimensions.js +15 -0
  434. package/src/hooks/duotone.js +4 -4
  435. package/src/hooks/gap.js +7 -2
  436. package/src/hooks/generated-class-name.js +6 -9
  437. package/src/hooks/layout.js +53 -16
  438. package/src/hooks/margin.js +49 -17
  439. package/src/hooks/padding.js +41 -14
  440. package/src/hooks/style.js +5 -56
  441. package/src/hooks/test/gap.js +22 -0
  442. package/src/hooks/typography.scss +0 -1
  443. package/src/layouts/constrained.js +217 -0
  444. package/src/layouts/flex.js +1 -1
  445. package/src/layouts/flow.js +6 -164
  446. package/src/layouts/index.js +2 -1
  447. package/src/layouts/test/constrained.js +21 -0
  448. package/src/layouts/utils.js +34 -0
  449. package/src/store/actions.js +32 -4
  450. package/src/store/selectors.js +5 -4
  451. package/src/style.scss +1 -0
  452. package/src/utils/block-variation-transforms.js +13 -6
  453. package/src/utils/pasting.js +10 -1
  454. package/src/utils/test/block-variation-transforms.js +24 -0
  455. package/src/utils/test/pasting.js +10 -0
  456. package/build/components/block-settings-menu/block-edit-visually-button.js +0 -70
  457. package/build/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  458. package/build/components/use-no-recursive-renders/index.js.map +0 -1
  459. package/build-module/components/block-settings-menu/block-edit-visually-button.js +0 -56
  460. package/build-module/components/block-settings-menu/block-edit-visually-button.js.map +0 -1
  461. package/build-module/components/use-no-recursive-renders/index.js.map +0 -1
  462. package/src/components/block-settings-menu/block-edit-visually-button.js +0 -52
@@ -1,122 +1,32 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import {
5
- Button,
6
- __experimentalUseCustomUnits as useCustomUnits,
7
- __experimentalUnitControl as UnitControl,
8
- } from '@wordpress/components';
9
- import { __, sprintf } from '@wordpress/i18n';
10
- import { Icon, positionCenter, stretchWide } from '@wordpress/icons';
11
- import { getCSSRules } from '@wordpress/style-engine';
4
+ import { __ } from '@wordpress/i18n';
12
5
 
13
6
  /**
14
7
  * Internal dependencies
15
8
  */
16
- import useSetting from '../components/use-setting';
17
- import { appendSelectors, getBlockGapCSS } from './utils';
9
+
10
+ import { getBlockGapCSS, getAlignmentsInfo } from './utils';
18
11
  import { getGapBoxControlValueFromStyle } from '../hooks/gap';
19
12
  import { shouldSkipSerialization } from '../hooks/utils';
20
13
 
21
14
  export default {
22
15
  name: 'default',
23
16
  label: __( 'Flow' ),
24
- inspectorControls: function DefaultLayoutInspectorControls( {
25
- layout,
26
- onChange,
27
- } ) {
28
- const { wideSize, contentSize } = layout;
29
- const units = useCustomUnits( {
30
- availableUnits: useSetting( 'spacing.units' ) || [
31
- '%',
32
- 'px',
33
- 'em',
34
- 'rem',
35
- 'vw',
36
- ],
37
- } );
38
-
39
- return (
40
- <>
41
- <div className="block-editor-hooks__layout-controls">
42
- <div className="block-editor-hooks__layout-controls-unit">
43
- <UnitControl
44
- label={ __( 'Content' ) }
45
- labelPosition="top"
46
- __unstableInputWidth="80px"
47
- value={ contentSize || wideSize || '' }
48
- onChange={ ( nextWidth ) => {
49
- nextWidth =
50
- 0 > parseFloat( nextWidth )
51
- ? '0'
52
- : nextWidth;
53
- onChange( {
54
- ...layout,
55
- contentSize: nextWidth,
56
- } );
57
- } }
58
- units={ units }
59
- />
60
- <Icon icon={ positionCenter } />
61
- </div>
62
- <div className="block-editor-hooks__layout-controls-unit">
63
- <UnitControl
64
- label={ __( 'Wide' ) }
65
- labelPosition="top"
66
- __unstableInputWidth="80px"
67
- value={ wideSize || contentSize || '' }
68
- onChange={ ( nextWidth ) => {
69
- nextWidth =
70
- 0 > parseFloat( nextWidth )
71
- ? '0'
72
- : nextWidth;
73
- onChange( {
74
- ...layout,
75
- wideSize: nextWidth,
76
- } );
77
- } }
78
- units={ units }
79
- />
80
- <Icon icon={ stretchWide } />
81
- </div>
82
- </div>
83
- <div className="block-editor-hooks__layout-controls-reset">
84
- <Button
85
- variant="secondary"
86
- isSmall
87
- disabled={ ! contentSize && ! wideSize }
88
- onClick={ () =>
89
- onChange( {
90
- contentSize: undefined,
91
- wideSize: undefined,
92
- inherit: false,
93
- } )
94
- }
95
- >
96
- { __( 'Reset' ) }
97
- </Button>
98
- </div>
99
-
100
- <p className="block-editor-hooks__layout-controls-helptext">
101
- { __(
102
- 'Customize the width for all elements that are assigned to the center or wide columns.'
103
- ) }
104
- </p>
105
- </>
106
- );
17
+ inspectorControls: function DefaultLayoutInspectorControls() {
18
+ return null;
107
19
  },
108
20
  toolBarControls: function DefaultLayoutToolbarControls() {
109
21
  return null;
110
22
  },
111
23
  getLayoutStyle: function getLayoutStyle( {
112
24
  selector,
113
- layout = {},
114
25
  style,
115
26
  blockName,
116
27
  hasBlockGapSupport,
117
28
  layoutDefinitions,
118
29
  } ) {
119
- const { contentSize, wideSize } = layout;
120
30
  const blockGapStyleValue = getGapBoxControlValueFromStyle(
121
31
  style?.spacing?.blockGap
122
32
  );
@@ -128,46 +38,7 @@ export default {
128
38
  ? blockGapStyleValue?.top
129
39
  : '';
130
40
 
131
- let output =
132
- !! contentSize || !! wideSize
133
- ? `
134
- ${ appendSelectors(
135
- selector,
136
- '> :where(:not(.alignleft):not(.alignright):not(.alignfull))'
137
- ) } {
138
- max-width: ${ contentSize ?? wideSize };
139
- margin-left: auto !important;
140
- margin-right: auto !important;
141
- }
142
- ${ appendSelectors( selector, '> .alignwide' ) } {
143
- max-width: ${ wideSize ?? contentSize };
144
- }
145
- ${ appendSelectors( selector, '> .alignfull' ) } {
146
- max-width: none;
147
- }
148
- `
149
- : '';
150
-
151
- // If there is custom padding, add negative margins for alignfull blocks.
152
- if ( style?.spacing?.padding ) {
153
- // The style object might be storing a preset so we need to make sure we get a usable value.
154
- const paddingValues = getCSSRules( style );
155
- paddingValues.forEach( ( rule ) => {
156
- if ( rule.key === 'paddingRight' ) {
157
- output += `
158
- ${ appendSelectors( selector, '> .alignfull' ) } {
159
- margin-right: calc(${ rule.value } * -1);
160
- }
161
- `;
162
- } else if ( rule.key === 'paddingLeft' ) {
163
- output += `
164
- ${ appendSelectors( selector, '> .alignfull' ) } {
165
- margin-left: calc(${ rule.value } * -1);
166
- }
167
- `;
168
- }
169
- } );
170
- }
41
+ let output = '';
171
42
 
172
43
  // Output blockGap styles based on rules contained in layout definitions in theme.json.
173
44
  if ( hasBlockGapSupport && blockGapValue ) {
@@ -215,32 +86,3 @@ export default {
215
86
  return alignments;
216
87
  },
217
88
  };
218
-
219
- /**
220
- * Helper method to assign contextual info to clarify
221
- * alignment settings.
222
- *
223
- * Besides checking if `contentSize` and `wideSize` have a
224
- * value, we now show this information only if their values
225
- * are not a `css var`. This needs to change when parsing
226
- * css variables land.
227
- *
228
- * @see https://github.com/WordPress/gutenberg/pull/34710#issuecomment-918000752
229
- *
230
- * @param {Object} layout The layout object.
231
- * @return {Object} An object with contextual info per alignment.
232
- */
233
- function getAlignmentsInfo( layout ) {
234
- const { contentSize, wideSize } = layout;
235
- const alignmentInfo = {};
236
- const sizeRegex = /^(?!0)\d+(px|em|rem|vw|vh|%)?$/i;
237
- if ( sizeRegex.test( contentSize ) ) {
238
- // translators: %s: container size (i.e. 600px etc)
239
- alignmentInfo.none = sprintf( __( 'Max %s wide' ), contentSize );
240
- }
241
- if ( sizeRegex.test( wideSize ) ) {
242
- // translators: %s: container size (i.e. 600px etc)
243
- alignmentInfo.wide = sprintf( __( 'Max %s wide' ), wideSize );
244
- }
245
- return alignmentInfo;
246
- }
@@ -3,8 +3,9 @@
3
3
  */
4
4
  import flex from './flex';
5
5
  import flow from './flow';
6
+ import constrained from './constrained';
6
7
 
7
- const layoutTypes = [ flow, flex ];
8
+ const layoutTypes = [ flow, flex, constrained ];
8
9
 
9
10
  /**
10
11
  * Retrieves a layout type by name.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Internal dependencies
3
+ */
4
+ import constrained from '../constrained';
5
+
6
+ describe( 'getLayoutStyle', () => {
7
+ it( 'should return an empty string if no non-default params are provided', () => {
8
+ const expected = '';
9
+
10
+ const result = constrained.getLayoutStyle( {
11
+ selector: '.my-container',
12
+ layout: {},
13
+ style: {},
14
+ blockName: 'test-block',
15
+ hasBlockGapSupport: false,
16
+ layoutDefinitions: undefined,
17
+ } );
18
+
19
+ expect( result ).toBe( expected );
20
+ } );
21
+ } );
@@ -1,3 +1,8 @@
1
+ /**
2
+ * WordPress dependencies
3
+ */
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+
1
6
  /**
2
7
  * Utility to generate the proper CSS selector for layout styles.
3
8
  *
@@ -62,3 +67,32 @@ export function getBlockGapCSS(
62
67
  }
63
68
  return output;
64
69
  }
70
+
71
+ /**
72
+ * Helper method to assign contextual info to clarify
73
+ * alignment settings.
74
+ *
75
+ * Besides checking if `contentSize` and `wideSize` have a
76
+ * value, we now show this information only if their values
77
+ * are not a `css var`. This needs to change when parsing
78
+ * css variables land.
79
+ *
80
+ * @see https://github.com/WordPress/gutenberg/pull/34710#issuecomment-918000752
81
+ *
82
+ * @param {Object} layout The layout object.
83
+ * @return {Object} An object with contextual info per alignment.
84
+ */
85
+ export function getAlignmentsInfo( layout ) {
86
+ const { contentSize, wideSize } = layout;
87
+ const alignmentInfo = {};
88
+ const sizeRegex = /^(?!0)\d+(px|em|rem|vw|vh|%)?$/i;
89
+ if ( sizeRegex.test( contentSize ) ) {
90
+ // translators: %s: container size (i.e. 600px etc)
91
+ alignmentInfo.none = sprintf( __( 'Max %s wide' ), contentSize );
92
+ }
93
+ if ( sizeRegex.test( wideSize ) ) {
94
+ // translators: %s: container size (i.e. 600px etc)
95
+ alignmentInfo.wide = sprintf( __( 'Max %s wide' ), wideSize );
96
+ }
97
+ return alignmentInfo;
98
+ }
@@ -1002,7 +1002,7 @@ export const __unstableExpandSelection =
1002
1002
  */
1003
1003
  export const mergeBlocks =
1004
1004
  ( firstBlockClientId, secondBlockClientId ) =>
1005
- ( { select, dispatch } ) => {
1005
+ ( { registry, select, dispatch } ) => {
1006
1006
  const blocks = [ firstBlockClientId, secondBlockClientId ];
1007
1007
  dispatch( { type: 'MERGE_BLOCKS', blocks } );
1008
1008
 
@@ -1010,13 +1010,41 @@ export const mergeBlocks =
1010
1010
  const blockA = select.getBlock( clientIdA );
1011
1011
  const blockAType = getBlockType( blockA.name );
1012
1012
 
1013
- // Only focus the previous block if it's not mergeable.
1013
+ if ( ! blockAType ) return;
1014
+
1015
+ const blockB = select.getBlock( clientIdB );
1016
+
1014
1017
  if ( blockAType && ! blockAType.merge ) {
1015
- dispatch.selectBlock( blockA.clientId );
1018
+ // If there's no merge function defined, attempt merging inner
1019
+ // blocks.
1020
+ const blocksWithTheSameType = switchToBlockType(
1021
+ blockB,
1022
+ blockAType.name
1023
+ );
1024
+ // Only focus the previous block if it's not mergeable.
1025
+ if ( blocksWithTheSameType?.length !== 1 ) {
1026
+ dispatch.selectBlock( blockA.clientId );
1027
+ return;
1028
+ }
1029
+ const [ blockWithSameType ] = blocksWithTheSameType;
1030
+ if ( blockWithSameType.innerBlocks.length < 1 ) {
1031
+ dispatch.selectBlock( blockA.clientId );
1032
+ return;
1033
+ }
1034
+ registry.batch( () => {
1035
+ dispatch.insertBlocks(
1036
+ blockWithSameType.innerBlocks,
1037
+ undefined,
1038
+ clientIdA
1039
+ );
1040
+ dispatch.removeBlock( clientIdB );
1041
+ dispatch.selectBlock(
1042
+ blockWithSameType.innerBlocks[ 0 ].clientId
1043
+ );
1044
+ } );
1016
1045
  return;
1017
1046
  }
1018
1047
 
1019
- const blockB = select.getBlock( clientIdB );
1020
1048
  const blockBType = getBlockType( blockB.name );
1021
1049
  const { clientId, attributeKey, offset } = select.getSelectionStart();
1022
1050
  const selectedBlockType =
@@ -10,7 +10,6 @@ import {
10
10
  some,
11
11
  find,
12
12
  filter,
13
- mapKeys,
14
13
  orderBy,
15
14
  } from 'lodash';
16
15
  import createSelector from 'rememo';
@@ -2078,9 +2077,11 @@ export const getBlockTransformItems = createSelector(
2078
2077
  )
2079
2078
  .map( buildBlockTypeTransformItem );
2080
2079
 
2081
- const itemsByName = mapKeys(
2082
- blockTypeTransformItems,
2083
- ( { name } ) => name
2080
+ const itemsByName = Object.fromEntries(
2081
+ Object.entries( blockTypeTransformItems ).map( ( [ , value ] ) => [
2082
+ value.name,
2083
+ value,
2084
+ ] )
2084
2085
  );
2085
2086
 
2086
2087
  // Consider unwraping the highest priority.
package/src/style.scss CHANGED
@@ -63,5 +63,6 @@
63
63
  @import "./components/block-toolbar/style.scss";
64
64
  @import "./components/inserter/style.scss";
65
65
  @import "./components/preview-options/style.scss";
66
+ @import "./components/spacing-sizes-control/style.scss";
66
67
 
67
68
  @include wordpress-admin-schemes();
@@ -1,10 +1,17 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { isMatch } from 'lodash';
5
-
6
1
  /** @typedef {import('@wordpress/blocks').WPBlockVariation} WPBlockVariation */
7
2
 
3
+ function matchesAttributes( blockAttributes, variation ) {
4
+ return Object.entries( variation ).every( ( [ key, value ] ) => {
5
+ if (
6
+ typeof value === 'object' &&
7
+ typeof blockAttributes[ key ] === 'object'
8
+ ) {
9
+ return matchesAttributes( blockAttributes[ key ], value );
10
+ }
11
+ return blockAttributes[ key ] === value;
12
+ } );
13
+ }
14
+
8
15
  /**
9
16
  * Matches the provided block variations with a block's attributes. If no match
10
17
  * or more than one matches are found it returns `undefined`. If a single match is
@@ -24,7 +31,7 @@ export const __experimentalGetMatchingVariation = (
24
31
  if ( ! variations || ! blockAttributes ) return;
25
32
  const matches = variations.filter( ( { attributes } ) => {
26
33
  if ( ! attributes || ! Object.keys( attributes ).length ) return false;
27
- return isMatch( blockAttributes, attributes );
34
+ return matchesAttributes( blockAttributes, attributes );
28
35
  } );
29
36
  if ( matches.length !== 1 ) return;
30
37
  return matches[ 0 ];
@@ -70,7 +70,16 @@ export function shouldDismissPastedFiles( files, html /*, plainText */ ) {
70
70
  // other elements found, like <figure>, but we assume that the user's
71
71
  // intention is to paste the actual image file.
72
72
  const IMAGE_TAG = /<\s*img\b/gi;
73
- return html.match( IMAGE_TAG )?.length !== 1;
73
+ if ( html.match( IMAGE_TAG )?.length !== 1 ) return true;
74
+
75
+ // Even when there is exactly one <img> tag in the HTML payload, we
76
+ // choose to weed out local images, i.e. those whose source starts with
77
+ // "file://". These payloads occur in specific configurations, such as
78
+ // when copying an entire document from Microsoft Word, that contains
79
+ // text and exactly one image, and pasting that content using Google
80
+ // Chrome.
81
+ const IMG_WITH_LOCAL_SRC = /<\s*img\b[^>]*\bsrc="file:\/\//i;
82
+ if ( html.match( IMG_WITH_LOCAL_SRC ) ) return true;
74
83
  }
75
84
 
76
85
  return false;
@@ -40,6 +40,18 @@ describe( 'getMatchingVariation', () => {
40
40
  getMatchingVariation( { level: 1, other: 'prop' }, variations )
41
41
  ).toBeUndefined();
42
42
  } );
43
+ it( 'when variation has a nested attribute', () => {
44
+ const variations = [
45
+ { name: 'one', attributes: { query: { author: 'somebody' } } },
46
+ { name: 'two', attributes: { query: { author: 'nobody' } } },
47
+ ];
48
+ expect(
49
+ getMatchingVariation(
50
+ { query: { author: 'foobar' }, other: 'prop' },
51
+ variations
52
+ )
53
+ ).toBeUndefined();
54
+ } );
43
55
  } );
44
56
  describe( 'should find a match', () => {
45
57
  it( 'when variation has one attribute', () => {
@@ -66,5 +78,17 @@ describe( 'getMatchingVariation', () => {
66
78
  ).name
67
79
  ).toEqual( 'one' );
68
80
  } );
81
+ it( 'when variation has a nested attribute', () => {
82
+ const variations = [
83
+ { name: 'one', attributes: { query: { author: 'somebody' } } },
84
+ { name: 'two', attributes: { query: { author: 'nobody' } } },
85
+ ];
86
+ expect(
87
+ getMatchingVariation(
88
+ { query: { author: 'somebody' }, other: 'prop' },
89
+ variations
90
+ ).name
91
+ ).toEqual( 'one' );
92
+ } );
69
93
  } );
70
94
  } );
@@ -81,4 +81,14 @@ describe( 'shouldDismissPastedFiles', () => {
81
81
  )
82
82
  ).toBe( true );
83
83
  } );
84
+
85
+ it( 'should return true when pasting an image-containing MS Word document via Chrome', () => {
86
+ expect(
87
+ shouldDismissPastedFiles(
88
+ [ mocks.pngImageFile ],
89
+ '<p>A</p><img src="file:////.../clip_image001.png" alt="..."><p>B</p>',
90
+ 'A\nB'
91
+ )
92
+ ).toBe( true );
93
+ } );
84
94
  } );
@@ -1,70 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = BlockEditVisuallyButton;
9
-
10
- var _element = require("@wordpress/element");
11
-
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
- var _blocks = require("@wordpress/blocks");
15
-
16
- var _components = require("@wordpress/components");
17
-
18
- var _i18n = require("@wordpress/i18n");
19
-
20
- var _data = require("@wordpress/data");
21
-
22
- var _store = require("../../store");
23
-
24
- /**
25
- * WordPress dependencies
26
- */
27
-
28
- /**
29
- * Internal dependencies
30
- */
31
- function BlockEditVisuallyButton(_ref) {
32
- let {
33
- clientIds,
34
- ...props
35
- } = _ref;
36
- const {
37
- block,
38
- shouldRender
39
- } = (0, _data.useSelect)(select => {
40
- const firstBlockClientId = clientIds[0];
41
- const {
42
- isBlockMultiSelected,
43
- getBlockMode,
44
- getBlock
45
- } = select(_store.store);
46
- const isSingleSelected = !isBlockMultiSelected(firstBlockClientId);
47
- const isHtmlMode = getBlockMode(firstBlockClientId) === 'html';
48
- return {
49
- block: getBlock(firstBlockClientId),
50
- shouldRender: isSingleSelected && isHtmlMode
51
- };
52
- }, [clientIds[0]]);
53
- const {
54
- replaceBlocks
55
- } = (0, _data.useDispatch)(_store.store);
56
- const onClick = (0, _element.useCallback)(() => {
57
- replaceBlocks(block.clientId, (0, _blocks.rawHandler)({
58
- HTML: (0, _blocks.getBlockContent)(block)
59
- }));
60
- }, [block]);
61
-
62
- if (!shouldRender) {
63
- return null;
64
- }
65
-
66
- return (0, _element.createElement)(_components.ToolbarGroup, null, (0, _element.createElement)(_components.ToolbarButton, (0, _extends2.default)({
67
- onClick: onClick
68
- }, props), (0, _i18n.__)('Edit visually')));
69
- }
70
- //# sourceMappingURL=block-edit-visually-button.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-settings-menu/block-edit-visually-button.js"],"names":["BlockEditVisuallyButton","clientIds","props","block","shouldRender","select","firstBlockClientId","isBlockMultiSelected","getBlockMode","getBlock","blockEditorStore","isSingleSelected","isHtmlMode","replaceBlocks","onClick","clientId","HTML"],"mappings":";;;;;;;;;AAOA;;;;AAJA;;AACA;;AACA;;AACA;;AAMA;;AAZA;AACA;AACA;;AAOA;AACA;AACA;AAGe,SAASA,uBAAT,OAA4D;AAAA,MAA1B;AAAEC,IAAAA,SAAF;AAAa,OAAGC;AAAhB,GAA0B;AAC1E,QAAM;AAAEC,IAAAA,KAAF;AAASC,IAAAA;AAAT,MAA0B,qBAC7BC,MAAF,IAAc;AACb,UAAMC,kBAAkB,GAAGL,SAAS,CAAE,CAAF,CAApC;AACA,UAAM;AAAEM,MAAAA,oBAAF;AAAwBC,MAAAA,YAAxB;AAAsCC,MAAAA;AAAtC,QACLJ,MAAM,CAAEK,YAAF,CADP;AAEA,UAAMC,gBAAgB,GACrB,CAAEJ,oBAAoB,CAAED,kBAAF,CADvB;AAEA,UAAMM,UAAU,GAAGJ,YAAY,CAAEF,kBAAF,CAAZ,KAAuC,MAA1D;AAEA,WAAO;AACNH,MAAAA,KAAK,EAAEM,QAAQ,CAAEH,kBAAF,CADT;AAENF,MAAAA,YAAY,EAAEO,gBAAgB,IAAIC;AAF5B,KAAP;AAIA,GAb8B,EAc/B,CAAEX,SAAS,CAAE,CAAF,CAAX,CAd+B,CAAhC;AAiBA,QAAM;AAAEY,IAAAA;AAAF,MAAoB,uBAAaH,YAAb,CAA1B;AACA,QAAMI,OAAO,GAAG,0BAAa,MAAM;AAClCD,IAAAA,aAAa,CACZV,KAAK,CAACY,QADM,EAEZ,wBAAY;AAAEC,MAAAA,IAAI,EAAE,6BAAiBb,KAAjB;AAAR,KAAZ,CAFY,CAAb;AAIA,GALe,EAKb,CAAEA,KAAF,CALa,CAAhB;;AAOA,MAAK,CAAEC,YAAP,EAAsB;AACrB,WAAO,IAAP;AACA;;AAED,SACC,4BAAC,wBAAD,QACC,4BAAC,yBAAD;AAAe,IAAA,OAAO,EAAGU;AAAzB,KAAwCZ,KAAxC,GACG,cAAI,eAAJ,CADH,CADD,CADD;AAOA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { rawHandler, getBlockContent } from '@wordpress/blocks';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockEditVisuallyButton( { clientIds, ...props } ) {\n\tconst { block, shouldRender } = useSelect(\n\t\t( select ) => {\n\t\t\tconst firstBlockClientId = clientIds[ 0 ];\n\t\t\tconst { isBlockMultiSelected, getBlockMode, getBlock } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst isSingleSelected =\n\t\t\t\t! isBlockMultiSelected( firstBlockClientId );\n\t\t\tconst isHtmlMode = getBlockMode( firstBlockClientId ) === 'html';\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( firstBlockClientId ),\n\t\t\t\tshouldRender: isSingleSelected && isHtmlMode,\n\t\t\t};\n\t\t},\n\t\t[ clientIds[ 0 ] ]\n\t);\n\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst onClick = useCallback( () => {\n\t\treplaceBlocks(\n\t\t\tblock.clientId,\n\t\t\trawHandler( { HTML: getBlockContent( block ) } )\n\t\t);\n\t}, [ block ] );\n\n\tif ( ! shouldRender ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ToolbarGroup>\n\t\t\t<ToolbarButton onClick={ onClick } { ...props }>\n\t\t\t\t{ __( 'Edit visually' ) }\n\t\t\t</ToolbarButton>\n\t\t</ToolbarGroup>\n\t);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/use-no-recursive-renders/index.js"],"names":["RenderedRefsContext","addToBlockType","renderedBlocks","blockName","uniqueId","result","Set","add","useNoRecursiveRenders","previouslyRenderedBlocks","name","hasAlreadyRendered","Boolean","has","newRenderedBlocks","Provider","children"],"mappings":";;;;;;;AAGA;;AAUA;;AAbA;AACA;AACA;;AAQA;AACA;AACA;AAGA,MAAMA,mBAAmB,GAAG,4BAAe,EAAf,CAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,cAAT,CAAyBC,cAAzB,EAAyCC,SAAzC,EAAoDC,QAApD,EAA+D;AAC9D,QAAMC,MAAM,GAAG,EACd,GAAGH,cADW;AAEd,KAAEC,SAAF,GAAeD,cAAc,CAAEC,SAAF,CAAd,GACZ,IAAIG,GAAJ,CAASJ,cAAc,CAAEC,SAAF,CAAvB,CADY,GAEZ,IAAIG,GAAJ;AAJW,GAAf;AAMAD,EAAAA,MAAM,CAAEF,SAAF,CAAN,CAAoBI,GAApB,CAAyBH,QAAzB;AAEA,SAAOC,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACe,SAASG,qBAAT,CAAgCJ,QAAhC,EAA2D;AAAA;;AAAA,MAAjBD,SAAiB,uEAAL,EAAK;AACzE,QAAMM,wBAAwB,GAAG,yBAAYT,mBAAZ,CAAjC;AACA,QAAM;AAAEU,IAAAA;AAAF,MAAW,mCAAjB;AACAP,EAAAA,SAAS,GAAGA,SAAS,IAAIO,IAAzB;AACA,QAAMC,kBAAkB,GAAGC,OAAO,0BACjCH,wBAAwB,CAAEN,SAAF,CADS,0DACjC,sBAAuCU,GAAvC,CAA4CT,QAA5C,CADiC,CAAlC;AAGA,QAAMU,iBAAiB,GAAG,sBACzB,MAAMb,cAAc,CAAEQ,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CADK,EAEzB,CAAEK,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CAFyB,CAA1B;AAIA,QAAMW,QAAQ,GAAG,0BAChB;AAAA,QAAE;AAAEC,MAAAA;AAAF,KAAF;AAAA,WACC,4BAAC,mBAAD,CAAqB,QAArB;AAA8B,MAAA,KAAK,EAAGF;AAAtC,OACGE,QADH,CADD;AAAA,GADgB,EAMhB,CAAEF,iBAAF,CANgB,CAAjB;AAQA,SAAO,CAAEH,kBAAF,EAAsBI,QAAtB,CAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\n\nconst RenderedRefsContext = createContext( {} );\n\n/**\n * Immutably adds an unique identifier to a set scoped for a given block type.\n *\n * @param {Object} renderedBlocks Rendered blocks grouped by block name\n * @param {string} blockName Name of the block.\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n *\n * @return {Object} The list of rendered blocks grouped by block name.\n */\nfunction addToBlockType( renderedBlocks, blockName, uniqueId ) {\n\tconst result = {\n\t\t...renderedBlocks,\n\t\t[ blockName ]: renderedBlocks[ blockName ]\n\t\t\t? new Set( renderedBlocks[ blockName ] )\n\t\t\t: new Set(),\n\t};\n\tresult[ blockName ].add( uniqueId );\n\n\treturn result;\n}\n\n/**\n * A React hook for keeping track of blocks previously rendered up in the block\n * tree. Blocks susceptible to recursion can use this hook in their `Edit`\n * function to prevent said recursion.\n *\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} blockName Optional block name.\n *\n * @return {[boolean, Function]} A tuple of:\n * - a boolean describing whether the provided id\n * has already been rendered;\n * - a React context provider to be used to wrap\n * other elements.\n */\nexport default function useNoRecursiveRenders( uniqueId, blockName = '' ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\tblockName = blockName || name;\n\tconst hasAlreadyRendered = Boolean(\n\t\tpreviouslyRenderedBlocks[ blockName ]?.has( uniqueId )\n\t);\n\tconst newRenderedBlocks = useMemo(\n\t\t() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),\n\t\t[ previouslyRenderedBlocks, blockName, uniqueId ]\n\t);\n\tconst Provider = useCallback(\n\t\t( { children } ) => (\n\t\t\t<RenderedRefsContext.Provider value={ newRenderedBlocks }>\n\t\t\t\t{ children }\n\t\t\t</RenderedRefsContext.Provider>\n\t\t),\n\t\t[ newRenderedBlocks ]\n\t);\n\treturn [ hasAlreadyRendered, Provider ];\n}\n"]}
@@ -1,56 +0,0 @@
1
- import _extends from "@babel/runtime/helpers/esm/extends";
2
- import { createElement } from "@wordpress/element";
3
-
4
- /**
5
- * WordPress dependencies
6
- */
7
- import { rawHandler, getBlockContent } from '@wordpress/blocks';
8
- import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
9
- import { __ } from '@wordpress/i18n';
10
- import { useSelect, useDispatch } from '@wordpress/data';
11
- import { useCallback } from '@wordpress/element';
12
- /**
13
- * Internal dependencies
14
- */
15
-
16
- import { store as blockEditorStore } from '../../store';
17
- export default function BlockEditVisuallyButton(_ref) {
18
- let {
19
- clientIds,
20
- ...props
21
- } = _ref;
22
- const {
23
- block,
24
- shouldRender
25
- } = useSelect(select => {
26
- const firstBlockClientId = clientIds[0];
27
- const {
28
- isBlockMultiSelected,
29
- getBlockMode,
30
- getBlock
31
- } = select(blockEditorStore);
32
- const isSingleSelected = !isBlockMultiSelected(firstBlockClientId);
33
- const isHtmlMode = getBlockMode(firstBlockClientId) === 'html';
34
- return {
35
- block: getBlock(firstBlockClientId),
36
- shouldRender: isSingleSelected && isHtmlMode
37
- };
38
- }, [clientIds[0]]);
39
- const {
40
- replaceBlocks
41
- } = useDispatch(blockEditorStore);
42
- const onClick = useCallback(() => {
43
- replaceBlocks(block.clientId, rawHandler({
44
- HTML: getBlockContent(block)
45
- }));
46
- }, [block]);
47
-
48
- if (!shouldRender) {
49
- return null;
50
- }
51
-
52
- return createElement(ToolbarGroup, null, createElement(ToolbarButton, _extends({
53
- onClick: onClick
54
- }, props), __('Edit visually')));
55
- }
56
- //# sourceMappingURL=block-edit-visually-button.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/block-settings-menu/block-edit-visually-button.js"],"names":["rawHandler","getBlockContent","ToolbarButton","ToolbarGroup","__","useSelect","useDispatch","useCallback","store","blockEditorStore","BlockEditVisuallyButton","clientIds","props","block","shouldRender","select","firstBlockClientId","isBlockMultiSelected","getBlockMode","getBlock","isSingleSelected","isHtmlMode","replaceBlocks","onClick","clientId","HTML"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,UAAT,EAAqBC,eAArB,QAA4C,mBAA5C;AACA,SAASC,aAAT,EAAwBC,YAAxB,QAA4C,uBAA5C;AACA,SAASC,EAAT,QAAmB,iBAAnB;AACA,SAASC,SAAT,EAAoBC,WAApB,QAAuC,iBAAvC;AACA,SAASC,WAAT,QAA4B,oBAA5B;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,uBAAT,OAA4D;AAAA,MAA1B;AAAEC,IAAAA,SAAF;AAAa,OAAGC;AAAhB,GAA0B;AAC1E,QAAM;AAAEC,IAAAA,KAAF;AAASC,IAAAA;AAAT,MAA0BT,SAAS,CACtCU,MAAF,IAAc;AACb,UAAMC,kBAAkB,GAAGL,SAAS,CAAE,CAAF,CAApC;AACA,UAAM;AAAEM,MAAAA,oBAAF;AAAwBC,MAAAA,YAAxB;AAAsCC,MAAAA;AAAtC,QACLJ,MAAM,CAAEN,gBAAF,CADP;AAEA,UAAMW,gBAAgB,GACrB,CAAEH,oBAAoB,CAAED,kBAAF,CADvB;AAEA,UAAMK,UAAU,GAAGH,YAAY,CAAEF,kBAAF,CAAZ,KAAuC,MAA1D;AAEA,WAAO;AACNH,MAAAA,KAAK,EAAEM,QAAQ,CAAEH,kBAAF,CADT;AAENF,MAAAA,YAAY,EAAEM,gBAAgB,IAAIC;AAF5B,KAAP;AAIA,GAbuC,EAcxC,CAAEV,SAAS,CAAE,CAAF,CAAX,CAdwC,CAAzC;AAiBA,QAAM;AAAEW,IAAAA;AAAF,MAAoBhB,WAAW,CAAEG,gBAAF,CAArC;AACA,QAAMc,OAAO,GAAGhB,WAAW,CAAE,MAAM;AAClCe,IAAAA,aAAa,CACZT,KAAK,CAACW,QADM,EAEZxB,UAAU,CAAE;AAAEyB,MAAAA,IAAI,EAAExB,eAAe,CAAEY,KAAF;AAAvB,KAAF,CAFE,CAAb;AAIA,GAL0B,EAKxB,CAAEA,KAAF,CALwB,CAA3B;;AAOA,MAAK,CAAEC,YAAP,EAAsB;AACrB,WAAO,IAAP;AACA;;AAED,SACC,cAAC,YAAD,QACC,cAAC,aAAD;AAAe,IAAA,OAAO,EAAGS;AAAzB,KAAwCX,KAAxC,GACGR,EAAE,CAAE,eAAF,CADL,CADD,CADD;AAOA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { rawHandler, getBlockContent } from '@wordpress/blocks';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { useSelect, useDispatch } from '@wordpress/data';\nimport { useCallback } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockEditVisuallyButton( { clientIds, ...props } ) {\n\tconst { block, shouldRender } = useSelect(\n\t\t( select ) => {\n\t\t\tconst firstBlockClientId = clientIds[ 0 ];\n\t\t\tconst { isBlockMultiSelected, getBlockMode, getBlock } =\n\t\t\t\tselect( blockEditorStore );\n\t\t\tconst isSingleSelected =\n\t\t\t\t! isBlockMultiSelected( firstBlockClientId );\n\t\t\tconst isHtmlMode = getBlockMode( firstBlockClientId ) === 'html';\n\n\t\t\treturn {\n\t\t\t\tblock: getBlock( firstBlockClientId ),\n\t\t\t\tshouldRender: isSingleSelected && isHtmlMode,\n\t\t\t};\n\t\t},\n\t\t[ clientIds[ 0 ] ]\n\t);\n\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst onClick = useCallback( () => {\n\t\treplaceBlocks(\n\t\t\tblock.clientId,\n\t\t\trawHandler( { HTML: getBlockContent( block ) } )\n\t\t);\n\t}, [ block ] );\n\n\tif ( ! shouldRender ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ToolbarGroup>\n\t\t\t<ToolbarButton onClick={ onClick } { ...props }>\n\t\t\t\t{ __( 'Edit visually' ) }\n\t\t\t</ToolbarButton>\n\t\t</ToolbarGroup>\n\t);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["@wordpress/block-editor/src/components/use-no-recursive-renders/index.js"],"names":["createContext","useCallback","useContext","useMemo","useBlockEditContext","RenderedRefsContext","addToBlockType","renderedBlocks","blockName","uniqueId","result","Set","add","useNoRecursiveRenders","previouslyRenderedBlocks","name","hasAlreadyRendered","Boolean","has","newRenderedBlocks","Provider","children"],"mappings":";;AAAA;AACA;AACA;AACA,SACCA,aADD,EAECC,WAFD,EAGCC,UAHD,EAICC,OAJD,QAKO,oBALP;AAOA;AACA;AACA;;AACA,SAASC,mBAAT,QAAoC,uBAApC;AAEA,MAAMC,mBAAmB,GAAGL,aAAa,CAAE,EAAF,CAAzC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASM,cAAT,CAAyBC,cAAzB,EAAyCC,SAAzC,EAAoDC,QAApD,EAA+D;AAC9D,QAAMC,MAAM,GAAG,EACd,GAAGH,cADW;AAEd,KAAEC,SAAF,GAAeD,cAAc,CAAEC,SAAF,CAAd,GACZ,IAAIG,GAAJ,CAASJ,cAAc,CAAEC,SAAF,CAAvB,CADY,GAEZ,IAAIG,GAAJ;AAJW,GAAf;AAMAD,EAAAA,MAAM,CAAEF,SAAF,CAAN,CAAoBI,GAApB,CAAyBH,QAAzB;AAEA,SAAOC,MAAP;AACA;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe,SAASG,qBAAT,CAAgCJ,QAAhC,EAA2D;AAAA;;AAAA,MAAjBD,SAAiB,uEAAL,EAAK;AACzE,QAAMM,wBAAwB,GAAGZ,UAAU,CAAEG,mBAAF,CAA3C;AACA,QAAM;AAAEU,IAAAA;AAAF,MAAWX,mBAAmB,EAApC;AACAI,EAAAA,SAAS,GAAGA,SAAS,IAAIO,IAAzB;AACA,QAAMC,kBAAkB,GAAGC,OAAO,0BACjCH,wBAAwB,CAAEN,SAAF,CADS,0DACjC,sBAAuCU,GAAvC,CAA4CT,QAA5C,CADiC,CAAlC;AAGA,QAAMU,iBAAiB,GAAGhB,OAAO,CAChC,MAAMG,cAAc,CAAEQ,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CADY,EAEhC,CAAEK,wBAAF,EAA4BN,SAA5B,EAAuCC,QAAvC,CAFgC,CAAjC;AAIA,QAAMW,QAAQ,GAAGnB,WAAW,CAC3B;AAAA,QAAE;AAAEoB,MAAAA;AAAF,KAAF;AAAA,WACC,cAAC,mBAAD,CAAqB,QAArB;AAA8B,MAAA,KAAK,EAAGF;AAAtC,OACGE,QADH,CADD;AAAA,GAD2B,EAM3B,CAAEF,iBAAF,CAN2B,CAA5B;AAQA,SAAO,CAAEH,kBAAF,EAAsBI,QAAtB,CAAP;AACA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport {\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseMemo,\n} from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { useBlockEditContext } from '../block-edit/context';\n\nconst RenderedRefsContext = createContext( {} );\n\n/**\n * Immutably adds an unique identifier to a set scoped for a given block type.\n *\n * @param {Object} renderedBlocks Rendered blocks grouped by block name\n * @param {string} blockName Name of the block.\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n *\n * @return {Object} The list of rendered blocks grouped by block name.\n */\nfunction addToBlockType( renderedBlocks, blockName, uniqueId ) {\n\tconst result = {\n\t\t...renderedBlocks,\n\t\t[ blockName ]: renderedBlocks[ blockName ]\n\t\t\t? new Set( renderedBlocks[ blockName ] )\n\t\t\t: new Set(),\n\t};\n\tresult[ blockName ].add( uniqueId );\n\n\treturn result;\n}\n\n/**\n * A React hook for keeping track of blocks previously rendered up in the block\n * tree. Blocks susceptible to recursion can use this hook in their `Edit`\n * function to prevent said recursion.\n *\n * @param {*} uniqueId Any value that acts as a unique identifier for a block instance.\n * @param {string} blockName Optional block name.\n *\n * @return {[boolean, Function]} A tuple of:\n * - a boolean describing whether the provided id\n * has already been rendered;\n * - a React context provider to be used to wrap\n * other elements.\n */\nexport default function useNoRecursiveRenders( uniqueId, blockName = '' ) {\n\tconst previouslyRenderedBlocks = useContext( RenderedRefsContext );\n\tconst { name } = useBlockEditContext();\n\tblockName = blockName || name;\n\tconst hasAlreadyRendered = Boolean(\n\t\tpreviouslyRenderedBlocks[ blockName ]?.has( uniqueId )\n\t);\n\tconst newRenderedBlocks = useMemo(\n\t\t() => addToBlockType( previouslyRenderedBlocks, blockName, uniqueId ),\n\t\t[ previouslyRenderedBlocks, blockName, uniqueId ]\n\t);\n\tconst Provider = useCallback(\n\t\t( { children } ) => (\n\t\t\t<RenderedRefsContext.Provider value={ newRenderedBlocks }>\n\t\t\t\t{ children }\n\t\t\t</RenderedRefsContext.Provider>\n\t\t),\n\t\t[ newRenderedBlocks ]\n\t);\n\treturn [ hasAlreadyRendered, Provider ];\n}\n"]}