@wordpress/block-editor 15.22.1-next.v.202606191442.0 → 15.23.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 (383) hide show
  1. package/CHANGELOG.md +3 -1
  2. package/README.md +2 -2
  3. package/build/components/block-editing-mode/index.cjs +13 -7
  4. package/build/components/block-editing-mode/index.cjs.map +2 -2
  5. package/build/components/block-inspector/index.cjs +50 -51
  6. package/build/components/block-inspector/index.cjs.map +2 -2
  7. package/build/components/block-rename/modal.cjs +0 -1
  8. package/build/components/block-rename/modal.cjs.map +2 -2
  9. package/build/components/block-toolbar/block-toolbar-icon.cjs +14 -6
  10. package/build/components/block-toolbar/block-toolbar-icon.cjs.map +2 -2
  11. package/build/components/colors-gradients/control.cjs +25 -14
  12. package/build/components/colors-gradients/control.cjs.map +2 -2
  13. package/build/components/colors-gradients/dropdown.cjs +4 -1
  14. package/build/components/colors-gradients/dropdown.cjs.map +3 -3
  15. package/build/components/contrast-checker/index.cjs +22 -4
  16. package/build/components/contrast-checker/index.cjs.map +2 -2
  17. package/build/components/date-format-picker/index.cjs +0 -1
  18. package/build/components/date-format-picker/index.cjs.map +2 -2
  19. package/build/components/global-styles/background-panel.cjs +153 -25
  20. package/build/components/global-styles/background-panel.cjs.map +3 -3
  21. package/build/components/global-styles/color-gradient-dropdown-item.cjs +227 -0
  22. package/build/components/global-styles/color-gradient-dropdown-item.cjs.map +7 -0
  23. package/build/components/global-styles/color-panel.cjs +98 -375
  24. package/build/components/global-styles/color-panel.cjs.map +3 -3
  25. package/build/components/global-styles/dimensions-panel.cjs +0 -3
  26. package/build/components/global-styles/dimensions-panel.cjs.map +2 -2
  27. package/build/components/global-styles/hooks.cjs +34 -0
  28. package/build/components/global-styles/hooks.cjs.map +2 -2
  29. package/build/components/global-styles/typography-panel.cjs +82 -10
  30. package/build/components/global-styles/typography-panel.cjs.map +3 -3
  31. package/build/components/inspector-controls/groups.cjs +2 -0
  32. package/build/components/inspector-controls/groups.cjs.map +2 -2
  33. package/build/components/inspector-controls-tabs/styles-tab.cjs +75 -31
  34. package/build/components/inspector-controls-tabs/styles-tab.cjs.map +2 -2
  35. package/build/components/link-control/index.cjs +1 -2
  36. package/build/components/link-control/index.cjs.map +2 -2
  37. package/build/components/list-view/block-select-button.cjs +1 -10
  38. package/build/components/list-view/block-select-button.cjs.map +3 -3
  39. package/build/components/provider/use-block-sync.cjs +3 -1
  40. package/build/components/provider/use-block-sync.cjs.map +2 -2
  41. package/build/components/url-popover/image-url-input-ui.cjs +0 -2
  42. package/build/components/url-popover/image-url-input-ui.cjs.map +2 -2
  43. package/build/components/use-block-display-information/index.cjs +10 -3
  44. package/build/components/use-block-display-information/index.cjs.map +2 -2
  45. package/build/components/use-resize-canvas/index.cjs +16 -53
  46. package/build/components/use-resize-canvas/index.cjs.map +3 -3
  47. package/build/hooks/anchor.cjs +0 -1
  48. package/build/hooks/anchor.cjs.map +2 -2
  49. package/build/hooks/background.cjs +124 -75
  50. package/build/hooks/background.cjs.map +3 -3
  51. package/build/hooks/color.cjs +0 -162
  52. package/build/hooks/color.cjs.map +3 -3
  53. package/build/hooks/contrast-checker.cjs +31 -28
  54. package/build/hooks/contrast-checker.cjs.map +3 -3
  55. package/build/hooks/custom-class-name.cjs +0 -1
  56. package/build/hooks/custom-class-name.cjs.map +2 -2
  57. package/build/hooks/elements.cjs +142 -0
  58. package/build/hooks/elements.cjs.map +7 -0
  59. package/build/hooks/grid-visualizer.cjs +21 -11
  60. package/build/hooks/grid-visualizer.cjs.map +2 -2
  61. package/build/hooks/layout-child.cjs +38 -8
  62. package/build/hooks/layout-child.cjs.map +2 -2
  63. package/build/hooks/layout.cjs +6 -3
  64. package/build/hooks/layout.cjs.map +2 -2
  65. package/build/hooks/states.cjs +15 -23
  66. package/build/hooks/states.cjs.map +2 -2
  67. package/build/hooks/style.cjs +8 -4
  68. package/build/hooks/style.cjs.map +2 -2
  69. package/build/hooks/typography.cjs +62 -10
  70. package/build/hooks/typography.cjs.map +3 -3
  71. package/build/layouts/flex.cjs +99 -6
  72. package/build/layouts/flex.cjs.map +2 -2
  73. package/build/private-apis.cjs +0 -1
  74. package/build/private-apis.cjs.map +2 -2
  75. package/build/store/private-actions.cjs +16 -0
  76. package/build/store/private-actions.cjs.map +2 -2
  77. package/build/store/private-keys.cjs +0 -3
  78. package/build/store/private-keys.cjs.map +2 -2
  79. package/build/store/private-selectors.cjs +24 -6
  80. package/build/store/private-selectors.cjs.map +2 -2
  81. package/build/store/reducer.cjs +19 -3
  82. package/build/store/reducer.cjs.map +2 -2
  83. package/build/utils/block-bindings.cjs +9 -9
  84. package/build/utils/block-bindings.cjs.map +3 -3
  85. package/build/utils/color-values.cjs +10 -1
  86. package/build/utils/color-values.cjs.map +3 -3
  87. package/build/utils/dom.cjs +2 -5
  88. package/build/utils/dom.cjs.map +3 -3
  89. package/build/utils/fit-text-frontend.cjs +6 -2
  90. package/build/utils/fit-text-frontend.cjs.map +3 -3
  91. package/build/utils/fit-text-utils.cjs +1 -1
  92. package/build/utils/fit-text-utils.cjs.map +3 -3
  93. package/build/utils/format-font-style.cjs +1 -1
  94. package/build/utils/format-font-style.cjs.map +3 -3
  95. package/build/utils/format-font-weight.cjs +1 -1
  96. package/build/utils/format-font-weight.cjs.map +3 -3
  97. package/build/utils/get-editor-region.cjs +4 -2
  98. package/build/utils/get-editor-region.cjs.map +3 -3
  99. package/build/utils/get-font-styles-and-weights.cjs +8 -12
  100. package/build/utils/get-font-styles-and-weights.cjs.map +3 -3
  101. package/build/utils/get-px-from-css-unit.cjs +1 -1
  102. package/build/utils/get-px-from-css-unit.cjs.map +1 -1
  103. package/build/utils/index.cjs +1 -1
  104. package/build/utils/index.cjs.map +1 -1
  105. package/build/utils/math.cjs +1 -1
  106. package/build/utils/math.cjs.map +3 -3
  107. package/build/utils/object.cjs +8 -8
  108. package/build/utils/object.cjs.map +3 -3
  109. package/build/utils/order-inserter-block-items.cjs +1 -1
  110. package/build/utils/order-inserter-block-items.cjs.map +3 -3
  111. package/build/utils/pasting.cjs +4 -2
  112. package/build/utils/pasting.cjs.map +3 -3
  113. package/build/utils/selection.cjs +2 -1
  114. package/build/utils/selection.cjs.map +3 -3
  115. package/build/utils/sorting.cjs +9 -3
  116. package/build/utils/sorting.cjs.map +3 -3
  117. package/build/utils/transform-styles/index.cjs +3 -2
  118. package/build/utils/transform-styles/index.cjs.map +3 -3
  119. package/build/utils/transform-styles/postcss-urlrebase.d.cjs +2 -0
  120. package/build/utils/transform-styles/postcss-urlrebase.d.cjs.map +7 -0
  121. package/build/utils/transform-styles/types.cjs +19 -0
  122. package/build/utils/transform-styles/types.cjs.map +7 -0
  123. package/build/utils/types.cjs +19 -0
  124. package/build/utils/types.cjs.map +7 -0
  125. package/build-module/components/block-editing-mode/index.mjs +14 -8
  126. package/build-module/components/block-editing-mode/index.mjs.map +2 -2
  127. package/build-module/components/block-inspector/index.mjs +50 -51
  128. package/build-module/components/block-inspector/index.mjs.map +2 -2
  129. package/build-module/components/block-rename/modal.mjs +0 -1
  130. package/build-module/components/block-rename/modal.mjs.map +2 -2
  131. package/build-module/components/block-toolbar/block-toolbar-icon.mjs +14 -6
  132. package/build-module/components/block-toolbar/block-toolbar-icon.mjs.map +2 -2
  133. package/build-module/components/colors-gradients/control.mjs +27 -15
  134. package/build-module/components/colors-gradients/control.mjs.map +2 -2
  135. package/build-module/components/colors-gradients/dropdown.mjs +4 -1
  136. package/build-module/components/colors-gradients/dropdown.mjs.map +2 -2
  137. package/build-module/components/contrast-checker/index.mjs +18 -4
  138. package/build-module/components/contrast-checker/index.mjs.map +2 -2
  139. package/build-module/components/date-format-picker/index.mjs +0 -1
  140. package/build-module/components/date-format-picker/index.mjs.map +2 -2
  141. package/build-module/components/global-styles/background-panel.mjs +155 -27
  142. package/build-module/components/global-styles/background-panel.mjs.map +2 -2
  143. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs +207 -0
  144. package/build-module/components/global-styles/color-gradient-dropdown-item.mjs.map +7 -0
  145. package/build-module/components/global-styles/color-panel.mjs +106 -387
  146. package/build-module/components/global-styles/color-panel.mjs.map +3 -3
  147. package/build-module/components/global-styles/dimensions-panel.mjs +0 -3
  148. package/build-module/components/global-styles/dimensions-panel.mjs.map +2 -2
  149. package/build-module/components/global-styles/hooks.mjs +33 -0
  150. package/build-module/components/global-styles/hooks.mjs.map +2 -2
  151. package/build-module/components/global-styles/typography-panel.mjs +84 -10
  152. package/build-module/components/global-styles/typography-panel.mjs.map +2 -2
  153. package/build-module/components/inspector-controls/groups.mjs +2 -0
  154. package/build-module/components/inspector-controls/groups.mjs.map +2 -2
  155. package/build-module/components/inspector-controls-tabs/styles-tab.mjs +75 -31
  156. package/build-module/components/inspector-controls-tabs/styles-tab.mjs.map +2 -2
  157. package/build-module/components/link-control/index.mjs +1 -2
  158. package/build-module/components/link-control/index.mjs.map +2 -2
  159. package/build-module/components/list-view/block-select-button.mjs +2 -17
  160. package/build-module/components/list-view/block-select-button.mjs.map +2 -2
  161. package/build-module/components/provider/use-block-sync.mjs +3 -1
  162. package/build-module/components/provider/use-block-sync.mjs.map +2 -2
  163. package/build-module/components/url-popover/image-url-input-ui.mjs +0 -2
  164. package/build-module/components/url-popover/image-url-input-ui.mjs.map +2 -2
  165. package/build-module/components/use-block-display-information/index.mjs +10 -3
  166. package/build-module/components/use-block-display-information/index.mjs.map +2 -2
  167. package/build-module/components/use-resize-canvas/index.mjs +6 -53
  168. package/build-module/components/use-resize-canvas/index.mjs.map +2 -2
  169. package/build-module/hooks/anchor.mjs +0 -1
  170. package/build-module/hooks/anchor.mjs.map +2 -2
  171. package/build-module/hooks/background.mjs +123 -75
  172. package/build-module/hooks/background.mjs.map +2 -2
  173. package/build-module/hooks/color.mjs +2 -175
  174. package/build-module/hooks/color.mjs.map +2 -2
  175. package/build-module/hooks/contrast-checker.mjs +32 -19
  176. package/build-module/hooks/contrast-checker.mjs.map +2 -2
  177. package/build-module/hooks/custom-class-name.mjs +0 -1
  178. package/build-module/hooks/custom-class-name.mjs.map +2 -2
  179. package/build-module/hooks/elements.mjs +115 -0
  180. package/build-module/hooks/elements.mjs.map +7 -0
  181. package/build-module/hooks/grid-visualizer.mjs +21 -11
  182. package/build-module/hooks/grid-visualizer.mjs.map +2 -2
  183. package/build-module/hooks/layout-child.mjs +41 -8
  184. package/build-module/hooks/layout-child.mjs.map +2 -2
  185. package/build-module/hooks/layout.mjs +6 -3
  186. package/build-module/hooks/layout.mjs.map +2 -2
  187. package/build-module/hooks/states.mjs +15 -23
  188. package/build-module/hooks/states.mjs.map +2 -2
  189. package/build-module/hooks/style.mjs +9 -5
  190. package/build-module/hooks/style.mjs.map +2 -2
  191. package/build-module/hooks/typography.mjs +62 -10
  192. package/build-module/hooks/typography.mjs.map +2 -2
  193. package/build-module/layouts/flex.mjs +105 -7
  194. package/build-module/layouts/flex.mjs.map +2 -2
  195. package/build-module/private-apis.mjs +0 -2
  196. package/build-module/private-apis.mjs.map +2 -2
  197. package/build-module/store/private-actions.mjs +14 -0
  198. package/build-module/store/private-actions.mjs.map +2 -2
  199. package/build-module/store/private-keys.mjs +0 -2
  200. package/build-module/store/private-keys.mjs.map +2 -2
  201. package/build-module/store/private-selectors.mjs +22 -6
  202. package/build-module/store/private-selectors.mjs.map +2 -2
  203. package/build-module/store/reducer.mjs +17 -3
  204. package/build-module/store/reducer.mjs.map +2 -2
  205. package/build-module/utils/block-bindings.mjs +9 -9
  206. package/build-module/utils/block-bindings.mjs.map +3 -3
  207. package/build-module/utils/color-values.mjs +9 -1
  208. package/build-module/utils/color-values.mjs.map +3 -3
  209. package/build-module/utils/dom.mjs +2 -5
  210. package/build-module/utils/dom.mjs.map +3 -3
  211. package/build-module/utils/fit-text-frontend.mjs +6 -2
  212. package/build-module/utils/fit-text-frontend.mjs.map +3 -3
  213. package/build-module/utils/fit-text-utils.mjs +1 -1
  214. package/build-module/utils/fit-text-utils.mjs.map +3 -3
  215. package/build-module/utils/format-font-style.mjs +1 -1
  216. package/build-module/utils/format-font-style.mjs.map +3 -3
  217. package/build-module/utils/format-font-weight.mjs +1 -1
  218. package/build-module/utils/format-font-weight.mjs.map +3 -3
  219. package/build-module/utils/get-editor-region.mjs +4 -2
  220. package/build-module/utils/get-editor-region.mjs.map +3 -3
  221. package/build-module/utils/get-font-styles-and-weights.mjs +8 -12
  222. package/build-module/utils/get-font-styles-and-weights.mjs.map +3 -3
  223. package/build-module/utils/get-px-from-css-unit.mjs +1 -1
  224. package/build-module/utils/get-px-from-css-unit.mjs.map +1 -1
  225. package/build-module/utils/index.mjs +1 -1
  226. package/build-module/utils/index.mjs.map +1 -1
  227. package/build-module/utils/math.mjs +1 -1
  228. package/build-module/utils/math.mjs.map +3 -3
  229. package/build-module/utils/object.mjs +8 -8
  230. package/build-module/utils/object.mjs.map +3 -3
  231. package/build-module/utils/order-inserter-block-items.mjs +1 -1
  232. package/build-module/utils/order-inserter-block-items.mjs.map +3 -3
  233. package/build-module/utils/pasting.mjs +4 -2
  234. package/build-module/utils/pasting.mjs.map +3 -3
  235. package/build-module/utils/selection.mjs +2 -1
  236. package/build-module/utils/selection.mjs.map +3 -3
  237. package/build-module/utils/sorting.mjs +9 -3
  238. package/build-module/utils/sorting.mjs.map +3 -3
  239. package/build-module/utils/transform-styles/index.mjs +3 -2
  240. package/build-module/utils/transform-styles/index.mjs.map +3 -3
  241. package/build-module/utils/transform-styles/postcss-urlrebase.d.mjs +1 -0
  242. package/build-module/utils/transform-styles/postcss-urlrebase.d.mjs.map +7 -0
  243. package/build-module/utils/transform-styles/types.mjs +1 -0
  244. package/build-module/utils/transform-styles/types.mjs.map +7 -0
  245. package/build-module/utils/types.mjs +1 -0
  246. package/build-module/utils/types.mjs.map +7 -0
  247. package/build-style/content-rtl.css +2 -0
  248. package/build-style/content.css +2 -0
  249. package/build-style/style-rtl.css +34 -41
  250. package/build-style/style.css +34 -41
  251. package/build-types/utils/block-bindings.d.ts +27 -0
  252. package/build-types/utils/block-bindings.d.ts.map +1 -0
  253. package/build-types/utils/color-values.d.ts +40 -0
  254. package/build-types/utils/color-values.d.ts.map +1 -0
  255. package/build-types/utils/dom.d.ts +19 -19
  256. package/build-types/utils/dom.d.ts.map +1 -1
  257. package/build-types/utils/fit-text-frontend.d.ts +7 -0
  258. package/build-types/utils/fit-text-frontend.d.ts.map +1 -0
  259. package/build-types/utils/fit-text-utils.d.ts +15 -0
  260. package/build-types/utils/fit-text-utils.d.ts.map +1 -0
  261. package/build-types/utils/format-font-style.d.ts +12 -0
  262. package/build-types/utils/format-font-style.d.ts.map +1 -0
  263. package/build-types/utils/format-font-weight.d.ts +12 -0
  264. package/build-types/utils/format-font-weight.d.ts.map +1 -0
  265. package/build-types/utils/get-editor-region.d.ts +9 -0
  266. package/build-types/utils/get-editor-region.d.ts.map +1 -0
  267. package/build-types/utils/get-font-styles-and-weights.d.ts +16 -0
  268. package/build-types/utils/get-font-styles-and-weights.d.ts.map +1 -0
  269. package/build-types/utils/get-px-from-css-unit.d.ts +10 -0
  270. package/build-types/utils/get-px-from-css-unit.d.ts.map +1 -0
  271. package/build-types/utils/index.d.ts +3 -0
  272. package/build-types/utils/index.d.ts.map +1 -0
  273. package/build-types/utils/math.d.ts +61 -0
  274. package/build-types/utils/math.d.ts.map +1 -0
  275. package/build-types/utils/object.d.ts +39 -0
  276. package/build-types/utils/object.d.ts.map +1 -0
  277. package/build-types/utils/order-inserter-block-items.d.ts +13 -0
  278. package/build-types/utils/order-inserter-block-items.d.ts.map +1 -0
  279. package/build-types/utils/pasting.d.ts +28 -0
  280. package/build-types/utils/pasting.d.ts.map +1 -0
  281. package/build-types/utils/selection.d.ts +21 -0
  282. package/build-types/utils/selection.d.ts.map +1 -0
  283. package/build-types/utils/sorting.d.ts +17 -0
  284. package/build-types/utils/sorting.d.ts.map +1 -0
  285. package/build-types/utils/transform-styles/index.d.ts +15 -0
  286. package/build-types/utils/transform-styles/index.d.ts.map +1 -0
  287. package/build-types/utils/transform-styles/types.d.ts +13 -0
  288. package/build-types/utils/transform-styles/types.d.ts.map +1 -0
  289. package/build-types/utils/types.d.ts +28 -0
  290. package/build-types/utils/types.d.ts.map +1 -0
  291. package/package.json +40 -39
  292. package/src/components/alignment-control/test/__snapshots__/index.js.snap +6 -0
  293. package/src/components/block-alignment-control/test/__snapshots__/index.js.snap +5 -0
  294. package/src/components/block-editing-mode/index.js +17 -9
  295. package/src/components/block-icon/test/__snapshots__/index.js.snap +1 -0
  296. package/src/components/block-inspector/index.js +43 -53
  297. package/src/components/block-rename/modal.js +0 -1
  298. package/src/components/block-toolbar/block-toolbar-icon.js +22 -6
  299. package/src/components/block-toolbar/test/block-toolbar-icon.js +99 -0
  300. package/src/components/block-vertical-alignment-control/test/__snapshots__/index.js.snap +4 -0
  301. package/src/components/colors-gradients/control.js +29 -12
  302. package/src/components/colors-gradients/dropdown.js +4 -1
  303. package/src/components/colors-gradients/style.scss +39 -2
  304. package/src/components/contrast-checker/README.md +9 -0
  305. package/src/components/contrast-checker/index.js +42 -3
  306. package/src/components/date-format-picker/index.js +0 -1
  307. package/src/components/default-block-appender/content.scss +3 -0
  308. package/src/components/global-styles/background-panel.js +201 -34
  309. package/src/components/global-styles/color-gradient-dropdown-item.js +258 -0
  310. package/src/components/global-styles/color-panel.js +125 -487
  311. package/src/components/global-styles/dimensions-panel.js +0 -3
  312. package/src/components/global-styles/hooks.js +45 -0
  313. package/src/components/global-styles/test/background-panel.js +56 -0
  314. package/src/components/global-styles/test/color-panel.js +172 -118
  315. package/src/components/global-styles/test/typography-panel.js +167 -0
  316. package/src/components/global-styles/typography-panel.js +100 -11
  317. package/src/components/inspector-controls/README.md +0 -2
  318. package/src/components/inspector-controls/groups.js +2 -0
  319. package/src/components/inspector-controls-tabs/styles-tab.js +74 -28
  320. package/src/components/link-control/index.js +0 -1
  321. package/src/components/link-control/test/index.js +2 -3
  322. package/src/components/list-view/block-select-button.js +2 -17
  323. package/src/components/provider/use-block-sync.js +3 -1
  324. package/src/components/rich-text/content.scss +2 -0
  325. package/src/components/url-popover/image-url-input-ui.js +0 -2
  326. package/src/components/use-block-display-information/index.js +15 -2
  327. package/src/components/use-block-display-information/test/index.js +140 -0
  328. package/src/components/use-resize-canvas/index.js +10 -71
  329. package/src/hooks/anchor.js +0 -1
  330. package/src/hooks/background.js +210 -133
  331. package/src/hooks/background.scss +0 -35
  332. package/src/hooks/color.js +2 -205
  333. package/src/hooks/color.scss +3 -9
  334. package/src/hooks/contrast-checker.js +60 -17
  335. package/src/hooks/custom-class-name.js +0 -1
  336. package/src/hooks/elements.js +140 -0
  337. package/src/hooks/elements.scss +8 -0
  338. package/src/hooks/grid-visualizer.js +59 -45
  339. package/src/hooks/layout-child.js +51 -12
  340. package/src/hooks/layout.js +6 -3
  341. package/src/hooks/states.js +32 -28
  342. package/src/hooks/style.js +11 -7
  343. package/src/hooks/test/background.js +59 -0
  344. package/src/hooks/test/block-style-state.js +14 -14
  345. package/src/hooks/test/layout.js +6 -6
  346. package/src/hooks/test/style.js +8 -8
  347. package/src/hooks/typography.js +70 -6
  348. package/src/layouts/flex.js +118 -15
  349. package/src/private-apis.js +0 -2
  350. package/src/store/private-actions.js +31 -0
  351. package/src/store/private-keys.js +0 -1
  352. package/src/store/private-selectors.js +43 -7
  353. package/src/store/reducer.js +37 -2
  354. package/src/store/test/private-selectors.js +39 -14
  355. package/src/store/test/reducer.js +91 -12
  356. package/src/style.scss +1 -0
  357. package/src/utils/block-bindings.ts +51 -0
  358. package/src/utils/color-values.ts +63 -0
  359. package/src/utils/{dom.js → dom.ts} +27 -27
  360. package/src/utils/{fit-text-frontend.js → fit-text-frontend.ts} +12 -4
  361. package/src/utils/{fit-text-utils.js → fit-text-utils.ts} +15 -7
  362. package/src/utils/{format-font-style.js → format-font-style.ts} +10 -3
  363. package/src/utils/{format-font-weight.js → format-font-weight.ts} +10 -3
  364. package/src/utils/{get-editor-region.js → get-editor-region.ts} +10 -6
  365. package/src/utils/{get-font-styles-and-weights.js → get-font-styles-and-weights.ts} +21 -17
  366. package/src/utils/{math.js → math.ts} +37 -30
  367. package/src/utils/object.ts +89 -0
  368. package/src/utils/{order-inserter-block-items.js → order-inserter-block-items.ts} +8 -5
  369. package/src/utils/{pasting.js → pasting.ts} +18 -11
  370. package/src/utils/{selection.js → selection.ts} +11 -4
  371. package/src/utils/sorting.ts +81 -0
  372. package/src/utils/test/color-values.js +44 -1
  373. package/src/utils/transform-styles/{index.js → index.ts} +25 -25
  374. package/src/utils/transform-styles/postcss-urlrebase.d.ts +15 -0
  375. package/src/utils/transform-styles/types.ts +13 -0
  376. package/src/utils/types.ts +29 -0
  377. package/src/components/use-resize-canvas/README.md +0 -37
  378. package/src/utils/block-bindings.js +0 -46
  379. package/src/utils/color-values.js +0 -28
  380. package/src/utils/object.js +0 -67
  381. package/src/utils/sorting.js +0 -54
  382. /package/src/utils/{get-px-from-css-unit.js → get-px-from-css-unit.ts} +0 -0
  383. /package/src/utils/{index.js → index.ts} +0 -0
@@ -9,6 +9,7 @@ import { useState } from '@wordpress/element';
9
9
  * Internal dependencies
10
10
  */
11
11
  import { store as blockEditorStore } from '../store';
12
+ import { unlock } from '../lock-unlock';
12
13
  import { useStyleOverride } from './utils';
13
14
  import { useLayout } from '../components/block-list/layout';
14
15
  import {
@@ -16,16 +17,21 @@ import {
16
17
  GridItemResizer,
17
18
  GridItemMovers,
18
19
  } from '../components/grid';
20
+ import { useBlockElement } from '../components/block-list/use-block-props/use-block-refs';
19
21
  import useBlockVisibility from '../components/block-visibility/use-block-visibility';
20
22
  import { deviceTypeKey } from '../store/private-keys';
21
23
  import { BLOCK_VISIBILITY_VIEWPORTS } from '../components/block-visibility/constants';
24
+ import {
25
+ DEFAULT_BLOCK_STYLE_STATE,
26
+ getStyleForState,
27
+ } from './block-style-state';
22
28
 
23
29
  // Used for generating the instance ID
24
30
  const LAYOUT_CHILD_BLOCK_PROPS_REFERENCE = {};
25
31
  // Keep in sync with WP_Theme_JSON_Gutenberg::RESPONSIVE_BREAKPOINTS.
26
32
  const RESPONSIVE_BREAKPOINTS = {
27
- mobile: '@media (width <= 480px)',
28
- tablet: '@media (480px < width <= 782px)',
33
+ '@mobile': '@media (width <= 480px)',
34
+ '@tablet': '@media (480px < width <= 782px)',
29
35
  };
30
36
 
31
37
  // These are the serialized `selfStretch` values. `max` used to be called
@@ -252,7 +258,10 @@ export function getResponsiveChildLayoutStyles( {
252
258
 
253
259
  return Object.entries( RESPONSIVE_BREAKPOINTS )
254
260
  .map( ( [ viewport, mediaQuery ] ) => {
255
- const viewportLayout = style?.[ viewport ]?.layout;
261
+ const viewportLayout = getStyleForState( style, {
262
+ viewport,
263
+ pseudo: DEFAULT_BLOCK_STYLE_STATE.pseudo,
264
+ } )?.layout;
256
265
  if ( ! viewportLayout || ! Object.keys( viewportLayout ).length ) {
257
266
  return '';
258
267
  }
@@ -390,6 +399,9 @@ function GridTools( {
390
399
  const parentAttributes = getBlockAttributes( _rootClientId );
391
400
  const blockAttributes = getBlockAttributes( clientId );
392
401
  const settings = getSettings();
402
+ const currentDeviceType =
403
+ settings?.[ deviceTypeKey ]?.toLowerCase() ||
404
+ BLOCK_VISIBILITY_VIEWPORTS.desktop.key;
393
405
 
394
406
  return {
395
407
  rootClientId: _rootClientId,
@@ -398,9 +410,7 @@ function GridTools( {
398
410
  parentAttributes?.metadata?.blockVisibility,
399
411
  blockBlockVisibility:
400
412
  blockAttributes?.metadata?.blockVisibility,
401
- deviceType:
402
- settings?.[ deviceTypeKey ]?.toLowerCase() ||
403
- BLOCK_VISIBILITY_VIEWPORTS.desktop.key,
413
+ deviceType: currentDeviceType,
404
414
  // Check if the selected child block is itself a grid.
405
415
  isChildBlockAGrid: blockAttributes?.layout?.type === 'grid',
406
416
  };
@@ -408,16 +418,45 @@ function GridTools( {
408
418
  [ clientId ]
409
419
  );
410
420
 
411
- const { isBlockCurrentlyHidden: isParentBlockCurrentlyHidden } =
412
- useBlockVisibility( {
413
- blockVisibility: parentBlockVisibility,
414
- deviceType,
415
- } );
421
+ // Get the block's DOM element to derive the canvas iframe window,
422
+ // so viewport detection matches the actual block rendering context
423
+ const blockElement = useBlockElement( clientId );
424
+ const rawCanvasView = blockElement?.ownerDocument?.defaultView;
425
+ const canvasView = rawCanvasView === null ? undefined : rawCanvasView;
426
+
427
+ const {
428
+ isBlockCurrentlyHidden: isParentBlockCurrentlyHidden,
429
+ currentViewport,
430
+ } = useBlockVisibility( {
431
+ blockVisibility: parentBlockVisibility,
432
+ deviceType,
433
+ view: canvasView,
434
+ } );
435
+
436
+ // Check whether any ancestor of the parent grid is hidden at the viewport
437
+ // actually detected from the canvas, so it stays consistent with how
438
+ // blocks are hidden.
439
+ const isAnyAncestorHidden = useSelect(
440
+ ( select ) => {
441
+ if ( ! rootClientId ) {
442
+ return false;
443
+ }
444
+ const { isBlockParentHiddenAtViewport } = unlock(
445
+ select( blockEditorStore )
446
+ );
447
+ return isBlockParentHiddenAtViewport(
448
+ rootClientId,
449
+ currentViewport
450
+ );
451
+ },
452
+ [ rootClientId, currentViewport ]
453
+ );
416
454
 
417
455
  const { isBlockCurrentlyHidden: isBlockItselfCurrentlyHidden } =
418
456
  useBlockVisibility( {
419
457
  blockVisibility: blockBlockVisibility,
420
458
  deviceType,
459
+ view: canvasView,
421
460
  } );
422
461
 
423
462
  // Use useState() instead of useRef() so that GridItemResizer updates when ref is set.
@@ -425,7 +464,7 @@ function GridTools( {
425
464
 
426
465
  const childGridClientId = isChildBlockAGrid ? clientId : undefined;
427
466
 
428
- if ( ! isVisible || isParentBlockCurrentlyHidden ) {
467
+ if ( ! isVisible || isParentBlockCurrentlyHidden || isAnyAncestorHidden ) {
429
468
  return null;
430
469
  }
431
470
 
@@ -52,8 +52,8 @@ const layoutBlockSupportKey = 'layout';
52
52
  // Keep in sync with WP_Theme_JSON_Gutenberg::RESPONSIVE_BREAKPOINTS and
53
53
  // packages/global-styles-engine/src/core/render.tsx.
54
54
  const RESPONSIVE_BREAKPOINTS = {
55
- mobile: '@media (width <= 480px)',
56
- tablet: '@media (480px < width <= 782px)',
55
+ '@mobile': '@media (width <= 480px)',
56
+ '@tablet': '@media (480px < width <= 782px)',
57
57
  };
58
58
  const CHILD_LAYOUT_KEYS = [
59
59
  'selfStretch',
@@ -252,7 +252,10 @@ export function getResponsiveLayoutStyles( {
252
252
  } ) {
253
253
  return Object.entries( RESPONSIVE_BREAKPOINTS )
254
254
  .map( ( [ viewport, mediaQuery ] ) => {
255
- const viewportStyle = attributes?.style?.[ viewport ];
255
+ const viewportStyle = getStyleForState( attributes?.style, {
256
+ viewport,
257
+ pseudo: DEFAULT_BLOCK_STYLE_STATE.pseudo,
258
+ } );
256
259
  const viewportLayout = getLayoutContainerValues(
257
260
  viewportStyle?.layout
258
261
  );
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * WordPress dependencies
3
3
  */
4
- import { getBlockType } from '@wordpress/blocks';
5
4
  import { __ } from '@wordpress/i18n';
6
5
 
7
6
  /**
@@ -19,10 +18,23 @@ export const PSEUDO_STATE_LABELS = {
19
18
  };
20
19
 
21
20
  export const RESPONSIVE_STATE_LABELS = {
22
- tablet: __( 'Tablet' ),
23
- mobile: __( 'Mobile' ),
21
+ '@tablet': __( 'Tablet' ),
22
+ '@mobile': __( 'Mobile' ),
24
23
  };
25
24
 
25
+ // Viewport states are selected globally via the editor's device preview
26
+ // (Responsive editing). 'default' maps to the Desktop device, the remaining
27
+ // options are derived from the shared responsive-state labels.
28
+ const DEVICE_STATE_OPTIONS = [
29
+ { value: 'default', label: __( 'Desktop' ) },
30
+ ...Object.entries( RESPONSIVE_STATE_LABELS ).map(
31
+ ( [ value, label ] ) => ( {
32
+ value,
33
+ label,
34
+ } )
35
+ ),
36
+ ];
37
+
26
38
  // Keep in sync with WP_Theme_JSON_Gutenberg::VALID_BLOCK_PSEUDO_SELECTORS
27
39
  // and packages/global-styles-engine/src/core/render.tsx.
28
40
  export const VALID_BLOCK_PSEUDO_STATES = {
@@ -43,23 +55,11 @@ function getPseudoStateOptions( name ) {
43
55
 
44
56
  const DEFAULT_STATE_VALUE = 'default';
45
57
 
46
- function getViewportStateOptions( name ) {
47
- if ( ! getBlockType( name )?.attributes?.style ) {
48
- return [];
49
- }
50
-
51
- return Object.entries( RESPONSIVE_STATE_LABELS ).map(
52
- ( [ value, label ] ) => ( {
53
- value,
54
- label,
55
- } )
56
- );
57
- }
58
-
59
58
  /**
60
- * Renders a style-state selector in the block card header.
61
- * Viewport states are shown for blocks with a style attribute, while
62
- * pseudo-states are shown for blocks with configured pseudo-state support.
59
+ * Renders a pseudo-state selector in the block card header.
60
+ *
61
+ * Viewport states are selected globally via the editor's device preview
62
+ * (Responsive editing), so only pseudo-states are exposed here.
63
63
  *
64
64
  * @param {Object} props Component props.
65
65
  * @param {string} props.name Block name.
@@ -68,21 +68,17 @@ function getViewportStateOptions( name ) {
68
68
  * @return {Element|null} State control component, or null if not applicable.
69
69
  */
70
70
  export function BlockStatesControl( { name, value, onChange } ) {
71
- const viewportStateOptions = getViewportStateOptions( name );
72
71
  const pseudoStateOptions = getPseudoStateOptions( name );
73
72
  const dropdownMenuProps = useToolsPanelDropdownMenuProps();
74
73
 
75
- if ( ! viewportStateOptions.length && ! pseudoStateOptions.length ) {
74
+ if ( ! pseudoStateOptions.length ) {
76
75
  return null;
77
76
  }
78
77
 
79
78
  return (
80
79
  <StateControl
81
- viewportStates={ viewportStateOptions }
82
80
  pseudoStates={ pseudoStateOptions }
83
- viewportValue={ value?.viewport ?? DEFAULT_STATE_VALUE }
84
81
  pseudoStateValue={ value?.pseudo ?? DEFAULT_STATE_VALUE }
85
- onChangeViewport={ ( viewport ) => onChange( { viewport } ) }
86
82
  onChangePseudoState={ ( pseudo ) => onChange( { pseudo } ) }
87
83
  popoverProps={ dropdownMenuProps.popoverProps }
88
84
  showText={ false }
@@ -90,17 +86,25 @@ export function BlockStatesControl( { name, value, onChange } ) {
90
86
  );
91
87
  }
92
88
 
93
- export function BlockStateBadges( { name, value } ) {
94
- const viewportStateOptions = getViewportStateOptions( name );
89
+ /**
90
+ * Renders badges for the active style states of a block.
91
+ *
92
+ * @param {Object} props Component props.
93
+ * @param {string} props.name Block name.
94
+ * @param {Object} props.value Currently selected style-state value.
95
+ * @param {boolean} props.isResponsiveEditing Whether Responsive editing is enabled.
96
+ * @return {Element|null} Badges component, or null if there is nothing to show.
97
+ */
98
+ export function BlockStateBadges( { name, value, isResponsiveEditing } ) {
95
99
  const pseudoStateOptions = getPseudoStateOptions( name );
96
100
 
97
- if ( ! viewportStateOptions.length && ! pseudoStateOptions.length ) {
101
+ if ( ! pseudoStateOptions.length && ! isResponsiveEditing ) {
98
102
  return null;
99
103
  }
100
104
 
101
105
  return (
102
106
  <StateControlBadges
103
- viewportStates={ viewportStateOptions }
107
+ viewportStates={ isResponsiveEditing ? DEVICE_STATE_OPTIONS : [] }
104
108
  pseudoStates={ pseudoStateOptions }
105
109
  viewportValue={ value?.viewport ?? DEFAULT_STATE_VALUE }
106
110
  pseudoStateValue={ value?.pseudo ?? DEFAULT_STATE_VALUE }
@@ -19,7 +19,8 @@ import { getCSSRules, compileCSS } from '@wordpress/style-engine';
19
19
  */
20
20
  import { BACKGROUND_SUPPORT_KEY, BackgroundImagePanel } from './background';
21
21
  import { BORDER_SUPPORT_KEY, BorderPanel, SHADOW_SUPPORT_KEY } from './border';
22
- import { COLOR_SUPPORT_KEY, ColorEdit } from './color';
22
+ import { COLOR_SUPPORT_KEY } from './color';
23
+ import { ElementsEdit } from './elements';
23
24
  import {
24
25
  TypographyPanel,
25
26
  TYPOGRAPHY_SUPPORT_KEY,
@@ -57,8 +58,8 @@ const BORDER_SIDES = [ 'Top', 'Right', 'Bottom', 'Left' ];
57
58
  // Keep in sync with WP_Theme_JSON_Gutenberg::RESPONSIVE_BREAKPOINTS and
58
59
  // packages/global-styles-engine/src/core/render.tsx.
59
60
  const RESPONSIVE_BREAKPOINTS = {
60
- mobile: '@media (width <= 480px)',
61
- tablet: '@media (480px < width <= 782px)',
61
+ '@mobile': '@media (width <= 480px)',
62
+ '@tablet': '@media (480px < width <= 782px)',
62
63
  };
63
64
 
64
65
  const styleSupportKeys = [
@@ -419,7 +420,10 @@ export function getResponsiveStateCSSRules( style, name, baseSelector ) {
419
420
 
420
421
  Object.entries( RESPONSIVE_BREAKPOINTS ).forEach(
421
422
  ( [ viewport, mediaQuery ] ) => {
422
- const viewportStyles = style?.[ viewport ];
423
+ const viewportStyles = getStyleForState( style, {
424
+ viewport,
425
+ pseudo: DEFAULT_BLOCK_STYLE_STATE.pseudo,
426
+ } );
423
427
  if ( ! viewportStyles ) {
424
428
  return;
425
429
  }
@@ -464,8 +468,8 @@ export function getResponsiveStateCSSRules( style, name, baseSelector ) {
464
468
  * Returns the style value used to force-preview a selected state on canvas.
465
469
  *
466
470
  * Responsive pseudo states inherit from their default-viewport pseudo state.
467
- * For example, selecting `mobile + :hover` should preview styles from
468
- * `:hover`, with `mobile.:hover` values layered on top when present.
471
+ * For example, selecting `@mobile + :hover` should preview styles from
472
+ * `:hover`, with `@mobile.:hover` values layered on top when present.
469
473
  *
470
474
  * @param {Object} style Block style object.
471
475
  * @param {Object} selectedState Selected block style state.
@@ -848,7 +852,7 @@ function BlockStyleControls( {
848
852
 
849
853
  return (
850
854
  <BlockStyleStateProvider value={ selectedState }>
851
- <ColorEdit { ...passedProps } />
855
+ <ElementsEdit { ...passedProps } />
852
856
  <BackgroundImagePanel { ...passedProps } />
853
857
  <TypographyPanel { ...passedProps } />
854
858
  <BorderPanel { ...passedProps } />
@@ -3,10 +3,69 @@
3
3
  */
4
4
  import {
5
5
  setBackgroundStyleDefaults,
6
+ backgroundResetAllFilter,
6
7
  BACKGROUND_BLOCK_DEFAULT_VALUES,
7
8
  } from '../background';
8
9
 
9
10
  describe( 'background', () => {
11
+ describe( 'backgroundResetAllFilter', () => {
12
+ it( 'clears every background-owned value, including a custom legacy color.gradient', () => {
13
+ const result = backgroundResetAllFilter( {
14
+ backgroundColor: 'primary',
15
+ gradient: 'vivid-cyan-blue',
16
+ className: 'is-style-fancy has-background',
17
+ style: {
18
+ color: {
19
+ text: 'var:preset|color|contrast',
20
+ background: 'var:preset|color|base',
21
+ gradient:
22
+ 'linear-gradient(135deg,rgb(100,100,200) 0%,rgb(200,100,100) 100%)',
23
+ },
24
+ spacing: { padding: '10px' },
25
+ background: { backgroundImage: { url: 'image.png' } },
26
+ },
27
+ } );
28
+
29
+ // Background color and gradient attributes are cleared.
30
+ expect( result.backgroundColor ).toBeUndefined();
31
+ expect( result.gradient ).toBeUndefined();
32
+
33
+ // The legacy `color.gradient` (a raw/custom value) is cleared. This
34
+ // is the regression guard: it was previously kept for blocks
35
+ // without `background.gradient` support.
36
+ expect( result.style?.color?.gradient ).toBeUndefined();
37
+ expect( result.style?.color?.background ).toBeUndefined();
38
+ expect( result.style?.background ).toBeUndefined();
39
+
40
+ // Unrelated styles are preserved.
41
+ expect( result.style?.color?.text ).toBe(
42
+ 'var:preset|color|contrast'
43
+ );
44
+ expect( result.style?.spacing ).toEqual( { padding: '10px' } );
45
+
46
+ // The `has-background` class is removed, other classes remain.
47
+ expect( result.className ).toBe( 'is-style-fancy' );
48
+ } );
49
+
50
+ it( 'drops className entirely when has-background was its only value', () => {
51
+ const result = backgroundResetAllFilter( {
52
+ className: 'has-background',
53
+ style: {
54
+ color: { gradient: 'linear-gradient(0deg,#000,#fff)' },
55
+ },
56
+ } );
57
+ expect( result.className ).toBeUndefined();
58
+ } );
59
+
60
+ it( 'leaves className untouched when has-background is not present', () => {
61
+ const result = backgroundResetAllFilter( {
62
+ className: 'is-style-fancy',
63
+ style: {},
64
+ } );
65
+ expect( result.className ).toBe( 'is-style-fancy' );
66
+ } );
67
+ } );
68
+
10
69
  describe( 'setBackgroundStyleDefaults', () => {
11
70
  const backgroundStyles = {
12
71
  backgroundImage: { id: 123, url: 'image.png' },
@@ -38,12 +38,12 @@ describe( 'getStyleForState', () => {
38
38
  it( 'returns the selected viewport state style', () => {
39
39
  const style = {
40
40
  color: { text: '#000000' },
41
- mobile: { color: { text: '#ff0000' } },
41
+ '@mobile': { color: { text: '#ff0000' } },
42
42
  };
43
43
 
44
44
  expect(
45
45
  getStyleForState( style, {
46
- viewport: 'mobile',
46
+ viewport: '@mobile',
47
47
  pseudo: 'default',
48
48
  } )
49
49
  ).toEqual( {
@@ -53,14 +53,14 @@ describe( 'getStyleForState', () => {
53
53
 
54
54
  it( 'returns the selected viewport pseudo state style', () => {
55
55
  const style = {
56
- mobile: {
56
+ '@mobile': {
57
57
  ':hover': { color: { text: '#ff0000' } },
58
58
  },
59
59
  };
60
60
 
61
61
  expect(
62
62
  getStyleForState( style, {
63
- viewport: 'mobile',
63
+ viewport: '@mobile',
64
64
  pseudo: ':hover',
65
65
  } )
66
66
  ).toEqual( {
@@ -105,14 +105,14 @@ describe( 'setStyleForState', () => {
105
105
  setStyleForState(
106
106
  {
107
107
  color: { text: '#000000' },
108
- mobile: { color: { text: '#ff0000' } },
108
+ '@mobile': { color: { text: '#ff0000' } },
109
109
  },
110
- { viewport: 'mobile', pseudo: 'default' },
110
+ { viewport: '@mobile', pseudo: 'default' },
111
111
  { typography: { fontSize: '32px' } }
112
112
  )
113
113
  ).toEqual( {
114
114
  color: { text: '#000000' },
115
- mobile: { typography: { fontSize: '32px' } },
115
+ '@mobile': { typography: { fontSize: '32px' } },
116
116
  } );
117
117
  } );
118
118
 
@@ -121,17 +121,17 @@ describe( 'setStyleForState', () => {
121
121
  setStyleForState(
122
122
  {
123
123
  color: { text: '#000000' },
124
- mobile: {
124
+ '@mobile': {
125
125
  color: { text: '#ff0000' },
126
126
  ':hover': { color: { text: '#00ff00' } },
127
127
  },
128
128
  },
129
- { viewport: 'mobile', pseudo: ':hover' },
129
+ { viewport: '@mobile', pseudo: ':hover' },
130
130
  { typography: { fontSize: '32px' } }
131
131
  )
132
132
  ).toEqual( {
133
133
  color: { text: '#000000' },
134
- mobile: {
134
+ '@mobile': {
135
135
  color: { text: '#ff0000' },
136
136
  ':hover': { typography: { fontSize: '32px' } },
137
137
  },
@@ -234,7 +234,7 @@ describe( 'scopeResetAllFilterToState', () => {
234
234
  const attributes = {
235
235
  style: {
236
236
  color: { text: '#000000' },
237
- mobile: {
237
+ '@mobile': {
238
238
  color: { text: '#ff0000' },
239
239
  ':hover': { color: { text: '#00ff00' } },
240
240
  },
@@ -242,17 +242,17 @@ describe( 'scopeResetAllFilterToState', () => {
242
242
  };
243
243
 
244
244
  const result = scopeResetAllFilterToState(
245
- { viewport: 'mobile', pseudo: ':hover' },
245
+ { viewport: '@mobile', pseudo: ':hover' },
246
246
  innerReset
247
247
  )( attributes );
248
248
 
249
249
  expect( innerReset ).toHaveBeenCalledWith( {
250
- style: attributes.style.mobile[ ':hover' ],
250
+ style: attributes.style[ '@mobile' ][ ':hover' ],
251
251
  } );
252
252
  expect( result ).toEqual( {
253
253
  style: {
254
254
  color: { text: '#000000' },
255
- mobile: { color: { text: '#ff0000' } },
255
+ '@mobile': { color: { text: '#ff0000' } },
256
256
  },
257
257
  } );
258
258
  } );
@@ -52,7 +52,7 @@ describe( 'layout', () => {
52
52
  getResponsiveLayoutStyles( {
53
53
  attributes: {
54
54
  style: {
55
- mobile: {
55
+ '@mobile': {
56
56
  spacing: {
57
57
  blockGap: '12px',
58
58
  },
@@ -74,7 +74,7 @@ describe( 'layout', () => {
74
74
  getResponsiveLayoutStyles( {
75
75
  attributes: {
76
76
  style: {
77
- mobile: {
77
+ '@mobile': {
78
78
  spacing: {
79
79
  blockGap: '12px',
80
80
  },
@@ -96,7 +96,7 @@ describe( 'layout', () => {
96
96
  getResponsiveLayoutStyles( {
97
97
  attributes: {
98
98
  style: {
99
- mobile: {
99
+ '@mobile': {
100
100
  layout: {
101
101
  minimumColumnWidth: '8rem',
102
102
  },
@@ -118,7 +118,7 @@ describe( 'layout', () => {
118
118
  getResponsiveLayoutStyles( {
119
119
  attributes: {
120
120
  style: {
121
- mobile: {
121
+ '@mobile': {
122
122
  layout: {
123
123
  columnCount: 3,
124
124
  },
@@ -140,7 +140,7 @@ describe( 'layout', () => {
140
140
  getResponsiveLayoutStyles( {
141
141
  attributes: {
142
142
  style: {
143
- mobile: {
143
+ '@mobile': {
144
144
  layout: {
145
145
  columnCount: 3,
146
146
  },
@@ -165,7 +165,7 @@ describe( 'layout', () => {
165
165
  getResponsiveLayoutStyles( {
166
166
  attributes: {
167
167
  style: {
168
- tablet: {
168
+ '@tablet': {
169
169
  spacing: {
170
170
  blockGap: '12px',
171
171
  },
@@ -402,7 +402,7 @@ describe( 'getResponsiveStateCSSRules', () => {
402
402
  expect(
403
403
  getResponsiveStateCSSRules(
404
404
  {
405
- mobile: {
405
+ '@mobile': {
406
406
  color: { text: 'red' },
407
407
  },
408
408
  },
@@ -418,7 +418,7 @@ describe( 'getResponsiveStateCSSRules', () => {
418
418
  expect(
419
419
  getResponsiveStateCSSRules(
420
420
  {
421
- mobile: {
421
+ '@mobile': {
422
422
  color: { background: '#ff00d0' },
423
423
  dimensions: { width: '50%' },
424
424
  },
@@ -435,7 +435,7 @@ describe( 'getResponsiveStateCSSRules', () => {
435
435
  expect(
436
436
  getResponsiveStateCSSRules(
437
437
  {
438
- mobile: {
438
+ '@mobile': {
439
439
  dimensions: { objectFit: 'fill' },
440
440
  },
441
441
  },
@@ -451,7 +451,7 @@ describe( 'getResponsiveStateCSSRules', () => {
451
451
  expect(
452
452
  getResponsiveStateCSSRules(
453
453
  {
454
- mobile: {
454
+ '@mobile': {
455
455
  ':hover': {
456
456
  color: { background: 'black' },
457
457
  },
@@ -469,7 +469,7 @@ describe( 'getResponsiveStateCSSRules', () => {
469
469
  expect(
470
470
  getResponsiveStateCSSRules(
471
471
  {
472
- mobile: {
472
+ '@mobile': {
473
473
  elements: {
474
474
  link: {
475
475
  color: { text: 'blue' },
@@ -510,7 +510,7 @@ describe( 'getCanvasStateStyleValue', () => {
510
510
  color: { text: 'red' },
511
511
  },
512
512
  },
513
- { viewport: 'mobile', pseudo: ':hover' }
513
+ { viewport: '@mobile', pseudo: ':hover' }
514
514
  )
515
515
  ).toEqual( {
516
516
  color: { text: 'red' },
@@ -524,13 +524,13 @@ describe( 'getCanvasStateStyleValue', () => {
524
524
  ':hover': {
525
525
  color: { background: 'blue', text: 'red' },
526
526
  },
527
- mobile: {
527
+ '@mobile': {
528
528
  ':hover': {
529
529
  color: { text: 'yellow' },
530
530
  },
531
531
  },
532
532
  },
533
- { viewport: 'mobile', pseudo: ':hover' }
533
+ { viewport: '@mobile', pseudo: ':hover' }
534
534
  )
535
535
  ).toEqual( {
536
536
  color: { background: 'blue', text: 'yellow' },