@wordpress/block-editor 16.0.1-next.v.202607070741.0 → 16.1.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 (679) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/README.md +8 -0
  3. package/build/components/alignment-control/ui.cjs +2 -4
  4. package/build/components/alignment-control/ui.cjs.map +2 -2
  5. package/build/components/background-image-control/index.cjs +40 -10
  6. package/build/components/background-image-control/index.cjs.map +2 -2
  7. package/build/components/block-alignment-control/ui.cjs +5 -3
  8. package/build/components/block-alignment-control/ui.cjs.map +2 -2
  9. package/build/components/block-canvas/index.cjs +6 -1
  10. package/build/components/block-canvas/index.cjs.map +2 -2
  11. package/build/components/block-controls/groups.cjs +3 -1
  12. package/build/components/block-controls/groups.cjs.map +2 -2
  13. package/build/components/block-edit/edit.cjs +10 -18
  14. package/build/components/block-edit/edit.cjs.map +2 -2
  15. package/build/components/block-inspector/index.cjs +73 -46
  16. package/build/components/block-inspector/index.cjs.map +2 -2
  17. package/build/components/block-list/block-html.cjs +4 -1
  18. package/build/components/block-list/block-html.cjs.map +2 -2
  19. package/build/components/block-list/block.cjs +9 -3
  20. package/build/components/block-list/block.cjs.map +3 -3
  21. package/build/components/block-list/index.cjs +1 -3
  22. package/build/components/block-list/index.cjs.map +2 -2
  23. package/build/components/block-list/use-block-props/index.cjs +7 -2
  24. package/build/components/block-list/use-block-props/index.cjs.map +2 -2
  25. package/build/components/block-list/use-block-props/use-focus-first-element.cjs +9 -4
  26. package/build/components/block-list/use-block-props/use-focus-first-element.cjs.map +2 -2
  27. package/build/components/block-list/use-block-props/use-focus-handler.cjs +11 -4
  28. package/build/components/block-list/use-block-props/use-focus-handler.cjs.map +2 -2
  29. package/build/components/block-list/use-block-props/use-register-block-event-handlers.cjs +48 -0
  30. package/build/components/block-list/use-block-props/use-register-block-event-handlers.cjs.map +7 -0
  31. package/build/components/block-parent-selector/index.cjs +2 -2
  32. package/build/components/block-parent-selector/index.cjs.map +2 -2
  33. package/build/components/block-toolbar/index.cjs +43 -24
  34. package/build/components/block-toolbar/index.cjs.map +2 -2
  35. package/build/components/block-toolbar/switch-section-style.cjs +4 -2
  36. package/build/components/block-toolbar/switch-section-style.cjs.map +3 -3
  37. package/build/components/block-tools/empty-block-inserter.cjs +2 -7
  38. package/build/components/block-tools/empty-block-inserter.cjs.map +2 -2
  39. package/build/components/block-tools/index.cjs +7 -2
  40. package/build/components/block-tools/index.cjs.map +2 -2
  41. package/build/components/block-vertical-alignment-control/ui.cjs +3 -5
  42. package/build/components/block-vertical-alignment-control/ui.cjs.map +2 -2
  43. package/build/components/block-visibility/modal.cjs +20 -6
  44. package/build/components/block-visibility/modal.cjs.map +2 -2
  45. package/build/components/block-visibility/use-block-visibility.cjs +16 -6
  46. package/build/components/block-visibility/use-block-visibility.cjs.map +3 -3
  47. package/build/components/block-visibility/utils.cjs +15 -2
  48. package/build/components/block-visibility/utils.cjs.map +3 -3
  49. package/build/components/block-visibility/viewport-menu-item.cjs +7 -1
  50. package/build/components/block-visibility/viewport-menu-item.cjs.map +2 -2
  51. package/build/components/block-visibility/viewport-toolbar.cjs +5 -0
  52. package/build/components/block-visibility/viewport-toolbar.cjs.map +2 -2
  53. package/build/components/block-visibility/viewport-visibility-info.cjs +5 -1
  54. package/build/components/block-visibility/viewport-visibility-info.cjs.map +2 -2
  55. package/build/components/border-radius-control/utils.cjs +8 -58
  56. package/build/components/border-radius-control/utils.cjs.map +2 -2
  57. package/build/components/child-layout-control/index.cjs +0 -4
  58. package/build/components/child-layout-control/index.cjs.map +2 -2
  59. package/build/components/colors-gradients/control.cjs +5 -3
  60. package/build/components/colors-gradients/control.cjs.map +2 -2
  61. package/build/components/dimension-control/index.cjs +30 -20
  62. package/build/components/dimension-control/index.cjs.map +3 -3
  63. package/build/components/dimensions-tool/aspect-ratio-tool.cjs +9 -2
  64. package/build/components/dimensions-tool/aspect-ratio-tool.cjs.map +3 -3
  65. package/build/components/editor-styles/index.cjs +9 -1
  66. package/build/components/editor-styles/index.cjs.map +2 -2
  67. package/build/components/global-styles/background-panel.cjs +66 -25
  68. package/build/components/global-styles/background-panel.cjs.map +3 -3
  69. package/build/components/global-styles/border-panel.cjs +153 -55
  70. package/build/components/global-styles/border-panel.cjs.map +3 -3
  71. package/build/components/global-styles/color-gradient-dropdown-item.cjs +46 -14
  72. package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +3 -3
  73. package/build/components/global-styles/color-panel.cjs +63 -17
  74. package/build/components/global-styles/color-panel.cjs.map +2 -2
  75. package/build/components/global-styles/dimensions-panel.cjs +242 -64
  76. package/build/components/global-styles/dimensions-panel.cjs.map +3 -3
  77. package/build/components/global-styles/filters-panel.cjs +59 -20
  78. package/build/components/global-styles/filters-panel.cjs.map +3 -3
  79. package/build/components/global-styles/hooks.cjs +4 -1
  80. package/build/components/global-styles/hooks.cjs.map +2 -2
  81. package/build/components/global-styles/inheritance/index.cjs +142 -0
  82. package/build/components/global-styles/inheritance/index.cjs.map +7 -0
  83. package/build/components/global-styles/inherited-value-context.cjs +173 -0
  84. package/build/components/global-styles/inherited-value-context.cjs.map +7 -0
  85. package/build/components/global-styles/shadow-panel-components.cjs +38 -20
  86. package/build/components/global-styles/shadow-panel-components.cjs.map +2 -2
  87. package/build/components/global-styles/state-control-badges.cjs +39 -3
  88. package/build/components/global-styles/state-control-badges.cjs.map +2 -2
  89. package/build/components/global-styles/state-control.cjs +1 -1
  90. package/build/components/global-styles/state-control.cjs.map +2 -2
  91. package/build/components/global-styles/typography-panel.cjs +271 -79
  92. package/build/components/global-styles/typography-panel.cjs.map +3 -3
  93. package/build/components/image-size-control/index.cjs +2 -4
  94. package/build/components/image-size-control/index.cjs.map +2 -2
  95. package/build/components/inserter/media-tab/hooks.cjs +33 -6
  96. package/build/components/inserter/media-tab/hooks.cjs.map +2 -2
  97. package/build/components/inserter/media-tab/media-panel.cjs +78 -16
  98. package/build/components/inserter/media-tab/media-panel.cjs.map +3 -3
  99. package/build/components/inspector-controls-tabs/styles-tab.cjs +10 -1
  100. package/build/components/inspector-controls-tabs/styles-tab.cjs.map +2 -2
  101. package/build/components/keyboard-shortcuts/index.cjs +19 -11
  102. package/build/components/keyboard-shortcuts/index.cjs.map +2 -2
  103. package/build/components/line-height-control/index.cjs +1 -2
  104. package/build/components/line-height-control/index.cjs.map +2 -2
  105. package/build/components/link-control/index.cjs +3 -1
  106. package/build/components/link-control/index.cjs.map +2 -2
  107. package/build/components/list-view/block.cjs +13 -4
  108. package/build/components/list-view/block.cjs.map +2 -2
  109. package/build/components/media-placeholder/index.cjs +0 -1
  110. package/build/components/media-placeholder/index.cjs.map +2 -2
  111. package/build/components/preset-input-control/index.cjs +2 -1
  112. package/build/components/preset-input-control/index.cjs.map +2 -2
  113. package/build/components/provider/block-refs-provider.cjs +8 -2
  114. package/build/components/provider/block-refs-provider.cjs.map +2 -2
  115. package/build/components/provider/index.cjs +1 -1
  116. package/build/components/provider/index.cjs.map +2 -2
  117. package/build/components/provider/use-block-sync.cjs +18 -6
  118. package/build/components/provider/use-block-sync.cjs.map +2 -2
  119. package/build/components/provider/use-media-upload-settings.cjs +3 -1
  120. package/build/components/provider/use-media-upload-settings.cjs.map +2 -2
  121. package/build/components/rich-text/event-listeners/before-input-rules.cjs +3 -4
  122. package/build/components/rich-text/event-listeners/before-input-rules.cjs.map +3 -3
  123. package/build/components/rich-text/event-listeners/delete.cjs +2 -3
  124. package/build/components/rich-text/event-listeners/delete.cjs.map +3 -3
  125. package/build/components/rich-text/event-listeners/enter.cjs +3 -2
  126. package/build/components/rich-text/event-listeners/enter.cjs.map +3 -3
  127. package/build/components/rich-text/event-listeners/input-events.cjs +3 -3
  128. package/build/components/rich-text/event-listeners/input-events.cjs.map +3 -3
  129. package/build/components/rich-text/event-listeners/input-rules.cjs +3 -4
  130. package/build/components/rich-text/event-listeners/input-rules.cjs.map +3 -3
  131. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs +3 -3
  132. package/build/components/rich-text/event-listeners/insert-replacement-text.cjs.map +3 -3
  133. package/build/components/rich-text/event-listeners/paste-handler.cjs +2 -1
  134. package/build/components/rich-text/event-listeners/paste-handler.cjs.map +3 -3
  135. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs +3 -3
  136. package/build/components/rich-text/event-listeners/remove-browser-shortcuts.cjs.map +3 -3
  137. package/build/components/rich-text/event-listeners/shortcuts.cjs +3 -3
  138. package/build/components/rich-text/event-listeners/shortcuts.cjs.map +3 -3
  139. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs +3 -3
  140. package/build/components/rich-text/event-listeners/undo-automatic-change.cjs.map +3 -3
  141. package/build/components/rich-text/index.cjs +76 -17
  142. package/build/components/rich-text/index.cjs.map +2 -2
  143. package/build/components/spacing-sizes-control/utils.cjs +6 -19
  144. package/build/components/spacing-sizes-control/utils.cjs.map +2 -2
  145. package/build/components/text-indent-control/index.cjs +8 -2
  146. package/build/components/text-indent-control/index.cjs.map +2 -2
  147. package/build/components/typewriter/index.cjs +129 -136
  148. package/build/components/typewriter/index.cjs.map +3 -3
  149. package/build/components/url-input/index.cjs +303 -344
  150. package/build/components/url-input/index.cjs.map +3 -3
  151. package/build/components/use-block-commands/index.cjs +21 -17
  152. package/build/components/use-block-commands/index.cjs.map +2 -2
  153. package/build/components/use-on-block-drop/index.cjs +1 -1
  154. package/build/components/use-on-block-drop/index.cjs.map +2 -2
  155. package/build/components/writing-flow/index.cjs +14 -1
  156. package/build/components/writing-flow/index.cjs.map +3 -3
  157. package/build/components/writing-flow/use-arrow-nav.cjs +42 -6
  158. package/build/components/writing-flow/use-arrow-nav.cjs.map +2 -2
  159. package/build/components/writing-flow/use-click-selection.cjs +29 -3
  160. package/build/components/writing-flow/use-click-selection.cjs.map +2 -2
  161. package/build/components/writing-flow/use-clipboard-handler.cjs +4 -1
  162. package/build/components/writing-flow/use-clipboard-handler.cjs.map +2 -2
  163. package/build/components/writing-flow/use-drag-selection.cjs +3 -8
  164. package/build/components/writing-flow/use-drag-selection.cjs.map +2 -2
  165. package/build/components/writing-flow/use-editable-root-event-handlers.cjs +179 -0
  166. package/build/components/writing-flow/use-editable-root-event-handlers.cjs.map +7 -0
  167. package/build/components/writing-flow/use-editable-root.cjs +75 -0
  168. package/build/components/writing-flow/use-editable-root.cjs.map +7 -0
  169. package/build/components/writing-flow/use-home-end.cjs +64 -0
  170. package/build/components/writing-flow/use-home-end.cjs.map +7 -0
  171. package/build/components/writing-flow/use-input.cjs +15 -5
  172. package/build/components/writing-flow/use-input.cjs.map +2 -2
  173. package/build/components/writing-flow/use-multi-selection.cjs +2 -2
  174. package/build/components/writing-flow/use-multi-selection.cjs.map +2 -2
  175. package/build/components/writing-flow/use-select-all.cjs +14 -2
  176. package/build/components/writing-flow/use-select-all.cjs.map +2 -2
  177. package/build/components/writing-flow/use-selection-observer.cjs +132 -22
  178. package/build/components/writing-flow/use-selection-observer.cjs.map +3 -3
  179. package/build/components/writing-flow/utils.cjs +28 -2
  180. package/build/components/writing-flow/utils.cjs.map +2 -2
  181. package/build/hooks/background.cjs +14 -10
  182. package/build/hooks/background.cjs.map +2 -2
  183. package/build/hooks/block-fields/rich-text/index.cjs +2 -3
  184. package/build/hooks/block-fields/rich-text/index.cjs.map +3 -3
  185. package/build/hooks/block-style-variation.cjs +4 -45
  186. package/build/hooks/block-style-variation.cjs.map +3 -3
  187. package/build/hooks/border.cjs +19 -4
  188. package/build/hooks/border.cjs.map +2 -2
  189. package/build/hooks/custom-css.cjs +6 -2
  190. package/build/hooks/custom-css.cjs.map +2 -2
  191. package/build/hooks/dimensions.cjs +15 -4
  192. package/build/hooks/dimensions.cjs.map +2 -2
  193. package/build/hooks/duotone.cjs +26 -14
  194. package/build/hooks/duotone.cjs.map +3 -3
  195. package/build/hooks/elements.cjs +15 -5
  196. package/build/hooks/elements.cjs.map +2 -2
  197. package/build/hooks/grid-visualizer.cjs +5 -3
  198. package/build/hooks/grid-visualizer.cjs.map +2 -2
  199. package/build/hooks/layout-child.cjs +22 -12
  200. package/build/hooks/layout-child.cjs.map +3 -3
  201. package/build/hooks/layout.cjs +28 -13
  202. package/build/hooks/layout.cjs.map +3 -3
  203. package/build/hooks/line-height.cjs +1 -2
  204. package/build/hooks/line-height.cjs.map +2 -2
  205. package/build/hooks/states.cjs +27 -7
  206. package/build/hooks/states.cjs.map +3 -3
  207. package/build/hooks/style.cjs +31 -9
  208. package/build/hooks/style.cjs.map +3 -3
  209. package/build/hooks/text-align.cjs +36 -6
  210. package/build/hooks/text-align.cjs.map +3 -3
  211. package/build/hooks/typography.cjs +14 -5
  212. package/build/hooks/typography.cjs.map +2 -2
  213. package/build/layouts/constrained.cjs +14 -6
  214. package/build/layouts/constrained.cjs.map +2 -2
  215. package/build/layouts/flex.cjs +27 -19
  216. package/build/layouts/flex.cjs.map +2 -2
  217. package/build/layouts/grid.cjs +0 -2
  218. package/build/layouts/grid.cjs.map +2 -2
  219. package/build/private-apis.cjs +9 -5
  220. package/build/private-apis.cjs.map +3 -3
  221. package/build/store/actions.cjs +11 -6
  222. package/build/store/actions.cjs.map +2 -2
  223. package/build/store/private-selectors.cjs +41 -3
  224. package/build/store/private-selectors.cjs.map +3 -3
  225. package/build/store/reducer.cjs +6 -6
  226. package/build/store/reducer.cjs.map +2 -2
  227. package/build/store/selectors.cjs +23 -0
  228. package/build/store/selectors.cjs.map +2 -2
  229. package/build/utils/block-bindings.cjs +29 -0
  230. package/build/utils/block-bindings.cjs.map +2 -2
  231. package/build/utils/dom.cjs +14 -0
  232. package/build/utils/dom.cjs.map +2 -2
  233. package/build/{components/rich-text/input-event.cjs → utils/native-undo.cjs} +29 -24
  234. package/build/utils/native-undo.cjs.map +7 -0
  235. package/build-module/components/alignment-control/ui.mjs +2 -4
  236. package/build-module/components/alignment-control/ui.mjs.map +2 -2
  237. package/build-module/components/background-image-control/index.mjs +43 -10
  238. package/build-module/components/background-image-control/index.mjs.map +2 -2
  239. package/build-module/components/block-alignment-control/ui.mjs +5 -3
  240. package/build-module/components/block-alignment-control/ui.mjs.map +2 -2
  241. package/build-module/components/block-canvas/index.mjs +7 -2
  242. package/build-module/components/block-canvas/index.mjs.map +2 -2
  243. package/build-module/components/block-controls/groups.mjs +3 -1
  244. package/build-module/components/block-controls/groups.mjs.map +2 -2
  245. package/build-module/components/block-edit/edit.mjs +11 -18
  246. package/build-module/components/block-edit/edit.mjs.map +2 -2
  247. package/build-module/components/block-inspector/index.mjs +74 -46
  248. package/build-module/components/block-inspector/index.mjs.map +2 -2
  249. package/build-module/components/block-list/block-html.mjs +4 -1
  250. package/build-module/components/block-list/block-html.mjs.map +2 -2
  251. package/build-module/components/block-list/block.mjs +9 -3
  252. package/build-module/components/block-list/block.mjs.map +3 -3
  253. package/build-module/components/block-list/index.mjs +1 -3
  254. package/build-module/components/block-list/index.mjs.map +2 -2
  255. package/build-module/components/block-list/use-block-props/index.mjs +7 -2
  256. package/build-module/components/block-list/use-block-props/index.mjs.map +2 -2
  257. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs +9 -4
  258. package/build-module/components/block-list/use-block-props/use-focus-first-element.mjs.map +2 -2
  259. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs +11 -4
  260. package/build-module/components/block-list/use-block-props/use-focus-handler.mjs.map +2 -2
  261. package/build-module/components/block-list/use-block-props/use-register-block-event-handlers.mjs +28 -0
  262. package/build-module/components/block-list/use-block-props/use-register-block-event-handlers.mjs.map +7 -0
  263. package/build-module/components/block-parent-selector/index.mjs +2 -2
  264. package/build-module/components/block-parent-selector/index.mjs.map +2 -2
  265. package/build-module/components/block-toolbar/index.mjs +43 -24
  266. package/build-module/components/block-toolbar/index.mjs.map +2 -2
  267. package/build-module/components/block-toolbar/switch-section-style.mjs +4 -2
  268. package/build-module/components/block-toolbar/switch-section-style.mjs.map +2 -2
  269. package/build-module/components/block-tools/empty-block-inserter.mjs +2 -7
  270. package/build-module/components/block-tools/empty-block-inserter.mjs.map +2 -2
  271. package/build-module/components/block-tools/index.mjs +7 -2
  272. package/build-module/components/block-tools/index.mjs.map +2 -2
  273. package/build-module/components/block-vertical-alignment-control/ui.mjs +4 -6
  274. package/build-module/components/block-vertical-alignment-control/ui.mjs.map +2 -2
  275. package/build-module/components/block-visibility/modal.mjs +22 -10
  276. package/build-module/components/block-visibility/modal.mjs.map +2 -2
  277. package/build-module/components/block-visibility/use-block-visibility.mjs +17 -7
  278. package/build-module/components/block-visibility/use-block-visibility.mjs.map +2 -2
  279. package/build-module/components/block-visibility/utils.mjs +18 -3
  280. package/build-module/components/block-visibility/utils.mjs.map +2 -2
  281. package/build-module/components/block-visibility/viewport-menu-item.mjs +7 -1
  282. package/build-module/components/block-visibility/viewport-menu-item.mjs.map +2 -2
  283. package/build-module/components/block-visibility/viewport-toolbar.mjs +5 -0
  284. package/build-module/components/block-visibility/viewport-toolbar.mjs.map +2 -2
  285. package/build-module/components/block-visibility/viewport-visibility-info.mjs +5 -1
  286. package/build-module/components/block-visibility/viewport-visibility-info.mjs.map +2 -2
  287. package/build-module/components/border-radius-control/utils.mjs +11 -53
  288. package/build-module/components/border-radius-control/utils.mjs.map +2 -2
  289. package/build-module/components/child-layout-control/index.mjs +0 -4
  290. package/build-module/components/child-layout-control/index.mjs.map +2 -2
  291. package/build-module/components/colors-gradients/control.mjs +5 -3
  292. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  293. package/build-module/components/dimension-control/index.mjs +30 -20
  294. package/build-module/components/dimension-control/index.mjs.map +2 -2
  295. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs +10 -6
  296. package/build-module/components/dimensions-tool/aspect-ratio-tool.mjs.map +2 -2
  297. package/build-module/components/editor-styles/index.mjs +9 -1
  298. package/build-module/components/editor-styles/index.mjs.map +2 -2
  299. package/build-module/components/global-styles/background-panel.mjs +71 -29
  300. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  301. package/build-module/components/global-styles/border-panel.mjs +157 -56
  302. package/build-module/components/global-styles/border-panel.mjs.map +2 -2
  303. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +51 -15
  304. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +2 -2
  305. package/build-module/components/global-styles/color-panel.mjs +63 -17
  306. package/build-module/components/global-styles/color-panel.mjs.map +2 -2
  307. package/build-module/components/global-styles/dimensions-panel.mjs +248 -66
  308. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  309. package/build-module/components/global-styles/filters-panel.mjs +64 -21
  310. package/build-module/components/global-styles/filters-panel.mjs.map +2 -2
  311. package/build-module/components/global-styles/hooks.mjs +4 -1
  312. package/build-module/components/global-styles/hooks.mjs.map +2 -2
  313. package/build-module/components/global-styles/inheritance/index.mjs +108 -0
  314. package/build-module/components/global-styles/inheritance/index.mjs.map +7 -0
  315. package/build-module/components/global-styles/inherited-value-context.mjs +141 -0
  316. package/build-module/components/global-styles/inherited-value-context.mjs.map +7 -0
  317. package/build-module/components/global-styles/shadow-panel-components.mjs +38 -20
  318. package/build-module/components/global-styles/shadow-panel-components.mjs.map +2 -2
  319. package/build-module/components/global-styles/state-control-badges.mjs +41 -5
  320. package/build-module/components/global-styles/state-control-badges.mjs.map +2 -2
  321. package/build-module/components/global-styles/state-control.mjs +1 -1
  322. package/build-module/components/global-styles/state-control.mjs.map +2 -2
  323. package/build-module/components/global-styles/typography-panel.mjs +276 -80
  324. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  325. package/build-module/components/image-size-control/index.mjs +2 -4
  326. package/build-module/components/image-size-control/index.mjs.map +2 -2
  327. package/build-module/components/inserter/media-tab/hooks.mjs +33 -6
  328. package/build-module/components/inserter/media-tab/hooks.mjs.map +2 -2
  329. package/build-module/components/inserter/media-tab/media-panel.mjs +86 -18
  330. package/build-module/components/inserter/media-tab/media-panel.mjs.map +2 -2
  331. package/build-module/components/inspector-controls-tabs/styles-tab.mjs +6 -1
  332. package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
  333. package/build-module/components/keyboard-shortcuts/index.mjs +19 -11
  334. package/build-module/components/keyboard-shortcuts/index.mjs.map +2 -2
  335. package/build-module/components/line-height-control/index.mjs +1 -2
  336. package/build-module/components/line-height-control/index.mjs.map +2 -2
  337. package/build-module/components/link-control/index.mjs +4 -2
  338. package/build-module/components/link-control/index.mjs.map +2 -2
  339. package/build-module/components/list-view/block.mjs +13 -4
  340. package/build-module/components/list-view/block.mjs.map +2 -2
  341. package/build-module/components/media-placeholder/index.mjs +0 -1
  342. package/build-module/components/media-placeholder/index.mjs.map +2 -2
  343. package/build-module/components/preset-input-control/index.mjs +2 -1
  344. package/build-module/components/preset-input-control/index.mjs.map +2 -2
  345. package/build-module/components/provider/block-refs-provider.mjs +8 -2
  346. package/build-module/components/provider/block-refs-provider.mjs.map +2 -2
  347. package/build-module/components/provider/index.mjs +1 -1
  348. package/build-module/components/provider/index.mjs.map +2 -2
  349. package/build-module/components/provider/use-block-sync.mjs +18 -6
  350. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  351. package/build-module/components/provider/use-media-upload-settings.mjs +3 -1
  352. package/build-module/components/provider/use-media-upload-settings.mjs.map +2 -2
  353. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs +8 -5
  354. package/build-module/components/rich-text/event-listeners/before-input-rules.mjs.map +2 -2
  355. package/build-module/components/rich-text/event-listeners/delete.mjs +7 -4
  356. package/build-module/components/rich-text/event-listeners/delete.mjs.map +2 -2
  357. package/build-module/components/rich-text/event-listeners/enter.mjs +8 -3
  358. package/build-module/components/rich-text/event-listeners/enter.mjs.map +2 -2
  359. package/build-module/components/rich-text/event-listeners/input-events.mjs +3 -3
  360. package/build-module/components/rich-text/event-listeners/input-events.mjs.map +2 -2
  361. package/build-module/components/rich-text/event-listeners/input-rules.mjs +8 -5
  362. package/build-module/components/rich-text/event-listeners/input-rules.mjs.map +2 -2
  363. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs +3 -3
  364. package/build-module/components/rich-text/event-listeners/insert-replacement-text.mjs.map +2 -2
  365. package/build-module/components/rich-text/event-listeners/paste-handler.mjs +8 -2
  366. package/build-module/components/rich-text/event-listeners/paste-handler.mjs.map +2 -2
  367. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs +3 -3
  368. package/build-module/components/rich-text/event-listeners/remove-browser-shortcuts.mjs.map +2 -2
  369. package/build-module/components/rich-text/event-listeners/shortcuts.mjs +3 -3
  370. package/build-module/components/rich-text/event-listeners/shortcuts.mjs.map +2 -2
  371. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs +3 -3
  372. package/build-module/components/rich-text/event-listeners/undo-automatic-change.mjs.map +2 -2
  373. package/build-module/components/rich-text/index.mjs +79 -14
  374. package/build-module/components/rich-text/index.mjs.map +2 -2
  375. package/build-module/components/spacing-sizes-control/utils.mjs +6 -18
  376. package/build-module/components/spacing-sizes-control/utils.mjs.map +2 -2
  377. package/build-module/components/text-indent-control/index.mjs +8 -2
  378. package/build-module/components/text-indent-control/index.mjs.map +2 -2
  379. package/build-module/components/typewriter/index.mjs +129 -136
  380. package/build-module/components/typewriter/index.mjs.map +2 -2
  381. package/build-module/components/url-input/index.mjs +306 -353
  382. package/build-module/components/url-input/index.mjs.map +2 -2
  383. package/build-module/components/use-block-commands/index.mjs +21 -17
  384. package/build-module/components/use-block-commands/index.mjs.map +2 -2
  385. package/build-module/components/use-on-block-drop/index.mjs +2 -2
  386. package/build-module/components/use-on-block-drop/index.mjs.map +2 -2
  387. package/build-module/components/writing-flow/index.mjs +14 -1
  388. package/build-module/components/writing-flow/index.mjs.map +2 -2
  389. package/build-module/components/writing-flow/use-arrow-nav.mjs +43 -7
  390. package/build-module/components/writing-flow/use-arrow-nav.mjs.map +2 -2
  391. package/build-module/components/writing-flow/use-click-selection.mjs +29 -3
  392. package/build-module/components/writing-flow/use-click-selection.mjs.map +2 -2
  393. package/build-module/components/writing-flow/use-clipboard-handler.mjs +5 -2
  394. package/build-module/components/writing-flow/use-clipboard-handler.mjs.map +2 -2
  395. package/build-module/components/writing-flow/use-drag-selection.mjs +1 -6
  396. package/build-module/components/writing-flow/use-drag-selection.mjs.map +2 -2
  397. package/build-module/components/writing-flow/use-editable-root-event-handlers.mjs +154 -0
  398. package/build-module/components/writing-flow/use-editable-root-event-handlers.mjs.map +7 -0
  399. package/build-module/components/writing-flow/use-editable-root.mjs +54 -0
  400. package/build-module/components/writing-flow/use-editable-root.mjs.map +7 -0
  401. package/build-module/components/writing-flow/use-home-end.mjs +43 -0
  402. package/build-module/components/writing-flow/use-home-end.mjs.map +7 -0
  403. package/build-module/components/writing-flow/use-input.mjs +15 -5
  404. package/build-module/components/writing-flow/use-input.mjs.map +2 -2
  405. package/build-module/components/writing-flow/use-multi-selection.mjs +2 -2
  406. package/build-module/components/writing-flow/use-multi-selection.mjs.map +2 -2
  407. package/build-module/components/writing-flow/use-select-all.mjs +19 -3
  408. package/build-module/components/writing-flow/use-select-all.mjs.map +2 -2
  409. package/build-module/components/writing-flow/use-selection-observer.mjs +134 -21
  410. package/build-module/components/writing-flow/use-selection-observer.mjs.map +2 -2
  411. package/build-module/components/writing-flow/utils.mjs +26 -1
  412. package/build-module/components/writing-flow/utils.mjs.map +2 -2
  413. package/build-module/hooks/background.mjs +14 -10
  414. package/build-module/hooks/background.mjs.map +2 -2
  415. package/build-module/hooks/block-fields/rich-text/index.mjs +2 -6
  416. package/build-module/hooks/block-fields/rich-text/index.mjs.map +2 -2
  417. package/build-module/hooks/block-style-variation.mjs +8 -44
  418. package/build-module/hooks/block-style-variation.mjs.map +2 -2
  419. package/build-module/hooks/border.mjs +19 -4
  420. package/build-module/hooks/border.mjs.map +2 -2
  421. package/build-module/hooks/custom-css.mjs +7 -3
  422. package/build-module/hooks/custom-css.mjs.map +2 -2
  423. package/build-module/hooks/dimensions.mjs +15 -4
  424. package/build-module/hooks/dimensions.mjs.map +2 -2
  425. package/build-module/hooks/duotone.mjs +20 -9
  426. package/build-module/hooks/duotone.mjs.map +2 -2
  427. package/build-module/hooks/elements.mjs +15 -5
  428. package/build-module/hooks/elements.mjs.map +2 -2
  429. package/build-module/hooks/grid-visualizer.mjs +5 -3
  430. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  431. package/build-module/hooks/layout-child.mjs +22 -12
  432. package/build-module/hooks/layout-child.mjs.map +2 -2
  433. package/build-module/hooks/layout.mjs +28 -13
  434. package/build-module/hooks/layout.mjs.map +2 -2
  435. package/build-module/hooks/line-height.mjs +1 -2
  436. package/build-module/hooks/line-height.mjs.map +2 -2
  437. package/build-module/hooks/states.mjs +27 -7
  438. package/build-module/hooks/states.mjs.map +2 -2
  439. package/build-module/hooks/style.mjs +40 -11
  440. package/build-module/hooks/style.mjs.map +2 -2
  441. package/build-module/hooks/text-align.mjs +39 -10
  442. package/build-module/hooks/text-align.mjs.map +2 -2
  443. package/build-module/hooks/typography.mjs +14 -5
  444. package/build-module/hooks/typography.mjs.map +2 -2
  445. package/build-module/layouts/constrained.mjs +14 -6
  446. package/build-module/layouts/constrained.mjs.map +2 -2
  447. package/build-module/layouts/flex.mjs +27 -19
  448. package/build-module/layouts/flex.mjs.map +2 -2
  449. package/build-module/layouts/grid.mjs +0 -2
  450. package/build-module/layouts/grid.mjs.map +2 -2
  451. package/build-module/private-apis.mjs +7 -3
  452. package/build-module/private-apis.mjs.map +2 -2
  453. package/build-module/store/actions.mjs +12 -7
  454. package/build-module/store/actions.mjs.map +2 -2
  455. package/build-module/store/private-selectors.mjs +42 -3
  456. package/build-module/store/private-selectors.mjs.map +2 -2
  457. package/build-module/store/reducer.mjs +6 -6
  458. package/build-module/store/reducer.mjs.map +2 -2
  459. package/build-module/store/selectors.mjs +23 -0
  460. package/build-module/store/selectors.mjs.map +2 -2
  461. package/build-module/utils/block-bindings.mjs +28 -0
  462. package/build-module/utils/block-bindings.mjs.map +2 -2
  463. package/build-module/utils/dom.mjs +13 -0
  464. package/build-module/utils/dom.mjs.map +2 -2
  465. package/build-module/utils/native-undo.mjs +29 -0
  466. package/build-module/utils/native-undo.mjs.map +7 -0
  467. package/build-style/content-rtl.css +14 -27
  468. package/build-style/content.css +14 -27
  469. package/build-style/default-editor-styles-rtl.css +1 -1
  470. package/build-style/default-editor-styles.css +1 -1
  471. package/build-style/style-rtl.css +191 -61
  472. package/build-style/style.css +191 -61
  473. package/build-types/components/block-context/index.d.ts +7 -0
  474. package/build-types/components/block-context/index.d.ts.map +1 -1
  475. package/build-types/utils/block-bindings.d.ts +19 -0
  476. package/build-types/utils/block-bindings.d.ts.map +1 -1
  477. package/build-types/utils/dom.d.ts +11 -0
  478. package/build-types/utils/dom.d.ts.map +1 -1
  479. package/build-types/utils/get-px-from-css-unit.d.ts +2 -2
  480. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -1
  481. package/build-types/utils/pasting.d.ts +1 -1
  482. package/build-types/utils/pasting.d.ts.map +1 -1
  483. package/package.json +43 -44
  484. package/src/components/alignment-control/test/__snapshots__/index.js.snap +1 -1
  485. package/src/components/alignment-control/ui.js +2 -4
  486. package/src/components/background-image-control/index.js +74 -37
  487. package/src/components/background-image-control/style.scss +13 -4
  488. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +3 -3
  489. package/src/components/block-alignment-control/test/index.js +1 -1
  490. package/src/components/block-alignment-control/ui.js +4 -2
  491. package/src/components/block-breadcrumb/test/__snapshots__/index.js.snap +1 -1
  492. package/src/components/block-canvas/index.js +9 -2
  493. package/src/components/block-card/style.scss +1 -1
  494. package/src/components/block-compare/test/__snapshots__/block-view.js.snap +1 -1
  495. package/src/components/block-controls/groups.js +2 -0
  496. package/src/components/block-edit/edit.js +13 -31
  497. package/src/components/block-icon/test/__snapshots__/index.js.snap +1 -1
  498. package/src/components/block-inspector/index.js +60 -31
  499. package/src/components/block-list/block-html.js +5 -0
  500. package/src/components/block-list/block.js +6 -0
  501. package/src/components/block-list/content.scss +1 -11
  502. package/src/components/block-list/index.js +0 -2
  503. package/src/components/block-list/use-block-props/index.js +7 -1
  504. package/src/components/block-list/use-block-props/use-focus-first-element.js +23 -4
  505. package/src/components/block-list/use-block-props/use-focus-handler.js +35 -9
  506. package/src/components/block-list/use-block-props/use-register-block-event-handlers.js +45 -0
  507. package/src/components/block-lock/style.scss +1 -1
  508. package/src/components/block-manager/style.scss +1 -1
  509. package/src/components/block-navigation/style.scss +1 -1
  510. package/src/components/block-parent-selector/index.js +5 -2
  511. package/src/components/block-quick-navigation/style.scss +1 -3
  512. package/src/components/block-styles/style.scss +2 -2
  513. package/src/components/block-toolbar/index.js +41 -18
  514. package/src/components/block-toolbar/switch-section-style.js +5 -2
  515. package/src/components/block-tools/empty-block-inserter.js +3 -7
  516. package/src/components/block-tools/index.js +7 -0
  517. package/src/components/block-types-list/style.scss +0 -1
  518. package/src/components/block-vertical-alignment-control/test/__snapshots__/index.js.snap +3 -3
  519. package/src/components/block-vertical-alignment-control/test/index.js +18 -2
  520. package/src/components/block-vertical-alignment-control/ui.js +3 -5
  521. package/src/components/block-visibility/modal.js +24 -10
  522. package/src/components/block-visibility/style.scss +1 -1
  523. package/src/components/block-visibility/test/use-block-visibility.js +128 -35
  524. package/src/components/block-visibility/test/utils.js +11 -0
  525. package/src/components/block-visibility/use-block-visibility.js +33 -11
  526. package/src/components/block-visibility/utils.js +31 -6
  527. package/src/components/block-visibility/viewport-menu-item.js +10 -1
  528. package/src/components/block-visibility/viewport-toolbar.js +6 -0
  529. package/src/components/block-visibility/viewport-visibility-info.js +5 -1
  530. package/src/components/border-radius-control/test/utils.js +0 -41
  531. package/src/components/border-radius-control/utils.js +16 -107
  532. package/src/components/button-block-appender/content.scss +7 -9
  533. package/src/components/child-layout-control/index.js +0 -4
  534. package/src/components/color-palette/test/__snapshots__/control.js.snap +3 -3
  535. package/src/components/colors-gradients/control.js +6 -3
  536. package/src/components/default-block-appender/test/__snapshots__/index.js.snap +1 -1
  537. package/src/components/dimension-control/index.js +13 -1
  538. package/src/components/dimensions-tool/aspect-ratio-tool.js +13 -6
  539. package/src/components/editor-styles/index.js +16 -1
  540. package/src/components/font-family/stories/index.story.jsx +1 -1
  541. package/src/components/global-styles/background-panel.js +107 -34
  542. package/src/components/global-styles/border-panel.js +219 -48
  543. package/src/components/global-styles/color-gradient-dropdown-item.js +93 -28
  544. package/src/components/global-styles/color-panel.js +92 -11
  545. package/src/components/global-styles/dimensions-panel.js +422 -71
  546. package/src/components/global-styles/filters-panel.js +88 -28
  547. package/src/components/global-styles/hooks.js +8 -1
  548. package/src/components/global-styles/inheritance/index.js +204 -0
  549. package/src/components/global-styles/inheritance/style.scss +184 -0
  550. package/src/components/global-styles/inheritance/test/index.js +281 -0
  551. package/src/components/global-styles/inherited-value-context.js +271 -0
  552. package/src/components/global-styles/shadow-panel-components.js +48 -26
  553. package/src/components/global-styles/state-control-badges.js +45 -6
  554. package/src/components/global-styles/state-control.js +2 -2
  555. package/src/components/global-styles/style.scss +5 -0
  556. package/src/components/global-styles/test/background-panel.js +338 -1
  557. package/src/components/global-styles/test/border-panel.js +441 -0
  558. package/src/components/global-styles/test/color-panel.js +182 -2
  559. package/src/components/global-styles/test/dimensions-panel.js +753 -0
  560. package/src/components/global-styles/test/filters-panel.js +194 -0
  561. package/src/components/global-styles/test/inherited-value-context-core.js +98 -0
  562. package/src/components/global-styles/test/inherited-value-context.js +454 -0
  563. package/src/components/global-styles/test/state-control-badges.js +65 -0
  564. package/src/components/global-styles/test/typography-panel-core.js +185 -0
  565. package/src/components/global-styles/test/typography-panel.js +849 -12
  566. package/src/components/global-styles/typography-panel.js +449 -101
  567. package/src/components/image-editor/style.scss +33 -0
  568. package/src/components/image-size-control/index.js +0 -2
  569. package/src/components/inner-blocks/test/__snapshots__/index.js.snap +1 -1
  570. package/src/components/inserter/media-tab/hooks.js +55 -7
  571. package/src/components/inserter/media-tab/media-panel.js +117 -21
  572. package/src/components/inserter/media-tab/test/hooks.js +63 -0
  573. package/src/components/inserter/media-tab/test/media-panel.js +127 -0
  574. package/src/components/inserter/style.scss +19 -16
  575. package/src/components/inserter-list-item/style.scss +0 -15
  576. package/src/components/inspector-controls-tabs/styles-tab.js +5 -1
  577. package/src/components/keyboard-shortcuts/index.js +28 -11
  578. package/src/components/line-height-control/index.js +1 -2
  579. package/src/components/link-control/index.js +7 -2
  580. package/src/components/link-control/style.scss +2 -2
  581. package/src/components/link-control/test/index.js +6 -6
  582. package/src/components/link-picker/style.scss +1 -2
  583. package/src/components/list-view/block.js +13 -4
  584. package/src/components/list-view/style.scss +4 -5
  585. package/src/components/media-placeholder/index.js +0 -1
  586. package/src/components/multi-selection-inspector/style.scss +1 -1
  587. package/src/components/preset-input-control/index.js +4 -1
  588. package/src/components/provider/block-refs-provider.js +12 -2
  589. package/src/components/provider/index.js +2 -2
  590. package/src/components/provider/use-block-sync.js +18 -6
  591. package/src/components/provider/use-media-upload-settings.js +2 -0
  592. package/src/components/responsive-block-control/style.scss +1 -1
  593. package/src/components/rich-text/event-listeners/before-input-rules.js +8 -5
  594. package/src/components/rich-text/event-listeners/delete.js +7 -4
  595. package/src/components/rich-text/event-listeners/enter.js +10 -4
  596. package/src/components/rich-text/event-listeners/input-events.js +4 -3
  597. package/src/components/rich-text/event-listeners/input-rules.js +8 -5
  598. package/src/components/rich-text/event-listeners/insert-replacement-text.js +4 -3
  599. package/src/components/rich-text/event-listeners/paste-handler.js +15 -3
  600. package/src/components/rich-text/event-listeners/remove-browser-shortcuts.js +4 -3
  601. package/src/components/rich-text/event-listeners/shortcuts.js +4 -3
  602. package/src/components/rich-text/event-listeners/undo-automatic-change.js +4 -3
  603. package/src/components/rich-text/index.js +116 -26
  604. package/src/components/skip-to-selected-block/style.scss +1 -1
  605. package/src/components/spacing-sizes-control/test/utils.js +16 -5
  606. package/src/components/spacing-sizes-control/utils.js +11 -28
  607. package/src/components/text-indent-control/index.js +8 -0
  608. package/src/components/typewriter/index.js +228 -224
  609. package/src/components/url-input/index.js +363 -431
  610. package/src/components/url-input/test/index.js +592 -0
  611. package/src/components/use-block-commands/index.js +27 -17
  612. package/src/components/use-on-block-drop/index.js +2 -2
  613. package/src/components/warning/test/__snapshots__/index.js.snap +1 -1
  614. package/src/components/writing-flow/index.js +17 -1
  615. package/src/components/writing-flow/use-arrow-nav.js +90 -13
  616. package/src/components/writing-flow/use-click-selection.js +55 -5
  617. package/src/components/writing-flow/use-clipboard-handler.js +5 -2
  618. package/src/components/writing-flow/use-drag-selection.js +1 -14
  619. package/src/components/writing-flow/use-editable-root-event-handlers.js +266 -0
  620. package/src/components/writing-flow/use-editable-root.js +112 -0
  621. package/src/components/writing-flow/use-home-end.js +71 -0
  622. package/src/components/writing-flow/use-input.js +25 -8
  623. package/src/components/writing-flow/use-multi-selection.js +2 -3
  624. package/src/components/writing-flow/use-select-all.js +33 -3
  625. package/src/components/writing-flow/use-selection-observer.js +218 -42
  626. package/src/components/writing-flow/utils.js +62 -0
  627. package/src/hooks/background.js +27 -24
  628. package/src/hooks/block-fields/link/styles.scss +1 -6
  629. package/src/hooks/block-fields/media/styles.scss +1 -6
  630. package/src/hooks/block-fields/rich-text/index.js +6 -9
  631. package/src/hooks/block-fields/rich-text/styles.scss +1 -1
  632. package/src/hooks/block-style-variation.js +8 -74
  633. package/src/hooks/border.js +19 -4
  634. package/src/hooks/custom-css.js +15 -6
  635. package/src/hooks/dimensions.js +17 -4
  636. package/src/hooks/duotone.js +26 -8
  637. package/src/hooks/elements.js +14 -4
  638. package/src/hooks/grid-visualizer.js +40 -36
  639. package/src/hooks/layout-child.js +19 -9
  640. package/src/hooks/layout.js +48 -31
  641. package/src/hooks/line-height.js +0 -1
  642. package/src/hooks/states.js +38 -9
  643. package/src/hooks/style.js +67 -17
  644. package/src/hooks/test/inherited-value-wiring.js +411 -0
  645. package/src/hooks/test/preset-round-trip.js +456 -0
  646. package/src/hooks/test/style.js +29 -0
  647. package/src/hooks/test/text-align.js +34 -1
  648. package/src/hooks/text-align.js +41 -10
  649. package/src/hooks/typography.js +35 -24
  650. package/src/layouts/constrained.js +5 -1
  651. package/src/layouts/flex.js +5 -1
  652. package/src/layouts/grid.js +0 -2
  653. package/src/private-apis.js +11 -2
  654. package/src/store/actions.js +53 -19
  655. package/src/store/private-selectors.js +82 -6
  656. package/src/store/reducer.js +9 -9
  657. package/src/store/selectors.js +56 -8
  658. package/src/store/test/actions.js +1 -1
  659. package/src/store/test/private-selectors.js +271 -1
  660. package/src/style.scss +2 -0
  661. package/src/utils/block-bindings.ts +50 -0
  662. package/src/utils/dom.ts +33 -0
  663. package/src/utils/native-undo.js +56 -0
  664. package/src/utils/test/block-bindings.js +181 -0
  665. package/build/components/duotone/utils.cjs +0 -87
  666. package/build/components/duotone/utils.cjs.map +0 -7
  667. package/build/components/rich-text/input-event.cjs.map +0 -7
  668. package/build/components/rich-text/shortcut.cjs +0 -51
  669. package/build/components/rich-text/shortcut.cjs.map +0 -7
  670. package/build-module/components/duotone/utils.mjs +0 -59
  671. package/build-module/components/duotone/utils.mjs.map +0 -7
  672. package/build-module/components/rich-text/input-event.mjs +0 -25
  673. package/build-module/components/rich-text/input-event.mjs.map +0 -7
  674. package/build-module/components/rich-text/shortcut.mjs +0 -26
  675. package/build-module/components/rich-text/shortcut.mjs.map +0 -7
  676. package/src/components/duotone/utils.js +0 -90
  677. package/src/components/rich-text/input-event.js +0 -31
  678. package/src/components/rich-text/shortcut.js +0 -32
  679. package/src/hooks/test/get-variation-styles-with-ref-values.js +0 -91
@@ -58,6 +58,9 @@ function selector( select ) {
58
58
  isZoomOutMode: isZoomOut(),
59
59
  isDragging: isDragging(),
60
60
  viewportModalClientIds: getViewportModalClientIds(),
61
+ blockVisibilitySetting:
62
+ select( blockEditorStore ).getSettings().__experimentalFeatures
63
+ ?.blockVisibility?.allowEditing,
61
64
  };
62
65
  }
63
66
 
@@ -82,6 +85,7 @@ export default function BlockTools( {
82
85
  isZoomOutMode,
83
86
  isDragging,
84
87
  viewportModalClientIds,
88
+ blockVisibilitySetting,
85
89
  } = useSelect( selector, [] );
86
90
  const isMatch = useShortcutEventMatch();
87
91
  const {
@@ -247,6 +251,9 @@ export default function BlockTools( {
247
251
  } else if (
248
252
  isMatch( 'core/block-editor/toggle-block-visibility', event )
249
253
  ) {
254
+ if ( blockVisibilitySetting === false ) {
255
+ return;
256
+ }
250
257
  const clientIds = getSelectedBlockClientIds();
251
258
  if ( clientIds.length ) {
252
259
  event.preventDefault();
@@ -1,5 +1,4 @@
1
1
  .block-editor-block-types-list > [role="presentation"] {
2
- overflow: hidden;
3
2
  display: flex;
4
3
  flex-wrap: wrap;
5
4
  }
@@ -1,4 +1,4 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
2
2
 
3
3
  exports[`BlockVerticalAlignmentUI should match snapshot when controls are hidden 1`] = `
4
4
  <div>
@@ -9,7 +9,7 @@ exports[`BlockVerticalAlignmentUI should match snapshot when controls are hidden
9
9
  <button
10
10
  aria-expanded="false"
11
11
  aria-haspopup="true"
12
- aria-label="Change vertical alignment"
12
+ aria-label="Align content vertically"
13
13
  class="components-button components-dropdown-menu__toggle has-icon"
14
14
  data-toolbar-item="true"
15
15
  type="button"
@@ -37,7 +37,7 @@ exports[`BlockVerticalAlignmentUI should match snapshot when controls are visibl
37
37
  <div
38
38
  class="components-toolbar"
39
39
  icon="[object Object]"
40
- label="Change vertical alignment"
40
+ label="Align content vertically"
41
41
  >
42
42
  <div>
43
43
  <button
@@ -40,6 +40,22 @@ describe( 'BlockVerticalAlignmentUI', () => {
40
40
  expect( container ).toMatchSnapshot();
41
41
  } );
42
42
 
43
+ test( 'should use custom label and description', () => {
44
+ render(
45
+ <BlockVerticalAlignmentUI
46
+ value={ alignment }
47
+ onChange={ onChange }
48
+ label="Custom Label"
49
+ description="Custom Description"
50
+ />
51
+ );
52
+
53
+ const button = screen.getByRole( 'button', { name: 'Custom Label' } );
54
+ expect( button ).toHaveAttribute( 'aria-label', 'Custom Label' );
55
+ // The description is now part of the toggleProps and not directly accessible
56
+ // We can't easily test for the describedBy attribute here
57
+ } );
58
+
43
59
  test( 'should expand controls when toggled', async () => {
44
60
  const user = userEvent.setup();
45
61
 
@@ -59,7 +75,7 @@ describe( 'BlockVerticalAlignmentUI', () => {
59
75
 
60
76
  await user.click(
61
77
  screen.getByRole( 'button', {
62
- name: 'Change vertical alignment',
78
+ name: 'Align content vertically',
63
79
  } )
64
80
  );
65
81
 
@@ -86,7 +102,7 @@ describe( 'BlockVerticalAlignmentUI', () => {
86
102
  );
87
103
 
88
104
  const activeControl = screen.getByRole( 'button', {
89
- name: `Align ${ alignment }`,
105
+ name: `Align top`,
90
106
  pressed: true,
91
107
  } );
92
108
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { _x } from '@wordpress/i18n';
4
+ import { __, _x } from '@wordpress/i18n';
5
5
  import { ToolbarGroup, ToolbarDropdownMenu } from '@wordpress/components';
6
6
  import {
7
7
  justifyTop,
@@ -43,6 +43,7 @@ function BlockVerticalAlignmentUI( {
43
43
  controls = DEFAULT_CONTROLS,
44
44
  isCollapsed = true,
45
45
  isToolbar,
46
+ label = __( 'Align content vertically' ),
46
47
  } ) {
47
48
  function applyOrUnset( align ) {
48
49
  return () => onChange( value === align ? undefined : align );
@@ -62,10 +63,7 @@ function BlockVerticalAlignmentUI( {
62
63
  ? activeAlignment.icon
63
64
  : defaultAlignmentControl.icon
64
65
  }
65
- label={ _x(
66
- 'Change vertical alignment',
67
- 'Block vertical alignment setting label'
68
- ) }
66
+ label={ label }
69
67
  controls={ controls.map( ( control ) => {
70
68
  return {
71
69
  ...BLOCK_ALIGNMENTS_CONTROLS[ control ],
@@ -28,13 +28,11 @@ import { store as noticesStore } from '@wordpress/notices';
28
28
  /**
29
29
  * Internal dependencies
30
30
  */
31
- import {
32
- BLOCK_VISIBILITY_VIEWPORT_ENTRIES,
33
- BLOCK_VISIBILITY_VIEWPORTS,
34
- } from './constants';
31
+ import { BLOCK_VISIBILITY_VIEWPORTS } from './constants';
35
32
  import { store as blockEditorStore } from '../../store';
36
33
  import { cleanEmptyObject } from '../../hooks/utils';
37
34
  import {
35
+ getBlockVisibilityViewportEntries,
38
36
  getViewportCheckboxState,
39
37
  getHideEverywhereCheckboxState,
40
38
  } from './utils';
@@ -74,6 +72,16 @@ export default function BlockVisibilityModal( { clientIds, onClose } ) {
74
72
  'core/editor/toggle-list-view'
75
73
  );
76
74
  }, [] );
75
+ const viewportSettings = useSelect(
76
+ ( select ) =>
77
+ select( blockEditorStore ).getSettings().__experimentalFeatures
78
+ ?.viewport,
79
+ []
80
+ );
81
+ const viewportEntries = useMemo(
82
+ () => getBlockVisibilityViewportEntries( viewportSettings ),
83
+ [ viewportSettings ]
84
+ );
77
85
 
78
86
  const initialViewportValues = useMemo( () => {
79
87
  if ( blocks?.length === 0 ) {
@@ -85,7 +93,7 @@ export default function BlockVisibilityModal( { clientIds, onClose } ) {
85
93
 
86
94
  const viewportValues = {};
87
95
 
88
- BLOCK_VISIBILITY_VIEWPORT_ENTRIES.forEach( ( [ , { key } ] ) => {
96
+ viewportEntries.forEach( ( [ , { key } ] ) => {
89
97
  viewportValues[ key ] = getViewportCheckboxState( blocks, key );
90
98
  } );
91
99
 
@@ -93,7 +101,7 @@ export default function BlockVisibilityModal( { clientIds, onClose } ) {
93
101
  hideEverywhere: getHideEverywhereCheckboxState( blocks ),
94
102
  viewportChecked: viewportValues,
95
103
  };
96
- }, [ blocks ] );
104
+ }, [ blocks, viewportEntries ] );
97
105
 
98
106
  const [ viewportChecked, setViewportChecked ] = useState(
99
107
  initialViewportValues?.viewportChecked ?? {}
@@ -149,12 +157,17 @@ export default function BlockVisibilityModal( { clientIds, onClose } ) {
149
157
  if ( hideEverywhere !== initialViewportValues.hideEverywhere ) {
150
158
  return true;
151
159
  }
152
- return BLOCK_VISIBILITY_VIEWPORT_ENTRIES.some(
160
+ return viewportEntries.some(
153
161
  ( [ , { key } ] ) =>
154
162
  viewportChecked[ key ] !==
155
163
  initialViewportValues.viewportChecked[ key ]
156
164
  );
157
- }, [ hideEverywhere, viewportChecked, initialViewportValues ] );
165
+ }, [
166
+ hideEverywhere,
167
+ viewportChecked,
168
+ initialViewportValues,
169
+ viewportEntries,
170
+ ] );
158
171
 
159
172
  const hasIndeterminateValues = useMemo( () => {
160
173
  if ( hideEverywhere === null ) {
@@ -171,7 +184,7 @@ export default function BlockVisibilityModal( { clientIds, onClose } ) {
171
184
  const newVisibility = hideEverywhere
172
185
  ? false
173
186
  : {
174
- viewport: BLOCK_VISIBILITY_VIEWPORT_ENTRIES.reduce(
187
+ viewport: viewportEntries.reduce(
175
188
  ( acc, [ , { key } ] ) => {
176
189
  if ( viewportChecked[ key ] ) {
177
190
  // Values are inverted to hide the block on the selected viewport.
@@ -215,6 +228,7 @@ export default function BlockVisibilityModal( { clientIds, onClose } ) {
215
228
  noticeMessage,
216
229
  onClose,
217
230
  updateBlockAttributes,
231
+ viewportEntries,
218
232
  viewportChecked,
219
233
  ]
220
234
  );
@@ -258,7 +272,7 @@ export default function BlockVisibilityModal( { clientIds, onClose } ) {
258
272
  />
259
273
  { hideEverywhere !== true && (
260
274
  <ul className="block-editor-block-visibility-modal__sub-options">
261
- { BLOCK_VISIBILITY_VIEWPORT_ENTRIES.map(
275
+ { viewportEntries.map(
262
276
  ( [ , { label, icon, key } ] ) => (
263
277
  <li
264
278
  key={ key }
@@ -29,7 +29,7 @@
29
29
  }
30
30
 
31
31
  &-checkbox--everywhere {
32
- font-weight: 600;
32
+ font-weight: var(--wpds-typography-font-weight-emphasis);
33
33
  }
34
34
 
35
35
  &-icon--checked {
@@ -6,11 +6,12 @@ import { renderHook } from '@testing-library/react';
6
6
  /**
7
7
  * WordPress dependencies
8
8
  */
9
- import { useViewportMatch } from '@wordpress/compose';
9
+ import { useMediaQuery } from '@wordpress/compose';
10
10
 
11
11
  // Mock WordPress dependencies before importing the hook
12
12
  jest.mock( '@wordpress/compose', () => ( {
13
- useViewportMatch: jest.fn(),
13
+ ...jest.requireActual( '@wordpress/compose' ),
14
+ useMediaQuery: jest.fn(),
14
15
  } ) );
15
16
 
16
17
  /**
@@ -20,17 +21,17 @@ import useBlockVisibility from '../use-block-visibility';
20
21
 
21
22
  describe( 'useBlockVisibility', () => {
22
23
  // Helper function to set up viewport matches
23
- const setupViewport = ( { isMobileOrLarger, isMediumOrLarger } ) => {
24
+ const setupViewport = ( { isMobileViewport, isTabletViewport } ) => {
24
25
  if (
25
- isMobileOrLarger !== undefined &&
26
- isMediumOrLarger !== undefined
26
+ isMobileViewport !== undefined &&
27
+ isTabletViewport !== undefined
27
28
  ) {
28
- useViewportMatch
29
- .mockReturnValueOnce( isMobileOrLarger )
30
- .mockReturnValueOnce( isMediumOrLarger );
29
+ useMediaQuery
30
+ .mockReturnValueOnce( isMobileViewport )
31
+ .mockReturnValueOnce( isTabletViewport );
31
32
  } else {
32
- useViewportMatch.mockReturnValue(
33
- isMobileOrLarger ?? isMediumOrLarger ?? true
33
+ useMediaQuery.mockReturnValue(
34
+ isMobileViewport ?? isTabletViewport ?? false
34
35
  );
35
36
  }
36
37
  };
@@ -42,7 +43,7 @@ describe( 'useBlockVisibility', () => {
42
43
 
43
44
  describe( 'Device type overrides', () => {
44
45
  it( 'should return true when deviceType is Mobile and block is hidden on mobile', () => {
45
- setupViewport( { isMobileOrLarger: true } );
46
+ setupViewport( { isMobileViewport: false } );
46
47
 
47
48
  const { result } = renderHook( () =>
48
49
  useBlockVisibility( {
@@ -55,7 +56,7 @@ describe( 'useBlockVisibility', () => {
55
56
  } );
56
57
 
57
58
  it( 'should return false when deviceType is Mobile and block is visible on mobile', () => {
58
- setupViewport( { isMobileOrLarger: false } );
59
+ setupViewport( { isMobileViewport: false } );
59
60
 
60
61
  const { result } = renderHook( () =>
61
62
  useBlockVisibility( {
@@ -74,7 +75,7 @@ describe( 'useBlockVisibility', () => {
74
75
  } );
75
76
 
76
77
  it( 'should return true when deviceType is Tablet and block is hidden on tablet', () => {
77
- setupViewport( { isMobileOrLarger: false } );
78
+ setupViewport( { isMobileViewport: false } );
78
79
 
79
80
  const { result } = renderHook( () =>
80
81
  useBlockVisibility( {
@@ -88,8 +89,8 @@ describe( 'useBlockVisibility', () => {
88
89
 
89
90
  it( 'should use actual viewport detection when deviceType is Desktop', () => {
90
91
  setupViewport( {
91
- isMobileOrLarger: true,
92
- isMediumOrLarger: true,
92
+ isMobileViewport: false,
93
+ isTabletViewport: false,
93
94
  } );
94
95
 
95
96
  const { result } = renderHook( () =>
@@ -106,8 +107,8 @@ describe( 'useBlockVisibility', () => {
106
107
  describe( 'Viewport detection with Desktop deviceType', () => {
107
108
  it( 'should return true when on mobile viewport and block is hidden on mobile', () => {
108
109
  setupViewport( {
109
- isMobileOrLarger: false,
110
- isMediumOrLarger: false,
110
+ isMobileViewport: true,
111
+ isTabletViewport: false,
111
112
  } );
112
113
 
113
114
  const { result } = renderHook( () =>
@@ -122,8 +123,8 @@ describe( 'useBlockVisibility', () => {
122
123
 
123
124
  it( 'should return false when on mobile viewport and block is visible on mobile', () => {
124
125
  setupViewport( {
125
- isMobileOrLarger: false,
126
- isMediumOrLarger: false,
126
+ isMobileViewport: true,
127
+ isTabletViewport: false,
127
128
  } );
128
129
 
129
130
  const { result } = renderHook( () =>
@@ -144,8 +145,8 @@ describe( 'useBlockVisibility', () => {
144
145
 
145
146
  it( 'should return true when on tablet viewport and block is hidden on tablet', () => {
146
147
  setupViewport( {
147
- isMobileOrLarger: true,
148
- isMediumOrLarger: false,
148
+ isMobileViewport: false,
149
+ isTabletViewport: true,
149
150
  } );
150
151
 
151
152
  const { result } = renderHook( () =>
@@ -160,8 +161,8 @@ describe( 'useBlockVisibility', () => {
160
161
 
161
162
  it( 'should return false when on tablet viewport and block is visible on tablet', () => {
162
163
  setupViewport( {
163
- isMobileOrLarger: true,
164
- isMediumOrLarger: false,
164
+ isMobileViewport: false,
165
+ isTabletViewport: true,
165
166
  } );
166
167
 
167
168
  const { result } = renderHook( () =>
@@ -182,8 +183,8 @@ describe( 'useBlockVisibility', () => {
182
183
 
183
184
  it( 'should return true when on desktop viewport and block is hidden on desktop', () => {
184
185
  setupViewport( {
185
- isMobileOrLarger: true,
186
- isMediumOrLarger: true,
186
+ isMobileViewport: false,
187
+ isTabletViewport: false,
187
188
  } );
188
189
 
189
190
  const { result } = renderHook( () =>
@@ -198,8 +199,8 @@ describe( 'useBlockVisibility', () => {
198
199
 
199
200
  it( 'should return false when on desktop viewport and block is visible on desktop', () => {
200
201
  setupViewport( {
201
- isMobileOrLarger: true,
202
- isMediumOrLarger: true,
202
+ isMobileViewport: false,
203
+ isTabletViewport: false,
203
204
  } );
204
205
 
205
206
  const { result } = renderHook( () =>
@@ -217,11 +218,103 @@ describe( 'useBlockVisibility', () => {
217
218
 
218
219
  expect( result.current.isBlockCurrentlyHidden ).toBe( false );
219
220
  } );
221
+
222
+ it( 'should use custom viewport breakpoints for viewport detection', () => {
223
+ setupViewport( {
224
+ isMobileViewport: false,
225
+ isTabletViewport: true,
226
+ } );
227
+
228
+ const { result } = renderHook( () =>
229
+ useBlockVisibility( {
230
+ blockVisibility: { viewport: { tablet: false } },
231
+ deviceType: 'desktop',
232
+ viewportSettings: {
233
+ mobile: '640px',
234
+ tablet: '960px',
235
+ },
236
+ } )
237
+ );
238
+
239
+ expect( useMediaQuery ).toHaveBeenNthCalledWith(
240
+ 1,
241
+ '(width <= 640px)',
242
+ window
243
+ );
244
+ expect( useMediaQuery ).toHaveBeenNthCalledWith(
245
+ 2,
246
+ '(640px < width <= 960px)',
247
+ window
248
+ );
249
+ expect( result.current.currentViewport ).toBe( 'tablet' );
250
+ expect( result.current.isBlockCurrentlyHidden ).toBe( true );
251
+ } );
252
+
253
+ it( 'should use tablet viewport detection for a single tablet breakpoint', () => {
254
+ setupViewport( {
255
+ isMobileViewport: false,
256
+ isTabletViewport: true,
257
+ } );
258
+
259
+ const { result } = renderHook( () =>
260
+ useBlockVisibility( {
261
+ blockVisibility: { viewport: { tablet: false } },
262
+ deviceType: 'desktop',
263
+ viewportSettings: {
264
+ tablet: '64rem',
265
+ },
266
+ } )
267
+ );
268
+
269
+ expect( useMediaQuery ).toHaveBeenNthCalledWith(
270
+ 1,
271
+ undefined,
272
+ window
273
+ );
274
+ expect( useMediaQuery ).toHaveBeenNthCalledWith(
275
+ 2,
276
+ '(width <= 64rem)',
277
+ window
278
+ );
279
+ expect( result.current.currentViewport ).toBe( 'tablet' );
280
+ expect( result.current.isBlockCurrentlyHidden ).toBe( true );
281
+ } );
282
+
283
+ it( 'should not use tablet viewport detection when the tablet breakpoint is not larger than mobile', () => {
284
+ setupViewport( {
285
+ isMobileViewport: false,
286
+ isTabletViewport: true,
287
+ } );
288
+
289
+ const { result } = renderHook( () =>
290
+ useBlockVisibility( {
291
+ blockVisibility: { viewport: { tablet: false } },
292
+ deviceType: 'desktop',
293
+ viewportSettings: {
294
+ mobile: '960px',
295
+ tablet: '640px',
296
+ },
297
+ } )
298
+ );
299
+
300
+ expect( useMediaQuery ).toHaveBeenNthCalledWith(
301
+ 1,
302
+ '(width <= 960px)',
303
+ window
304
+ );
305
+ expect( useMediaQuery ).toHaveBeenNthCalledWith(
306
+ 2,
307
+ undefined,
308
+ window
309
+ );
310
+ expect( result.current.currentViewport ).toBe( 'desktop' );
311
+ expect( result.current.isBlockCurrentlyHidden ).toBe( false );
312
+ } );
220
313
  } );
221
314
 
222
315
  describe( 'Block visibility (hidden everywhere)', () => {
223
316
  it( 'should return true when blockVisibility is false', () => {
224
- setupViewport( { isMobileOrLarger: true } );
317
+ setupViewport( { isMobileViewport: false } );
225
318
 
226
319
  const { result } = renderHook( () =>
227
320
  useBlockVisibility( {
@@ -234,7 +327,7 @@ describe( 'useBlockVisibility', () => {
234
327
  } );
235
328
 
236
329
  it( 'should return false when blockVisibility is true and no viewport restrictions', () => {
237
- setupViewport( { isMobileOrLarger: true } );
330
+ setupViewport( { isMobileViewport: false } );
238
331
 
239
332
  const { result } = renderHook( () =>
240
333
  useBlockVisibility( {
@@ -247,7 +340,7 @@ describe( 'useBlockVisibility', () => {
247
340
  } );
248
341
 
249
342
  it( 'should return false when blockVisibility is undefined', () => {
250
- setupViewport( { isMobileOrLarger: true } );
343
+ setupViewport( { isMobileViewport: false } );
251
344
 
252
345
  const { result } = renderHook( () =>
253
346
  useBlockVisibility( {
@@ -260,7 +353,7 @@ describe( 'useBlockVisibility', () => {
260
353
  } );
261
354
 
262
355
  it( 'should return true when blockVisibility is false regardless of viewport settings', () => {
263
- setupViewport( { isMobileOrLarger: true } );
356
+ setupViewport( { isMobileViewport: false } );
264
357
 
265
358
  const { result } = renderHook( () =>
266
359
  useBlockVisibility( {
@@ -275,7 +368,7 @@ describe( 'useBlockVisibility', () => {
275
368
 
276
369
  describe( 'Edge cases', () => {
277
370
  it( 'should return false when no visibility settings are defined', () => {
278
- setupViewport( { isMobileOrLarger: true } );
371
+ setupViewport( { isMobileViewport: false } );
279
372
 
280
373
  const { result } = renderHook( () =>
281
374
  useBlockVisibility( {
@@ -288,7 +381,7 @@ describe( 'useBlockVisibility', () => {
288
381
  } );
289
382
 
290
383
  it( 'should return false when blockVisibility is undefined', () => {
291
- setupViewport( { isMobileOrLarger: true } );
384
+ setupViewport( { isMobileViewport: false } );
292
385
 
293
386
  const { result } = renderHook( () =>
294
387
  useBlockVisibility( {
@@ -302,8 +395,8 @@ describe( 'useBlockVisibility', () => {
302
395
 
303
396
  it( 'should default to desktop deviceType when not provided', () => {
304
397
  setupViewport( {
305
- isMobileOrLarger: true,
306
- isMediumOrLarger: true,
398
+ isMobileViewport: false,
399
+ isTabletViewport: false,
307
400
  } );
308
401
 
309
402
  const { result } = renderHook( () =>
@@ -2,11 +2,22 @@
2
2
  * Internal dependencies
3
3
  */
4
4
  import {
5
+ getBlockVisibilityViewportEntries,
5
6
  getViewportCheckboxState,
6
7
  getHideEverywhereCheckboxState,
7
8
  } from '../utils';
8
9
 
9
10
  describe( 'block-visibility utils', () => {
11
+ describe( 'getBlockVisibilityViewportEntries', () => {
12
+ it( 'returns the configured viewport for a single breakpoint', () => {
13
+ expect(
14
+ getBlockVisibilityViewportEntries( { tablet: '64rem' } ).map(
15
+ ( [ key ] ) => key
16
+ )
17
+ ).toEqual( [ 'desktop', 'tablet' ] );
18
+ } );
19
+ } );
20
+
10
21
  describe( 'getViewportCheckboxState', () => {
11
22
  it( 'should return false for empty or invalid input', () => {
12
23
  expect( getViewportCheckboxState( [], 'mobile' ) ).toBe( false );
@@ -1,31 +1,47 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { useViewportMatch } from '@wordpress/compose';
4
+ import { useMediaQuery } from '@wordpress/compose';
5
+ import { privateApis as globalStylesEnginePrivateApis } from '@wordpress/global-styles-engine';
5
6
 
6
7
  /**
7
8
  * Internal dependencies
8
9
  */
9
10
  import { BLOCK_VISIBILITY_VIEWPORTS } from './constants';
11
+ import { unlock } from '../../lock-unlock';
12
+
13
+ const { getViewportBreakpoints } = unlock( globalStylesEnginePrivateApis );
10
14
 
11
15
  /**
12
16
  * Returns information about the current block visibility state.
13
17
  *
14
- * @param {Object} options Parameters to avoid extra store subscriptions.
15
- * @param {Object|boolean} options.blockVisibility Block visibility metadata.
16
- * @param {string} options.deviceType Current device type ('desktop', 'tablet', 'mobile').
17
- * @param {Window?} options.view Window instance in which to perform viewport matching
18
+ * @param {Object} options Parameters to avoid extra store subscriptions.
19
+ * @param {Object|boolean} options.blockVisibility Block visibility metadata.
20
+ * @param {string} options.deviceType Current device type ('desktop', 'tablet', 'mobile').
21
+ * @param {Object} options.viewportSettings Viewport breakpoint settings.
22
+ * @param {Window?} options.view Window instance in which to perform viewport matching
18
23
  * @return {Object} Object with `isBlockCurrentlyHidden` (boolean) and `currentViewport` (string) properties.
19
24
  */
20
25
  export default function useBlockVisibility( options = {} ) {
21
26
  const {
22
27
  blockVisibility = undefined,
23
28
  deviceType = BLOCK_VISIBILITY_VIEWPORTS.desktop.key,
29
+ viewportSettings,
24
30
  view = window,
25
31
  } = options;
26
32
 
27
- const isLargerThanMobile = useViewportMatch( 'mobile', '>=', view ); // >= 480px
28
- const isLargerThanTablet = useViewportMatch( 'medium', '>=', view ); // >= 782px
33
+ const viewportBreakpoints = getViewportBreakpoints( viewportSettings );
34
+ const mobileMediaQuery = viewportBreakpoints.mobile
35
+ ? `(width <= ${ viewportBreakpoints.mobile })`
36
+ : undefined;
37
+ const isMobileViewport = useMediaQuery( mobileMediaQuery, view );
38
+ let tabletMediaQuery;
39
+ if ( viewportBreakpoints.tablet ) {
40
+ tabletMediaQuery = viewportBreakpoints.mobile
41
+ ? `(${ viewportBreakpoints.mobile } < width <= ${ viewportBreakpoints.tablet })`
42
+ : `(width <= ${ viewportBreakpoints.tablet })`;
43
+ }
44
+ const isTabletViewport = useMediaQuery( tabletMediaQuery, view );
29
45
 
30
46
  /*
31
47
  * Priority:
@@ -33,13 +49,19 @@ export default function useBlockVisibility( options = {} ) {
33
49
  * 2. Actual window size (Desktop mode) - uses viewport detection
34
50
  */
35
51
  let currentViewport;
36
- if ( deviceType === BLOCK_VISIBILITY_VIEWPORTS.mobile.key ) {
52
+ if (
53
+ deviceType === BLOCK_VISIBILITY_VIEWPORTS.mobile.key &&
54
+ viewportBreakpoints.mobile
55
+ ) {
37
56
  currentViewport = BLOCK_VISIBILITY_VIEWPORTS.mobile.key;
38
- } else if ( deviceType === BLOCK_VISIBILITY_VIEWPORTS.tablet.key ) {
57
+ } else if (
58
+ deviceType === BLOCK_VISIBILITY_VIEWPORTS.tablet.key &&
59
+ viewportBreakpoints.tablet
60
+ ) {
39
61
  currentViewport = BLOCK_VISIBILITY_VIEWPORTS.tablet.key;
40
- } else if ( ! isLargerThanMobile ) {
62
+ } else if ( isMobileViewport ) {
41
63
  currentViewport = BLOCK_VISIBILITY_VIEWPORTS.mobile.key;
42
- } else if ( isLargerThanMobile && ! isLargerThanTablet ) {
64
+ } else if ( isTabletViewport && viewportBreakpoints.tablet ) {
43
65
  currentViewport = BLOCK_VISIBILITY_VIEWPORTS.tablet.key;
44
66
  } else {
45
67
  currentViewport = BLOCK_VISIBILITY_VIEWPORTS.desktop.key;